@kungfu-tech/buildchain 3.0.7 → 3.0.8

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 (45) hide show
  1. package/contracts/engineering-housekeeper-v1.schema.json +11 -1
  2. package/contracts/fixtures/engineering-housekeeper-v1/cases.json +10 -0
  3. package/contracts/release-cut-v1.schema.json +70 -0
  4. package/contracts/release-train-transition-v1.schema.json +85 -0
  5. package/contracts/release-train-v1.schema.json +82 -0
  6. package/dist/site/buildchain-contract.json +302 -16
  7. package/dist/site/buildchain-site.json +83 -27
  8. package/dist/site/capability-registry.json +4 -3
  9. package/dist/site/kfd-claims.json +45 -8
  10. package/dist/site/kfd-upstream-aggregate.json +1 -1
  11. package/dist/site/manual-registry.json +22 -6
  12. package/dist/site/node-api-registry.json +1218 -489
  13. package/dist/site/page-registry.json +65 -17
  14. package/dist/site/public-surface-audit.json +13 -8
  15. package/dist/site/publication-authority-registry.json +2 -4
  16. package/dist/site/publication-registry.json +4 -4
  17. package/dist/site/release-provenance.json +1 -0
  18. package/dist/site/site-manifest.json +18 -10
  19. package/dist/site/workflow-registry.json +10 -9
  20. package/docs/MAP.md +1 -1
  21. package/docs/aws-us-elastic-runner-burst-plane.md +20 -7
  22. package/docs/engineering-housekeeper.md +61 -28
  23. package/docs/node-api-reference.md +109 -77
  24. package/docs/release-governance.md +13 -10
  25. package/docs/release-train.md +102 -0
  26. package/docs/reusable-build-surface.md +16 -6
  27. package/docs/site-bundle-contract.md +5 -1
  28. package/docs/versioning.md +1 -0
  29. package/package.json +2 -1
  30. package/packages/core/buildchain-agent-manuals.js +1 -0
  31. package/packages/core/buildchain-compatibility-proof.js +577 -0
  32. package/packages/core/buildchain-contract.js +46 -181
  33. package/packages/core/engineering-housekeeper-github-client.js +18 -1
  34. package/packages/core/engineering-housekeeper-github.js +247 -41
  35. package/packages/core/engineering-housekeeper.js +15 -0
  36. package/packages/core/release-train.js +520 -0
  37. package/scripts/aws-macos-jit-controller-core.mjs +33 -11
  38. package/scripts/aws-macos-jit-controller-runtime.mjs +208 -0
  39. package/scripts/aws-macos-jit-controller.mjs +50 -37
  40. package/scripts/aws-macos-jit-core.mjs +41 -3
  41. package/scripts/buildchain-contract-lock.mjs +6 -0
  42. package/scripts/dispatch-artifact-signing-authority.mjs +4 -7
  43. package/scripts/engineering-housekeeper-workflow.mjs +13 -6
  44. package/scripts/generate-site-bundle.mjs +2 -0
  45. package/scripts/site-capability-metadata.mjs +1 -0
@@ -723,13 +723,13 @@ status to failure, while the merge group must still produce its own final check.
723
723
  that want a stable day-to-day operations contract, Buildchain also exposes a
724
724
  patrol workflow family:
725
725
 
726
- | Workflow | Intended cadence | Default intent |
727
- | --- | --- | --- |
728
- | `.github/workflows/patrol-daily.yml` | daily | lightweight inspection plus ready dev PR maintenance |
729
- | `.github/workflows/patrol-weekly.yml` | weekly | release-state, passport, gate, and stale-state health checks as they are added |
730
- | `.github/workflows/patrol-monthly.yml` | monthly | governance, permission, branch-protection, and workflow drift checks as they are added |
731
- | `.github/workflows/patrol-observed-evidence.yml` | caller-selected schedule | validated immutable observation plus atomic last-known-good publication; no per-refresh PR |
732
- | `.github/workflows/stable-candidate-patrol.yml` | repository-selected release window | qualify immutable alpha candidates and open the exact source-lock stable PR |
726
+ | Workflow | Intended cadence | Default intent |
727
+ | ------------------------------------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------ |
728
+ | `.github/workflows/patrol-daily.yml` | daily | lightweight inspection plus ready dev PR maintenance |
729
+ | `.github/workflows/patrol-weekly.yml` | weekly | release-state, passport, gate, and stale-state health checks as they are added |
730
+ | `.github/workflows/patrol-monthly.yml` | monthly | governance, permission, branch-protection, and workflow drift checks as they are added |
731
+ | `.github/workflows/patrol-observed-evidence.yml` | caller-selected schedule | validated immutable observation plus atomic last-known-good publication; no per-refresh PR |
732
+ | `.github/workflows/stable-candidate-patrol.yml` | repository-selected release window | qualify immutable alpha candidates and open the exact source-lock stable PR |
733
733
 
734
734
  The cadence names describe patrol intensity, not release cadence:
735
735
 
@@ -792,9 +792,12 @@ The separate workflow names keep consumer schedules readable and stable while
792
792
  Buildchain adds new checks behind the cadence wrappers.
793
793
 
794
794
  Branch and pull-request residue uses the separate
795
- [`Engineering Housekeeper`](engineering-housekeeper.md) contract. Its scheduled
796
- callers are report-only and read-only by default; apply requires a manual,
797
- explicit two-part gate, exact provider-state revalidation, scoped job
795
+ [`Engineering Housekeeper`](engineering-housekeeper.md) contract. Its reusable
796
+ surface remains report-first, while Buildchain's committed daily, weekly, and
797
+ monthly callers run unattended apply across all discovered protected mainlines.
798
+ Only the positive temporary-development allowlist is mutable; unknown branch
799
+ families remain report-only. Every apply still requires the caller's explicit
800
+ two-part policy inputs, exact provider-state revalidation, scoped job
798
801
  permissions, and rooted plan/report/receipt evidence.
799
802
 
800
803
  ## Package-Manager Adapters
@@ -0,0 +1,102 @@
1
+ ---
2
+ status: preview
3
+ period: ongoing
4
+ theme: buildchain-release-train
5
+ doc_type: architecture-and-usage
6
+ source_level: local-files
7
+ confidence: high
8
+ sensitivity: public
9
+ evidence_grade: A
10
+ review_state: self-reviewed
11
+ last_reviewed: 2026-08-10
12
+ ai_provenance:
13
+ model_family: GPT-5
14
+ product: Codex
15
+ generated_at: 2026-08-10
16
+ visible_context: Buildchain v3 release candidate, recovery, Dev to Alpha Candidate Patrol, Warrant, publication transaction, and release governance sources.
17
+ invisible_context_boundary: Live provider state and credentials were not read.
18
+ ---
19
+
20
+ # Release Train and Release Cut
21
+
22
+ Buildchain v3 exposes a pure, provider-neutral Release Train contract for
23
+ retaining one authorized Alpha candidate while the development branch keeps
24
+ moving. The contract does not select a candidate, write a Git ref, open a pull
25
+ request, publish a package, or replace any existing provider gate. Controllers
26
+ own those effects and persist the rooted contract in their declared store.
27
+
28
+ ## Frozen Release Cut
29
+
30
+ `createReleaseCut()` records one exact candidate generation. It binds:
31
+
32
+ - repository, source branch, and target branch;
33
+ - the development head from which the cut was authorized;
34
+ - candidate commit and tree;
35
+ - exact Alpha base and Buildchain runtime commits;
36
+ - a positive generation;
37
+ - sorted, duplicate-free authority roots; and
38
+ - a canonical creation timestamp.
39
+
40
+ The resulting `cutRoot` covers all of those fields. A generation greater than
41
+ one must name the prior cut root and one of four supersession causes:
42
+
43
+ - `incompatible-semantics`;
44
+ - `alpha-base-incompatibility`;
45
+ - `invalid-authority`; or
46
+ - `severe-security`.
47
+
48
+ Latest-development movement is deliberately absent from that list. Merely
49
+ observing a newer development head therefore cannot replace the candidate or
50
+ increment its generation.
51
+
52
+ ## Release Train state
53
+
54
+ `createReleaseTrain()` wraps the frozen cut in
55
+ `kungfu-buildchain-release-train/v1`. The train identity root covers only the
56
+ immutable Release Cut. Its state chain can move through:
57
+
58
+ ```text
59
+ preparing -> building -> publication-blocked -> publishable -> terminal
60
+ \-> repair-required --------^ \-> superseded
61
+ ```
62
+
63
+ The complete transition table is enforced by the Node API. `superseded` and
64
+ `terminal` are terminal states. A superseded transition must bind its explicit
65
+ cause, replacement cut root, and replacement candidate commit.
66
+
67
+ Every transition uses compare-and-swap against the exact current `stateRoot`,
68
+ binds non-empty authority roots, and produces deterministic request,
69
+ transition, and next-state roots. Replaying the exact same request after it has
70
+ already landed returns the existing train unchanged. A stale expected state or
71
+ an invalid transition fails closed.
72
+
73
+ `observeReleaseTrain()` appends a rooted development-head observation without
74
+ changing `trainRoot`, `cutRoot`, candidate identity, generation, or state. The
75
+ same exact observation is idempotent.
76
+
77
+ ## Readback and legacy state
78
+
79
+ `validateReleaseCut()` checks the standalone immutable cut and its canonical
80
+ root. `validateReleaseTrain()` replays the complete transition and observation
81
+ chain from that frozen cut and rejects root drift, stale compare-and-swap
82
+ edges, duplicate observations, or an invalid lifecycle path.
83
+
84
+ `readReleaseTrain()` also recognizes the existing
85
+ `kungfu-buildchain-dev-alpha-candidate-state/v1` patrol marker. That path is a
86
+ read-only compatibility projection with `authoritative: false` and `train:
87
+ null`. It exposes the legacy generation and candidate SHA when present, but it
88
+ never invents a Release Cut, authority root, runtime binding, Alpha base, or
89
+ candidate tree retroactively. A controller must create a new, fully witnessed
90
+ Release Cut before it can claim Release Train authority.
91
+
92
+ ## Public API and schemas
93
+
94
+ Import the contract from `@kungfu-tech/buildchain/release-train`. Machine
95
+ schemas are published with the package:
96
+
97
+ - `contracts/release-cut-v1.schema.json`;
98
+ - `contracts/release-train-v1.schema.json`; and
99
+ - `contracts/release-train-transition-v1.schema.json`.
100
+
101
+ The schemas check structure. The Node validator remains authoritative for
102
+ canonical roots, state-chain replay, idempotence, and cross-field semantics.
@@ -338,7 +338,8 @@ ref is not blind trust. Each released Buildchain ref carries a package-owned
338
338
  runtime contract world in `dist/site/buildchain-contract.json`. Consumers may
339
339
  keep a small lock file, `.buildchain/contract-lock.json`, recording the
340
340
  Buildchain ref, resolved SHA, contract digest, compatibility digest, accepted
341
- major line, and compatibility policy they reviewed.
341
+ major line, compatibility proof registry root, per-surface proof roots, and the
342
+ compatibility policy they reviewed.
342
343
 
343
344
  The reusable build trust gate checks this lock before any heavy matrix job:
344
345
 
@@ -355,6 +356,14 @@ promise changes, or the major line changes. Additive changes such as optional
355
356
  inputs, optional outputs, diagnostics, or documentation updates continue under
356
357
  the default `major-compatible` policy.
357
358
 
359
+ A changed breaking digest is never accepted because it appears in a handwritten
360
+ allowlist. Each historical digest must resolve to exactly one immutable,
361
+ directed compatibility proof for the current surface digest. The proof binds
362
+ the operation scope, protected authority, exact Git cut, and protected-merge
363
+ evidence. The legacy `compatibleBreakingDigests` arrays remain in the site
364
+ contract only as deterministic, parity-checked projections of those proofs;
365
+ an orphan digest or ambiguous proof fails source acceptance.
366
+
358
367
  ```yaml
359
368
  jobs:
360
369
  build:
@@ -371,11 +380,12 @@ jobs:
371
380
 
372
381
  When compatible drift is detected, the build continues and Buildchain opens or
373
382
  updates a low-priority issue in the consumer repository. The issue records the
374
- old SHA/digest, new SHA/digest, compatibility result, workflow run, and the next
375
- action: review the Buildchain release notes and update the lock. When breaking
376
- drift is detected, the same issue path is used, but the trust gate fails before
377
- matrix build or publish work starts. If the workflow token cannot write issues,
378
- Buildchain writes a copyable issue body into the job summary.
383
+ old SHA/digest, new SHA/digest, compatibility result, workflow run, exact proof
384
+ root, direction, scope, evidence, authority, cut, and rooted verification
385
+ receipt. When breaking drift is detected, the same issue path is used, but the
386
+ trust gate fails before matrix build or publish work starts. If the workflow
387
+ token cannot write issues, Buildchain writes a copyable issue body into the job
388
+ summary.
379
389
 
380
390
  The lock is intentionally small. It does not copy the full contract. The full
381
391
  contract remains in the Buildchain ref and package; the consumer records only
@@ -54,7 +54,11 @@ overview, and fixture guides.
54
54
  `buildchain-contract.json` is the machine-readable Buildchain runtime contract
55
55
  world used by floating-ref contract locks. It records public workflow/action/CLI
56
56
  surfaces, compatibility digests, and audit digests for the files that implement
57
- those surfaces.
57
+ those surfaces. Its immutable compatibility proofs bind historical breaking
58
+ digests to exact target surfaces, operation scopes, protected authority,
59
+ evidence, and Git cuts. `compatibleBreakingDigests` and per-surface proof-root
60
+ lists are generated projections; site consumers must not edit or reinterpret
61
+ them as independent authority.
58
62
  `manual-registry.json` enumerates the packaged Markdown manuals with source
59
63
  digests so an agent can find complete operating documentation from the npm
60
64
  artifact. `node-api-registry.json` enumerates public Node import surfaces from
@@ -79,6 +79,7 @@ repository changes are patch".
79
79
 
80
80
  | Date | Action | Line | Faces | Class | Rationale | PR |
81
81
  | ---------- | ------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
82
+ | 2026-08-10 | extend-minor | `v3.0` | release-cut-contract, release-train-state-machine, release-train-node-export | additive | Add a provider-neutral rooted Release Cut and idempotent Release Train state contract that freezes candidate, tree, Alpha base, runtime, generation, and authority while treating later Dev movement as observation rather than implicit supersession. | |
82
83
  | 2026-08-05 | extend-minor | `v3.0` | auditable-demo-scenario, auditable-demo-capture, auditable-demo-adapter | additive | Add an opt-in deterministic readable-playback declaration that preserves captured terminal payloads and order while normalizing only presentation timing; omitted playback continues to use observed PTY timestamps, and existing composition modes remain unchanged. | |
83
84
  | 2026-08-04 | extend-minor | `v3.0` | dev-delivery-warrant-queue, source-qualification-proof, integration-delivery-proof, dev-delivery-cli, reusable-dev-delivery-workflows | additive | Add durable fair and fenced protected-dev scheduling plus split source/integration proof contracts. Existing PR admission remains available through explicit `off` and `shadow` rollout modes; no existing command, export, or release flow is removed. | |
84
85
  | 2026-08-01 | extend-minor | `v3.0` | cli-reference-registry, node-api-symbol-registry, golden-path-manual | additive | Add generated, drift-checked CLI and Node API reference registries to the public site bundle, plus a package-tested first-user Golden Path; existing command execution and import semantics remain unchanged. | |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kungfu-tech/buildchain",
3
- "version": "3.0.7",
3
+ "version": "3.0.8",
4
4
  "private": false,
5
5
  "description": "Buildchain Release Passport, release governance, CLI toolkit, and site facts.",
6
6
  "repository": "https://github.com/kungfu-systems/buildchain",
@@ -54,6 +54,7 @@
54
54
  "./kfd-gate": "./packages/core/kfd-gate.js",
55
55
  "./release-candidate": "./packages/core/release-candidate.js",
56
56
  "./release-candidate-recovery": "./packages/core/release-candidate-recovery.js",
57
+ "./release-train": "./packages/core/release-train.js",
57
58
  "./stable-candidate-ledger": "./packages/core/stable-candidate-ledger.js",
58
59
  "./release-passport": "./packages/core/release-passport.js",
59
60
  "./release-passport-contract": "./packages/core/release-passport-contract.js",
@@ -9,6 +9,7 @@ export const BUILDCHAIN_AGENT_MANUALS = Object.freeze([
9
9
  { id: "publication-authority", title: "Sealed publication authority", path: "docs/publication-authority.md", plane: "verify" },
10
10
  { id: "github-governance-authority", title: "GitHub governance authority", path: "docs/github-governance-authority.md", plane: "verify" },
11
11
  { id: "release-candidate", title: "Release Candidate Passport", path: "docs/release-candidate.md", plane: "verify" },
12
+ { id: "release-train", title: "Release Train and Release Cut", path: "docs/release-train.md", plane: "verify" },
12
13
  { id: "release-propagation", title: "Release propagation", path: "docs/release-propagation.md", plane: "use" },
13
14
  { id: "readme-badges", title: "README badge blocks", path: "docs/readme-badges.md", plane: "use" },
14
15
  { id: "homebrew", title: "Homebrew distribution indexes", path: "docs/homebrew.md", plane: "use" },