@kungfu-tech/kfd 1.0.0-alpha.2 → 1.0.0-alpha.20
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/.buildchain/kfd-1/contract-world.witness.json +753 -0
- package/.buildchain/kfd-2/kfd-foundation.trust-assessment.json +238 -0
- package/.buildchain/kfd-2/kfd-foundation.trust-claims.json +225 -0
- package/.buildchain/kfd-2/public-release-trust.claim.json +131 -0
- package/.buildchain/kfd-3/collaboration-interface.artifact.json +774 -0
- package/.buildchain/kfd-3/collaboration-interface.json +421 -0
- package/.buildchain/kfd-3/collaboration-interface.prebuild.json +1141 -0
- package/README.md +149 -29
- package/TRADEMARKS.md +60 -0
- package/buildchain.contract-lock.json +86 -0
- package/buildchain.release-propagation.json +32 -0
- package/decisions/{kfd-1.md → KFD-1.md} +77 -35
- package/decisions/{kfd-2.md → KFD-2.md} +63 -11
- package/decisions/{kfd-3.md → KFD-3.md} +54 -16
- package/decisions/KFD-4.md +182 -0
- package/docs/KFD-1-usage.md +37 -0
- package/docs/KFD-2-usage.md +123 -0
- package/docs/KFD-3-usage.md +98 -0
- package/docs/KFD-4-usage.md +31 -0
- package/docs/MAP.md +20 -3
- package/docs/release-governance.md +28 -0
- package/kfd.release.json +13 -0
- package/package.json +28 -2
- package/registry.json +15 -5
- package/release-impact.json +113 -0
- package/schemas/kfd-1/contract-world.schema.json +67 -4
- package/schemas/kfd-1/witness.schema.json +113 -0
- package/schemas/kfd-2/release-claims.schema.json +331 -0
- package/schemas/kfd-2/release-trust-passport.schema.json +276 -0
- package/schemas/kfd-2/trust-assessment.schema.json +313 -0
- package/schemas/kfd-2/trust-claims.schema.json +334 -0
- package/schemas/kfd-2/trust-taxonomy.schema.json +219 -0
- package/schemas/kfd-3/collaboration-interface.schema.json +542 -0
- package/schemas/kfd-3/witness.schema.json +167 -0
- package/schemas/kfd-4/observer-perspective.schema.json +272 -0
- package/schemas/kfd-standards.schema.json +163 -0
- package/scripts/check.mjs +930 -0
- package/scripts/npm-publish-transaction.mjs +220 -0
- package/scripts/update-kfd-1-witness.mjs +35 -0
- package/scripts/update-kfd-2-claim.mjs +304 -0
- package/scripts/update-kfd-3-witness.mjs +261 -0
- package/scripts/update-site-bundle.mjs +353 -0
- package/site/kfd-site.json +251 -12
- package/standards.json +775 -15
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# KFD-3 Collaboration Interface
|
|
2
|
+
|
|
3
|
+
KFD-3 is a cooperation standard for intelligent participants. It is not an
|
|
4
|
+
agent-only standard. Products can use it for humans, agents, operators,
|
|
5
|
+
extension authors, API consumers, hosted-service users, service integrators,
|
|
6
|
+
maintainers, and other participants who need to understand value, choices, and
|
|
7
|
+
constraints before cooperating.
|
|
8
|
+
|
|
9
|
+
The KFD-owned schema surface is intentionally general:
|
|
10
|
+
|
|
11
|
+
- `schemas/kfd-3/collaboration-interface.schema.json` declares a product's
|
|
12
|
+
participant-facing collaboration interface.
|
|
13
|
+
- `schemas/kfd-3/witness.schema.json` declares release or build evidence that
|
|
14
|
+
the interface is discoverable, classified, constraint-transparent, and closed
|
|
15
|
+
over reachable participant-facing entrypoints.
|
|
16
|
+
|
|
17
|
+
KFD owns the standard identity, schema IDs, concept names, and compatibility
|
|
18
|
+
rules. Product repositories own their concrete profiles. For example, Kungfu
|
|
19
|
+
may expose an agent-first profile because agents are a first-class participant
|
|
20
|
+
in the current product, but that profile remains a Kungfu implementation of
|
|
21
|
+
KFD-3 rather than the definition of KFD-3 itself.
|
|
22
|
+
|
|
23
|
+
## Required shape
|
|
24
|
+
|
|
25
|
+
A product collaboration interface should identify:
|
|
26
|
+
|
|
27
|
+
- participant profiles, such as `human`, `agent`, `operator`,
|
|
28
|
+
`extension-author`, or `api-consumer`;
|
|
29
|
+
- public fact sources that identify where load-bearing facts live and which
|
|
30
|
+
surfaces are only projections;
|
|
31
|
+
- minimal entrypoints that let each participant discover the rest of the
|
|
32
|
+
interface;
|
|
33
|
+
- participant-visible surfaces, such as CLI commands, JSON APIs, manuals,
|
|
34
|
+
skills, GUI routes, envelopes, packages, or protocols;
|
|
35
|
+
- value evidence that binds important participant-facing value claims to facts,
|
|
36
|
+
artifacts, checks, trust assessments, and residual-risk state;
|
|
37
|
+
- visible constraints, including what is restricted, why, and where review or
|
|
38
|
+
escalation happens;
|
|
39
|
+
- choice paths that let participants choose or decline safe cooperation modes;
|
|
40
|
+
- extension requests that tell participants how to ask for a new value,
|
|
41
|
+
capability, or interface when the declared interface is insufficient;
|
|
42
|
+
- a closure policy for reachable participant-facing entrypoints.
|
|
43
|
+
|
|
44
|
+
The KFD-3 witness schema is intentionally stricter about closure: a passing
|
|
45
|
+
closed-world proof reports reachable entrypoints, classified entrypoints, and
|
|
46
|
+
an empty `unclassifiedEntrypoints` list. This prevents a product from exposing
|
|
47
|
+
a participant-facing or callable backdoor API outside the declared interface.
|
|
48
|
+
|
|
49
|
+
## Value Evidence
|
|
50
|
+
|
|
51
|
+
KFD-3 does not treat value as a marketing claim. A collaboration interface
|
|
52
|
+
should state the value a participant is being asked to trust, then point to the
|
|
53
|
+
facts and evidence that make that value inspectable.
|
|
54
|
+
|
|
55
|
+
Each `valueEvidence` entry should identify:
|
|
56
|
+
|
|
57
|
+
- the value claim;
|
|
58
|
+
- the participants who depend on it;
|
|
59
|
+
- the fact artifacts that define the claim;
|
|
60
|
+
- the evidence artifacts or checks that show those facts are present;
|
|
61
|
+
- a KFD-2 trust assessment or residual-risk state when the claim cannot be
|
|
62
|
+
exhaustively proved by machine.
|
|
63
|
+
|
|
64
|
+
This is the engineering bridge between KFD-2 and KFD-3. KFD-2 explains how
|
|
65
|
+
trust is assessed from facts. KFD-3 explains how that assessed value is exposed
|
|
66
|
+
to participants before cooperation is requested.
|
|
67
|
+
|
|
68
|
+
## Product profile boundary
|
|
69
|
+
|
|
70
|
+
Concrete product profiles may add their own contracts, registry fields, command
|
|
71
|
+
metadata, generated manuals, or audit output. Those fields should reference the
|
|
72
|
+
KFD-3 schema IDs from `standards.json` instead of copying KFD-owned terms.
|
|
73
|
+
|
|
74
|
+
Examples:
|
|
75
|
+
|
|
76
|
+
- A Kungfu agent-first bridge can map local commands, provider skills, command
|
|
77
|
+
metadata, and operating manuals into a KFD-3 collaboration interface.
|
|
78
|
+
- A Buildchain release passport can carry a KFD-3 witness once a downstream
|
|
79
|
+
product can freeze and verify the concrete interface artifact.
|
|
80
|
+
- A hosted surface can use the same standard to show where policy constraints,
|
|
81
|
+
permission gates, and user choices are visible before cooperation is
|
|
82
|
+
requested.
|
|
83
|
+
|
|
84
|
+
This keeps KFD-3 general while making real product interfaces testable.
|
|
85
|
+
|
|
86
|
+
## Extension Requests
|
|
87
|
+
|
|
88
|
+
KFD-3 treats extension requests as part of the collaboration interface. A
|
|
89
|
+
human or agent should not have to infer how to cooperate when a declared
|
|
90
|
+
interface is missing a value or capability. The interface should expose a
|
|
91
|
+
visible request path, the participants it is for, the trigger, and the expected
|
|
92
|
+
outcome.
|
|
93
|
+
|
|
94
|
+
For KFD itself, the standard request path for missing KFD-2 trust-taxonomy
|
|
95
|
+
values is a GitHub issue in `kungfu-systems/kfd`. This is both a KFD-2 trust
|
|
96
|
+
rule and a KFD-3 collaboration rule: the taxonomy defines what values are valid,
|
|
97
|
+
while the collaboration interface tells agents how to request an extension
|
|
98
|
+
without inventing private values or relying on pressure.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# KFD-4 Implementation Notes
|
|
2
|
+
|
|
3
|
+
KFD-4 defines the observer-perspective rule: timelines must declare their
|
|
4
|
+
observer. This page is the package implementation note for machine consumers
|
|
5
|
+
and products that show perspective-bearing timelines. The authoritative
|
|
6
|
+
decision text remains `decisions/KFD-4.md`.
|
|
7
|
+
|
|
8
|
+
## Package Surface
|
|
9
|
+
|
|
10
|
+
The KFD package implements KFD-4 through:
|
|
11
|
+
|
|
12
|
+
- `decisions/KFD-4.md`: the authoritative procedure text.
|
|
13
|
+
- `schemas/kfd-4/observer-perspective.schema.json`: the KFD-owned schema for
|
|
14
|
+
observer-relative timeline views.
|
|
15
|
+
- `standards.json#/standards/kfd-4`: metadata that exposes the schema ID, schema
|
|
16
|
+
path, interface contract, and concept names.
|
|
17
|
+
- `scripts/check.mjs`: verification that KFD-4 metadata and schema remain
|
|
18
|
+
wired into the package.
|
|
19
|
+
|
|
20
|
+
## When To Use The Gate
|
|
21
|
+
|
|
22
|
+
Use KFD-4 when a product surface represents time, history, replay, sync,
|
|
23
|
+
ordering, or mixed-source work state. A product that does not present a
|
|
24
|
+
perspective-bearing timeline does not need a KFD-4 gate.
|
|
25
|
+
|
|
26
|
+
## Trust Relation
|
|
27
|
+
|
|
28
|
+
KFD-4 claims can be assessed by KFD-2. The KFD package does this through
|
|
29
|
+
`.buildchain/kfd-2/kfd-foundation.trust-claims.json` and
|
|
30
|
+
`.buildchain/kfd-2/kfd-foundation.trust-assessment.json`, where KFD-4 is
|
|
31
|
+
assessed as an `observer-perspective` subject.
|
package/docs/MAP.md
CHANGED
|
@@ -5,15 +5,32 @@
|
|
|
5
5
|
| What is KFD, and what decisions exist? | [`../README.md`](../README.md) |
|
|
6
6
|
| What is the KFD-1/2/3 foundation triad? | [`../README.md`](../README.md#foundation-triad) |
|
|
7
7
|
| What worldview structure does the foundation triad express? | [`../README.md`](../README.md#foundation-model) |
|
|
8
|
+
| What practice guidelines are derived from the foundation triad? | [`../README.md`](../README.md#practice-guidelines) |
|
|
9
|
+
| How should a product show timeline order from a declared perspective? | [KFD-4](../decisions/KFD-4.md) |
|
|
10
|
+
| What schema should products use for KFD-4 observer-relative timeline views? | [`../schemas/kfd-4/observer-perspective.schema.json`](../schemas/kfd-4/observer-perspective.schema.json) |
|
|
11
|
+
| What are the package implementation notes for KFD-1? | [`KFD-1-usage.md`](KFD-1-usage.md) |
|
|
12
|
+
| What are the package implementation notes for KFD-2? | [`KFD-2-usage.md`](KFD-2-usage.md) |
|
|
13
|
+
| What are the package implementation notes for KFD-3? | [`KFD-3-usage.md`](KFD-3-usage.md) |
|
|
14
|
+
| What are the package implementation notes for KFD-4? | [`KFD-4-usage.md`](KFD-4-usage.md) |
|
|
15
|
+
| How should an agent quickly understand this package? | [`../README.md`](../README.md#agent-quickstart) |
|
|
16
|
+
| What is the concrete self-proof case for KFD-1/2/3/4? | [`../README.md`](../README.md#product-proof-path) and the implementation case in each KFD |
|
|
17
|
+
| Where is the public KFD fact source? | [`../README.md`](../README.md#decision-metadata) and [`../site/kfd-site.json`](../site/kfd-site.json) decision metadata |
|
|
18
|
+
| What does Apache-2.0 cover, and what remains official/trademark-bound? | [`../TRADEMARKS.md`](../TRADEMARKS.md) |
|
|
8
19
|
| What should a site renderer consume to render `kfd.libkungfu.dev`? | [`../site/kfd-site.json`](../site/kfd-site.json) |
|
|
9
|
-
|
|
|
10
|
-
| What
|
|
20
|
+
| How should a site map decision pages to usage subpages? | [`../site/kfd-site.json`](../site/kfd-site.json) — `decisionPages.usagePages` maps `/N` to `/N/usage` |
|
|
21
|
+
| What is the top-level product accountability principle? | [KFD-2](../decisions/KFD-2.md) |
|
|
22
|
+
| What stance should products take toward humans and agents as reasoning participants? | [KFD-3](../decisions/KFD-3.md) |
|
|
23
|
+
| What schema should products use for KFD-3 participant-facing collaboration interfaces? | [`KFD-3-usage.md`](KFD-3-usage.md) |
|
|
24
|
+
| What schema should a product or agent use for generic KFD-2 trust assessment? | [`KFD-2-usage.md`](KFD-2-usage.md#generic-trust-claims) |
|
|
25
|
+
| What should an agent do when a needed KFD-2 trust taxonomy value is missing? | [`KFD-2-usage.md`](KFD-2-usage.md#trust-taxonomy) — open a KFD GitHub issue |
|
|
11
26
|
| What does a specific decision say? | [`../decisions/`](../decisions) (index: [`../registry.json`](../registry.json)) |
|
|
12
27
|
| What machine metadata should Buildchain or another consumer import for KFD standard identity and schema IDs? | [`../standards.json`](../standards.json) |
|
|
13
28
|
| What schema validates the standards metadata surface? | [`../schemas/kfd-standards.schema.json`](../schemas/kfd-standards.schema.json) |
|
|
29
|
+
| What schema should release systems use for KFD-2 release claims and trust passports? | [`KFD-2-usage.md`](KFD-2-usage.md) — release passports are a KFD-2 projection |
|
|
14
30
|
| How do I cite a decision? | [`../README.md`](../README.md) — cite by number, e.g. `KFD-1` |
|
|
15
31
|
| How do decisions change over time? | [`../CONTRIBUTING.md`](../CONTRIBUTING.md) — append-only; explicit supersession mints a new number |
|
|
16
|
-
| How is this package versioned and released? | [KFD-1](../decisions/
|
|
32
|
+
| How is this package versioned and released? | [KFD-1](../decisions/KFD-1.md) applied to itself; Buildchain governs releases |
|
|
17
33
|
| What release impact ledger should Buildchain consume for production passports? | [`../release-impact.json`](../release-impact.json) |
|
|
34
|
+
| What release provenance path must alpha promotion use? | [`release-governance.md`](release-governance.md) |
|
|
18
35
|
| How do I verify registry/document agreement? | `node scripts/check.mjs` |
|
|
19
36
|
| How do I report a vulnerability? | [`../SECURITY.md`](../SECURITY.md) |
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Release Governance Notes
|
|
2
|
+
|
|
3
|
+
KFD releases are governed by Buildchain channel promotion. The package version
|
|
4
|
+
line stays fixed at `v1.0`; alpha and production releases move through
|
|
5
|
+
protected channel branches.
|
|
6
|
+
|
|
7
|
+
For alpha promotion, Buildchain treats the provenance path as part of the
|
|
8
|
+
release contract:
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
dev/v1/v1.0 -> alpha/v1/v1.0
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The alpha branch must be updated by a merged same-repository pull request whose
|
|
15
|
+
head is `dev/v1/v1.0` and whose base is `alpha/v1/v1.0`. A temporary promotion
|
|
16
|
+
branch may satisfy GitHub freshness rules, but it is not a valid Buildchain
|
|
17
|
+
release source for KFD alpha publishing.
|
|
18
|
+
|
|
19
|
+
The protected branch required status check must also name the status emitted by
|
|
20
|
+
the current Verify workflow. As of the alpha.14 line, that required check is:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
check / check
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Keeping the branch protection rule and the workflow-emitted status name aligned
|
|
27
|
+
is part of KFD-1's "facts must not drift" requirement: the release gate cannot
|
|
28
|
+
depend on a stale status context that no current workflow can produce.
|
package/kfd.release.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"contract": "kfd-release-anchor",
|
|
4
|
+
"line": "v1.0",
|
|
5
|
+
"channel": "alpha",
|
|
6
|
+
"npmPackage": "@kungfu-tech/kfd",
|
|
7
|
+
"npmVersion": "1.0.0-alpha.20",
|
|
8
|
+
"source": {
|
|
9
|
+
"repository": "kungfu-systems/kfd",
|
|
10
|
+
"branch": "alpha/v1/v1.0"
|
|
11
|
+
},
|
|
12
|
+
"rationale": "KFD uses an anchored/manual Buildchain mode: the public package version is an explicit release fact, while the outer KFD line remains v1.0."
|
|
13
|
+
}
|
package/package.json
CHANGED
|
@@ -1,30 +1,56 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kungfu-tech/kfd",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.20",
|
|
4
4
|
"description": "Kung Fu Decisions (KFD): the kungfu-systems organization-wide decision registry, as a consumable artifact",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"files": [
|
|
7
7
|
"README.md",
|
|
8
|
+
"TRADEMARKS.md",
|
|
8
9
|
"decisions",
|
|
9
10
|
"registry.json",
|
|
10
11
|
"standards.json",
|
|
12
|
+
"kfd.release.json",
|
|
11
13
|
"schemas",
|
|
12
14
|
"site",
|
|
15
|
+
"scripts",
|
|
16
|
+
"buildchain.contract-lock.json",
|
|
17
|
+
"buildchain.release-propagation.json",
|
|
18
|
+
"release-impact.json",
|
|
19
|
+
".buildchain/kfd-1/contract-world.witness.json",
|
|
20
|
+
".buildchain/kfd-2",
|
|
21
|
+
".buildchain/kfd-3",
|
|
13
22
|
"docs"
|
|
14
23
|
],
|
|
15
24
|
"exports": {
|
|
16
25
|
"./package.json": "./package.json",
|
|
17
26
|
"./README.md": "./README.md",
|
|
27
|
+
"./TRADEMARKS.md": "./TRADEMARKS.md",
|
|
18
28
|
"./registry.json": "./registry.json",
|
|
19
29
|
"./standards.json": "./standards.json",
|
|
30
|
+
"./kfd.release.json": "./kfd.release.json",
|
|
20
31
|
"./site/kfd-site.json": "./site/kfd-site.json",
|
|
32
|
+
"./buildchain.contract-lock.json": "./buildchain.contract-lock.json",
|
|
33
|
+
"./buildchain.release-propagation.json": "./buildchain.release-propagation.json",
|
|
34
|
+
"./release-impact.json": "./release-impact.json",
|
|
35
|
+
"./scripts/*.mjs": "./scripts/*.mjs",
|
|
36
|
+
"./buildchain/kfd-1/contract-world.witness.json": "./.buildchain/kfd-1/contract-world.witness.json",
|
|
37
|
+
"./buildchain/kfd-2/public-release-trust.claim.json": "./.buildchain/kfd-2/public-release-trust.claim.json",
|
|
38
|
+
"./buildchain/kfd-2/kfd-foundation.trust-claims.json": "./.buildchain/kfd-2/kfd-foundation.trust-claims.json",
|
|
39
|
+
"./buildchain/kfd-2/kfd-foundation.trust-assessment.json": "./.buildchain/kfd-2/kfd-foundation.trust-assessment.json",
|
|
40
|
+
"./buildchain/kfd-3/collaboration-interface.json": "./.buildchain/kfd-3/collaboration-interface.json",
|
|
41
|
+
"./buildchain/kfd-3/collaboration-interface.prebuild.json": "./.buildchain/kfd-3/collaboration-interface.prebuild.json",
|
|
42
|
+
"./buildchain/kfd-3/collaboration-interface.artifact.json": "./.buildchain/kfd-3/collaboration-interface.artifact.json",
|
|
21
43
|
"./schemas/*.json": "./schemas/*.json",
|
|
22
44
|
"./schemas/*/*.json": "./schemas/*/*.json",
|
|
23
45
|
"./decisions/*.md": "./decisions/*.md",
|
|
24
46
|
"./docs/*": "./docs/*"
|
|
25
47
|
},
|
|
26
48
|
"scripts": {
|
|
27
|
-
"check": "node scripts/check.mjs"
|
|
49
|
+
"check": "node scripts/check.mjs",
|
|
50
|
+
"update:site-bundle": "node scripts/update-site-bundle.mjs",
|
|
51
|
+
"update:kfd-1-witness": "node scripts/update-kfd-1-witness.mjs",
|
|
52
|
+
"update:kfd-2-claim": "node scripts/update-kfd-2-claim.mjs",
|
|
53
|
+
"update:kfd-3-witness": "node scripts/update-kfd-3-witness.mjs"
|
|
28
54
|
},
|
|
29
55
|
"publishConfig": {
|
|
30
56
|
"registry": "https://registry.npmjs.org/",
|
package/registry.json
CHANGED
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
"number": 1,
|
|
7
7
|
"id": "KFD-1",
|
|
8
8
|
"slug": "kfd-1",
|
|
9
|
-
"title": "
|
|
9
|
+
"title": "Facts must not drift: contract worlds need one fact source",
|
|
10
10
|
"kind": "procedure",
|
|
11
11
|
"status": "active",
|
|
12
|
-
"path": "decisions/
|
|
12
|
+
"path": "decisions/KFD-1.md",
|
|
13
13
|
"url": "https://kfd.libkungfu.dev/1"
|
|
14
14
|
},
|
|
15
15
|
{
|
|
@@ -19,18 +19,28 @@
|
|
|
19
19
|
"title": "Trust must start from facts: responsibility must be inspectable",
|
|
20
20
|
"kind": "principle",
|
|
21
21
|
"status": "active",
|
|
22
|
-
"path": "decisions/
|
|
22
|
+
"path": "decisions/KFD-2.md",
|
|
23
23
|
"url": "https://kfd.libkungfu.dev/2"
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
"number": 3,
|
|
27
27
|
"id": "KFD-3",
|
|
28
28
|
"slug": "kfd-3",
|
|
29
|
-
"title": "Cooperation must start from
|
|
29
|
+
"title": "Cooperation must start from trusted value: compliance must not be coerced",
|
|
30
30
|
"kind": "principle",
|
|
31
31
|
"status": "active",
|
|
32
|
-
"path": "decisions/
|
|
32
|
+
"path": "decisions/KFD-3.md",
|
|
33
33
|
"url": "https://kfd.libkungfu.dev/3"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"number": 4,
|
|
37
|
+
"id": "KFD-4",
|
|
38
|
+
"slug": "kfd-4",
|
|
39
|
+
"title": "Timelines must declare their observer: useful views need a stated perspective",
|
|
40
|
+
"kind": "procedure",
|
|
41
|
+
"status": "active",
|
|
42
|
+
"path": "decisions/KFD-4.md",
|
|
43
|
+
"url": "https://kfd.libkungfu.dev/4"
|
|
34
44
|
}
|
|
35
45
|
]
|
|
36
46
|
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"contract": "kungfu-buildchain-impact",
|
|
4
|
+
"release": {
|
|
5
|
+
"line": "v1.0",
|
|
6
|
+
"channel": "release",
|
|
7
|
+
"targetRef": "release/v1/v1.0"
|
|
8
|
+
},
|
|
9
|
+
"versionImpact": {
|
|
10
|
+
"final": "minor",
|
|
11
|
+
"source": "kfd-site-decision-usage-pages",
|
|
12
|
+
"rationale": "This change additively exposes decision usage subpage mapping in the KFD site bundle, while preserving existing registry, package, and schemaVersion 1 compatibility."
|
|
13
|
+
},
|
|
14
|
+
"surfaceImpacts": [
|
|
15
|
+
{
|
|
16
|
+
"id": "kfd-content",
|
|
17
|
+
"impact": "patch",
|
|
18
|
+
"class": "content",
|
|
19
|
+
"rationale": "KFD documents are append-only content coordinates; current documentation changes add KFD-4 as a practice guideline for declared observer timelines, while preserving existing decision numbers and registry shape."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "kfd-registry-schema",
|
|
23
|
+
"impact": "patch",
|
|
24
|
+
"class": "compatible",
|
|
25
|
+
"rationale": "registry.json keeps schemaVersion 1 and the existing entry shape, including number, id, slug, title, kind, status, path, and url; slug and path values are stable number coordinates."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "kfd-standards-metadata",
|
|
29
|
+
"impact": "minor",
|
|
30
|
+
"class": "additive",
|
|
31
|
+
"rationale": "standards.json and schemas/ add the KFD-2 trust-taxonomy, trust-claims, trust-assessment, release-claims, and release-trust-passport schema IDs, explicit KFD-1/2/3/4 interface versions, KFD-4 observer-perspective schema metadata, KFD document SHA-256 bindings, KFD-owned concept names, KFD-3 fact-source interface metadata, and official-status interface metadata for downstream consumers."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "kfd-package-structure",
|
|
35
|
+
"impact": "minor",
|
|
36
|
+
"class": "additive",
|
|
37
|
+
"rationale": "The npm package now publishes the KFD-2 trust taxonomy, generic trust claims, generic trust assessment, release trust schemas, KFD usage documentation, KFD-3 self collaboration-interface witnesses, KFD-4 observer-perspective schema, TRADEMARKS.md, public fact-source metadata, agent quickstart/self-proof documentation, Buildchain contract lock metadata, and repository verification scripts through existing schemas/, docs/, standards.json, site/, scripts/, .buildchain/, and subpath exports while preserving README.md, decisions/, registry.json, and site/ as stable directories."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "kfd-buildchain-contract-lock",
|
|
41
|
+
"impact": "minor",
|
|
42
|
+
"class": "release-governance",
|
|
43
|
+
"rationale": "KFD now uses Buildchain v2 floating workflow refs with a consumer-owned buildchain.contract-lock.json, so Buildchain runtime contract drift is checked before heavy build or promotion work while retaining floating-ref upgrade flow."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "kfd-site-homepage-bundle",
|
|
47
|
+
"impact": "minor",
|
|
48
|
+
"class": "additive",
|
|
49
|
+
"rationale": "site/kfd-site.json now exposes generated README-backed homepage.sections and homepage.displayPlan fields, including the adoption-boundary and practice-guidelines homepage sections, and scripts/check.mjs verifies the checked-in bundle matches the README projection so downstream sites can render KFD-owned homepage content without maintaining their own README parser or drifting copy."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "kfd-site-decision-usage-pages",
|
|
53
|
+
"impact": "minor",
|
|
54
|
+
"class": "additive",
|
|
55
|
+
"rationale": "site/kfd-site.json now exposes decisionPages.usagePages, mapping each authoritative KFD decision page to its docs/KFD-N-usage.md child page and stable /N/usage route."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "kfd-3-self-collaboration",
|
|
59
|
+
"impact": "minor",
|
|
60
|
+
"class": "release-passport",
|
|
61
|
+
"rationale": "KFD now declares its own participant-facing collaboration interface and ships pre-build plus artifact-side KFD-3 witnesses so Buildchain can audit interface closure in the release passport."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "kfd-3-trusted-value-evidence",
|
|
65
|
+
"impact": "minor",
|
|
66
|
+
"class": "additive",
|
|
67
|
+
"rationale": "KFD-3 collaboration interfaces now declare explicit valueEvidence that binds participant-facing value claims to fact artifacts, evidence artifacts, KFD-2 trust assessments, and residual-risk state."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "kfd-2-public-release-trust-claim",
|
|
71
|
+
"impact": "minor",
|
|
72
|
+
"class": "release-passport",
|
|
73
|
+
"rationale": "KFD now ships an explicit machine-bound public KFD-2 release trust claim and passes it into Buildchain release passport generation."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "kfd-2-generic-trust-assessment-core",
|
|
77
|
+
"impact": "minor",
|
|
78
|
+
"class": "additive",
|
|
79
|
+
"rationale": "KFD-2 now publishes generic trust-claims and trust-assessment schemas and dogfoods them through KFD-owned assessment files that evaluate KFD-1 contract-world, KFD-3 collaboration-interface, and KFD-4 observer-perspective claims."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "kfd-numbered-paths",
|
|
83
|
+
"impact": "minor",
|
|
84
|
+
"class": "compatible",
|
|
85
|
+
"rationale": "Decision documents now use stable numbered paths under decisions/KFD-N.md, while usage documentation uses docs/KFD-N-usage.md to distinguish authoritative decision text from consumer implementation notes."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "kfd-release-anchor",
|
|
89
|
+
"impact": "minor",
|
|
90
|
+
"class": "release-governance",
|
|
91
|
+
"rationale": "KFD now declares its package version through an anchored/manual release manifest so package version state is an explicit release fact rather than an auto-derived Buildchain side effect."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "kfd-release-propagation",
|
|
95
|
+
"impact": "patch",
|
|
96
|
+
"class": "compatible",
|
|
97
|
+
"rationale": "The KFD to site-libkungfu-dev propagation graph now targets the downstream site's actual main branch and documents the exact KFD package surfaces consumed by kfd.libkungfu.dev, without changing the release propagation graph contract."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "kfd-1-compatibility-impact-core",
|
|
101
|
+
"impact": "minor",
|
|
102
|
+
"class": "additive",
|
|
103
|
+
"rationale": "KFD-1 now defines breaking, additive, none, and unclassifiable as the generic compatibility-impact core, with release versioning as one projection rather than the only interpretation."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "kfd-1-surface-register",
|
|
107
|
+
"impact": "minor",
|
|
108
|
+
"class": "additive",
|
|
109
|
+
"rationale": "standards.json now publishes the KFD package surface register as the KFD-1 fact source, and the KFD-1 witness projects each registered surface class and impact projection from that fact source."
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"summary": "KFD v1.0 production promotion is minor-impact because it additively exposes decision usage subpage mapping in the site bundle, preserves existing package and schemaVersion 1 compatibility, and separates authoritative decision paths from numbered usage documentation."
|
|
113
|
+
}
|
|
@@ -24,6 +24,13 @@
|
|
|
24
24
|
"type": "string",
|
|
25
25
|
"minLength": 1
|
|
26
26
|
},
|
|
27
|
+
"compatibilityImpactClasses": {
|
|
28
|
+
"type": "array",
|
|
29
|
+
"items": {
|
|
30
|
+
"$ref": "#/$defs/compatibilityImpact"
|
|
31
|
+
},
|
|
32
|
+
"uniqueItems": true
|
|
33
|
+
},
|
|
27
34
|
"surfaces": {
|
|
28
35
|
"type": "array",
|
|
29
36
|
"items": {
|
|
@@ -39,19 +46,75 @@
|
|
|
39
46
|
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$"
|
|
40
47
|
},
|
|
41
48
|
"class": {
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
49
|
+
"$ref": "#/$defs/surfaceClass"
|
|
50
|
+
},
|
|
51
|
+
"classes": {
|
|
52
|
+
"type": "array",
|
|
53
|
+
"items": {
|
|
54
|
+
"$ref": "#/$defs/surfaceClass"
|
|
55
|
+
},
|
|
56
|
+
"uniqueItems": true,
|
|
57
|
+
"minItems": 1
|
|
46
58
|
},
|
|
47
59
|
"description": {
|
|
48
60
|
"type": "string",
|
|
49
61
|
"minLength": 1
|
|
62
|
+
},
|
|
63
|
+
"weldRationale": {
|
|
64
|
+
"type": "string",
|
|
65
|
+
"minLength": 1
|
|
66
|
+
},
|
|
67
|
+
"impactProjection": {
|
|
68
|
+
"$ref": "#/$defs/impactProjection"
|
|
50
69
|
}
|
|
51
70
|
},
|
|
52
71
|
"additionalProperties": false
|
|
53
72
|
}
|
|
54
73
|
}
|
|
55
74
|
},
|
|
75
|
+
"$defs": {
|
|
76
|
+
"surfaceClass": {
|
|
77
|
+
"enum": [
|
|
78
|
+
"integration-time",
|
|
79
|
+
"cross-time"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"compatibilityImpact": {
|
|
83
|
+
"enum": [
|
|
84
|
+
"breaking",
|
|
85
|
+
"additive",
|
|
86
|
+
"none",
|
|
87
|
+
"unclassifiable"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"impactProjection": {
|
|
91
|
+
"type": "object",
|
|
92
|
+
"required": [
|
|
93
|
+
"breaking",
|
|
94
|
+
"additive",
|
|
95
|
+
"none",
|
|
96
|
+
"unclassifiable"
|
|
97
|
+
],
|
|
98
|
+
"properties": {
|
|
99
|
+
"breaking": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"minLength": 1
|
|
102
|
+
},
|
|
103
|
+
"additive": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"minLength": 1
|
|
106
|
+
},
|
|
107
|
+
"none": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"minLength": 1
|
|
110
|
+
},
|
|
111
|
+
"unclassifiable": {
|
|
112
|
+
"type": "string",
|
|
113
|
+
"minLength": 1
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"additionalProperties": false
|
|
117
|
+
}
|
|
118
|
+
},
|
|
56
119
|
"additionalProperties": true
|
|
57
120
|
}
|
|
@@ -37,6 +37,75 @@
|
|
|
37
37
|
},
|
|
38
38
|
"additionalProperties": false
|
|
39
39
|
},
|
|
40
|
+
"compatibilityImpactClasses": {
|
|
41
|
+
"type": "array",
|
|
42
|
+
"items": {
|
|
43
|
+
"$ref": "#/$defs/compatibilityImpact"
|
|
44
|
+
},
|
|
45
|
+
"uniqueItems": true
|
|
46
|
+
},
|
|
47
|
+
"surfaces": {
|
|
48
|
+
"type": "array",
|
|
49
|
+
"items": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"required": [
|
|
52
|
+
"name",
|
|
53
|
+
"class",
|
|
54
|
+
"description",
|
|
55
|
+
"sourcePath",
|
|
56
|
+
"artifactPath",
|
|
57
|
+
"impactProjection"
|
|
58
|
+
],
|
|
59
|
+
"properties": {
|
|
60
|
+
"name": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"minLength": 1
|
|
63
|
+
},
|
|
64
|
+
"class": {
|
|
65
|
+
"$ref": "#/$defs/surfaceClass"
|
|
66
|
+
},
|
|
67
|
+
"classes": {
|
|
68
|
+
"type": "array",
|
|
69
|
+
"items": {
|
|
70
|
+
"$ref": "#/$defs/surfaceClass"
|
|
71
|
+
},
|
|
72
|
+
"uniqueItems": true,
|
|
73
|
+
"minItems": 1
|
|
74
|
+
},
|
|
75
|
+
"description": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"minLength": 1
|
|
78
|
+
},
|
|
79
|
+
"weldRationale": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"minLength": 1
|
|
82
|
+
},
|
|
83
|
+
"sourcePath": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"minLength": 1
|
|
86
|
+
},
|
|
87
|
+
"artifactPath": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"minLength": 1
|
|
90
|
+
},
|
|
91
|
+
"sourceSha256": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
94
|
+
},
|
|
95
|
+
"expectedSha256": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
98
|
+
},
|
|
99
|
+
"byteForByte": {
|
|
100
|
+
"type": "boolean"
|
|
101
|
+
},
|
|
102
|
+
"impactProjection": {
|
|
103
|
+
"$ref": "#/$defs/impactProjection"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"additionalProperties": true
|
|
107
|
+
}
|
|
108
|
+
},
|
|
40
109
|
"evidence": {
|
|
41
110
|
"type": "array",
|
|
42
111
|
"items": {
|
|
@@ -59,5 +128,49 @@
|
|
|
59
128
|
}
|
|
60
129
|
}
|
|
61
130
|
},
|
|
131
|
+
"$defs": {
|
|
132
|
+
"surfaceClass": {
|
|
133
|
+
"enum": [
|
|
134
|
+
"integration-time",
|
|
135
|
+
"cross-time"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
"compatibilityImpact": {
|
|
139
|
+
"enum": [
|
|
140
|
+
"breaking",
|
|
141
|
+
"additive",
|
|
142
|
+
"none",
|
|
143
|
+
"unclassifiable"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
"impactProjection": {
|
|
147
|
+
"type": "object",
|
|
148
|
+
"required": [
|
|
149
|
+
"breaking",
|
|
150
|
+
"additive",
|
|
151
|
+
"none",
|
|
152
|
+
"unclassifiable"
|
|
153
|
+
],
|
|
154
|
+
"properties": {
|
|
155
|
+
"breaking": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"minLength": 1
|
|
158
|
+
},
|
|
159
|
+
"additive": {
|
|
160
|
+
"type": "string",
|
|
161
|
+
"minLength": 1
|
|
162
|
+
},
|
|
163
|
+
"none": {
|
|
164
|
+
"type": "string",
|
|
165
|
+
"minLength": 1
|
|
166
|
+
},
|
|
167
|
+
"unclassifiable": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"minLength": 1
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"additionalProperties": false
|
|
173
|
+
}
|
|
174
|
+
},
|
|
62
175
|
"additionalProperties": true
|
|
63
176
|
}
|