@kungfu-tech/buildchain 4.0.1-alpha.9 → 4.0.1

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.
Files changed (98) hide show
  1. package/README.md +9 -6
  2. package/actions/v4-release-candidate-promote/README.md +3 -0
  3. package/architecture/agent-change-map.md +1015 -0
  4. package/architecture/ci-lane-change-budget.json +70 -1
  5. package/architecture/decisions/0004-v4-declarative-release-tail.md +47 -0
  6. package/architecture/internal-capabilities.json +156 -11
  7. package/architecture/maintainability-debt.json +3229 -0
  8. package/architecture/maintainability-policy.json +480 -129
  9. package/architecture/v3-core-mechanism-inventory.json +4 -3
  10. package/architecture/v3-v4-capability-closure.md +59 -0
  11. package/architecture/v3-v4-live-capability-inventory.json +102404 -0
  12. package/architecture/v4-cross-platform-adopter-qualification.json +52 -0
  13. package/architecture/v4-delivery-warrant-shadow-fixtures.json +3 -3
  14. package/architecture/v4-runtime-semantic-closure.json +710 -0
  15. package/bin/internal/trust-release-release-handlers.mjs +5 -0
  16. package/contracts/fixtures/v4-tail-reseal-v1/valid.json +1 -1
  17. package/contracts/v4-publication-qualification-v1.schema.json +51 -0
  18. package/dist/site/agent-index.json +1 -0
  19. package/dist/site/artifact-schemas.json +2 -0
  20. package/dist/site/buildchain-contract.json +123 -32
  21. package/dist/site/buildchain-site.json +96 -28
  22. package/dist/site/capability-registry.json +6 -6
  23. package/dist/site/cli-registry.json +5 -2
  24. package/dist/site/controller-registry.json +41 -5
  25. package/dist/site/kfd-claims.json +170 -21
  26. package/dist/site/kfd-upstream-aggregate.json +1 -1
  27. package/dist/site/manual-registry.json +6 -6
  28. package/dist/site/node-api-registry.json +1474 -215
  29. package/dist/site/page-registry.json +85 -17
  30. package/dist/site/public-surface-audit.json +85 -20
  31. package/dist/site/publication-authority-registry.json +28 -1
  32. package/dist/site/publication-registry.json +4 -4
  33. package/dist/site/release-provenance.json +5 -0
  34. package/dist/site/schemas/v4-publication-qualification-v1.schema.json +51 -0
  35. package/dist/site/site-manifest.json +10 -10
  36. package/dist/site/workflow-registry.json +94 -18
  37. package/docs/MAP.md +1 -1
  38. package/docs/cli-reference.md +4 -4
  39. package/docs/dev-delivery-warrant.md +12 -9
  40. package/docs/node-api-reference.md +291 -206
  41. package/docs/publish-transaction.md +11 -4
  42. package/docs/release-candidate.md +7 -0
  43. package/docs/v4-adopter-delivery.md +23 -4
  44. package/docs/v4-declarative-release-tail-migration.md +43 -0
  45. package/package.json +8 -3
  46. package/packages/core/adopter-delivery-passport.js +36 -0
  47. package/packages/core/buildchain-contract.js +31 -1
  48. package/packages/core/buildchain-publication-authority.js +1 -0
  49. package/packages/core/dev-delivery-warrant-settlement.js +239 -3
  50. package/packages/core/dev-delivery-warrant-state.js +15 -2
  51. package/packages/core/dev-delivery-warrant.js +21 -4
  52. package/packages/core/github-governance-authority.js +4 -4
  53. package/packages/core/index.js +1 -0
  54. package/packages/core/paper-scaffold-content.js +401 -0
  55. package/packages/core/paper.js +12 -378
  56. package/packages/core/publication-control-plane-audit.js +135 -111
  57. package/packages/core/publication-rehearsal-projection.js +104 -0
  58. package/packages/core/publication-rehearsal-runtime.js +190 -0
  59. package/packages/core/release-candidate-recovery.js +6 -5
  60. package/packages/core/release-passport.js +82 -184
  61. package/packages/core/v4-cross-platform-adopter-qualification.js +343 -0
  62. package/packages/core/v4-floating-consumer-policy.js +3 -2
  63. package/packages/core/v4-floating-consumer-release-passport.js +134 -15
  64. package/packages/core/v4-publication-qualification.js +222 -0
  65. package/scripts/artifact-signing-controller-core.mjs +1 -1
  66. package/scripts/audit-publication-control-plane.mjs +17 -17
  67. package/scripts/buildchain-cli-help.mjs +3 -0
  68. package/scripts/check-internal-architecture.mjs +23 -3
  69. package/scripts/check-inventory.mjs +23 -5
  70. package/scripts/check-maintainability.mjs +145 -4
  71. package/scripts/check-project-cut-merge-queue-admission.mjs +87 -0
  72. package/scripts/check-v3-v4-capability-inventory.mjs +574 -0
  73. package/scripts/check-v4-floating-consumer-policy-contract.mjs +10 -3
  74. package/scripts/check-v4-runtime-semantic-closure.mjs +266 -0
  75. package/scripts/dev-delivery-warrant-options.mjs +27 -11
  76. package/scripts/dev-delivery-warrant.mjs +45 -5
  77. package/scripts/dev-pr-auto-merge.mjs +25 -11
  78. package/scripts/dev-pr-delivery-warrant.mjs +44 -0
  79. package/scripts/dev-pr-prequeue-guard.mjs +0 -18
  80. package/scripts/dispatch-artifact-signing-authority.mjs +1 -1
  81. package/scripts/generate-agent-change-map.mjs +118 -0
  82. package/scripts/generate-release-candidate-passport.mjs +26 -1
  83. package/scripts/generate-site-bundle.mjs +6 -0
  84. package/scripts/maintainability-domain-metrics.mjs +237 -0
  85. package/scripts/maintainability-governance.mjs +473 -0
  86. package/scripts/maintainability-metrics.mjs +28 -6
  87. package/scripts/project-cut-merge-queue-admission.mjs +394 -0
  88. package/scripts/promotion-routing-evidence.mjs +35 -6
  89. package/scripts/release-candidate-resolver.mjs +44 -0
  90. package/scripts/release-line-policy.mjs +25 -15
  91. package/scripts/release-tail.mjs +19 -2
  92. package/scripts/resume-from-candidate-run.mjs +106 -103
  93. package/scripts/run-lifecycle-core.mjs +341 -376
  94. package/scripts/site-capability-metadata.mjs +4 -0
  95. package/scripts/stable-candidate-qualification.mjs +9 -10
  96. package/scripts/v3-v4-capability-catalog.mjs +439 -0
  97. package/scripts/v4-cross-platform-adopter-qualification.mjs +228 -0
  98. package/scripts/v4-declarative-promotion-admission.mjs +42 -0
@@ -0,0 +1,710 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "contract": "kungfu-buildchain-v4-runtime-semantic-closure",
4
+ "sources": {
5
+ "v3Mechanisms": "architecture/v3-core-mechanism-inventory.json",
6
+ "v4Capabilities": "architecture/v4-capability-state-machine-manifest.json"
7
+ },
8
+ "requiredEvidence": [
9
+ "positive",
10
+ "negative",
11
+ "failure",
12
+ "recovery",
13
+ "idempotence"
14
+ ],
15
+ "capabilities": [
16
+ {
17
+ "id": "next-development-controller",
18
+ "sourceMechanismId": "next-development-controller",
19
+ "routeKind": "v4-native",
20
+ "stateAuthority": "single-writer-state-machine",
21
+ "legacyFallbackAllowed": false,
22
+ "providerDecisionAuthorityAllowed": false,
23
+ "implementation": ["packages/core/next-development-controller.js"],
24
+ "invariants": {
25
+ "exactHeadFence": true,
26
+ "immutableRootFence": true,
27
+ "providerReadbackBeforeRetry": true,
28
+ "idempotentReplay": true
29
+ },
30
+ "resolvedResiduals": [
31
+ {
32
+ "source": "provider-specific durable-store retention and workflow wake policy remain caller-owned integration choices",
33
+ "resolution": "The atomic child store and explicit executor interfaces retain store and wake policy as bounded adapters while the v4 controller alone owns transitions and completion."
34
+ }
35
+ ],
36
+ "evidence": {
37
+ "positive": [
38
+ {
39
+ "path": "tests/next-development-controller.test.mjs",
40
+ "name": "completed Alpha schedules exactly one durable child and identical reruns reuse it"
41
+ }
42
+ ],
43
+ "negative": [
44
+ {
45
+ "path": "tests/next-development-controller.test.mjs",
46
+ "name": "controller validation rejects a non-canonical protected Dev branch"
47
+ }
48
+ ],
49
+ "failure": [
50
+ {
51
+ "path": "tests/next-development-controller.test.mjs",
52
+ "name": "fresh runner resumes a checkpoint after injected failure without rebuilding"
53
+ }
54
+ ],
55
+ "recovery": [
56
+ {
57
+ "path": "tests/next-development-controller.test.mjs",
58
+ "name": "lost materialization response reuses the operation on a fresh runner"
59
+ }
60
+ ],
61
+ "idempotence": [
62
+ {
63
+ "path": "tests/next-development-controller.test.mjs",
64
+ "name": "completed Alpha schedules exactly one durable child and identical reruns reuse it"
65
+ }
66
+ ]
67
+ }
68
+ },
69
+ {
70
+ "id": "dev-delivery-warrant",
71
+ "sourceMechanismId": "dev-delivery-warrant",
72
+ "routeKind": "v4-native",
73
+ "stateAuthority": "single-writer-state-machine",
74
+ "legacyFallbackAllowed": false,
75
+ "providerDecisionAuthorityAllowed": false,
76
+ "implementation": ["packages/core/dev-delivery-warrant.js"],
77
+ "invariants": {
78
+ "exactHeadFence": true,
79
+ "immutableRootFence": true,
80
+ "providerReadbackBeforeRetry": true,
81
+ "idempotentReplay": true
82
+ },
83
+ "resolvedResiduals": [
84
+ {
85
+ "source": "v4 durable store and lease authority are not yet selected",
86
+ "resolution": "The rooted Git-ref queue is the durable store and its expected-old state root plus fenced generation is the sole v4 lease authority."
87
+ }
88
+ ],
89
+ "evidence": {
90
+ "positive": [
91
+ {
92
+ "path": "tests/dev-delivery-warrant.test.mjs",
93
+ "name": "queue readback preserves native qualification metadata"
94
+ }
95
+ ],
96
+ "negative": [
97
+ {
98
+ "path": "tests/dev-delivery-warrant.test.mjs",
99
+ "name": "queue identity and state roots fail closed on drift"
100
+ }
101
+ ],
102
+ "failure": [
103
+ {
104
+ "path": "tests/dev-delivery-warrant.test.mjs",
105
+ "name": "terminal failure settlement closes the exact active Warrant and repeats idempotently"
106
+ }
107
+ ],
108
+ "recovery": [
109
+ {
110
+ "path": "tests/dev-delivery-warrant.test.mjs",
111
+ "name": "provisional lease expiry retains authority until fenced worker stop is proven"
112
+ }
113
+ ],
114
+ "idempotence": [
115
+ {
116
+ "path": "tests/dev-delivery-warrant.test.mjs",
117
+ "name": "duplicate submission is idempotent and safe head repair retains queue age"
118
+ }
119
+ ]
120
+ }
121
+ },
122
+ {
123
+ "id": "release-candidate-passport",
124
+ "sourceMechanismId": "release-candidate-passport",
125
+ "routeKind": "v4-native",
126
+ "stateAuthority": "bounded-protocol",
127
+ "legacyFallbackAllowed": false,
128
+ "providerDecisionAuthorityAllowed": false,
129
+ "implementation": ["packages/core/release-candidate.js"],
130
+ "invariants": {
131
+ "exactHeadFence": true,
132
+ "immutableRootFence": true,
133
+ "providerReadbackBeforeRetry": true,
134
+ "idempotentReplay": true
135
+ },
136
+ "resolvedResiduals": [
137
+ {
138
+ "source": "v4 canonical serialization boundary is not yet selected",
139
+ "resolution": "The Release Cut and candidate Passport roots use the canonical v4 release-candidate record boundary."
140
+ },
141
+ {
142
+ "source": "v4 Release Train authority remains deferred to the parity wave",
143
+ "resolution": "The v4 Release Train owns the rooted compare-and-swap transition chain and treats legacy patrol state as read-only."
144
+ }
145
+ ],
146
+ "evidence": {
147
+ "positive": [
148
+ {
149
+ "path": "tests/release-candidate.test.mjs",
150
+ "name": "release candidate passport records source lock, platform matrix, and build summary hash"
151
+ }
152
+ ],
153
+ "negative": [
154
+ {
155
+ "path": "tests/release-candidate.test.mjs",
156
+ "name": "release candidate validation rejects stale source and summary evidence"
157
+ }
158
+ ],
159
+ "failure": [
160
+ {
161
+ "path": "tests/release-candidate.test.mjs",
162
+ "name": "release candidate family validation fails closed on absence, mismatch, source drift, and invalidation"
163
+ }
164
+ ],
165
+ "recovery": [
166
+ {
167
+ "path": "tests/release-candidate.test.mjs",
168
+ "name": "release candidate resolver skips newer successful run without passport artifacts"
169
+ }
170
+ ],
171
+ "idempotence": [
172
+ {
173
+ "path": "tests/release-train.test.mjs",
174
+ "name": "state transitions are rooted, compare-and-swap guarded and idempotent"
175
+ }
176
+ ]
177
+ }
178
+ },
179
+ {
180
+ "id": "release-candidate-recovery",
181
+ "sourceMechanismId": "release-candidate-recovery",
182
+ "routeKind": "v4-native",
183
+ "stateAuthority": "bounded-protocol",
184
+ "legacyFallbackAllowed": false,
185
+ "providerDecisionAuthorityAllowed": false,
186
+ "implementation": ["packages/core/release-candidate-recovery.js"],
187
+ "invariants": {
188
+ "exactHeadFence": true,
189
+ "immutableRootFence": true,
190
+ "providerReadbackBeforeRetry": true,
191
+ "idempotentReplay": true
192
+ },
193
+ "resolvedResiduals": [
194
+ {
195
+ "source": "v4 provider adapter boundary is not yet selected",
196
+ "resolution": "Provider discovery and readback remain adapters; the v4 recovery planner alone validates identity and selects resume or repair-required."
197
+ }
198
+ ],
199
+ "evidence": {
200
+ "positive": [
201
+ {
202
+ "path": "tests/release-candidate-recovery.test.mjs",
203
+ "name": "recovery resolves an exact publication version without scanning historical state refs"
204
+ }
205
+ ],
206
+ "negative": [
207
+ {
208
+ "path": "tests/release-candidate-recovery.test.mjs",
209
+ "name": "recovery rejects repository, workflow, and channel identity drift"
210
+ }
211
+ ],
212
+ "failure": [
213
+ {
214
+ "path": "tests/release-candidate-recovery.test.mjs",
215
+ "name": "recovery rejects unrelated target advancement and conflicting transaction state"
216
+ }
217
+ ],
218
+ "recovery": [
219
+ {
220
+ "path": "tests/release-candidate-recovery.test.mjs",
221
+ "name": "cross-runtime recovery reuses only provider-bound original Stage Capsules"
222
+ }
223
+ ],
224
+ "idempotence": [
225
+ {
226
+ "path": "tests/release-candidate-recovery.test.mjs",
227
+ "name": "recovery is deterministic and idempotent for a complete transaction"
228
+ }
229
+ ]
230
+ }
231
+ },
232
+ {
233
+ "id": "stable-candidate-ledger",
234
+ "sourceMechanismId": "stable-candidate-ledger",
235
+ "routeKind": "v4-native",
236
+ "stateAuthority": "single-writer-state-machine",
237
+ "legacyFallbackAllowed": false,
238
+ "providerDecisionAuthorityAllowed": false,
239
+ "implementation": ["packages/core/stable-candidate-ledger.js"],
240
+ "invariants": {
241
+ "exactHeadFence": true,
242
+ "immutableRootFence": true,
243
+ "providerReadbackBeforeRetry": true,
244
+ "idempotentReplay": true
245
+ },
246
+ "resolvedResiduals": [
247
+ {
248
+ "source": "v4 scheduler and ledger store ownership are not yet selected",
249
+ "resolution": "The scheduler is an untrusted caller and the rooted candidate ledger is the single v4 selection authority."
250
+ }
251
+ ],
252
+ "evidence": {
253
+ "positive": [
254
+ {
255
+ "path": "tests/stable-candidate-ledger.test.mjs",
256
+ "name": "selection uses the newest qualified non-revoked candidate"
257
+ }
258
+ ],
259
+ "negative": [
260
+ {
261
+ "path": "tests/stable-candidate-ledger.test.mjs",
262
+ "name": "hold blocks scheduled selection while release-now remains explicit"
263
+ }
264
+ ],
265
+ "failure": [
266
+ {
267
+ "path": "tests/stable-candidate-patrol.test.mjs",
268
+ "name": "GitHub client fails closed when auto-merge GraphQL returns errors"
269
+ }
270
+ ],
271
+ "recovery": [
272
+ {
273
+ "path": "tests/stable-candidate-patrol.test.mjs",
274
+ "name": "first ledger run reconstructs an already consumed stable version"
275
+ }
276
+ ],
277
+ "idempotence": [
278
+ {
279
+ "path": "tests/stable-candidate-patrol.test.mjs",
280
+ "name": "GitHub client reuses an exact-tree source-lock that already contains the stable target"
281
+ }
282
+ ]
283
+ }
284
+ },
285
+ {
286
+ "id": "publish-transaction",
287
+ "sourceMechanismId": "publish-transaction",
288
+ "routeKind": "v4-native",
289
+ "stateAuthority": "single-writer-state-machine",
290
+ "legacyFallbackAllowed": false,
291
+ "providerDecisionAuthorityAllowed": false,
292
+ "implementation": ["packages/core/publish-transaction.js"],
293
+ "invariants": {
294
+ "exactHeadFence": true,
295
+ "immutableRootFence": true,
296
+ "providerReadbackBeforeRetry": true,
297
+ "idempotentReplay": true
298
+ },
299
+ "resolvedResiduals": [
300
+ {
301
+ "source": "v4 transaction journal store and npm effect executor are not yet selected",
302
+ "resolution": "The release-state rooted transaction journal owns state while the npm executor applies only the sealed artifact plan and returns provider observations."
303
+ }
304
+ ],
305
+ "evidence": {
306
+ "positive": [
307
+ {
308
+ "path": "tests/publish-transaction.test.mjs",
309
+ "name": "npm publish transaction writes Buildchain evidence without real publish in dry-run mode"
310
+ }
311
+ ],
312
+ "negative": [
313
+ {
314
+ "path": "tests/publish-transaction.test.mjs",
315
+ "name": "publish evidence fails closed on material drift and missing required artifacts"
316
+ }
317
+ ],
318
+ "failure": [
319
+ {
320
+ "path": "tests/publish-transaction.test.mjs",
321
+ "name": "transaction recovery blocks repair and abandoned states unless override is explicit"
322
+ }
323
+ ],
324
+ "recovery": [
325
+ {
326
+ "path": "tests/publish-transaction.test.mjs",
327
+ "name": "artifact publish plan resumes missing artifacts and requires repair on conflicts"
328
+ }
329
+ ],
330
+ "idempotence": [
331
+ {
332
+ "path": "tests/promote-buildchain-ref-facade-contracts.test.mjs",
333
+ "name": "durable release transaction treats retried createRef as idempotent"
334
+ }
335
+ ]
336
+ }
337
+ },
338
+ {
339
+ "id": "release-activation-transaction",
340
+ "sourceMechanismId": "release-activation-transaction",
341
+ "routeKind": "v4-native",
342
+ "stateAuthority": "single-writer-state-machine",
343
+ "legacyFallbackAllowed": false,
344
+ "providerDecisionAuthorityAllowed": false,
345
+ "implementation": ["packages/core/release-activation-transaction.js"],
346
+ "invariants": {
347
+ "exactHeadFence": true,
348
+ "immutableRootFence": true,
349
+ "providerReadbackBeforeRetry": true,
350
+ "idempotentReplay": true
351
+ },
352
+ "resolvedResiduals": [
353
+ {
354
+ "source": "v4 phase executor ownership is not yet selected",
355
+ "resolution": "The v4 activation transaction owns phase order and receipt settlement; executors can only return effect receipts for an admitted phase."
356
+ }
357
+ ],
358
+ "evidence": {
359
+ "positive": [
360
+ {
361
+ "path": "tests/release-activation-transaction.test.mjs",
362
+ "name": "shadow activation preserves order and never claims released use"
363
+ }
364
+ ],
365
+ "negative": [
366
+ {
367
+ "path": "tests/release-activation-transaction.test.mjs",
368
+ "name": "activation fails closed on skipped phase and changed replay roots"
369
+ }
370
+ ],
371
+ "failure": [
372
+ {
373
+ "path": "tests/release-activation-transaction.test.mjs",
374
+ "name": "partial failure, retry, abort, and rollback remain explicit"
375
+ }
376
+ ],
377
+ "recovery": [
378
+ {
379
+ "path": "tests/release-activation-transaction.test.mjs",
380
+ "name": "partial failure, retry, abort, and rollback remain explicit"
381
+ }
382
+ ],
383
+ "idempotence": [
384
+ {
385
+ "path": "tests/release-activation-transaction.test.mjs",
386
+ "name": "activation fails closed on skipped phase and changed replay roots"
387
+ }
388
+ ]
389
+ }
390
+ },
391
+ {
392
+ "id": "publication-authority",
393
+ "sourceMechanismId": "publication-authority",
394
+ "routeKind": "v4-native",
395
+ "stateAuthority": "bounded-protocol",
396
+ "legacyFallbackAllowed": false,
397
+ "providerDecisionAuthorityAllowed": false,
398
+ "implementation": ["packages/core/publication-authority.js"],
399
+ "invariants": {
400
+ "exactHeadFence": true,
401
+ "immutableRootFence": true,
402
+ "providerReadbackBeforeRetry": true,
403
+ "idempotentReplay": true
404
+ },
405
+ "resolvedResiduals": [
406
+ {
407
+ "source": "v4 capability registry and provider-effect interface are not yet selected",
408
+ "resolution": "The publication authority registry admits exact capabilities and the provider interface can execute only a short-lived independently verified admission."
409
+ }
410
+ ],
411
+ "evidence": {
412
+ "positive": [
413
+ {
414
+ "path": "tests/publication-authority.test.mjs",
415
+ "name": "independent verifier issues an exact short-lived publication capability"
416
+ }
417
+ ],
418
+ "negative": [
419
+ {
420
+ "path": "tests/publication-authority.test.mjs",
421
+ "name": "unknown and evidence-only workflows cannot obtain product publication capability"
422
+ }
423
+ ],
424
+ "failure": [
425
+ {
426
+ "path": "tests/publication-authority.test.mjs",
427
+ "name": "runner downgrade and control-plane drift fail closed"
428
+ }
429
+ ],
430
+ "recovery": [
431
+ {
432
+ "path": "tests/publication-authority.test.mjs",
433
+ "name": "candidate reuse rebinds a qualifying Gate to an equivalent target tree"
434
+ }
435
+ ],
436
+ "idempotence": [
437
+ {
438
+ "path": "tests/publication-authority.test.mjs",
439
+ "name": "consumer qualification emits a deterministic receipt over the full Gate handoff"
440
+ }
441
+ ]
442
+ }
443
+ },
444
+ {
445
+ "id": "github-governance-authority",
446
+ "sourceMechanismId": "github-governance-authority",
447
+ "routeKind": "v4-native",
448
+ "stateAuthority": "bounded-protocol",
449
+ "legacyFallbackAllowed": false,
450
+ "providerDecisionAuthorityAllowed": false,
451
+ "implementation": ["packages/core/github-governance-authority.js"],
452
+ "invariants": {
453
+ "exactHeadFence": true,
454
+ "immutableRootFence": true,
455
+ "providerReadbackBeforeRetry": true,
456
+ "idempotentReplay": true
457
+ },
458
+ "resolvedResiduals": [
459
+ {
460
+ "source": "v4 policy ownership boundary between core and GitHub adapter is not yet selected",
461
+ "resolution": "The core compiles and verifies effective policy roots while the GitHub adapter only observes or applies the exact reversible provider plan."
462
+ }
463
+ ],
464
+ "evidence": {
465
+ "positive": [
466
+ {
467
+ "path": "tests/github-governance-authority.test.mjs",
468
+ "name": "qualifying receipt binds policy, ownership, effective rules, authority, and freshness"
469
+ }
470
+ ],
471
+ "negative": [
472
+ {
473
+ "path": "tests/github-governance-authority.test.mjs",
474
+ "name": "unadmitted targets, required-check removal, producer substitution, and strict drift deny"
475
+ }
476
+ ],
477
+ "failure": [
478
+ {
479
+ "path": "tests/github-governance-authority.test.mjs",
480
+ "name": "latest-push review, Code Owner self-protection, bypass, and provider-read failures deny"
481
+ }
482
+ ],
483
+ "recovery": [
484
+ {
485
+ "path": "tests/github-governance-authority.test.mjs",
486
+ "name": "rollout plan requires frozen inventory and carries exact rollback"
487
+ }
488
+ ],
489
+ "idempotence": [
490
+ {
491
+ "path": "tests/release-governance-reconciliation.test.mjs",
492
+ "name": "reconciliation is idempotent once the emitted aggregate is protected"
493
+ }
494
+ ]
495
+ }
496
+ },
497
+ {
498
+ "id": "engineering-housekeeper",
499
+ "sourceMechanismId": "engineering-housekeeper",
500
+ "routeKind": "v4-native",
501
+ "stateAuthority": "bounded-protocol",
502
+ "legacyFallbackAllowed": false,
503
+ "providerDecisionAuthorityAllowed": false,
504
+ "implementation": ["packages/core/engineering-housekeeper.js"],
505
+ "invariants": {
506
+ "exactHeadFence": true,
507
+ "immutableRootFence": true,
508
+ "providerReadbackBeforeRetry": true,
509
+ "idempotentReplay": true
510
+ },
511
+ "resolvedResiduals": [
512
+ {
513
+ "source": "A future Rust migration would require a separately qualified writer cutover; v4 intentionally retains the TypeScript production authority.",
514
+ "resolution": "The TypeScript v4 authority remains the single production writer; no Rust fallback or second writer is admitted."
515
+ }
516
+ ],
517
+ "evidence": {
518
+ "positive": [
519
+ {
520
+ "path": "tests/engineering-housekeeper-github.test.mjs",
521
+ "name": "apply deletes an exact merged branch after current-state revalidation"
522
+ }
523
+ ],
524
+ "negative": [
525
+ {
526
+ "path": "tests/engineering-housekeeper.test.mjs",
527
+ "name": "branch deletion requires exact ancestry, no open PR, and no protected or retained match"
528
+ }
529
+ ],
530
+ "failure": [
531
+ {
532
+ "path": "tests/engineering-housekeeper-github.test.mjs",
533
+ "name": "head, target, active-PR, ancestry, and rename races fail closed"
534
+ }
535
+ ],
536
+ "recovery": [
537
+ {
538
+ "path": "tests/engineering-housekeeper-github.test.mjs",
539
+ "name": "replays are no-ops and provider failures remain explicit in rooted receipts"
540
+ }
541
+ ],
542
+ "idempotence": [
543
+ {
544
+ "path": "tests/engineering-housekeeper.test.mjs",
545
+ "name": "plans and receipts are deterministic and repeated plans are no-ops"
546
+ }
547
+ ]
548
+ }
549
+ },
550
+ {
551
+ "id": "release-passport-and-artifact-proof",
552
+ "sourceMechanismId": "release-passport-and-artifact-proof",
553
+ "routeKind": "v4-native",
554
+ "stateAuthority": "bounded-protocol",
555
+ "legacyFallbackAllowed": false,
556
+ "providerDecisionAuthorityAllowed": false,
557
+ "implementation": ["packages/core/release-passport.js"],
558
+ "invariants": {
559
+ "exactHeadFence": true,
560
+ "immutableRootFence": true,
561
+ "providerReadbackBeforeRetry": true,
562
+ "idempotentReplay": true
563
+ },
564
+ "resolvedResiduals": [
565
+ {
566
+ "source": "v4 proof graph storage and compatibility projection boundary are not yet selected",
567
+ "resolution": "The sealed Passport and sibling artifact evidence are the immutable proof graph; discovery adapters project locators without rewriting proof."
568
+ }
569
+ ],
570
+ "evidence": {
571
+ "positive": [
572
+ {
573
+ "path": "tests/release-passport.test.mjs",
574
+ "name": "release passport core verifies unified three-platform npm passport"
575
+ }
576
+ ],
577
+ "negative": [
578
+ {
579
+ "path": "tests/release-passport.test.mjs",
580
+ "name": "artifact passport verification fails closed on digest mismatch"
581
+ }
582
+ ],
583
+ "failure": [
584
+ {
585
+ "path": "tests/artifact-verification-envelope.test.mjs",
586
+ "name": "fails closed for expired and revoked envelopes"
587
+ }
588
+ ],
589
+ "recovery": [
590
+ {
591
+ "path": "tests/release-passport.test.mjs",
592
+ "name": "artifact passport discovery falls back to a custom locator after GitHub default miss"
593
+ }
594
+ ],
595
+ "idempotence": [
596
+ {
597
+ "path": "tests/release-passport.test.mjs",
598
+ "name": "release passport verifies anchored derived version material"
599
+ }
600
+ ]
601
+ }
602
+ },
603
+ {
604
+ "id": "release-propagation-work-control",
605
+ "sourceMechanismId": "release-propagation-work-control",
606
+ "routeKind": "v4-native",
607
+ "stateAuthority": "single-writer-state-machine",
608
+ "legacyFallbackAllowed": false,
609
+ "providerDecisionAuthorityAllowed": false,
610
+ "implementation": ["packages/core/release-propagation-work-control.js"],
611
+ "invariants": {
612
+ "exactHeadFence": true,
613
+ "immutableRootFence": true,
614
+ "providerReadbackBeforeRetry": true,
615
+ "idempotentReplay": true
616
+ },
617
+ "resolvedResiduals": [
618
+ {
619
+ "source": "v4 Work persistence and external executor protocol are not yet selected",
620
+ "resolution": "The rooted Work document and ordered stage receipts are the persistence boundary; external executors can only return typed stage evidence."
621
+ }
622
+ ],
623
+ "evidence": {
624
+ "positive": [
625
+ {
626
+ "path": "tests/release-propagation.test.mjs",
627
+ "name": "agent-native propagation work binds Family State v2, exact WorkRefs, release lock, and execution authority"
628
+ }
629
+ ],
630
+ "negative": [
631
+ {
632
+ "path": "tests/release-propagation.test.mjs",
633
+ "name": "release propagation rejects npm gitHead, exact tag, source SHA, and package version disagreement"
634
+ }
635
+ ],
636
+ "failure": [
637
+ {
638
+ "path": "tests/release-propagation.test.mjs",
639
+ "name": "release propagation receipt keeps alpha truth independent from site visibility"
640
+ }
641
+ ],
642
+ "recovery": [
643
+ {
644
+ "path": "tests/release-propagation.test.mjs",
645
+ "name": "propagation work resumes retryable failure and completes only after online readback plus Work Control decision"
646
+ }
647
+ ],
648
+ "idempotence": [
649
+ {
650
+ "path": "tests/release-propagation-pickup.test.mjs",
651
+ "name": "manual pickup only creates paused Work after explicit create and returns a true no-op"
652
+ }
653
+ ]
654
+ }
655
+ },
656
+ {
657
+ "id": "release-tail-provider-plane",
658
+ "sourceMechanismId": "release-tail-provider-plane",
659
+ "routeKind": "v4-native",
660
+ "stateAuthority": "single-writer-state-machine",
661
+ "legacyFallbackAllowed": false,
662
+ "providerDecisionAuthorityAllowed": false,
663
+ "implementation": ["packages/core/release-tail-provider-plane.js"],
664
+ "invariants": {
665
+ "exactHeadFence": true,
666
+ "immutableRootFence": true,
667
+ "providerReadbackBeforeRetry": true,
668
+ "idempotentReplay": true
669
+ },
670
+ "resolvedResiduals": [
671
+ {
672
+ "source": "consumer cutovers and production provider credentials remain separate reviewed changes",
673
+ "resolution": "Consumer cutover and credentials remain outside semantic authority; the v4 transaction accepts only declared provider observations and exact effect receipts."
674
+ }
675
+ ],
676
+ "evidence": {
677
+ "positive": [
678
+ {
679
+ "path": "tests/release-tail-provider-plane.test.mjs",
680
+ "name": "all capabilities settle through one transaction and standardized envelopes"
681
+ }
682
+ ],
683
+ "negative": [
684
+ {
685
+ "path": "tests/release-tail-provider-plane.test.mjs",
686
+ "name": "declaration parser rejects executable data and identity drift"
687
+ }
688
+ ],
689
+ "failure": [
690
+ {
691
+ "path": "tests/release-tail-provider-plane.test.mjs",
692
+ "name": "terminal provider conflicts fail closed"
693
+ }
694
+ ],
695
+ "recovery": [
696
+ {
697
+ "path": "tests/release-tail-provider-plane.test.mjs",
698
+ "name": "effect success with a lost response completes from post-effect readback"
699
+ }
700
+ ],
701
+ "idempotence": [
702
+ {
703
+ "path": "tests/release-tail-provider-plane.test.mjs",
704
+ "name": "duplicate invocation returns the settled transaction without provider effects"
705
+ }
706
+ ]
707
+ }
708
+ }
709
+ ]
710
+ }