@patronage/software-factory 1.0.0-alpha.25 → 1.0.0-alpha.26
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/dist/index.d.ts
CHANGED
|
@@ -17,8 +17,8 @@ declare const boundaryManifestBaseSchema: z.ZodObject<{
|
|
|
17
17
|
boundary: z.ZodString;
|
|
18
18
|
closeout: z.ZodOptional<z.ZodObject<{
|
|
19
19
|
review: z.ZodEnum<{
|
|
20
|
-
"independent-model": "independent-model";
|
|
21
20
|
oracle: "oracle";
|
|
21
|
+
"independent-model": "independent-model";
|
|
22
22
|
human: "human";
|
|
23
23
|
}>;
|
|
24
24
|
}, z.core.$loose>>;
|
|
@@ -36,8 +36,8 @@ declare const boundaryManifestBaseSchema: z.ZodObject<{
|
|
|
36
36
|
issues: z.ZodArray<z.ZodNumber>;
|
|
37
37
|
name: z.ZodString;
|
|
38
38
|
review: z.ZodEnum<{
|
|
39
|
-
"independent-model": "independent-model";
|
|
40
39
|
oracle: "oracle";
|
|
40
|
+
"independent-model": "independent-model";
|
|
41
41
|
human: "human";
|
|
42
42
|
}>;
|
|
43
43
|
}, z.core.$loose>>;
|
|
@@ -46,8 +46,8 @@ declare const boundaryManifestSchema: z.ZodObject<{
|
|
|
46
46
|
boundary: z.ZodString;
|
|
47
47
|
closeout: z.ZodOptional<z.ZodObject<{
|
|
48
48
|
review: z.ZodEnum<{
|
|
49
|
-
"independent-model": "independent-model";
|
|
50
49
|
oracle: "oracle";
|
|
50
|
+
"independent-model": "independent-model";
|
|
51
51
|
human: "human";
|
|
52
52
|
}>;
|
|
53
53
|
}, z.core.$loose>>;
|
|
@@ -65,8 +65,8 @@ declare const boundaryManifestSchema: z.ZodObject<{
|
|
|
65
65
|
issues: z.ZodArray<z.ZodNumber>;
|
|
66
66
|
name: z.ZodString;
|
|
67
67
|
review: z.ZodEnum<{
|
|
68
|
-
"independent-model": "independent-model";
|
|
69
68
|
oracle: "oracle";
|
|
69
|
+
"independent-model": "independent-model";
|
|
70
70
|
human: "human";
|
|
71
71
|
}>;
|
|
72
72
|
}, z.core.$loose>>;
|
|
@@ -151,8 +151,8 @@ declare const boundaryReviewProofBaseSchema: z.ZodObject<{
|
|
|
151
151
|
}>;
|
|
152
152
|
producer: z.ZodString;
|
|
153
153
|
rung: z.ZodEnum<{
|
|
154
|
-
"independent-model": "independent-model";
|
|
155
154
|
oracle: "oracle";
|
|
155
|
+
"independent-model": "independent-model";
|
|
156
156
|
human: "human";
|
|
157
157
|
}>;
|
|
158
158
|
schemaVersion: z.ZodLiteral<1>;
|
|
@@ -195,8 +195,8 @@ declare const boundaryReviewProofSchema: z.ZodObject<{
|
|
|
195
195
|
}>;
|
|
196
196
|
producer: z.ZodString;
|
|
197
197
|
rung: z.ZodEnum<{
|
|
198
|
-
"independent-model": "independent-model";
|
|
199
198
|
oracle: "oracle";
|
|
199
|
+
"independent-model": "independent-model";
|
|
200
200
|
human: "human";
|
|
201
201
|
}>;
|
|
202
202
|
schemaVersion: z.ZodLiteral<1>;
|
|
@@ -2478,8 +2478,8 @@ declare const evidenceEnvelopeBaseSchema: z.ZodObject<{
|
|
|
2478
2478
|
producer: z.ZodString;
|
|
2479
2479
|
requestId: z.ZodOptional<z.ZodString>;
|
|
2480
2480
|
rung: z.ZodOptional<z.ZodEnum<{
|
|
2481
|
-
"independent-model": "independent-model";
|
|
2482
2481
|
oracle: "oracle";
|
|
2482
|
+
"independent-model": "independent-model";
|
|
2483
2483
|
human: "human";
|
|
2484
2484
|
}>>;
|
|
2485
2485
|
schemaVersion: z.ZodLiteral<1>;
|
|
@@ -2505,8 +2505,8 @@ declare const evidenceEnvelopeSchema: z.ZodObject<{
|
|
|
2505
2505
|
producer: z.ZodString;
|
|
2506
2506
|
requestId: z.ZodOptional<z.ZodString>;
|
|
2507
2507
|
rung: z.ZodOptional<z.ZodEnum<{
|
|
2508
|
-
"independent-model": "independent-model";
|
|
2509
2508
|
oracle: "oracle";
|
|
2509
|
+
"independent-model": "independent-model";
|
|
2510
2510
|
human: "human";
|
|
2511
2511
|
}>>;
|
|
2512
2512
|
schemaVersion: z.ZodLiteral<1>;
|
|
@@ -2726,8 +2726,8 @@ declare const boundaryCheckProofSchema: z.ZodObject<{
|
|
|
2726
2726
|
wave: z.ZodString;
|
|
2727
2727
|
}, z.core.$strip>>;
|
|
2728
2728
|
demandedRung: z.ZodOptional<z.ZodEnum<{
|
|
2729
|
-
"independent-model": "independent-model";
|
|
2730
2729
|
oracle: "oracle";
|
|
2730
|
+
"independent-model": "independent-model";
|
|
2731
2731
|
human: "human";
|
|
2732
2732
|
}>>;
|
|
2733
2733
|
epicIssue: z.ZodNumber;
|
|
@@ -2742,8 +2742,8 @@ declare const boundaryCheckProofSchema: z.ZodObject<{
|
|
|
2742
2742
|
commentUrl: z.ZodOptional<z.ZodString>;
|
|
2743
2743
|
producer: z.ZodString;
|
|
2744
2744
|
rung: z.ZodEnum<{
|
|
2745
|
-
"independent-model": "independent-model";
|
|
2746
2745
|
oracle: "oracle";
|
|
2746
|
+
"independent-model": "independent-model";
|
|
2747
2747
|
human: "human";
|
|
2748
2748
|
}>;
|
|
2749
2749
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
@@ -2759,8 +2759,8 @@ declare const boundaryCheckProofSchema: z.ZodObject<{
|
|
|
2759
2759
|
value: z.ZodString;
|
|
2760
2760
|
}, z.core.$strip>>;
|
|
2761
2761
|
status: z.ZodEnum<{
|
|
2762
|
-
blocked: "blocked";
|
|
2763
2762
|
ready: "ready";
|
|
2763
|
+
blocked: "blocked";
|
|
2764
2764
|
}>;
|
|
2765
2765
|
}, z.core.$strip>;
|
|
2766
2766
|
type BoundaryCheckProofRecord = z.infer<typeof boundaryCheckProofSchema>;
|
|
@@ -3853,8 +3853,8 @@ declare const FACTORY_TRACE_EVENT_DEFINITIONS: readonly [DefinedTraceEvent<"revi
|
|
|
3853
3853
|
model: z.ZodString;
|
|
3854
3854
|
tier: z.ZodEnum<{
|
|
3855
3855
|
review: "review";
|
|
3856
|
-
oracle: "oracle";
|
|
3857
3856
|
delegate: "delegate";
|
|
3857
|
+
oracle: "oracle";
|
|
3858
3858
|
workhorse: "workhorse";
|
|
3859
3859
|
scout: "scout";
|
|
3860
3860
|
}>;
|
|
@@ -3862,8 +3862,8 @@ declare const FACTORY_TRACE_EVENT_DEFINITIONS: readonly [DefinedTraceEvent<"revi
|
|
|
3862
3862
|
startedAt: z.ZodString;
|
|
3863
3863
|
tier: z.ZodEnum<{
|
|
3864
3864
|
review: "review";
|
|
3865
|
-
oracle: "oracle";
|
|
3866
3865
|
delegate: "delegate";
|
|
3866
|
+
oracle: "oracle";
|
|
3867
3867
|
workhorse: "workhorse";
|
|
3868
3868
|
scout: "scout";
|
|
3869
3869
|
}>;
|
|
@@ -3932,8 +3932,8 @@ declare const FACTORY_TRACE_EVENT_DEFINITIONS: readonly [DefinedTraceEvent<"revi
|
|
|
3932
3932
|
model: z.ZodString;
|
|
3933
3933
|
tier: z.ZodEnum<{
|
|
3934
3934
|
review: "review";
|
|
3935
|
-
oracle: "oracle";
|
|
3936
3935
|
delegate: "delegate";
|
|
3936
|
+
oracle: "oracle";
|
|
3937
3937
|
workhorse: "workhorse";
|
|
3938
3938
|
scout: "scout";
|
|
3939
3939
|
}>;
|
|
@@ -3941,8 +3941,8 @@ declare const FACTORY_TRACE_EVENT_DEFINITIONS: readonly [DefinedTraceEvent<"revi
|
|
|
3941
3941
|
startedAt: z.ZodString;
|
|
3942
3942
|
tier: z.ZodEnum<{
|
|
3943
3943
|
review: "review";
|
|
3944
|
-
oracle: "oracle";
|
|
3945
3944
|
delegate: "delegate";
|
|
3945
|
+
oracle: "oracle";
|
|
3946
3946
|
workhorse: "workhorse";
|
|
3947
3947
|
scout: "scout";
|
|
3948
3948
|
}>;
|
|
@@ -4002,8 +4002,8 @@ declare const FACTORY_TRACE_EVENT_DEFINITIONS: readonly [DefinedTraceEvent<"revi
|
|
|
4002
4002
|
model: z.ZodString;
|
|
4003
4003
|
tier: z.ZodEnum<{
|
|
4004
4004
|
review: "review";
|
|
4005
|
-
oracle: "oracle";
|
|
4006
4005
|
delegate: "delegate";
|
|
4006
|
+
oracle: "oracle";
|
|
4007
4007
|
workhorse: "workhorse";
|
|
4008
4008
|
scout: "scout";
|
|
4009
4009
|
}>;
|
|
@@ -4011,8 +4011,8 @@ declare const FACTORY_TRACE_EVENT_DEFINITIONS: readonly [DefinedTraceEvent<"revi
|
|
|
4011
4011
|
startedAt: z.ZodString;
|
|
4012
4012
|
tier: z.ZodEnum<{
|
|
4013
4013
|
review: "review";
|
|
4014
|
-
oracle: "oracle";
|
|
4015
4014
|
delegate: "delegate";
|
|
4015
|
+
oracle: "oracle";
|
|
4016
4016
|
workhorse: "workhorse";
|
|
4017
4017
|
scout: "scout";
|
|
4018
4018
|
}>;
|
|
@@ -4061,11 +4061,11 @@ declare const FACTORY_TRACE_EVENT_DEFINITIONS: readonly [DefinedTraceEvent<"revi
|
|
|
4061
4061
|
engine: string;
|
|
4062
4062
|
layerSource: "committedDefault" | "operatorSession" | "userConfig";
|
|
4063
4063
|
model: string;
|
|
4064
|
-
tier: "review" | "
|
|
4064
|
+
tier: "review" | "delegate" | "oracle" | "workhorse" | "scout";
|
|
4065
4065
|
fallbackTier?: "delegate" | undefined;
|
|
4066
4066
|
};
|
|
4067
4067
|
startedAt: string;
|
|
4068
|
-
tier: "review" | "
|
|
4068
|
+
tier: "review" | "delegate" | "oracle" | "workhorse" | "scout";
|
|
4069
4069
|
tokenUsage: {
|
|
4070
4070
|
source: "cursor-csv" | "codex-json" | "cursor-json" | "claude-json";
|
|
4071
4071
|
status: "available";
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ import { parse } from "yaml";
|
|
|
18
18
|
import { promisify } from "node:util";
|
|
19
19
|
import { FACTORY_PROOF_GATE_APP_ID, FACTORY_PROOF_GATE_STEP_NAME, GitHubApiError, mintInstallationToken, previewProofInventory, productionImpactTargetOutput, readVitestProfileDocument } from "@patronage/factory-ci";
|
|
20
20
|
//#region package.json
|
|
21
|
-
var version = "1.0.0-alpha.
|
|
21
|
+
var version = "1.0.0-alpha.26";
|
|
22
22
|
//#endregion
|
|
23
23
|
//#region src/review-rungs.ts
|
|
24
24
|
const EVIDENCE_REVIEW_RUNGS = [
|
|
@@ -18760,7 +18760,7 @@ const productionImpactSummaryLines = (decision) => decision.basis.classification
|
|
|
18760
18760
|
//#endregion
|
|
18761
18761
|
//#region src/commands/production-impact.ts
|
|
18762
18762
|
function createProductionImpactCommand(output) {
|
|
18763
|
-
return markCwdOptionDefault(new Command("production:impact").description("Classify production targets from an exact merge-push before/after diff").option("--before <sha>", "merge-push before commit SHA").option("--after <sha>", "merge-push after commit SHA").option("--cwd <path>", "repository working directory", collectCwdOption).option("--profile <path>", "path to the project profile JSON file").option("--github-output <path>", "append stable decision outputs to a GitHub Actions output file").option("--github-summary <path>", "append a human-readable decision to a GitHub Actions summary file").option("--json", "print the complete decision as JSON").action((options) => {
|
|
18763
|
+
return markCwdOptionDefault(new Command("production:impact").description("Classify production targets from an exact merge-push before/after diff").option("--before <sha>", "merge-push before commit SHA").option("--after <sha>", "merge-push after commit SHA").option("--cwd <path>", "repository working directory", collectCwdOption).option("--profile <path>", "path to the project profile JSON file (default: software-factory.profile.json in --cwd)").option("--github-output <path>", "append stable decision outputs to a GitHub Actions output file").option("--github-summary <path>", "append a human-readable decision to a GitHub Actions summary file").option("--json", "print the complete decision as JSON").action((options) => {
|
|
18764
18764
|
const decision = runProductionImpact({
|
|
18765
18765
|
after: options.after,
|
|
18766
18766
|
before: options.before,
|
|
@@ -51,6 +51,7 @@ Load only matching references:
|
|
|
51
51
|
| Crypto and randomness | Weak hashes, predictable random values, static IVs, ECB mode, timing-unsafe compares, unsigned tokens, or custom crypto protect security-sensitive data. |
|
|
52
52
|
| Abuse controls | Sensitive or expensive operations such as login, MFA, invites, exports, password reset, billing, email, SMS, or paid API calls lack meaningful rate, quota, replay, or idempotency controls. |
|
|
53
53
|
| CI and workflows | Workflow changes let untrusted or caller-controlled code, text, artifacts, caches, or actions reach privileged execution, secrets, write tokens, releases, packages, deployments, or sensitive runners. |
|
|
54
|
+
| Infrastructure exposure | An infrastructure declaration publishes a service to the internet without a declared authentication mechanism. In an Alchemy stack, a Worker declaring `workersDev: true`, a `domain`, or `routes` must also declare its guard — Cloudflare Access, an auth secret binding, or an equivalent check inside the Worker — or carry a written reason in the change for why it is public. |
|
|
54
55
|
|
|
55
56
|
## Severity
|
|
56
57
|
|
|
@@ -22,6 +22,7 @@ Use this when reviewing JavaScript, TypeScript, Node, React, Next.js, or browser
|
|
|
22
22
|
| Path traversal | `path.join(root, userPath)` without realpath containment, archive extraction by entry name | Normalize and resolve real paths, verify containment, generate server-side filenames |
|
|
23
23
|
| Webhook forgery | State-changing webhook parses JSON before verifying signature or skips timestamp/replay checks | Verify raw body signature, timestamp freshness, replay/idempotency, and provider secret before side effects |
|
|
24
24
|
| Secrets exposure | Secrets in client components, `NEXT_PUBLIC_*`, serialized props, logs, or error responses | Server-only reads, redacted logs, safe error messages, no hardcoded production fallback |
|
|
25
|
+
| Public Worker without auth | Alchemy `Cloudflare.Worker` gains `workersDev: true`, a `domain`, or a `routes` entry while its handler enforces no identity check | Cloudflare Access on the Worker (`access` prop or an Access application destination), an auth secret binding the handler verifies, or a written reason in the change for why the Worker is public |
|
|
25
26
|
|
|
26
27
|
## False-Positive Controls
|
|
27
28
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patronage/software-factory",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.26",
|
|
4
4
|
"description": "Shared Patronage software factory CLI and project-profile validation tools",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"picomatch": "^4.0.5",
|
|
38
38
|
"yaml": "^2.9.0",
|
|
39
39
|
"zod": "4.4.3",
|
|
40
|
-
"@patronage/factory-ci": "1.0.0-alpha.
|
|
40
|
+
"@patronage/factory-ci": "1.0.0-alpha.26"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/node": "24.13.3",
|