@kungfu-tech/buildchain 2.8.7-alpha.1 → 2.8.7
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 +29 -1
- package/dist/site/agent-index.json +1 -0
- package/dist/site/artifact-schemas.json +1 -0
- package/dist/site/buildchain-contract.json +4 -4
- package/dist/site/buildchain-site.json +1619 -10
- package/dist/site/kfd-claims.json +326 -50
- package/dist/site/manual-registry.json +49 -10
- package/dist/site/node-api-registry.json +2 -2
- package/dist/site/page-registry.json +1437 -0
- package/dist/site/release-provenance.json +1 -0
- package/dist/site/site-manifest.json +56 -10
- package/dist/site/workflow-registry.json +5 -0
- package/docs/runtime-train-validation.md +123 -0
- package/docs/site-bundle-contract.md +30 -0
- package/docs/web-surface-deployments.md +22 -9
- package/package.json +4 -23
- package/packages/core/buildchain-kfd-claims.js +37 -6
- package/scripts/check-inventory.mjs +114 -5
- package/scripts/generate-site-bundle.mjs +311 -1
- package/scripts/web-surface-production-release-pr.mjs +315 -0
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"./buildchain-kfd-claims": "./packages/core/buildchain-kfd-claims.js",
|
|
23
23
|
"./site/buildchain-site.json": "./dist/site/buildchain-site.json",
|
|
24
24
|
"./site/site-manifest.json": "./dist/site/site-manifest.json",
|
|
25
|
+
"./site/page-registry.json": "./dist/site/page-registry.json",
|
|
25
26
|
"./site/cli-registry.json": "./dist/site/cli-registry.json",
|
|
26
27
|
"./site/manual-registry.json": "./dist/site/manual-registry.json",
|
|
27
28
|
"./site/node-api-registry.json": "./dist/site/node-api-registry.json",
|
|
@@ -11,7 +11,20 @@
|
|
|
11
11
|
"versionSource": "package.json#version"
|
|
12
12
|
},
|
|
13
13
|
"entrypoint": "buildchain-site.json",
|
|
14
|
+
"source": {
|
|
15
|
+
"homepageTextSource": "README.md",
|
|
16
|
+
"docsMap": "docs/MAP.md",
|
|
17
|
+
"siteFactsDir": "dist/site"
|
|
18
|
+
},
|
|
14
19
|
"docs": [
|
|
20
|
+
{
|
|
21
|
+
"id": "map",
|
|
22
|
+
"title": "Buildchain documentation map",
|
|
23
|
+
"path": "docs/MAP.md",
|
|
24
|
+
"plane": "use",
|
|
25
|
+
"exists": true,
|
|
26
|
+
"digest": "sha256:b5cfef531ba8ca655d8d66ffe0e530a0ca2c971daad5880943d2b824216ed043"
|
|
27
|
+
},
|
|
15
28
|
{
|
|
16
29
|
"id": "install",
|
|
17
30
|
"title": "Install and verify Buildchain",
|
|
@@ -44,6 +57,22 @@
|
|
|
44
57
|
"exists": true,
|
|
45
58
|
"digest": "sha256:36899140a9b2e9ce1565ed41f3d64f73a8829fad3d59a04b9498d9479c85c4be"
|
|
46
59
|
},
|
|
60
|
+
{
|
|
61
|
+
"id": "consumer-issue-reporting",
|
|
62
|
+
"title": "Consumer issue reporting",
|
|
63
|
+
"path": "docs/consumer-issue-reporting.md",
|
|
64
|
+
"plane": "use",
|
|
65
|
+
"exists": true,
|
|
66
|
+
"digest": "sha256:8e2159312e47b42ab0bb644cb195362150acc8872e6ac0e7380ece0c5cf36955"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "infra-contract",
|
|
70
|
+
"title": "Infra Contract",
|
|
71
|
+
"path": "docs/infra-contract.md",
|
|
72
|
+
"plane": "use",
|
|
73
|
+
"exists": true,
|
|
74
|
+
"digest": "sha256:7826e8c70ac2d90ddd8d4e38bcdd1bcfa36eef5106431d7ad94b2fe9c8d3d5dc"
|
|
75
|
+
},
|
|
47
76
|
{
|
|
48
77
|
"id": "toolkit-observability",
|
|
49
78
|
"title": "Toolkit observability",
|
|
@@ -58,7 +87,23 @@
|
|
|
58
87
|
"path": "docs/site-bundle-contract.md",
|
|
59
88
|
"plane": "use",
|
|
60
89
|
"exists": true,
|
|
61
|
-
"digest": "sha256:
|
|
90
|
+
"digest": "sha256:1977091fc18b816208e7af50a177fd15e114498bfa49041573812405b46585aa"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "migration-inventory",
|
|
94
|
+
"title": "Migration inventory",
|
|
95
|
+
"path": "docs/migration-inventory.md",
|
|
96
|
+
"plane": "verify",
|
|
97
|
+
"exists": true,
|
|
98
|
+
"digest": "sha256:80018cf78785431e67bbc5278d82dda80d0baa320cdb5e4abda26a0b05e5c0bc"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"id": "ownership",
|
|
102
|
+
"title": "Ownership",
|
|
103
|
+
"path": "docs/ownership.md",
|
|
104
|
+
"plane": "why",
|
|
105
|
+
"exists": true,
|
|
106
|
+
"digest": "sha256:49074fb520c404d3c9f5b49b33562d4bdc4e3ed407cf22543fa8e19e312a6b8e"
|
|
62
107
|
},
|
|
63
108
|
{
|
|
64
109
|
"id": "product-mechanism",
|
|
@@ -116,6 +161,14 @@
|
|
|
116
161
|
"exists": true,
|
|
117
162
|
"digest": "sha256:0a2f46501a64905067cc5872b45ac4824f9e632d59bfdfb2f6a794dfc5f959ea"
|
|
118
163
|
},
|
|
164
|
+
{
|
|
165
|
+
"id": "runtime-train-validation",
|
|
166
|
+
"title": "Runtime train validation",
|
|
167
|
+
"path": "docs/runtime-train-validation.md",
|
|
168
|
+
"plane": "verify",
|
|
169
|
+
"exists": true,
|
|
170
|
+
"digest": "sha256:bb053594407bd0f78aa43352a249a2ffa19825374147cc712cd56ca6ad50dfa3"
|
|
171
|
+
},
|
|
119
172
|
{
|
|
120
173
|
"id": "versioning",
|
|
121
174
|
"title": "Versioning",
|
|
@@ -130,18 +183,11 @@
|
|
|
130
183
|
"path": "docs/web-surface-deployments.md",
|
|
131
184
|
"plane": "use",
|
|
132
185
|
"exists": true,
|
|
133
|
-
"digest": "sha256:
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
"id": "infra-contract",
|
|
137
|
-
"title": "Infra Contract",
|
|
138
|
-
"path": "docs/infra-contract.md",
|
|
139
|
-
"plane": "use",
|
|
140
|
-
"exists": true,
|
|
141
|
-
"digest": "sha256:7826e8c70ac2d90ddd8d4e38bcdd1bcfa36eef5106431d7ad94b2fe9c8d3d5dc"
|
|
186
|
+
"digest": "sha256:61891635707e9ed27b8754b83713db61cf9a7a6bdf65beb6a9ac8aa39356e168"
|
|
142
187
|
}
|
|
143
188
|
],
|
|
144
189
|
"facts": [
|
|
190
|
+
"page-registry.json",
|
|
145
191
|
"cli-registry.json",
|
|
146
192
|
"manual-registry.json",
|
|
147
193
|
"node-api-registry.json",
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Runtime Train Validation
|
|
2
|
+
|
|
3
|
+
Buildchain consumers should keep stable workflow refs such as `@v2` in
|
|
4
|
+
committed workflow YAML. Runtime trains provide a temporary validation pointer
|
|
5
|
+
for Buildchain changes that are ready for downstream testing but not yet
|
|
6
|
+
promoted through the normal `dev -> alpha -> release` chain.
|
|
7
|
+
|
|
8
|
+
## Train refs
|
|
9
|
+
|
|
10
|
+
A train ref is a branch in the Buildchain repository:
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
train/v2/v2.3/<capability>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
It is a validation pointer, not a release channel:
|
|
17
|
+
|
|
18
|
+
- it does not move `v2`, `vX.Y`, `vX.Y-alpha`, exact tags, npm dist-tags, or
|
|
19
|
+
production refs;
|
|
20
|
+
- it must not be pinned as a long-term production dependency;
|
|
21
|
+
- it should point at the Buildchain commit that downstream maintainers are
|
|
22
|
+
expected to validate;
|
|
23
|
+
- it is not a pending merge target or a delivery state;
|
|
24
|
+
- the final durable path is still a pull request into the active `dev/*`
|
|
25
|
+
channel, followed by the requested alpha or release promotion.
|
|
26
|
+
- it may remain for a retention window after release so initiating repositories
|
|
27
|
+
have a stable fast-use and rollback channel while stable refs, caches, or
|
|
28
|
+
rollout windows settle.
|
|
29
|
+
|
|
30
|
+
## Buildchain contributor requirement
|
|
31
|
+
|
|
32
|
+
When a Buildchain change needs downstream validation before stable refs move,
|
|
33
|
+
publish a train ref before asking consumers to test it:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
git push origin HEAD:refs/heads/train/v2/v2.3/<capability>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Use a capability slug that names the behavior being validated, for example:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
train/v2/v2.3/runtime-loader
|
|
43
|
+
train/v2/v2.3/toolkit-diagnostics
|
|
44
|
+
train/v2/v2.3/site-source-of-truth
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The pull request or validation request should include the train ref, the exact
|
|
48
|
+
commit SHA it points to, and the downstream evidence expected from consumers.
|
|
49
|
+
If the train is refreshed, state the new SHA in the validation thread.
|
|
50
|
+
|
|
51
|
+
After downstream validation succeeds, close out through the normal release
|
|
52
|
+
path. Merge the Buildchain pull request into the active `dev/*` mainline, run
|
|
53
|
+
the requested alpha or release promotion, and record the final mainline commit
|
|
54
|
+
plus release ref or tag in the delivery thread. Do not leave the train as the
|
|
55
|
+
item that still needs to be merged; it is only a temporary fast-use,
|
|
56
|
+
diagnostic, and rollback channel for initiating repositories. Retained trains
|
|
57
|
+
are cleaned up by a separate periodic Buildchain cleanup task.
|
|
58
|
+
|
|
59
|
+
## Consumer workflow requirement
|
|
60
|
+
|
|
61
|
+
Consumers keep their reusable workflow pinned to the stable shell:
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
jobs:
|
|
65
|
+
build:
|
|
66
|
+
uses: kungfu-systems/buildchain/.github/workflows/.build.yml@v2
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
To validate a train without committing temporary workflow refs, expose a
|
|
70
|
+
trusted manual pass-through once:
|
|
71
|
+
|
|
72
|
+
```yaml
|
|
73
|
+
on:
|
|
74
|
+
workflow_dispatch:
|
|
75
|
+
inputs:
|
|
76
|
+
buildchain-ref:
|
|
77
|
+
description: "Temporary Buildchain runtime ref for trusted manual validation"
|
|
78
|
+
required: false
|
|
79
|
+
default: ""
|
|
80
|
+
|
|
81
|
+
jobs:
|
|
82
|
+
build:
|
|
83
|
+
uses: kungfu-systems/buildchain/.github/workflows/.build.yml@v2
|
|
84
|
+
with:
|
|
85
|
+
buildchain-ref: ${{ inputs.buildchain-ref || '' }}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Buildchain initializes new package workflows with this pass-through. Existing
|
|
89
|
+
consumers that do not have it should add it once before validating a train.
|
|
90
|
+
|
|
91
|
+
## Validation request
|
|
92
|
+
|
|
93
|
+
Use this short request when a train is ready:
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
Buildchain train ready: buildchain-ref=train/v2/v2.3/<capability>.
|
|
97
|
+
Keep uses: ...@v2; run workflow_dispatch with that buildchain-ref and report the runtime evidence summary.
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The consumer should run a trusted `workflow_dispatch`, paste the train ref into
|
|
101
|
+
`buildchain-ref`, and report the workflow summary or aggregate Buildchain
|
|
102
|
+
summary. The evidence should include:
|
|
103
|
+
|
|
104
|
+
- workflow shell ref;
|
|
105
|
+
- requested runtime ref;
|
|
106
|
+
- resolved runtime ref;
|
|
107
|
+
- resolved runtime SHA;
|
|
108
|
+
- stability class;
|
|
109
|
+
- trust decision;
|
|
110
|
+
- rollback ref.
|
|
111
|
+
|
|
112
|
+
## Trust and limitation
|
|
113
|
+
|
|
114
|
+
Runtime overrides fail closed unless the event is `workflow_dispatch` and the
|
|
115
|
+
actor has write, maintain, or admin permission on the caller repository.
|
|
116
|
+
Pull requests, including fork-originated pull requests, cannot use a non-empty
|
|
117
|
+
`buildchain-ref`.
|
|
118
|
+
|
|
119
|
+
Runtime train validation covers Buildchain runtime scripts, CLI code, local
|
|
120
|
+
actions, configuration parsing, and lifecycle behavior. It cannot validate
|
|
121
|
+
changes that require the outer reusable workflow YAML itself to change, such as
|
|
122
|
+
new jobs, permissions, workflow outputs, or matrix topology. Those changes need
|
|
123
|
+
a canary workflow path or a temporary explicit workflow ref.
|
|
@@ -27,6 +27,17 @@ dist/site/
|
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
`buildchain-site.json` is the top-level bundle entrypoint.
|
|
30
|
+
It includes a `homepage` object generated from `README.md`, including
|
|
31
|
+
`homepage.sections`, `homepage.displayPlan`, and a
|
|
32
|
+
`homepage.rendererContract` that is implementation metadata rather than
|
|
33
|
+
ordinary homepage copy. Site repositories should consume those fields instead
|
|
34
|
+
of parsing `README.md` themselves.
|
|
35
|
+
It also includes a `pages` collection that mirrors `page-registry.json`, so a
|
|
36
|
+
site repository can build the full Buildchain public documentation surface from
|
|
37
|
+
the npm package without scanning the source checkout.
|
|
38
|
+
`page-registry.json` is the complete page fact source: README homepage content,
|
|
39
|
+
all packaged `docs/*.md` manuals, action README files, the Node API package
|
|
40
|
+
overview, and fixture guides.
|
|
30
41
|
`buildchain-contract.json` is the machine-readable Buildchain runtime contract
|
|
31
42
|
world used by floating-ref contract locks. It records public workflow/action/CLI
|
|
32
43
|
surfaces, compatibility digests, and audit digests for the files that implement
|
|
@@ -73,6 +84,9 @@ this gate, so release candidates cannot publish an out-of-date site bundle.
|
|
|
73
84
|
|
|
74
85
|
The P0 bundle includes:
|
|
75
86
|
|
|
87
|
+
- README-derived homepage fields and display plan;
|
|
88
|
+
- complete markdown page registry for public Buildchain docs, action manuals,
|
|
89
|
+
Node API overview, and fixtures;
|
|
76
90
|
- site manifest;
|
|
77
91
|
- CLI command registry;
|
|
78
92
|
- manual registry for packaged agent-facing documentation;
|
|
@@ -96,3 +110,19 @@ schema metadata without breaking existing consumers.
|
|
|
96
110
|
release chain model. The site bundle exposes that document and the
|
|
97
111
|
`release-propagation` CLI entry so downstream sites can render the current
|
|
98
112
|
Buildchain-owned propagation contract instead of hand-writing it.
|
|
113
|
+
|
|
114
|
+
## Rendering Boundary
|
|
115
|
+
|
|
116
|
+
Buildchain owns the homepage wording, section ordering intent, complete
|
|
117
|
+
markdown page registry, release model facts, workflow/action registry, CLI
|
|
118
|
+
registry, manual registry, Node API registry, KFD claim registry, and
|
|
119
|
+
release-passport evidence vocabulary. The site owns HTML, CSS, responsive
|
|
120
|
+
layout, navigation, visual assets, decorative media, markdown-to-HTML rendering,
|
|
121
|
+
and progressive disclosure within the Buildchain-provided
|
|
122
|
+
`homepage.displayPlan` and page metadata.
|
|
123
|
+
|
|
124
|
+
The page registry is also part of Buildchain's KFD-3 collaboration-interface
|
|
125
|
+
surface. Releases declare it as a site-consumption contract, and Buildchain's
|
|
126
|
+
KFD-3 witness generation includes the underlying markdown sources as public
|
|
127
|
+
documentation surfaces. If a page is public enough for the site to render, it
|
|
128
|
+
must be declared and hash-bound in the package-owned site bundle.
|
|
@@ -416,7 +416,7 @@ The reusable workflow maps GitHub events to Buildchain web-surface semantics:
|
|
|
416
416
|
| --- | --- |
|
|
417
417
|
| `pull_request` opened / synchronized / reopened | validate, build, verify, and plan `preview` for `pr-N` |
|
|
418
418
|
| `pull_request` closed | plan apply-mode cleanup for the `pr-N` preview alias and manifest |
|
|
419
|
-
| `push` to `main` | validate, build, verify, and
|
|
419
|
+
| `push` to `main` | validate, build, verify, plan and apply `staging` from the merged `main` SHA, then optionally open a production release PR |
|
|
420
420
|
| `push` to `main` from a matching release PR merge | validate the associated release PR, plan `production`, and enter the configured GitHub Environment gate |
|
|
421
421
|
| `workflow_dispatch` with `production-approved = true` | plan `production` and enter the configured GitHub Environment gate |
|
|
422
422
|
|
|
@@ -493,10 +493,18 @@ When enabled, Buildchain owns the full release apply state machine:
|
|
|
493
493
|
role, then write a staging release feedback passport artifact and comment the
|
|
494
494
|
associated merged PR with the staging URL, source SHA, artifact identity, run
|
|
495
495
|
URL, and failure context when apply did not complete.
|
|
496
|
+
- When `production-release-on-main=true`, successful staging applies open or
|
|
497
|
+
update a Buildchain-owned release PR from
|
|
498
|
+
`release/<channel>-<short-sha>` to `main`, unless the current push already
|
|
499
|
+
came from a matching release PR merge. The release PR contains one empty
|
|
500
|
+
release-intent commit, carries `production-release-label`, and includes the
|
|
501
|
+
staging URLs, source SHA, artifact hash, and staging release-passport artifact
|
|
502
|
+
link in the PR body.
|
|
496
503
|
- Release pull requests that match the configured production gate get a
|
|
497
504
|
Buildchain review comment with the staging URL and production target, so the
|
|
498
505
|
operator can verify staging from the PR page and use merge as the approval
|
|
499
|
-
action.
|
|
506
|
+
action. Consumers do not need to hand-write `gh pr create` or production
|
|
507
|
+
release-intent glue.
|
|
500
508
|
- Production runs when `production-apply` is true and either:
|
|
501
509
|
- a trusted `workflow_dispatch` passes `production-approved=true`; or
|
|
502
510
|
- `production-release-on-main=true` and the `main` push commit is associated
|
|
@@ -535,15 +543,17 @@ jobs:
|
|
|
535
543
|
production-apply: ${{ github.event_name == 'push' && github.ref_name == 'main' }}
|
|
536
544
|
production-release-on-main: true
|
|
537
545
|
production-release-label: buildchain-release
|
|
538
|
-
production-release-head-prefix:
|
|
546
|
+
production-release-head-prefix: release/
|
|
547
|
+
production-release-branch-channel: production
|
|
539
548
|
production-aws-role-arn: arn:aws:iam::123456789012:role/site-production-github-actions
|
|
540
549
|
production-environment: production
|
|
541
550
|
```
|
|
542
551
|
|
|
543
552
|
The merge button becomes the production approval only for a PR that carries the
|
|
544
|
-
release label and comes from the configured source-branch prefix. Ordinary
|
|
545
|
-
|
|
546
|
-
|
|
553
|
+
release label and comes from the configured source-branch prefix. Ordinary pull
|
|
554
|
+
requests merged into `main` deploy staging and open a release-intent PR; merging
|
|
555
|
+
that release PR triggers production. A release PR merge push does not open
|
|
556
|
+
another release PR.
|
|
547
557
|
|
|
548
558
|
Apply-only inputs are validated before the caller build or verification command
|
|
549
559
|
runs. If the current event would run preview, staging, or production apply,
|
|
@@ -552,9 +562,12 @@ on manual dispatch fail immediately instead of spending the build and plan jobs
|
|
|
552
562
|
first.
|
|
553
563
|
|
|
554
564
|
Callers must grant `id-token: write` for OIDC role assumption. Preview comments
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
565
|
+
need `pull-requests: write`. Automatic release PR creation also needs
|
|
566
|
+
`contents: write`, `pull-requests: write`, and `issues: write` so Buildchain can
|
|
567
|
+
create the release branch, write the empty release-intent commit, open or update
|
|
568
|
+
the PR, and apply the release label. The AWS roles remain caller-owned and
|
|
569
|
+
should be scoped by channel: preview can mutate only preview resources, staging
|
|
570
|
+
can mutate only staging resources, and production can mutate only production
|
|
558
571
|
resources.
|
|
559
572
|
|
|
560
573
|
Apply mode fails closed when the deploy config still contains placeholder AWS
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/buildchain",
|
|
3
|
-
"version": "2.8.7
|
|
3
|
+
"version": "2.8.7",
|
|
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",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"./buildchain-kfd-claims": "./packages/core/buildchain-kfd-claims.js",
|
|
26
26
|
"./site/buildchain-site.json": "./dist/site/buildchain-site.json",
|
|
27
27
|
"./site/site-manifest.json": "./dist/site/site-manifest.json",
|
|
28
|
+
"./site/page-registry.json": "./dist/site/page-registry.json",
|
|
28
29
|
"./site/cli-registry.json": "./dist/site/cli-registry.json",
|
|
29
30
|
"./site/manual-registry.json": "./dist/site/manual-registry.json",
|
|
30
31
|
"./site/node-api-registry.json": "./dist/site/node-api-registry.json",
|
|
@@ -48,27 +49,7 @@
|
|
|
48
49
|
"dist/site/",
|
|
49
50
|
"README.md",
|
|
50
51
|
"SECURITY.md",
|
|
51
|
-
"docs
|
|
52
|
-
"docs/binary-distribution.md",
|
|
53
|
-
"docs/cli.md",
|
|
54
|
-
"docs/install.md",
|
|
55
|
-
"docs/infra-contract.md",
|
|
56
|
-
"docs/consumer-issue-reporting.md",
|
|
57
|
-
"docs/lifecycle-protocol.md",
|
|
58
|
-
"docs/migration-inventory.md",
|
|
59
|
-
"docs/ownership.md",
|
|
60
|
-
"docs/product-mechanism.md",
|
|
61
|
-
"docs/publish-transaction.md",
|
|
62
|
-
"docs/release-passport.md",
|
|
63
|
-
"docs/release-propagation.md",
|
|
64
|
-
"docs/release-candidate.md",
|
|
65
|
-
"docs/release-flow.md",
|
|
66
|
-
"docs/release-governance.md",
|
|
67
|
-
"docs/reusable-build-surface.md",
|
|
68
|
-
"docs/site-bundle-contract.md",
|
|
69
|
-
"docs/toolkit-observability.md",
|
|
70
|
-
"docs/versioning.md",
|
|
71
|
-
"docs/web-surface-deployments.md",
|
|
52
|
+
"docs/*.md",
|
|
72
53
|
"actions/*/README.md",
|
|
73
54
|
"fixtures/*/README.md"
|
|
74
55
|
],
|
|
@@ -98,7 +79,7 @@
|
|
|
98
79
|
"vitest": "^4.1.9"
|
|
99
80
|
},
|
|
100
81
|
"dependencies": {
|
|
101
|
-
"@kungfu-tech/kfd": "
|
|
82
|
+
"@kungfu-tech/kfd": "1.0.0-alpha.16",
|
|
102
83
|
"smol-toml": "1.7.0"
|
|
103
84
|
}
|
|
104
85
|
}
|
|
@@ -7,12 +7,17 @@ export const BUILDCHAIN_KFD_CLAIM_REGISTRY_CONTRACT = "kungfu-buildchain-kfd-cla
|
|
|
7
7
|
export const BUILDCHAIN_KFD_COLLABORATION_INTERFACE_CONTRACT = "kungfu-buildchain-kfd-collaboration-interface";
|
|
8
8
|
|
|
9
9
|
export const BUILDCHAIN_AGENT_MANUALS = Object.freeze([
|
|
10
|
+
{ id: "map", title: "Buildchain documentation map", path: "docs/MAP.md", plane: "use" },
|
|
10
11
|
{ id: "install", title: "Install and verify Buildchain", path: "docs/install.md", plane: "use" },
|
|
11
12
|
{ id: "release-passport", title: "Release Passport protocol", path: "docs/release-passport.md", plane: "verify" },
|
|
12
13
|
{ id: "release-propagation", title: "Release propagation", path: "docs/release-propagation.md", plane: "use" },
|
|
13
14
|
{ id: "binary-distribution", title: "Binary distribution contract", path: "docs/binary-distribution.md", plane: "verify" },
|
|
15
|
+
{ id: "consumer-issue-reporting", title: "Consumer issue reporting", path: "docs/consumer-issue-reporting.md", plane: "use" },
|
|
16
|
+
{ id: "infra-contract", title: "Infra Contract", path: "docs/infra-contract.md", plane: "use" },
|
|
14
17
|
{ id: "toolkit-observability", title: "Toolkit observability", path: "docs/toolkit-observability.md", plane: "use" },
|
|
15
18
|
{ id: "site-bundle-contract", title: "Site bundle contract", path: "docs/site-bundle-contract.md", plane: "use" },
|
|
19
|
+
{ id: "migration-inventory", title: "Migration inventory", path: "docs/migration-inventory.md", plane: "verify" },
|
|
20
|
+
{ id: "ownership", title: "Ownership", path: "docs/ownership.md", plane: "why" },
|
|
16
21
|
{ id: "product-mechanism", title: "Product mechanism", path: "docs/product-mechanism.md", plane: "why" },
|
|
17
22
|
{ id: "cli", title: "CLI and npm package", path: "docs/cli.md", plane: "use" },
|
|
18
23
|
{ id: "lifecycle-protocol", title: "Lifecycle protocol", path: "docs/lifecycle-protocol.md", plane: "use" },
|
|
@@ -20,14 +25,15 @@ export const BUILDCHAIN_AGENT_MANUALS = Object.freeze([
|
|
|
20
25
|
{ id: "publish-transaction", title: "Publish transaction", path: "docs/publish-transaction.md", plane: "verify" },
|
|
21
26
|
{ id: "release-governance", title: "Release governance", path: "docs/release-governance.md", plane: "why" },
|
|
22
27
|
{ id: "release-flow", title: "Release flow", path: "docs/release-flow.md", plane: "verify" },
|
|
28
|
+
{ id: "runtime-train-validation", title: "Runtime train validation", path: "docs/runtime-train-validation.md", plane: "verify" },
|
|
23
29
|
{ id: "versioning", title: "Versioning", path: "docs/versioning.md", plane: "why" },
|
|
24
30
|
{ id: "web-surface-deployments", title: "Web surface deployments", path: "docs/web-surface-deployments.md", plane: "use" },
|
|
25
|
-
{ id: "infra-contract", title: "Infra Contract", path: "docs/infra-contract.md", plane: "use" },
|
|
26
31
|
]);
|
|
27
32
|
|
|
28
33
|
const SITE_CONTRACT_FILES = Object.freeze([
|
|
29
34
|
"dist/site/buildchain-site.json",
|
|
30
35
|
"dist/site/site-manifest.json",
|
|
36
|
+
"dist/site/page-registry.json",
|
|
31
37
|
"dist/site/cli-registry.json",
|
|
32
38
|
"dist/site/manual-registry.json",
|
|
33
39
|
"dist/site/node-api-registry.json",
|
|
@@ -68,6 +74,26 @@ const EXTRA_KFD1_FILES = Object.freeze([
|
|
|
68
74
|
"scripts/ensure-github-release.mjs",
|
|
69
75
|
]);
|
|
70
76
|
|
|
77
|
+
function immediateReadmes(root, dir) {
|
|
78
|
+
const absoluteDir = path.join(root, dir);
|
|
79
|
+
if (!fs.existsSync(absoluteDir)) return [];
|
|
80
|
+
return fs.readdirSync(absoluteDir, { withFileTypes: true })
|
|
81
|
+
.filter((entry) => entry.isDirectory())
|
|
82
|
+
.map((entry) => `${dir}/${entry.name}/README.md`)
|
|
83
|
+
.filter((relPath) => fileExists(root, relPath))
|
|
84
|
+
.sort();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function publicDocumentationFiles(root) {
|
|
88
|
+
return uniquePaths([
|
|
89
|
+
...BUILDCHAIN_AGENT_MANUALS.map((entry) => entry.path),
|
|
90
|
+
"README.md",
|
|
91
|
+
"packages/core/README.md",
|
|
92
|
+
...immediateReadmes(root, "actions"),
|
|
93
|
+
...immediateReadmes(root, "fixtures"),
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
|
|
71
97
|
function readJson(root, relPath, fallback = {}) {
|
|
72
98
|
const filePath = path.join(root, relPath);
|
|
73
99
|
if (!fs.existsSync(filePath)) {
|
|
@@ -176,6 +202,7 @@ export function createBuildchainPublicClaimDefinitions() {
|
|
|
176
202
|
artifactPaths: [
|
|
177
203
|
"dist/site/manual-registry.json",
|
|
178
204
|
"dist/site/node-api-registry.json",
|
|
205
|
+
"dist/site/page-registry.json",
|
|
179
206
|
"dist/site/buildchain-site.json",
|
|
180
207
|
"dist/site/site-manifest.json",
|
|
181
208
|
],
|
|
@@ -254,10 +281,14 @@ export function createBuildchainKfdSurfaceRegistry({ root = process.cwd() } = {}
|
|
|
254
281
|
name: specifier === "." ? pkg.name : `${pkg.name}/${specifier.replace(/^\.\//, "")}`,
|
|
255
282
|
},
|
|
256
283
|
));
|
|
257
|
-
const
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
284
|
+
const manualTitles = new Map(BUILDCHAIN_AGENT_MANUALS.map((manual) => [manual.path, manual]));
|
|
285
|
+
const docs = publicDocumentationFiles(root).map((relPath) => {
|
|
286
|
+
const manual = manualTitles.get(relPath);
|
|
287
|
+
return surface(`doc:${relPath}`, "documentation", relPath, {
|
|
288
|
+
name: manual?.title || relPath,
|
|
289
|
+
plane: manual?.plane || (relPath.startsWith("actions/") ? "action" : relPath.startsWith("fixtures/") ? "fixture" : "use"),
|
|
290
|
+
});
|
|
291
|
+
});
|
|
261
292
|
const schemas = SCHEMA_AND_STANDARD_FILES.map((relPath) => surface(`schema:${relPath}`, "schema", relPath));
|
|
262
293
|
const standardsMetadata = [
|
|
263
294
|
surface("metadata:package-json", "standards-metadata", "package.json"),
|
|
@@ -305,7 +336,7 @@ export function createBuildchainKfd1Witness({ root = process.cwd(), sourceSha =
|
|
|
305
336
|
const registry = createBuildchainKfdClaimRegistry({ root, sourceSha });
|
|
306
337
|
const registrySha256 = sha256Json(registry);
|
|
307
338
|
const paths = uniquePaths([
|
|
308
|
-
...
|
|
339
|
+
...publicDocumentationFiles(root),
|
|
309
340
|
...SCHEMA_AND_STANDARD_FILES,
|
|
310
341
|
...SITE_CONTRACT_FILES,
|
|
311
342
|
...WORKFLOW_AND_ACTION_FILES,
|