@kungfu-tech/buildchain 2.14.14-alpha.4 → 2.14.14-alpha.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/bin/buildchain.mjs +46 -2
- package/dist/site/agent-index.json +1 -0
- package/dist/site/artifact-schemas.json +2 -0
- package/dist/site/badge-endpoint-registry.json +1120 -0
- package/dist/site/badges/v1/kfd-10/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-10/declared.json +14 -0
- package/dist/site/badges/v1/kfd-10/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-10/draft.json +14 -0
- package/dist/site/badges/v1/kfd-10/failed.json +14 -0
- package/dist/site/badges/v1/kfd-10/missing.json +14 -0
- package/dist/site/badges/v1/kfd-10/passed.json +14 -0
- package/dist/site/badges/v1/kfd-10/planned.json +14 -0
- package/dist/site/badges/v1/kfd-11/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-11/declared.json +14 -0
- package/dist/site/badges/v1/kfd-11/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-11/draft.json +14 -0
- package/dist/site/badges/v1/kfd-11/failed.json +14 -0
- package/dist/site/badges/v1/kfd-11/missing.json +14 -0
- package/dist/site/badges/v1/kfd-11/passed.json +14 -0
- package/dist/site/badges/v1/kfd-11/planned.json +14 -0
- package/dist/site/badges/v1/kfd-12/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-12/declared.json +14 -0
- package/dist/site/badges/v1/kfd-12/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-12/draft.json +14 -0
- package/dist/site/badges/v1/kfd-12/failed.json +14 -0
- package/dist/site/badges/v1/kfd-12/missing.json +14 -0
- package/dist/site/badges/v1/kfd-12/passed.json +14 -0
- package/dist/site/badges/v1/kfd-12/planned.json +14 -0
- package/dist/site/badges/v1/kfd-13/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-13/declared.json +14 -0
- package/dist/site/badges/v1/kfd-13/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-13/draft.json +14 -0
- package/dist/site/badges/v1/kfd-13/failed.json +14 -0
- package/dist/site/badges/v1/kfd-13/missing.json +14 -0
- package/dist/site/badges/v1/kfd-13/passed.json +14 -0
- package/dist/site/badges/v1/kfd-13/planned.json +14 -0
- package/dist/site/badges/v1/kfd-7/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-7/declared.json +14 -0
- package/dist/site/badges/v1/kfd-7/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-7/draft.json +14 -0
- package/dist/site/badges/v1/kfd-7/failed.json +14 -0
- package/dist/site/badges/v1/kfd-7/missing.json +14 -0
- package/dist/site/badges/v1/kfd-7/passed.json +14 -0
- package/dist/site/badges/v1/kfd-7/planned.json +14 -0
- package/dist/site/badges/v1/kfd-8/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-8/declared.json +14 -0
- package/dist/site/badges/v1/kfd-8/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-8/draft.json +14 -0
- package/dist/site/badges/v1/kfd-8/failed.json +14 -0
- package/dist/site/badges/v1/kfd-8/missing.json +14 -0
- package/dist/site/badges/v1/kfd-8/passed.json +14 -0
- package/dist/site/badges/v1/kfd-8/planned.json +14 -0
- package/dist/site/badges/v1/kfd-9/aligned.json +14 -0
- package/dist/site/badges/v1/kfd-9/declared.json +14 -0
- package/dist/site/badges/v1/kfd-9/downgraded.json +14 -0
- package/dist/site/badges/v1/kfd-9/draft.json +14 -0
- package/dist/site/badges/v1/kfd-9/failed.json +14 -0
- package/dist/site/badges/v1/kfd-9/missing.json +14 -0
- package/dist/site/badges/v1/kfd-9/passed.json +14 -0
- package/dist/site/badges/v1/kfd-9/planned.json +14 -0
- package/dist/site/buildchain-contract.json +42 -27
- package/dist/site/buildchain-site.json +62 -11
- package/dist/site/capability-registry.json +6 -5
- package/dist/site/cli-registry.json +12 -0
- package/dist/site/controller-registry.json +16 -4
- package/dist/site/kfd-claims.json +65 -13
- package/dist/site/kfd-upstream-aggregate.json +12 -12
- package/dist/site/manual-registry.json +17 -2
- package/dist/site/node-api-registry.json +17 -4
- package/dist/site/page-registry.json +48 -5
- package/dist/site/public-surface-audit.json +53 -10
- package/dist/site/publication-registry.json +4 -4
- package/dist/site/release-passport-check-manifest.json +28 -2
- package/dist/site/release-provenance.json +2 -0
- package/dist/site/schemas/kfd-agent-hub-adoption.schema.json +116 -0
- package/dist/site/site-manifest.json +14 -6
- package/dist/site/workflow-registry.json +8 -4
- package/docs/MAP.md +2 -0
- package/docs/kfd-agent-hub.md +110 -0
- package/docs/release-candidate.md +7 -0
- package/package.json +4 -2
- package/packages/core/buildchain-kfd-claims.js +1 -0
- package/packages/core/index.js +13 -0
- package/packages/core/kfd-agent-hub.js +496 -0
- package/packages/core/release-passport.js +105 -0
- package/scripts/check-inventory.mjs +2 -0
- package/scripts/generate-site-bundle.mjs +8 -0
|
@@ -27,6 +27,7 @@ export const RELEASE_CHECK_REPORT_CONTRACT = "kungfu-buildchain-release-check-re
|
|
|
27
27
|
export const KFD2_RELEASE_TRUST_PASSPORT_CONTRACT = "kungfu-buildchain-kfd-2-release-trust-passport-audit";
|
|
28
28
|
export const KFD2_TRUST_PROOF_CONTRACT = "kungfu-buildchain-kfd-2-trust-proof";
|
|
29
29
|
export const INVARIANT_PASSPORT_GATE_CONTRACT = "buildchain.invariant-passport-gate/v1";
|
|
30
|
+
export const KFD_AGENT_HUB_RELEASE_EVIDENCE_CONTRACT = "kungfu-buildchain-kfd-agent-hub-release-evidence/v1";
|
|
30
31
|
|
|
31
32
|
const CONTRACTS = new Set([
|
|
32
33
|
RELEASE_PASSPORT_CONTRACT,
|
|
@@ -591,6 +592,49 @@ function normalizeEvidenceDocument(meta, label) {
|
|
|
591
592
|
};
|
|
592
593
|
}
|
|
593
594
|
|
|
595
|
+
function normalizeKfdAgentHubEvidence(meta) {
|
|
596
|
+
const value = meta?.value;
|
|
597
|
+
if (!value) return undefined;
|
|
598
|
+
if (value.contract !== "kungfu-buildchain-kfd-agent-hub-evidence/v1") {
|
|
599
|
+
throw new Error("kfdAgentHubEvidence must be kungfu-buildchain-kfd-agent-hub-evidence/v1");
|
|
600
|
+
}
|
|
601
|
+
if (value.qualifying !== false || value.certification !== false) {
|
|
602
|
+
throw new Error("kfdAgentHubEvidence must remain nonqualifying and non-certifying");
|
|
603
|
+
}
|
|
604
|
+
for (const [label, root] of [
|
|
605
|
+
["report.digest", value.report?.digest],
|
|
606
|
+
["lock.root", value.lock?.root],
|
|
607
|
+
["scope.adapterArtifactDigest", value.scope?.adapterArtifactDigest],
|
|
608
|
+
]) {
|
|
609
|
+
if (!/^sha256:[0-9a-f]{64}$/.test(optionalString(root))) {
|
|
610
|
+
throw new Error(`kfdAgentHubEvidence.${label} must be a sha256 root`);
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
if (value.verification?.valid !== true || value.verification?.contract !== "kungfu-buildchain-kfd-agent-hub-verification/v1") {
|
|
614
|
+
throw new Error("kfdAgentHubEvidence.verification must bind a valid Buildchain Agent Hub verification");
|
|
615
|
+
}
|
|
616
|
+
if (value.kfd?.package?.name !== "@kungfu-tech/kfd" || !value.kfd?.package?.version) {
|
|
617
|
+
throw new Error("kfdAgentHubEvidence must bind an exact @kungfu-tech/kfd package version");
|
|
618
|
+
}
|
|
619
|
+
if (value.kfd?.profile?.id !== "kfd-agent-hub-conformance" || value.kfd?.suite?.id !== "kfd-agent-hub-20") {
|
|
620
|
+
throw new Error("kfdAgentHubEvidence must bind the KFD Agent Hub conformance profile and fixed suite");
|
|
621
|
+
}
|
|
622
|
+
const evidenceDigest = `sha256:${sha256Text(stableJson(value))}`;
|
|
623
|
+
return {
|
|
624
|
+
schemaVersion: 1,
|
|
625
|
+
contract: KFD_AGENT_HUB_RELEASE_EVIDENCE_CONTRACT,
|
|
626
|
+
evidenceContract: value.contract,
|
|
627
|
+
evidenceDigest,
|
|
628
|
+
reportDigest: value.report.digest,
|
|
629
|
+
lockRoot: value.lock.root,
|
|
630
|
+
sourceCut: value.kfd,
|
|
631
|
+
scope: value.scope,
|
|
632
|
+
qualifying: false,
|
|
633
|
+
certification: false,
|
|
634
|
+
claimBoundary: optionalString(value.claimBoundary),
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
|
|
594
638
|
function normalizePlatformArtifactManifest(meta, index = 0) {
|
|
595
639
|
const normalized = normalizeEvidenceDocument(meta, `platformArtifactManifests[${index}]`);
|
|
596
640
|
if (!normalized) {
|
|
@@ -1112,6 +1156,8 @@ export function createReleasePassport({
|
|
|
1112
1156
|
kfd2Claims = [],
|
|
1113
1157
|
kfd3 = undefined,
|
|
1114
1158
|
invariantPassports = undefined,
|
|
1159
|
+
kfdAgentHubEvidence = undefined,
|
|
1160
|
+
kfdAgentHubEvidencePath = "",
|
|
1115
1161
|
controllerReceipts = [],
|
|
1116
1162
|
controllerReceiptReferences = [],
|
|
1117
1163
|
} = {}) {
|
|
@@ -1137,6 +1183,7 @@ export function createReleasePassport({
|
|
|
1137
1183
|
const kfd1Metadata = resolveKfd1Metadata();
|
|
1138
1184
|
const normalizedKfd1 = kfd1?.passportSection ? kfd1 : undefined;
|
|
1139
1185
|
const normalizedKfd3 = kfd3?.passportSection ? kfd3 : undefined;
|
|
1186
|
+
const normalizedKfdAgentHub = normalizeKfdAgentHubEvidence(kfdAgentHubEvidence);
|
|
1140
1187
|
const normalizedKfd2 = createKfd2ReleaseTrustPassportAudit({
|
|
1141
1188
|
explicitClaims: kfd2Claims,
|
|
1142
1189
|
kfd1Section: normalizedKfd1?.passportSection,
|
|
@@ -1279,6 +1326,7 @@ export function createReleasePassport({
|
|
|
1279
1326
|
...(normalizedKfd1 ? { [normalizedKfd1.key || kfd1Metadata.key]: normalizedKfd1.passportSection } : {}),
|
|
1280
1327
|
...(normalizedKfd2 ? { "kfd-2": normalizedKfd2 } : {}),
|
|
1281
1328
|
...(normalizedKfd3 ? { [normalizedKfd3.key || "kfd-3"]: normalizedKfd3.passportSection } : {}),
|
|
1329
|
+
...(normalizedKfdAgentHub ? { kfdAgentHub: normalizedKfdAgentHub } : {}),
|
|
1282
1330
|
...(invariantPassports ? { invariantPassports } : {}),
|
|
1283
1331
|
...(normalizedControllerReceipts.length > 0 ? { controllerReceipts: normalizedControllerReceipts } : {}),
|
|
1284
1332
|
versionImpact: normalizedImpact.versionImpact,
|
|
@@ -1322,6 +1370,7 @@ export function createReleasePassport({
|
|
|
1322
1370
|
kfd1: normalizedKfd1 ? `${normalizedKfd1.key || kfd1Metadata.key}` : "",
|
|
1323
1371
|
kfd2: normalizedKfd2 ? "kfd-2" : "",
|
|
1324
1372
|
kfd3: normalizedKfd3 ? `${normalizedKfd3.key || "kfd-3"}` : "",
|
|
1373
|
+
kfdAgentHub: normalizedKfdAgentHub ? optionalString(kfdAgentHubEvidencePath || "kfd-agent-hub-evidence.json") : "",
|
|
1325
1374
|
invariantPassports: invariantPassports ? "invariantPassports" : "",
|
|
1326
1375
|
impact: impactPath,
|
|
1327
1376
|
checkReport: checkReportPath,
|
|
@@ -1365,6 +1414,7 @@ export function collectGitHubReleasePassport({
|
|
|
1365
1414
|
kfd3ArtifactVerifyCommand = "",
|
|
1366
1415
|
invariantPassportJsons = [],
|
|
1367
1416
|
invariantPassportCommand = "",
|
|
1417
|
+
kfdAgentHubEvidenceJson = "",
|
|
1368
1418
|
controllerReceiptReferences = [],
|
|
1369
1419
|
basePassportJson = "",
|
|
1370
1420
|
requireBaseKfd = false,
|
|
@@ -1428,6 +1478,11 @@ export function collectGitHubReleasePassport({
|
|
|
1428
1478
|
});
|
|
1429
1479
|
if (invariantPassportCommandMeta.value) invariantPassportMetas.push(invariantPassportCommandMeta);
|
|
1430
1480
|
const invariantPassports = createInvariantPassportGate(invariantPassportMetas);
|
|
1481
|
+
const kfdAgentHubEvidenceMeta = parseJsonInputWithMeta(
|
|
1482
|
+
kfdAgentHubEvidenceJson,
|
|
1483
|
+
undefined,
|
|
1484
|
+
{ cwd, label: "kfdAgentHubEvidenceJson" },
|
|
1485
|
+
);
|
|
1431
1486
|
const kfd3ArtifactWitnesses = [
|
|
1432
1487
|
...kfd3ArtifactWitnessMetas.map((meta) => meta.value),
|
|
1433
1488
|
...(kfd3ArtifactCommandMeta.value ? [kfd3ArtifactCommandMeta.value] : []),
|
|
@@ -1506,6 +1561,10 @@ export function collectGitHubReleasePassport({
|
|
|
1506
1561
|
kfd2Claims: kfd2ClaimMetas.map((meta) => meta.value),
|
|
1507
1562
|
kfd3,
|
|
1508
1563
|
invariantPassports,
|
|
1564
|
+
kfdAgentHubEvidence: kfdAgentHubEvidenceMeta.value
|
|
1565
|
+
? { ...kfdAgentHubEvidenceMeta, path: "kfd-agent-hub-evidence.json" }
|
|
1566
|
+
: undefined,
|
|
1567
|
+
kfdAgentHubEvidencePath: kfdAgentHubEvidenceMeta.value ? "kfd-agent-hub-evidence.json" : "",
|
|
1509
1568
|
controllerReceiptReferences,
|
|
1510
1569
|
publishEvidencePath: publishEvidenceMeta.path ? path.relative(resolvedOutputDir, publishEvidenceMeta.path).split(path.sep).join("/") : "",
|
|
1511
1570
|
transactionStatePath: transactionMeta.path ? path.relative(resolvedOutputDir, transactionMeta.path).split(path.sep).join("/") : "",
|
|
@@ -1521,6 +1580,7 @@ export function collectGitHubReleasePassport({
|
|
|
1521
1580
|
impact,
|
|
1522
1581
|
agentIndex,
|
|
1523
1582
|
productMechanism,
|
|
1583
|
+
kfdAgentHubEvidence: kfdAgentHubEvidenceMeta.value,
|
|
1524
1584
|
checkedAt: nowIso(),
|
|
1525
1585
|
});
|
|
1526
1586
|
const files = {
|
|
@@ -1529,6 +1589,7 @@ export function collectGitHubReleasePassport({
|
|
|
1529
1589
|
...(publishEvidenceMeta.value ? { [bundledPublishEvidencePath]: publishEvidenceMeta.value } : {}),
|
|
1530
1590
|
"impact.json": impact,
|
|
1531
1591
|
"agent-index.json": agentIndex,
|
|
1592
|
+
...(kfdAgentHubEvidenceMeta.value ? { "kfd-agent-hub-evidence.json": kfdAgentHubEvidenceMeta.value } : {}),
|
|
1532
1593
|
"buildchain.release.json": passport,
|
|
1533
1594
|
"check-report.json": checkReport,
|
|
1534
1595
|
};
|
|
@@ -1699,6 +1760,42 @@ function validateKfd2ReleaseTrustPassportAudit(section, issues) {
|
|
|
1699
1760
|
}
|
|
1700
1761
|
}
|
|
1701
1762
|
|
|
1763
|
+
function validateKfdAgentHubReleaseEvidence(section, evidence, issues) {
|
|
1764
|
+
if (!section && !evidence) return;
|
|
1765
|
+
if (!section) {
|
|
1766
|
+
issues.push(issue("error", "kfdAgentHub.section.missing", "Agent Hub evidence is present without a release-passport section"));
|
|
1767
|
+
return;
|
|
1768
|
+
}
|
|
1769
|
+
if (!evidence || typeof evidence !== "object" || Array.isArray(evidence)) {
|
|
1770
|
+
issues.push(issue("error", "kfdAgentHub.evidence.missing", "release passport must resolve its Agent Hub evidence asset"));
|
|
1771
|
+
return;
|
|
1772
|
+
}
|
|
1773
|
+
let expected;
|
|
1774
|
+
try {
|
|
1775
|
+
expected = normalizeKfdAgentHubEvidence({ value: evidence });
|
|
1776
|
+
} catch (error) {
|
|
1777
|
+
issues.push(issue("error", "kfdAgentHub.evidence.invalid", error.message));
|
|
1778
|
+
return;
|
|
1779
|
+
}
|
|
1780
|
+
if (section.contract !== KFD_AGENT_HUB_RELEASE_EVIDENCE_CONTRACT) {
|
|
1781
|
+
issues.push(issue("error", "kfdAgentHub.contract", `kfdAgentHub.contract must be ${KFD_AGENT_HUB_RELEASE_EVIDENCE_CONTRACT}`));
|
|
1782
|
+
}
|
|
1783
|
+
for (const field of ["evidenceDigest", "reportDigest", "lockRoot"]) {
|
|
1784
|
+
if (section[field] !== expected[field]) {
|
|
1785
|
+
issues.push(issue("error", `kfdAgentHub.${field}`, `kfdAgentHub.${field} does not match the evidence asset`, {
|
|
1786
|
+
expected: expected[field],
|
|
1787
|
+
actual: section[field],
|
|
1788
|
+
}));
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1791
|
+
if (stableJson(section.sourceCut) !== stableJson(expected.sourceCut) || stableJson(section.scope) !== stableJson(expected.scope)) {
|
|
1792
|
+
issues.push(issue("error", "kfdAgentHub.scope", "Agent Hub package cut or adapter scope does not match the evidence asset"));
|
|
1793
|
+
}
|
|
1794
|
+
if (section.qualifying !== false || section.certification !== false) {
|
|
1795
|
+
issues.push(issue("error", "kfdAgentHub.claimBoundary", "Agent Hub evidence must remain nonqualifying and non-certifying"));
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1798
|
+
|
|
1702
1799
|
async function resolveSiblingJson(basePath, relativePath) {
|
|
1703
1800
|
if (!basePath || !relativePath) {
|
|
1704
1801
|
return undefined;
|
|
@@ -1786,6 +1883,7 @@ export function createReleaseCheckReport({
|
|
|
1786
1883
|
impact,
|
|
1787
1884
|
agentIndex,
|
|
1788
1885
|
productMechanism,
|
|
1886
|
+
kfdAgentHubEvidence,
|
|
1789
1887
|
checkedAt = nowIso(),
|
|
1790
1888
|
} = {}) {
|
|
1791
1889
|
const issues = [];
|
|
@@ -1794,6 +1892,7 @@ export function createReleaseCheckReport({
|
|
|
1794
1892
|
validateContract(impact, IMPACT_LEDGER_CONTRACT, "impact", issues);
|
|
1795
1893
|
validateContract(agentIndex, AGENT_INDEX_CONTRACT, "agentIndex", issues);
|
|
1796
1894
|
validateContract(productMechanism, PRODUCT_MECHANISM_CONTRACT, "productMechanism", issues);
|
|
1895
|
+
validateKfdAgentHubReleaseEvidence(passport?.kfdAgentHub, kfdAgentHubEvidence, issues);
|
|
1797
1896
|
|
|
1798
1897
|
const tag = passport?.release?.tag || "";
|
|
1799
1898
|
if (!tag) {
|
|
@@ -2243,6 +2342,7 @@ export async function verifyReleasePassport({
|
|
|
2243
2342
|
impactLocation = "",
|
|
2244
2343
|
agentIndexLocation = "",
|
|
2245
2344
|
productMechanismLocation = "",
|
|
2345
|
+
kfdAgentHubEvidenceLocation = "",
|
|
2246
2346
|
} = {}) {
|
|
2247
2347
|
const passport = await readJsonFromLocation(passportLocation);
|
|
2248
2348
|
const basePath = /^https?:\/\//.test(passportLocation) ? passportLocation : path.resolve(passportLocation);
|
|
@@ -2266,6 +2366,10 @@ export async function verifyReleasePassport({
|
|
|
2266
2366
|
productMechanismLocation
|
|
2267
2367
|
? await readJsonFromLocation(productMechanismLocation)
|
|
2268
2368
|
: await resolveSiblingJson(basePath, passport.product?.mechanism) || {};
|
|
2369
|
+
const kfdAgentHubEvidence =
|
|
2370
|
+
kfdAgentHubEvidenceLocation
|
|
2371
|
+
? await readJsonFromLocation(kfdAgentHubEvidenceLocation)
|
|
2372
|
+
: await resolveSiblingJson(basePath, passport.evidence?.kfdAgentHub) || undefined;
|
|
2269
2373
|
return createReleaseCheckReport({
|
|
2270
2374
|
passport,
|
|
2271
2375
|
artifactEvidence,
|
|
@@ -2273,6 +2377,7 @@ export async function verifyReleasePassport({
|
|
|
2273
2377
|
impact,
|
|
2274
2378
|
agentIndex,
|
|
2275
2379
|
productMechanism,
|
|
2380
|
+
kfdAgentHubEvidence,
|
|
2276
2381
|
});
|
|
2277
2382
|
}
|
|
2278
2383
|
|
|
@@ -910,6 +910,8 @@ for (const requiredSnippet of [
|
|
|
910
910
|
"if (dryRun) {",
|
|
911
911
|
"Enforce Buildchain stable release canary gate",
|
|
912
912
|
"BUILDCHAIN_STABLE_RELEASE_POLICY: .buildchain/stable-release-policy.json",
|
|
913
|
+
"Consumer has no binary-distribution.yml; standalone binary dispatch is not applicable.",
|
|
914
|
+
"gh workflow view binary-distribution.yml",
|
|
913
915
|
]) {
|
|
914
916
|
if (!releaseCandidatePromoteWorkflow.includes(requiredSnippet)) {
|
|
915
917
|
throw new Error(`release candidate promote workflow missing KFD gate pass-through: ${requiredSnippet}`);
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
import {
|
|
15
15
|
collectKfdUpstreamFacts,
|
|
16
16
|
} from "../packages/core/kfd.js";
|
|
17
|
+
import { KFD_AGENT_HUB_ADOPTION_SCHEMA } from "../packages/core/kfd-agent-hub.js";
|
|
17
18
|
import {
|
|
18
19
|
createReadmeBadgeEndpointRegistry,
|
|
19
20
|
} from "../packages/core/readme-badges.js";
|
|
@@ -334,6 +335,7 @@ const manualMetaById = new Map(Object.entries({
|
|
|
334
335
|
"lifecycle-protocol": { capabilityGroup: "reusable-build", audience: ["consumer", "developer"], maturity: "stable", order: 210 },
|
|
335
336
|
"runtime-train-validation": { capabilityGroup: "governance-versioning", audience: ["maintainer", "consumer"], maturity: "stable", order: 220 },
|
|
336
337
|
"kfd-support": { capabilityGroup: "kfd-trust", audience: ["agent", "maintainer"], maturity: "stable", order: 300 },
|
|
338
|
+
"kfd-agent-hub": { capabilityGroup: "kfd-trust", audience: ["agent", "consumer", "maintainer"], maturity: "preview", order: 305 },
|
|
337
339
|
"site-bundle-contract": { capabilityGroup: "site-and-propagation", audience: ["site", "agent"], maturity: "stable", order: 400 },
|
|
338
340
|
"web-surface-deployments": { capabilityGroup: "site-and-propagation", audience: ["site", "release-operator"], maturity: "stable", order: 410 },
|
|
339
341
|
"release-propagation": { capabilityGroup: "site-and-propagation", audience: ["release-operator", "agent"], maturity: "preview", order: 420 },
|
|
@@ -410,6 +412,7 @@ function cliCommandMeta(id) {
|
|
|
410
412
|
"inspect-artifact": { group: "release-passport-trust", purpose: "Inspect artifact evidence." },
|
|
411
413
|
"inspect-release": { group: "release-passport-trust", purpose: "Inspect release passport evidence." },
|
|
412
414
|
kfd: { group: "kfd-trust", purpose: "Inspect KFD standards, schemas, and versioned KFD command families." },
|
|
415
|
+
"kfd-hub": { group: "kfd-trust", purpose: "Initialize, inspect, test, and explain one declarative KFD Agent Hub adapter adoption." },
|
|
413
416
|
layout: { group: "kfd-trust", purpose: "Return the versioned repository-layout and KFD registry discovery contract for tools such as Shifu." },
|
|
414
417
|
"kfd-schema": { group: "kfd-trust", purpose: "Inspect KFD schema command families." },
|
|
415
418
|
"kfd-schema-list": { group: "kfd-trust", purpose: "List machine-readable schemas exposed by the KFD package standards metadata." },
|
|
@@ -504,6 +507,7 @@ function nodeApiMeta(exportName) {
|
|
|
504
507
|
"./artifact-verification-envelope": { group: "release-passport-trust", summary: "Sealed exact-root, lifecycle, identity, and existing KFD assessment inputs for KFX admission." },
|
|
505
508
|
"./anchored-version-material": { group: "reusable-build", summary: "Anchored/manual derived version material preflight, exact-tree binding, and digest evidence APIs." },
|
|
506
509
|
"./release-passport": { group: "release-passport-trust", summary: "Release passport collection, verification, explanation, and evidence APIs." },
|
|
510
|
+
"./kfd-agent-hub": { group: "kfd-trust", summary: "Declarative Agent Hub adapter inspection, fixed-suite execution, exact KFD cut locking, and agent explanation APIs." },
|
|
507
511
|
"./release-passport-contract": { group: "release-passport-trust", summary: "Standalone release passport JSON Schema, ownership/check manifest, and structural validation APIs." },
|
|
508
512
|
"./release-candidate": { group: "reusable-build", summary: "PR-stage release-candidate artifact, passport, and promote-only resolver APIs." },
|
|
509
513
|
"./stable-candidate-ledger": { group: "governance-versioning", summary: "Immutable alpha candidate ledger, qualification, revocation, selection, and exact stable source-lock APIs." },
|
|
@@ -975,6 +979,7 @@ function buildSiteBundle() {
|
|
|
975
979
|
"buildchain.release.json",
|
|
976
980
|
"release-passport-check-manifest.json",
|
|
977
981
|
"schemas/release-passport-v1.schema.json",
|
|
982
|
+
"schemas/kfd-agent-hub-adoption.schema.json",
|
|
978
983
|
"artifact-evidence.json",
|
|
979
984
|
"product-mechanism.json",
|
|
980
985
|
"impact.json",
|
|
@@ -1002,6 +1007,7 @@ function buildSiteBundle() {
|
|
|
1002
1007
|
"artifact-schemas.json",
|
|
1003
1008
|
"release-passport-check-manifest.json",
|
|
1004
1009
|
"schemas/release-passport-v1.schema.json",
|
|
1010
|
+
"schemas/kfd-agent-hub-adoption.schema.json",
|
|
1005
1011
|
"buildchain-contract.json",
|
|
1006
1012
|
"kfd-claims.json",
|
|
1007
1013
|
"product-mechanism.json",
|
|
@@ -1130,6 +1136,7 @@ function buildSiteBundle() {
|
|
|
1130
1136
|
"artifact-schemas.json",
|
|
1131
1137
|
"release-passport-check-manifest.json",
|
|
1132
1138
|
"schemas/release-passport-v1.schema.json",
|
|
1139
|
+
"schemas/kfd-agent-hub-adoption.schema.json",
|
|
1133
1140
|
"buildchain-contract.json",
|
|
1134
1141
|
"kfd-upstream-aggregate.json",
|
|
1135
1142
|
"kfd-claims.json",
|
|
@@ -1302,6 +1309,7 @@ function buildSiteBundle() {
|
|
|
1302
1309
|
"artifact-schemas.json": artifactSchemas,
|
|
1303
1310
|
"release-passport-check-manifest.json": createReleasePassportCheckManifest(),
|
|
1304
1311
|
"schemas/release-passport-v1.schema.json": RELEASE_PASSPORT_SCHEMA,
|
|
1312
|
+
"schemas/kfd-agent-hub-adoption.schema.json": KFD_AGENT_HUB_ADOPTION_SCHEMA,
|
|
1305
1313
|
"badge-endpoint-registry.json": badgeEndpointRegistry,
|
|
1306
1314
|
"publication-registry.json": publicationRegistry,
|
|
1307
1315
|
"buildchain-contract.json": createBuildchainContractWorld({ root, controllerRegistry }),
|