ai-saas-guard 0.32.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,7 +29,9 @@
29
29
 
30
30
  ## Before You Invite Users
31
31
 
32
- AI can make a SaaS look finished: login works, checkout opens, the dashboard loads, and tests are green. The launch risk is usually hidden in trust-boundary code that decides who gets access, who pays, what data they can see, and whether failures are visible.
32
+ AI-built SaaS can look ready before it is ready: login works, checkout opens, the dashboard loads, and tests are green. The launch risk is usually hidden in trust-boundary code that decides who gets access, who pays, what data they can see, and whether failures are visible.
33
+
34
+ Start with the 30-second copy-paste demo: `npx ai-saas-guard@latest demo --summary`. No signup, no code upload, no LLM call. See [docs/demo-terminal-output.txt](docs/demo-terminal-output.txt) and [compare with alternatives](docs/launch-gate-positioning.md).
33
35
 
34
36
  These are the failures that hurt after real users arrive:
35
37
 
@@ -44,6 +46,16 @@ These are the failures that hurt after real users arrive:
44
46
 
45
47
  `ai-saas-guard` gives you a short local review queue for those risks. It does not prove the app is secure, certify a release, or replace human review. It tells founders, solo builders, small teams, and reviewers what deserves attention first.
46
48
 
49
+ ## 30-Second Copy-Paste Demo
50
+
51
+ No signup, no code upload, no LLM call:
52
+
53
+ ```bash
54
+ npx ai-saas-guard@latest demo --summary
55
+ ```
56
+
57
+ The demo scans two packaged fixtures: one risky AI-built SaaS and one safer version. See the saved terminal sample in [docs/demo-terminal-output.txt](docs/demo-terminal-output.txt), then compare with alternatives in [docs/launch-gate-positioning.md](docs/launch-gate-positioning.md).
58
+
47
59
  ## 60-Second Local Check
48
60
 
49
61
  See the public demo output without cloning a repo:
@@ -187,13 +199,13 @@ The CLI is published on npm as `ai-saas-guard`, and the GitHub Action is availab
187
199
  | Area | Status |
188
200
  | --- | --- |
189
201
  | Public GitHub repository | Available |
190
- | npm CLI | `ai-saas-guard@0.32.0` |
191
- | GitHub Action | `zr9959/ai-saas-guard@v0` or fixed tag `v0.32.0` |
202
+ | npm CLI | `ai-saas-guard@0.33.0` |
203
+ | GitHub Action | `zr9959/ai-saas-guard@v0` or fixed tag `v0.33.0` |
192
204
  | Outputs | Short summary, terminal, JSON, SARIF, and PR-focused markdown |
193
205
  | Project config | `.ai-saas-guard.json` rule toggles, severity overrides, suppressions, and fail thresholds |
194
206
  | Privacy model | Local-first, read-only scan commands, no LLM calls, no code upload |
195
- | Versioned Action tags | `v0.32.0`, `v0` |
196
- | Current release | `0.32.0` adds deployed worker staging evidence: public HTTPS health validation, deployed success/failure cleanup probes, log-boundary checks, and release-gate evaluation for a Node/container read-only checkout worker candidate |
207
+ | Versioned Action tags | `v0.33.0`, `v0` |
208
+ | Current release | `0.33.0` sharpens the README first screen, adds a saved terminal demo output, and adds deployed worker staging evidence automation that validates safe logs before building hosted release-gate input |
197
209
  | npm publishing | Trusted Publisher/OIDC, no long-lived publish token |
198
210
  | Repository trust hardening | Strict branch protection, Dependabot, CodeQL, fast-check fuzzing, signed release provenance assets, private vulnerability reporting, secret scanning, and push protection |
199
211
  | Cloudflare hosted ingress | Deployed at `https://ai-saas-guard-hosted.zr9959.workers.dev`; signed GitHub App webhook delivery and compact Check Run smoke now pass in staging |
@@ -312,7 +324,7 @@ The hosted staging deployment planner is documented in [docs/hosted-staging-depl
312
324
 
313
325
  The hosted staging harness is documented in [docs/hosted-staging-harness.md](docs/hosted-staging-harness.md). It exports `createFileBackedHostedStagingHarness`, `createHostedStagingHarnessEvidence`, `createHostedStagingReleaseEvidenceBundle`, `evaluateHostedStagingReleaseEvidenceBundle`, and `validateHostedLogBoundary` from `ai-saas-guard/hosted/staging-harness`. It runs signed webhook replay through the provider-independent hosted runtime with local file-backed queue, compact report, and Check Run adapters, verifies worker sandbox cleanup, turns success/failure cleanup probes plus log-boundary samples into release-gate evidence, and evaluates the hosted gate without cloud calls. It is a staging rehearsal tool only; it does not call cloud providers, create a GitHub App, publish live Check Runs, or expose a public hosted service.
314
326
 
315
- Deployed worker staging evidence is documented in [docs/hosted-deployed-worker-staging.md](docs/hosted-deployed-worker-staging.md). It exports `createHostedDeployedWorkerStagingEvidenceBundle` and `evaluateHostedDeployedWorkerStagingReleaseGate` from `ai-saas-guard/hosted/deployed-staging`. It turns public HTTPS health, signed webhook replay, deployed worker cleanup, log-boundary samples, and external CI/scan/rollback evidence into the hosted release gate for a Node/container read-only checkout worker candidate. It does not deploy cloud resources or claim production hosted exposure.
327
+ Deployed worker staging evidence is documented in [docs/hosted-deployed-worker-staging.md](docs/hosted-deployed-worker-staging.md). It exports `createHostedDeployedWorkerStagingEvidenceAutomation`, `createHostedDeployedWorkerStagingEvidenceBundle`, and `evaluateHostedDeployedWorkerStagingReleaseGate` from `ai-saas-guard/hosted/deployed-staging`. It validates safe log samples, then turns public HTTPS health, signed webhook replay, deployed worker cleanup, and external CI/scan/rollback evidence into the hosted release gate for a Node/container read-only checkout worker candidate. It does not deploy cloud resources or claim production hosted exposure.
316
328
 
317
329
  The first live hosted ingress is deployed on Cloudflare Workers at `https://ai-saas-guard-hosted.zr9959.workers.dev` and documented in [hosted/cloudflare-worker/README.md](hosted/cloudflare-worker/README.md). It exposes `/healthz`, `/github/app/manifest-callback`, and signed `/github/webhook` intake backed by Cloudflare KV. A private staging GitHub App, `ai-saas-guard-hosted`, is installed on `zr9959/ai-saas-guard` with selected-repository access and the first-slice permission contract. The Worker verifies signatures, stores compact pull request identity records, exchanges a scoped installation token, fetches PR file metadata from GitHub, classifies PR-risk hotspots, and publishes a bounded Check Run summary. Current deployed evidence is tracked in [docs/hosted-operations-evidence.md](docs/hosted-operations-evidence.md): health, signed webhook delivery, compact KV records, cleanup, and Check Run publication pass for the staging smoke. The Cloudflare Worker still does not run a full source checkout scan worker or store raw webhook payloads, PR title/body text, raw diffs, source, secrets, checkout paths, or installation tokens.
318
330
 
@@ -362,7 +374,7 @@ Use `suppressions` for narrower false-positive handling when one rule is noisy o
362
374
 
363
375
  ## GitHub Action
364
376
 
365
- The repo includes a composite Action. Use `v0` for the latest compatible pre-1.0 Action, a specific release tag such as `v0.32.0` for controlled upgrades, or pin a reviewed commit SHA for stricter supply-chain control:
377
+ The repo includes a composite Action. Use `v0` for the latest compatible pre-1.0 Action, a specific release tag such as `v0.33.0` for controlled upgrades, or pin a reviewed commit SHA for stricter supply-chain control:
366
378
 
367
379
  ```yaml
368
380
  name: ai-saas-guard
@@ -1,5 +1,5 @@
1
1
  import { type HostedOperationalReleaseGateDecision, type HostedOperationalReleaseGateEvidence } from "./contracts.js";
2
- import type { HostedLogBoundaryValidation, HostedStagingHarnessReplayResult, HostedStagingHarnessWorkerTickResult } from "./staging-harness.js";
2
+ import type { HostedLogBoundaryForbiddenInput, HostedLogBoundaryValidation, HostedStagingHarnessReplayResult, HostedStagingHarnessWorkerTickResult } from "./staging-harness.js";
3
3
  export interface HostedDeployedWorkerHealthProbe {
4
4
  observedAt: string;
5
5
  status: number;
@@ -28,6 +28,26 @@ export interface HostedDeployedWorkerStagingEvidenceBundle {
28
28
  deployedScenarioSummary: HostedDeployedWorkerStagingScenarioSummary;
29
29
  privacy: HostedDeployedWorkerStagingPrivacy;
30
30
  }
31
+ export interface HostedDeployedWorkerStagingEvidenceAutomationInput extends Omit<HostedDeployedWorkerStagingEvidenceBundleInput, "logBoundary"> {
32
+ logSamples: unknown[];
33
+ forbiddenLogMaterial: HostedLogBoundaryForbiddenInput;
34
+ }
35
+ export interface HostedDeployedWorkerStagingEvidenceAutomation {
36
+ readyForReleaseGate: boolean;
37
+ blockedReasons: string[];
38
+ logBoundary: HostedLogBoundaryValidation;
39
+ collectionPlan: HostedDeployedWorkerStagingEvidenceCollectionPlan;
40
+ bundle: HostedDeployedWorkerStagingEvidenceBundle;
41
+ releaseGateInput: {
42
+ evidence: HostedOperationalReleaseGateEvidence[];
43
+ };
44
+ privacy: HostedDeployedWorkerStagingPrivacy;
45
+ }
46
+ export interface HostedDeployedWorkerStagingEvidenceCollectionPlan {
47
+ steps: string[];
48
+ requiredSafeLogFields: string[];
49
+ requiredFailureReasons: string[];
50
+ }
31
51
  export interface HostedDeployedWorkerStagingScenarioSummary {
32
52
  publicIngressAccepted: boolean;
33
53
  healthAccepted: boolean;
@@ -63,4 +83,5 @@ export interface HostedDeployedWorkerStagingPrivacy {
63
83
  claimsProductionHostedService: false;
64
84
  }
65
85
  export declare function createHostedDeployedWorkerStagingEvidenceBundle(input: HostedDeployedWorkerStagingEvidenceBundleInput): HostedDeployedWorkerStagingEvidenceBundle;
86
+ export declare function createHostedDeployedWorkerStagingEvidenceAutomation(input: HostedDeployedWorkerStagingEvidenceAutomationInput): HostedDeployedWorkerStagingEvidenceAutomation;
66
87
  export declare function evaluateHostedDeployedWorkerStagingReleaseGate(input: HostedDeployedWorkerStagingReleaseGateInput): HostedOperationalReleaseGateDecision;
@@ -1,5 +1,6 @@
1
1
  import { evaluateHostedOperationalReleaseGate, HOSTED_OPERATIONAL_RELEASE_GATE_REQUIREMENTS } from "./contracts.js";
2
2
  import { HOSTED_NODE_CONTAINER_PLATFORM, HOSTED_NODE_CONTAINER_ROLES } from "./app.js";
3
+ import { validateHostedLogBoundary } from "./staging-harness.js";
3
4
  export function createHostedDeployedWorkerStagingEvidenceBundle(input) {
4
5
  const summary = deployedScenarioSummary(input);
5
6
  const blockedReasons = deployedBlockedReasons(input, summary);
@@ -18,6 +19,34 @@ export function createHostedDeployedWorkerStagingEvidenceBundle(input) {
18
19
  privacy: deployedPrivacy()
19
20
  };
20
21
  }
22
+ export function createHostedDeployedWorkerStagingEvidenceAutomation(input) {
23
+ const logBoundary = validateHostedLogBoundary({
24
+ samples: input.logSamples,
25
+ forbidden: input.forbiddenLogMaterial
26
+ });
27
+ const bundle = createHostedDeployedWorkerStagingEvidenceBundle({
28
+ collectedAt: input.collectedAt,
29
+ evidenceBaseUrl: input.evidenceBaseUrl,
30
+ owner: input.owner,
31
+ publicBaseUrl: input.publicBaseUrl,
32
+ scannerVersion: input.scannerVersion,
33
+ healthProbe: input.healthProbe,
34
+ webhookReplays: input.webhookReplays,
35
+ workerTicks: input.workerTicks,
36
+ logBoundary,
37
+ externalEvidence: input.externalEvidence,
38
+ requiredFailureReasons: input.requiredFailureReasons
39
+ });
40
+ return {
41
+ readyForReleaseGate: bundle.readyForReleaseGate,
42
+ blockedReasons: bundle.blockedReasons,
43
+ logBoundary,
44
+ collectionPlan: deployedEvidenceCollectionPlan(input.requiredFailureReasons ?? []),
45
+ bundle,
46
+ releaseGateInput: bundle.releaseGateInput,
47
+ privacy: deployedPrivacy()
48
+ };
49
+ }
21
50
  export function evaluateHostedDeployedWorkerStagingReleaseGate(input) {
22
51
  return evaluateHostedOperationalReleaseGate({
23
52
  commitSha: input.commitSha,
@@ -164,6 +193,30 @@ function missingEvidence(id, input) {
164
193
  owner: input.owner
165
194
  };
166
195
  }
196
+ function deployedEvidenceCollectionPlan(requiredFailureReasons) {
197
+ return {
198
+ steps: [
199
+ "Collect public HTTPS health metadata from the deployed Node/container candidate.",
200
+ "Replay a signed webhook and confirm it queues check-run-only worker work.",
201
+ "Run deployed worker cleanup probes for one success path and the required failure reasons.",
202
+ "Validate safe log samples before building release-gate evidence.",
203
+ "Attach external CI, workflow, dependency, container, monitoring, rollback, and incident-response evidence."
204
+ ],
205
+ requiredSafeLogFields: [
206
+ "scanKey",
207
+ "installationId",
208
+ "repositoryId",
209
+ "pullRequestNumber",
210
+ "headSha",
211
+ "scannerVersion",
212
+ "durationMs",
213
+ "summaryCounts",
214
+ "errorClass",
215
+ "cleanupStatus"
216
+ ],
217
+ requiredFailureReasons: [...requiredFailureReasons].sort()
218
+ };
219
+ }
167
220
  function evidenceUrlFor(input, id) {
168
221
  const baseUrl = safeEvidenceUrl(input.evidenceBaseUrl);
169
222
  return baseUrl === undefined ? undefined : `${baseUrl}/${id}.json`;
@@ -28,7 +28,7 @@
28
28
 
29
29
  ## 邀请真实用户前先看这里
30
30
 
31
- AI 能很快把一个 SaaS 做到“看起来能用”:能登录、能打开 checkout、dashboard 能加载、测试也是绿的。真正危险的是信任边界代码,它决定谁有权限、谁付了钱、谁能看哪些数据,以及服务失败时会不会被悄悄伪装成成功。
31
+ AI 构建的 SaaS 很容易“看起来已经能上线”:能登录、能打开 checkout、dashboard 能加载、测试也是绿的。真正危险的是信任边界代码,它决定谁有权限、谁付了钱、谁能看哪些数据,以及服务失败时会不会被悄悄伪装成成功。
32
32
 
33
33
  这些问题通常会在真实用户来了以后才变痛:
34
34
 
@@ -43,6 +43,16 @@ AI 能很快把一个 SaaS 做到“看起来能用”:能登录、能打开 c
43
43
 
44
44
  `ai-saas-guard` 是面向这个时刻的本地优先、review-first 上线预检工具。它不会证明你的应用绝对安全,也不是渗透测试、认证或完整安全审计。它的目标是给 founder、独立开发者、小团队和 reviewer 一份短而有证据的清单,告诉你上线或合并 PR 前最该先看哪里。
45
45
 
46
+ ## 30 秒复制粘贴 demo
47
+
48
+ 不需要注册、不上传代码、不调用 LLM:
49
+
50
+ ```bash
51
+ npx ai-saas-guard@latest demo --summary
52
+ ```
53
+
54
+ 这个 demo 会扫描两个包内 fixture:一个故意有上线风险的 AI-built SaaS,和一个同类场景下更安全的版本。可以先看保存好的终端样例:[docs/demo-terminal-output.txt](demo-terminal-output.txt),再看它[和替代方案的区别](launch-gate-positioning.md)。
55
+
46
56
  ## 60 秒本地检查
47
57
 
48
58
  不用 clone 仓库,先看公开 demo 输出:
@@ -169,18 +179,18 @@ node dist/cli.js scan --root /path/to/your-saas
169
179
 
170
180
  这个仓库是公开 GitHub 仓库。
171
181
 
172
- CLI 已发布到 npm:`ai-saas-guard@0.32.0`。GitHub Action 支持 `v0` 浮动标签,也支持固定版本标签,例如 `v0.32.0`。
182
+ CLI 已发布到 npm:`ai-saas-guard@0.33.0`。GitHub Action 支持 `v0` 浮动标签,也支持固定版本标签,例如 `v0.33.0`。
173
183
 
174
184
  | 模块 | 状态 |
175
185
  | --- | --- |
176
186
  | 公开 GitHub 仓库 | 已可用 |
177
- | npm CLI | `ai-saas-guard@0.32.0` |
178
- | GitHub Action | `zr9959/ai-saas-guard@v0` 或固定标签 `v0.32.0` |
187
+ | npm CLI | `ai-saas-guard@0.33.0` |
188
+ | GitHub Action | `zr9959/ai-saas-guard@v0` 或固定标签 `v0.33.0` |
179
189
  | 输出格式 | 短 summary、Terminal、JSON、SARIF 和 PR markdown |
180
190
  | 项目配置 | `.ai-saas-guard.json` 支持规则开关、severity 覆盖、suppressions 和 fail threshold |
181
191
  | 隐私模型 | 本地优先、只读扫描、不调用 LLM、不上传代码 |
182
- | 当前版本 | `0.32.0` 增加 deployed worker staging evidence:public HTTPS health validation、deployed 成功/失败 cleanup probes、log-boundary checks,以及针对 Node/container read-only checkout worker candidate 的 release-gate evaluation |
183
- | Action 标签 | `v0.32.0`、`v0` |
192
+ | 当前版本 | `0.33.0` 优化 README 首屏、增加保存好的终端 demo 输出,并新增 deployed worker staging evidence automation:先验证 safe log samples,再生成 hosted release-gate input |
193
+ | Action 标签 | `v0.33.0`、`v0` |
184
194
  | npm 发布 | GitHub Actions Trusted Publisher/OIDC,无需长期 npm token |
185
195
  | 仓库可信度加固 | 严格 branch protection、Dependabot、CodeQL、fast-check fuzzing、signed release provenance assets、private vulnerability reporting、secret scanning 和 push protection |
186
196
  | Cloudflare hosted ingress | 已部署到 `https://ai-saas-guard-hosted.zr9959.workers.dev`;签名 GitHub App webhook delivery 和 compact Check Run staging smoke 已通过 |
@@ -367,7 +377,7 @@ GitHub Marketplace wrapper 决策见 [docs/github-marketplace-wrapper-decision.m
367
377
  - Hosted Node/container app skeleton:`ai-saas-guard/hosted/app` 导出 `createHostedHttpApp`、`createInMemoryHostedAppPlatform`、`createHostedNodeCheckoutAppPlatform` 和 `planHostedNodeContainerDeployment`,提供安全 `/healthz`、签名 `/github/webhook` ingress、单 job worker tick、测试用 in-memory provider adapters、真实 read-only checkout worker 组合入口、可见 timeout/output 安全预算,以及 secret manager、queue、compact report store、worker sandbox、GitHub Checks publisher 的部署引用校验;它本身仍然不部署或暴露公开 hosted 服务
368
378
  - Hosted staging deployment planner:`ai-saas-guard/hosted/staging` 导出 `planHostedProviderBinding`、`planHostedStagingDeployment` 和 `planHostedGitHubAppPromotion`,把真实 provider 引用、Node/container deployment plan、hosted operational release-gate evidence 和 GitHub App deployment planning 组合起来;缺少 queue、store、worker sandbox、Check Run publisher、logs、metrics、rollback 或 incident-response 引用时,会阻止 staging exposure 和 production promotion;它本身仍然不会调用云平台、创建 GitHub App 或暴露公开 hosted 服务
369
379
  - Hosted staging harness:`ai-saas-guard/hosted/staging-harness` 导出 `createFileBackedHostedStagingHarness`、`createHostedStagingHarnessEvidence`、`createHostedStagingReleaseEvidenceBundle`、`evaluateHostedStagingReleaseEvidenceBundle` 和 `validateHostedLogBoundary`,可以在本地用 file-backed queue、compact report、Check Run request 和 worker sandbox 跑通签名 webhook replay、worker tick 和 cleanup 校验,把 success/failure cleanup probes 与 log-boundary samples 转成 release-gate evidence,并直接执行 hosted release gate 判断;它只是 staging 演练工具,不会调用云平台、创建 GitHub App、写真实 Check Run 或暴露公开 hosted 服务
370
- - Deployed worker staging evidence:`ai-saas-guard/hosted/deployed-staging` 导出 `createHostedDeployedWorkerStagingEvidenceBundle` 和 `evaluateHostedDeployedWorkerStagingReleaseGate`,把 public HTTPS health、signed webhook replay、deployed worker cleanup、log-boundary samples 以及外部 CI/scan/rollback evidence 转成 hosted release gate evidence;它不会部署云资源,也不会宣称 production hosted exposure
380
+ - Deployed worker staging evidence:`ai-saas-guard/hosted/deployed-staging` 导出 `createHostedDeployedWorkerStagingEvidenceAutomation`、`createHostedDeployedWorkerStagingEvidenceBundle` 和 `evaluateHostedDeployedWorkerStagingReleaseGate`,先验证 safe log samples,再把 public HTTPS health、signed webhook replay、deployed worker cleanup 以及外部 CI/scan/rollback evidence 转成 hosted release gate evidence;它不会部署云资源,也不会宣称 production hosted exposure
371
381
  - Cloudflare hosted ingress:`hosted/cloudflare-worker` 已部署到 `https://ai-saas-guard-hosted.zr9959.workers.dev`,提供 `/healthz`、`/github/app/manifest-callback` 和签名 `/github/webhook` intake;Worker 已具备 compact pull request identity、file/category risk signal 和 Check Run metadata 路径;staging GitHub App ID 为 `3834787`,installation ID 为 `135085075`;真实 GitHub App webhook delivery 和 Check Run smoke 已通过;完整 source checkout worker deployment、monitoring、rollback 和 incident-response evidence 仍需要通过 hosted operational release gate
372
382
  - webhook event parser
373
383
  - check-run summary renderer
@@ -0,0 +1,19 @@
1
+ ai-saas-guard demo --summary
2
+
3
+ Risky demo: 19 findings
4
+ Launch gate: blocked
5
+
6
+ Top risks:
7
+ - CRITICAL stripe.webhook.missing-signature at app/api/stripe/webhook/route.ts:1
8
+ - CRITICAL supabase.rls.broad-policy at supabase/migrations/001_accounts.sql:10
9
+ - HIGH silent-success.swallowed-error at app/api/billing/checkout/route.ts:4
10
+
11
+ Manual proof to run next:
12
+ - Send a request without a valid Stripe signature and confirm the handler rejects it.
13
+ - Run a two-account tenant check and confirm User B cannot access User A data.
14
+ - Force the billing provider call to fail and confirm the API route returns an error, not fake success.
15
+
16
+ Safe demo: 0 findings
17
+ Launch gate: ready for local review
18
+
19
+ This is a deterministic local demo fixture. It does not upload code, call an LLM, or certify the app.
@@ -4,6 +4,7 @@ This document describes the deployed worker staging evidence helper implemented
4
4
 
5
5
  The package exports `ai-saas-guard/hosted/deployed-staging` with:
6
6
 
7
+ - `createHostedDeployedWorkerStagingEvidenceAutomation`
7
8
  - `createHostedDeployedWorkerStagingEvidenceBundle`
8
9
  - `evaluateHostedDeployedWorkerStagingReleaseGate`
9
10
 
@@ -13,12 +14,14 @@ It does not deploy cloud resources, create a GitHub App, call GitHub, fetch repo
13
14
 
14
15
  ## Inputs
15
16
 
17
+ `createHostedDeployedWorkerStagingEvidenceAutomation` is the recommended helper for a deployed staging candidate. It validates safe log samples with `validateHostedLogBoundary`, builds the deployed evidence bundle, returns the release-gate input, and includes the collection steps that should have produced the evidence. It never returns the forbidden raw source, raw diff, secret, customer payload, installation token, checkout path, private URL, or untrusted PR text values used for the boundary check.
18
+
16
19
  `createHostedDeployedWorkerStagingEvidenceBundle` expects only bounded evidence:
17
20
 
18
21
  - public HTTPS health probe metadata from the deployed Node/container app
19
22
  - signed webhook replay summaries
20
23
  - deployed worker success and failure cleanup summaries
21
- - log-boundary validation output
24
+ - log-boundary validation output, or safe log samples passed through the automation helper first
22
25
  - external evidence for CI, workflow static checks, dependency/container scans, monitoring, rollback, and incident response
23
26
  - scanner version, collected timestamp, evidence URL base, and evidence owner
24
27
 
@@ -44,6 +47,17 @@ The bundle generates deployed evidence for these hosted gate IDs when the probes
44
47
 
45
48
  Other gate IDs still come from external evidence because they belong to CI, workflow analysis, dependency/container scan, monitoring, rollback, and incident-response systems.
46
49
 
50
+ ## Automation Helper
51
+
52
+ The automation helper keeps this evidence path deterministic while removing a manual wiring step:
53
+
54
+ 1. Validate safe log samples against known forbidden material.
55
+ 2. Convert public health, signed webhook replay, deployed worker cleanup, and external evidence into a deployed staging bundle.
56
+ 3. Return the exact `releaseGateInput` for `evaluateHostedDeployedWorkerStagingReleaseGate`.
57
+ 4. Return a collection plan naming the required public HTTPS health, signed webhook, worker cleanup, safe log samples, and external evidence steps.
58
+
59
+ It is still static and caller-driven. It does not connect to a provider, read source files, deploy infrastructure, fetch repositories, or publish Check Runs.
60
+
47
61
  ## Blocking Behavior
48
62
 
49
63
  The helper blocks release-gate readiness when deployed evidence is incomplete. Common blocked reasons include:
@@ -5,11 +5,11 @@
5
5
  ## Current State
6
6
 
7
7
  - Package name: `ai-saas-guard`
8
- - Current published version: `0.32.0`
8
+ - Current published version: `0.33.0`
9
9
  - Next source candidate: none
10
10
  - npm registry state: published at <https://www.npmjs.com/package/ai-saas-guard>
11
11
  - First npm-published version: `0.1.1`
12
- - GitHub Release: `v0.32.0`
12
+ - GitHub Release: `v0.33.0`
13
13
  - Publish workflow: `.github/workflows/npm-publish.yml`
14
14
  - Trusted Publisher: GitHub Actions, `zr9959/ai-saas-guard`, workflow `npm-publish.yml`, allowed action `npm publish`
15
15
  - Long-lived npm publish token: not required
@@ -18,7 +18,7 @@
18
18
 
19
19
  Use GitHub Actions with npm Trusted Publisher/OIDC:
20
20
 
21
- 1. Create and review a release tag such as `v0.32.0`.
21
+ 1. Create and review a release tag such as `v0.33.0`.
22
22
  2. Publish from the GitHub Release or run the `Publish npm` workflow manually with `ref` set to that tag.
23
23
  3. Keep `permissions.id-token: write` in the workflow so npm can exchange the GitHub Actions OIDC identity for a short-lived publish credential.
24
24
  4. Run `npm publish --access public` from the workflow. Trusted publishing automatically generates provenance for this public package from this public repository.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-saas-guard",
3
- "version": "0.32.0",
3
+ "version": "0.33.0",
4
4
  "description": "Local-first CLI that catches launch blockers in AI-built Next.js/Supabase/Stripe SaaS apps.",
5
5
  "readmeFilename": "README.md",
6
6
  "type": "module",