@patronage/software-factory 1.0.0-alpha.0 → 1.0.0-alpha.10

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/schemas.d.ts CHANGED
@@ -493,11 +493,11 @@ interface PrReadyProof {
493
493
  */
494
494
  declare const impactStampSchema: z.ZodObject<{
495
495
  basis: z.ZodEnum<{
496
- "lockfile-scoped": "lockfile-scoped";
496
+ "target-scoped": "target-scoped";
497
497
  conservative: "conservative";
498
498
  }>;
499
499
  reasons: z.ZodArray<z.ZodString>;
500
- stampVersion: z.ZodLiteral<1>;
500
+ stampVersion: z.ZodLiteral<3>;
501
501
  targets: z.ZodArray<z.ZodObject<{
502
502
  basis: z.ZodString;
503
503
  impact: z.ZodEnum<{
@@ -506,6 +506,7 @@ declare const impactStampSchema: z.ZodObject<{
506
506
  }>;
507
507
  name: z.ZodString;
508
508
  }, z.core.$strip>>;
509
+ unsubscribedPaths: z.ZodArray<z.ZodString>;
509
510
  }, z.core.$strip>;
510
511
  type ImpactStamp = z.infer<typeof impactStampSchema>;
511
512
  //#endregion
@@ -1362,11 +1363,11 @@ declare const prVerifyProofSchema: z.ZodObject<{
1362
1363
  headSha: z.ZodString;
1363
1364
  impactStamp: z.ZodOptional<z.ZodObject<{
1364
1365
  basis: z.ZodEnum<{
1365
- "lockfile-scoped": "lockfile-scoped";
1366
+ "target-scoped": "target-scoped";
1366
1367
  conservative: "conservative";
1367
1368
  }>;
1368
1369
  reasons: z.ZodArray<z.ZodString>;
1369
- stampVersion: z.ZodLiteral<1>;
1370
+ stampVersion: z.ZodLiteral<3>;
1370
1371
  targets: z.ZodArray<z.ZodObject<{
1371
1372
  basis: z.ZodString;
1372
1373
  impact: z.ZodEnum<{
@@ -1375,6 +1376,7 @@ declare const prVerifyProofSchema: z.ZodObject<{
1375
1376
  }>;
1376
1377
  name: z.ZodString;
1377
1378
  }, z.core.$strip>>;
1379
+ unsubscribedPaths: z.ZodArray<z.ZodString>;
1378
1380
  }, z.core.$strip>>;
1379
1381
  mergeBaseSha: z.ZodOptional<z.ZodString>;
1380
1382
  mode: z.ZodEnum<{
package/dist/schemas.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import "yaml";
3
+ import "picomatch";
3
4
  //#region src/review-rungs.ts
4
5
  const EVIDENCE_REVIEW_RUNGS$1 = [
5
6
  "independent-model",
@@ -239,16 +240,17 @@ const impactStampTargetSchema = z.object({
239
240
  * input widened every target to full impact.
240
241
  */
241
242
  const impactStampSchema = z.object({
242
- basis: z.enum(["lockfile-scoped", "conservative"]),
243
+ basis: z.enum(["target-scoped", "conservative"]),
243
244
  reasons: z.array(z.string()),
244
- stampVersion: z.literal(1),
245
+ stampVersion: z.literal(3),
245
246
  targets: z.array(impactStampTargetSchema).superRefine((targets, context) => {
246
247
  const names = targets.map((target) => target.name);
247
248
  if (new Set(names).size !== names.length) context.addIssue({
248
249
  code: "custom",
249
250
  message: "impact stamp targets must have distinct names."
250
251
  });
251
- })
252
+ }),
253
+ unsubscribedPaths: z.array(z.string())
252
254
  });
253
255
  /**
254
256
  * The surfaces that consume the stamp. One classification, consumed
@@ -267,7 +269,7 @@ const IMPACT_SCOPE_SURFACES = {
267
269
  * external proof demand (#542 wave 2), a verification-battery command, or a
268
270
  * preview (Alchemy) lifecycle stack (#430 wave 3).
269
271
  *
270
- * The only release path is a `lockfile-scoped` stamp of exactly this build's
272
+ * The only release path is a `target-scoped` stamp of exactly this build's
271
273
  * stamp version whose target entry for exactly this name is provably
272
274
  * `not-affected`. Every other input — no trusted stamp, an unknown stamp
273
275
  * version, a conservative stamp, a name the stamp does not classify, or an
@@ -286,11 +288,11 @@ const impactStampScopeDecision = ({ stamp, surface, targetName }) => {
286
288
  reason: `no trusted identity-bound impact stamp covers this candidate; ${floor}`,
287
289
  scoped: false
288
290
  };
289
- if (stamp.stampVersion !== 1) return {
290
- reason: `impact stamp version ${String(stamp.stampVersion)} is not this build's version 1; ${floor}`,
291
+ if (stamp.stampVersion !== 3) return {
292
+ reason: `impact stamp version ${String(stamp.stampVersion)} is not this build's version 3; ${floor}`,
291
293
  scoped: false
292
294
  };
293
- if (stamp.basis !== "lockfile-scoped") return {
295
+ if (stamp.basis !== "target-scoped") return {
294
296
  reason: `impact stamp is conservative (full impact assumed); ${floor}`,
295
297
  scoped: false
296
298
  };
@@ -435,7 +437,7 @@ const assertBatteryCompleteness = (proof, context) => {
435
437
  * so authorization is bound to the same identities the proof binds. The
436
438
  * predicate is the shared {@link impactStampScopeDecision}, not a second
437
439
  * reading of the stamp: an entry is authorized exactly when the stamp would
438
- * have released that target's command in the first place (lockfile-scoped
440
+ * have released that target's command in the first place (target-scoped
439
441
  * basis, this build's stamp version, exactly one row for the target,
440
442
  * `not-affected`). A conservative stamp, an unknown version, a
441
443
  * self-contradictory stamp, an unclassified name, or an `affected` verdict all
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patronage/software-factory",
3
- "version": "1.0.0-alpha.0",
3
+ "version": "1.0.0-alpha.10",
4
4
  "description": "Shared Patronage software factory CLI and project-profile validation tools",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -29,13 +29,15 @@
29
29
  }
30
30
  },
31
31
  "publishConfig": {
32
- "access": "public"
32
+ "access": "public",
33
+ "tag": "next"
33
34
  },
34
35
  "dependencies": {
35
36
  "commander": "14.0.3",
36
37
  "picomatch": "^4.0.5",
37
38
  "yaml": "^2.9.0",
38
- "zod": "4.4.3"
39
+ "zod": "4.4.3",
40
+ "@patronage/factory-ci": "1.0.0-alpha.10"
39
41
  },
40
42
  "devDependencies": {
41
43
  "@types/node": "24.13.3",
@@ -75,6 +77,8 @@
75
77
  "profile:schema": "tsx scripts/generate-profile-schema.ts",
76
78
  "pretest": "bash ../scripts/ensure-worktree-bootstrap.sh",
77
79
  "test": "vitest run",
80
+ "pretest:profile": "bash ../scripts/ensure-worktree-bootstrap.sh",
81
+ "test:profile": "tsx scripts/vitest-profile.ts",
78
82
  "pretest:stress": "bash ../scripts/ensure-worktree-bootstrap.sh",
79
83
  "test:stress": "node scripts/stress-tests.mjs",
80
84
  "pretypecheck": "bash ../scripts/ensure-worktree-bootstrap.sh",