diff --git a/capability-ledger.json b/capability-ledger.json index e3dcab53..adce6da4 100644 --- a/capability-ledger.json +++ b/capability-ledger.json @@ -4,9 +4,9 @@ { "capabilityId": "portable-identity", "title": "Portable opaque identity contract", - "specification": "draft", + "specification": "canonical", "implementation": "partial", - "repository": "draft-pr", + "repository": "merged", "verification": "fixture-proven", "activation": "inactive", "authority": "none", @@ -14,17 +14,17 @@ { "type": "repo-path", "ref": "modules/jarvos-control-plane/src/identity.js" }, { "type": "test", "ref": "modules/jarvos-control-plane/test/identity.test.js" }, { "type": "document", "ref": "docs/architecture/capability-truth-ledger.md" }, - { "type": "pull-request", "ref": "pull/257" } + { "type": "commit", "ref": "03b5263e3b273ea7a3e76581fd73c6059fd90ada" } ], - "assertedOn": "2026-08-31", - "notes": "Draft-PR validator, exports, and unit tests exist; no product consumer issues identifiers yet." + "assertedOn": "2026-09-01", + "notes": "Merged validator, exports, and unit tests exist; no product consumer issues identifiers yet." }, { "capabilityId": "capability-truth-ledger", "title": "Capability truth ledger contract", - "specification": "draft", + "specification": "canonical", "implementation": "partial", - "repository": "draft-pr", + "repository": "merged", "verification": "fixture-proven", "activation": "inactive", "authority": "none", @@ -32,17 +32,17 @@ { "type": "repo-path", "ref": "scripts/lib/capability-ledger.js" }, { "type": "document", "ref": "docs/architecture/capability-truth-ledger.md" }, { "type": "repo-path", "ref": "capability-ledger.json" }, - { "type": "pull-request", "ref": "pull/257" } + { "type": "commit", "ref": "03b5263e3b273ea7a3e76581fd73c6059fd90ada" } ], - "assertedOn": "2026-08-31", - "notes": "This draft-PR ledger validates against its own contract; no automated reporter consumes it yet." + "assertedOn": "2026-09-01", + "notes": "This merged ledger validates against its own contract; no automated reporter consumes it yet." }, { "capabilityId": "candidate-envelope", "title": "Non-authoritative candidate envelope contract", - "specification": "draft", + "specification": "canonical", "implementation": "partial", - "repository": "draft-pr", + "repository": "merged", "verification": "fixture-proven", "activation": "inactive", "authority": "none", @@ -51,17 +51,17 @@ { "type": "test", "ref": "modules/jarvos-secondbrain/packages/jarvos-ambient/test/candidate-contract.test.js" }, { "type": "document", "ref": "modules/jarvos-secondbrain/docs/contracts/CANDIDATE_ENVELOPE.md" }, { "type": "test", "ref": "tests/fixtures/foundation-contracts/manifest.json" }, - { "type": "pull-request", "ref": "pull/257" } + { "type": "commit", "ref": "03b5263e3b273ea7a3e76581fd73c6059fd90ada" } ], - "assertedOn": "2026-08-31", - "notes": "Draft-PR validator, exports, unit tests, and shared conformance fixtures exist; no source adapter or promotion consumer constructs candidates yet." + "assertedOn": "2026-09-01", + "notes": "Merged validator, exports, unit tests, and shared conformance fixtures exist; no source adapter or promotion consumer constructs candidates yet." }, { "capabilityId": "promotion-receipt", "title": "Cross-surface promotion receipt envelope contract", - "specification": "draft", + "specification": "canonical", "implementation": "partial", - "repository": "draft-pr", + "repository": "merged", "verification": "fixture-proven", "activation": "inactive", "authority": "none", @@ -70,10 +70,10 @@ { "type": "test", "ref": "modules/jarvos-control-plane/test/promotion-receipt.test.js" }, { "type": "document", "ref": "modules/jarvos-control-plane/README.md" }, { "type": "test", "ref": "tests/fixtures/foundation-contracts/manifest.json" }, - { "type": "pull-request", "ref": "pull/257" } + { "type": "commit", "ref": "03b5263e3b273ea7a3e76581fd73c6059fd90ada" } ], - "assertedOn": "2026-08-31", - "notes": "Draft-PR validator, exports, unit tests, and shared conformance fixtures exist; no destination writer emits this envelope yet." + "assertedOn": "2026-09-01", + "notes": "Merged validator, exports, unit tests, and shared conformance fixtures exist; no destination writer emits this envelope yet." } ] } diff --git a/docs/architecture/capability-truth-ledger.md b/docs/architecture/capability-truth-ledger.md index ae81d867..2097bd64 100644 --- a/docs/architecture/capability-truth-ledger.md +++ b/docs/architecture/capability-truth-ledger.md @@ -53,11 +53,12 @@ contain `..` traversal, and cannot carry a `file:` or other URI scheme. ## Seed ledger -The tracked `capability-ledger.json` seed describes only the foundation work in -draft pull request 257. Its identity, truth-ledger, candidate-envelope, and -promotion-receipt contracts are asserted at `specification: draft`, -`implementation: partial`, and `verification: fixture-proven` because their -validators and tests exist but no installed product consumer activates them. -Every seed record is `repository: draft-pr`, `activation: inactive`, and -`authority: none`. Merge and release are separate future observations; neither -is inferred from this branch. +The tracked `capability-ledger.json` seed describes foundation work merged in +commit `03b5263e3b273ea7a3e76581fd73c6059fd90ada`. Its identity, truth-ledger, +candidate-envelope, and promotion-receipt contracts are asserted at +`specification: canonical`, `implementation: partial`, and +`verification: fixture-proven` because their validators and tests exist but no +installed product consumer activates them. Every seed record is +`repository: merged`, `activation: inactive`, and `authority: none`. A merge +establishes repository state only; activation, authority, and release remain +separate observations and are never inferred from that commit. diff --git a/modules/jarvos-control-plane/test/foundation-contracts-conformance.test.js b/modules/jarvos-control-plane/test/foundation-contracts-conformance.test.js index c8616af9..796d30ff 100644 --- a/modules/jarvos-control-plane/test/foundation-contracts-conformance.test.js +++ b/modules/jarvos-control-plane/test/foundation-contracts-conformance.test.js @@ -92,14 +92,22 @@ test('capability ledger rejects sparse record and evidence arrays', () => { assert.ok(validateCapabilityLedger(sparseEvidence).length > 0); }); -test('the tracked foundation ledger does not overstate an open draft pull request', () => { +test('the tracked foundation ledger records merged foundation contracts conservatively', () => { const ledger = readJson(path.join(ROOT, 'capability-ledger.json')); for (const record of ledger.records) { - assert.equal(record.specification, 'draft', `${record.capabilityId} must remain draft`); - assert.equal(record.repository, 'draft-pr', `${record.capabilityId} must remain draft-pr`); + assert.equal(record.specification, 'canonical', `${record.capabilityId} must be canonical after merge`); + assert.equal(record.repository, 'merged', `${record.capabilityId} must record merged repository state`); + assert.equal(record.verification, 'fixture-proven', `${record.capabilityId} must not overstate verification`); + assert.equal(record.activation, 'inactive', `${record.capabilityId} must not infer activation from merge`); + assert.equal(record.authority, 'none', `${record.capabilityId} must not infer authority from merge`); assert.ok( + record.evidence.some((entry) => entry.type === 'commit' && entry.ref === '03b5263e3b273ea7a3e76581fd73c6059fd90ada'), + `${record.capabilityId} must identify its merged commit evidence`, + ); + assert.equal( record.evidence.some((entry) => entry.type === 'pull-request' && entry.ref === 'pull/257'), - `${record.capabilityId} must identify its draft pull request evidence`, + false, + `${record.capabilityId} must not retain draft pull request evidence`, ); } });