diff --git a/.bitcode/v35-public-docs-usage-guides.json b/.bitcode/v35-public-docs-usage-guides.json index 08740c938..f0cda4e1b 100644 --- a/.bitcode/v35-public-docs-usage-guides.json +++ b/.bitcode/v35-public-docs-usage-guides.json @@ -185,7 +185,7 @@ }, { "guideId": "protocol_usage", - "publicRoute": "/docs/protocol-v26", + "publicRoute": "/docs/protocol", "title": "Protocol usage guide", "audience": [ "protocol_reviewers", @@ -209,7 +209,7 @@ "packages/protocol/src/canonical/v21-specifying.js" ], "docsSections": [ - "protocol-v26", + "protocol", "proofs", "settlement-btd" ], @@ -273,7 +273,7 @@ "present": true } ], - "guideRoot": "public-docs-guide-row:5c4fedd9d938be94edf328b5" + "guideRoot": "public-docs-guide-row:3727d65d984dc16170993019" }, { "guideId": "auxillaries_usage", @@ -925,7 +925,7 @@ ], "docsSections": [ "proofs", - "protocol-v26" + "protocol" ], "proofSignals": [ "witness artifact", @@ -983,7 +983,7 @@ "present": true } ], - "guideRoot": "public-docs-guide-row:b9282e3a3536175084ee6acc" + "guideRoot": "public-docs-guide-row:2478e2c9f6e7ab968976fa12" }, { "guideId": "exchange_deferred_boundary", @@ -1186,7 +1186,7 @@ }, { "guideId": "protocol_usage", - "publicRoute": "/docs/protocol-v26", + "publicRoute": "/docs/protocol", "routePresent": true, "allSourceRootsPresent": true, "sourceRoots": [ @@ -1433,5 +1433,5 @@ ] } ], - "artifactRoot": "public-docs-usage-guides:d796083bee958b2958c76a5d" + "artifactRoot": "public-docs-usage-guides:082b5a06f4d926438e165af5" } diff --git a/.bitcode/v43-deposit-option-admission.json b/.bitcode/v43-deposit-option-admission.json index 311a8cada..a49bec8cd 100644 --- a/.bitcode/v43-deposit-option-admission.json +++ b/.bitcode/v43-deposit-option-admission.json @@ -5,7 +5,7 @@ "currentTarget": "V42", "sourceSafetyVerdict": "source-safe-deposit-option-admission-metadata", "generatedAt": "deterministic", - "artifactRoot": "v43-deposit-option-admission:57ad99a6209685eb2961858b", + "artifactRoot": "v43-deposit-option-admission:211f52c6a8d7a1678c2061ad", "passed": true, "objectIds": [ "DepositAssetPackOptionAdmissionReport", @@ -110,41 +110,41 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:75f3f6d81f999da998f40cb6", - "spec": "BITCODE_SPEC_V43.md:276f928dbae1236a7bc367d3", - "delta": "BITCODE_SPEC_V43_DELTA.md:2903a709b782ea69cecb3bb0", - "notes": "BITCODE_SPEC_V43_NOTES.md:16afebc86b2bb502f0b919c4", - "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:a5a5bf2fdee2d02f6221d00f", - "roadmap": "SPECIFICATIONS_ROADMAP.md:33994a7cf33bb6e3138b932a", - "readme": "README.md:e492ee74bfb581f11a687148", - "protocolReadme": "packages/protocol/README.md:85b0c2ee2ac15860466612c7", - "packageJson": "package.json:a02cfbf6b200910870068e4c", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a13e5ee752c88a9da7afa4a6", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:88bbe4ac9d23a6107216d9cc", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V43.md:28f17417fec136cec3a08645", + "delta": "BITCODE_SPEC_V43_DELTA.md:360fe5346443a0bf0d44f8c7", + "notes": "BITCODE_SPEC_V43_NOTES.md:8c4b6932fea7cdfe81a8406c", + "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:450948415f13c6732f50eb6e", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", "optionModel": "packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts:df560ea2544282645f57a6b5", "policyModel": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts:12816b23b2d8e304ab4a1638", "admissionModel": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts:4d2b0c5e6e10c2b14a75a8c8", "optionModelTest": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts:66cfc8c728f134087476a3a3", "policyModelTest": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts:1af7adccac488298ccd7f048", "admissionModelTest": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-admission.test.ts:9f156ea0d8c603487a7a8152", - "routeModel": "uapi/app/deposit/deposit-route-model.ts:7354c10d543af2cb65ba0ade", - "client": "uapi/app/deposit/DepositPageClient.tsx:ee78319e6a48ccf12e2eb925", - "routeModelTest": "uapi/tests/depositRouteModel.test.ts:0fb7d8d4d58d7e231ada4510", - "pageTest": "uapi/tests/depositPageClient.test.tsx:b1acbca83d8f3244147217dc", - "packActivityModel": "uapi/components/base/bitcode/activity/pack-activity-model.ts:d848bb7a06bc8f4c46c2fc8a", - "packActivityModelTest": "uapi/tests/packActivityModel.test.ts:7854762895ce63b0de8b6940", - "uapiJestConfig": "uapi/jest.config.cjs:352ee765a17823c7a486fe92", - "packageIndex": "packages/pipelines/asset-pack/src/index.ts:24854bd26b47ce7700e02380", - "packageManifest": "packages/pipelines/asset-pack/package.json:f998601555d9f21de1393f74", - "protocolIndex": "packages/protocol/src/index.js:647a8c9de68e311caf5b7d8f", - "protocolTypes": "packages/protocol/src/index.d.ts:50025035a9239ee2fad2ac2c", + "routeModel": "uapi/app/deposit/deposit-route-model.ts:6485e388dd745c79907f992c", + "client": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", + "routeModelTest": "uapi/tests/depositRouteModel.test.ts:3f7377f8c55ce132f970ad09", + "pageTest": "uapi/tests/depositPageClient.test.tsx:3385b14ea538e4ea1bb3ed01", + "packActivityModel": "uapi/components/base/bitcode/activity/pack-activity-model.ts:88d0334af8bc699e071ca2a1", + "packActivityModelTest": "uapi/tests/packActivityModel.test.ts:e6c865c6b351c41c6b6e1f43", + "uapiJestConfig": "uapi/jest.config.cjs:7384e1c2812fc3479936eef8", + "packageIndex": "packages/pipelines/asset-pack/src/index.ts:aca8dabbfc7a4348a1e9eed8", + "packageManifest": "packages/pipelines/asset-pack/package.json:6e9dd21d8ac1fb420997527a", + "protocolIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "protocolTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", "protocolTest": "packages/protocol/test/v43-deposit-option-admission.test.js:53ae55cfef55536ebc552b65", "generator": "scripts/generate-v43-deposit-option-admission.mjs:b7101699843c09250a84d41f", "checker": "scripts/check-v43-gate7-deposit-option-admission.mjs:6a857acf8b23f5fdb15fb02d" }, "predicateResults": [ { - "id": "active-canon-pointer-remains-v42", + "id": "active-canon-pointer-supports-v43-draft-or-later", "sourcePath": "BITCODE_SPEC.txt", "passed": true }, diff --git a/.bitcode/v43-deposit-policy-compensation.json b/.bitcode/v43-deposit-policy-compensation.json index c4443dc68..4f78ff503 100644 --- a/.bitcode/v43-deposit-policy-compensation.json +++ b/.bitcode/v43-deposit-policy-compensation.json @@ -5,7 +5,7 @@ "currentTarget": "V42", "sourceSafetyVerdict": "source-safe-deposit-policy-compensation-metadata", "generatedAt": "deterministic", - "artifactRoot": "v43-deposit-policy-compensation:e9a1ba9d758dbfa92dc171d1", + "artifactRoot": "v43-deposit-policy-compensation:481dea513c53c49c5f5e41a8", "passed": true, "objectIds": [ "DepositAssetPackOptionPolicy", @@ -99,36 +99,36 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:75f3f6d81f999da998f40cb6", - "spec": "BITCODE_SPEC_V43.md:276f928dbae1236a7bc367d3", - "delta": "BITCODE_SPEC_V43_DELTA.md:2903a709b782ea69cecb3bb0", - "notes": "BITCODE_SPEC_V43_NOTES.md:16afebc86b2bb502f0b919c4", - "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:a5a5bf2fdee2d02f6221d00f", - "roadmap": "SPECIFICATIONS_ROADMAP.md:33994a7cf33bb6e3138b932a", - "readme": "README.md:e492ee74bfb581f11a687148", - "protocolReadme": "packages/protocol/README.md:85b0c2ee2ac15860466612c7", - "packageJson": "package.json:a02cfbf6b200910870068e4c", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a13e5ee752c88a9da7afa4a6", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:88bbe4ac9d23a6107216d9cc", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V43.md:28f17417fec136cec3a08645", + "delta": "BITCODE_SPEC_V43_DELTA.md:360fe5346443a0bf0d44f8c7", + "notes": "BITCODE_SPEC_V43_NOTES.md:8c4b6932fea7cdfe81a8406c", + "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:450948415f13c6732f50eb6e", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", "optionModel": "packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts:df560ea2544282645f57a6b5", "policyModel": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts:12816b23b2d8e304ab4a1638", "optionModelTest": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts:66cfc8c728f134087476a3a3", "policyModelTest": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts:1af7adccac488298ccd7f048", - "routeModel": "uapi/app/deposit/deposit-route-model.ts:7354c10d543af2cb65ba0ade", - "client": "uapi/app/deposit/DepositPageClient.tsx:ee78319e6a48ccf12e2eb925", - "routeModelTest": "uapi/tests/depositRouteModel.test.ts:0fb7d8d4d58d7e231ada4510", - "pageTest": "uapi/tests/depositPageClient.test.tsx:b1acbca83d8f3244147217dc", - "packageIndex": "packages/pipelines/asset-pack/src/index.ts:24854bd26b47ce7700e02380", - "packageManifest": "packages/pipelines/asset-pack/package.json:f998601555d9f21de1393f74", - "protocolIndex": "packages/protocol/src/index.js:647a8c9de68e311caf5b7d8f", - "protocolTypes": "packages/protocol/src/index.d.ts:50025035a9239ee2fad2ac2c", + "routeModel": "uapi/app/deposit/deposit-route-model.ts:6485e388dd745c79907f992c", + "client": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", + "routeModelTest": "uapi/tests/depositRouteModel.test.ts:3f7377f8c55ce132f970ad09", + "pageTest": "uapi/tests/depositPageClient.test.tsx:3385b14ea538e4ea1bb3ed01", + "packageIndex": "packages/pipelines/asset-pack/src/index.ts:aca8dabbfc7a4348a1e9eed8", + "packageManifest": "packages/pipelines/asset-pack/package.json:6e9dd21d8ac1fb420997527a", + "protocolIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "protocolTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", "protocolTest": "packages/protocol/test/v43-deposit-policy-compensation.test.js:f84b0c016065b10f796eb775", "generator": "scripts/generate-v43-deposit-policy-compensation.mjs:0117b1222d0f4a4640324b47", "checker": "scripts/check-v43-gate6-deposit-policy-compensation.mjs:03412b725c36f24991a6325e" }, "predicateResults": [ { - "id": "active-canon-pointer-remains-v42", + "id": "active-canon-pointer-supports-v43-draft-or-later", "sourcePath": "BITCODE_SPEC.txt", "passed": true }, diff --git a/.bitcode/v43-deposit-route-options.json b/.bitcode/v43-deposit-route-options.json index 5fb931ff3..b32424447 100644 --- a/.bitcode/v43-deposit-route-options.json +++ b/.bitcode/v43-deposit-route-options.json @@ -5,7 +5,7 @@ "currentTarget": "V42", "sourceSafetyVerdict": "source-safe-deposit-route-option-metadata", "generatedAt": "deterministic", - "artifactRoot": "v43-deposit-route-options:f065a83b632a3746d3e07733", + "artifactRoot": "v43-deposit-route-options:fe1939f8087f1093d00e506e", "passed": true, "stepIds": [ "connect-source", @@ -110,41 +110,41 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:75f3f6d81f999da998f40cb6", - "spec": "BITCODE_SPEC_V43.md:276f928dbae1236a7bc367d3", - "delta": "BITCODE_SPEC_V43_DELTA.md:2903a709b782ea69cecb3bb0", - "notes": "BITCODE_SPEC_V43_NOTES.md:16afebc86b2bb502f0b919c4", - "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:a5a5bf2fdee2d02f6221d00f", - "roadmap": "SPECIFICATIONS_ROADMAP.md:33994a7cf33bb6e3138b932a", - "readme": "README.md:e492ee74bfb581f11a687148", - "protocolReadme": "packages/protocol/README.md:85b0c2ee2ac15860466612c7", - "packageJson": "package.json:a02cfbf6b200910870068e4c", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a13e5ee752c88a9da7afa4a6", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:88bbe4ac9d23a6107216d9cc", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V43.md:28f17417fec136cec3a08645", + "delta": "BITCODE_SPEC_V43_DELTA.md:360fe5346443a0bf0d44f8c7", + "notes": "BITCODE_SPEC_V43_NOTES.md:8c4b6932fea7cdfe81a8406c", + "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:450948415f13c6732f50eb6e", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", "terminalRoutes": "uapi/app/terminal/terminal-routes.ts:80f478da2673f1a64ada9bfb", - "routeModel": "uapi/app/deposit/deposit-route-model.ts:7354c10d543af2cb65ba0ade", + "routeModel": "uapi/app/deposit/deposit-route-model.ts:6485e388dd745c79907f992c", "page": "uapi/app/deposit/page.tsx:6bab6a9debab3f4350d0ddca", - "client": "uapi/app/deposit/DepositPageClient.tsx:ee78319e6a48ccf12e2eb925", + "client": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", "optionModel": "packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts:df560ea2544282645f57a6b5", "optionModelTest": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts:66cfc8c728f134087476a3a3", - "packageIndex": "packages/pipelines/asset-pack/src/index.ts:24854bd26b47ce7700e02380", - "packageManifest": "packages/pipelines/asset-pack/package.json:f998601555d9f21de1393f74", - "publicCopy": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts:3a45184ba8d2a4e71858c597", - "publicExplainers": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts:282d915eac3c9f22ba8c07f1", + "packageIndex": "packages/pipelines/asset-pack/src/index.ts:aca8dabbfc7a4348a1e9eed8", + "packageManifest": "packages/pipelines/asset-pack/package.json:6e9dd21d8ac1fb420997527a", + "publicCopy": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts:9b39322f872b899e1c752701", + "publicExplainers": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts:4e3b84dda50607ea8ea2b73e", "workspaceSurface": "uapi/components/base/bitcode/layout/workspace-surface.ts:12418d5db9c3ddad6d10c841", - "nav": "uapi/components/base/bitcode/layout/nav.tsx:d7d1a8104e780bb7c25f1880", - "footer": "uapi/components/base/bitcode/layout/footer.tsx:44749b98e5f63e7ac8f9f574", - "routeModelTest": "uapi/tests/depositRouteModel.test.ts:0fb7d8d4d58d7e231ada4510", - "pageTest": "uapi/tests/depositPageClient.test.tsx:b1acbca83d8f3244147217dc", - "protocolIndex": "packages/protocol/src/index.js:647a8c9de68e311caf5b7d8f", - "protocolTypes": "packages/protocol/src/index.d.ts:50025035a9239ee2fad2ac2c", + "nav": "uapi/components/base/bitcode/layout/nav.tsx:802e44030967176ec5c18cea", + "footer": "uapi/components/base/bitcode/layout/footer.tsx:2ccbbecfc6054f371e66ab5f", + "routeModelTest": "uapi/tests/depositRouteModel.test.ts:3f7377f8c55ce132f970ad09", + "pageTest": "uapi/tests/depositPageClient.test.tsx:3385b14ea538e4ea1bb3ed01", + "protocolIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "protocolTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", "protocolTest": "packages/protocol/test/v43-deposit-route-options.test.js:6576a3d4947b9bc23f7a786d", "generator": "scripts/generate-v43-deposit-route-options.mjs:2d92d5e9c25e2e66712953f9", "checker": "scripts/check-v43-gate5-deposit-route-options.mjs:10c6ad1594ea8bd06f97d7d5" }, "predicateResults": [ { - "id": "active-canon-pointer-remains-v42", + "id": "active-canon-pointer-supports-v43-draft-or-later", "sourcePath": "BITCODE_SPEC.txt", "passed": true }, diff --git a/.bitcode/v43-packs-activity-master-detail.json b/.bitcode/v43-packs-activity-master-detail.json index 6029f8ffa..4561149e1 100644 --- a/.bitcode/v43-packs-activity-master-detail.json +++ b/.bitcode/v43-packs-activity-master-detail.json @@ -5,7 +5,7 @@ "currentTarget": "V42", "sourceSafetyVerdict": "source-safe-packs-activity-master-detail-metadata", "generatedAt": "deterministic", - "artifactRoot": "v43-packs-activity-master-detail:c0086a738180a6f767377e43", + "artifactRoot": "v43-packs-activity-master-detail:6ebf3378fe3f20ae9c256a1e", "passed": true, "typeIds": [ "deposit-option", @@ -137,36 +137,36 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:75f3f6d81f999da998f40cb6", - "spec": "BITCODE_SPEC_V43.md:276f928dbae1236a7bc367d3", - "delta": "BITCODE_SPEC_V43_DELTA.md:2903a709b782ea69cecb3bb0", - "notes": "BITCODE_SPEC_V43_NOTES.md:16afebc86b2bb502f0b919c4", - "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:a5a5bf2fdee2d02f6221d00f", - "roadmap": "SPECIFICATIONS_ROADMAP.md:33994a7cf33bb6e3138b932a", - "readme": "README.md:e492ee74bfb581f11a687148", - "protocolReadme": "packages/protocol/README.md:85b0c2ee2ac15860466612c7", - "packageJson": "package.json:a02cfbf6b200910870068e4c", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a13e5ee752c88a9da7afa4a6", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:88bbe4ac9d23a6107216d9cc", - "model": "uapi/components/base/bitcode/activity/pack-activity-model.ts:d848bb7a06bc8f4c46c2fc8a", - "route": "uapi/app/api/packs/activity/route.ts:8a524f1dd16889733ce418a7", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V43.md:28f17417fec136cec3a08645", + "delta": "BITCODE_SPEC_V43_DELTA.md:360fe5346443a0bf0d44f8c7", + "notes": "BITCODE_SPEC_V43_NOTES.md:8c4b6932fea7cdfe81a8406c", + "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:450948415f13c6732f50eb6e", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "model": "uapi/components/base/bitcode/activity/pack-activity-model.ts:88d0334af8bc699e071ca2a1", + "route": "uapi/app/api/packs/activity/route.ts:97c5a4539d48562eb5de66e8", "page": "uapi/app/packs/page.tsx:1b3d7a1cc00500a13042e8dd", - "client": "uapi/app/packs/PacksPageClient.tsx:9a225a3462967b4b8c2adc00", + "client": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", "exchangeRedirect": "uapi/app/exchange/page.tsx:be7a744d1f9c9252d1b6eba9", - "nav": "uapi/components/base/bitcode/layout/nav.tsx:d7d1a8104e780bb7c25f1880", + "nav": "uapi/components/base/bitcode/layout/nav.tsx:802e44030967176ec5c18cea", "workspaceSurface": "uapi/components/base/bitcode/layout/workspace-surface.ts:12418d5db9c3ddad6d10c841", - "publicCopy": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts:3a45184ba8d2a4e71858c597", - "publicExplainers": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts:282d915eac3c9f22ba8c07f1", - "packageIndex": "packages/protocol/src/index.js:647a8c9de68e311caf5b7d8f", - "packageTypes": "packages/protocol/src/index.d.ts:50025035a9239ee2fad2ac2c", + "publicCopy": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts:9b39322f872b899e1c752701", + "publicExplainers": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts:4e3b84dda50607ea8ea2b73e", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", "packageTest": "packages/protocol/test/v43-packs-activity-master-detail.test.js:baf3e44b2fbe4e62590c1824", - "uapiTest": "uapi/tests/packActivityModel.test.ts:7854762895ce63b0de8b6940", + "uapiTest": "uapi/tests/packActivityModel.test.ts:e6c865c6b351c41c6b6e1f43", "generator": "scripts/generate-v43-packs-activity-master-detail.mjs:f342bc9b3ebb8de4e7aa2882", "checker": "scripts/check-v43-gate3-packs-activity-master-detail.mjs:5914a444235ffb15bb3272ad" }, "predicateResults": [ { - "id": "active-canon-pointer-remains-v42", + "id": "active-canon-pointer-supports-v43-draft-or-later", "sourcePath": "BITCODE_SPEC.txt", "passed": true }, diff --git a/.bitcode/v43-promotion-readiness-report.json b/.bitcode/v43-promotion-readiness-report.json index d5222fea7..cec6cbe1b 100644 --- a/.bitcode/v43-promotion-readiness-report.json +++ b/.bitcode/v43-promotion-readiness-report.json @@ -1,10 +1,9 @@ { - "reportId": "v43-promotion-readiness-report", "artifactId": "v43-promotion-readiness-report", "schemaId": "bitcode.v43.promotionReadinessReport.v1", "version": "V43", "currentTarget": "V42", - "generatedAt": "2026-05-31T08:38:40-03:00", + "generatedAt": "2026-05-29T00:00:00.000Z", "sourceSafetyVerdict": "source-safe-v43-product-routes-agentic-depositing-promotion-metadata", "prePromotionPosture": "V42 active / V43 draft", "postPromotionPosture": "V43 active / V44 draft", @@ -43,8 +42,8 @@ "relativePath": ".bitcode/v43-route-vocabulary-inventory.json", "present": true, "parseable": true, - "digest": "sha256:3a253ce1809e55ec1fea1802b188fb487ae8723089ebb60337adbbbc82f73d4c", - "byteLength": 454761, + "digest": "sha256:954e8628bc5483b6baed31b71659eaefeffe5b898ec755f3adab8f1a858894e7", + "byteLength": 484248, "sourceSafe": true, "artifactId": "v43-route-vocabulary-inventory", "version": "V43", @@ -54,8 +53,8 @@ "relativePath": ".bitcode/v43-packs-activity-master-detail.json", "present": true, "parseable": true, - "digest": "sha256:622db05cd196330c8bd468f1db55869fc2c0a4e8fda81160a866748f41ecbc45", - "byteLength": 11717, + "digest": "sha256:e1b7642eccf71402d2a0acb91024650eb1dd5442247cc33f86ea4c84da24ac00", + "byteLength": 11733, "sourceSafe": true, "artifactId": "v43-packs-activity-master-detail", "version": "V43", @@ -65,8 +64,8 @@ "relativePath": ".bitcode/v43-read-route-five-step-ux.json", "present": true, "parseable": true, - "digest": "sha256:9201b93d9a7660600414619333281b58d8f467bafbdd2865720e4d2c1af0ecc7", - "byteLength": 12152, + "digest": "sha256:e9d48ae4463713d927e2f68f17df8e29fb1c22aa320dc036fe68dfe73abf605a", + "byteLength": 12168, "sourceSafe": true, "artifactId": "v43-read-route-five-step-ux", "version": "V43", @@ -76,8 +75,8 @@ "relativePath": ".bitcode/v43-deposit-route-options.json", "present": true, "parseable": true, - "digest": "sha256:a56511336831517dcc4ad478d9392a1318ff6c53b87f11206ff379c718429b5a", - "byteLength": 13187, + "digest": "sha256:f538b8c51ad03eb5dc707d176e1bee8ccc0de8aea5aae4fd0667f0bd427a78ea", + "byteLength": 13203, "sourceSafe": true, "artifactId": "v43-deposit-route-options", "version": "V43", @@ -87,8 +86,8 @@ "relativePath": ".bitcode/v43-deposit-policy-compensation.json", "present": true, "parseable": true, - "digest": "sha256:4ae091eb995fedbcaab0d7e29eb588e1faa7372ff744059f6e989c476208455e", - "byteLength": 11319, + "digest": "sha256:6a3edb9567b570b5e0fd67e429f1d540efcef1d379d2c37ba2d75885e3d2337c", + "byteLength": 11335, "sourceSafe": true, "artifactId": "v43-deposit-policy-compensation", "version": "V43", @@ -98,8 +97,8 @@ "relativePath": ".bitcode/v43-deposit-option-admission.json", "present": true, "parseable": true, - "digest": "sha256:2352eb4a0515e5db7bf8869ff1fa3004875a022a4292b359265ae11eab9c2b85", - "byteLength": 13657, + "digest": "sha256:d93e37f84d9af625131e0ae46d1da5b62468ba995437db3c28de00a79454f095", + "byteLength": 13673, "sourceSafe": true, "artifactId": "v43-deposit-option-admission", "version": "V43", @@ -109,8 +108,8 @@ "relativePath": ".bitcode/v43-route-ux-product-excellence.json", "present": true, "parseable": true, - "digest": "sha256:0fc3c3981a72738a6eb662c8e515453e2fafbb46d3b8dc3600c9e11389bf38e4", - "byteLength": 11291, + "digest": "sha256:8353cd673e2f3b2c4ba495ad6820d22d9e7e77f40ba1951e0685b35a4a657d4b", + "byteLength": 11307, "sourceSafe": true, "artifactId": "v43-route-ux-product-excellence", "version": "V43", @@ -174,7 +173,7 @@ { "relativePath": "scripts/promote-bitcode-canon.mjs", "present": true, - "digest": "sha256:5c7dad86223accfd42a6ac205d471cea228570c070121633925f51a1246452c8", + "digest": "sha256:da02ac0ac8784b399f3004af768023f2a398dc00ea419ab48dd00880c52f62b3", "requiredTokens": [ { "token": "if (version === 'V43')", @@ -197,7 +196,7 @@ { "relativePath": "scripts/prepare-bitcode-spec-family-promotion.mjs", "present": true, - "digest": "sha256:566040782c417639c6d7ac8e073fcf6de56a48b4680f28542f9e1a684a47a259", + "digest": "sha256:73948c223c7a0d2587ee213145b35f5e9c605dfee8700044b360f3acbd3a46c8", "requiredTokens": [ { "token": "if (version === 'V43')", @@ -274,7 +273,7 @@ { "relativePath": ".github/workflows/bitcode-gate-quality.yml", "present": true, - "digest": "sha256:a6b07a149236a411facd8f36898d7c01848562f4b7f5af420435d31279e96d96", + "digest": "sha256:e5de1dddfaeeb0ee525b0c0f9c04887334b5c180992ea9c82f9f73cb9d2a7c68", "requiredTokens": [ { "token": "check-v43-gate10-promotion-readiness.mjs", @@ -293,7 +292,7 @@ { "relativePath": ".github/workflows/bitcode-canon-quality.yml", "present": true, - "digest": "sha256:6f265809cffee88a188b61c8ff7571fc9460f6874fe24e9d85798ccb05306ece", + "digest": "sha256:43cc4ded2bd9757dda9091dc7298cfbaa4171e16ed3aad5c79a9d0f780aa332d", "requiredTokens": [ { "token": "check-v43-gate10-promotion-readiness.mjs", @@ -312,7 +311,7 @@ { "relativePath": "packages/protocol/src/canonical/proven-generator.js", "present": true, - "digest": "sha256:696c9cf25133c4c7dbe088cbd1e654b9bcf99a909f8ef645970e39315a636a10", + "digest": "sha256:72fde86c1b4d36fb1df9f7cc33182a151bf6880dc559e07e035df027c2ca1fe4", "requiredTokens": [ { "token": "buildV43ProvenPackage", @@ -350,7 +349,7 @@ { "relativePath": "packages/protocol/src/canonical/v21-specifying.js", "present": true, - "digest": "sha256:a88afc3c8814ffeec07dfebb024448439452b9d7950af3a1f8708c3024905c62", + "digest": "sha256:bdfcd76464c115301b3a50c8df6d6f984861140a3ce5257447086f4aa8716885", "requiredTokens": [ { "token": ".bitcode/v43-promotion-readiness-report.json", @@ -361,7 +360,7 @@ { "relativePath": "package.json", "present": true, - "digest": "sha256:75e2eab494df4827d441b9c8e7ef1294e268ec59d8d018545f489153d4635d77", + "digest": "sha256:b79014968c556bc1b43ab3412ff5f85ae11b40e875e3186cc7304593d93adc19", "requiredTokens": [ { "token": "generate:v43-promotion-readiness", @@ -458,7 +457,7 @@ { "relativePath": "SPECIFICATIONS_ROADMAP.md", "present": true, - "digest": "sha256:0651a1ea31db9a4af225b76298ec15d965f0ec6c2b60f8bd2b64760cae7847ac", + "digest": "sha256:64b11cb963635e16fd70bf4883ced25e0a70bd48ab428a0b35719aecf468d10f", "requiredTokens": [ { "token": "V43 Gate 10 closure anchor", @@ -473,7 +472,7 @@ { "relativePath": "README.md", "present": true, - "digest": "sha256:ef6c7b33c7a6a3535012932a7d7544ee774b8d4a907fcfca5ffc22d6b10056c9", + "digest": "sha256:d28ec731634e03953d8adfe6cf6c07fe72db9b450d0aecce716fbc73cf6e4a5b", "requiredTokens": [ { "token": "check:v43-gate10", @@ -488,7 +487,7 @@ { "relativePath": "packages/protocol/README.md", "present": true, - "digest": "sha256:fd232f7266632704b2c20ce731938dfc5db95f175f2a81d1f1ce175f7f7c0556", + "digest": "sha256:f5b175049f4f4e8df179e184f40bc906ecd68181e425d4429a4dbb4a42a50c1a", "requiredTokens": [ { "token": "V43 Gate 10", @@ -550,9 +549,5 @@ "artifactRoot": "v43-product-route-promotion-readiness-report:3bef1fbfb307d4663b1c6c6f", "passed": true, "failures": [], - "validationCommand": "pnpm run check:v43-gate10", - "proofSourceCommit": "b29e088ba95c33a62247ff4e80b3ca09ff7a6b1c", - "generatorId": "bitcode.proven-generator.v1", - "worktreeState": "clean", - "sourceSafe": true + "validationCommand": "pnpm run check:v43-gate10" } diff --git a/.bitcode/v43-read-route-five-step-ux.json b/.bitcode/v43-read-route-five-step-ux.json index 966377cbb..5b522df72 100644 --- a/.bitcode/v43-read-route-five-step-ux.json +++ b/.bitcode/v43-read-route-five-step-ux.json @@ -5,7 +5,7 @@ "currentTarget": "V42", "sourceSafetyVerdict": "source-safe-read-route-five-step-metadata", "generatedAt": "deterministic", - "artifactRoot": "v43-read-route-five-step-ux:be32f7d049c3df0746f5c305", + "artifactRoot": "v43-read-route-five-step-ux:89600754cd7920495bd6578d", "passed": true, "stepIds": [ "request-read", @@ -116,39 +116,39 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:75f3f6d81f999da998f40cb6", - "spec": "BITCODE_SPEC_V43.md:276f928dbae1236a7bc367d3", - "delta": "BITCODE_SPEC_V43_DELTA.md:2903a709b782ea69cecb3bb0", - "notes": "BITCODE_SPEC_V43_NOTES.md:16afebc86b2bb502f0b919c4", - "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:a5a5bf2fdee2d02f6221d00f", - "roadmap": "SPECIFICATIONS_ROADMAP.md:33994a7cf33bb6e3138b932a", - "readme": "README.md:e492ee74bfb581f11a687148", - "protocolReadme": "packages/protocol/README.md:85b0c2ee2ac15860466612c7", - "packageJson": "package.json:a02cfbf6b200910870068e4c", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a13e5ee752c88a9da7afa4a6", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:88bbe4ac9d23a6107216d9cc", - "routeModel": "uapi/app/read/read-route-model.ts:a9324b0d92cd6c5176fa7940", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V43.md:28f17417fec136cec3a08645", + "delta": "BITCODE_SPEC_V43_DELTA.md:360fe5346443a0bf0d44f8c7", + "notes": "BITCODE_SPEC_V43_NOTES.md:8c4b6932fea7cdfe81a8406c", + "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:450948415f13c6732f50eb6e", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "routeModel": "uapi/app/read/read-route-model.ts:670e1abd63cccea6365a491f", "page": "uapi/app/read/page.tsx:37a723ed87feac05c0504249", - "client": "uapi/app/read/ReadPageClient.tsx:8e75873706918b22d7ddf8ed", + "client": "uapi/app/read/ReadPageClient.tsx:860bec675640bf466752bc7e", "terminalRoutes": "uapi/app/terminal/terminal-routes.ts:80f478da2673f1a64ada9bfb", "terminalWorkbench": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx:beeb39fa4f8568619d16f343", "terminalReadingState": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts:fb152fb0cc1d0799d1d616d6", - "nav": "uapi/components/base/bitcode/layout/nav.tsx:d7d1a8104e780bb7c25f1880", + "nav": "uapi/components/base/bitcode/layout/nav.tsx:802e44030967176ec5c18cea", "workspaceSurface": "uapi/components/base/bitcode/layout/workspace-surface.ts:12418d5db9c3ddad6d10c841", - "publicCopy": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts:3a45184ba8d2a4e71858c597", - "publicExplainers": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts:282d915eac3c9f22ba8c07f1", - "footer": "uapi/components/base/bitcode/layout/footer.tsx:44749b98e5f63e7ac8f9f574", - "packageIndex": "packages/protocol/src/index.js:647a8c9de68e311caf5b7d8f", - "packageTypes": "packages/protocol/src/index.d.ts:50025035a9239ee2fad2ac2c", + "publicCopy": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts:9b39322f872b899e1c752701", + "publicExplainers": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts:4e3b84dda50607ea8ea2b73e", + "footer": "uapi/components/base/bitcode/layout/footer.tsx:2ccbbecfc6054f371e66ab5f", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", "packageTest": "packages/protocol/test/v43-read-route-five-step-ux.test.js:fedf825a49244098367f6388", - "routeModelTest": "uapi/tests/readRouteModel.test.ts:47d613cef4ab6dce86846c8f", - "pageTest": "uapi/tests/readPageClient.test.tsx:39abee8e499c491b5a33cbf1", + "routeModelTest": "uapi/tests/readRouteModel.test.ts:5ad610c538f65fb0c860777f", + "pageTest": "uapi/tests/readPageClient.test.tsx:45cea103fa46706d1f39c4f4", "generator": "scripts/generate-v43-read-route-five-step-ux.mjs:04954a1f66c27e21ef86a08f", "checker": "scripts/check-v43-gate4-read-route-five-step-ux.mjs:86ba9a96169452ceeb347f10" }, "predicateResults": [ { - "id": "active-canon-pointer-remains-v42", + "id": "active-canon-pointer-supports-v43-draft-or-later", "sourcePath": "BITCODE_SPEC.txt", "passed": true }, diff --git a/.bitcode/v43-route-ux-product-excellence.json b/.bitcode/v43-route-ux-product-excellence.json index c8c81faec..21bd774a0 100644 --- a/.bitcode/v43-route-ux-product-excellence.json +++ b/.bitcode/v43-route-ux-product-excellence.json @@ -5,7 +5,7 @@ "currentTarget": "V42", "sourceSafetyVerdict": "source-safe-product-route-ux-metadata", "generatedAt": "deterministic", - "artifactRoot": "v43-route-ux-product-excellence:f10ceb81e4c398ed20d34b1c", + "artifactRoot": "v43-route-ux-product-excellence:685a686102c8a9daf5c38814", "passed": true, "objectIds": [ "ProductRouteShell", @@ -112,33 +112,33 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:75f3f6d81f999da998f40cb6", - "spec": "BITCODE_SPEC_V43.md:276f928dbae1236a7bc367d3", - "delta": "BITCODE_SPEC_V43_DELTA.md:2903a709b782ea69cecb3bb0", - "notes": "BITCODE_SPEC_V43_NOTES.md:16afebc86b2bb502f0b919c4", - "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:a5a5bf2fdee2d02f6221d00f", - "roadmap": "SPECIFICATIONS_ROADMAP.md:33994a7cf33bb6e3138b932a", - "readme": "README.md:e492ee74bfb581f11a687148", - "protocolReadme": "packages/protocol/README.md:85b0c2ee2ac15860466612c7", - "packageJson": "package.json:a02cfbf6b200910870068e4c", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a13e5ee752c88a9da7afa4a6", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:88bbe4ac9d23a6107216d9cc", - "productRouteShell": "uapi/components/base/bitcode/routes/product-route-shell.tsx:1db5b3d0e67eb84327568b90", - "packsClient": "uapi/app/packs/PacksPageClient.tsx:9a225a3462967b4b8c2adc00", - "readClient": "uapi/app/read/ReadPageClient.tsx:8e75873706918b22d7ddf8ed", - "depositClient": "uapi/app/deposit/DepositPageClient.tsx:ee78319e6a48ccf12e2eb925", - "packsTest": "uapi/tests/packsPageClient.test.tsx:3d190debc869e3d2ec7c0b45", - "readTest": "uapi/tests/readPageClient.test.tsx:39abee8e499c491b5a33cbf1", - "depositTest": "uapi/tests/depositPageClient.test.tsx:b1acbca83d8f3244147217dc", - "protocolIndex": "packages/protocol/src/index.js:647a8c9de68e311caf5b7d8f", - "protocolTypes": "packages/protocol/src/index.d.ts:50025035a9239ee2fad2ac2c", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V43.md:28f17417fec136cec3a08645", + "delta": "BITCODE_SPEC_V43_DELTA.md:360fe5346443a0bf0d44f8c7", + "notes": "BITCODE_SPEC_V43_NOTES.md:8c4b6932fea7cdfe81a8406c", + "parity": "BITCODE_SPEC_V43_PARITY_MATRIX.md:450948415f13c6732f50eb6e", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "productRouteShell": "uapi/components/base/bitcode/routes/product-route-shell.tsx:e71f90c289dec52fd158568a", + "packsClient": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", + "readClient": "uapi/app/read/ReadPageClient.tsx:860bec675640bf466752bc7e", + "depositClient": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", + "packsTest": "uapi/tests/packsPageClient.test.tsx:3fba7a8cabfefd257882490e", + "readTest": "uapi/tests/readPageClient.test.tsx:45cea103fa46706d1f39c4f4", + "depositTest": "uapi/tests/depositPageClient.test.tsx:3385b14ea538e4ea1bb3ed01", + "protocolIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "protocolTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", "protocolTest": "packages/protocol/test/v43-route-ux-product-excellence.test.js:90da888669ac62dabb2fab0d", "generator": "scripts/generate-v43-route-ux-product-excellence.mjs:cfa27fac384b22a62c12aa54", "checker": "scripts/check-v43-gate8-route-ux-product-excellence.mjs:0216d34433f7bd393cf8a99b" }, "predicateResults": [ { - "id": "active-canon-pointer-remains-v42", + "id": "active-canon-pointer-supports-v43-draft-or-later", "sourcePath": "BITCODE_SPEC.txt", "passed": true }, diff --git a/.bitcode/v43-route-vocabulary-inventory.json b/.bitcode/v43-route-vocabulary-inventory.json index bc152273b..b1c5244bd 100644 --- a/.bitcode/v43-route-vocabulary-inventory.json +++ b/.bitcode/v43-route-vocabulary-inventory.json @@ -5,7 +5,7 @@ "currentTarget": "V42", "sourceSafetyVerdict": "source-safe-route-vocabulary-inventory-metadata", "generatedAt": "deterministic", - "artifactRoot": "v43-route-vocabulary-inventory:eda2e8fe9e0e62640b2645cb", + "artifactRoot": "v43-route-vocabulary-inventory:b76d91eecfa7e04c92c31c87", "passed": true, "tokenIds": [ "route:/exchange", @@ -2284,6 +2284,165 @@ "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, + { + "path": "BITCODE_SPEC_V45.md", + "pathRoot": "v43-route-vocabulary-file:6665ec269297b6212c62936f", + "categories": [ + "doc", + "spec", + "telemetry" + ], + "tokenCounts": { + "route:/packs": 6, + "route:/read": 6, + "route:/deposit": 6, + "symbol:Reading": 3, + "symbol:Depositing": 1 + }, + "totalMatches": 22, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "BITCODE_SPEC_V45_NOTES.md", + "pathRoot": "v43-route-vocabulary-file:30858e27a8078a01f594114d", + "categories": [ + "doc", + "spec", + "telemetry" + ], + "tokenCounts": { + "route:/packs": 10, + "route:/read": 10, + "route:/deposit": 8, + "symbol:Packs": 1, + "symbol:Reading": 6, + "symbol:Depositing": 2, + "word:exchange": 2, + "word:terminal": 2 + }, + "totalMatches": 41, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "BITCODE_SPEC_V45_PARITY_MATRIX.md", + "pathRoot": "v43-route-vocabulary-file:d0a4aa88abcfe4483d89a007", + "categories": [ + "doc", + "spec", + "telemetry" + ], + "tokenCounts": { + "route:/exchange": 9, + "route:/packs": 19, + "route:/read": 14, + "route:/deposit": 14, + "symbol:Exchange": 8, + "symbol:Terminal": 1, + "symbol:Reading": 2, + "word:exchange": 9, + "word:terminal": 2 + }, + "totalMatches": 78, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "BITCODE_SPEC_V46.md", + "pathRoot": "v43-route-vocabulary-file:75c6afcc8b750c60bd989905", + "categories": [ + "doc", + "spec", + "telemetry" + ], + "tokenCounts": { + "route:/packs": 9, + "route:/read": 11, + "route:/deposit": 9, + "symbol:Terminal": 1, + "symbol:Reading": 6, + "symbol:Depositing": 1, + "symbol:PackActivity": 2, + "symbol:DepositAssetPackOption": 1 + }, + "totalMatches": 40, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "BITCODE_SPEC_V46_DELTA.md", + "pathRoot": "v43-route-vocabulary-file:f7908e2c684e977b1355b255", + "categories": [ + "doc", + "spec", + "telemetry" + ], + "tokenCounts": { + "route:/packs": 4, + "route:/read": 4, + "route:/deposit": 4, + "symbol:Reading": 2, + "symbol:PackActivity": 1, + "word:terminal": 1 + }, + "totalMatches": 16, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "BITCODE_SPEC_V46_NOTES.md", + "pathRoot": "v43-route-vocabulary-file:db5159eb751c6ab26fde76ca", + "categories": [ + "doc", + "spec", + "telemetry" + ], + "tokenCounts": { + "route:/packs": 16, + "route:/read": 17, + "route:/deposit": 13, + "symbol:Packs": 2, + "symbol:Reading": 10, + "symbol:Depositing": 4, + "symbol:PackActivity": 1, + "word:exchange": 2, + "word:terminal": 3 + }, + "totalMatches": 68, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "pathRoot": "v43-route-vocabulary-file:a9448daf7d04071865c4868c", + "categories": [ + "doc", + "spec", + "telemetry" + ], + "tokenCounts": { + "route:/exchange": 1, + "route:/packs": 8, + "route:/read": 8, + "route:/deposit": 8, + "symbol:Exchange": 1, + "symbol:Packs": 1, + "symbol:Reading": 3, + "symbol:Depositing": 1, + "word:exchange": 1 + }, + "totalMatches": 32, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, { "path": "BITCODE_V11_PREP_MEMO.md", "pathRoot": "v43-route-vocabulary-file:b1e60bfa73f58e90c6ab4741", @@ -2404,7 +2563,7 @@ }, { "path": "README.md", - "pathRoot": "v43-route-vocabulary-file:cbfbe01895b907f53dc30d95", + "pathRoot": "v43-route-vocabulary-file:ba8917a14cc5afecbe03d1c5", "categories": [ "doc", "telemetry" @@ -2412,28 +2571,28 @@ "tokenCounts": { "route:/exchange": 3, "route:/terminal": 2, - "route:/packs": 23, - "route:/read": 18, - "route:/deposit": 17, + "route:/packs": 24, + "route:/read": 20, + "route:/deposit": 19, "symbol:Exchange": 15, "symbol:Terminal": 30, - "symbol:Packs": 3, - "symbol:Reading": 37, - "symbol:Depositing": 7, - "symbol:PackActivity": 4, + "symbol:Packs": 2, + "symbol:Reading": 39, + "symbol:Depositing": 8, + "symbol:PackActivity": 5, "symbol:DepositAssetPackOption": 1, "word:exchange": 15, "word:terminal": 4, "word:self-referential": 2 }, - "totalMatches": 181, + "totalMatches": 189, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { "path": "SPECIFICATIONS_ROADMAP.md", - "pathRoot": "v43-route-vocabulary-file:a03e16efb160528a5f7055b1", + "pathRoot": "v43-route-vocabulary-file:1aaa41aef9d4b6e251747971", "categories": [ "doc", "spec", @@ -2442,21 +2601,21 @@ "tokenCounts": { "route:/exchange": 4, "route:/terminal": 3, - "route:/packs": 19, - "route:/read": 17, - "route:/deposit": 17, - "symbol:Exchange": 25, + "route:/packs": 24, + "route:/read": 22, + "route:/deposit": 22, + "symbol:Exchange": 26, "symbol:Terminal": 42, "symbol:Packs": 1, "symbol:Reading": 68, "symbol:Depositing": 12, - "symbol:PackActivity": 3, + "symbol:PackActivity": 4, "symbol:DepositAssetPackOption": 1, "word:exchange": 20, "word:terminal": 6, "word:self-referential": 3 }, - "totalMatches": 241, + "totalMatches": 258, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -4886,6 +5045,21 @@ "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, + { + "path": "packages/pipelines/asset-pack/src/__tests__/btd-scalar-volume-quote.test.ts", + "pathRoot": "v43-route-vocabulary-file:ecd613a5c9cbf68b5b94145a", + "categories": [ + "package", + "test" + ], + "tokenCounts": { + "symbol:Reading": 1 + }, + "totalMatches": 1, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, { "path": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-admission.test.ts", "pathRoot": "v43-route-vocabulary-file:4b924edfa6b14fbd2fd2ae95", @@ -4990,6 +5164,26 @@ "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, + { + "path": "packages/pipelines/asset-pack/src/__tests__/interface-disclosure-boundary.test.ts", + "pathRoot": "v43-route-vocabulary-file:3ebca5064671391cff833543", + "categories": [ + "package", + "telemetry", + "test" + ], + "tokenCounts": { + "route:/exchange": 4, + "route:/packs": 4, + "route:/read": 2, + "route:/deposit": 2, + "word:exchange": 4 + }, + "totalMatches": 16, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, { "path": "packages/pipelines/asset-pack/src/__tests__/organization-policy-wallet-authority.test.ts", "pathRoot": "v43-route-vocabulary-file:7f5709ff8ad9be9031363dda", @@ -5391,6 +5585,27 @@ "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, + { + "path": "packages/pipelines/asset-pack/src/interface-disclosure-boundary.ts", + "pathRoot": "v43-route-vocabulary-file:d1c0513541b1d82fd789fa17", + "categories": [ + "package", + "telemetry" + ], + "tokenCounts": { + "route:/exchange": 3, + "route:/packs": 6, + "route:/read": 3, + "route:/deposit": 3, + "symbol:Exchange": 2, + "symbol:Terminal": 2, + "word:exchange": 3 + }, + "totalMatches": 22, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, { "path": "packages/pipelines/asset-pack/src/organization-policy-wallet-authority.ts", "pathRoot": "v43-route-vocabulary-file:1cfe68ab62cb80f0102dae34", @@ -6109,7 +6324,7 @@ }, { "path": "packages/protocol/README.md", - "pathRoot": "v43-route-vocabulary-file:76d332061e46d4a1dc52cc23", + "pathRoot": "v43-route-vocabulary-file:ad494e85ad05d5592662d9ef", "categories": [ "doc", "package", @@ -6118,20 +6333,20 @@ "tokenCounts": { "route:/exchange": 4, "route:/terminal": 2, - "route:/packs": 18, - "route:/read": 13, - "route:/deposit": 12, + "route:/packs": 21, + "route:/read": 16, + "route:/deposit": 15, "symbol:Exchange": 17, "symbol:Terminal": 29, - "symbol:Packs": 1, - "symbol:Reading": 39, - "symbol:Depositing": 7, + "symbol:Packs": 2, + "symbol:Reading": 40, + "symbol:Depositing": 8, "symbol:PackActivity": 2, "word:exchange": 16, "word:terminal": 6, "word:self-referential": 1 }, - "totalMatches": 167, + "totalMatches": 179, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -7645,73 +7860,206 @@ "sourceSnippetSerialized": false }, { - "path": "packages/protocol/src/demo-shell-state.js", - "pathRoot": "v43-route-vocabulary-file:f10959e91d241ff9c35f957b", + "path": "packages/protocol/src/canonical/v45-proof-family-artifacts.js", + "pathRoot": "v43-route-vocabulary-file:3105afb7ad2dada6b9f00ea8", "categories": [ "package", "telemetry" ], "tokenCounts": { - "route:/read": 1 + "route:/packs": 1, + "route:/read": 2, + "route:/deposit": 2 }, - "totalMatches": 1, + "totalMatches": 5, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { - "path": "packages/protocol/src/index.js", - "pathRoot": "v43-route-vocabulary-file:db42fb44c87391bf14acc071", + "path": "packages/protocol/src/canonical/v45-source-safe-e2e-rehearsal.js", + "pathRoot": "v43-route-vocabulary-file:5afdfe177311cd550d7e4698", "categories": [ "package", "telemetry" ], "tokenCounts": { - "word:exchange": 9, - "word:terminal": 2 + "route:/packs": 1, + "route:/read": 2, + "route:/deposit": 2 }, - "totalMatches": 11, + "totalMatches": 5, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { - "path": "packages/protocol/src/receipt-schemas.js", - "pathRoot": "v43-route-vocabulary-file:af8e8f51e83c6cdbf8aeb02d", + "path": "packages/protocol/src/canonical/v46-interface-claim-contracts.js", + "pathRoot": "v43-route-vocabulary-file:cac818ac39d20e81225b05eb", "categories": [ "package", "telemetry" ], "tokenCounts": { - "route:/deposit": 1, - "symbol:Exchange": 1, - "symbol:Terminal": 1, - "word:terminal": 1 + "symbol:Terminal": 2, + "symbol:Reading": 4, + "word:exchange": 1, + "word:terminal": 6 }, - "totalMatches": 4, + "totalMatches": 13, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { - "path": "packages/protocol/test/conversation-terminal-handoff.test.js", - "pathRoot": "v43-route-vocabulary-file:8611e0a0f288f13295323da5", + "path": "packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js", + "pathRoot": "v43-route-vocabulary-file:be34aae60282db22d7ff1ba2", "categories": [ "package", - "test" + "telemetry" ], "tokenCounts": { - "symbol:Terminal": 1, - "word:terminal": 4 + "route:/packs": 4, + "route:/read": 4, + "route:/deposit": 4, + "symbol:Reading": 3, + "symbol:PackActivity": 2, + "word:terminal": 2 }, - "totalMatches": 5, + "totalMatches": 19, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { - "path": "packages/protocol/test/v35-public-docs-usage-guide-catalog.test.js", - "pathRoot": "v43-route-vocabulary-file:c5cb4fb7c465146d5f39194b", + "path": "packages/protocol/src/canonical/v46-product-route-comprehension-readback.js", + "pathRoot": "v43-route-vocabulary-file:d3b72aa69471713c9543e004", + "categories": [ + "package", + "telemetry" + ], + "tokenCounts": { + "route:/terminal": 1, + "route:/packs": 7, + "route:/read": 7, + "route:/deposit": 7, + "symbol:Exchange": 1, + "symbol:Reading": 1, + "symbol:Depositing": 1, + "symbol:PackActivity": 2, + "word:terminal": 6 + }, + "totalMatches": 33, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js", + "pathRoot": "v43-route-vocabulary-file:9187cace109e2ccceacab28f", + "categories": [ + "package", + "telemetry" + ], + "tokenCounts": { + "route:/packs": 12, + "route:/read": 11, + "route:/deposit": 6, + "symbol:Reading": 1, + "symbol:DepositAssetPackOption": 2 + }, + "totalMatches": 32, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js", + "pathRoot": "v43-route-vocabulary-file:47851b833cb70293cc9bc00f", + "categories": [ + "package", + "telemetry" + ], + "tokenCounts": { + "route:/packs": 1, + "route:/read": 1, + "route:/deposit": 1, + "symbol:Exchange": 1, + "symbol:Packs": 1 + }, + "totalMatches": 5, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "packages/protocol/src/demo-shell-state.js", + "pathRoot": "v43-route-vocabulary-file:f10959e91d241ff9c35f957b", + "categories": [ + "package", + "telemetry" + ], + "tokenCounts": { + "route:/read": 1 + }, + "totalMatches": 1, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "packages/protocol/src/index.js", + "pathRoot": "v43-route-vocabulary-file:db42fb44c87391bf14acc071", + "categories": [ + "package", + "telemetry" + ], + "tokenCounts": { + "word:exchange": 9, + "word:terminal": 2 + }, + "totalMatches": 11, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "packages/protocol/src/receipt-schemas.js", + "pathRoot": "v43-route-vocabulary-file:af8e8f51e83c6cdbf8aeb02d", + "categories": [ + "package", + "telemetry" + ], + "tokenCounts": { + "route:/deposit": 1, + "symbol:Exchange": 1, + "symbol:Terminal": 1, + "word:terminal": 1 + }, + "totalMatches": 4, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "packages/protocol/test/conversation-terminal-handoff.test.js", + "pathRoot": "v43-route-vocabulary-file:8611e0a0f288f13295323da5", + "categories": [ + "package", + "test" + ], + "tokenCounts": { + "symbol:Terminal": 1, + "word:terminal": 4 + }, + "totalMatches": 5, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "packages/protocol/test/v35-public-docs-usage-guide-catalog.test.js", + "pathRoot": "v43-route-vocabulary-file:c5cb4fb7c465146d5f39194b", "categories": [ "package", "telemetry", @@ -8221,6 +8569,36 @@ "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, + { + "path": "packages/protocol/test/v46-interface-claim-contracts.test.js", + "pathRoot": "v43-route-vocabulary-file:b5fa4a33512efdc38743bcf3", + "categories": [ + "package", + "test" + ], + "tokenCounts": { + "word:terminal": 1 + }, + "totalMatches": 1, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "packages/protocol/test/v46-public-operator-claim-boundaries.test.js", + "pathRoot": "v43-route-vocabulary-file:6ebe1bd060daca0144c8f214", + "categories": [ + "package", + "test" + ], + "tokenCounts": { + "symbol:Packs": 1 + }, + "totalMatches": 1, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, { "path": "packages/registry/README.md", "pathRoot": "v43-route-vocabulary-file:321d503d6c1faf1a2eda8073", @@ -10664,6 +11042,145 @@ "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, + { + "path": "scripts/check-v45-gate11-implementation-parity-audit.mjs", + "pathRoot": "v43-route-vocabulary-file:5cee4a1145f3b9b2aae20209", + "categories": [ + "script", + "telemetry" + ], + "tokenCounts": { + "route:/exchange": 1, + "route:/packs": 1, + "route:/read": 1, + "route:/deposit": 1, + "word:exchange": 1 + }, + "totalMatches": 5, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "scripts/check-v45-gate12-state-vocabulary-commodity-model.mjs", + "pathRoot": "v43-route-vocabulary-file:ca3d7e2bdf2f1da8ba864396", + "categories": [ + "script" + ], + "tokenCounts": { + "route:/packs": 2 + }, + "totalMatches": 2, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "scripts/check-v45-gate15-interface-disclosure-route-vocabulary-docs.mjs", + "pathRoot": "v43-route-vocabulary-file:2efd09f655ffe5bf886f6b28", + "categories": [ + "script" + ], + "tokenCounts": { + "route:/exchange": 8, + "route:/packs": 4, + "route:/read": 2, + "route:/deposit": 2, + "symbol:Exchange": 4, + "symbol:Terminal": 1, + "symbol:Packs": 1, + "word:exchange": 8 + }, + "totalMatches": 30, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "scripts/check-v45-gate2-knowledge-commoditization-law.mjs", + "pathRoot": "v43-route-vocabulary-file:5b4ba39a5bef4bbb678582ad", + "categories": [ + "script", + "telemetry" + ], + "tokenCounts": { + "symbol:Reading": 1, + "symbol:Depositing": 1 + }, + "totalMatches": 2, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "scripts/check-v45-gate7-interface-authority-disclosure-boundaries.mjs", + "pathRoot": "v43-route-vocabulary-file:c0ddb6dada8ece28ba5005f9", + "categories": [ + "script" + ], + "tokenCounts": { + "route:/packs": 1, + "route:/read": 1, + "route:/deposit": 1 + }, + "totalMatches": 3, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs", + "pathRoot": "v43-route-vocabulary-file:d3d77e4e80b20c86b81bcb15", + "categories": [ + "script" + ], + "tokenCounts": { + "route:/packs": 1, + "route:/read": 1, + "route:/deposit": 1 + }, + "totalMatches": 3, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "scripts/check-v46-gate4-product-route-comprehension-readback.mjs", + "pathRoot": "v43-route-vocabulary-file:0a4115a83396ef495c0f13d4", + "categories": [ + "script" + ], + "tokenCounts": { + "route:/packs": 2, + "route:/read": 2, + "route:/deposit": 2, + "symbol:Packs": 1, + "symbol:Reading": 1, + "symbol:Depositing": 1 + }, + "totalMatches": 9, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, + { + "path": "scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs", + "pathRoot": "v43-route-vocabulary-file:36181d2da0236eb3100098da", + "categories": [ + "script", + "telemetry" + ], + "tokenCounts": { + "route:/packs": 1, + "route:/read": 1, + "route:/deposit": 1, + "word:terminal": 1 + }, + "totalMatches": 4, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, { "path": "scripts/code-review/README.md", "pathRoot": "v43-route-vocabulary-file:fef2886ffeed000a3327379c", @@ -11361,15 +11878,14 @@ }, { "path": "uapi/app/(root)/components/MarketingOperatorGuideCard.tsx", - "pathRoot": "v43-route-vocabulary-file:87aa5c7e28ed2010735d1d8b", + "pathRoot": "v43-route-vocabulary-file:1af7a969cdaa91cad297c736", "categories": [ "component" ], "tokenCounts": { - "route:/terminal": 1, - "word:terminal": 1 + "route:/packs": 1 }, - "totalMatches": 2, + "totalMatches": 1, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -11426,49 +11942,34 @@ }, { "path": "uapi/app/(root)/components/PublicDocsPageContent.tsx", - "pathRoot": "v43-route-vocabulary-file:6229a7e91a89dc17a2c25a3c", + "pathRoot": "v43-route-vocabulary-file:14bbe1e40303d89997cb2bde", "categories": [ "component" ], "tokenCounts": { - "route:/exchange": 2, - "route:/terminal": 1, - "route:/read": 1, - "symbol:Exchange": 7, - "symbol:Terminal": 11, - "word:exchange": 2, - "word:terminal": 4 - }, - "totalMatches": 28, - "sourceSafeMetadataOnly": true, - "rawSourceTextSerialized": false, - "sourceSnippetSerialized": false - }, - { - "path": "uapi/app/(root)/components/landing/MarketingLandingTerminalPreview.tsx", - "pathRoot": "v43-route-vocabulary-file:a915aabe2811cc89b32ea386", - "categories": [ - "component" - ], - "tokenCounts": { - "symbol:Terminal": 1 + "route:/packs": 4, + "route:/read": 5, + "route:/deposit": 4, + "symbol:Packs": 1, + "symbol:Reading": 1, + "word:terminal": 3 }, - "totalMatches": 1, + "totalMatches": 18, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { "path": "uapi/app/(root)/components/landing/marketing-landing-shared.tsx", - "pathRoot": "v43-route-vocabulary-file:40bcdb22d0623beab92379ea", + "pathRoot": "v43-route-vocabulary-file:89407dbea162a0e76ae3341c", "categories": [ - "component" + "component", + "telemetry" ], "tokenCounts": { - "symbol:Exchange": 1, - "symbol:Terminal": 2 + "symbol:Packs": 1 }, - "totalMatches": 3, + "totalMatches": 1, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -12105,37 +12606,40 @@ }, { "path": "uapi/app/docs/bitcode-docs-content.ts", - "pathRoot": "v43-route-vocabulary-file:703e60c4d9564463a1ffa241", + "pathRoot": "v43-route-vocabulary-file:b06d095555423c17fd859069", "categories": [ "telemetry" ], "tokenCounts": { - "route:/exchange": 1, - "route:/terminal": 3, - "route:/read": 4, - "symbol:Exchange": 77, - "symbol:Terminal": 102, + "route:/exchange": 7, + "route:/terminal": 1, + "route:/packs": 34, + "route:/read": 14, + "route:/deposit": 10, + "symbol:Terminal": 37, + "symbol:Packs": 7, "symbol:Reading": 1, - "word:exchange": 5, - "word:terminal": 10 + "word:exchange": 11, + "word:terminal": 8 }, - "totalMatches": 203, + "totalMatches": 130, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { "path": "uapi/app/docs/page.tsx", - "pathRoot": "v43-route-vocabulary-file:9e286f0dfe1d6eefc3ca1002", + "pathRoot": "v43-route-vocabulary-file:1aa73efbeeb9bd67feaed874", "categories": [ "component", "route" ], "tokenCounts": { - "symbol:Exchange": 1, - "symbol:Terminal": 1 + "route:/packs": 1, + "route:/read": 1, + "route:/deposit": 1 }, - "totalMatches": 2, + "totalMatches": 3, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -12176,18 +12680,20 @@ }, { "path": "uapi/app/exchange/README.md", - "pathRoot": "v43-route-vocabulary-file:8dbcab387ed6a42f37d791cd", + "pathRoot": "v43-route-vocabulary-file:6615ca47ff7e7f892dfe8509", "categories": [ - "doc", - "telemetry" + "doc" ], "tokenCounts": { - "route:/exchange": 1, - "symbol:Exchange": 11, - "symbol:Terminal": 3, - "word:exchange": 13 + "route:/exchange": 3, + "route:/packs": 4, + "route:/read": 1, + "route:/deposit": 1, + "symbol:Exchange": 1, + "symbol:Reading": 1, + "word:exchange": 3 }, - "totalMatches": 28, + "totalMatches": 14, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -12357,16 +12863,17 @@ }, { "path": "uapi/app/page.tsx", - "pathRoot": "v43-route-vocabulary-file:3d10d6f576bdfd7770438741", + "pathRoot": "v43-route-vocabulary-file:6130941253e6443000d6dbee", "categories": [ "component", "route" ], "tokenCounts": { - "symbol:Exchange": 1, - "symbol:Terminal": 1 + "route:/packs": 1, + "route:/read": 1, + "route:/deposit": 1 }, - "totalMatches": 2, + "totalMatches": 3, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -13735,75 +14242,68 @@ }, { "path": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts", - "pathRoot": "v43-route-vocabulary-file:866d05977c5078e899818203", + "pathRoot": "v43-route-vocabulary-file:b70ffb87f4bd57e71990eea3", "categories": [ "component" ], "tokenCounts": { - "route:/terminal": 1, - "route:/packs": 1, - "route:/read": 2, - "route:/deposit": 1, - "symbol:Exchange": 1, - "symbol:Terminal": 10, - "symbol:Packs": 3, - "word:terminal": 1 + "route:/packs": 2, + "route:/read": 3, + "route:/deposit": 2, + "symbol:Packs": 9, + "symbol:Reading": 3 }, - "totalMatches": 20, + "totalMatches": 19, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { "path": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts", - "pathRoot": "v43-route-vocabulary-file:7b442239cdecb11cef125c3d", + "pathRoot": "v43-route-vocabulary-file:8c3ef1f6717412a7e2d022e0", "categories": [ "component", "telemetry" ], "tokenCounts": { - "symbol:Terminal": 6, - "symbol:Packs": 3, + "symbol:Packs": 5, "symbol:Reading": 3 }, - "totalMatches": 12, + "totalMatches": 8, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { "path": "uapi/components/base/bitcode/layout/footer.tsx", - "pathRoot": "v43-route-vocabulary-file:32f0b2f78b5e5b781eda51cf", + "pathRoot": "v43-route-vocabulary-file:00e24168c7166a62817ef404", "categories": [ "component", "telemetry" ], "tokenCounts": { - "route:/terminal": 1, "route:/packs": 1, "route:/read": 1, "route:/deposit": 1, - "symbol:Terminal": 2, "symbol:Packs": 1, "symbol:Reading": 1, - "symbol:Depositing": 1, - "word:terminal": 3 + "symbol:Depositing": 1 }, - "totalMatches": 12, + "totalMatches": 6, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { "path": "uapi/components/base/bitcode/layout/nav.tsx", - "pathRoot": "v43-route-vocabulary-file:41d940b07baf6ac542ae7ab3", + "pathRoot": "v43-route-vocabulary-file:23a2826e52c58b018adcc8c3", "categories": [ "component", "telemetry" ], "tokenCounts": { "route:/exchange": 2, - "route:/terminal": 4, + "route:/terminal": 2, "route:/packs": 3, "route:/read": 1, "route:/deposit": 1, @@ -13811,9 +14311,9 @@ "symbol:Packs": 1, "symbol:Reading": 1, "word:exchange": 4, - "word:terminal": 8 + "word:terminal": 5 }, - "totalMatches": 26, + "totalMatches": 21, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -14525,6 +15025,27 @@ "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, + { + "path": "uapi/tests/bitcodeDocsContent.test.tsx", + "pathRoot": "v43-route-vocabulary-file:0957859bcfbbd3cfbdd2bb7b", + "categories": [ + "component", + "telemetry", + "test" + ], + "tokenCounts": { + "route:/exchange": 1, + "route:/packs": 2, + "route:/read": 1, + "route:/deposit": 1, + "symbol:Exchange": 2, + "word:exchange": 2 + }, + "totalMatches": 9, + "sourceSafeMetadataOnly": true, + "rawSourceTextSerialized": false, + "sourceSnippetSerialized": false + }, { "path": "uapi/tests/bitcodeInlineExplainer.test.tsx", "pathRoot": "v43-route-vocabulary-file:5f5c7d0fcb2ad2fa510f6d57", @@ -14791,7 +15312,7 @@ }, { "path": "uapi/tests/e2e/bitcode-browser-proof.spec.ts", - "pathRoot": "v43-route-vocabulary-file:500e247b45abac1e6b591ad7", + "pathRoot": "v43-route-vocabulary-file:1bc2fcbab2b372c467c74e48", "categories": [ "telemetry", "test" @@ -14800,12 +15321,12 @@ "route:/exchange": 1, "route:/terminal": 3, "symbol:Exchange": 3, - "symbol:Terminal": 6, + "symbol:Terminal": 4, "symbol:Reading": 2, "word:exchange": 1, "word:terminal": 12 }, - "totalMatches": 28, + "totalMatches": 26, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -14845,19 +15366,22 @@ }, { "path": "uapi/tests/e2e/commercial-mvp.conversations-docs.spec.ts", - "pathRoot": "v43-route-vocabulary-file:aed490453efda34eec5aa7e0", + "pathRoot": "v43-route-vocabulary-file:84ce29b4719b25a06288e184", "categories": [ "telemetry", "test" ], "tokenCounts": { - "route:/exchange": 1, - "symbol:Exchange": 4, - "symbol:Terminal": 14, - "word:exchange": 1, + "route:/exchange": 3, + "route:/packs": 3, + "route:/read": 1, + "route:/deposit": 1, + "symbol:Terminal": 11, + "symbol:Packs": 1, + "word:exchange": 3, "word:terminal": 5 }, - "totalMatches": 25, + "totalMatches": 28, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -14898,17 +15422,16 @@ }, { "path": "uapi/tests/e2e/commercial-mvp.routes.spec.ts", - "pathRoot": "v43-route-vocabulary-file:a794400861365d54bb90bad3", + "pathRoot": "v43-route-vocabulary-file:f35dd177cc59f641eb25c393", "categories": [ "test" ], "tokenCounts": { "route:/terminal": 3, - "symbol:Exchange": 1, "symbol:Terminal": 9, "word:terminal": 5 }, - "totalMatches": 18, + "totalMatches": 17, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -15057,31 +15580,28 @@ }, { "path": "uapi/tests/footerPublicShell.test.tsx", - "pathRoot": "v43-route-vocabulary-file:4bb01dec1d904968fa054772", + "pathRoot": "v43-route-vocabulary-file:5927b22494f623a505b55195", "categories": [ "component", "telemetry", "test" ], "tokenCounts": { - "route:/terminal": 1, "route:/packs": 1, "route:/read": 1, "route:/deposit": 1, - "symbol:Terminal": 3, "symbol:Packs": 2, "symbol:Reading": 1, - "symbol:Depositing": 1, - "word:terminal": 1 + "symbol:Depositing": 1 }, - "totalMatches": 12, + "totalMatches": 7, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { "path": "uapi/tests/marketingLandingPage.test.tsx", - "pathRoot": "v43-route-vocabulary-file:df81318f9d51cb8a9316408a", + "pathRoot": "v43-route-vocabulary-file:482a47fa571ad7fbb464f571", "categories": [ "component", "telemetry", @@ -15090,7 +15610,7 @@ "tokenCounts": { "route:/terminal": 2, "route:/read": 1, - "symbol:Exchange": 1, + "symbol:Packs": 1, "word:terminal": 2 }, "totalMatches": 6, @@ -15100,17 +15620,16 @@ }, { "path": "uapi/tests/marketingOperatorGuideCard.test.tsx", - "pathRoot": "v43-route-vocabulary-file:5d39a04d4ef1ff3819f7729a", + "pathRoot": "v43-route-vocabulary-file:ddfd49b305d31bbf248cdcc3", "categories": [ "component", "test" ], "tokenCounts": { - "route:/terminal": 1, - "symbol:Terminal": 3, - "word:terminal": 1 + "route:/packs": 1, + "symbol:Packs": 3 }, - "totalMatches": 5, + "totalMatches": 4, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -15133,44 +15652,40 @@ }, { "path": "uapi/tests/navPublicShell.test.tsx", - "pathRoot": "v43-route-vocabulary-file:4ae37760fb6dd9e3479b1d29", + "pathRoot": "v43-route-vocabulary-file:3f5e73fd4e2966ce436a1e7c", "categories": [ "component", "telemetry", "test" ], "tokenCounts": { - "route:/terminal": 2, "route:/packs": 3, "route:/read": 4, "route:/deposit": 4, - "symbol:Terminal": 4, "symbol:Packs": 5, - "symbol:Reading": 1, - "word:terminal": 2 + "symbol:Reading": 1 }, - "totalMatches": 25, + "totalMatches": 17, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false }, { "path": "uapi/tests/navWorkspaceChrome.test.tsx", - "pathRoot": "v43-route-vocabulary-file:854d922b08790e576f3584c6", + "pathRoot": "v43-route-vocabulary-file:8f66e5556f2a2c9fca3003bc", "categories": [ "component", "telemetry", "test" ], "tokenCounts": { - "route:/terminal": 3, "route:/packs": 2, - "symbol:Terminal": 4, + "route:/read": 3, + "route:/deposit": 2, "symbol:Packs": 2, - "symbol:Reading": 1, - "word:terminal": 3 + "symbol:Reading": 1 }, - "totalMatches": 15, + "totalMatches": 10, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -15294,20 +15809,20 @@ }, { "path": "uapi/tests/publicDocsPageContent.test.tsx", - "pathRoot": "v43-route-vocabulary-file:04631a9a1ca9229166dea6e2", + "pathRoot": "v43-route-vocabulary-file:2ca1fdf7416f3e4d67eb31b4", "categories": [ "component", "test" ], "tokenCounts": { - "route:/exchange": 1, + "route:/exchange": 2, "route:/terminal": 1, - "symbol:Exchange": 3, - "symbol:Terminal": 4, - "word:exchange": 1, + "route:/packs": 1, + "symbol:Terminal": 1, + "word:exchange": 2, "word:terminal": 2 }, - "totalMatches": 12, + "totalMatches": 9, "sourceSafeMetadataOnly": true, "rawSourceTextSerialized": false, "sourceSnippetSerialized": false @@ -16322,35 +16837,35 @@ } ], "coverage": { - "sourceFileCount": 959, + "sourceFileCount": 986, "tokenTotals": { - "route:/exchange": 145, - "route:/terminal": 1472, - "route:/packs": 333, - "route:/read": 432, - "route:/deposit": 304, - "symbol:Exchange": 1965, - "symbol:Terminal": 3090, - "symbol:Packs": 85, - "symbol:Reading": 1432, - "symbol:Depositing": 265, - "symbol:PackActivity": 57, - "symbol:DepositAssetPackOption": 34, - "word:exchange": 1707, - "word:terminal": 3736, + "route:/exchange": 181, + "route:/terminal": 1458, + "route:/packs": 515, + "route:/read": 575, + "route:/deposit": 433, + "symbol:Exchange": 1878, + "symbol:Terminal": 2973, + "symbol:Packs": 115, + "symbol:Reading": 1484, + "symbol:Depositing": 279, + "symbol:PackActivity": 67, + "symbol:DepositAssetPackOption": 37, + "word:exchange": 1737, + "word:terminal": 3742, "word:self-referential": 32 }, "categoryTotals": { "route": 14, "component": 150, - "test": 230, - "doc": 173, + "test": 235, + "doc": 180, "api": 43, - "telemetry": 675, + "telemetry": 695, "workflow": 12, - "script": 133, - "package": 341, - "spec": 80 + "script": 141, + "package": 353, + "spec": 87 }, "routeVocabularyInventoryComplete": true, "migrationMatrixComplete": true, diff --git a/.bitcode/v44-btd-btc-compensation-statements.json b/.bitcode/v44-btd-btc-compensation-statements.json index 0b0743d07..2ec31f0ea 100644 --- a/.bitcode/v44-btd-btc-compensation-statements.json +++ b/.bitcode/v44-btd-btc-compensation-statements.json @@ -5,7 +5,7 @@ "currentTarget": "V43", "sourceSafetyVerdict": "source-safe-btd-btc-compensation-statement-metadata", "generatedAt": "deterministic", - "artifactRoot": "v44-btd-btc-compensation-statements:fbc6ff6c42c923a58eb21815", + "artifactRoot": "v44-btd-btc-compensation-statements:5a16b2f13aace71782c8b627", "passed": true, "objectIds": [ "BtdBtcCompensationStatements", @@ -178,34 +178,34 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:c986a5cd7104e321d4218fd5", - "spec": "BITCODE_SPEC_V44.md:02e482b8d45b070d4e37d79b", - "delta": "BITCODE_SPEC_V44_DELTA.md:91b54b2cbd8972d988982a1c", - "notes": "BITCODE_SPEC_V44_NOTES.md:67b447545e1d09119d71c002", - "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:69249981126a45936151a6e7", - "roadmap": "SPECIFICATIONS_ROADMAP.md:0651a1ea31db9a4af225b762", - "readme": "README.md:ef6c7b33c7a6a3535012932a", - "protocolReadme": "packages/protocol/README.md:aae160562370392979c25d42", - "packageJson": "package.json:75e2eab494df4827d441b9c8", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a6b07a149236a411facd8f36", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:6f265809cffee88a188b61c8", - "economicModel": "packages/protocol/src/canonical/v44-economic-domain-model.js:9b22edfd91b3179d68f9c66e", - "settlementBoundary": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:4e5eebe66c2075acef628682", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V44.md:398a20b55d38df2ebced0591", + "delta": "BITCODE_SPEC_V44_DELTA.md:eb779597425caf299574a313", + "notes": "BITCODE_SPEC_V44_NOTES.md:bedf9abebdc5d8ac538222b1", + "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:533bbfe052c5c8469c31c1af", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "economicModel": "packages/protocol/src/canonical/v44-economic-domain-model.js:2376c461d422d5eb4cb62da4", + "settlementBoundary": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:3d2b0984fc9e2c3c108d6eb0", "accountingStatements": "packages/pipelines/asset-pack/src/btd-btc-compensation-statements.ts:a239683c231a0127c4777a3f", "accountingStatementsTest": "packages/pipelines/asset-pack/src/__tests__/btd-btc-compensation-statements.test.ts:80c9df62424d8b0df0d155aa", "sourceToShares": "packages/btd/src/source-to-shares.ts:6e2e84251b29ba2477766708", "btdSettlement": "packages/btd/src/settlement.ts:871ea57357f464d8fbb0c6af", "btdReceipts": "packages/btd/src/receipts.ts:663e799baf0715924cb67c14", "btdReconciliation": "packages/btd/src/reconciliation.ts:d4bc6c129196572ae673c05b", - "packActivityModel": "uapi/components/base/bitcode/activity/pack-activity-model.ts:0c69746f1b9cbb70e2b0be09", + "packActivityModel": "uapi/components/base/bitcode/activity/pack-activity-model.ts:88d0334af8bc699e071ca2a1", "packsClient": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", - "packActivityModelTest": "uapi/tests/packActivityModel.test.ts:882c5ac213f83d8b57a6e5ff", - "packsClientTest": "uapi/tests/packsPageClient.test.tsx:bc9614c09f959b5e484abcc8", - "assetPackPackageIndex": "packages/pipelines/asset-pack/src/index.ts:48330699ed60ccb1db2bb77d", - "assetPackPackageManifest": "packages/pipelines/asset-pack/package.json:45926bffaa0fe93aee0d41cb", - "packageIndex": "packages/protocol/src/index.js:798966be5ed4885a90d6f413", - "packageTypes": "packages/protocol/src/index.d.ts:530ef72edae6788a72dff6de", - "packageSource": "packages/protocol/src/canonical/v44-btd-btc-compensation-statements.js:b8fd71fdc61742cfb3e19c0e", + "packActivityModelTest": "uapi/tests/packActivityModel.test.ts:e6c865c6b351c41c6b6e1f43", + "packsClientTest": "uapi/tests/packsPageClient.test.tsx:3fba7a8cabfefd257882490e", + "assetPackPackageIndex": "packages/pipelines/asset-pack/src/index.ts:aca8dabbfc7a4348a1e9eed8", + "assetPackPackageManifest": "packages/pipelines/asset-pack/package.json:6e9dd21d8ac1fb420997527a", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packageSource": "packages/protocol/src/canonical/v44-btd-btc-compensation-statements.js:34fa202a55bfa28b73652d1c", "packageTest": "packages/protocol/test/v44-btd-btc-compensation-statements.test.js:8c8bff4a58a07f01c94b1d90", "generator": "scripts/generate-v44-btd-btc-compensation-statements.mjs:603d3af279f716d625f891c9", "checker": "scripts/check-v44-gate6-btd-btc-compensation-statements.mjs:754e88d1e8a1aec3645aafb1" diff --git a/.bitcode/v44-depositor-earnings-supply-opportunities.json b/.bitcode/v44-depositor-earnings-supply-opportunities.json index b593783a7..5498c8bfa 100644 --- a/.bitcode/v44-depositor-earnings-supply-opportunities.json +++ b/.bitcode/v44-depositor-earnings-supply-opportunities.json @@ -5,7 +5,7 @@ "currentTarget": "V43", "sourceSafetyVerdict": "source-safe-depositor-earnings-supply-opportunity-metadata", "generatedAt": "deterministic", - "artifactRoot": "v44-depositor-earnings-supply-opportunities:d727c981023bbc01f66df3c3", + "artifactRoot": "v44-depositor-earnings-supply-opportunities:0400b65db1368a390e5e43ea", "passed": true, "objectIds": [ "DepositorEarningSupplyIntelligence", @@ -135,32 +135,32 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:c986a5cd7104e321d4218fd5", - "spec": "BITCODE_SPEC_V44.md:02e482b8d45b070d4e37d79b", - "delta": "BITCODE_SPEC_V44_DELTA.md:91b54b2cbd8972d988982a1c", - "notes": "BITCODE_SPEC_V44_NOTES.md:67b447545e1d09119d71c002", - "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:69249981126a45936151a6e7", - "roadmap": "SPECIFICATIONS_ROADMAP.md:0651a1ea31db9a4af225b762", - "readme": "README.md:ef6c7b33c7a6a3535012932a", - "protocolReadme": "packages/protocol/README.md:aae160562370392979c25d42", - "packageJson": "package.json:75e2eab494df4827d441b9c8", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a6b07a149236a411facd8f36", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:6f265809cffee88a188b61c8", - "economicModel": "packages/protocol/src/canonical/v44-economic-domain-model.js:9b22edfd91b3179d68f9c66e", - "portfolioMarketIntelligence": "packages/protocol/src/canonical/v44-packs-portfolio-market-intelligence.js:05a5ef92bb423970ecda2450", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V44.md:398a20b55d38df2ebced0591", + "delta": "BITCODE_SPEC_V44_DELTA.md:eb779597425caf299574a313", + "notes": "BITCODE_SPEC_V44_NOTES.md:bedf9abebdc5d8ac538222b1", + "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:533bbfe052c5c8469c31c1af", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "economicModel": "packages/protocol/src/canonical/v44-economic-domain-model.js:2376c461d422d5eb4cb62da4", + "portfolioMarketIntelligence": "packages/protocol/src/canonical/v44-packs-portfolio-market-intelligence.js:a0896aad55f7d44b0e70b1b1", "optionPolicy": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts:12816b23b2d8e304ab4a1638", "earningSupplyIntelligence": "packages/pipelines/asset-pack/src/depositor-earning-supply-intelligence.ts:e0ec2d83cfaf3bfaaa126387", "earningSupplyIntelligenceTest": "packages/pipelines/asset-pack/src/__tests__/depositor-earning-supply-intelligence.test.ts:3b7a869e6262f6f5ebcc71fe", "depositModel": "uapi/app/deposit/deposit-route-model.ts:6485e388dd745c79907f992c", "depositClient": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", "depositRouteTest": "uapi/tests/depositRouteModel.test.ts:3f7377f8c55ce132f970ad09", - "depositPageTest": "uapi/tests/depositPageClient.test.tsx:3d92ba0bb623f2270acad437", - "assetPackPackageIndex": "packages/pipelines/asset-pack/src/index.ts:48330699ed60ccb1db2bb77d", - "assetPackPackageManifest": "packages/pipelines/asset-pack/package.json:45926bffaa0fe93aee0d41cb", + "depositPageTest": "uapi/tests/depositPageClient.test.tsx:3385b14ea538e4ea1bb3ed01", + "assetPackPackageIndex": "packages/pipelines/asset-pack/src/index.ts:aca8dabbfc7a4348a1e9eed8", + "assetPackPackageManifest": "packages/pipelines/asset-pack/package.json:6e9dd21d8ac1fb420997527a", "sourceToShares": "packages/btd/src/source-to-shares.ts:6e2e84251b29ba2477766708", - "packageIndex": "packages/protocol/src/index.js:798966be5ed4885a90d6f413", - "packageTypes": "packages/protocol/src/index.d.ts:530ef72edae6788a72dff6de", - "packageSource": "packages/protocol/src/canonical/v44-depositor-earnings-supply-opportunities.js:db73d5344c187d0b6eca125c", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packageSource": "packages/protocol/src/canonical/v44-depositor-earnings-supply-opportunities.js:c9bcddca6f0aa9fae5ff9a6b", "packageTest": "packages/protocol/test/v44-depositor-earnings-supply-opportunities.test.js:1b025c1904f94a1069b64ddf", "generator": "scripts/generate-v44-depositor-earnings-supply-opportunities.mjs:0844124207cbfe8264f12a2f", "checker": "scripts/check-v44-gate5-depositor-earnings-supply-opportunities.mjs:85467da9804f946a18c764ce" diff --git a/.bitcode/v44-economic-domain-model.json b/.bitcode/v44-economic-domain-model.json index 788869dee..0cb57e4a2 100644 --- a/.bitcode/v44-economic-domain-model.json +++ b/.bitcode/v44-economic-domain-model.json @@ -5,7 +5,7 @@ "currentTarget": "V43", "sourceSafetyVerdict": "source-safe-economic-domain-model-metadata", "generatedAt": "deterministic", - "artifactRoot": "v44-economic-domain-model:a664b6afdd9ebb65eae6f55f", + "artifactRoot": "v44-economic-domain-model:cffa03b502f7c074711dc909", "passed": true, "economicObjectIds": [ "EnterprisePackPortfolio", @@ -758,20 +758,20 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:c986a5cd7104e321d4218fd5", - "spec": "BITCODE_SPEC_V44.md:02e482b8d45b070d4e37d79b", - "delta": "BITCODE_SPEC_V44_DELTA.md:91b54b2cbd8972d988982a1c", - "notes": "BITCODE_SPEC_V44_NOTES.md:67b447545e1d09119d71c002", - "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:69249981126a45936151a6e7", - "roadmap": "SPECIFICATIONS_ROADMAP.md:0651a1ea31db9a4af225b762", - "readme": "README.md:ef6c7b33c7a6a3535012932a", - "protocolReadme": "packages/protocol/README.md:aae160562370392979c25d42", - "packageJson": "package.json:75e2eab494df4827d441b9c8", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a6b07a149236a411facd8f36", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:6f265809cffee88a188b61c8", - "packageIndex": "packages/protocol/src/index.js:798966be5ed4885a90d6f413", - "packageTypes": "packages/protocol/src/index.d.ts:530ef72edae6788a72dff6de", - "packageSource": "packages/protocol/src/canonical/v44-economic-domain-model.js:9b22edfd91b3179d68f9c66e", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V44.md:398a20b55d38df2ebced0591", + "delta": "BITCODE_SPEC_V44_DELTA.md:eb779597425caf299574a313", + "notes": "BITCODE_SPEC_V44_NOTES.md:bedf9abebdc5d8ac538222b1", + "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:533bbfe052c5c8469c31c1af", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packageSource": "packages/protocol/src/canonical/v44-economic-domain-model.js:2376c461d422d5eb4cb62da4", "packageTest": "packages/protocol/test/v44-economic-domain-model.test.js:b89f71aa0cf578dabbec3cd9", "generator": "scripts/generate-v44-economic-domain-model.mjs:3390fbc087e919bedb14550c", "checker": "scripts/check-v44-gate2-economic-domain-model.mjs:01a1d9b3df0f75545ddb7e12" diff --git a/.bitcode/v44-enterprise-product-ux.json b/.bitcode/v44-enterprise-product-ux.json index 70ccaf08d..3d840ed32 100644 --- a/.bitcode/v44-enterprise-product-ux.json +++ b/.bitcode/v44-enterprise-product-ux.json @@ -5,7 +5,7 @@ "currentTarget": "V43", "sourceSafetyVerdict": "source-safe-enterprise-product-ux-metadata", "generatedAt": "deterministic", - "artifactRoot": "v44-enterprise-product-ux:36e07414ee5cf3e96ed3856b", + "artifactRoot": "v44-enterprise-product-ux:bf3d96209aa65044b2b06fe6", "passed": true, "objectIds": [ "ProductRouteEnterpriseSummary", @@ -133,27 +133,27 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:c986a5cd7104e321d4218fd5", - "spec": "BITCODE_SPEC_V44.md:02e482b8d45b070d4e37d79b", - "delta": "BITCODE_SPEC_V44_DELTA.md:91b54b2cbd8972d988982a1c", - "notes": "BITCODE_SPEC_V44_NOTES.md:67b447545e1d09119d71c002", - "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:69249981126a45936151a6e7", - "roadmap": "SPECIFICATIONS_ROADMAP.md:0651a1ea31db9a4af225b762", - "readme": "README.md:ef6c7b33c7a6a3535012932a", - "protocolReadme": "packages/protocol/README.md:aae160562370392979c25d42", - "packageJson": "package.json:75e2eab494df4827d441b9c8", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a6b07a149236a411facd8f36", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:6f265809cffee88a188b61c8", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V44.md:398a20b55d38df2ebced0591", + "delta": "BITCODE_SPEC_V44_DELTA.md:eb779597425caf299574a313", + "notes": "BITCODE_SPEC_V44_NOTES.md:bedf9abebdc5d8ac538222b1", + "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:533bbfe052c5c8469c31c1af", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", "productRouteShell": "uapi/components/base/bitcode/routes/product-route-shell.tsx:e71f90c289dec52fd158568a", "packsClient": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", "readClient": "uapi/app/read/ReadPageClient.tsx:860bec675640bf466752bc7e", "depositClient": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", - "packsTest": "uapi/tests/packsPageClient.test.tsx:bc9614c09f959b5e484abcc8", - "readTest": "uapi/tests/readPageClient.test.tsx:32b44747b6500a24ee88faa7", - "depositTest": "uapi/tests/depositPageClient.test.tsx:3d92ba0bb623f2270acad437", - "protocolIndex": "packages/protocol/src/index.js:798966be5ed4885a90d6f413", - "protocolTypes": "packages/protocol/src/index.d.ts:530ef72edae6788a72dff6de", - "protocolSource": "packages/protocol/src/canonical/v44-enterprise-product-ux.js:f270511778e31cf90f77f461", + "packsTest": "uapi/tests/packsPageClient.test.tsx:3fba7a8cabfefd257882490e", + "readTest": "uapi/tests/readPageClient.test.tsx:45cea103fa46706d1f39c4f4", + "depositTest": "uapi/tests/depositPageClient.test.tsx:3385b14ea538e4ea1bb3ed01", + "protocolIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "protocolTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "protocolSource": "packages/protocol/src/canonical/v44-enterprise-product-ux.js:0f27756ad44940e543988b11", "protocolTest": "packages/protocol/test/v44-enterprise-product-ux.test.js:c383b6eda2a248544f898bc3", "generator": "scripts/generate-v44-enterprise-product-ux.mjs:56391502a1cea83a2c8f828f", "checker": "scripts/check-v44-gate8-enterprise-product-ux.mjs:685792ad62c868c6edd72f97" diff --git a/.bitcode/v44-organization-policy-wallet-authority.json b/.bitcode/v44-organization-policy-wallet-authority.json index bb3b69238..9675e1068 100644 --- a/.bitcode/v44-organization-policy-wallet-authority.json +++ b/.bitcode/v44-organization-policy-wallet-authority.json @@ -368,38 +368,38 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:c986a5cd7104e321d4218fd5", - "spec": "BITCODE_SPEC_V44.md:02e482b8d45b070d4e37d79b", - "delta": "BITCODE_SPEC_V44_DELTA.md:91b54b2cbd8972d988982a1c", - "notes": "BITCODE_SPEC_V44_NOTES.md:67b447545e1d09119d71c002", - "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:69249981126a45936151a6e7", - "roadmap": "SPECIFICATIONS_ROADMAP.md:0651a1ea31db9a4af225b762", - "readme": "README.md:ef6c7b33c7a6a3535012932a", - "protocolReadme": "packages/protocol/README.md:aae160562370392979c25d42", - "packageJson": "package.json:75e2eab494df4827d441b9c8", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a6b07a149236a411facd8f36", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:6f265809cffee88a188b61c8", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V44.md:398a20b55d38df2ebced0591", + "delta": "BITCODE_SPEC_V44_DELTA.md:eb779597425caf299574a313", + "notes": "BITCODE_SPEC_V44_NOTES.md:bedf9abebdc5d8ac538222b1", + "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:533bbfe052c5c8469c31c1af", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", "btdAuthority": "packages/btd/src/authority.ts:20b1fe9ef12d791fab3e1de7", "btdAuthorityTest": "packages/btd/__tests__/btd.test.ts:21a5e15a3ec931d2c4c7a1cd", "packageHelper": "packages/pipelines/asset-pack/src/organization-policy-wallet-authority.ts:ed6fa07bc3f69caaca598249", "packageHelperTest": "packages/pipelines/asset-pack/src/__tests__/organization-policy-wallet-authority.test.ts:dffe4b5f7918abac32d9930b", - "assetPackPackageIndex": "packages/pipelines/asset-pack/src/index.ts:48330699ed60ccb1db2bb77d", - "assetPackPackageManifest": "packages/pipelines/asset-pack/package.json:45926bffaa0fe93aee0d41cb", + "assetPackPackageIndex": "packages/pipelines/asset-pack/src/index.ts:aca8dabbfc7a4348a1e9eed8", + "assetPackPackageManifest": "packages/pipelines/asset-pack/package.json:6e9dd21d8ac1fb420997527a", "readRouteModel": "uapi/app/read/read-route-model.ts:670e1abd63cccea6365a491f", "readRouteTest": "uapi/tests/readRouteModel.test.ts:5ad610c538f65fb0c860777f", "readClient": "uapi/app/read/ReadPageClient.tsx:860bec675640bf466752bc7e", - "readClientTest": "uapi/tests/readPageClient.test.tsx:32b44747b6500a24ee88faa7", + "readClientTest": "uapi/tests/readPageClient.test.tsx:45cea103fa46706d1f39c4f4", "depositRouteModel": "uapi/app/deposit/deposit-route-model.ts:6485e388dd745c79907f992c", "depositRouteTest": "uapi/tests/depositRouteModel.test.ts:3f7377f8c55ce132f970ad09", "depositClient": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", - "depositClientTest": "uapi/tests/depositPageClient.test.tsx:3d92ba0bb623f2270acad437", - "packActivityModel": "uapi/components/base/bitcode/activity/pack-activity-model.ts:0c69746f1b9cbb70e2b0be09", + "depositClientTest": "uapi/tests/depositPageClient.test.tsx:3385b14ea538e4ea1bb3ed01", + "packActivityModel": "uapi/components/base/bitcode/activity/pack-activity-model.ts:88d0334af8bc699e071ca2a1", "packsClient": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", - "packActivityModelTest": "uapi/tests/packActivityModel.test.ts:882c5ac213f83d8b57a6e5ff", - "packsClientTest": "uapi/tests/packsPageClient.test.tsx:bc9614c09f959b5e484abcc8", - "packageIndex": "packages/protocol/src/index.js:798966be5ed4885a90d6f413", - "packageTypes": "packages/protocol/src/index.d.ts:530ef72edae6788a72dff6de", - "packageSource": "packages/protocol/src/canonical/v44-organization-policy-wallet-authority.js:fbf045a5552f4e34a260ac7d", + "packActivityModelTest": "uapi/tests/packActivityModel.test.ts:e6c865c6b351c41c6b6e1f43", + "packsClientTest": "uapi/tests/packsPageClient.test.tsx:3fba7a8cabfefd257882490e", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packageSource": "packages/protocol/src/canonical/v44-organization-policy-wallet-authority.js:50d1fae80749c01012041f97", "packageTest": "packages/protocol/test/v44-organization-policy-wallet-authority.test.js:95d6dc48346a60a88d83d4b7", "generator": "scripts/generate-v44-organization-policy-wallet-authority.mjs:faabf63e75da42310d30df06", "checker": "scripts/check-v44-gate7-organization-policy-wallet-authority.mjs:fd3dc2088ab6e5a322658257" @@ -423,5 +423,5 @@ "failedPredicateIds": [] }, "passed": true, - "artifactRoot": "v44-organization-policy-wallet-authority:3845a5d3718591e0b1cffe51" + "artifactRoot": "v44-organization-policy-wallet-authority:6d392fcd6e2c993770087fb2" } diff --git a/.bitcode/v44-packs-portfolio-market-intelligence.json b/.bitcode/v44-packs-portfolio-market-intelligence.json index a28ac68e7..d04ab5a15 100644 --- a/.bitcode/v44-packs-portfolio-market-intelligence.json +++ b/.bitcode/v44-packs-portfolio-market-intelligence.json @@ -5,7 +5,7 @@ "currentTarget": "V43", "sourceSafetyVerdict": "source-safe-packs-portfolio-market-intelligence-metadata", "generatedAt": "deterministic", - "artifactRoot": "v44-packs-portfolio-market-intelligence:e6147926d6789eec7f02e9a1", + "artifactRoot": "v44-packs-portfolio-market-intelligence:f2db4b23fb85c6ac6f0c2c5a", "passed": true, "portfolioViewIds": [ "enterprise-pack-portfolio", @@ -108,24 +108,24 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:c986a5cd7104e321d4218fd5", - "spec": "BITCODE_SPEC_V44.md:02e482b8d45b070d4e37d79b", - "delta": "BITCODE_SPEC_V44_DELTA.md:91b54b2cbd8972d988982a1c", - "notes": "BITCODE_SPEC_V44_NOTES.md:67b447545e1d09119d71c002", - "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:69249981126a45936151a6e7", - "roadmap": "SPECIFICATIONS_ROADMAP.md:0651a1ea31db9a4af225b762", - "readme": "README.md:ef6c7b33c7a6a3535012932a", - "protocolReadme": "packages/protocol/README.md:aae160562370392979c25d42", - "packageJson": "package.json:75e2eab494df4827d441b9c8", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a6b07a149236a411facd8f36", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:6f265809cffee88a188b61c8", - "economicModel": "packages/protocol/src/canonical/v44-economic-domain-model.js:9b22edfd91b3179d68f9c66e", - "model": "uapi/components/base/bitcode/activity/pack-activity-model.ts:0c69746f1b9cbb70e2b0be09", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V44.md:398a20b55d38df2ebced0591", + "delta": "BITCODE_SPEC_V44_DELTA.md:eb779597425caf299574a313", + "notes": "BITCODE_SPEC_V44_NOTES.md:bedf9abebdc5d8ac538222b1", + "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:533bbfe052c5c8469c31c1af", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "economicModel": "packages/protocol/src/canonical/v44-economic-domain-model.js:2376c461d422d5eb4cb62da4", + "model": "uapi/components/base/bitcode/activity/pack-activity-model.ts:88d0334af8bc699e071ca2a1", "route": "uapi/app/api/packs/activity/route.ts:97c5a4539d48562eb5de66e8", "client": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", - "uapiTest": "uapi/tests/packActivityModel.test.ts:882c5ac213f83d8b57a6e5ff", - "packageIndex": "packages/protocol/src/index.js:798966be5ed4885a90d6f413", - "packageTypes": "packages/protocol/src/index.d.ts:530ef72edae6788a72dff6de", + "uapiTest": "uapi/tests/packActivityModel.test.ts:e6c865c6b351c41c6b6e1f43", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", "packageTest": "packages/protocol/test/v44-packs-portfolio-market-intelligence.test.js:ea02fa03d210e6480036fc0f", "generator": "scripts/generate-v44-packs-portfolio-market-intelligence.mjs:c106ef7138e3a330d405bec2", "checker": "scripts/check-v44-gate3-packs-portfolio-market-intelligence.mjs:0de0b87cbc96bb307cc1533a" diff --git a/.bitcode/v44-promotion-readiness-report.json b/.bitcode/v44-promotion-readiness-report.json index 2bce40959..57e831cad 100644 --- a/.bitcode/v44-promotion-readiness-report.json +++ b/.bitcode/v44-promotion-readiness-report.json @@ -1,10 +1,9 @@ { - "reportId": "v44-promotion-readiness-report", "artifactId": "v44-promotion-readiness-report", "schemaId": "bitcode.v44.promotionReadinessReport.v1", "version": "V44", "currentTarget": "V43", - "generatedAt": "2026-05-31T09:53:42-03:00", + "generatedAt": "2026-05-29T00:00:00.000Z", "sourceSafetyVerdict": "source-safe-v44-scaled-engineering-economy-promotion-metadata", "prePromotionPosture": "V43 active / V44 draft", "postPromotionPosture": "V44 active / V45 draft", @@ -43,7 +42,7 @@ "relativePath": ".bitcode/v44-economic-domain-model.json", "present": true, "parseable": true, - "digest": "sha256:ce579dd3076cb707a1f3f63492cbd5a2b2297b58cfb05fdbe677e2efebbc0a7e", + "digest": "sha256:1dd2a4d80bc7b8f9fdf8bd1ef597c87a3fad4fe4094307ab844264649911dd48", "byteLength": 25917, "sourceSafe": true, "artifactId": "v44-economic-domain-model", @@ -54,7 +53,7 @@ "relativePath": ".bitcode/v44-packs-portfolio-market-intelligence.json", "present": true, "parseable": true, - "digest": "sha256:3cb70cf1247d818133bbe4cd69e284132c0bf61d25694e653eb12e64703e2141", + "digest": "sha256:c708463a783bddcbae6830dcdff6f5b402202b869b58b29cda4704d608260a58", "byteLength": 10298, "sourceSafe": true, "artifactId": "v44-packs-portfolio-market-intelligence", @@ -65,7 +64,7 @@ "relativePath": ".bitcode/v44-reading-budget-quote-policy.json", "present": true, "parseable": true, - "digest": "sha256:f3a778bc96202a4f7a842193cdba33a70e860ddb8baa0b6d4aeb9b5598d0ee6b", + "digest": "sha256:6566a88cd086f3f754e117d12fdf0f59173737c442dd196571c245ec71bb88fc", "byteLength": 11938, "sourceSafe": true, "artifactId": "v44-reading-budget-quote-policy", @@ -76,7 +75,7 @@ "relativePath": ".bitcode/v44-depositor-earnings-supply-opportunities.json", "present": true, "parseable": true, - "digest": "sha256:f4c028484347edf2bf6a4f99946ef6dd8944b89ef95dfaefead6c6cb650fb7a5", + "digest": "sha256:df5e5230240a1b2e77fdd3b8db484e02fddce8d8e7c06c9a290a5b5b228a0700", "byteLength": 14109, "sourceSafe": true, "artifactId": "v44-depositor-earnings-supply-opportunities", @@ -87,7 +86,7 @@ "relativePath": ".bitcode/v44-btd-btc-compensation-statements.json", "present": true, "parseable": true, - "digest": "sha256:cc809b30a3d1e995cccc4696219e6ac908bc8bd86980bf55680222a10f992d96", + "digest": "sha256:b8845f4d0984f114e0b197c0a61f3a9569d1aa72aba48a39b795a7b9fc7511db", "byteLength": 15835, "sourceSafe": true, "artifactId": "v44-btd-btc-compensation-statements", @@ -98,7 +97,7 @@ "relativePath": ".bitcode/v44-organization-policy-wallet-authority.json", "present": true, "parseable": true, - "digest": "sha256:609d522a7e04a99c6b62c7d839b7052d7b668cd0a15439ae3496939a00d00bd6", + "digest": "sha256:dfd8c6ef6c8b3f42c82406633aa087110a5fd9f718ab96ec372806221789e946", "byteLength": 16126, "sourceSafe": true, "artifactId": "v44-organization-policy-wallet-authority", @@ -109,7 +108,7 @@ "relativePath": ".bitcode/v44-enterprise-product-ux.json", "present": true, "parseable": true, - "digest": "sha256:6a3b7035f66212726ed7a31b508da569c1b93f8cce15d2cb4b9e35d9897fec69", + "digest": "sha256:7fe6bdcd82ece5ce7d3aa2289cd6441fefcd2edce9adc9696a4ab32d75177ccc", "byteLength": 11638, "sourceSafe": true, "artifactId": "v44-enterprise-product-ux", @@ -120,7 +119,7 @@ "relativePath": ".bitcode/v44-scaled-network-rehearsal.json", "present": true, "parseable": true, - "digest": "sha256:fa311a954e7b387731e93e21d3c5c94f7dbf0f4b90346c5ddf2de816bd3c49c7", + "digest": "sha256:9e075e68baf3af55acf3ba7395c254d79daae60200a553ea39daa7e627542f3f", "byteLength": 32889, "sourceSafe": true, "artifactId": "v44-scaled-network-rehearsal", @@ -174,7 +173,7 @@ { "relativePath": "scripts/promote-bitcode-canon.mjs", "present": true, - "digest": "sha256:5c7dad86223accfd42a6ac205d471cea228570c070121633925f51a1246452c8", + "digest": "sha256:da02ac0ac8784b399f3004af768023f2a398dc00ea419ab48dd00880c52f62b3", "requiredTokens": [ { "token": "if (version === 'V44')", @@ -197,7 +196,7 @@ { "relativePath": "scripts/prepare-bitcode-spec-family-promotion.mjs", "present": true, - "digest": "sha256:566040782c417639c6d7ac8e073fcf6de56a48b4680f28542f9e1a684a47a259", + "digest": "sha256:73948c223c7a0d2587ee213145b35f5e9c605dfee8700044b360f3acbd3a46c8", "requiredTokens": [ { "token": "if (version === 'V44')", @@ -274,7 +273,7 @@ { "relativePath": ".github/workflows/bitcode-gate-quality.yml", "present": true, - "digest": "sha256:a6b07a149236a411facd8f36898d7c01848562f4b7f5af420435d31279e96d96", + "digest": "sha256:e5de1dddfaeeb0ee525b0c0f9c04887334b5c180992ea9c82f9f73cb9d2a7c68", "requiredTokens": [ { "token": "check-v44-gate10-promotion-readiness.mjs", @@ -293,7 +292,7 @@ { "relativePath": ".github/workflows/bitcode-canon-quality.yml", "present": true, - "digest": "sha256:6f265809cffee88a188b61c8ff7571fc9460f6874fe24e9d85798ccb05306ece", + "digest": "sha256:43cc4ded2bd9757dda9091dc7298cfbaa4171e16ed3aad5c79a9d0f780aa332d", "requiredTokens": [ { "token": "check-v44-gate10-promotion-readiness.mjs", @@ -312,7 +311,7 @@ { "relativePath": "packages/protocol/src/canonical/proven-generator.js", "present": true, - "digest": "sha256:696c9cf25133c4c7dbe088cbd1e654b9bcf99a909f8ef645970e39315a636a10", + "digest": "sha256:72fde86c1b4d36fb1df9f7cc33182a151bf6880dc559e07e035df027c2ca1fe4", "requiredTokens": [ { "token": "buildV44ProvenPackage", @@ -350,7 +349,7 @@ { "relativePath": "packages/protocol/src/canonical/v21-specifying.js", "present": true, - "digest": "sha256:a88afc3c8814ffeec07dfebb024448439452b9d7950af3a1f8708c3024905c62", + "digest": "sha256:bdfcd76464c115301b3a50c8df6d6f984861140a3ce5257447086f4aa8716885", "requiredTokens": [ { "token": ".bitcode/v44-promotion-readiness-report.json", @@ -361,7 +360,7 @@ { "relativePath": "package.json", "present": true, - "digest": "sha256:75e2eab494df4827d441b9c8e7ef1294e268ec59d8d018545f489153d4635d77", + "digest": "sha256:b79014968c556bc1b43ab3412ff5f85ae11b40e875e3186cc7304593d93adc19", "requiredTokens": [ { "token": "generate:v44-promotion-readiness", @@ -382,7 +381,7 @@ { "relativePath": "BITCODE_SPEC_V44.md", "present": true, - "digest": "sha256:02e482b8d45b070d4e37d79bf1698467cc331be4d6b94b8157fa233267baed3b", + "digest": "sha256:398a20b55d38df2ebced0591ea0225f76ff04c20e5a495d37668d24811c13e59", "requiredTokens": [ { "token": "V44 promotion readiness canon", @@ -401,7 +400,7 @@ { "relativePath": "BITCODE_SPEC_V44_DELTA.md", "present": true, - "digest": "sha256:91b54b2cbd8972d988982a1c6cb5d432f6710b51358692bc7f0074556278d2d2", + "digest": "sha256:eb779597425caf299574a3131fced29a46bf109e1e5c0eadc91300a3cdd5d5a4", "requiredTokens": [ { "token": "Gate 10: V44 Promotion Readiness", @@ -420,7 +419,7 @@ { "relativePath": "BITCODE_SPEC_V44_NOTES.md", "present": true, - "digest": "sha256:67b447545e1d09119d71c002b8881f8df6d82db1977f38692396518c897cd9b8", + "digest": "sha256:bedf9abebdc5d8ac538222b1bb22e1febec27869d004f4ac67a042fd5e0fef61", "requiredTokens": [ { "token": "Gate 10: V44 Promotion Readiness", @@ -439,7 +438,7 @@ { "relativePath": "BITCODE_SPEC_V44_PARITY_MATRIX.md", "present": true, - "digest": "sha256:69249981126a45936151a6e7bfb0bfdb9ca90f99e545d4fce1dd651997ff64c6", + "digest": "sha256:533bbfe052c5c8469c31c1afdb48b66ee4bf24d05e0a3e303ad7b1adf9c9a06e", "requiredTokens": [ { "token": "## Gate 10 Promotion readiness parity", @@ -458,7 +457,7 @@ { "relativePath": "SPECIFICATIONS_ROADMAP.md", "present": true, - "digest": "sha256:0651a1ea31db9a4af225b76298ec15d965f0ec6c2b60f8bd2b64760cae7847ac", + "digest": "sha256:64b11cb963635e16fd70bf4883ced25e0a70bd48ab428a0b35719aecf468d10f", "requiredTokens": [ { "token": "V44 Gate 10 closure anchor", @@ -473,7 +472,7 @@ { "relativePath": "README.md", "present": true, - "digest": "sha256:ef6c7b33c7a6a3535012932a7d7544ee774b8d4a907fcfca5ffc22d6b10056c9", + "digest": "sha256:d28ec731634e03953d8adfe6cf6c07fe72db9b450d0aecce716fbc73cf6e4a5b", "requiredTokens": [ { "token": "check:v44-gate10", @@ -488,7 +487,7 @@ { "relativePath": "packages/protocol/README.md", "present": true, - "digest": "sha256:aae160562370392979c25d42298ba991f8122719b768d5509eb56f10110acbb7", + "digest": "sha256:f5b175049f4f4e8df179e184f40bc906ecd68181e425d4429a4dbb4a42a50c1a", "requiredTokens": [ { "token": "V44 Gate 10", @@ -550,9 +549,5 @@ "artifactRoot": "v44-scaled-engineering-economy-promotion-readiness-report:8db11db03bcc2287dd57c9f9", "passed": true, "failures": [], - "validationCommand": "pnpm run check:v44-gate10", - "proofSourceCommit": "bb1bfd14b21fa67a5e5690fe1eeb3acf095f6da3", - "generatorId": "bitcode.proven-generator.v1", - "worktreeState": "clean", - "sourceSafe": true + "validationCommand": "pnpm run check:v44-gate10" } diff --git a/.bitcode/v44-reading-budget-quote-policy.json b/.bitcode/v44-reading-budget-quote-policy.json index 152c2acb2..663f868e2 100644 --- a/.bitcode/v44-reading-budget-quote-policy.json +++ b/.bitcode/v44-reading-budget-quote-policy.json @@ -5,7 +5,7 @@ "currentTarget": "V43", "sourceSafetyVerdict": "source-safe-reading-budget-quote-policy-metadata", "generatedAt": "deterministic", - "artifactRoot": "v44-reading-budget-quote-policy:c9755a96c53cdce5ad487ca6", + "artifactRoot": "v44-reading-budget-quote-policy:252a970f9e74f8b268071cc9", "passed": true, "objectIds": [ "ReadingBudgetPolicy", @@ -144,26 +144,26 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:c986a5cd7104e321d4218fd5", - "spec": "BITCODE_SPEC_V44.md:02e482b8d45b070d4e37d79b", - "delta": "BITCODE_SPEC_V44_DELTA.md:91b54b2cbd8972d988982a1c", - "notes": "BITCODE_SPEC_V44_NOTES.md:67b447545e1d09119d71c002", - "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:69249981126a45936151a6e7", - "roadmap": "SPECIFICATIONS_ROADMAP.md:0651a1ea31db9a4af225b762", - "readme": "README.md:ef6c7b33c7a6a3535012932a", - "protocolReadme": "packages/protocol/README.md:aae160562370392979c25d42", - "packageJson": "package.json:75e2eab494df4827d441b9c8", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a6b07a149236a411facd8f36", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:6f265809cffee88a188b61c8", - "economicModel": "packages/protocol/src/canonical/v44-economic-domain-model.js:9b22edfd91b3179d68f9c66e", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V44.md:398a20b55d38df2ebced0591", + "delta": "BITCODE_SPEC_V44_DELTA.md:eb779597425caf299574a313", + "notes": "BITCODE_SPEC_V44_NOTES.md:bedf9abebdc5d8ac538222b1", + "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:533bbfe052c5c8469c31c1af", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "economicModel": "packages/protocol/src/canonical/v44-economic-domain-model.js:2376c461d422d5eb4cb62da4", "readModel": "uapi/app/read/read-route-model.ts:670e1abd63cccea6365a491f", "readClient": "uapi/app/read/ReadPageClient.tsx:860bec675640bf466752bc7e", "readModelTest": "uapi/tests/readRouteModel.test.ts:5ad610c538f65fb0c860777f", "sourceToShares": "packages/btd/src/source-to-shares.ts:6e2e84251b29ba2477766708", "btcFeeOperation": "packages/btd/src/btc-fee-operation.ts:65f910e8e471fe199939e9c4", - "packageIndex": "packages/protocol/src/index.js:798966be5ed4885a90d6f413", - "packageTypes": "packages/protocol/src/index.d.ts:530ef72edae6788a72dff6de", - "packageSource": "packages/protocol/src/canonical/v44-reading-budget-quote-policy.js:d6061f87113a6a66334d8947", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packageSource": "packages/protocol/src/canonical/v44-reading-budget-quote-policy.js:d318cc52334da529f9de11a6", "packageTest": "packages/protocol/test/v44-reading-budget-quote-policy.test.js:2d9b19c509e0b28a829c44a3", "generator": "scripts/generate-v44-reading-budget-quote-policy.mjs:e2c376cb03ef80c210eef688", "checker": "scripts/check-v44-gate4-reading-budget-quote-policy.mjs:f61d5f8a81e2b1c55eb57c6c" diff --git a/.bitcode/v44-scaled-network-rehearsal.json b/.bitcode/v44-scaled-network-rehearsal.json index 50a9fcd36..642120e25 100644 --- a/.bitcode/v44-scaled-network-rehearsal.json +++ b/.bitcode/v44-scaled-network-rehearsal.json @@ -5,7 +5,7 @@ "currentTarget": "V43", "sourceSafetyVerdict": "source-safe-scaled-network-rehearsal-metadata", "generatedAt": "deterministic", - "artifactRoot": "v44-scaled-network-rehearsal:7abc70445bf624c65b04a30f", + "artifactRoot": "v44-scaled-network-rehearsal:b76407c3b62c6eac98fa7a1f", "passed": true, "laneIds": [ "local", @@ -683,24 +683,24 @@ } ], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:c986a5cd7104e321d4218fd5", - "spec": "BITCODE_SPEC_V44.md:02e482b8d45b070d4e37d79b", - "delta": "BITCODE_SPEC_V44_DELTA.md:91b54b2cbd8972d988982a1c", - "notes": "BITCODE_SPEC_V44_NOTES.md:67b447545e1d09119d71c002", - "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:69249981126a45936151a6e7", - "roadmap": "SPECIFICATIONS_ROADMAP.md:0651a1ea31db9a4af225b762", - "readme": "README.md:ef6c7b33c7a6a3535012932a", - "protocolReadme": "packages/protocol/README.md:aae160562370392979c25d42", - "packageJson": "package.json:75e2eab494df4827d441b9c8", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:a6b07a149236a411facd8f36", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:6f265809cffee88a188b61c8", - "gate2Artifact": ".bitcode/v44-economic-domain-model.json:ce579dd3076cb707a1f3f634", - "gate3Artifact": ".bitcode/v44-packs-portfolio-market-intelligence.json:3cb70cf1247d818133bbe4cd", - "gate4Artifact": ".bitcode/v44-reading-budget-quote-policy.json:f3a778bc96202a4f7a842193", - "gate5Artifact": ".bitcode/v44-depositor-earnings-supply-opportunities.json:f4c028484347edf2bf6a4f99", - "gate6Artifact": ".bitcode/v44-btd-btc-compensation-statements.json:cc809b30a3d1e995cccc4696", - "gate7Artifact": ".bitcode/v44-organization-policy-wallet-authority.json:609d522a7e04a99c6b62c7d8", - "gate8Artifact": ".bitcode/v44-enterprise-product-ux.json:6a3b7035f66212726ed7a31b", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V44.md:398a20b55d38df2ebced0591", + "delta": "BITCODE_SPEC_V44_DELTA.md:eb779597425caf299574a313", + "notes": "BITCODE_SPEC_V44_NOTES.md:bedf9abebdc5d8ac538222b1", + "parity": "BITCODE_SPEC_V44_PARITY_MATRIX.md:533bbfe052c5c8469c31c1af", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "gate2Artifact": ".bitcode/v44-economic-domain-model.json:1dd2a4d80bc7b8f9fdf8bd1e", + "gate3Artifact": ".bitcode/v44-packs-portfolio-market-intelligence.json:c708463a783bddcbae6830dc", + "gate4Artifact": ".bitcode/v44-reading-budget-quote-policy.json:6566a88cd086f3f754e117d1", + "gate5Artifact": ".bitcode/v44-depositor-earnings-supply-opportunities.json:df5e5230240a1b2e77fdd3b8", + "gate6Artifact": ".bitcode/v44-btd-btc-compensation-statements.json:b8845f4d0984f114e0b197c0", + "gate7Artifact": ".bitcode/v44-organization-policy-wallet-authority.json:dfd8c6ef6c8b3f42c8240663", + "gate8Artifact": ".bitcode/v44-enterprise-product-ux.json:7fe6bdcd82ece5ce7d3aa228", "packsClient": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", "readClient": "uapi/app/read/ReadPageClient.tsx:860bec675640bf466752bc7e", "depositClient": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", @@ -708,13 +708,13 @@ "readModel": "uapi/app/read/read-route-model.ts:670e1abd63cccea6365a491f", "depositModel": "uapi/app/deposit/deposit-route-model.ts:6485e388dd745c79907f992c", "pipelineLogUi": "uapi/components/base/bitcode/execution/pipeline-execution-log.tsx:bb7e1773303e04b9027ae2c7", - "compensationBoundary": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:4e5eebe66c2075acef628682", + "compensationBoundary": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:3d2b0984fc9e2c3c108d6eb0", "depositAdmission": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts:4d2b0c5e6e10c2b14a75a8c8", "operationalReadback": "packages/pipelines/asset-pack/src/reading-operational-telemetry-repair-readback.ts:4b0d32180a32720cb0086ffe", - "protocolSource": "packages/protocol/src/canonical/v44-scaled-network-rehearsal.js:383e18fa6b3eb540be48d2d3", + "protocolSource": "packages/protocol/src/canonical/v44-scaled-network-rehearsal.js:985cc71326634cddf0d51104", "protocolTest": "packages/protocol/test/v44-scaled-network-rehearsal.test.js:90553fc320fa30ebdf70a44f", - "protocolIndex": "packages/protocol/src/index.js:798966be5ed4885a90d6f413", - "protocolTypes": "packages/protocol/src/index.d.ts:530ef72edae6788a72dff6de", + "protocolIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "protocolTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", "generator": "scripts/generate-v44-scaled-network-rehearsal.mjs:b6476a739cbcbb0935eb2877", "checker": "scripts/check-v44-gate9-scaled-network-rehearsal.mjs:c90e5808bbb6dab7eee28eed", "operatorScript": "scripts/rehearse-v44-scaled-network-flow.mjs:273800e51b9931eceef033df" diff --git a/.bitcode/v45-promotion-readiness-report.json b/.bitcode/v45-promotion-readiness-report.json index a7eca50ce..ec9a03eff 100644 --- a/.bitcode/v45-promotion-readiness-report.json +++ b/.bitcode/v45-promotion-readiness-report.json @@ -148,8 +148,8 @@ "relativePath": ".bitcode/v45-source-safe-e2e-rehearsal.json", "present": true, "parseable": true, - "digest": "sha256:8a1822c09036fc62970bf4e948b9e959e3ef548719d0394676e95bc8f24c5bb6", - "byteLength": 50958, + "digest": "sha256:394a52575dd80089976889345014173dc337892b60841741e861c954d6f2ccd7", + "byteLength": 50973, "sourceSafe": true, "artifactId": "v45-source-safe-e2e-rehearsal", "version": "V45", @@ -202,7 +202,7 @@ { "relativePath": "scripts/promote-bitcode-canon.mjs", "present": true, - "digest": "sha256:63201f1238720f3cb5ab12af13af042d496e5a6f2b630ef91f2420a6de1d08dd", + "digest": "sha256:da02ac0ac8784b399f3004af768023f2a398dc00ea419ab48dd00880c52f62b3", "requiredTokens": [ { "token": "if (version === 'V45')", @@ -225,7 +225,7 @@ { "relativePath": "scripts/prepare-bitcode-spec-family-promotion.mjs", "present": true, - "digest": "sha256:723662a723f2e6da7c35512ca48f67e14fd19ecb157189616f67d5cc4ef241d6", + "digest": "sha256:73948c223c7a0d2587ee213145b35f5e9c605dfee8700044b360f3acbd3a46c8", "requiredTokens": [ { "token": "if (version === 'V45')", @@ -302,7 +302,7 @@ { "relativePath": ".github/workflows/bitcode-gate-quality.yml", "present": true, - "digest": "sha256:3a247433690c88f138a55a2824b557b7a00fbd2e82da79df5cdf426d0968b366", + "digest": "sha256:e5de1dddfaeeb0ee525b0c0f9c04887334b5c180992ea9c82f9f73cb9d2a7c68", "requiredTokens": [ { "token": "check-v45-gate18-promotion-readiness.mjs", @@ -321,7 +321,7 @@ { "relativePath": ".github/workflows/bitcode-canon-quality.yml", "present": true, - "digest": "sha256:d9f90a948a3d275a7c02b0693fecc4f6ab7e464c64134093cfd178bb3a725c3c", + "digest": "sha256:43cc4ded2bd9757dda9091dc7298cfbaa4171e16ed3aad5c79a9d0f780aa332d", "requiredTokens": [ { "token": "check-v45-gate18-promotion-readiness.mjs", @@ -340,7 +340,7 @@ { "relativePath": "packages/protocol/src/canonical/proven-generator.js", "present": true, - "digest": "sha256:e8d3f27ba3501273cd1f50a7b0ddc4f31590590161bdda0621dec0d4a84b687c", + "digest": "sha256:72fde86c1b4d36fb1df9f7cc33182a151bf6880dc559e07e035df027c2ca1fe4", "requiredTokens": [ { "token": "buildV45ProvenPackage", @@ -378,7 +378,7 @@ { "relativePath": "packages/protocol/src/canonical/v21-specifying.js", "present": true, - "digest": "sha256:0ef1d8025a3965c0083b9904907fcdef7e5aaed59c37a2898598bc3dda7097ea", + "digest": "sha256:bdfcd76464c115301b3a50c8df6d6f984861140a3ce5257447086f4aa8716885", "requiredTokens": [ { "token": ".bitcode/v45-promotion-readiness-report.json", @@ -389,7 +389,7 @@ { "relativePath": "package.json", "present": true, - "digest": "sha256:d8ab37e08b2d784f87de7dbecd98c7acbb8fd52c34d353472cc20154c8eb9aa6", + "digest": "sha256:b79014968c556bc1b43ab3412ff5f85ae11b40e875e3186cc7304593d93adc19", "requiredTokens": [ { "token": "generate:v45-promotion-readiness", @@ -486,7 +486,7 @@ { "relativePath": "SPECIFICATIONS_ROADMAP.md", "present": true, - "digest": "sha256:41ae9160604d315d3973f92ab0d444a49a691ad2a86c75ee9fcef89fff2d58aa", + "digest": "sha256:64b11cb963635e16fd70bf4883ced25e0a70bd48ab428a0b35719aecf468d10f", "requiredTokens": [ { "token": "V45 Gate 18 closure anchor", @@ -501,7 +501,7 @@ { "relativePath": "README.md", "present": true, - "digest": "sha256:1f8147b799cc880e570b0c66d1006e08b0768f8fb4d7f3996c110bc5d252852f", + "digest": "sha256:d28ec731634e03953d8adfe6cf6c07fe72db9b450d0aecce716fbc73cf6e4a5b", "requiredTokens": [ { "token": "check:v45-gate18", @@ -516,7 +516,7 @@ { "relativePath": "packages/protocol/README.md", "present": true, - "digest": "sha256:ae6773f09ef9c8530e23f6aeeeaea82f662344eafe15a29f2c33653c984b42d1", + "digest": "sha256:f5b175049f4f4e8df179e184f40bc906ecd68181e425d4429a4dbb4a42a50c1a", "requiredTokens": [ { "token": "V45 Gate 18", diff --git a/.bitcode/v45-source-safe-e2e-rehearsal.json b/.bitcode/v45-source-safe-e2e-rehearsal.json index ac13e3423..c67a962f4 100644 --- a/.bitcode/v45-source-safe-e2e-rehearsal.json +++ b/.bitcode/v45-source-safe-e2e-rehearsal.json @@ -5,7 +5,7 @@ "currentTarget": "V45", "sourceSafetyVerdict": "source-safe-v45-end-to-end-rehearsal-metadata", "generatedAt": "deterministic", - "artifactRoot": "v45-source-safe-e2e-rehearsal:9a867aa6f196ee72938ff454", + "artifactRoot": "v45-source-safe-e2e-rehearsal:246006f45f6f293925d3929a", "rehearsalStatus": "completed_source_safe", "passed": true, "laneIds": [ @@ -992,17 +992,17 @@ ], "repairCases": [], "sourceRoots": { - "activePointer": "BITCODE_SPEC.txt:674f33696f4048b636f67e13", + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", "spec": "BITCODE_SPEC_V45.md:303eba5e7ebde2132d729f1f", "delta": "BITCODE_SPEC_V45_DELTA.md:c4e872c4e408ef7ecdfd660c", "notes": "BITCODE_SPEC_V45_NOTES.md:5c2c09076ac31a818f20223e", "parity": "BITCODE_SPEC_V45_PARITY_MATRIX.md:b60dac6cce013c4573c13423", - "roadmap": "SPECIFICATIONS_ROADMAP.md:41ae9160604d315d3973f92a", - "readme": "README.md:1f8147b799cc880e570b0c66", - "protocolReadme": "packages/protocol/README.md:ae6773f09ef9c8530e23f6ae", - "packageJson": "package.json:d8ab37e08b2d784f87de7dbe", - "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:3a247433690c88f138a55a28", - "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:d9f90a948a3d275a7c02b069", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", "commodityState": "packages/pipelines/asset-pack/src/asset-pack-commodity-state.ts:59c51e251fd516e2c268749e", "scalarQuote": "packages/pipelines/asset-pack/src/btd-scalar-volume-quote.ts:eda1442a63433a49e4c561c9", "settlementReadback": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:3d2b0984fc9e2c3c108d6eb0", @@ -1018,16 +1018,16 @@ "packsClient": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", "pipelineLogUi": "uapi/components/base/bitcode/execution/pipeline-execution-log.tsx:bb7e1773303e04b9027ae2c7", "proofFamilySource": "packages/protocol/src/canonical/v45-proof-family-artifacts.js:1a2c8975783ccdc0263c8c61", - "source": "packages/protocol/src/canonical/v45-source-safe-e2e-rehearsal.js:e674b884bafd330ff0abd1e0", + "source": "packages/protocol/src/canonical/v45-source-safe-e2e-rehearsal.js:ae4bebb6c6e9902bc2630078", "test": "packages/protocol/test/v45-source-safe-e2e-rehearsal.test.js:240a9eca76b583de67a0a309", "generator": "scripts/generate-v45-source-safe-e2e-rehearsal.mjs:10042b6c852bb180b8de9fc3", "checker": "scripts/check-v45-gate17-source-safe-e2e-rehearsal.mjs:990c98b5753486f3064d145a", "operatorScript": "scripts/rehearse-v45-source-safe-e2e.mjs:286a094f831e672b7d9211d9", - "protocolIndex": "packages/protocol/src/index.js:5b891ee9f4c3baa007be3d84", - "protocolTypes": "packages/protocol/src/index.d.ts:b4edb2f6e925c31a6ad0f4eb", + "protocolIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "protocolTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", "v39ReadingRehearsal": ".bitcode/v39-local-staging-reading-rehearsal.json:48d485187a2d54fdd56a1d37", "v42MvpRehearsal": ".bitcode/v42-local-staging-mvp-rehearsal.json:1a7fc667adfd6cc6035c1bcc", - "v44ScaledRehearsal": ".bitcode/v44-scaled-network-rehearsal.json:fa311a954e7b387731e93e21", + "v44ScaledRehearsal": ".bitcode/v44-scaled-network-rehearsal.json:9e075e68baf3af55acf3ba73", "v45InferenceProof": ".bitcode/v45-inference-synthesis-proof.json:51f0f4ee427d72d16fd8759d", "v45PromptProof": ".bitcode/v45-prompt-completeness-proof.json:a7f82d9a1629c4761e6341bb", "v45StaticProof": ".bitcode/v45-static-code-analysis-proof.json:bb9075bb01a3f1de9a891272", @@ -1040,7 +1040,7 @@ }, "predicateResults": [ { - "id": "active-canon-pointer-is-v45", + "id": "active-canon-pointer-supports-v45-or-later", "sourcePath": "BITCODE_SPEC.txt", "passed": true }, diff --git a/.bitcode/v46-canon-posture-drift-report.json b/.bitcode/v46-canon-posture-drift-report.json new file mode 100644 index 000000000..75044e90e --- /dev/null +++ b/.bitcode/v46-canon-posture-drift-report.json @@ -0,0 +1,77 @@ +{ + "reportId": "v46-canon-posture-drift-report", + "version": "V46", + "checkedActiveCanonVersion": "V46", + "checkedDraftTargetVersion": "V47", + "pointerVersion": "V46", + "proofSourceCommit": "40a32e9d61a64130c958eda1498812e25a682653", + "generatedAt": "2026-06-02T14:25:14-03:00", + "generatorId": "bitcode.proven-generator.v1", + "worktreeState": "clean", + "passed": true, + "checkCount": 10, + "blockingFailureCount": 0, + "blockingFailures": [], + "runtimeSpecVersion": "Bitcode Spec V46 active canon / V47 system draft", + "publicSpecVersion": "Bitcode Spec V46 active canon / V47 system draft", + "activeProvenAppendixPath": "BITCODE_SPEC_V46_PROVEN.md", + "policyRef": "policy://bitcode/spec-v46-active-v47-system-draft/current", + "checkedFiles": [ + "protocol-demonstration/README.md", + "protocol-demonstration/public/index.html", + "protocol-demonstration/public/app.js", + "protocol-demonstration/server.js" + ], + "checks": [ + { + "checkId": "pointer-active-canon-alignment", + "passed": true, + "detail": "BITCODE_SPEC.txt points to V46 while runtime expects V46." + }, + { + "checkId": "canon-posture-constant-alignment", + "passed": true, + "detail": "canon-posture constants resolve V46/V47 with operator label V46 active canon / V47 system draft." + }, + { + "checkId": "proven-appendix-alignment", + "passed": true, + "detail": "active generated appendix path is BITCODE_SPEC_V46_PROVEN.md." + }, + { + "checkId": "policy-ref-alignment", + "passed": true, + "detail": "policy reference is policy://bitcode/spec-v46-active-v47-system-draft/current." + }, + { + "checkId": "runtime-state-alignment", + "passed": true, + "detail": "buildInitialState() reports Bitcode Spec V46 active canon / V47 system draft with canon posture V46/V47." + }, + { + "checkId": "public-state-alignment", + "passed": true, + "detail": "publicState() reports Bitcode Spec V46 active canon / V47 system draft with canon posture V46/V47." + }, + { + "checkId": "server-api-alignment", + "passed": true, + "detail": "server.js keeps API posture sourced from SPEC_VERSION and buildPublicState(...)." + }, + { + "checkId": "browser-shell-placeholder-alignment", + "passed": true, + "detail": "public/index.html exposes canon-posture placeholders and no stale hardcoded hero posture." + }, + { + "checkId": "browser-shell-render-alignment", + "passed": true, + "detail": "public/app.js renders canon posture from runtime state and omits stale V15 explainer keys." + }, + { + "checkId": "readme-alignment", + "passed": true, + "detail": "README states V46 active canon and BITCODE_SPEC_V46_PROVEN.md as the current generated appendix." + } + ] +} diff --git a/.bitcode/v46-canonical-input-report.json b/.bitcode/v46-canonical-input-report.json new file mode 100644 index 000000000..dedda3430 --- /dev/null +++ b/.bitcode/v46-canonical-input-report.json @@ -0,0 +1,29 @@ +{ + "reportId": "v46-canonical-input-report", + "version": "V46", + "proofSourceCommit": "40a32e9d61a64130c958eda1498812e25a682653", + "generatedAt": "2026-06-02T14:25:14-03:00", + "generatorId": "bitcode.proven-generator.v1", + "worktreeState": "clean", + "checkedTargetVersion": "V46", + "pointerVersion": "V46", + "passed": true, + "failureCount": 0, + "failures": [], + "specPath": "BITCODE_SPEC_V46.md", + "notesPath": "BITCODE_SPEC_V46_NOTES.md", + "provenPath": "BITCODE_SPEC_V46_PROVEN.md", + "parityPath": "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "requiredGeneratedArtifactPaths": [ + ".bitcode/v46-spec-family-report.json", + ".bitcode/v46-canonical-input-report.json", + ".bitcode/v46-protocol-comprehension-object-model.json", + ".bitcode/v46-public-operator-claim-boundaries.json", + ".bitcode/v46-product-route-comprehension-readback.json", + ".bitcode/v46-interface-claim-contracts.json", + ".bitcode/v46-proof-readback-operator-explanation.json", + ".bitcode/v46-local-interface-comprehension-rehearsal.json", + ".bitcode/v46-promotion-readiness-report.json" + ], + "requiredGeneratedArtifactCount": 9 +} diff --git a/.bitcode/v46-interface-claim-contracts.json b/.bitcode/v46-interface-claim-contracts.json new file mode 100644 index 000000000..c443fa961 --- /dev/null +++ b/.bitcode/v46-interface-claim-contracts.json @@ -0,0 +1,772 @@ +{ + "artifactId": "v46-interface-claim-contracts", + "schemaId": "bitcode.v46.interfaceClaimContracts.v1", + "version": "V46", + "currentTarget": "V45", + "sourceSafetyVerdict": "source-safe-interface-claim-contracts", + "generatedAt": "deterministic", + "artifactRoot": "v46-interface-claim-contracts:e336eab9588d13d70bf55365", + "sourceRoots": { + "BITCODE_SPEC.txt": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "BITCODE_SPEC_V46.md": "BITCODE_SPEC_V46.md:48121ff59f812f15a1b3b1f7", + "BITCODE_SPEC_V46_DELTA.md": "BITCODE_SPEC_V46_DELTA.md:a16a16db40d4eeae612a0657", + "BITCODE_SPEC_V46_NOTES.md": "BITCODE_SPEC_V46_NOTES.md:cca70aca3566132e7026351c", + "BITCODE_SPEC_V46_PARITY_MATRIX.md": "BITCODE_SPEC_V46_PARITY_MATRIX.md:91b47eeaa106639d2d21856b", + "SPECIFICATIONS_ROADMAP.md": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "README.md": "README.md:d28ec731634e03953d8adfe6", + "packages/protocol/README.md": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "package.json": "package.json:b79014968c556bc1b43ab341", + "packages/protocol/src/index.js": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packages/protocol/src/index.d.ts": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packages/protocol/src/canonical/v46-interface-claim-contracts.js": "packages/protocol/src/canonical/v46-interface-claim-contracts.js:a7354af8be68328240207032", + "packages/protocol/test/v46-interface-claim-contracts.test.js": "packages/protocol/test/v46-interface-claim-contracts.test.js:f1dcb481edcbadee07f42127", + "scripts/generate-v46-interface-claim-contracts.mjs": "scripts/generate-v46-interface-claim-contracts.mjs:c6faeaf341acbb26e4e51179", + "scripts/check-v46-gate5-interface-claim-contracts.mjs": "scripts/check-v46-gate5-interface-claim-contracts.mjs:b6be899067bc320750689824", + ".github/workflows/bitcode-gate-quality.yml": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + ".github/workflows/bitcode-canon-quality.yml": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "packages/btd/src/api-schema-compatibility-matrix.ts": "packages/btd/src/api-schema-compatibility-matrix.ts:21527a4ab84909ce72247fab", + "packages/btd/__tests__/api-schema-compatibility-matrix.test.ts": "packages/btd/__tests__/api-schema-compatibility-matrix.test.ts:32fa0cfd7301dc44808b3eac", + "packages/btd/src/mcp-tool-contract.ts": "packages/btd/src/mcp-tool-contract.ts:ed7ff68bb55bd47afc9c538b", + "packages/btd/__tests__/mcp-tool-contract.test.ts": "packages/btd/__tests__/mcp-tool-contract.test.ts:27ef7ecf25bdbcb8420466d8", + "packages/executions-mcp/src/mcp-server/src/__tests__/unit/pipeline-ingress-contract.test.ts": "packages/executions-mcp/src/mcp-server/src/__tests__/unit/pipeline-ingress-contract.test.ts:e7774381dacf20d639cba3bf", + "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md": "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md:39ae38737d2c48c96eebb5ea", + "packages/btd/src/chatgpt-app-action-contract.ts": "packages/btd/src/chatgpt-app-action-contract.ts:a24a464bd0910f8b8284ddfe", + "packages/btd/__tests__/chatgpt-app-action-contract.test.ts": "packages/btd/__tests__/chatgpt-app-action-contract.test.ts:0106718de811ad1250860b07", + "packages/chatgptapp/src/tools.ts": "packages/chatgptapp/src/tools.ts:01098e7c683c6394a4ff6918", + "packages/chatgptapp/src/__tests__/chatgpt-action-contract.test.ts": "packages/chatgptapp/src/__tests__/chatgpt-action-contract.test.ts:4d61df32d3f61c9a2f1efa5c", + "packages/api/src/routes/conversations.ts": "packages/api/src/routes/conversations.ts:5e58470bbe10ab4eb0e1f54a", + "uapi/tests/api/conversationReadingInterfaceParity.test.ts": "uapi/tests/api/conversationReadingInterfaceParity.test.ts:e31d05980a03ff7c966df485", + "uapi/tests/conversationTerminalHandoff.test.tsx": "uapi/tests/conversationTerminalHandoff.test.tsx:f86ac4ab726148a1a0fdcdc5", + "uapi/tests/conversationStreamPipelineLog.test.tsx": "uapi/tests/conversationStreamPipelineLog.test.tsx:73e3ba9c6f058ffe4418b3e4", + "uapi/app/conversations/conversation-session-route-history.ts": "uapi/app/conversations/conversation-session-route-history.ts:d3d12ff13b464135f08599fc", + "packages/protocol/src/canonical/v39-interface-conversation-product-parity.js": "packages/protocol/src/canonical/v39-interface-conversation-product-parity.js:7037724fdab78cd00402fd02" + }, + "surfaceIds": [ + "public_api", + "mcp_api", + "chatgpt_app", + "bitcode_chat", + "package_consumer" + ], + "capabilityIds": [ + "source-safe-schema-compatibility", + "tool-registry-contract", + "action-registry-contract", + "terminal-delegated-handoff", + "proof-root-projection", + "denied-state-repair", + "no-parallel-state-authority", + "source-safe-response-rendering", + "protected-source-lock", + "versionless-interface-paths" + ], + "interfaceRows": [ + { + "surfaceId": "public_api", + "surfaceLabel": "API", + "surfaceRole": "versionless machine interface for schema-compatible source-safe requests, responses, and proof roots", + "sourcePaths": [ + "packages/btd/src/api-schema-compatibility-matrix.ts", + "packages/btd/__tests__/api-schema-compatibility-matrix.test.ts" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "preview-is-source-safe-measurement", + "quote-is-source-safe-offer", + "finality-authorizes-rights-and-delivery", + "repair-fails-closed", + "telemetry-is-observability-only" + ], + "claimCategoryIds": [ + "product-guidance", + "operator-evidence", + "preview-claim", + "quote-claim", + "rights-claim", + "repair-claim", + "telemetry-observability" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "database-projection", + "interface-guidance-only" + ], + "capabilityIds": [ + "source-safe-schema-compatibility", + "proof-root-projection", + "denied-state-repair", + "no-parallel-state-authority", + "protected-source-lock", + "versionless-interface-paths" + ], + "requiredCopyTokens": [ + "BTD_API_SCHEMA_COMPATIBILITY_CONSUMER_SURFACES", + "'public_api'", + "versionlessPathDiscipline: 'enforced'", + "protectedSourceSerialized: false", + "missing consumer surfaces", + "missing example postures" + ], + "readbackRoots": [ + "matrixRoot", + "requestExampleRoot", + "responseExampleRoot" + ], + "deniedStateRoots": [ + "breaking_change_denied", + "blocked_until_rights", + "stale_rejected", + "deferred_not_admitted" + ], + "operatorReading": "API contracts expose source-safe schema compatibility and proof-root examples; they do not become ledger or delivery authority.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProof": true, + "interfaceGuidanceOnly": true, + "sourceSafeMetadataOnly": true, + "proofRootProjectionRequired": true, + "deniedStateRepairRequired": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-interface-claim-contract-row:04de9055c46a7d20a0848fc4", + "sourceRoots": [ + "packages/btd/src/api-schema-compatibility-matrix.ts:21527a4ab84909ce72247fab", + "packages/btd/__tests__/api-schema-compatibility-matrix.test.ts:32fa0cfd7301dc44808b3eac" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "mcp_api", + "surfaceLabel": "MCP", + "surfaceRole": "tool-call interface for source-safe AssetPack pipeline ingress under API-key, permission, provider-binding, and schema policy", + "sourcePaths": [ + "packages/btd/src/mcp-tool-contract.ts", + "packages/btd/__tests__/mcp-tool-contract.test.ts", + "packages/executions-mcp/src/mcp-server/src/__tests__/unit/pipeline-ingress-contract.test.ts", + "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md" + ], + "claimIds": [ + "assetpack-is-commodity", + "operator-evidence-is-source-safe-readback", + "preview-is-source-safe-measurement", + "finality-authorizes-rights-and-delivery", + "repair-fails-closed", + "telemetry-is-observability-only" + ], + "claimCategoryIds": [ + "protocol-law", + "product-guidance", + "operator-evidence", + "preview-claim", + "rights-claim", + "repair-claim", + "telemetry-observability" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "telemetry-observability-only", + "interface-guidance-only" + ], + "capabilityIds": [ + "tool-registry-contract", + "source-safe-schema-compatibility", + "proof-root-projection", + "denied-state-repair", + "no-parallel-state-authority", + "protected-source-lock" + ], + "requiredCopyTokens": [ + "bitcode://pipelines/asset-pack/create", + "interface.authorization.pipeline-permission", + "pipelines.create", + "protected-source-locked", + "writeAdmission", + "PROVIDER_BINDING_REQUIRED", + "ReadingInterfaceProductParity", + "mcp_api" + ], + "readbackRoots": [ + "contractRoot", + "requestRoot", + "responseRoot", + "writeAdmission" + ], + "deniedStateRoots": [ + "MISSING_API_KEY", + "INSUFFICIENT_PERMISSIONS", + "PROVIDER_BINDING_REQUIRED", + "SCHEMA_VALIDATION_FAILED", + "RATE_LIMITED", + "UNKNOWN_TOOL" + ], + "operatorReading": "MCP may queue source-safe pipeline work through a package-owned tool contract, but settlement, rights, and delivery remain proof-gated.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProof": true, + "interfaceGuidanceOnly": true, + "sourceSafeMetadataOnly": true, + "proofRootProjectionRequired": true, + "deniedStateRepairRequired": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-interface-claim-contract-row:32c52a8dc5fa33bf06748736", + "sourceRoots": [ + "packages/btd/src/mcp-tool-contract.ts:ed7ff68bb55bd47afc9c538b", + "packages/btd/__tests__/mcp-tool-contract.test.ts:27ef7ecf25bdbcb8420466d8", + "packages/executions-mcp/src/mcp-server/src/__tests__/unit/pipeline-ingress-contract.test.ts:e7774381dacf20d639cba3bf", + "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md:39ae38737d2c48c96eebb5ea" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "chatgpt_app", + "surfaceLabel": "ChatGPT App", + "surfaceRole": "conversational action surface for the Reading sequence with source-safe renderers, denied-state repairs, and explicit write admission", + "sourcePaths": [ + "packages/btd/src/chatgpt-app-action-contract.ts", + "packages/btd/__tests__/chatgpt-app-action-contract.test.ts", + "packages/chatgptapp/src/tools.ts", + "packages/chatgptapp/src/__tests__/chatgpt-action-contract.test.ts" + ], + "claimIds": [ + "btd-is-weighted-scalar-volume-and-settled-rights", + "preview-is-source-safe-measurement", + "quote-is-source-safe-offer", + "payment-observation-is-not-finality", + "finality-authorizes-rights-and-delivery", + "delivery-is-entitled-source-unlock", + "repair-fails-closed" + ], + "claimCategoryIds": [ + "protocol-law", + "product-guidance", + "preview-claim", + "quote-claim", + "settlement-claim", + "rights-claim", + "delivery-claim", + "repair-claim" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "wallet-provider-receipt", + "repository-delivery-receipt", + "interface-guidance-only" + ], + "capabilityIds": [ + "action-registry-contract", + "source-safe-response-rendering", + "proof-root-projection", + "denied-state-repair", + "no-parallel-state-authority", + "protected-source-lock" + ], + "requiredCopyTokens": [ + "BTD_CHATGPT_APP_ACTION_CONTRACT_IDS", + "bitcode_request_read", + "bitcode_deliver_asset_pack", + "chatgpt.sourceSafeRenderer", + "writeAdmission", + "Settlement finality is required", + "Bitcode ChatGPT App write admission requires confirmed: true", + "settle before delivery" + ], + "readbackRoots": [ + "contractRoot", + "requestRoot", + "responseRoot", + "sourceSafeRendererId", + "writeAdmission" + ], + "deniedStateRoots": [ + "READ_NEED_REQUIRED", + "FINDING_FITS_REQUIRED", + "SETTLEMENT_REQUIRED", + "READ_LICENSE_REQUIRED", + "CONFIRMATION_REQUIRED" + ], + "operatorReading": "ChatGPT App actions guide the Reading sequence and render source-safe proof roots; they cannot expose locked AssetPack contents before settlement and rights transfer.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProof": true, + "interfaceGuidanceOnly": true, + "sourceSafeMetadataOnly": true, + "proofRootProjectionRequired": true, + "deniedStateRepairRequired": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-interface-claim-contract-row:ff52e9d39e6d0f14909df759", + "sourceRoots": [ + "packages/btd/src/chatgpt-app-action-contract.ts:a24a464bd0910f8b8284ddfe", + "packages/btd/__tests__/chatgpt-app-action-contract.test.ts:0106718de811ad1250860b07", + "packages/chatgptapp/src/tools.ts:01098e7c683c6394a4ff6918", + "packages/chatgptapp/src/__tests__/chatgpt-action-contract.test.ts:4d61df32d3f61c9a2f1efa5c" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "bitcode_chat", + "surfaceLabel": "Bitcode Chat", + "surfaceRole": "website conversation overlay for workflow assistance, stream readback, and Terminal-delegated Reading handoff", + "sourcePaths": [ + "packages/api/src/routes/conversations.ts", + "uapi/tests/api/conversationReadingInterfaceParity.test.ts", + "uapi/tests/conversationTerminalHandoff.test.tsx", + "uapi/tests/conversationStreamPipelineLog.test.tsx", + "uapi/app/conversations/conversation-session-route-history.ts" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "preview-is-source-safe-measurement", + "finality-authorizes-rights-and-delivery", + "delivery-is-entitled-source-unlock", + "repair-fails-closed", + "telemetry-is-observability-only" + ], + "claimCategoryIds": [ + "product-guidance", + "operator-evidence", + "preview-claim", + "settlement-claim", + "rights-claim", + "delivery-claim", + "repair-claim", + "telemetry-observability" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "telemetry-observability-only", + "interface-guidance-only" + ], + "capabilityIds": [ + "terminal-delegated-handoff", + "source-safe-response-rendering", + "proof-root-projection", + "denied-state-repair", + "no-parallel-state-authority", + "protected-source-lock" + ], + "requiredCopyTokens": [ + "Conversation Reading interface parity", + "terminal-delegated-handoff", + "conversation.terminal-reading-handoff", + "source_bearing_delivery_locked_until_settlement_and_rights", + "Conversation stream proof roots anchored", + "source_safe_conversation_stream_event_metadata", + "source_safe_conversation_session_metadata", + "Conversation write failed closed." + ], + "readbackRoots": [ + "proofRoot", + "conversationStreamEvent", + "persistencePrivacyProofRoot", + "terminalRoute" + ], + "deniedStateRoots": [ + "acceptedNeedGate", + "deliveryBoundary", + "Conversation write failed closed" + ], + "operatorReading": "Bitcode Chat is a source-safe conversation and handoff surface; Terminal/product routes and proof-backed receipts remain state authority.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProof": true, + "interfaceGuidanceOnly": true, + "sourceSafeMetadataOnly": true, + "proofRootProjectionRequired": true, + "deniedStateRepairRequired": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-interface-claim-contract-row:45b3bb631d111fb108ebd15d", + "sourceRoots": [ + "packages/api/src/routes/conversations.ts:5e58470bbe10ab4eb0e1f54a", + "uapi/tests/api/conversationReadingInterfaceParity.test.ts:e31d05980a03ff7c966df485", + "uapi/tests/conversationTerminalHandoff.test.tsx:f86ac4ab726148a1a0fdcdc5", + "uapi/tests/conversationStreamPipelineLog.test.tsx:73e3ba9c6f058ffe4418b3e4", + "uapi/app/conversations/conversation-session-route-history.ts:d3d12ff13b464135f08599fc" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "package_consumer", + "surfaceLabel": "Package Consumer", + "surfaceRole": "package-level contract readback for consumers that need stable source-safe semantics without operational authority", + "sourcePaths": [ + "packages/btd/src/api-schema-compatibility-matrix.ts", + "packages/btd/__tests__/api-schema-compatibility-matrix.test.ts", + "packages/protocol/src/canonical/v39-interface-conversation-product-parity.js" + ], + "claimIds": [ + "assetpack-is-commodity", + "btd-is-weighted-scalar-volume-and-settled-rights", + "operator-evidence-is-source-safe-readback", + "repair-fails-closed", + "telemetry-is-observability-only" + ], + "claimCategoryIds": [ + "protocol-law", + "operator-evidence", + "product-guidance", + "repair-claim", + "telemetry-observability" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "interface-guidance-only" + ], + "capabilityIds": [ + "source-safe-schema-compatibility", + "proof-root-projection", + "denied-state-repair", + "no-parallel-state-authority", + "protected-source-lock", + "versionless-interface-paths" + ], + "requiredCopyTokens": [ + "'package_consumer'", + "package-consumer-exchange-hook-deferred", + "deferred_not_admitted", + "packageConsumersReadContractsOnly", + "parallelAuthorityCreated: false", + "sameAuthorityAsTerminal: true" + ], + "readbackRoots": [ + "matrixRoot", + "rowRoot", + "registryRoot" + ], + "deniedStateRoots": [ + "deferred_not_admitted", + "packageConsumersReadContractsOnly" + ], + "operatorReading": "Package consumers can inspect source-safe contracts and compatibility posture, but they cannot bypass website, API, settlement, rights, or delivery authority.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProof": true, + "interfaceGuidanceOnly": true, + "sourceSafeMetadataOnly": true, + "proofRootProjectionRequired": true, + "deniedStateRepairRequired": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-interface-claim-contract-row:56c8d385b5a71e1de7a0b186", + "sourceRoots": [ + "packages/btd/src/api-schema-compatibility-matrix.ts:21527a4ab84909ce72247fab", + "packages/btd/__tests__/api-schema-compatibility-matrix.test.ts:32fa0cfd7301dc44808b3eac", + "packages/protocol/src/canonical/v39-interface-conversation-product-parity.js:7037724fdab78cd00402fd02" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + } + ], + "predicateResults": [ + { + "id": "active-pointer-supports-v46-draft-or-later", + "sourcePath": "BITCODE_SPEC.txt", + "passed": true + }, + { + "id": "spec-defines-gate5-law", + "sourcePath": "BITCODE_SPEC_V46.md", + "passed": true + }, + { + "id": "delta-records-gate5", + "sourcePath": "BITCODE_SPEC_V46_DELTA.md", + "passed": true + }, + { + "id": "notes-records-gate5", + "sourcePath": "BITCODE_SPEC_V46_NOTES.md", + "passed": true + }, + { + "id": "parity-records-gate5", + "sourcePath": "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "passed": true + }, + { + "id": "roadmap-records-gate5-closure", + "sourcePath": "SPECIFICATIONS_ROADMAP.md", + "passed": true + }, + { + "id": "readmes-document-gate5", + "sourcePath": "README.md", + "passed": true + }, + { + "id": "package-source-defines-surfaces", + "sourcePath": "packages/protocol/src/canonical/v46-interface-claim-contracts.js", + "passed": true + }, + { + "id": "package-source-defines-capabilities", + "sourcePath": "packages/protocol/src/canonical/v46-interface-claim-contracts.js", + "passed": true + }, + { + "id": "package-exports-gate5", + "sourcePath": "packages/protocol/src/index.js", + "passed": true + }, + { + "id": "package-test-covers-gate5", + "sourcePath": "packages/protocol/test/v46-interface-claim-contracts.test.js", + "passed": true + }, + { + "id": "generator-and-checker-exist", + "sourcePath": "scripts/generate-v46-interface-claim-contracts.mjs", + "passed": true + }, + { + "id": "package-json-scripts", + "sourcePath": "package.json", + "passed": true + }, + { + "id": "workflows-run-gate5", + "sourcePath": ".github/workflows/bitcode-gate-quality.yml", + "passed": true + }, + { + "id": "btd-api-schema-binds-surfaces", + "sourcePath": "packages/btd/src/api-schema-compatibility-matrix.ts", + "passed": true + }, + { + "id": "mcp-contract-binds-tool", + "sourcePath": "packages/btd/src/mcp-tool-contract.ts", + "passed": true + }, + { + "id": "chatgpt-contract-binds-actions", + "sourcePath": "packages/btd/src/chatgpt-app-action-contract.ts", + "passed": true + }, + { + "id": "conversation-binds-terminal-handoff", + "sourcePath": "uapi/tests/api/conversationReadingInterfaceParity.test.ts", + "passed": true + } + ], + "coverage": { + "predicateCount": 18, + "failedPredicateIds": [], + "allSurfacesCovered": true, + "allClaimIdsKnown": true, + "allCategoryIdsKnown": true, + "allAuthorityIdsKnown": true, + "requiredCapabilitiesCovered": true, + "sourceFilesPresent": true, + "rowsMissingSourceFiles": [], + "rowsMissingRequiredCopy": [], + "allRowsRequireProofRootProjection": true, + "allRowsRequireDeniedStateRepair": true, + "noParallelStateAuthority": true, + "stateAdvanceRequiresProof": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "forbiddenPhraseHits": [], + "secretMarkerHits": [] + }, + "passed": true +} diff --git a/.bitcode/v46-local-interface-comprehension-rehearsal.json b/.bitcode/v46-local-interface-comprehension-rehearsal.json new file mode 100644 index 000000000..7ba33c577 --- /dev/null +++ b/.bitcode/v46-local-interface-comprehension-rehearsal.json @@ -0,0 +1,914 @@ +{ + "artifactId": "v46-local-interface-comprehension-rehearsal", + "schemaId": "bitcode.v46.localInterfaceComprehensionRehearsal.v1", + "version": "V46", + "currentTarget": "V45", + "sourceSafetyVerdict": "source-safe-local-interface-comprehension-rehearsal", + "generatedAt": "deterministic", + "artifactRoot": "v46-local-interface-comprehension-rehearsal:9e374e9ee12476c0176e0e0e", + "rehearsalStatus": "completed_source_safe_local", + "passed": true, + "surfaceIds": [ + "docs_landing", + "packs_route", + "read_route", + "deposit_route", + "api_mcp", + "chatgpt_bitcode_chat", + "proof_telemetry_repair" + ], + "stepIds": [ + "load-local-source", + "identify-interface-claims", + "verify-source-safe-disclosure", + "verify-evidence-authority", + "verify-denied-state-repair", + "emit-source-safe-rehearsal-root" + ], + "requiredArtifactIds": [ + "v46-protocol-comprehension-object-model", + "v46-public-operator-claim-boundaries", + "v46-product-route-comprehension-readback", + "v46-interface-claim-contracts", + "v46-proof-readback-operator-explanation" + ], + "rows": [ + { + "surfaceId": "docs_landing", + "surfaceLabel": "Public Docs And Landing", + "sourcePaths": [ + "uapi/app/page.tsx", + "uapi/app/docs/page.tsx", + "uapi/app/(root)/components/PublicDocsPageContent.tsx" + ], + "claimIds": [ + "assetpack-is-commodity", + "btd-is-weighted-scalar-volume-and-settled-rights", + "operator-evidence-is-source-safe-readback" + ], + "claimCategoryIds": [ + "protocol-law", + "product-guidance", + "operator-evidence" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "interface-guidance-only" + ], + "stepIds": [ + "load-local-source", + "identify-interface-claims", + "verify-source-safe-disclosure", + "verify-evidence-authority", + "verify-denied-state-repair", + "emit-source-safe-rehearsal-root" + ], + "requiredCopyTokens": [ + "Bitcode public home for AssetPacks", + "Learn Bitcode from AssetPacks to proof.", + "Public docs explain; proof readback decides." + ], + "expectedReadback": "The local public route and docs route explain AssetPacks, BTD scalar volume and rights, BTC settlement, proof readback, and interface boundaries without live state authority.", + "repairExpectation": "If public copy overclaims state authority, route copy returns to source-safe explanation and proof readback remains decisive.", + "localOnly": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-local-interface-rehearsal-row:fb1b98a0d2c9e17fc883f230", + "sourceRoots": [ + "uapi/app/page.tsx:b1b707e58f8917b8a97717b4", + "uapi/app/docs/page.tsx:75e5011c78a308e60f95cbd5", + "uapi/app/(root)/components/PublicDocsPageContent.tsx:6efbf77a6f292e9e0c25b70e" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "packs_route", + "surfaceLabel": "/packs", + "sourcePaths": [ + "uapi/app/packs/page.tsx", + "uapi/app/packs/PacksPageClient.tsx", + "uapi/components/base/bitcode/activity/pack-activity-model.ts" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "preview-is-source-safe-measurement", + "repair-fails-closed", + "telemetry-is-observability-only" + ], + "claimCategoryIds": [ + "product-guidance", + "operator-evidence", + "preview-claim", + "repair-claim" + ], + "authorityIds": [ + "canonical-specification", + "database-projection", + "generated-proof", + "interface-guidance-only" + ], + "stepIds": [ + "load-local-source", + "identify-interface-claims", + "verify-source-safe-disclosure", + "verify-evidence-authority", + "verify-denied-state-repair", + "emit-source-safe-rehearsal-root" + ], + "requiredCopyTokens": [ + "Search pack activity", + "Search titles, measurements, values, proof roots", + "assertPackActivitySourceSafe", + "unpaidAssetPackSourceVisible: false" + ], + "expectedReadback": "/packs rehearses searchable PackActivity master-detail readback with source-safe measurements, values, proof roots, settlement, delivery, compensation, and repair state.", + "repairExpectation": "If PackActivity source-safety assertion fails, the route must hold the row in repair instead of projecting source-bearing detail.", + "localOnly": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-local-interface-rehearsal-row:d744aeb10f86283529f10544", + "sourceRoots": [ + "uapi/app/packs/page.tsx:1b3d7a1cc00500a13042e8dd", + "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", + "uapi/components/base/bitcode/activity/pack-activity-model.ts:88d0334af8bc699e071ca2a1" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "read_route", + "surfaceLabel": "/read", + "sourcePaths": [ + "uapi/app/read/page.tsx", + "uapi/app/read/ReadPageClient.tsx" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "preview-is-source-safe-measurement", + "quote-is-source-safe-offer", + "finality-authorizes-rights-and-delivery" + ], + "claimCategoryIds": [ + "product-guidance", + "preview-claim", + "quote-claim", + "settlement-claim", + "rights-claim" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "interface-guidance-only", + "ledger-readback" + ], + "stepIds": [ + "load-local-source", + "identify-interface-claims", + "verify-source-safe-disclosure", + "verify-evidence-authority", + "verify-denied-state-repair", + "emit-source-safe-rehearsal-root" + ], + "requiredCopyTokens": [ + "Request Reading, review synthesized Needs", + "Read request -> Need -> Finding Fits -> Preview -> Settlement.", + "Visible: Need measurements, fit ids, proof roots, fee quotes", + "Withheld until paid" + ], + "expectedReadback": "/read rehearses the five-step Reading path from request through Need review, Finding Fits, source-safe preview, quote, settlement, BTD rights, and delivery boundary.", + "repairExpectation": "If Need, quote, finality, or delivery proof is missing, the route keeps the Reader at the narrowest source-safe step.", + "localOnly": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-local-interface-rehearsal-row:24860b3d7668bfd1be49225b", + "sourceRoots": [ + "uapi/app/read/page.tsx:37a723ed87feac05c0504249", + "uapi/app/read/ReadPageClient.tsx:860bec675640bf466752bc7e" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "deposit_route", + "surfaceLabel": "/deposit", + "sourcePaths": [ + "uapi/app/deposit/page.tsx", + "uapi/app/deposit/DepositPageClient.tsx" + ], + "claimIds": [ + "deposit-option-is-potential-supply", + "assetpack-is-commodity", + "operator-evidence-is-source-safe-readback", + "compensation-follows-source-to-shares" + ], + "claimCategoryIds": [ + "product-guidance", + "protocol-law", + "operator-evidence", + "compensation-claim" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "database-projection", + "interface-guidance-only" + ], + "stepIds": [ + "load-local-source", + "identify-interface-claims", + "verify-source-safe-disclosure", + "verify-evidence-authority", + "verify-denied-state-repair", + "emit-source-safe-rehearsal-root" + ], + "requiredCopyTokens": [ + "source-safe AssetPack deposit options", + "Source-safe AssetPack proposals", + "Criticality, demand, ROI, BTD potential, compensation.", + "Withheld: raw source, unpaid AssetPack source" + ], + "expectedReadback": "/deposit rehearses source-safe deposit option synthesis, review, policy, admission, BTD potential, and compensation posture without final Need-relative BTD claims.", + "repairExpectation": "If source criticality, ROI, or admission evidence is unsafe or missing, the route blocks Depository admission and keeps raw source withheld.", + "localOnly": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-local-interface-rehearsal-row:4353b716ad3db5bd7833d76f", + "sourceRoots": [ + "uapi/app/deposit/page.tsx:6bab6a9debab3f4350d0ddca", + "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "api_mcp", + "surfaceLabel": "API And MCP", + "sourcePaths": [ + "packages/btd/src/api-schema-compatibility-matrix.ts", + "packages/btd/src/mcp-tool-contract.ts", + "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "preview-is-source-safe-measurement", + "finality-authorizes-rights-and-delivery", + "repair-fails-closed" + ], + "claimCategoryIds": [ + "product-guidance", + "operator-evidence", + "preview-claim", + "rights-claim", + "repair-claim" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "interface-guidance-only" + ], + "stepIds": [ + "load-local-source", + "identify-interface-claims", + "verify-source-safe-disclosure", + "verify-evidence-authority", + "verify-denied-state-repair", + "emit-source-safe-rehearsal-root" + ], + "requiredCopyTokens": [ + "BTD_API_SCHEMA_COMPATIBILITY_CONSUMER_SURFACES", + "bitcode://pipelines/asset-pack/create", + "protected-source-locked", + "MCP API Reference" + ], + "expectedReadback": "API and MCP rehearse versionless source-safe request/response contracts, proof-root projection, protected-source locks, and denied-state repair.", + "repairExpectation": "If schema, permission, provider binding, or protected-source lock evidence is missing, machine interfaces deny writes and emit repair state.", + "localOnly": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-local-interface-rehearsal-row:4e46d397b6d4e4ac21c5b557", + "sourceRoots": [ + "packages/btd/src/api-schema-compatibility-matrix.ts:21527a4ab84909ce72247fab", + "packages/btd/src/mcp-tool-contract.ts:ed7ff68bb55bd47afc9c538b", + "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md:39ae38737d2c48c96eebb5ea" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "chatgpt_bitcode_chat", + "surfaceLabel": "ChatGPT App And Bitcode Chat", + "sourcePaths": [ + "packages/btd/src/chatgpt-app-action-contract.ts", + "packages/chatgptapp/src/tools.ts", + "uapi/app/conversations/conversation-terminal-handoff.ts", + "uapi/app/conversations/conversation-telemetry-proof-hooks.ts", + "uapi/tests/api/conversationReadingInterfaceParity.test.ts" + ], + "claimIds": [ + "preview-is-source-safe-measurement", + "payment-observation-is-not-finality", + "delivery-is-entitled-source-unlock", + "telemetry-is-observability-only" + ], + "claimCategoryIds": [ + "product-guidance", + "preview-claim", + "settlement-claim", + "delivery-claim", + "telemetry-observability" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "telemetry-observability-only", + "interface-guidance-only" + ], + "stepIds": [ + "load-local-source", + "identify-interface-claims", + "verify-source-safe-disclosure", + "verify-evidence-authority", + "verify-denied-state-repair", + "emit-source-safe-rehearsal-root" + ], + "requiredCopyTokens": [ + "BTD_CHATGPT_APP_ACTION_CONTRACT_IDS", + "bitcode_request_read", + "terminal-delegated-handoff", + "source_safe_conversation_telemetry_metadata", + "source_bearing_delivery_locked_until_settlement_and_rights" + ], + "expectedReadback": "ChatGPT App and Bitcode Chat rehearse guided Reading actions, source-safe response rendering, delegated handoff, telemetry proof roots, and delivery lock boundaries.", + "repairExpectation": "If conversational state conflicts with route/proof state, conversation remains guidance-only and hands off to product proof readback.", + "localOnly": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-local-interface-rehearsal-row:10d2d1b870ff147f062b1775", + "sourceRoots": [ + "packages/btd/src/chatgpt-app-action-contract.ts:a24a464bd0910f8b8284ddfe", + "packages/chatgptapp/src/tools.ts:01098e7c683c6394a4ff6918", + "uapi/app/conversations/conversation-terminal-handoff.ts:0eb848817ddf44fc2946aa05", + "uapi/app/conversations/conversation-telemetry-proof-hooks.ts:44c7ff1620bfa9f329f07c4d", + "uapi/tests/api/conversationReadingInterfaceParity.test.ts:e31d05980a03ff7c966df485" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "surfaceId": "proof_telemetry_repair", + "surfaceLabel": "Proof, Telemetry, And Repair Readback", + "sourcePaths": [ + "uapi/components/base/bitcode/execution/pipeline-execution-log.tsx", + "packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js", + "uapi/app/bitcode-ledger-storage-sync.ts", + ".bitcode/v46-proof-readback-operator-explanation.json" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "telemetry-is-observability-only", + "repair-fails-closed", + "payment-observation-is-not-finality" + ], + "claimCategoryIds": [ + "operator-evidence", + "telemetry-observability", + "repair-claim", + "settlement-claim" + ], + "authorityIds": [ + "generated-proof", + "telemetry-observability-only", + "database-projection", + "ledger-readback", + "interface-guidance-only" + ], + "stepIds": [ + "load-local-source", + "identify-interface-claims", + "verify-source-safe-disclosure", + "verify-evidence-authority", + "verify-denied-state-repair", + "emit-source-safe-rehearsal-root" + ], + "requiredCopyTokens": [ + "promptDisclosurePosture", + "source_safe_reading_operational_telemetry_repair_readback_metadata", + "BITCODE_LEDGER_STORAGE_SYNC_CONTRACT", + "v46-proof-readback-operator-explanation" + ], + "expectedReadback": "Proof, telemetry, and repair rehearsal confirms local stream UI can show phases, steps, proof roots, disclosure posture, and metadata while preserving evidence authority hierarchy.", + "repairExpectation": "If telemetry, database projection, ledger, storage, wallet, or delivery evidence disagree, repair fails closed and telemetry stays observability only.", + "localOnly": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-local-interface-rehearsal-row:5dab113b96d09fc833b28ccc", + "sourceRoots": [ + "uapi/components/base/bitcode/execution/pipeline-execution-log.tsx:bb7e1773303e04b9027ae2c7", + "packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js:1647b3a170af58333c1553a3", + "uapi/app/bitcode-ledger-storage-sync.ts:0907056993c1ebae7e9b921d", + ".bitcode/v46-proof-readback-operator-explanation.json:5fb82dae1fac3711939dcd89" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + } + ], + "priorArtifactResults": [ + { + "artifactId": "v46-protocol-comprehension-object-model", + "sourcePath": ".bitcode/v46-protocol-comprehension-object-model.json", + "passed": true, + "sourceRoot": ".bitcode/v46-protocol-comprehension-object-model.json:b09508f0d7841284effb0e01" + }, + { + "artifactId": "v46-public-operator-claim-boundaries", + "sourcePath": ".bitcode/v46-public-operator-claim-boundaries.json", + "passed": true, + "sourceRoot": ".bitcode/v46-public-operator-claim-boundaries.json:352e9021ffbe43d650923b98" + }, + { + "artifactId": "v46-product-route-comprehension-readback", + "sourcePath": ".bitcode/v46-product-route-comprehension-readback.json", + "passed": true, + "sourceRoot": ".bitcode/v46-product-route-comprehension-readback.json:c5d1d887915cb920288b18a8" + }, + { + "artifactId": "v46-interface-claim-contracts", + "sourcePath": ".bitcode/v46-interface-claim-contracts.json", + "passed": true, + "sourceRoot": ".bitcode/v46-interface-claim-contracts.json:85379590a5c5e719d0cc1ed1" + }, + { + "artifactId": "v46-proof-readback-operator-explanation", + "sourcePath": ".bitcode/v46-proof-readback-operator-explanation.json", + "passed": true, + "sourceRoot": ".bitcode/v46-proof-readback-operator-explanation.json:5fb82dae1fac3711939dcd89" + } + ], + "predicateResults": [ + { + "id": "active-pointer-supports-v46-draft-or-later", + "sourcePath": "BITCODE_SPEC.txt", + "passed": true + }, + { + "id": "spec-defines-gate7-law", + "sourcePath": "BITCODE_SPEC_V46.md", + "passed": true + }, + { + "id": "delta-records-gate7", + "sourcePath": "BITCODE_SPEC_V46_DELTA.md", + "passed": true + }, + { + "id": "notes-records-gate7", + "sourcePath": "BITCODE_SPEC_V46_NOTES.md", + "passed": true + }, + { + "id": "parity-records-gate7", + "sourcePath": "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "passed": true + }, + { + "id": "roadmap-advanced-to-gate7", + "sourcePath": "SPECIFICATIONS_ROADMAP.md", + "passed": true + }, + { + "id": "readmes-document-gate7", + "sourcePath": "README.md", + "passed": true + }, + { + "id": "prior-v46-artifacts-pass", + "sourcePath": ".bitcode/v46-protocol-comprehension-object-model.json", + "passed": true + }, + { + "id": "package-exports-gate7", + "sourcePath": "packages/protocol/src/index.js", + "passed": true + }, + { + "id": "package-test-covers-gate7", + "sourcePath": "packages/protocol/test/v46-local-interface-comprehension-rehearsal.test.js", + "passed": true + }, + { + "id": "generator-and-checker-exist", + "sourcePath": "scripts/generate-v46-local-interface-comprehension-rehearsal.mjs", + "passed": true + }, + { + "id": "package-json-scripts", + "sourcePath": "package.json", + "passed": true + }, + { + "id": "workflows-run-gate7", + "sourcePath": ".github/workflows/bitcode-gate-quality.yml", + "passed": true + } + ], + "sourceRoots": { + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V46.md:48121ff59f812f15a1b3b1f7", + "delta": "BITCODE_SPEC_V46_DELTA.md:a16a16db40d4eeae612a0657", + "notes": "BITCODE_SPEC_V46_NOTES.md:cca70aca3566132e7026351c", + "parity": "BITCODE_SPEC_V46_PARITY_MATRIX.md:91b47eeaa106639d2d21856b", + "roadmap": "SPECIFICATIONS_ROADMAP.md:90a3988a2651878e43f96c65", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packageSource": "packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js:553cbdb03542959151ef8fce", + "packageTest": "packages/protocol/test/v46-local-interface-comprehension-rehearsal.test.js:5b6ad282088791ea76ec2bbf", + "generator": "scripts/generate-v46-local-interface-comprehension-rehearsal.mjs:d6a9dadb6f8ee51de50a529f", + "checker": "scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs:beb49c72404e73e730640a72", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "v46ProtocolArtifact": ".bitcode/v46-protocol-comprehension-object-model.json:b09508f0d7841284effb0e01", + "v46PublicArtifact": ".bitcode/v46-public-operator-claim-boundaries.json:352e9021ffbe43d650923b98", + "v46ProductArtifact": ".bitcode/v46-product-route-comprehension-readback.json:c5d1d887915cb920288b18a8", + "v46InterfaceArtifact": ".bitcode/v46-interface-claim-contracts.json:85379590a5c5e719d0cc1ed1", + "v46ProofArtifact": ".bitcode/v46-proof-readback-operator-explanation.json:5fb82dae1fac3711939dcd89", + "landingPage": "uapi/app/page.tsx:b1b707e58f8917b8a97717b4", + "docsPage": "uapi/app/docs/page.tsx:75e5011c78a308e60f95cbd5", + "docsContent": "uapi/app/(root)/components/PublicDocsPageContent.tsx:6efbf77a6f292e9e0c25b70e", + "packsPage": "uapi/app/packs/page.tsx:1b3d7a1cc00500a13042e8dd", + "packsClient": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", + "packActivityModel": "uapi/components/base/bitcode/activity/pack-activity-model.ts:88d0334af8bc699e071ca2a1", + "readPage": "uapi/app/read/page.tsx:37a723ed87feac05c0504249", + "readClient": "uapi/app/read/ReadPageClient.tsx:860bec675640bf466752bc7e", + "depositPage": "uapi/app/deposit/page.tsx:6bab6a9debab3f4350d0ddca", + "depositClient": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", + "btdApiSchema": "packages/btd/src/api-schema-compatibility-matrix.ts:21527a4ab84909ce72247fab", + "btdMcpContract": "packages/btd/src/mcp-tool-contract.ts:ed7ff68bb55bd47afc9c538b", + "mcpDocsReference": "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md:39ae38737d2c48c96eebb5ea", + "btdChatGptContract": "packages/btd/src/chatgpt-app-action-contract.ts:a24a464bd0910f8b8284ddfe", + "chatGptTools": "packages/chatgptapp/src/tools.ts:01098e7c683c6394a4ff6918", + "conversationHandoff": "uapi/app/conversations/conversation-terminal-handoff.ts:0eb848817ddf44fc2946aa05", + "conversationTelemetry": "uapi/app/conversations/conversation-telemetry-proof-hooks.ts:44c7ff1620bfa9f329f07c4d", + "conversationParityTest": "uapi/tests/api/conversationReadingInterfaceParity.test.ts:e31d05980a03ff7c966df485", + "pipelineLogUi": "uapi/components/base/bitcode/execution/pipeline-execution-log.tsx:bb7e1773303e04b9027ae2c7", + "v39OperationalTelemetryReadback": "packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js:1647b3a170af58333c1553a3", + "uapiLedgerStorageSync": "uapi/app/bitcode-ledger-storage-sync.ts:0907056993c1ebae7e9b921d" + }, + "coverage": { + "predicateCount": 13, + "failedPredicateIds": [], + "surfaceCount": 7, + "stepCount": 6, + "allSurfacesCovered": true, + "allStepsCovered": true, + "allPriorArtifactsPassed": true, + "allClaimIdsKnown": true, + "allCategoryIdsKnown": true, + "allAuthorityIdsKnown": true, + "sourceFilesPresent": true, + "rowsMissingSourceFiles": [], + "rowsMissingRequiredCopy": [], + "localOnly": true, + "sourceSafeMetadataOnly": true, + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "forbiddenPhraseHits": [], + "secretMarkerHits": [] + }, + "sourceSafety": { + "sourceSafetyVerdict": "source-safe-local-interface-comprehension-rehearsal", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ] + } +} diff --git a/.bitcode/v46-product-route-comprehension-readback.json b/.bitcode/v46-product-route-comprehension-readback.json new file mode 100644 index 000000000..fd5f3fece --- /dev/null +++ b/.bitcode/v46-product-route-comprehension-readback.json @@ -0,0 +1,564 @@ +{ + "artifactId": "v46-product-route-comprehension-readback", + "artifactPath": ".bitcode/v46-product-route-comprehension-readback.json", + "artifactRoot": "v46-product-route-comprehension-readback:6efcc43231d6d505c37eeaa3", + "schemaId": "bitcode.v46.productRouteComprehensionReadback.v1", + "version": "V46", + "currentTarget": "V45", + "sourceSafetyVerdict": "source-safe-product-route-comprehension-readback", + "sourceRoots": { + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V46.md:48121ff59f812f15a1b3b1f7", + "delta": "BITCODE_SPEC_V46_DELTA.md:a16a16db40d4eeae612a0657", + "notes": "BITCODE_SPEC_V46_NOTES.md:cca70aca3566132e7026351c", + "parity": "BITCODE_SPEC_V46_PARITY_MATRIX.md:91b47eeaa106639d2d21856b", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packageSource": "packages/protocol/src/canonical/v46-product-route-comprehension-readback.js:eedce6a4b817c1354d457bc5", + "packageTest": "packages/protocol/test/v46-product-route-comprehension-readback.test.js:3118d40ad600a9fb1d025bf6", + "generator": "scripts/generate-v46-product-route-comprehension-readback.mjs:131473a8dcd0d665f74f56a7", + "checker": "scripts/check-v46-gate4-product-route-comprehension-readback.mjs:483822ed6cd2809c20ee8fe5", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "productRouteShell": "uapi/components/base/bitcode/routes/product-route-shell.tsx:e71f90c289dec52fd158568a", + "packsClient": "uapi/app/packs/PacksPageClient.tsx:68c61c8fd312e6c750d742ba", + "packsModel": "uapi/components/base/bitcode/activity/pack-activity-model.ts:88d0334af8bc699e071ca2a1", + "packsApi": "uapi/app/api/packs/activity/route.ts:97c5a4539d48562eb5de66e8", + "packsTest": "uapi/tests/packsPageClient.test.tsx:3fba7a8cabfefd257882490e", + "readClient": "uapi/app/read/ReadPageClient.tsx:860bec675640bf466752bc7e", + "readModel": "uapi/app/read/read-route-model.ts:670e1abd63cccea6365a491f", + "readStepModel": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts:fb152fb0cc1d0799d1d616d6", + "readClientTest": "uapi/tests/readPageClient.test.tsx:45cea103fa46706d1f39c4f4", + "readModelTest": "uapi/tests/readRouteModel.test.ts:5ad610c538f65fb0c860777f", + "depositClient": "uapi/app/deposit/DepositPageClient.tsx:8526b7980e568ab7d5228e8f", + "depositModel": "uapi/app/deposit/deposit-route-model.ts:6485e388dd745c79907f992c", + "depositClientTest": "uapi/tests/depositPageClient.test.tsx:3385b14ea538e4ea1bb3ed01", + "depositModelTest": "uapi/tests/depositRouteModel.test.ts:3f7377f8c55ce132f970ad09" + }, + "routeIds": [ + "packs", + "read", + "deposit" + ], + "routePaths": [ + "/packs", + "/read", + "/deposit" + ], + "capabilityIds": [ + "low-detail-default", + "route-owned-state", + "search-filter-sort", + "five-step-reading", + "five-step-depositing", + "source-safe-preview", + "expandable-proof-readback", + "keyboard-navigation", + "proof-root-readback", + "settlement-rights-delivery-boundary", + "compensation-readback", + "terminal-debug-compatibility" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "routeRows": [ + { + "routeId": "packs", + "routePath": "/packs", + "routeRole": "searchable source-safe PackActivity master-detail and market activity readback", + "sourcePaths": [ + "uapi/app/packs/PacksPageClient.tsx", + "uapi/components/base/bitcode/activity/pack-activity-model.ts", + "uapi/app/api/packs/activity/route.ts", + "uapi/tests/packsPageClient.test.tsx", + "uapi/components/base/bitcode/routes/product-route-shell.tsx" + ], + "claimIds": [ + "assetpack-is-commodity", + "operator-evidence-is-source-safe-readback", + "preview-is-source-safe-measurement", + "finality-authorizes-rights-and-delivery", + "compensation-follows-source-to-shares", + "repair-fails-closed", + "telemetry-is-observability-only" + ], + "claimCategoryIds": [ + "protocol-law", + "product-guidance", + "operator-evidence", + "preview-claim", + "rights-claim", + "compensation-claim", + "repair-claim", + "telemetry-observability" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "ledger-readback", + "database-projection", + "interface-guidance-only" + ], + "capabilityIds": [ + "low-detail-default", + "route-owned-state", + "search-filter-sort", + "source-safe-preview", + "expandable-proof-readback", + "keyboard-navigation", + "proof-root-readback", + "settlement-rights-delivery-boundary", + "compensation-readback" + ], + "requiredCopyTokens": [ + "Pack activity", + "Portfolio positions, market signals, proof roots, settlement, compensation, delivery, repair.", + "Search titles, measurements, values, proof roots", + "Source-safe detail", + "Expandable proof detail", + "packs-enterprise-activity-grid", + "PackActivityRecord" + ], + "readbackRoots": [ + "proofRoots", + "accounting.statementRoot", + "governance.authorityRoot", + "commodityState" + ], + "operatorReading": "/packs is the source-safe master-detail readback for PackActivity, not a source disclosure surface or ledger source of truth.", + "lowDetailDefault": true, + "expandableSourceSafeDetail": true, + "routeOwnedState": true, + "proofReadbackVisible": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-product-route-row:223c20737781d34d6384de98" + }, + { + "routeId": "read", + "routePath": "/read", + "routeRole": "five-step Reading procurement route from Read Request to settled delivery", + "sourcePaths": [ + "uapi/app/read/ReadPageClient.tsx", + "uapi/app/read/read-route-model.ts", + "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts", + "uapi/tests/readPageClient.test.tsx", + "uapi/tests/readRouteModel.test.ts", + "uapi/components/base/bitcode/routes/product-route-shell.tsx" + ], + "claimIds": [ + "assetpack-is-commodity", + "btd-is-weighted-scalar-volume-and-settled-rights", + "preview-is-source-safe-measurement", + "quote-is-source-safe-offer", + "payment-observation-is-not-finality", + "finality-authorizes-rights-and-delivery", + "delivery-is-entitled-source-unlock", + "operator-evidence-is-source-safe-readback" + ], + "claimCategoryIds": [ + "protocol-law", + "product-guidance", + "preview-claim", + "quote-claim", + "settlement-claim", + "rights-claim", + "delivery-claim", + "operator-evidence" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "ledger-readback", + "wallet-provider-receipt", + "repository-delivery-receipt", + "interface-guidance-only" + ], + "capabilityIds": [ + "low-detail-default", + "route-owned-state", + "five-step-reading", + "source-safe-preview", + "expandable-proof-readback", + "keyboard-navigation", + "proof-root-readback", + "settlement-rights-delivery-boundary", + "terminal-debug-compatibility" + ], + "requiredCopyTokens": [ + "Read request -> Need -> Finding Fits -> Preview -> Settlement.", + "ReadNeedComprehensionSynthesis", + "ReadFitsFindingSynthesis", + "Withheld until paid rights: source-bearing AssetPack contents", + "read-route-step-request-read", + "read-expandable-proof-detail", + "measurement-weight-volume" + ], + "readbackRoots": [ + "readRouteSession.proofRoot", + "budgetPolicy.policyRoot", + "quotePolicy.quoteRoot", + "settlement.readinessRoot", + "authorityRoot" + ], + "operatorReading": "/read keeps the buyer path in five steps and withholds source-bearing AssetPack contents until BTC finality, BTD rights transfer, and entitled delivery readback.", + "lowDetailDefault": true, + "expandableSourceSafeDetail": true, + "routeOwnedState": true, + "proofReadbackVisible": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-product-route-row:a4fe186278d1ba2c719c18b6" + }, + { + "routeId": "deposit", + "routePath": "/deposit", + "routeRole": "five-step Depositing route from connected source to Depository admission", + "sourcePaths": [ + "uapi/app/deposit/DepositPageClient.tsx", + "uapi/app/deposit/deposit-route-model.ts", + "uapi/tests/depositPageClient.test.tsx", + "uapi/tests/depositRouteModel.test.ts", + "uapi/components/base/bitcode/routes/product-route-shell.tsx" + ], + "claimIds": [ + "assetpack-is-commodity", + "deposit-option-is-potential-supply", + "operator-evidence-is-source-safe-readback", + "compensation-follows-source-to-shares", + "repair-fails-closed", + "telemetry-is-observability-only" + ], + "claimCategoryIds": [ + "protocol-law", + "product-guidance", + "operator-evidence", + "compensation-claim", + "repair-claim", + "telemetry-observability" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "database-projection", + "object-storage-root", + "interface-guidance-only" + ], + "capabilityIds": [ + "low-detail-default", + "route-owned-state", + "five-step-depositing", + "source-safe-preview", + "expandable-proof-readback", + "keyboard-navigation", + "proof-root-readback", + "compensation-readback", + "terminal-debug-compatibility" + ], + "requiredCopyTokens": [ + "Source -> Options -> Review -> Admission -> Depository.", + "DepositAssetPackOptionSynthesis", + "Reviewable AssetPack supply options.", + "Withheld: raw source", + "deposit-route-step-connect-source", + "deposit-expandable-proof-detail", + "Expected compensation" + ], + "readbackRoots": [ + "depositRouteSession.proofRoot", + "synthesis.roots.synthesisRoot", + "policy.roots.policyReportRoot", + "admission.roots.admissionReportRoot", + "earningSupplyIntelligence.roots.intelligenceRoot" + ], + "operatorReading": "/deposit is the source-safe supply route; it forms reviewable options and admission readback without exposing protected source or claiming final Need-relative BTD at option time.", + "lowDetailDefault": true, + "expandableSourceSafeDetail": true, + "routeOwnedState": true, + "proofReadbackVisible": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-product-route-row:d29d236288eb4794e4699d3f" + } + ], + "coverage": { + "routeCount": 3, + "routeIds": [ + "packs", + "read", + "deposit" + ], + "routePaths": [ + "/packs", + "/read", + "/deposit" + ], + "capabilityIds": [ + "low-detail-default", + "route-owned-state", + "search-filter-sort", + "five-step-reading", + "five-step-depositing", + "source-safe-preview", + "expandable-proof-readback", + "keyboard-navigation", + "proof-root-readback", + "settlement-rights-delivery-boundary", + "compensation-readback", + "terminal-debug-compatibility" + ], + "capabilityIdsUsed": [ + "low-detail-default", + "route-owned-state", + "search-filter-sort", + "source-safe-preview", + "expandable-proof-readback", + "keyboard-navigation", + "proof-root-readback", + "settlement-rights-delivery-boundary", + "compensation-readback", + "five-step-reading", + "terminal-debug-compatibility", + "five-step-depositing" + ], + "claimIdsUsed": [ + "assetpack-is-commodity", + "operator-evidence-is-source-safe-readback", + "preview-is-source-safe-measurement", + "finality-authorizes-rights-and-delivery", + "compensation-follows-source-to-shares", + "repair-fails-closed", + "telemetry-is-observability-only", + "btd-is-weighted-scalar-volume-and-settled-rights", + "quote-is-source-safe-offer", + "payment-observation-is-not-finality", + "delivery-is-entitled-source-unlock", + "deposit-option-is-potential-supply" + ], + "categoryIdsUsed": [ + "protocol-law", + "product-guidance", + "operator-evidence", + "preview-claim", + "rights-claim", + "compensation-claim", + "repair-claim", + "telemetry-observability", + "quote-claim", + "settlement-claim", + "delivery-claim" + ], + "authorityIdsUsed": [ + "canonical-specification", + "generated-proof", + "ledger-readback", + "database-projection", + "interface-guidance-only", + "wallet-provider-receipt", + "repository-delivery-receipt", + "object-storage-root" + ], + "privatePayloadIds": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "allRoutesCovered": true, + "allRoutePathsCovered": true, + "lowDetailDefaultsCovered": true, + "expandableProofReadbackCovered": true, + "routeOwnedStateCovered": true, + "requiredCapabilitiesCovered": true, + "routeSpecificCapabilitiesCovered": true, + "allClaimIdsKnown": true, + "allCategoryIdsKnown": true, + "allAuthorityIdsKnown": true, + "sourcePredicates": [ + { + "id": "active-pointer-supports-v46-draft-or-later", + "sourcePath": "BITCODE_SPEC.txt", + "passed": true + }, + { + "id": "spec-records-route-readback-law", + "sourcePath": "BITCODE_SPEC_V46.md", + "passed": true + }, + { + "id": "delta-records-gate4", + "sourcePath": "BITCODE_SPEC_V46_DELTA.md", + "passed": true + }, + { + "id": "notes-record-gate4", + "sourcePath": "BITCODE_SPEC_V46_NOTES.md", + "passed": true + }, + { + "id": "parity-records-gate4", + "sourcePath": "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "passed": true + }, + { + "id": "roadmap-records-gate4-closure", + "sourcePath": "SPECIFICATIONS_ROADMAP.md", + "passed": true + }, + { + "id": "package-source-exists", + "sourcePath": "packages/protocol/src/canonical/v46-product-route-comprehension-readback.js", + "passed": true + }, + { + "id": "package-test-exists", + "sourcePath": "packages/protocol/test/v46-product-route-comprehension-readback.test.js", + "passed": true + }, + { + "id": "generator-exists", + "sourcePath": "scripts/generate-v46-product-route-comprehension-readback.mjs", + "passed": true + }, + { + "id": "checker-exists", + "sourcePath": "scripts/check-v46-gate4-product-route-comprehension-readback.mjs", + "passed": true + }, + { + "id": "package-json-exposes-gate4", + "sourcePath": "package.json", + "passed": true + }, + { + "id": "package-exports-gate4", + "sourcePath": "packages/protocol/src/index.js", + "passed": true + }, + { + "id": "package-types-export-gate4", + "sourcePath": "packages/protocol/src/index.d.ts", + "passed": true + }, + { + "id": "gate-and-canon-workflows-run-gate4", + "sourcePath": ".github/workflows/bitcode-gate-quality.yml", + "passed": true + }, + { + "id": "packs-route-uses-shared-shell", + "sourcePath": "uapi/app/packs/PacksPageClient.tsx", + "passed": true + }, + { + "id": "read-route-uses-five-step-shell", + "sourcePath": "uapi/app/read/ReadPageClient.tsx", + "passed": true + }, + { + "id": "deposit-route-uses-five-step-shell", + "sourcePath": "uapi/app/deposit/DepositPageClient.tsx", + "passed": true + } + ], + "failedPredicateIds": [], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "forbiddenPhraseHits": [], + "secretMarkerHits": [], + "rowsMissingRequiredCopy": [] + }, + "passed": true, + "closureReading": "V46 Gate 4 closes source-safe route comprehension readback for /packs, /read, and /deposit without changing active V45 canon or admitting value-bearing mainnet operation." +} diff --git a/.bitcode/v46-promotion-readiness-report.json b/.bitcode/v46-promotion-readiness-report.json new file mode 100644 index 000000000..63393ca81 --- /dev/null +++ b/.bitcode/v46-promotion-readiness-report.json @@ -0,0 +1,526 @@ +{ + "artifactId": "v46-promotion-readiness-report", + "schemaId": "bitcode.v46.promotionReadinessReport.v1", + "version": "V46", + "currentTarget": "V45", + "generatedAt": "2026-06-02T00:00:00.000Z", + "sourceSafetyVerdict": "source-safe-v46-protocol-comprehension-promotion-metadata", + "prePromotionPosture": "V45 active / V46 draft", + "postPromotionPosture": "V46 active / V47 draft", + "branchProtection": { + "directMainPushAdmitted": false, + "promotionPrRequired": true, + "versionBranch": "version/v46", + "versionPromotionPullRequestTitlePrefix": "V46 Canonical Promotion" + }, + "generatedArtifactPolicy": { + "provenAppendixPath": "BITCODE_SPEC_V46_PROVEN.md", + "provenAppendixRequiredBeforePromotion": false, + "generatedArtifactPrefix": ".bitcode/v46-", + "promotionOverwritesPreviewArtifacts": true, + "secretValuesSerialized": false, + "protectedSourceSerialized": false, + "rawProtectedPromptSerialized": false, + "rawProviderResponseSerialized": false, + "unpaidAssetPackSourceSerialized": false + }, + "validationCommands": [ + "pnpm run check:v46-gate2", + "pnpm run check:v46-gate3", + "pnpm run check:v46-gate4", + "pnpm run check:v46-gate5", + "pnpm run check:v46-gate6", + "pnpm run check:v46-gate7", + "pnpm run check:v46-gate8", + "node scripts/promote-bitcode-canon.mjs --version V46 --commit HEAD --dry-run" + ], + "gateArtifactEvidence": [ + { + "relativePath": ".bitcode/v46-protocol-comprehension-object-model.json", + "present": true, + "parseable": true, + "digest": "sha256:b09508f0d7841284effb0e01d9d92d18ebeb99fbbfd232e2813d6730bc096b6a", + "byteLength": 69300, + "sourceSafe": true, + "artifactId": "v46-protocol-comprehension-object-model", + "version": "V46", + "sourceSafetyVerdict": "source-safe-protocol-comprehension-metadata" + }, + { + "relativePath": ".bitcode/v46-public-operator-claim-boundaries.json", + "present": true, + "parseable": true, + "digest": "sha256:352e9021ffbe43d650923b98d2714fd4c0fd10bc3e52003f93ccac1b1f34fb1f", + "byteLength": 29808, + "sourceSafe": true, + "artifactId": "v46-public-operator-claim-boundaries", + "version": "V46", + "sourceSafetyVerdict": "source-safe-public-operator-claim-boundary-metadata" + }, + { + "relativePath": ".bitcode/v46-product-route-comprehension-readback.json", + "present": true, + "parseable": true, + "digest": "sha256:c5d1d887915cb920288b18a8a0bd7c22b2726860519e13c5ebfca3760a56aaec", + "byteLength": 20121, + "sourceSafe": true, + "artifactId": "v46-product-route-comprehension-readback", + "version": "V46", + "sourceSafetyVerdict": "source-safe-product-route-comprehension-readback" + }, + { + "relativePath": ".bitcode/v46-interface-claim-contracts.json", + "present": true, + "parseable": true, + "digest": "sha256:85379590a5c5e719d0cc1ed1ee3feaf57f8194bdcb84b12ccee72ffda67c97d9", + "byteLength": 29404, + "sourceSafe": true, + "artifactId": "v46-interface-claim-contracts", + "version": "V46", + "sourceSafetyVerdict": "source-safe-interface-claim-contracts" + }, + { + "relativePath": ".bitcode/v46-proof-readback-operator-explanation.json", + "present": true, + "parseable": true, + "digest": "sha256:5fb82dae1fac3711939dcd893894878fb0b929164e189adc5f7880c7de29e735", + "byteLength": 38977, + "sourceSafe": true, + "artifactId": "v46-proof-readback-operator-explanation", + "version": "V46", + "sourceSafetyVerdict": "source-safe-proof-readback-operator-explanation" + }, + { + "relativePath": ".bitcode/v46-local-interface-comprehension-rehearsal.json", + "present": true, + "parseable": true, + "digest": "sha256:b8f00cdb501da926e65403eecb0cb4ba00f5382b8dad950451675fa0bdab474a", + "byteLength": 34454, + "sourceSafe": true, + "artifactId": "v46-local-interface-comprehension-rehearsal", + "version": "V46", + "sourceSafetyVerdict": "source-safe-local-interface-comprehension-rehearsal" + } + ], + "sourceEvidence": [ + { + "relativePath": "scripts/check-v46-gate8-promotion-readiness.mjs", + "present": true, + "digest": "sha256:d1bef5e205a6e41264183b7bd9dd257d31c29bcc79a4bbd65d9fd46724173ab1", + "requiredTokens": [ + { + "token": "V46 Gate 8 promotion readiness", + "present": true + }, + { + "token": "--promotion-mode", + "present": true + }, + { + "token": "promotedPointer", + "present": true + }, + { + "token": ".bitcode/v46-promotion-readiness-report.json", + "present": true + } + ] + }, + { + "relativePath": "scripts/generate-v46-promotion-readiness-report.mjs", + "present": true, + "digest": "sha256:4ec9adf8e9f2a7a84589e96118b3645ed62815813c4b79d2469a5bc4e3636bb8", + "requiredTokens": [ + { + "token": "buildV46PromotionReadinessReport", + "present": true + }, + { + "token": "source-safe-v46-protocol-comprehension-promotion-metadata", + "present": true + }, + { + "token": "v46-promotion-readiness-report", + "present": true + } + ] + }, + { + "relativePath": "scripts/promote-bitcode-canon.mjs", + "present": true, + "digest": "sha256:da02ac0ac8784b399f3004af768023f2a398dc00ea419ab48dd00880c52f62b3", + "requiredTokens": [ + { + "token": "if (version === 'V46')", + "present": true + }, + { + "token": "const v46Gate8Command", + "present": true + }, + { + "token": "buildDerivedV46CommitMessageBody", + "present": true + }, + { + "token": "scripts/check-v46-gate8-promotion-readiness.mjs", + "present": true + } + ] + }, + { + "relativePath": "scripts/prepare-bitcode-spec-family-promotion.mjs", + "present": true, + "digest": "sha256:73948c223c7a0d2587ee213145b35f5e9c605dfee8700044b360f3acbd3a46c8", + "requiredTokens": [ + { + "token": "if (version === 'V46')", + "present": true + }, + { + "token": "V46 canonical system specification for protocol comprehension", + "present": true + }, + { + "token": "BITCODE_SPEC_V46_PROVEN.md", + "present": true + }, + { + "token": ".bitcode/v46-promotion-readiness-report.json", + "present": true + } + ] + }, + { + "relativePath": "scripts/prepare-bitcode-runtime-canon-promotion.mjs", + "present": true, + "digest": "sha256:77b598b0257d7dc2aef367531126f0d8ef1238d1264a78c1e876c624909b4511", + "requiredTokens": [ + { + "token": "--next-draft", + "present": true + }, + { + "token": "rewritePackageReadme", + "present": true + }, + { + "token": "rewriteRuntimeDataState", + "present": true + } + ] + }, + { + "relativePath": ".github/workflows/v46-canon-promotion.yml", + "present": true, + "digest": "sha256:8152564f5e61cb9990def5e8c3a9064bcb0a120631ae173492a7c3621cd2a221", + "requiredTokens": [ + { + "token": "head.ref == 'version/v46'", + "present": true + }, + { + "token": "node scripts/prepare-bitcode-spec-family-promotion.mjs --version V46", + "present": true + }, + { + "token": "node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V46 --next-draft V47", + "present": true + }, + { + "token": "node scripts/generate-bitcode-proven.mjs --version V46", + "present": true + }, + { + "token": "node scripts/check-bitcode-spec-family.mjs --version V46 --mode promoted --current-target V46", + "present": true + }, + { + "token": "BITCODE_SPEC_V46_PROVEN.md", + "present": true + }, + { + "token": "Promote V46 canon files", + "present": true + } + ] + }, + { + "relativePath": ".github/workflows/bitcode-gate-quality.yml", + "present": true, + "digest": "sha256:e5de1dddfaeeb0ee525b0c0f9c04887334b5c180992ea9c82f9f73cb9d2a7c68", + "requiredTokens": [ + { + "token": "check-v46-gate8-promotion-readiness.mjs", + "present": true + }, + { + "token": "elif [ \"$POINTER\" = \"V46\" ]", + "present": true + }, + { + "token": "--active-canon V46 --draft-target V47", + "present": true + } + ] + }, + { + "relativePath": ".github/workflows/bitcode-canon-quality.yml", + "present": true, + "digest": "sha256:43cc4ded2bd9757dda9091dc7298cfbaa4171e16ed3aad5c79a9d0f780aa332d", + "requiredTokens": [ + { + "token": "check-v46-gate8-promotion-readiness.mjs", + "present": true + }, + { + "token": "elif [ \"$POINTER\" = \"V46\" ]", + "present": true + }, + { + "token": "--active-canon V46 --draft-target V47", + "present": true + } + ] + }, + { + "relativePath": "packages/protocol/src/canonical/proven-generator.js", + "present": true, + "digest": "sha256:72fde86c1b4d36fb1df9f7cc33182a151bf6880dc559e07e035df027c2ca1fe4", + "requiredTokens": [ + { + "token": "buildV46ProvenPackage", + "present": true + }, + { + "token": "buildV46PromotionReadinessReport", + "present": true + }, + { + "token": ".bitcode/v46-promotion-readiness-report.json", + "present": true + } + ] + }, + { + "relativePath": "packages/protocol/test/v46-promotion-readiness.test.js", + "present": true, + "digest": "sha256:91aa71e1550699aea592ebd3f61d7fa39c8689f585162fa66e4bee2255fac3da", + "requiredTokens": [ + { + "token": "builds source-safe V46 PromotionReadinessReport", + "present": true + }, + { + "token": "v46-promotion-readiness-report", + "present": true + }, + { + "token": "V46 Promotion Readiness", + "present": true + } + ] + }, + { + "relativePath": "packages/protocol/src/canonical/v21-specifying.js", + "present": true, + "digest": "sha256:bdfcd76464c115301b3a50c8df6d6f984861140a3ce5257447086f4aa8716885", + "requiredTokens": [ + { + "token": ".bitcode/v46-promotion-readiness-report.json", + "present": true + } + ] + }, + { + "relativePath": "package.json", + "present": true, + "digest": "sha256:b79014968c556bc1b43ab3412ff5f85ae11b40e875e3186cc7304593d93adc19", + "requiredTokens": [ + { + "token": "generate:v46-promotion-readiness", + "present": true + }, + { + "token": "check:v46-promotion-readiness", + "present": true + }, + { + "token": "check:v46-gate8", + "present": true + } + ] + } + ], + "documentationEvidence": [ + { + "relativePath": "BITCODE_SPEC_V46.md", + "present": true, + "digest": "sha256:48121ff59f812f15a1b3b1f771dfa523a231f6613ca5d45a5b3fb10583c10a50", + "requiredTokens": [ + { + "token": "V46 promotion readiness canon", + "present": true + }, + { + "token": ".bitcode/v46-promotion-readiness-report.json", + "present": true + }, + { + "token": "V46 active / draft V47", + "present": true + } + ] + }, + { + "relativePath": "BITCODE_SPEC_V46_DELTA.md", + "present": true, + "digest": "sha256:a16a16db40d4eeae612a0657cfb65952377ba9f6697a44f1f9dae831f87bf7bd", + "requiredTokens": [ + { + "token": "Gate 8: V46 Promotion Readiness", + "present": true + }, + { + "token": ".bitcode/v46-promotion-readiness-report.json", + "present": true + }, + { + "token": "promotion scripts support V46", + "present": true + } + ] + }, + { + "relativePath": "BITCODE_SPEC_V46_NOTES.md", + "present": true, + "digest": "sha256:cca70aca3566132e7026351ca069e9c4efe84c7840fc9ddc58441c896dd1b075", + "requiredTokens": [ + { + "token": "Gate 8: V46 Promotion Readiness", + "present": true + }, + { + "token": ".bitcode/v46-promotion-readiness-report.json", + "present": true + }, + { + "token": "active V46 / draft V47", + "present": true + } + ] + }, + { + "relativePath": "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "present": true, + "digest": "sha256:91b47eeaa106639d2d21856bb16906e7c2b8ce6f301a44c5ddad5e2c2d0ec499", + "requiredTokens": [ + { + "token": "Gate 8 implementation readback", + "present": true + }, + { + "token": ".bitcode/v46-promotion-readiness-report.json", + "present": true + }, + { + "token": "closed", + "present": true + } + ] + }, + { + "relativePath": "SPECIFICATIONS_ROADMAP.md", + "present": true, + "digest": "sha256:64b11cb963635e16fd70bf4883ced25e0a70bd48ab428a0b35719aecf468d10f", + "requiredTokens": [ + { + "token": "V46 Gate 8 closure anchor", + "present": true + }, + { + "token": "BITCODE_SPEC_V46_PROVEN.md", + "present": true + } + ] + }, + { + "relativePath": "README.md", + "present": true, + "digest": "sha256:d28ec731634e03953d8adfe6cf6c07fe72db9b450d0aecce716fbc73cf6e4a5b", + "requiredTokens": [ + { + "token": "check:v46-gate8", + "present": true + }, + { + "token": "v46-canon-promotion.yml", + "present": true + } + ] + }, + { + "relativePath": "packages/protocol/README.md", + "present": true, + "digest": "sha256:f5b175049f4f4e8df179e184f40bc906ecd68181e425d4429a4dbb4a42a50c1a", + "requiredTokens": [ + { + "token": "V46 Gate 8", + "present": true + }, + { + "token": "V46` active, `V47` draft", + "present": true + } + ] + } + ], + "coverage": { + "requiredGateArtifactPaths": [ + ".bitcode/v46-protocol-comprehension-object-model.json", + ".bitcode/v46-public-operator-claim-boundaries.json", + ".bitcode/v46-product-route-comprehension-readback.json", + ".bitcode/v46-interface-claim-contracts.json", + ".bitcode/v46-proof-readback-operator-explanation.json", + ".bitcode/v46-local-interface-comprehension-rehearsal.json" + ], + "generatedProofOutputs": [ + "BITCODE_SPEC_V46_PROVEN.md", + ".bitcode/v46-spec-family-report.json", + ".bitcode/v46-canonical-input-report.json", + ".bitcode/v46-canon-posture-drift-report.json", + ".bitcode/v46-promotion-readiness-report.json" + ], + "gateArtifactCount": 6, + "missingGateArtifacts": [], + "unparseableGateArtifacts": [], + "sourceUnsafeGateArtifacts": [], + "sourceEvidenceComplete": true, + "documentationEvidenceComplete": true, + "allGateArtifactsCovered": true, + "allGateArtifactsParseable": true, + "allGateArtifactsSourceSafe": true, + "generatedProofOutputsCovered": true, + "promotionWorkflowCovered": true, + "gateQualityWorkflowCovered": true, + "canonQualityWorkflowCovered": true, + "promotionScriptCovered": true, + "specFamilyPromotionScriptCovered": true, + "runtimePromotionScriptCovered": true, + "provenGeneratorCovered": true, + "prePromotionPosture": "V45 active / V46 draft", + "postPromotionPosture": "V46 active / V47 draft", + "valueBearingMainnetAdmission": false, + "credentialsSerialized": false, + "protectedSourceVisible": false, + "rawProtectedPromptVisible": false, + "rawProviderResponseVisible": false, + "unpaidAssetPackSourceVisible": false, + "walletPrivateMaterialVisible": false + }, + "failClosedResult": "promotion remains blocked when any V46 comprehension artifact, interface rehearsal, workflow, promotion script, generated proof support, source-safety check, or value-bearing mainnet block is missing", + "artifactRoot": "v46-protocol-comprehension-promotion-readiness-report:d25bf5b898b61a413c0d01da", + "passed": true, + "failures": [], + "validationCommand": "pnpm run check:v46-gate8" +} diff --git a/.bitcode/v46-proof-readback-operator-explanation.json b/.bitcode/v46-proof-readback-operator-explanation.json new file mode 100644 index 000000000..64775a0b8 --- /dev/null +++ b/.bitcode/v46-proof-readback-operator-explanation.json @@ -0,0 +1,1062 @@ +{ + "artifactId": "v46-proof-readback-operator-explanation", + "schemaId": "bitcode.v46.proofReadbackOperatorExplanation.v1", + "version": "V46", + "currentTarget": "V45", + "generatedAt": "2026-06-02T00:00:00.000Z", + "artifactPath": ".bitcode/v46-proof-readback-operator-explanation.json", + "sourceSafetyVerdict": "source-safe-proof-readback-operator-explanation", + "evidenceClassIds": [ + "canonical_spec_generated_proof", + "execution_workflow_receipt", + "ledger_journal", + "database_projection", + "object_storage_root", + "telemetry_stream", + "wallet_provider_receipt", + "repository_delivery_receipt", + "repair_reconciliation_receipt" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorDecisionIds": [ + "state-advancement-requires-required-proof-root", + "telemetry-is-observability-only", + "database-projection-is-not-ledger-truth", + "payment-observation-is-not-finality", + "wallet-provider-receipt-is-non-custodial-authority", + "repository-delivery-receipt-is-entitled-source-unlock", + "repair-reconciliation-fails-closed", + "interfaces-explain-without-parallel-authority" + ], + "proofReadbackRows": [ + { + "evidenceClassId": "canonical_spec_generated_proof", + "label": "Canonical Specification And Generated Proof", + "authorityIds": [ + "canonical-specification", + "generated-proof" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "repair-fails-closed" + ], + "sourcePaths": [ + "BITCODE_SPEC_V45.md", + "BITCODE_SPEC_V45_PROVEN.md", + "BITCODE_SPEC_V46.md" + ], + "requiredCopyTokens": [ + "Bitcode state advances only by proof-backed readback", + "generated proof appendix", + "proof-backed readback is the only state advancement" + ], + "canAuthorize": "Defines protocol law, accepted evidence classes, proof-family roots, and source-safe repair expectations.", + "cannotAuthorize": "Cannot by itself prove a live payment, BTD rights transfer, source unlock, or repository delivery happened.", + "strongerEvidenceRequired": [ + "ledger_journal", + "wallet_provider_receipt", + "repository_delivery_receipt" + ], + "conflictBehavior": "prefer-active-canon-and-generated-proof-family-then-fail-closed-to-repair", + "repairStates": [ + "stale_spec_pointer", + "missing_generated_proof", + "conflicting_generated_artifact" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorExplanation": "Spec and generated proof say what may count as evidence; runtime state still needs boundary readback from the relevant system.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-proof-readback-row:08f21ac38cbb18b2123e3399", + "sourceRoots": [ + "BITCODE_SPEC_V45.md:303eba5e7ebde2132d729f1f", + "BITCODE_SPEC_V45_PROVEN.md:49cae72f47df688d9d02b655", + "BITCODE_SPEC_V46.md:48121ff59f812f15a1b3b1f7" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "evidenceClassId": "execution_workflow_receipt", + "label": "Execution And Workflow Receipt", + "authorityIds": [ + "generated-proof" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "telemetry-is-observability-only" + ], + "sourcePaths": [ + "packages/pipeline-hosts/src/distributed-execution-runtime-receipt.ts", + "packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js", + "BITCODE_SPEC_V45.md" + ], + "requiredCopyTokens": [ + "bitcode.distributed_execution_runtime_receipt", + "proofRoot", + "repairPosture", + "Telemetry is observability only" + ], + "canAuthorize": "Proves that an execution, worker, PTRR agent, tool, proof generation, storage write, or repair job ran and produced roots.", + "cannotAuthorize": "Cannot alone settle BTC, transfer BTD rights, admit source delivery, or override ledger/database/storage repair posture.", + "strongerEvidenceRequired": [ + "ledger_journal", + "database_projection", + "object_storage_root" + ], + "conflictBehavior": "receipt-output-must-reconcile-with-ledger-storage-and-proof-or-enter-repair", + "repairStates": [ + "missing_parent_receipt", + "failed_execution", + "unreconciled_output_root" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorExplanation": "Execution receipts are replay and provenance evidence; they explain work performed but do not own commercial finality.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-proof-readback-row:12f2c6eaef40c2182b1991ad", + "sourceRoots": [ + "packages/pipeline-hosts/src/distributed-execution-runtime-receipt.ts:40ed8d6b9d92e1d7f69fcca0", + "packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js:1647b3a170af58333c1553a3", + "BITCODE_SPEC_V45.md:303eba5e7ebde2132d729f1f" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "evidenceClassId": "ledger_journal", + "label": "Ledger Journal", + "authorityIds": [ + "ledger-readback" + ], + "claimIds": [ + "payment-observation-is-not-finality", + "finality-authorizes-rights-and-delivery", + "compensation-follows-source-to-shares" + ], + "sourcePaths": [ + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts", + "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts", + "packages/btd/src/receipts.ts", + "packages/protocol/src/canonical/v40-ledger-storage-sync.js" + ], + "requiredCopyTokens": [ + "AssetPackSettlementFinalityReceipt", + "finalityState", + "blocked_until_payment_finality", + "ledger:database-storage-reconciliation" + ], + "canAuthorize": "Provides payment/finality and settlement readback required before BTD rights, delivery unlock, and compensation allocation.", + "cannotAuthorize": "Cannot expose source without matching rights, storage, repository delivery, and reconciliation evidence.", + "strongerEvidenceRequired": [ + "wallet_provider_receipt", + "database_projection", + "object_storage_root", + "repository_delivery_receipt" + ], + "conflictBehavior": "ledger-finality-conflict-blocks-rights-delivery-and-compensation", + "repairStates": [ + "underpayment", + "unconfirmed_finality", + "reorged_or_failed_finality", + "ledger_root_mismatch" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorExplanation": "Ledger readback is the payment and finality boundary; payment observation remains non-final until policy confirms finality.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-proof-readback-row:2000640bb0399236b3bf9699", + "sourceRoots": [ + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:3d2b0984fc9e2c3c108d6eb0", + "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts:f40f6cf958404cc64d6d5b1a", + "packages/btd/src/receipts.ts:663e799baf0715924cb67c14", + "packages/protocol/src/canonical/v40-ledger-storage-sync.js:72fdfd6eee4b7dfb5a3496bc" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "evidenceClassId": "database_projection", + "label": "Database Projection", + "authorityIds": [ + "database-projection" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "repair-fails-closed" + ], + "sourcePaths": [ + "packages/btd/src/reconciliation.ts", + "uapi/app/bitcode-ledger-storage-sync.ts", + "uapi/tests/bitcodeLedgerStorageSync.test.ts" + ], + "requiredCopyTokens": [ + "DatabaseProjectedFact", + "LedgerDatabaseReconciliationReport", + "databaseProjectionRoot", + "missing_database_projection" + ], + "canAuthorize": "Provides queryable read-model state and operator/product projection once reconciled to stronger proof and ledger roots.", + "cannotAuthorize": "Cannot override ledger finality, object-storage custody, wallet authority, repository delivery, or proof-contract law.", + "strongerEvidenceRequired": [ + "ledger_journal", + "object_storage_root", + "wallet_provider_receipt" + ], + "conflictBehavior": "database-projection-is-repaired-or-quarantined-when-stronger-roots-disagree", + "repairStates": [ + "missing_database_projection", + "database_orphan_projection", + "ledger_finality_mismatch" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorExplanation": "Database rows make state readable; they are projections, not stronger truth than ledger, storage, wallet, or delivery readback.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-proof-readback-row:a66f1ce0f5f64efb1e3a401c", + "sourceRoots": [ + "packages/btd/src/reconciliation.ts:d4bc6c129196572ae673c05b", + "uapi/app/bitcode-ledger-storage-sync.ts:0907056993c1ebae7e9b921d", + "uapi/tests/bitcodeLedgerStorageSync.test.ts:55e74064a027e2070b5519af" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "evidenceClassId": "object_storage_root", + "label": "Object Storage And Protected-Source Root", + "authorityIds": [ + "object-storage-root" + ], + "claimIds": [ + "delivery-is-entitled-source-unlock", + "operator-evidence-is-source-safe-readback" + ], + "sourcePaths": [ + "packages/btd/src/reconciliation.ts", + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts", + "packages/protocol/src/canonical/v40-ledger-storage-sync.js" + ], + "requiredCopyTokens": [ + "ObjectStorageArtifactFact", + "asset_pack_protected_source_encrypted", + "objectStorageRoot", + "storage:artifact-lock-and-source-safe-projection" + ], + "canAuthorize": "Proves custody, source-safe projection, encrypted protected-source storage, delivery manifest, and withheld bundle roots.", + "cannotAuthorize": "Cannot grant Reader visibility without settlement finality, BTD rights transfer, and repository delivery receipt.", + "strongerEvidenceRequired": [ + "ledger_journal", + "repository_delivery_receipt", + "repair_reconciliation_receipt" + ], + "conflictBehavior": "storage-root-conflict-blocks-source-unlock-until-projection-repair", + "repairStates": [ + "missing_object_storage_artifact", + "object_storage_root_mismatch", + "stale_storage_manifest" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorExplanation": "Storage roots prove what exists and where custody sits; entitlement still requires settlement, rights, and delivery readback.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-proof-readback-row:affa1e9a671eec036e3e267b", + "sourceRoots": [ + "packages/btd/src/reconciliation.ts:d4bc6c129196572ae673c05b", + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:3d2b0984fc9e2c3c108d6eb0", + "packages/protocol/src/canonical/v40-ledger-storage-sync.js:72fdfd6eee4b7dfb5a3496bc" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "evidenceClassId": "telemetry_stream", + "label": "Telemetry Stream", + "authorityIds": [ + "telemetry-observability-only" + ], + "claimIds": [ + "telemetry-is-observability-only", + "operator-evidence-is-source-safe-readback" + ], + "sourcePaths": [ + "packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js", + "packages/pipeline-hosts/src/distributed-execution-runtime-receipt.ts", + "BITCODE_SPEC_V45.md" + ], + "requiredCopyTokens": [ + "telemetry stream", + "Telemetry is observability only", + "operator readback", + "source_safe_reading_operational_telemetry_repair_readback_metadata" + ], + "canAuthorize": "Explains live progress, event lineage, prompt/result disclosure posture, repair hooks, and stream UI readback.", + "cannotAuthorize": "Cannot advance AssetPack lifecycle, BTC settlement, BTD rights, source unlock, repository delivery, or compensation.", + "strongerEvidenceRequired": [ + "execution_workflow_receipt", + "ledger_journal", + "repository_delivery_receipt" + ], + "conflictBehavior": "telemetry-conflict-is-debug-signal-not-state-truth", + "repairStates": [ + "missing_event_root", + "stale_stream_state", + "conflicting_operator_readback" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorExplanation": "Telemetry is the running-system narrative; it remains observability and troubleshooting evidence only.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-proof-readback-row:b418637adee9da1ce99e7db0", + "sourceRoots": [ + "packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js:1647b3a170af58333c1553a3", + "packages/pipeline-hosts/src/distributed-execution-runtime-receipt.ts:40ed8d6b9d92e1d7f69fcca0", + "BITCODE_SPEC_V45.md:303eba5e7ebde2132d729f1f" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "evidenceClassId": "wallet_provider_receipt", + "label": "Wallet And Provider Receipt", + "authorityIds": [ + "wallet-provider-receipt" + ], + "claimIds": [ + "payment-observation-is-not-finality", + "finality-authorizes-rights-and-delivery" + ], + "sourcePaths": [ + "packages/btd/src/wallet.ts", + "packages/btd/src/btc-fee-operation.ts", + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts", + "uapi/app/bitcode-ledger-storage-sync.ts" + ], + "requiredCopyTokens": [ + "WalletSignerSession", + "serverCustody: false", + "wallet_provider_session", + "server_custody_rejected" + ], + "canAuthorize": "Proves non-custodial wallet posture, provider session, signing capability, and payment-observation boundary.", + "cannotAuthorize": "Cannot be treated as final settlement and never serializes wallet private material or server custody.", + "strongerEvidenceRequired": [ + "ledger_journal", + "canonical_spec_generated_proof" + ], + "conflictBehavior": "wallet-provider-conflict-blocks-payment-and-requires-wallet-repair", + "repairStates": [ + "address_authorization_required", + "wrong_network_blocked", + "server_custody_blocked" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorExplanation": "Wallet/provider receipts prove user-controlled signing and payment observation posture; finality still comes from ledger readback.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-proof-readback-row:a622740c727c1b0427bf7f16", + "sourceRoots": [ + "packages/btd/src/wallet.ts:36133f892f3a3dd34cf4f153", + "packages/btd/src/btc-fee-operation.ts:65f910e8e471fe199939e9c4", + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:3d2b0984fc9e2c3c108d6eb0", + "uapi/app/bitcode-ledger-storage-sync.ts:0907056993c1ebae7e9b921d" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "evidenceClassId": "repository_delivery_receipt", + "label": "Repository Delivery Receipt", + "authorityIds": [ + "repository-delivery-receipt" + ], + "claimIds": [ + "delivery-is-entitled-source-unlock", + "finality-authorizes-rights-and-delivery" + ], + "sourcePaths": [ + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts", + "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts", + "uapi/app/bitcode-ledger-storage-sync.ts" + ], + "requiredCopyTokens": [ + "pull_request_after_settlement", + "source_bearing_pull_request_ready", + "blocked_until_pull_request_delivery", + "deliveryRoot" + ], + "canAuthorize": "Proves entitled repository delivery after settlement finality, BTD rights transfer, compensation, and storage reconciliation.", + "cannotAuthorize": "Cannot bypass quote, finality, rights transfer, source-to-shares conservation, or storage proof.", + "strongerEvidenceRequired": [ + "ledger_journal", + "object_storage_root", + "repair_reconciliation_receipt" + ], + "conflictBehavior": "delivery-missing-keeps-source-withheld-and-enters-repair", + "repairStates": [ + "pull_request_delivery_missing", + "delivery_withheld", + "recover_pull_request_delivery" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorExplanation": "Repository delivery receipt is the source-unlock readback boundary for an entitled Reader, not public source permission.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-proof-readback-row:33a85b0ac910e3b2656ec29c", + "sourceRoots": [ + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:3d2b0984fc9e2c3c108d6eb0", + "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts:f40f6cf958404cc64d6d5b1a", + "uapi/app/bitcode-ledger-storage-sync.ts:0907056993c1ebae7e9b921d" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + }, + { + "evidenceClassId": "repair_reconciliation_receipt", + "label": "Repair And Reconciliation Receipt", + "authorityIds": [ + "generated-proof", + "database-projection", + "ledger-readback", + "object-storage-root" + ], + "claimIds": [ + "repair-fails-closed", + "operator-evidence-is-source-safe-readback" + ], + "sourcePaths": [ + "packages/btd/src/reconciliation.ts", + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts", + "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts", + "packages/protocol/src/canonical/v40-ledger-storage-sync.js" + ], + "requiredCopyTokens": [ + "ProjectionRepairReceipt", + "repairPosture", + "repair_ledger_database_storage_projection", + "repair:drift-finality-delivery-recovery" + ], + "canAuthorize": "Records mismatch class, blocker, retry action, operator approval need, proof roots, and the source-safe repair posture.", + "cannotAuthorize": "Cannot silently turn conflicting evidence into success or expose source while repair is unresolved.", + "strongerEvidenceRequired": [ + "canonical_spec_generated_proof", + "ledger_journal", + "object_storage_root", + "repository_delivery_receipt" + ], + "conflictBehavior": "every-evidence-mismatch-fails-closed-to-source-safe-repair", + "repairStates": [ + "projection_repair", + "finality_repair", + "delivery_recovery", + "operator_approval_required" + ], + "operatorQuestionIds": [ + "what_evidence_is_this", + "what_can_it_authorize", + "what_can_it_not_authorize", + "what_stronger_evidence_must_agree", + "what_repair_happens_on_conflict" + ], + "operatorExplanation": "Repair receipts are how operators explain and replay disagreement; unresolved repair keeps the narrower source-safe state.", + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "rowRoot": "v46-proof-readback-row:7f4f6bc57397604dadf11f50", + "sourceRoots": [ + "packages/btd/src/reconciliation.ts:d4bc6c129196572ae673c05b", + "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts:3d2b0984fc9e2c3c108d6eb0", + "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts:f40f6cf958404cc64d6d5b1a", + "packages/protocol/src/canonical/v40-ledger-storage-sync.js:72fdfd6eee4b7dfb5a3496bc" + ], + "sourceFilesPresent": true, + "requiredCopyPresent": true + } + ], + "predicateResults": [ + { + "id": "active-pointer-supports-v46-draft-or-later", + "sourcePath": "BITCODE_SPEC.txt", + "passed": true + }, + { + "id": "spec-defines-gate6-law", + "sourcePath": "BITCODE_SPEC_V46.md", + "passed": true + }, + { + "id": "delta-records-gate6", + "sourcePath": "BITCODE_SPEC_V46_DELTA.md", + "passed": true + }, + { + "id": "notes-records-gate6", + "sourcePath": "BITCODE_SPEC_V46_NOTES.md", + "passed": true + }, + { + "id": "parity-records-gate6", + "sourcePath": "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "passed": true + }, + { + "id": "roadmap-records-gate6-closure", + "sourcePath": "SPECIFICATIONS_ROADMAP.md", + "passed": true + }, + { + "id": "readmes-document-gate6", + "sourcePath": "README.md", + "passed": true + }, + { + "id": "v45-proof-readback-law-present", + "sourcePath": "BITCODE_SPEC_V45.md", + "passed": true + }, + { + "id": "distributed-execution-receipts-are-source-safe", + "sourcePath": "packages/pipeline-hosts/src/distributed-execution-runtime-receipt.ts", + "passed": true + }, + { + "id": "ledger-storage-sync-binds-finality-repair-delivery", + "sourcePath": "packages/protocol/src/canonical/v40-ledger-storage-sync.js", + "passed": true + }, + { + "id": "telemetry-readback-is-observability-only", + "sourcePath": "packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js", + "passed": true + }, + { + "id": "reconciliation-defines-database-storage-repair", + "sourcePath": "packages/btd/src/reconciliation.ts", + "passed": true + }, + { + "id": "wallet-boundary-is-no-custody", + "sourcePath": "packages/btd/src/wallet.ts", + "passed": true + }, + { + "id": "settlement-boundary-blocks-until-finality-and-delivery", + "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts", + "passed": true + }, + { + "id": "settlement-tests-cover-fail-closed-delivery", + "sourcePath": "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts", + "passed": true + }, + { + "id": "uapi-ledger-storage-sync-contract-present", + "sourcePath": "uapi/app/bitcode-ledger-storage-sync.ts", + "passed": true + }, + { + "id": "package-exports-gate6", + "sourcePath": "packages/protocol/src/index.js", + "passed": true + }, + { + "id": "package-test-covers-gate6", + "sourcePath": "packages/protocol/test/v46-proof-readback-operator-explanation.test.js", + "passed": true + }, + { + "id": "generator-and-checker-exist", + "sourcePath": "scripts/generate-v46-proof-readback-operator-explanation.mjs", + "passed": true + }, + { + "id": "package-json-scripts", + "sourcePath": "package.json", + "passed": true + }, + { + "id": "workflows-run-gate6", + "sourcePath": ".github/workflows/bitcode-gate-quality.yml", + "passed": true + } + ], + "coverage": { + "predicateCount": 21, + "failedPredicateIds": [], + "evidenceClassCount": 9, + "allEvidenceClassesCovered": true, + "allAuthorityIdsKnown": true, + "allClaimIdsKnown": true, + "allOperatorQuestionsCovered": true, + "allRowsHaveConflictBehavior": true, + "allRowsHaveRepairStates": true, + "allRowsNameStrongerEvidence": true, + "sourceFilesPresent": true, + "rowsMissingSourceFiles": [], + "rowsMissingRequiredCopy": [], + "noParallelStateAuthority": true, + "stateAdvanceRequiresProofRoot": true, + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "telemetryObservabilityOnly": true, + "databaseProjectionNotLedgerTruth": true, + "paymentObservationNotFinality": true, + "repositoryDeliveryRequiresEntitlement": true, + "repairFailsClosed": true, + "forbiddenPhraseHits": [], + "secretMarkerHits": [] + }, + "proofRoots": { + "rowSetRoot": "sha256:771d03cf064bc688ebd33cfa", + "predicateRoot": "sha256:d52be54e2a0018da0049bc1a", + "coverageRoot": "sha256:bb649799af3d38991e70cb31", + "artifactRoot": "sha256:85d65ffdc5bcb27c620cc7f1" + }, + "sourceSafety": { + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "interpolatedPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "settlementPrivatePayloadVisible": false, + "valueBearingMainnetAdmitted": false, + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ] + }, + "passed": true +} diff --git a/.bitcode/v46-protocol-comprehension-object-model.json b/.bitcode/v46-protocol-comprehension-object-model.json new file mode 100644 index 000000000..54c9abf50 --- /dev/null +++ b/.bitcode/v46-protocol-comprehension-object-model.json @@ -0,0 +1,2077 @@ +{ + "artifactId": "v46-protocol-comprehension-object-model", + "artifactPath": ".bitcode/v46-protocol-comprehension-object-model.json", + "artifactRoot": "v46-protocol-comprehension-object-model:07d2fd088cb5eae1ca3745f6", + "schemaId": "bitcode.v46.protocolComprehensionObjectModel.v1", + "version": "V46", + "currentTarget": "V45", + "sourceSafetyVerdict": "source-safe-protocol-comprehension-metadata", + "sourceRoots": { + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V46.md:48121ff59f812f15a1b3b1f7", + "delta": "BITCODE_SPEC_V46_DELTA.md:a16a16db40d4eeae612a0657", + "notes": "BITCODE_SPEC_V46_NOTES.md:cca70aca3566132e7026351c", + "parity": "BITCODE_SPEC_V46_PARITY_MATRIX.md:91b47eeaa106639d2d21856b", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packageSource": "packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js:7c026459082d30836aa2aa0b", + "packageTest": "packages/protocol/test/v46-protocol-comprehension-object-model.test.js:b3dd4b276e9c00b76becb15e", + "generator": "scripts/generate-v46-protocol-comprehension-object-model.mjs:814f07e809e47d359485ba46", + "checker": "scripts/check-v46-gate2-protocol-comprehension-object-model.mjs:1f60785e5fe3bb953a23e7a7" + }, + "objectIds": [ + "AssetPack", + "DepositAssetPackOption", + "DepositoryAssetPack", + "ReadRequest", + "ReviewedNeed", + "FindingFitsReceipt", + "SelectedFitSet", + "NeedFitAssetPack", + "SourceSafePreview", + "BtdScalarVolumeReceipt", + "BtcQuote", + "BtcSettlementReceipt", + "BtdRightsReceipt", + "SourceUnlockDeliveryReceipt", + "SourceToSharesAllocation", + "ContributorCompensationStatement", + "ProofRoot", + "RepairCase", + "InterfaceClaim" + ], + "claimCategoryIds": [ + "protocol-law", + "product-guidance", + "operator-evidence", + "investor-framing", + "telemetry-observability", + "preview-claim", + "quote-claim", + "settlement-claim", + "rights-claim", + "delivery-claim", + "compensation-claim", + "repair-claim" + ], + "claimAuthorityIds": [ + "canonical-specification", + "generated-proof", + "ledger-readback", + "database-projection", + "object-storage-root", + "wallet-provider-receipt", + "repository-delivery-receipt", + "telemetry-observability-only", + "interface-guidance-only", + "public-education-only" + ], + "disclosureBoundaryIds": [ + "before-settlement", + "after-preview", + "after-quote", + "after-payment-observation", + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "forbiddenClaimIds": [ + "assetpack-is-raw-source", + "btd-is-only-a-read-right", + "btd-is-money", + "deposit-option-is-final-btd", + "preview-discloses-source", + "quote-is-payment", + "payment-observed-is-finality", + "database-is-ledger-truth", + "telemetry-advances-state", + "conversation-advances-state", + "investor-copy-is-protocol-law", + "mainnet-value-is-admitted", + "server-custodies-wallet-private-material" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "objectRows": [ + { + "objectId": "AssetPack", + "objectKind": "commodity", + "sourceSafeMeaning": "AssetPack is the packaged technical knowledge commodity traded by Bitcode, never raw source or a loose file bundle.", + "lifecycleStateIds": [ + "deposit-option-synthesized", + "depository-assetpack-admitted", + "need-fit-assetpack-synthesized", + "source-unlocked-delivery" + ], + "btdPosture": "may carry deposit-time potential before Need selection and final Need-relative BTD after quote/finality gates", + "btcPosture": "quoteable only after reviewed Need, selected Fit set, and source-safe synthesis evidence", + "sourceVisibility": "source-safe preview before settlement; entitled source delivery only after BTD rights transfer", + "authoritativeEvidence": [ + "canonical-specification", + "generated-proof", + "object-storage-root", + "repository-delivery-receipt" + ], + "allowedClaimCategoryIds": [ + "protocol-law", + "product-guidance", + "preview-claim", + "delivery-claim" + ], + "forbiddenClaimIds": [ + "assetpack-is-raw-source", + "preview-discloses-source" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:6d11fa04802ff26c783373a3" + }, + { + "objectId": "DepositAssetPackOption", + "objectKind": "supply-formation", + "sourceSafeMeaning": "Deposit option is a proposed source-safe AssetPack candidate for depositor review, not final BTD or public source disclosure.", + "lifecycleStateIds": [ + "deposit-option-synthesized", + "deposit-option-reviewed" + ], + "btdPosture": "BTD potential only; no final Need-relative scalar volume", + "btcPosture": "no quote, payment, or compensation claim", + "sourceVisibility": "depositor-reviewed source-safe measurements and protected-source custody roots", + "authoritativeEvidence": [ + "generated-proof", + "object-storage-root", + "database-projection" + ], + "allowedClaimCategoryIds": [ + "product-guidance", + "operator-evidence" + ], + "forbiddenClaimIds": [ + "deposit-option-is-final-btd", + "mainnet-value-is-admitted" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:4a0a4e962bc9dfa6e2b09eb8" + }, + { + "objectId": "DepositoryAssetPack", + "objectKind": "admitted-supply", + "sourceSafeMeaning": "Depository AssetPack is approved searchable supply with source-safe measurements, embeddings, provenance, and protected-source roots.", + "lifecycleStateIds": [ + "depository-assetpack-admitted", + "fit-candidates-recalled", + "fit-set-selected" + ], + "btdPosture": "candidate contribution remains provisional until selected against a reviewed Need", + "btcPosture": "not directly paid; participates in Need-Fit quote and source-to-shares after settlement", + "sourceVisibility": "candidate identity and provenance may be previewed source-safely; protected source stays withheld", + "authoritativeEvidence": [ + "database-projection", + "object-storage-root", + "generated-proof" + ], + "allowedClaimCategoryIds": [ + "product-guidance", + "operator-evidence", + "preview-claim" + ], + "forbiddenClaimIds": [ + "preview-discloses-source", + "database-is-ledger-truth" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:d7683a2f78ce0e1434e9a85f" + }, + { + "objectId": "ReadRequest", + "objectKind": "demand-formation", + "sourceSafeMeaning": "Read Request is buyer demand input that may synthesize a reviewed Need but is not itself a Need, Fit, quote, or BTD.", + "lifecycleStateIds": [ + "read-requested", + "need-synthesizing", + "need-review-required" + ], + "btdPosture": "BTD not applicable until Need-Fit measurement exists", + "btcPosture": "no quoteable state", + "sourceVisibility": "private read context remains scoped to the Reading boundary", + "authoritativeEvidence": [ + "execution-receipt", + "telemetry-observability-only" + ], + "allowedClaimCategoryIds": [ + "product-guidance", + "telemetry-observability" + ], + "forbiddenClaimIds": [ + "telemetry-advances-state", + "conversation-advances-state" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:007c8b0b9045b200aad1901e" + }, + { + "objectId": "ReviewedNeed", + "objectKind": "demand-authority", + "sourceSafeMeaning": "Reviewed Need is the accepted buyer objective that authorizes Finding Fits and Need-relative measurement.", + "lifecycleStateIds": [ + "need-synthesized", + "need-reviewed", + "finding-fits-admitted" + ], + "btdPosture": "admits Need-relative measurement but does not by itself compute final BTD", + "btcPosture": "quote preparation still blocked until Fits and synthesis exist", + "sourceVisibility": "Need is visible to the Reader and source-safe to operators according to policy", + "authoritativeEvidence": [ + "generated-proof", + "database-projection", + "telemetry-observability-only" + ], + "allowedClaimCategoryIds": [ + "protocol-law", + "product-guidance", + "operator-evidence" + ], + "forbiddenClaimIds": [ + "conversation-advances-state", + "telemetry-advances-state" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:b45c838d2f8a9e741f05813d" + }, + { + "objectId": "FindingFitsReceipt", + "objectKind": "search-evidence", + "sourceSafeMeaning": "Finding Fits receipt proves depository search, ranking, thresholding, and provenance for one or many candidate Fits.", + "lifecycleStateIds": [ + "fit-candidates-recalled", + "fit-set-selected", + "repair-required" + ], + "btdPosture": "candidate BTD contribution remains provisional until the selected Fit set is synthesized into a Need-Fit AssetPack", + "btcPosture": "no payment claim", + "sourceVisibility": "candidate source is withheld; ranking and provenance roots are source-safe", + "authoritativeEvidence": [ + "execution-receipt", + "database-projection", + "generated-proof" + ], + "allowedClaimCategoryIds": [ + "operator-evidence", + "preview-claim", + "repair-claim" + ], + "forbiddenClaimIds": [ + "preview-discloses-source", + "database-is-ledger-truth" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:18ea6c15cbf1e979cf32859e" + }, + { + "objectId": "SelectedFitSet", + "objectKind": "fit-selection", + "sourceSafeMeaning": "Selected Fit set is the one-or-many admitted Depository AssetPack set accepted for Need-Fit synthesis.", + "lifecycleStateIds": [ + "fit-set-selected", + "need-fit-assetpack-synthesized" + ], + "btdPosture": "required input to final Need-relative BTD calculation", + "btcPosture": "required input to quote preparation", + "sourceVisibility": "provenance is source-safe; underlying source remains withheld", + "authoritativeEvidence": [ + "generated-proof", + "database-projection", + "object-storage-root" + ], + "allowedClaimCategoryIds": [ + "protocol-law", + "operator-evidence", + "preview-claim" + ], + "forbiddenClaimIds": [ + "preview-discloses-source" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:2f245af05223b6851367fab4" + }, + { + "objectId": "NeedFitAssetPack", + "objectKind": "buyer-pack", + "sourceSafeMeaning": "Need-Fit AssetPack is a new Need-relative AssetPack synthesized from the reviewed Need and selected Fit set.", + "lifecycleStateIds": [ + "need-fit-assetpack-synthesized", + "need-fit-assetpack-quoted", + "source-unlocked-delivery" + ], + "btdPosture": "final BTD scalar volume can be computed for quote and becomes rights-bearing only after settlement", + "btcPosture": "quoteable, payable, and deliverable through BTC finality gates", + "sourceVisibility": "source-bearing bundle is withheld until rights transfer and repository delivery", + "authoritativeEvidence": [ + "generated-proof", + "object-storage-root", + "ledger-readback", + "repository-delivery-receipt" + ], + "allowedClaimCategoryIds": [ + "protocol-law", + "preview-claim", + "quote-claim", + "rights-claim", + "delivery-claim" + ], + "forbiddenClaimIds": [ + "preview-discloses-source", + "payment-observed-is-finality" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:bf45b6177052304bc0e22015" + }, + { + "objectId": "SourceSafePreview", + "objectKind": "pre-settlement-disclosure", + "sourceSafeMeaning": "Preview is a source-safe explanation of measurements, quality, provenance, and quote readiness, not the AssetPack source.", + "lifecycleStateIds": [ + "after-preview", + "need-fit-assetpack-quoted" + ], + "btdPosture": "may show BTD volume/range posture source-safely", + "btcPosture": "may show quote readiness but not payment finality", + "sourceVisibility": "never contains protected source, unpaid AssetPack source, or source snippets", + "authoritativeEvidence": [ + "generated-proof", + "database-projection", + "telemetry-observability-only" + ], + "allowedClaimCategoryIds": [ + "preview-claim", + "product-guidance" + ], + "forbiddenClaimIds": [ + "preview-discloses-source", + "quote-is-payment" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:934a9711c71cc8de08bdc0e9" + }, + { + "objectId": "BtdScalarVolumeReceipt", + "objectKind": "measurement-volume", + "sourceSafeMeaning": "BTD scalar volume receipt records Need-relative weighted technical knowledge volume with deterministic measurement policy.", + "lifecycleStateIds": [ + "weighted-scalar-volume-computed", + "btd-quantized", + "btd-quote-bound" + ], + "btdPosture": "BTD volume is quote-bound before settlement and rights-bearing only after finality", + "btcPosture": "binds deterministic share-to-fee quote inputs", + "sourceVisibility": "measurement roots and formulas are source-safe; protected source is not serialized", + "authoritativeEvidence": [ + "canonical-specification", + "generated-proof", + "ledger-readback" + ], + "allowedClaimCategoryIds": [ + "protocol-law", + "quote-claim", + "operator-evidence" + ], + "forbiddenClaimIds": [ + "btd-is-only-a-read-right", + "btd-is-money", + "payment-observed-is-finality" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:5b220e572b10407b482ba536" + }, + { + "objectId": "BtcQuote", + "objectKind": "procurement-offer", + "sourceSafeMeaning": "BTC quote is a deterministic sats offer bound to BTD volume, policy, expiry, wallet authority, and proof roots.", + "lifecycleStateIds": [ + "btc-quote-issued", + "btc-quote-accepted", + "btc-quote-inactive" + ], + "btdPosture": "quote-bound BTD only; rights are unpaid and untransferred", + "btcPosture": "quote is not payment or final settlement", + "sourceVisibility": "quote is source-safe and carries no wallet private material", + "authoritativeEvidence": [ + "generated-proof", + "wallet-provider-receipt", + "ledger-readback" + ], + "allowedClaimCategoryIds": [ + "quote-claim", + "product-guidance", + "operator-evidence" + ], + "forbiddenClaimIds": [ + "quote-is-payment", + "server-custodies-wallet-private-material" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:af6fa28684903a53e2e16dd7" + }, + { + "objectId": "BtcSettlementReceipt", + "objectKind": "settlement-readback", + "sourceSafeMeaning": "BTC settlement receipt distinguishes quote, PSBT, broadcast, observation, finality, mismatch, repair, refund, and finalized settlement.", + "lifecycleStateIds": [ + "btc-payment-observed", + "btc-finality-confirmed", + "btc-settlement-finalized" + ], + "btdPosture": "authorizes BTD rights transfer only after finality and reconciliation", + "btcPosture": "BTC is settlement truth after finality and conservation readback", + "sourceVisibility": "private settlement payloads and wallet private material are never serialized", + "authoritativeEvidence": [ + "ledger-readback", + "wallet-provider-receipt", + "generated-proof" + ], + "allowedClaimCategoryIds": [ + "settlement-claim", + "operator-evidence", + "repair-claim" + ], + "forbiddenClaimIds": [ + "payment-observed-is-finality", + "server-custodies-wallet-private-material" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:1ca1fddd79704beee791a5ed" + }, + { + "objectId": "BtdRightsReceipt", + "objectKind": "rights-transfer", + "sourceSafeMeaning": "BTD rights receipt proves settled rights, source unlock authority, and ownership/read/use boundary for the paying Reader.", + "lifecycleStateIds": [ + "btd-rights-pending", + "btd-rights-transferred" + ], + "btdPosture": "rights-bearing BTD after BTC finality and transfer receipt", + "btcPosture": "depends on finalized settlement", + "sourceVisibility": "source unlock is authorized only to the entitled Reader boundary", + "authoritativeEvidence": [ + "ledger-readback", + "generated-proof", + "repository-delivery-receipt" + ], + "allowedClaimCategoryIds": [ + "rights-claim", + "delivery-claim", + "protocol-law" + ], + "forbiddenClaimIds": [ + "btd-is-only-a-read-right", + "payment-observed-is-finality" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:d1d96b42301d32c85be273ae" + }, + { + "objectId": "SourceUnlockDeliveryReceipt", + "objectKind": "delivery", + "sourceSafeMeaning": "Delivery receipt proves repository handoff of the source-bearing AssetPack only after settlement and rights transfer.", + "lifecycleStateIds": [ + "source-unlocked-delivery", + "compensated-and-reconciled" + ], + "btdPosture": "delivery is authorized by rights-bearing BTD", + "btcPosture": "requires finalized BTC settlement", + "sourceVisibility": "full source is visible only inside the entitled repository or delivery boundary", + "authoritativeEvidence": [ + "repository-delivery-receipt", + "object-storage-root", + "ledger-readback" + ], + "allowedClaimCategoryIds": [ + "delivery-claim", + "operator-evidence" + ], + "forbiddenClaimIds": [ + "preview-discloses-source", + "database-is-ledger-truth" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:9f013be0759bb933a9217135" + }, + { + "objectId": "SourceToSharesAllocation", + "objectKind": "contributor-allocation", + "sourceSafeMeaning": "Source-to-shares allocation routes post-finality contributor compensation from selected Fits and BTD range slices.", + "lifecycleStateIds": [ + "btd-source-to-shares-allocated", + "compensated-and-reconciled" + ], + "btdPosture": "uses settled BTD range slices as allocation context, not BTD size calculation", + "btcPosture": "depends on finalized BTC settlement and conservation", + "sourceVisibility": "allocation statements are source-safe and do not expose underlying source", + "authoritativeEvidence": [ + "ledger-readback", + "generated-proof", + "database-projection" + ], + "allowedClaimCategoryIds": [ + "compensation-claim", + "operator-evidence" + ], + "forbiddenClaimIds": [ + "database-is-ledger-truth", + "mainnet-value-is-admitted" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:e3170b70153a48f2d9a08bb7" + }, + { + "objectId": "ContributorCompensationStatement", + "objectKind": "compensation-readback", + "sourceSafeMeaning": "Contributor compensation statement is source-safe post-finality readback of BTC compensation routing and reconciliation posture.", + "lifecycleStateIds": [ + "btc-contributor-compensation-routable", + "compensated-and-reconciled", + "repair-required" + ], + "btdPosture": "references source-to-shares allocation context", + "btcPosture": "post-finality compensation or repair state only", + "sourceVisibility": "source-safe accounting only", + "authoritativeEvidence": [ + "ledger-readback", + "database-projection", + "generated-proof" + ], + "allowedClaimCategoryIds": [ + "compensation-claim", + "repair-claim" + ], + "forbiddenClaimIds": [ + "database-is-ledger-truth", + "mainnet-value-is-admitted" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:c63f3dc52c662638375d3fd6" + }, + { + "objectId": "ProofRoot", + "objectKind": "authority-evidence", + "sourceSafeMeaning": "Proof root identifies the evidence required to advance or explain state without serializing hidden payloads.", + "lifecycleStateIds": [ + "proof-recorded", + "proof-replayed", + "proof-repair-required" + ], + "btdPosture": "proof can support BTD measurement, quote, rights, and repair but is not BTD itself", + "btcPosture": "proof can support quote, observation, finality, and reconciliation but is not payment", + "sourceVisibility": "root hashes and evidence classes are source-safe unless entitled storage unlock exists", + "authoritativeEvidence": [ + "canonical-specification", + "generated-proof", + "ledger-readback" + ], + "allowedClaimCategoryIds": [ + "operator-evidence", + "repair-claim", + "protocol-law" + ], + "forbiddenClaimIds": [ + "telemetry-advances-state", + "database-is-ledger-truth" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:7794f9248f5b5c9a746b79d2" + }, + { + "objectId": "RepairCase", + "objectKind": "fail-closed-state", + "sourceSafeMeaning": "Repair case blocks advancement when evidence is missing, stale, contradictory, or policy-invalid.", + "lifecycleStateIds": [ + "repair-required", + "repair-replayed", + "repair-closed" + ], + "btdPosture": "BTD rights, source unlock, allocation, or quote state remains blocked until repair closes", + "btcPosture": "payment, refund, escalation, or compensation remains fail-closed until readback agrees", + "sourceVisibility": "failure class and proof roots only; no protected payload exposure", + "authoritativeEvidence": [ + "generated-proof", + "ledger-readback", + "database-projection", + "telemetry-observability-only" + ], + "allowedClaimCategoryIds": [ + "repair-claim", + "operator-evidence", + "product-guidance" + ], + "forbiddenClaimIds": [ + "telemetry-advances-state", + "database-is-ledger-truth" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:15124241647d22b7705dbd9e" + }, + { + "objectId": "InterfaceClaim", + "objectKind": "surface-statement", + "sourceSafeMeaning": "Interface claim is any public, product, API, MCP, ChatGPT App, Bitcode Chat, telemetry, or operator statement about protocol state.", + "lifecycleStateIds": [ + "before-settlement", + "after-preview", + "after-quote", + "after-payment-observation", + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "btdPosture": "must label whether BTD is potential, quote-bound, rights-pending, rights-transferred, allocation context, or repair", + "btcPosture": "must label whether BTC is quote, accepted quote, observed payment, finality, finalized settlement, compensation, refund, or repair", + "sourceVisibility": "claim projections must default to the narrowest source-safe disclosure boundary", + "authoritativeEvidence": [ + "canonical-specification", + "generated-proof", + "ledger-readback", + "database-projection", + "object-storage-root", + "wallet-provider-receipt", + "repository-delivery-receipt", + "telemetry-observability-only", + "interface-guidance-only", + "public-education-only" + ], + "allowedClaimCategoryIds": [ + "protocol-law", + "product-guidance", + "operator-evidence", + "investor-framing", + "telemetry-observability", + "preview-claim", + "quote-claim", + "settlement-claim", + "rights-claim", + "delivery-claim", + "compensation-claim", + "repair-claim" + ], + "forbiddenClaimIds": [ + "assetpack-is-raw-source", + "btd-is-only-a-read-right", + "btd-is-money", + "deposit-option-is-final-btd", + "preview-discloses-source", + "quote-is-payment", + "payment-observed-is-finality", + "database-is-ledger-truth", + "telemetry-advances-state", + "conversation-advances-state", + "investor-copy-is-protocol-law", + "mainnet-value-is-admitted", + "server-custodies-wallet-private-material" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-object-row:dedacd56568c334c9850c54d" + } + ], + "claimRows": [ + { + "claimId": "assetpack-is-commodity", + "claimCategoryId": "protocol-law", + "authorityId": "canonical-specification", + "statement": "AssetPack is the traded commodity and raw source is never the public commodity.", + "allowedSurfaces": [ + "BITCODE_SPEC_V46.md", + "/packs", + "/read", + "/deposit", + "public-docs", + "api-mcp", + "chatgpt-app", + "bitcode-chat" + ], + "disclosureBoundaryIds": [ + "before-settlement", + "after-preview", + "after-quote", + "after-payment-observation", + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "requiredEvidenceIds": [ + "canonical-specification", + "generated-proof" + ], + "forbiddenInterpretationIds": [ + "assetpack-is-raw-source", + "preview-discloses-source" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:831e35cadd835763825b5097" + }, + { + "claimId": "btd-is-weighted-scalar-volume-and-settled-rights", + "claimCategoryId": "protocol-law", + "authorityId": "canonical-specification", + "statement": "BTD is Need-relative weighted scalar knowledge-volume whose settled form carries rights, source unlock authority, and allocation context.", + "allowedSurfaces": [ + "BITCODE_SPEC_V46.md", + "/packs", + "/read", + "api-mcp", + "public-docs" + ], + "disclosureBoundaryIds": [ + "after-quote", + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "requiredEvidenceIds": [ + "canonical-specification", + "generated-proof", + "ledger-readback" + ], + "forbiddenInterpretationIds": [ + "btd-is-only-a-read-right", + "btd-is-money", + "deposit-option-is-final-btd" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:b1aa8015bf1b7976c49e2347" + }, + { + "claimId": "deposit-option-is-potential-supply", + "claimCategoryId": "product-guidance", + "authorityId": "interface-guidance-only", + "statement": "Deposit option may describe BTD potential, coverage, utility, criticality, and search posture but cannot claim final BTD or payment.", + "allowedSurfaces": [ + "/deposit", + "/packs", + "bitcode-chat", + "public-docs" + ], + "disclosureBoundaryIds": [ + "before-settlement", + "after-preview" + ], + "requiredEvidenceIds": [ + "object-storage-root", + "database-projection", + "generated-proof" + ], + "forbiddenInterpretationIds": [ + "deposit-option-is-final-btd", + "mainnet-value-is-admitted" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:13473ec4b0e29cbac2fc7ace" + }, + { + "claimId": "operator-evidence-is-source-safe-readback", + "claimCategoryId": "operator-evidence", + "authorityId": "generated-proof", + "statement": "Operator evidence may expose proof roots, state labels, repair blockers, and readback posture, but not hidden source or private payloads.", + "allowedSurfaces": [ + "operator-runbook", + "/packs", + "/read", + "/deposit", + "api-mcp" + ], + "disclosureBoundaryIds": [ + "before-settlement", + "after-preview", + "after-quote", + "after-payment-observation", + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "requiredEvidenceIds": [ + "generated-proof", + "ledger-readback", + "database-projection", + "object-storage-root" + ], + "forbiddenInterpretationIds": [ + "database-is-ledger-truth", + "telemetry-advances-state" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:bfb6ceba0c61a6a5378729ef" + }, + { + "claimId": "preview-is-source-safe-measurement", + "claimCategoryId": "preview-claim", + "authorityId": "generated-proof", + "statement": "Preview may expose measurements, quality, provenance, BTD posture, quote readiness, and proof roots, but not unpaid AssetPack source.", + "allowedSurfaces": [ + "/read", + "/packs", + "api-mcp", + "chatgpt-app", + "bitcode-chat" + ], + "disclosureBoundaryIds": [ + "after-preview", + "after-quote", + "after-payment-observation" + ], + "requiredEvidenceIds": [ + "generated-proof", + "database-projection", + "telemetry-observability-only" + ], + "forbiddenInterpretationIds": [ + "preview-discloses-source", + "quote-is-payment" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:101d60cd4703f8a2d9cc1423" + }, + { + "claimId": "quote-is-source-safe-offer", + "claimCategoryId": "quote-claim", + "authorityId": "generated-proof", + "statement": "BTC quote is a deterministic source-safe offer bound to reviewed Need, selected Fits, BTD volume, policy, network, expiry, and authority.", + "allowedSurfaces": [ + "/read", + "/packs", + "api-mcp", + "bitcode-chat" + ], + "disclosureBoundaryIds": [ + "after-quote" + ], + "requiredEvidenceIds": [ + "generated-proof", + "wallet-provider-receipt", + "database-projection" + ], + "forbiddenInterpretationIds": [ + "quote-is-payment", + "payment-observed-is-finality" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:7b347ebb9ccb51cb6cf600e5" + }, + { + "claimId": "payment-observation-is-not-finality", + "claimCategoryId": "settlement-claim", + "authorityId": "ledger-readback", + "statement": "Prepared, signed, broadcast, and observed BTC payment states cannot unlock source, transfer BTD rights, deliver, or compensate contributors.", + "allowedSurfaces": [ + "/read", + "/packs", + "api-mcp", + "operator-runbook" + ], + "disclosureBoundaryIds": [ + "after-payment-observation", + "after-finality" + ], + "requiredEvidenceIds": [ + "ledger-readback", + "wallet-provider-receipt", + "generated-proof" + ], + "forbiddenInterpretationIds": [ + "payment-observed-is-finality", + "database-is-ledger-truth" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:28521767bcbd69422d401689" + }, + { + "claimId": "finality-authorizes-rights-and-delivery", + "claimCategoryId": "rights-claim", + "authorityId": "ledger-readback", + "statement": "Confirmed BTC finality plus reconciliation authorizes BTD rights transfer, source unlock, and repository delivery to the entitled Reader.", + "allowedSurfaces": [ + "/read", + "/packs", + "api-mcp", + "operator-runbook" + ], + "disclosureBoundaryIds": [ + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "requiredEvidenceIds": [ + "ledger-readback", + "object-storage-root", + "repository-delivery-receipt" + ], + "forbiddenInterpretationIds": [ + "payment-observed-is-finality", + "database-is-ledger-truth" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:67b856e3b7e19d5a21f2ed2f" + }, + { + "claimId": "delivery-is-entitled-source-unlock", + "claimCategoryId": "delivery-claim", + "authorityId": "repository-delivery-receipt", + "statement": "Repository delivery is the entitled source-unlock boundary after BTC finality and BTD rights transfer, not a preview state.", + "allowedSurfaces": [ + "/read", + "/packs", + "api-mcp", + "operator-runbook" + ], + "disclosureBoundaryIds": [ + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "requiredEvidenceIds": [ + "repository-delivery-receipt", + "object-storage-root", + "ledger-readback" + ], + "forbiddenInterpretationIds": [ + "preview-discloses-source", + "payment-observed-is-finality" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:4a2a46f774d2b26ba2ecca00" + }, + { + "claimId": "compensation-follows-source-to-shares", + "claimCategoryId": "compensation-claim", + "authorityId": "ledger-readback", + "statement": "Contributor compensation follows final settlement, source-to-shares allocation, BTD range slices, and reconciliation readback.", + "allowedSurfaces": [ + "/packs", + "/deposit", + "api-mcp", + "operator-runbook" + ], + "disclosureBoundaryIds": [ + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "requiredEvidenceIds": [ + "ledger-readback", + "database-projection", + "generated-proof" + ], + "forbiddenInterpretationIds": [ + "database-is-ledger-truth", + "mainnet-value-is-admitted" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:f65f6a098bb97b12cbd89196" + }, + { + "claimId": "telemetry-is-observability-only", + "claimCategoryId": "telemetry-observability", + "authorityId": "telemetry-observability-only", + "statement": "Telemetry can explain progress and repair blockers, but cannot alone advance AssetPack lifecycle, BTC settlement, BTD rights, or delivery.", + "allowedSurfaces": [ + "/packs", + "/read", + "/deposit", + "bitcode-chat", + "operator-runbook" + ], + "disclosureBoundaryIds": [ + "before-settlement", + "after-preview", + "after-quote", + "after-payment-observation", + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "requiredEvidenceIds": [ + "telemetry-observability-only", + "generated-proof" + ], + "forbiddenInterpretationIds": [ + "telemetry-advances-state", + "conversation-advances-state" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:d92054eba5459807cc1832fd" + }, + { + "claimId": "investor-framing-is-not-protocol-law", + "claimCategoryId": "investor-framing", + "authorityId": "public-education-only", + "statement": "Investor and landing-page framing may explain Bitcode commercially, but formal protocol law comes only from the canonical specification family and proof readback.", + "allowedSurfaces": [ + "landing-page", + "public-docs", + "pitch-material" + ], + "disclosureBoundaryIds": [ + "before-settlement" + ], + "requiredEvidenceIds": [ + "canonical-specification" + ], + "forbiddenInterpretationIds": [ + "investor-copy-is-protocol-law", + "mainnet-value-is-admitted" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:44790e02e61bf6926abb06e2" + }, + { + "claimId": "repair-fails-closed", + "claimCategoryId": "repair-claim", + "authorityId": "generated-proof", + "statement": "Missing, stale, contradictory, or policy-invalid evidence returns the object or claim to repair-required and the narrowest source-safe boundary.", + "allowedSurfaces": [ + "/packs", + "/read", + "/deposit", + "api-mcp", + "operator-runbook", + "bitcode-chat" + ], + "disclosureBoundaryIds": [ + "before-settlement", + "after-preview", + "after-quote", + "after-payment-observation", + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "requiredEvidenceIds": [ + "generated-proof", + "ledger-readback", + "database-projection", + "telemetry-observability-only" + ], + "forbiddenInterpretationIds": [ + "telemetry-advances-state", + "database-is-ledger-truth" + ], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-protocol-claim-row:517e99207fb1e524f72ca323" + } + ], + "coverage": { + "objectCount": 19, + "claimCount": 13, + "objectIds": [ + "AssetPack", + "DepositAssetPackOption", + "DepositoryAssetPack", + "ReadRequest", + "ReviewedNeed", + "FindingFitsReceipt", + "SelectedFitSet", + "NeedFitAssetPack", + "SourceSafePreview", + "BtdScalarVolumeReceipt", + "BtcQuote", + "BtcSettlementReceipt", + "BtdRightsReceipt", + "SourceUnlockDeliveryReceipt", + "SourceToSharesAllocation", + "ContributorCompensationStatement", + "ProofRoot", + "RepairCase", + "InterfaceClaim" + ], + "claimCategoryIds": [ + "protocol-law", + "product-guidance", + "operator-evidence", + "investor-framing", + "telemetry-observability", + "preview-claim", + "quote-claim", + "settlement-claim", + "rights-claim", + "delivery-claim", + "compensation-claim", + "repair-claim" + ], + "claimAuthorityIds": [ + "canonical-specification", + "generated-proof", + "ledger-readback", + "database-projection", + "object-storage-root", + "wallet-provider-receipt", + "repository-delivery-receipt", + "telemetry-observability-only", + "interface-guidance-only", + "public-education-only" + ], + "disclosureBoundaryIds": [ + "before-settlement", + "after-preview", + "after-quote", + "after-payment-observation", + "after-finality", + "after-btd-rights-transfer", + "after-repository-delivery" + ], + "forbiddenClaimIds": [ + "assetpack-is-raw-source", + "btd-is-only-a-read-right", + "btd-is-money", + "deposit-option-is-final-btd", + "preview-discloses-source", + "quote-is-payment", + "payment-observed-is-finality", + "database-is-ledger-truth", + "telemetry-advances-state", + "conversation-advances-state", + "investor-copy-is-protocol-law", + "mainnet-value-is-admitted", + "server-custodies-wallet-private-material" + ], + "sourceSafeFieldIds": [ + "objectId", + "claimId", + "claimCategoryId", + "authorityId", + "surfaceId", + "stateId", + "measurementRoot", + "proofRoot", + "ledgerRoot", + "databaseProjectionRoot", + "storageRoot", + "walletReceiptRoot", + "repositoryReceiptRoot", + "telemetryRoot", + "repairCaseId" + ], + "privatePayloadIds": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "assetPackCommodityCovered": true, + "btdScalarVolumeCovered": true, + "btcQuoteSettlementCovered": true, + "sourceUnlockDeliveryCovered": true, + "contributorCompensationCovered": true, + "interfaceClaimsCovered": true, + "protocolLawClaimCovered": true, + "productGuidanceClaimCovered": true, + "operatorEvidenceClaimCovered": true, + "investorFramingClaimCovered": true, + "telemetryObservabilityClaimCovered": true, + "previewQuoteSettlementRightsDeliveryCovered": true, + "compensationRepairClaimsCovered": true, + "noForbiddenClaimCollapsed": true, + "sourcePredicates": [ + { + "id": "active-canon-pointer-supports-v46-draft-or-later", + "sourcePath": "BITCODE_SPEC.txt", + "passed": true + }, + { + "id": "spec-defines-comprehension-object-model", + "sourcePath": "BITCODE_SPEC_V46.md", + "passed": true + }, + { + "id": "spec-defines-claim-taxonomy-law", + "sourcePath": "BITCODE_SPEC_V46.md", + "passed": true + }, + { + "id": "delta-documents-gate2", + "sourcePath": "BITCODE_SPEC_V46_DELTA.md", + "passed": true + }, + { + "id": "notes-record-gate2-atom", + "sourcePath": "BITCODE_SPEC_V46_NOTES.md", + "passed": true + }, + { + "id": "parity-closes-gate2-row", + "sourcePath": "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "passed": true + }, + { + "id": "roadmap-records-gate2", + "sourcePath": "SPECIFICATIONS_ROADMAP.md", + "passed": true + }, + { + "id": "readmes-document-gate2", + "sourcePath": "README.md", + "passed": true + }, + { + "id": "package-exports-wired", + "sourcePath": "packages/protocol/src/index.js", + "passed": true + }, + { + "id": "generator-and-checker-exist", + "sourcePath": "scripts/generate-v46-protocol-comprehension-object-model.mjs", + "passed": true + }, + { + "id": "package-script-wired", + "sourcePath": "package.json", + "passed": true + }, + { + "id": "gate-and-canon-workflows-run-gate2", + "sourcePath": ".github/workflows/bitcode-gate-quality.yml", + "passed": true + } + ], + "failedPredicateIds": [], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false + }, + "passed": true, + "closureReading": "V46 Gate 2 closes the source-safe comprehension object model and claim taxonomy; it does not authorize runtime behavior or V46 promotion." +} diff --git a/.bitcode/v46-public-operator-claim-boundaries.json b/.bitcode/v46-public-operator-claim-boundaries.json new file mode 100644 index 000000000..d39a08d6e --- /dev/null +++ b/.bitcode/v46-public-operator-claim-boundaries.json @@ -0,0 +1,884 @@ +{ + "artifactId": "v46-public-operator-claim-boundaries", + "artifactPath": ".bitcode/v46-public-operator-claim-boundaries.json", + "artifactRoot": "v46-public-operator-claim-boundaries:513e7199f07c21dcdff43c6d", + "schemaId": "bitcode.v46.publicOperatorClaimBoundaries.v1", + "version": "V46", + "currentTarget": "V45", + "sourceSafetyVerdict": "source-safe-public-operator-claim-boundary-metadata", + "sourceRoots": { + "activePointer": "BITCODE_SPEC.txt:820a850b09546da1a1a1c447", + "spec": "BITCODE_SPEC_V46.md:48121ff59f812f15a1b3b1f7", + "delta": "BITCODE_SPEC_V46_DELTA.md:a16a16db40d4eeae612a0657", + "notes": "BITCODE_SPEC_V46_NOTES.md:cca70aca3566132e7026351c", + "parity": "BITCODE_SPEC_V46_PARITY_MATRIX.md:91b47eeaa106639d2d21856b", + "roadmap": "SPECIFICATIONS_ROADMAP.md:64b11cb963635e16fd70bf48", + "readme": "README.md:d28ec731634e03953d8adfe6", + "protocolReadme": "packages/protocol/README.md:f5b175049f4f4e8df179e184", + "packageJson": "package.json:b79014968c556bc1b43ab341", + "packageIndex": "packages/protocol/src/index.js:1f16ea428bd71351a1292cb6", + "packageTypes": "packages/protocol/src/index.d.ts:278dfc652c621533b5e86f4d", + "packageSource": "packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js:6c4d8878be955f0fc6aa50f5", + "packageTest": "packages/protocol/test/v46-public-operator-claim-boundaries.test.js:0afae65791ef7d7081b2a87a", + "generator": "scripts/generate-v46-public-operator-claim-boundaries.mjs:5a7e5f8c9013c83e3c3818fb", + "checker": "scripts/check-v46-gate3-public-operator-claim-boundaries.mjs:b958086681492633958639bf", + "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml:e5de1dddfaeeb0ee525b0c0f", + "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml:43cc4ded2bd9757dda9091dc", + "publicCopy": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts:9b39322f872b899e1c752701", + "publicExplainers": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts:4e3b84dda50607ea8ea2b73e", + "landingShared": "uapi/app/(root)/components/landing/marketing-landing-shared.tsx:27c33bd46ea46fd7608fd093", + "landingPreview": "uapi/app/(root)/components/landing/MarketingLandingTerminalPreview.tsx:e3fb5b38877c959e7eb0e7e7", + "docsPage": "uapi/app/docs/page.tsx:75e5011c78a308e60f95cbd5", + "docsHome": "uapi/app/(root)/components/PublicDocsPageContent.tsx:6efbf77a6f292e9e0c25b70e", + "docsContent": "uapi/app/docs/bitcode-docs-content.ts:d45a40837e0e65b10f5ef333", + "docsRoute": "uapi/app/docs/[slug]/page.tsx:af7f8bedcf6b3016f73046e8", + "publicDocsUnitTest": "uapi/tests/publicDocsPageContent.test.tsx:f4605b2a539a93b9e1e1e36a", + "docsContentUnitTest": "uapi/tests/bitcodeDocsContent.test.tsx:2ec2330df086eb414078ef45", + "operatorReadme": "internal-docs/README.md:b723dde2988124dc8de83c56" + }, + "surfaceIds": [ + "landing-page", + "landing-preview", + "public-docs-home", + "public-docs-content-model", + "public-docs-protocol-page", + "operator-internal-readme", + "root-readme", + "protocol-package-readme", + "v46-spec-family" + ], + "surfaceKindIds": [ + "landing", + "public-docs", + "operator-docs", + "package-docs", + "formal-specification" + ], + "allowedDataClasses": [ + "route-links", + "plain-language-protocol-guidance", + "source-safe-measurements", + "state-labels", + "claim-categories", + "claim-authority-ids", + "proof-root-ids", + "ledger-readback-posture", + "database-projection-posture", + "object-storage-root-posture", + "wallet-provider-receipt-posture", + "repository-delivery-receipt-posture", + "repair-state-labels" + ], + "privatePayloadIdsNeverSerialized": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "forbiddenClaimIds": [ + "assetpack-is-raw-source", + "btd-is-only-a-read-right", + "btd-is-money", + "deposit-option-is-final-btd", + "preview-discloses-source", + "quote-is-payment", + "payment-observed-is-finality", + "database-is-ledger-truth", + "telemetry-advances-state", + "conversation-advances-state", + "investor-copy-is-protocol-law", + "mainnet-value-is-admitted", + "server-custodies-wallet-private-material" + ], + "forbiddenPublicOperatorPhrases": [ + "Source Shares and the Bitcode Exchange", + "Learn Bitcode from Source Shares to proof", + "Map the V26 Protocol canon", + "V26 coverage", + "BTD is money", + "BTD is only a read right", + "preview discloses source", + "quote is payment", + "payment observation is finality", + "database is ledger truth", + "telemetry advances state", + "server custodies wallet private material", + "value-bearing mainnet operation is live" + ], + "surfaceRows": [ + { + "surfaceId": "landing-page", + "surfaceKindId": "landing", + "audience": [ + "first-time-reader", + "enterprise-buyer", + "depositor", + "investor" + ], + "sourcePaths": [ + "uapi/components/base/bitcode/layout/bitcode-public-copy.ts", + "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts", + "uapi/app/(root)/components/landing/marketing-landing-shared.tsx" + ], + "claimIds": [ + "assetpack-is-commodity", + "btd-is-weighted-scalar-volume-and-settled-rights", + "finality-authorizes-rights-and-delivery", + "investor-framing-is-not-protocol-law" + ], + "claimCategoryIds": [ + "product-guidance", + "investor-framing", + "protocol-law" + ], + "authorityIds": [ + "public-education-only", + "interface-guidance-only", + "canonical-specification" + ], + "requiredCopyTokens": [ + "AssetPacks for measured technical intelligence", + "BTD records scalar knowledge volume and rights", + "BTC settles value transfer", + "BTC COMPENSATION", + "Protocol law and proof readback decide state" + ], + "allowedDataClasses": [ + "route-links", + "plain-language-protocol-guidance", + "state-labels" + ], + "blockedDataClasses": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "operatorReading": "Landing copy may explain Bitcode commercially, but it remains public education and cannot claim protocol-law authority or source visibility.", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-public-operator-surface-row:96644d1b1396e758af7375bf" + }, + { + "surfaceId": "landing-preview", + "surfaceKindId": "landing", + "audience": [ + "first-time-reader", + "operator" + ], + "sourcePaths": [ + "uapi/app/(root)/components/landing/MarketingLandingTerminalPreview.tsx", + "uapi/components/base/bitcode/layout/bitcode-public-copy.ts", + "uapi/app/(root)/components/landing/marketing-landing-shared.tsx" + ], + "claimIds": [ + "preview-is-source-safe-measurement", + "quote-is-source-safe-offer", + "telemetry-is-observability-only" + ], + "claimCategoryIds": [ + "preview-claim", + "quote-claim", + "telemetry-observability", + "product-guidance" + ], + "authorityIds": [ + "public-education-only", + "interface-guidance-only", + "telemetry-observability-only" + ], + "requiredCopyTokens": [ + "The preview keeps AssetPacks, source-safe measurements, and settlement posture legible", + "static preview", + "Packs", + "Deposit", + "Read" + ], + "allowedDataClasses": [ + "state-labels", + "source-safe-measurements", + "proof-root-ids" + ], + "blockedDataClasses": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "operatorReading": "Landing previews can show representative state labels and measurements, never source-bearing AssetPack contents or payment finality.", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-public-operator-surface-row:19753abdff58286ccfeddd83" + }, + { + "surfaceId": "public-docs-home", + "surfaceKindId": "public-docs", + "audience": [ + "operator", + "developer", + "enterprise-buyer", + "depositor" + ], + "sourcePaths": [ + "uapi/app/docs/page.tsx", + "uapi/app/(root)/components/PublicDocsPageContent.tsx", + "uapi/tests/publicDocsPageContent.test.tsx" + ], + "claimIds": [ + "assetpack-is-commodity", + "btd-is-weighted-scalar-volume-and-settled-rights", + "finality-authorizes-rights-and-delivery", + "repair-fails-closed" + ], + "claimCategoryIds": [ + "product-guidance", + "protocol-law", + "operator-evidence", + "repair-claim" + ], + "authorityIds": [ + "public-education-only", + "canonical-specification", + "generated-proof" + ], + "requiredCopyTokens": [ + "Learn Bitcode from AssetPacks to proof.", + "V45 / V46 claim boundary", + "Protocol docs map back to active law.", + "Public docs explain; proof readback decides." + ], + "allowedDataClasses": [ + "route-links", + "claim-categories", + "claim-authority-ids", + "proof-root-ids" + ], + "blockedDataClasses": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "operatorReading": "Docs home teaches route order and claim authority while reminding users that docs explain rather than advance state.", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-public-operator-surface-row:fff7a641319764f4eaec269e" + }, + { + "surfaceId": "public-docs-content-model", + "surfaceKindId": "public-docs", + "audience": [ + "operator", + "developer", + "protocol-reviewer" + ], + "sourcePaths": [ + "uapi/app/docs/bitcode-docs-content.ts", + "uapi/tests/bitcodeDocsContent.test.tsx" + ], + "claimIds": [ + "assetpack-is-commodity", + "preview-is-source-safe-measurement", + "btd-is-weighted-scalar-volume-and-settled-rights", + "operator-evidence-is-source-safe-readback" + ], + "claimCategoryIds": [ + "protocol-law", + "product-guidance", + "preview-claim", + "operator-evidence" + ], + "authorityIds": [ + "canonical-specification", + "public-education-only", + "generated-proof" + ], + "requiredCopyTokens": [ + "Public docs expose guidance and proof posture, not protected source", + "AssetPacks, BTD, and the Bitcode activity ledger", + "Map the active Protocol canon", + "V46 claim boundary" + ], + "allowedDataClasses": [ + "plain-language-protocol-guidance", + "source-safe-measurements", + "repair-state-labels" + ], + "blockedDataClasses": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "operatorReading": "Docs content can describe objects, routes, and proof semantics while keeping source, prompts, provider responses, and secrets out.", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-public-operator-surface-row:5902939382cbb8f50f17263c" + }, + { + "surfaceId": "public-docs-protocol-page", + "surfaceKindId": "public-docs", + "audience": [ + "operator", + "protocol-reviewer", + "implementation-reviewer" + ], + "sourcePaths": [ + "uapi/app/docs/bitcode-docs-content.ts", + "uapi/app/docs/[slug]/page.tsx" + ], + "claimIds": [ + "operator-evidence-is-source-safe-readback", + "repair-fails-closed", + "investor-framing-is-not-protocol-law" + ], + "claimCategoryIds": [ + "protocol-law", + "repair-claim", + "product-guidance" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "public-education-only" + ], + "requiredCopyTokens": [ + "active Protocol canon", + "V45 is active canon while V46 is draft target", + "Public docs are not protocol law", + "protocol-v26" + ], + "allowedDataClasses": [ + "claim-authority-ids", + "proof-root-ids", + "state-labels" + ], + "blockedDataClasses": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "operatorReading": "The protocol article teaches active-canon posture and supports the legacy protocol-v26 slug only as a compatibility alias.", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-public-operator-surface-row:6067aa5451c372d1d3d4f6d5" + }, + { + "surfaceId": "operator-internal-readme", + "surfaceKindId": "operator-docs", + "audience": [ + "operator", + "maintainer", + "incident-reviewer" + ], + "sourcePaths": [ + "internal-docs/README.md" + ], + "claimIds": [ + "telemetry-is-observability-only", + "repair-fails-closed", + "operator-evidence-is-source-safe-readback" + ], + "claimCategoryIds": [ + "operator-evidence", + "telemetry-observability", + "repair-claim" + ], + "authorityIds": [ + "generated-proof", + "telemetry-observability-only", + "canonical-specification" + ], + "requiredCopyTokens": [ + "resolves to `V46`", + "promoted V46 canon", + "Operator notes may name proof roots", + "Operator notes must not record secret values" + ], + "allowedDataClasses": [ + "proof-root-ids", + "repair-state-labels", + "state-labels", + "claim-authority-ids" + ], + "blockedDataClasses": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "operatorReading": "Internal operator docs may guide repair and evidence triage, but they cannot become canonical law or store source-bearing/private payloads.", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-public-operator-surface-row:cbd4c76fd08cba132fe8abc0" + }, + { + "surfaceId": "root-readme", + "surfaceKindId": "package-docs", + "audience": [ + "contributor", + "operator", + "maintainer" + ], + "sourcePaths": [ + "README.md" + ], + "claimIds": [ + "assetpack-is-commodity", + "btd-is-weighted-scalar-volume-and-settled-rights", + "repair-fails-closed" + ], + "claimCategoryIds": [ + "product-guidance", + "operator-evidence", + "protocol-law" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "interface-guidance-only" + ], + "requiredCopyTokens": [ + "V46 Gate 3 adds `V46PublicOperatorClaimBoundaries`", + ".bitcode/v46-public-operator-claim-boundaries.json", + "public docs, landing, and operator docs" + ], + "allowedDataClasses": [ + "plain-language-protocol-guidance", + "claim-categories", + "proof-root-ids" + ], + "blockedDataClasses": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "operatorReading": "Root README records the gate artifact and verification surface without claiming runtime promotion.", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-public-operator-surface-row:078f94aa472a5895a532ca22" + }, + { + "surfaceId": "protocol-package-readme", + "surfaceKindId": "package-docs", + "audience": [ + "package-consumer", + "maintainer", + "operator" + ], + "sourcePaths": [ + "packages/protocol/README.md" + ], + "claimIds": [ + "assetpack-is-commodity", + "btd-is-weighted-scalar-volume-and-settled-rights", + "repair-fails-closed" + ], + "claimCategoryIds": [ + "product-guidance", + "operator-evidence", + "protocol-law" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof", + "interface-guidance-only" + ], + "requiredCopyTokens": [ + "V46 Gate 3 adds `V46PublicOperatorClaimBoundaries`", + "source-safe public/operator claim boundary metadata", + "buildV46PublicOperatorClaimBoundaries" + ], + "allowedDataClasses": [ + "plain-language-protocol-guidance", + "claim-categories", + "proof-root-ids" + ], + "blockedDataClasses": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "operatorReading": "Protocol package README documents the exported builder and source-safe artifact for package consumers.", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-public-operator-surface-row:4c38766517436e72362ef53b" + }, + { + "surfaceId": "v46-spec-family", + "surfaceKindId": "formal-specification", + "audience": [ + "protocol-reviewer", + "operator", + "implementation-reviewer" + ], + "sourcePaths": [ + "BITCODE_SPEC_V46.md", + "BITCODE_SPEC_V46_DELTA.md", + "BITCODE_SPEC_V46_NOTES.md", + "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "SPECIFICATIONS_ROADMAP.md" + ], + "claimIds": [ + "assetpack-is-commodity", + "btd-is-weighted-scalar-volume-and-settled-rights", + "finality-authorizes-rights-and-delivery", + "investor-framing-is-not-protocol-law", + "repair-fails-closed" + ], + "claimCategoryIds": [ + "protocol-law", + "operator-evidence", + "investor-framing", + "repair-claim" + ], + "authorityIds": [ + "canonical-specification", + "generated-proof" + ], + "requiredCopyTokens": [ + "V46 public/operator claim boundary law", + "Gate 3: Public Docs, Landing, And Operator Claim Boundaries", + ".bitcode/v46-public-operator-claim-boundaries.json", + "V46 Gate 3 closure anchor" + ], + "allowedDataClasses": [ + "claim-categories", + "claim-authority-ids", + "proof-root-ids", + "state-labels" + ], + "blockedDataClasses": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "operatorReading": "The V46 spec family is the draft authority for Gate 3 and remains subordinate to V45 until promotion.", + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "rowRoot": "v46-public-operator-surface-row:bdcbe203b847d00bf294435d" + } + ], + "coverage": { + "surfaceCount": 9, + "surfaceIds": [ + "landing-page", + "landing-preview", + "public-docs-home", + "public-docs-content-model", + "public-docs-protocol-page", + "operator-internal-readme", + "root-readme", + "protocol-package-readme", + "v46-spec-family" + ], + "surfaceKindIds": [ + "landing", + "public-docs", + "operator-docs", + "package-docs", + "formal-specification" + ], + "claimIdsUsed": [ + "assetpack-is-commodity", + "btd-is-weighted-scalar-volume-and-settled-rights", + "finality-authorizes-rights-and-delivery", + "investor-framing-is-not-protocol-law", + "preview-is-source-safe-measurement", + "quote-is-source-safe-offer", + "telemetry-is-observability-only", + "repair-fails-closed", + "operator-evidence-is-source-safe-readback" + ], + "categoryIdsUsed": [ + "product-guidance", + "investor-framing", + "protocol-law", + "preview-claim", + "quote-claim", + "telemetry-observability", + "operator-evidence", + "repair-claim" + ], + "authorityIdsUsed": [ + "public-education-only", + "interface-guidance-only", + "canonical-specification", + "telemetry-observability-only", + "generated-proof" + ], + "objectModelArtifactPath": ".bitcode/v46-protocol-comprehension-object-model.json", + "forbiddenClaimIds": [ + "assetpack-is-raw-source", + "btd-is-only-a-read-right", + "btd-is-money", + "deposit-option-is-final-btd", + "preview-discloses-source", + "quote-is-payment", + "payment-observed-is-finality", + "database-is-ledger-truth", + "telemetry-advances-state", + "conversation-advances-state", + "investor-copy-is-protocol-law", + "mainnet-value-is-admitted", + "server-custodies-wallet-private-material" + ], + "privatePayloadIds": [ + "protected-source-payloads", + "unpaid-assetpack-source", + "source-snippets", + "raw-prompts", + "interpolated-prompts", + "raw-provider-responses", + "credentials", + "wallet-private-material", + "private-settlement-payloads", + "private-read-context", + "value-bearing-mainnet-admission" + ], + "allowedDataClasses": [ + "route-links", + "plain-language-protocol-guidance", + "source-safe-measurements", + "state-labels", + "claim-categories", + "claim-authority-ids", + "proof-root-ids", + "ledger-readback-posture", + "database-projection-posture", + "object-storage-root-posture", + "wallet-provider-receipt-posture", + "repository-delivery-receipt-posture", + "repair-state-labels" + ], + "landingCovered": true, + "publicDocsCovered": true, + "operatorDocsCovered": true, + "readmesCovered": true, + "specFamilyCovered": true, + "requiredClaimCategoriesCovered": true, + "requiredClaimAuthoritiesCovered": true, + "allClaimIdsKnown": true, + "allCategoryIdsKnown": true, + "allAuthorityIdsKnown": true, + "sourcePredicates": [ + { + "id": "active-canon-pointer-supports-v46-draft-or-later", + "sourcePath": "BITCODE_SPEC.txt", + "passed": true + }, + { + "id": "spec-defines-public-operator-claim-boundary-law", + "sourcePath": "BITCODE_SPEC_V46.md", + "passed": true + }, + { + "id": "delta-documents-gate3", + "sourcePath": "BITCODE_SPEC_V46_DELTA.md", + "passed": true + }, + { + "id": "notes-record-gate3-atom", + "sourcePath": "BITCODE_SPEC_V46_NOTES.md", + "passed": true + }, + { + "id": "parity-closes-gate3-row", + "sourcePath": "BITCODE_SPEC_V46_PARITY_MATRIX.md", + "passed": true + }, + { + "id": "roadmap-records-gate3", + "sourcePath": "SPECIFICATIONS_ROADMAP.md", + "passed": true + }, + { + "id": "landing-copy-uses-current-claims", + "sourcePath": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts", + "passed": true + }, + { + "id": "public-docs-home-uses-current-claims", + "sourcePath": "uapi/app/(root)/components/PublicDocsPageContent.tsx", + "passed": true + }, + { + "id": "public-docs-content-uses-current-protocol-page", + "sourcePath": "uapi/app/docs/bitcode-docs-content.ts", + "passed": true + }, + { + "id": "operator-readme-uses-current-claim-boundary", + "sourcePath": "internal-docs/README.md", + "passed": true + }, + { + "id": "readmes-document-gate3", + "sourcePath": "README.md", + "passed": true + }, + { + "id": "package-exports-wired", + "sourcePath": "packages/protocol/src/index.js", + "passed": true + }, + { + "id": "generator-and-checker-exist", + "sourcePath": "scripts/generate-v46-public-operator-claim-boundaries.mjs", + "passed": true + }, + { + "id": "package-script-wired", + "sourcePath": "package.json", + "passed": true + }, + { + "id": "gate-and-canon-workflows-run-gate3", + "sourcePath": ".github/workflows/bitcode-gate-quality.yml", + "passed": true + } + ], + "failedPredicateIds": [], + "sourceSafeMetadataOnly": true, + "protectedSourceVisible": false, + "unpaidAssetPackSourceVisible": false, + "rawPromptVisible": false, + "rawProviderResponseVisible": false, + "credentialsSerialized": false, + "walletPrivateMaterialVisible": false, + "valueBearingMainnetAdmitted": false, + "forbiddenPhraseHits": [], + "secretMarkerHits": [], + "rowsMissingRequiredCopy": [] + }, + "passed": true, + "closureReading": "V46 Gate 3 closes source-safe public docs, landing, and operator claim boundaries; public/operator surfaces explain Bitcode but proof readback decides protocol state." +} diff --git a/.bitcode/v46-spec-family-report.json b/.bitcode/v46-spec-family-report.json new file mode 100644 index 000000000..35dfff59d --- /dev/null +++ b/.bitcode/v46-spec-family-report.json @@ -0,0 +1,34 @@ +{ + "reportId": "v46-spec-family-report", + "version": "V46", + "proofSourceCommit": "40a32e9d61a64130c958eda1498812e25a682653", + "generatedAt": "2026-06-02T14:25:14-03:00", + "generatorId": "bitcode.proven-generator.v1", + "worktreeState": "clean", + "checkedVersion": "V46", + "mode": "promoted", + "currentTarget": "V46", + "pointerVersion": "V46", + "passed": true, + "failureCount": 0, + "failures": [], + "requiredFiles": [ + "BITCODE_SPEC_V46.md", + "BITCODE_SPEC_V46_DELTA.md", + "BITCODE_SPEC_V46_NOTES.md", + "BITCODE_SPEC_V46_PARITY_MATRIX.md" + ], + "supportFiles": [ + "BITCODE_SPECIFYING.md", + "BITCODE_SPEC_TEMPLATEGUIDE.md" + ], + "requiredStatusLabelCount": 4, + "requiredPromotedStatusLabelCount": 1, + "requiredSpecSectionCount": 18, + "requiredAppendixSectionCount": 14, + "requiredProofFamilyCount": 9, + "requiredGeneratedArtifactCatalogSectionCount": 9, + "requiredGeneratedArtifactPathCount": 9, + "requiredNotesSectionCount": 4, + "requiredSubsystemCoverageCount": 18 +} diff --git a/.github/workflows/bitcode-canon-quality.yml b/.github/workflows/bitcode-canon-quality.yml index f813c6574..78c2c303e 100644 --- a/.github/workflows/bitcode-canon-quality.yml +++ b/.github/workflows/bitcode-canon-quality.yml @@ -414,9 +414,41 @@ jobs: node scripts/check-bitcode-canonical-inputs.mjs --current-target V45 node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V45 --draft-target V46 node scripts/check-v45-gate18-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests - if [ -f scripts/check-v45-gate19-promotion-addendum.mjs ]; then + if [ ! -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v45-gate19-promotion-addendum.mjs ]; then node scripts/check-v45-gate19-promotion-addendum.mjs --skip-branch-check --skip-package-tests fi + if [ -f BITCODE_SPEC_V46.md ]; then + node scripts/check-bitcode-spec-family.mjs --version V46 --mode draft --current-target V45 + if [ -f scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs ]; then + node scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs --skip-branch-check + fi + if [ -f scripts/check-v46-gate2-protocol-comprehension-object-model.mjs ]; then + node scripts/check-v46-gate2-protocol-comprehension-object-model.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate3-public-operator-claim-boundaries.mjs ]; then + node scripts/check-v46-gate3-public-operator-claim-boundaries.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate4-product-route-comprehension-readback.mjs ]; then + node scripts/check-v46-gate4-product-route-comprehension-readback.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate5-interface-claim-contracts.mjs ]; then + node scripts/check-v46-gate5-interface-claim-contracts.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate6-proof-readback-operator-explanation.mjs ]; then + node scripts/check-v46-gate6-proof-readback-operator-explanation.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs ]; then + node scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate8-promotion-readiness.mjs ]; then + node scripts/check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests + fi + fi + elif [ "$POINTER" = "V46" ]; then + node scripts/check-bitcode-spec-family.mjs --version V46 --mode promoted --current-target V46 + node scripts/check-bitcode-canonical-inputs.mjs --current-target V46 + node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V46 --draft-target V47 + node scripts/check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests else echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2 exit 1 @@ -583,7 +615,15 @@ jobs: node scripts/check-bitcode-spec-family.mjs --version V45 --mode draft --current-target V44 fi ;; + spec:\ V46*|spec:\ v46*) + POINTER="$(cat BITCODE_SPEC.txt)" + if [ "$POINTER" = "V46" ]; then + node scripts/check-bitcode-spec-family.mjs --version V46 --mode promoted --current-target V46 + else + node scripts/check-bitcode-spec-family.mjs --version V46 --mode draft --current-target V45 + fi + ;; *) - echo "Skipping strict spec-title conformance; title is not a V29/V30/V31/V32/V33/V34/V35/V36/V37/V38/V39/V40/V41/V42/V43/V44/V45 spec change." + echo "Skipping strict spec-title conformance; title is not a V29/V30/V31/V32/V33/V34/V35/V36/V37/V38/V39/V40/V41/V42/V43/V44/V45/V46 spec change." ;; esac diff --git a/.github/workflows/bitcode-gate-quality.yml b/.github/workflows/bitcode-gate-quality.yml index 1045478e1..d26c40975 100644 --- a/.github/workflows/bitcode-gate-quality.yml +++ b/.github/workflows/bitcode-gate-quality.yml @@ -543,9 +543,41 @@ jobs: node scripts/check-bitcode-canonical-inputs.mjs --current-target V45 node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V45 --draft-target V46 node scripts/check-v45-gate18-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests - if [ -f scripts/check-v45-gate19-promotion-addendum.mjs ]; then + if [ ! -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v45-gate19-promotion-addendum.mjs ]; then node scripts/check-v45-gate19-promotion-addendum.mjs --skip-branch-check --skip-package-tests fi + if [ -f BITCODE_SPEC_V46.md ]; then + node scripts/check-bitcode-spec-family.mjs --version V46 --mode draft --current-target V45 + if [ -f scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs ]; then + node scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs --skip-branch-check + fi + if [ -f scripts/check-v46-gate2-protocol-comprehension-object-model.mjs ]; then + node scripts/check-v46-gate2-protocol-comprehension-object-model.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate3-public-operator-claim-boundaries.mjs ]; then + node scripts/check-v46-gate3-public-operator-claim-boundaries.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate4-product-route-comprehension-readback.mjs ]; then + node scripts/check-v46-gate4-product-route-comprehension-readback.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate5-interface-claim-contracts.mjs ]; then + node scripts/check-v46-gate5-interface-claim-contracts.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate6-proof-readback-operator-explanation.mjs ]; then + node scripts/check-v46-gate6-proof-readback-operator-explanation.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs ]; then + node scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs --skip-branch-check --skip-package-tests + fi + if [ -f scripts/check-v46-gate8-promotion-readiness.mjs ]; then + node scripts/check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests + fi + fi + elif [ "$POINTER" = "V46" ]; then + node scripts/check-bitcode-spec-family.mjs --version V46 --mode promoted --current-target V46 + node scripts/check-bitcode-canonical-inputs.mjs --current-target V46 + node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V46 --draft-target V47 + node scripts/check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests else echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2 exit 1 @@ -580,9 +612,33 @@ jobs: node scripts/check-v44-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check else node scripts/check-v45-gate18-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests - if [ -f scripts/check-v45-gate19-promotion-addendum.mjs ]; then + if [ ! -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v45-gate19-promotion-addendum.mjs ]; then node scripts/check-v45-gate19-promotion-addendum.mjs --skip-branch-check --skip-package-tests fi + if [ -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs ]; then + node scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs --skip-branch-check + fi + if [ -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v46-gate2-protocol-comprehension-object-model.mjs ]; then + node scripts/check-v46-gate2-protocol-comprehension-object-model.mjs --skip-branch-check --skip-package-tests + fi + if [ -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v46-gate3-public-operator-claim-boundaries.mjs ]; then + node scripts/check-v46-gate3-public-operator-claim-boundaries.mjs --skip-branch-check --skip-package-tests + fi + if [ -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v46-gate4-product-route-comprehension-readback.mjs ]; then + node scripts/check-v46-gate4-product-route-comprehension-readback.mjs --skip-branch-check --skip-package-tests + fi + if [ -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v46-gate5-interface-claim-contracts.mjs ]; then + node scripts/check-v46-gate5-interface-claim-contracts.mjs --skip-branch-check --skip-package-tests + fi + if [ -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v46-gate6-proof-readback-operator-explanation.mjs ]; then + node scripts/check-v46-gate6-proof-readback-operator-explanation.mjs --skip-branch-check --skip-package-tests + fi + if [ -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs ]; then + node scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs --skip-branch-check --skip-package-tests + fi + if [ -f BITCODE_SPEC_V46.md ] && [ -f scripts/check-v46-gate8-promotion-readiness.mjs ]; then + node scripts/check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests + fi fi if [ "$POINTER" = "V43" ] && [ -f scripts/check-v44-gate1-scaled-economy-roadmap-opening.mjs ]; then node scripts/check-v44-gate1-scaled-economy-roadmap-opening.mjs --skip-branch-check diff --git a/.github/workflows/v46-canon-promotion.yml b/.github/workflows/v46-canon-promotion.yml new file mode 100644 index 000000000..4dd3897ea --- /dev/null +++ b/.github/workflows/v46-canon-promotion.yml @@ -0,0 +1,149 @@ +name: V46 Canon Promotion + +on: + pull_request: + branches: + - main + types: + - opened + - synchronize + - reopened + - ready_for_review + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +permissions: + contents: write + pull-requests: read + +jobs: + promote-v46: + name: V46 Promotion Validation + if: >- + ${{ + github.event_name == 'workflow_dispatch' || + ( + github.event.pull_request.base.ref == 'main' && + github.event.pull_request.head.ref == 'version/v46' && + github.event.pull_request.head.repo.full_name == github.repository + ) + }} + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Checkout version branch + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref || github.ref_name }} + token: ${{ github.token }} + fetch-depth: 0 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "24" + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Validate V46 promotion readiness + run: | + set -euo pipefail + + run_checked() { + echo "::group::$*" + "$@" + echo "::endgroup::" + } + + run_bounded() { + local limit="$1" + shift + echo "::group::$*" + timeout --kill-after=30s "$limit" "$@" + echo "::endgroup::" + } + + POINTER="$(cat BITCODE_SPEC.txt)" + if [ "$POINTER" = "V45" ]; then + run_checked node scripts/check-bitcode-spec-family.mjs --version V46 --mode draft --current-target V45 + run_checked node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V45 --draft-target V46 + run_checked node scripts/check-bitcode-canonical-inputs.mjs --current-target V45 + run_checked node scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs --skip-branch-check + run_checked node scripts/check-v46-gate2-protocol-comprehension-object-model.mjs --skip-branch-check --skip-package-tests + run_checked node scripts/check-v46-gate3-public-operator-claim-boundaries.mjs --skip-branch-check --skip-package-tests + run_checked node scripts/check-v46-gate4-product-route-comprehension-readback.mjs --skip-branch-check --skip-package-tests + run_checked node scripts/check-v46-gate5-interface-claim-contracts.mjs --skip-branch-check --skip-package-tests + run_checked node scripts/check-v46-gate6-proof-readback-operator-explanation.mjs --skip-branch-check --skip-package-tests + run_checked node scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs --skip-branch-check --skip-package-tests + run_checked node scripts/check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests + run_checked node scripts/promote-bitcode-canon.mjs --version V46 --commit HEAD --dry-run + elif [ "$POINTER" = "V46" ]; then + run_checked node scripts/check-bitcode-spec-family.mjs --version V46 --mode promoted --current-target V46 + run_checked node scripts/check-bitcode-canonical-inputs.mjs --current-target V46 + run_checked node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V46 --draft-target V47 + run_checked node scripts/check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests + else + echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2 + exit 1 + fi + run_bounded 5m pnpm --filter @bitcode/protocol typecheck + run_bounded 15m pnpm --filter @bitcode/protocol test + run_bounded 5m pnpm --filter @bitcode/btd typecheck + run_bounded 5m pnpm --filter @bitcode/btd exec jest --config jest.config.cjs --runInBand --forceExit + run_bounded 15m npm --prefix protocol-demonstration test + run_bounded 5m npm --prefix protocol-demonstration run test:v28-mvp-qa + run_bounded 5m pnpm --filter @bitcode/pipeline-asset-pack typecheck + run_bounded 5m pnpm --filter @bitcode/pipeline-hosts typecheck + run_bounded 5m pnpm --filter @bitcode/pipeline-asset-pack exec jest --config jest.config.cjs --passWithNoTests --forceExit + run_bounded 5m pnpm --filter @bitcode/pipeline-hosts exec jest --config jest.config.cjs --passWithNoTests --forceExit + run_checked git diff --check + + - name: Promote V46 canon files + if: >- + ${{ + github.event_name == 'pull_request' && + github.event.pull_request.head.ref == 'version/v46' + }} + env: + HEAD_BRANCH: ${{ github.event.pull_request.head.ref }} + run: | + if [ "$(cat BITCODE_SPEC.txt)" = "V46" ]; then + echo "BITCODE_SPEC.txt already points to V46." + exit 0 + fi + PROOF_SOURCE_COMMIT="$(git rev-parse HEAD)" + node scripts/prepare-bitcode-spec-family-promotion.mjs --version V46 --commit "$PROOF_SOURCE_COMMIT" + node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V46 --next-draft V47 + printf "V46\n" > BITCODE_SPEC.txt + node scripts/generate-bitcode-proven.mjs --version V46 --commit "$PROOF_SOURCE_COMMIT" --worktree-state clean --output BITCODE_SPEC_V46_PROVEN.md --allow-dirty + node scripts/generate-bitcode-proven.mjs --version V46 --commit "$PROOF_SOURCE_COMMIT" --worktree-state clean --output BITCODE_SPEC_V46_PROVEN.md --check --allow-dirty + node scripts/check-bitcode-canonical-inputs.mjs --current-target V46 + node scripts/check-bitcode-spec-family.mjs --version V46 --mode promoted --current-target V46 + node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V46 --draft-target V47 + git diff --check + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add \ + BITCODE_SPEC.txt \ + BITCODE_SPEC_V46.md \ + BITCODE_SPEC_V46_DELTA.md \ + BITCODE_SPEC_V46_NOTES.md \ + BITCODE_SPEC_V46_PARITY_MATRIX.md \ + BITCODE_SPEC_V46_PROVEN.md \ + protocol-demonstration/src/canon-posture.js \ + protocol-demonstration/README.md \ + packages/protocol/src/canon-posture.js \ + packages/protocol/data/state.json \ + packages/protocol/README.md \ + .bitcode + git commit -m "Promote Bitcode canon to V46" + git push origin "HEAD:$HEAD_BRANCH" diff --git a/BITCODE_SPEC.txt b/BITCODE_SPEC.txt index 8b4951c39..b9f8aff7a 100644 --- a/BITCODE_SPEC.txt +++ b/BITCODE_SPEC.txt @@ -1 +1 @@ -V45 +V46 diff --git a/BITCODE_SPEC_V46.md b/BITCODE_SPEC_V46.md new file mode 100644 index 000000000..a4cb89c62 --- /dev/null +++ b/BITCODE_SPEC_V46.md @@ -0,0 +1,1184 @@ +# Bitcode Spec V46 + +## Status + +- Version: `V46` +- V46 state: canonical promotion complete; V46 is the active protocol-comprehension canon and the V46 hand-authored plus generated canon are aligned +- Current canonical/latest target: `V46` +- Canonical proof-source commit: `40a32e9d61a64130c958eda1498812e25a682653` +- Draft proof-source commit: generated by `BITCODE_SPEC_V46_PROVEN.md` +- Prior canonical anchor: `BITCODE_SPEC_V45.md` +- Prior generated proof appendix: `BITCODE_SPEC_V45_PROVEN.md` +- Generated structured artifact inventory: active canonical `.bitcode/v46-spec-family-report.json`, `.bitcode/v46-canonical-input-report.json`, `.bitcode/v46-canon-posture-drift-report.json`, V46 protocol-comprehension artifacts, `.bitcode/v46-promotion-readiness-report.json`, V46 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V46_PROVEN.md` as the generated proof appendix for V46 promotion +- Source parity state: V46 source-side protocol comprehension object model, public/operator claim boundaries, route readback, interface claim contracts, proof readback, local rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V46 file family +- Notes companion: `BITCODE_SPEC_V46_NOTES.md` +- Delta companion: `BITCODE_SPEC_V46_DELTA.md` +- Parity companion: `BITCODE_SPEC_V46_PARITY_MATRIX.md` +- Scope: V46 canonical system specification for protocol comprehension, source-safe public/operator explanation, interface claim contracts, proof readback, local interface rehearsal, and promotion readiness over promoted V45 knowledge commoditization canon +- Last fully realized canonical target preserved in source: `V46` + +## Version executive summary + +V46 opens from promoted V45's knowledge commoditization law. Its job is to make +that law commercially legible and interface-consistent without weakening source +safety: a buyer, depositor, operator, API consumer, ChatGPT App user, or future +AI agent must be able to understand what an AssetPack is, what BTD measures and +rights it carries, why BTC finality gates source unlock, what proof roots exist, +and what can be inspected before and after settlement. + +V46 replaces V45 as active canon after promotion workflow validation. It is +the promoted target for external protocol comprehension, public/operator docs, +route copy, interface contract readback, and launch-facing proof explainability. + +## Canonical Bitcode executive summary + +Bitcode commoditizes technical knowledge by packaging it as AssetPacks. +Depositors form source-safe supply. Readers form measured demand, review Needs, +request Finding Fits, preview source-safe Need-Fit results, settle in BTC, take +BTD rights, and receive entitled repository delivery. Contributor compensation +flows from source-to-shares after final settlement. + +V45 already sharpened the law: AssetPack is the commodity, BTC is settlement +money, BTD is Need-relative weighted scalar knowledge-volume whose settled form +carries rights, and proof-backed readback is the only state advancement +mechanism. V46 makes that law understandable, inspectable, and consistent +across human and machine interfaces. + +## V46 source-of-truth hierarchy + +`BITCODE_SPEC.txt` points to `V46`; V46 is the active promoted Bitcode canon. +`BITCODE_SPEC_V46.md`, `BITCODE_SPEC_V46_DELTA.md`, +`BITCODE_SPEC_V46_NOTES.md`, and `BITCODE_SPEC_V46_PARITY_MATRIX.md` are the +promoted V46 specification-family material. The V46 formal specification family +is active canon and authorizes implementation behavior only through the +source-safe, proof-backed comprehension, interface, and operator-readback +boundaries it states. + +Implementation remains unversioned in source paths. Package, route, component, +test, prompt, script, telemetry, schema, API, and workflow names move in place +as the single current Bitcode system after parity-authorized implementation +gates begin. + +## V46 full-system, re-implementation, and audit rule + +V46 work must be reconstructable from this formal specification family, source +code, generated artifacts, proof roots, workflow receipts, ledger journals, +database projections, storage roots, wallet/provider receipts, repository +delivery receipts, and operator-safe telemetry. + +No V46 surface may disclose protected source, unpaid AssetPack source, raw +prompts, raw model/provider responses, wallet private material, credentials, +private settlement payloads, or private repository access outside entitlement. + +## V46 totality and precision enforcement rule + +V46 must use protocol words precisely. AssetPack is the traded commodity. BTD +is weighted scalar knowledge-volume and, after settlement, a rights-bearing +receipt. BTC is settlement money. Source-to-shares is post-finality contributor +allocation. Preview is not source disclosure. Quote is not payment. Payment +observation is not finality. Database projection is not ledger truth when it +conflicts with ledger, storage, wallet, provider, or delivery readback. + +Every value or state must name whether it is estimate, potential, preview, +quote, observed payment, final settlement, rights transfer, delivery, +contributor allocation, or repair. + +## V46 system goals, non-goals, and design principles + +Goals: + +- Make promoted V45 law externally legible without simplifying away settlement, + rights, proof, source-safety, or compensation boundaries. +- Align public docs, landing copy, README/operator docs, `/packs`, `/read`, + `/deposit`, API/MCP, ChatGPT App, and Bitcode Chat around one protocol + explanation. +- Define source-safe market-activity disclosure: what can be inspected before + settlement, what is hidden until rights transfer, and what proof readback + makes auditable. +- Prepare a parity matrix for launch-facing documentation, route text, + interface schemas, proof explanations, examples, and demonstrations. +- Preserve V45 protocol law unless a later V46 atom explicitly and safely + supersedes it. + +Non-goals: + +- V46 promoted canon work does not expose unpaid source. +- V46 promoted canon work does not admit value-bearing mainnet operation. +- V46 promoted canon work does not authorize behavior outside accepted formal parity, + proof, rehearsal, and promotion evidence. +- V46 promoted canon work does not treat notes, PR bodies, telemetry, or conversations + as implementation authority. + +Design principles: source-safe commodity formation, Need-relative measurement, +BTC finality before rights, proof-backed readback, fail-closed repair, +interface humility, and implementation from formal parity only. + +## V46 system architecture and layer boundaries + +V46 acts through existing Bitcode layers: + +- `/deposit` for source-safe AssetPack supply formation. +- `/read` for Read Request, Need review, Finding Fits, preview, quote, BTC + settlement, BTD rights transfer, and repository delivery. +- `/packs` for searchable master-detail activity, proof roots, repairs, + settlement state, delivery state, and compensation state. +- API/MCP, ChatGPT App, and Bitcode Chat as policy-bound windows into the same + protocol law. +- Package-owned BTD, settlement, source-to-shares, prompt, pipeline, telemetry, + storage, proof, and workflow primitives. +- Ledger, database, object storage, wallet/provider, and repository readback as + protocol evidence boundaries. + +Demonstration code remains self-contained inside `protocol-demonstration/`. + +## V46 canonical domain model + +V46 consolidates these canonical objects and states: + +- AssetPack, deposit AssetPack option, Depository AssetPack, selected Fit set, + Need-Fit AssetPack, source-safe preview, withheld source bundle, quote, + settlement receipt, BTD rights receipt, repository delivery receipt, + source-to-shares allocation, contributor compensation statement, repair case, + proof root, execution receipt, ledger journal, database projection, object + storage root, wallet/provider receipt, and repository delivery receipt. +- AssetPack states: `deposit-option-synthesized`, + `deposit-option-reviewed`, `depository-assetpack-admitted`, + `fit-candidates-recalled`, `fit-set-selected`, + `need-fit-assetpack-synthesized`, `need-fit-assetpack-quoted`, + `settlement-observed`, `btd-settled-rights-transferred`, + `source-unlocked-delivery`, `compensated-and-reconciled`, and + `repair-required`. +- BTD states: `btd-not-applicable`, `btd-potential-measured`, + `need-fit-measurements-admitted`, `measurement-weight-policy-locked`, + `weighted-scalar-volume-computed`, `btd-quantized`, + `measuremint-applied`, `btd-range-assigned`, `btd-quote-bound`, + `btd-rights-pending`, `btd-rights-transferred`, + `btd-source-to-shares-allocated`, and `btd-repair-required`. +- BTC states: `btc-not-quoteable`, `btc-quote-issued`, + `btc-quote-accepted`, `btc-quote-inactive`, `btc-wallet-ready`, + `btc-psbt-prepared`, `btc-psbt-signed`, `btc-broadcast-submitted`, + `btc-payment-observed`, `btc-payment-mismatch-repair-required`, + `btc-finality-confirmed`, `btc-replaced-reorged-or-failed`, + `btc-settlement-finalized`, `btc-contributor-compensation-routable`, + `btc-refund-or-escalation-required`, and `btc-settlement-repair-required`. + +## V46 commercial protocol comprehension object model + +V46 Gate 2 makes the commercial comprehension object model explicit so public, +product, operator, API/MCP, ChatGPT App, Bitcode Chat, and investor-facing +surfaces all explain the same protocol without claiming more than their +evidence supports. + +The comprehension object model is source-safe metadata. It describes objects, +claims, disclosure boundaries, evidence authority, and forbidden +interpretations. It does not expose protected source, unpaid AssetPack source, +raw prompts, raw provider responses, credentials, wallet private material, +private settlement payloads, private Read context, or value-bearing mainnet +admission. + +Canonical comprehension objects: + +| Object | Protocol reading | Claim boundary | +| --- | --- | --- | +| `AssetPack` | Packaged technical knowledge commodity; never raw source. | May be explained as deposit supply, previewed Need-Fit pack, or settled delivery only when its lifecycle state is named. | +| `DepositAssetPackOption` | Proposed source-safe supply for depositor review. | May show BTD potential and policy posture, never final BTD, payment, or public source. | +| `DepositoryAssetPack` | Approved searchable supply with protected-source roots. | May be recalled, ranked, and selected source-safely through Finding Fits. | +| `ReadRequest` | Buyer demand input. | Does not itself create a reviewed Need, Fit, quote, BTD, or rights. | +| `ReviewedNeed` | Accepted buyer objective that authorizes Finding Fits. | Enables Need-relative measurement but does not calculate final BTD by itself. | +| `FindingFitsReceipt` | Search, ranking, threshold, provenance, and repair evidence. | May name many candidates and selected Fits without source disclosure. | +| `SelectedFitSet` | One or many admitted Depository AssetPacks accepted for synthesis. | Required for Need-Fit synthesis and final BTD calculation. | +| `NeedFitAssetPack` | New Need-relative AssetPack synthesized from reviewed Need and selected Fits. | Source-bearing internally but withheld until BTC finality and BTD rights transfer. | +| `SourceSafePreview` | Measurements, quality, provenance, BTD posture, quote readiness, and proof roots. | Preview is not source disclosure. | +| `BtdScalarVolumeReceipt` | Need-relative weighted scalar technical knowledge volume. | BTD is not money and not merely a read-right; settled BTD carries rights. | +| `BtcQuote` | Deterministic sats offer bound to BTD volume, policy, network, expiry, and authority. | Quote is not payment. | +| `BtcSettlementReceipt` | Quote/payment/finality/readback evidence. | Observed payment is not final settlement. | +| `BtdRightsReceipt` | Settled rights, source unlock authority, ownership/read/use boundary. | Rights transfer follows BTC finality and reconciliation. | +| `SourceUnlockDeliveryReceipt` | Entitled repository delivery evidence. | Full source crosses only to the entitled Reader boundary. | +| `SourceToSharesAllocation` | Contributor allocation derived after final Need-Fit settlement. | Allocation is compensation routing, not BTD scalar-volume calculation. | +| `ContributorCompensationStatement` | Post-finality BTC compensation readback. | Database projection must reconcile to ledger truth. | +| `ProofRoot` | Evidence root for state advancement or explanation. | Proof can support state but cannot leak hidden payloads. | +| `RepairCase` | Fail-closed blocker for missing or contradictory evidence. | Repair returns to the narrowest source-safe disclosure boundary. | +| `InterfaceClaim` | Any public, product, API/MCP, ChatGPT App, Bitcode Chat, telemetry, or operator statement about protocol state. | Must name claim category, evidence authority, disclosure boundary, and forbidden interpretation. | + +Claim authority is evidence-specific. Canonical specification and generated +proof define protocol law; ledger readback governs settlement truth; database +projection is a synchronized projection; object storage roots prove custody and +withheld bundles; wallet/provider receipts prove payment observations and +wallet posture; repository delivery receipts prove entitled delivery; +telemetry is observability only; interfaces guide and inspect; public education +explains but does not create live transaction truth. + +## V46 claim taxonomy law + +Every V46 explanatory statement is an `InterfaceClaim` and must occupy one +claim category: + +- `protocol-law`: formal AssetPack, BTD, BTC, source-safety, rights, + compensation, proof, and repair law from the specification family. +- `product-guidance`: route or workflow guidance that helps users act but does + not advance protocol state. +- `operator-evidence`: source-safe operational evidence, proof roots, runbook + posture, and repair information. +- `investor-framing`: market or deck language; investor framing is not + protocol law unless reconciled into the formal specification family. +- `telemetry-observability`: execution progress and debug signals; telemetry + is observability only and cannot advance state by itself. +- `preview-claim`: source-safe pre-settlement measurement and quality + statement. +- `quote-claim`: BTC quote, expiry, budget, policy, and wallet-readiness + statement. +- `settlement-claim`: BTC preparation, signing, broadcast, observation, + mismatch, finality, reconciliation, refund, escalation, or repair statement. +- `rights-claim`: BTD rights-pending or rights-transferred statement. +- `delivery-claim`: source unlock and repository delivery statement. +- `compensation-claim`: source-to-shares allocation or contributor + compensation statement. +- `repair-claim`: fail-closed blocker, replay, operator action, or repair + closure statement. + +Forbidden claim collapses: + +- AssetPack is not raw source. +- BTD is not only a read-right and is not money. +- Deposit option is not final BTD. +- Preview is not source disclosure. +- Quote is not payment. +- Payment observation is not finality. +- Database projection is not ledger truth when stronger readback conflicts. +- Telemetry and conversation do not advance state. +- Investor copy is not protocol law. +- Value-bearing mainnet remains blocked until a promoted canon admits it. +- Bitcode never takes custody of wallet private material. + +For V46, investor framing is not protocol law; telemetry is observability only. + +The source-safe generated artifact for this Gate 2 atom is +`.bitcode/v46-protocol-comprehension-object-model.json`; it is generated by +`buildV46ProtocolComprehensionObjectModel` and checked by `check:v46-gate2`. + +## V46 public/operator claim boundary law + +Gate 3: Public Docs, Landing, And Operator Claim Boundaries binds public docs, +landing copy, README surfaces, and internal operator notes to the Gate 2 claim +taxonomy. These surfaces may teach Bitcode, route users, and name source-safe +proof posture, but they must not become protocol-law authority or serialize +private payloads. + +Public docs explain; proof readback decides. A public page may say that +AssetPacks are measured technical-intelligence commodities, that BTD records +weighted scalar knowledge volume and settled rights, and that BTC settles value +transfer. It may not claim source disclosure from preview metadata, payment +from a quote, finality from payment observation, ledger truth from a database +row, state advancement from telemetry, or live value-bearing mainnet admission. + +Operator notes may name proof roots, generated artifact paths, state labels, +dashboard ids, runbook ids, and repair commands when they are source-safe. +Operator notes must not record secret values, provider tokens, wallet private +material, raw protected prompts, protected source payloads, raw protected model +responses with source, or unpaid AssetPack source. + +The source-safe generated artifact for this Gate 3 atom is +`.bitcode/v46-public-operator-claim-boundaries.json`; it is generated by +`buildV46PublicOperatorClaimBoundaries` and checked by `check:v46-gate3`. + +## V46 product route comprehension readback law + +Gate 4: `/packs`, `/read`, And `/deposit` Comprehension UX Readback binds the +three commercial website routes to the Gate 2 claim taxonomy and Gate 3 +public/operator boundaries. These routes may simplify the operator view into a +low-detail default, but each simplification must have expandable source-safe +readback for proof roots, route-owned state, settlement posture, delivery +posture, compensation posture, and repair blockers. + +`/packs` is the searchable PackActivity master-detail surface for source-safe +market and portfolio activity. It may expose PackActivity rows, source-safe +measurements, proof roots, market signals, settlement state, compensation +state, delivery state, repair state, governance readback, and accounting +readback. It must not expose protected source, unpaid AssetPack source, raw +prompts, provider responses, credentials, private settlement payloads, or +wallet private material. + +`/read` is the five-step Reading route: request Read, review synthesized Need, +request Finding Fits, review source-safe AssetPack preview, and buy +AssetPack/settle. It must name `ReadNeedComprehensionSynthesis` and +`ReadFitsFindingSynthesis` as the route-owned pipeline ownership readback, +block Finding Fits until a Need is accepted, keep source-bearing AssetPack +contents withheld before payment, and require BTC finality plus BTD rights and +delivery readback before source unlock. + +`/deposit` is the five-step source-supply route: connect source, synthesize +AssetPack options, review source-safe options, submit deposit, and read +Depository state. It may expose option measurements, demand roots, policy +roots, estimated ROI, BTD potential, and compensation metadata. It must not +claim final Need-relative BTD at option time and must keep raw source withheld +from the product readback boundary. + +The source-safe generated artifact for this Gate 4 atom is +`.bitcode/v46-product-route-comprehension-readback.json`; it is generated by +`buildV46ProductRouteComprehensionReadback` and checked by `check:v46-gate4`. + +## V46 interface claim contract law + +Gate 5: API/MCP, ChatGPT App, And Bitcode Chat Claim Contracts binds machine, +assistant, conversation, and package-consumer surfaces to the same +`InterfaceClaim` taxonomy as public docs and website routes. These surfaces +may carry requests, responses, tool descriptors, action descriptors, source-safe +rendering metadata, proof roots, denied states, and handoff metadata, but they +must not become parallel protocol authority or serialize private payloads. + +The public API is the versionless machine contract for source-safe schema +compatibility. It must expose only source-safe request/response fields, proof +roots, denied repair states, and compatibility posture. It must not expose +protected source, unpaid AssetPack source, raw prompts, provider responses, +credentials, wallet private material, private settlement payloads, or +value-bearing mainnet authority. + +The MCP API is the package-owned tool contract for source-safe protocol entry. +It may expose tool registry names, permission requirements, provider binding +blockers, write-admission posture, proof roots, queue metadata, and denied +repair states. MCP does not settle BTC, transfer BTD rights, unlock source, or +deliver source-bearing AssetPacks by itself. + +The ChatGPT App is the package-owned assistant action contract for Reading and +delivery-adjacent actions. It may render source-safe Need, Finding Fits, +preview, quote, settlement-blocker, delivery-lock, and proof-root metadata. +It must require explicit write admission for stateful actions and must show +settlement/right/delivery denied states until proof readback authorizes the +next boundary. + +Bitcode Chat is the website conversation overlay and stream/handoff surface. +It may guide Reading, summarize route-local state, display source-safe stream +events, preserve proof roots, and hand off to `/read`; it cannot advance +protocol state, settle, transfer rights, unlock source, or bypass Terminal, +route, ledger, wallet, or proof authority. + +Package consumers receive stable source-safe contracts and generated readback +metadata. Package exports may help consumers reason about claims, but package +consumers do not get a separate state machine, value-bearing authority, or +source disclosure boundary beyond the same proof-backed protocol law. + +The source-safe generated artifact for this Gate 5 atom is +`.bitcode/v46-interface-claim-contracts.json`; it is generated by +`buildV46InterfaceClaimContracts` and checked by `check:v46-gate5`. + +## V46 proof readback operator explanation law + +Gate 6: Proof Readback And Source-Safe Operator Explanation binds evidence +authority into an operator-readable ladder. It answers, for each source-safe +evidence class, what the evidence is, what it can authorize, what it cannot +authorize, what stronger evidence must agree, and what repair happens when +evidence conflicts. + +The evidence classes are canonical specification/generated proof, +execution/workflow receipt, ledger journal, database projection, object +storage/protected-source root, telemetry stream, wallet/provider receipt, +repository delivery receipt, and repair/reconciliation receipt. + +Canonical specification and generated proof define protocol law and accepted +proof-family roots; they do not prove that a live commercial boundary happened. +Execution/workflow receipts prove work, provenance, replay posture, and output +roots; they do not settle, transfer rights, unlock source, or deliver. +Ledger journals are payment/finality authority for settlement and +source-to-shares accounting, but source unlock still requires rights, +storage, and repository delivery readback. Database projections are queryable +read models and must yield to ledger, storage, wallet, repository, and proof +readback when they conflict. Object storage roots prove custody and withheld +bundle/storage posture, but not Reader entitlement by themselves. Telemetry +streams explain live progress and repair hints; they are observability only. +Wallet/provider receipts prove non-custodial signing and payment-observation +posture; provider observation is not settlement finality. Repository delivery +receipts prove entitled delivery after finality, BTD rights, compensation, and +storage reconciliation. Repair/reconciliation receipts record blockers, +retry actions, approval needs, and source-safe repair state; unresolved repair +keeps Bitcode at the narrowest source-safe boundary. + +The source-safe generated artifact for this Gate 6 atom is +`.bitcode/v46-proof-readback-operator-explanation.json`; it is generated by +`buildV46ProofReadbackOperatorExplanation` and checked by `check:v46-gate6`. + +## V46 whole Bitcode operator chain + +The V46 operator chain is: connect source and organization policy, synthesize +deposit AssetPack options, approve source-safe Depository admission, request a +Read, synthesize and review a Need, run Finding Fits, select one or many +Depository AssetPacks above threshold, synthesize a source-bearing but withheld +Need-Fit AssetPack, preview only source-safe measurements and metadata, quote +BTC sats from deterministic BTD scalar-volume and share-to-fee policy, accept +quote, sign through non-custodial wallet flow, observe payment, confirm +Bitcoin finality, transfer BTD rights, unlock source only for the entitled +Reader boundary, deliver to repository, allocate source-to-shares contributor +compensation, reconcile ledger/database/storage, and repair fail-closed drift. + +## V46 consolidated protocol law + +Bitcode is the knowledge commoditization protocol and commercial system for +turning source-derived technical knowledge into source-safe, measurable +AssetPacks whose measurements can be weighted and summed into BTD scalar +knowledge-volume when evaluated against a reviewed Need. That Need-relative BTD +volume drives deterministic BTC quote and settlement, expresses +post-settlement rights, controls source unlock, routes contributor shares, and +is audited through proof roots, ledgerized journals, telemetry, database and +storage synchronization, and generated canon. + +The traded commodity is the AssetPack, not raw source, raw prompts, provider +responses, loose files, screenshots, telemetry logs, private repository access, +or conversational summaries. + +## V46 AssetPack lifecycle law + +Every AssetPack-like object must occupy exactly one lifecycle state at every +protocol boundary. Interfaces, APIs, pipelines, proofs, and operator tools must +not collapse deposit options into settled BTD, previews into source disclosure, +quotes into payment finality, admitted Depository AssetPacks into delivered +Need-Fit AssetPacks, or repair cases into successful purchases. + +Finding Fits recalls many candidates above threshold when available. The +selected Fit set may contain one or many admitted Depository AssetPacks. The +Need-Fit AssetPack is synthesized from the reviewed Need plus selected Fit set +and is a new Need-relative AssetPack, not disclosure of the underlying +Depository source before settlement. + +## V46 BTD scalar-volume law + +BTD is the non-fungible, proof-addressed scalar unit of technical knowledge +volume for a Need-Fit AssetPack. Deposit-time measurements may estimate BTD +potential, but final BTD size is computed only after a reviewed Need, selected +Fit set, synthesized Need-Fit AssetPack, deterministic measurement weights, +dedupe proofs, and source-safe proof roots exist. + +Every final BTD measurement row must be Need-relative, accepted, deduped, +proof-rooted, and tied to the selected Fit set. Measurement weights are +deterministic protocol policy. Scalar volume uses fixed-point or integer +arithmetic. Rights-bearing BTD exists only after BTC settlement finality and +BTD rights transfer. + +## V46 BTC settlement law + +BTC is Bitcode settlement money and payment truth. A BTC quote is a source-safe +procurement offer bound to a reviewed Need, selected Fit set, synthesized +Need-Fit AssetPack, BTD scalar-volume/range, deterministic share-to-fee +policy, wallet authority, network, expiry, and proof roots. + +Prepared, signed, broadcast, and observed states are not final settlement. +Source unlock, rights-bearing BTD transfer, repository delivery, and +contributor compensation require confirmed BTC finality, quote/payment +conservation, ledger/database/storage readback, and repair-free settlement +receipts. + +## V46 interface authority and disclosure law + +All Bitcode interfaces are protocol windows into the same AssetPack, BTD, BTC, +proof, ledger, database, storage, and delivery state. No interface is an +independent source of protocol law. `/deposit` forms source-safe supply; +`/read` procures Need-Fit packs; `/packs` inspects activity and proof readback; +API/MCP exposes machine workflows under equivalent policy; ChatGPT App and +Bitcode Chat guide and summarize; public docs and landing pages explain but do +not represent live transaction truth. + +Disclosure boundaries are `before-settlement`, `after-preview`, `after-quote`, +`after-payment-observation`, `after-finality`, +`after-btd-rights-transfer`, and `after-repository-delivery`. Each boundary +must fail closed to the narrowest source-safe state when evidence is missing or +contradictory. + +## V46 proof readback and operational authority law + +Bitcode state advances only by proof-backed readback. No UI row, conversation +message, streamed telemetry item, route response, external provider event, or +workflow log can alone advance AssetPack lifecycle, BTD rights, BTC settlement, +source unlock, delivery, or contributor compensation. + +Canonical evidence classes are canonical specification and generated proof +appendix, execution/workflow receipt, ledger journal, database projection, +object storage and protected-source roots, telemetry stream, wallet/provider +receipt, and repository delivery receipt. Telemetry is observability only. +Provider observation is not final settlement until reconciled with quote, +wallet authority, and finality policy. + +## V46 local interface comprehension rehearsal law + +V46 Gate 7 proves local interface comprehension before promotion. The local +rehearsal loads public docs and landing surfaces, `/packs`, `/read`, +`/deposit`, API/MCP, ChatGPT App, Bitcode Chat, proof telemetry, and repair +readback source roots, then checks that each surface explains only the claims +authorized by the Gate 2 object model, Gate 3 public/operator boundaries, Gate +4 route readback, Gate 5 interface contracts, and Gate 6 proof authority +ladder. + +The rehearsal is local-only and source-safe. It does not launch value-bearing +mainnet behavior, does not run live payment finality, does not deliver +source-bearing AssetPacks, and does not serialize protected source, unpaid +AssetPack source, raw prompts, interpolated prompts, raw model/provider +responses, credentials, wallet private material, private settlement payloads, +or private repository access. It may emit deterministic roots, source-safe +metadata, surface ids, claim ids, authority ids, repair expectations, and +prior artifact pass/fail state. + +The source-safe generated artifact for this Gate 7 atom is +`.bitcode/v46-local-interface-comprehension-rehearsal.json`; it is generated +by `buildV46LocalInterfaceComprehensionRehearsal` and checked by +`check:v46-gate7`. + +## V46 gate taxonomy law + +V46 gates are classified as `notes-specification-atom`, +`formal-specification-consolidation`, `specification-parity-matrix`, +`proof-only`, `interface-only`, `implementation`, `rehearsal`, or `promotion`. +Formal consolidation follows accepted notes atoms. The parity matrix follows +formal consolidation. Implementation follows accepted parity gaps. Promotion +alone may advance `BITCODE_SPEC.txt`. + +## V46 canonical subsystem surfaces + +### Depositing and asset supply + +- Current canonical objects and emitted artifacts: deposit AssetPack option, + Depository AssetPack, protected-source storage root, source-safety proof, + admission receipt, policy root, and source-safe earning potential. +- Current algorithms and derivation rules: source is measured into deposit + options, reviewed by depositor authority, admitted only after source-safety + and policy eligibility, then indexed for Finding Fits. +- Current invariants and fail-closed conditions: no final BTD size, reader + ownership, final BTC proceeds, or public source visibility before paid + Need-Fit settlement. +- Current proof obligations: option synthesis root, review decision root, + policy root, admission root, storage projection root, and Depository index + root. +- Current source-bearing implementation basis: protected source remains outside + visible Bitcode surfaces and is represented only by custody roots. +- Current validating commands and parity basis: V46 parity gate must audit + implementation against this formal specification. +- Current accepted boundaries: source-safe depositor supply formation only. + +### Reading and prompt/inference ownership + +- Current canonical objects and emitted artifacts: Read Request, synthesized + Need, reviewed Need, Finding Fits receipt, selected Fit set, source-safe + preview, quote, BTD posture, and delivery receipt. +- Current algorithms and derivation rules: Reading synthesizes a Need from a + request, accepts or resynthesizes it, searches the Depository, synthesizes a + Need-Fit AssetPack, and withholds source until payment and rights transfer. +- Current invariants and fail-closed conditions: preview, quote, and observed + payment are non-final and cannot disclose source. +- Current proof obligations: Read Request root, Need synthesis receipt, review + root, telemetry summary root, selected Fit root, synthesis root, quote root, + rights receipt, and repository delivery receipt. +- Current source-bearing implementation basis: source-bearing pack material may + exist internally only as a withheld bundle root before settlement. +- Current validating commands and parity basis: V46 parity gate must inspect + ReadNeed and ReadFitsFinding source, tests, proof, telemetry, and UI. +- Current accepted boundaries: Reader entitlement starts only after BTC + settlement finality and BTD rights transfer. + +### Fit, recall, ranking, and verification + +- Current canonical objects and emitted artifacts: search query root, search + channel roots, candidate provenance roots, ranking root, threshold root, + selected Fit set root, and verification root. +- Current algorithms and derivation rules: Finding Fits searches broadly over + admitted Depository AssetPacks and selects one or many candidates above + threshold for Need-Fit synthesis. +- Current invariants and fail-closed conditions: candidate source remains + withheld, and provisional BTD contribution is not rights-bearing. +- Current proof obligations: query, search, ranking, threshold, verification, + and selected-fit roots. +- Current source-bearing implementation basis: Fits are represented by + source-safe provenance and protected-source roots before rights transfer. +- Current validating commands and parity basis: parity must audit search, + embeddings, ranking, telemetry, and readback. +- Current accepted boundaries: recall and ranking are source-safe evidence, + not source disclosure. + +### Selection and materialization + +- Current canonical objects and emitted artifacts: Need-Fit AssetPack, + source-bearing withheld bundle, source-safe preview, measurement vector, BTD + posture, quote, source unlock root, and repository delivery receipt. +- Current algorithms and derivation rules: selected Fits plus reviewed Need + synthesize a new Need-relative AssetPack, then materialize delivery only + after settlement and rights. +- Current invariants and fail-closed conditions: no materialized source crosses + to the Reader before entitlement. +- Current proof obligations: synthesis receipt, withheld-source bundle root, + preview boundary root, measurement root, settlement root, rights root, and + delivery root. +- Current source-bearing implementation basis: source-bearing output is held in + protected storage until source unlock. +- Current validating commands and parity basis: parity must audit synthesis, + preview, storage, delivery, and repair paths. +- Current accepted boundaries: source-bearing materialization is delivery + authority, not preview authority. + +### Identity, authorization, and sensitive flow + +- Current canonical objects and emitted artifacts: organization policy, wallet + authority, budget approval, buyer authorization, depositor approval, + no-server-custody proof, and entitlement boundary. +- Current algorithms and derivation rules: policies gate quote acceptance, + wallet readiness, source criticality, deposit approval, delivery, and repair. +- Current invariants and fail-closed conditions: Bitcode never takes custody of + wallet private material and never lets policy bypass settlement law. +- Current proof obligations: wallet authority root, budget root, policy root, + authorization root, and entitlement root. +- Current source-bearing implementation basis: secrets, wallet private + material, and protected source are never serialized into public surfaces. +- Current validating commands and parity basis: parity must audit auth, wallet, + policy, API/MCP, and conversational authorization. +- Current accepted boundaries: authority enables protocol actions but cannot + override proof readback. + +### Disclosure and projection + +- Current canonical objects and emitted artifacts: interface read models, + disclosure boundary labels, redaction receipts, proof roots, repair cases, + and source-safe statements. +- Current algorithms and derivation rules: each surface projects only the data + the actor may see at the current protocol state. +- Current invariants and fail-closed conditions: missing or contradictory + evidence returns to the narrowest source-safe state. +- Current proof obligations: ledger/database readback, storage roots, + entitlement roots, redaction roots, and interface tests. +- Current source-bearing implementation basis: unpaid source, protected source, + raw prompts, raw responses, wallet material, and private payloads remain + withheld. +- Current validating commands and parity basis: parity must audit `/packs`, + `/read`, `/deposit`, API/MCP, ChatGPT App, Bitcode Chat, docs, and landing + surfaces. +- Current accepted boundaries: interfaces guide and inspect; they do not create + settlement, rights, or source truth. + +### Settlement and exact accounting + +- Current canonical objects and emitted artifacts: BTC quote, quote acceptance, + PSBT roots, broadcast receipt, payment observation, finality receipt, BTD + rights receipt, source-to-shares allocation, compensation statement, and + reconciliation root. +- Current algorithms and derivation rules: deterministic BTD scalar-volume and + share-to-fee policy generate sats quote; finality authorizes BTD rights and + delivery; source-to-shares routes contributor compensation after settlement. +- Current invariants and fail-closed conditions: observed payment is not final; + mismatches enter repair, refund, or escalation. +- Current proof obligations: quote root, wallet root, txid/network/amount + observation, finality receipt, conservation root, rights receipt, + compensation root, and reconciliation root. +- Current source-bearing implementation basis: settlement payloads are + source-safe and do not carry wallet private material or unpaid source. +- Current validating commands and parity basis: parity must audit BTD, BTC, + settlement, quote, ledger, database, storage, and compensation code. +- Current accepted boundaries: BTC finality precedes rights, unlock, delivery, + and compensation. + +### Proof contract, witnesses, and replay + +- Current canonical objects and emitted artifacts: specification proof, + execution receipt, workflow receipt, ledger journal, database projection, + object storage root, telemetry event, wallet/provider receipt, repository + delivery receipt, and replay report. +- Current algorithms and derivation rules: state advances only by required + proof root plus readback from the relevant boundary. +- Current invariants and fail-closed conditions: telemetry, UI, conversation, + provider observation, and workflow logs alone do not advance protocol state. +- Current proof obligations: every state advancement must name required + readback and repair behavior. +- Current source-bearing implementation basis: proof artifacts are source-safe + unless they sit behind entitled storage and delivery roots. +- Current validating commands and parity basis: parity must audit generated + proof, workflows, checks, replay, and repair coverage. +- Current accepted boundaries: proof-backed readback is the only authority. + +## V46 proof-family canon + +Every proof family below uses the same detail labels so generated proof and +human inspection remain aligned. + +### Inference-synthesis + +- proofArtifactPath: `.bitcode/v46-inference-synthesis-proof.json`. +- members: ReadNeedComprehension, ReadFitsFinding, deposit option synthesis, + AssetPack synthesis, conversation guidance. +- theoremIds: source-safe inference, typed output, prompt registry closure. +- replayStepIds: synthesize Need, Finding Fits, synthesize AssetPack, redacted + telemetry readback. +- witnessArtifactPaths: execution receipts, telemetry summaries, prompt + registry reports. +- current member closure criteria: every inference is typed, source-safe, and + auditable. +- current member verdict shape: pass, repair-required, or blocked. +- current theorem-by-theorem closure reading: theorem rows tie prompt, + execution, output type, and redaction. +- current theorem-to-replay grouping: grouped by pipeline and interface. +- minimum artifact/replay binding set: prompt root, execution root, output + root, telemetry root. +- current proof-object fields: proof id, family, member, theorem, input root, + output root, status. +- generated-artifact and test bindings: future parity gate must bind tests. +- fail-closed conditions: missing prompt, untyped output, source leak, or stale + telemetry. + +### Prompt-completeness + +- proofArtifactPath: `.bitcode/v46-prompt-completeness-proof.json`. +- members: prompt parts, prompts, registries, templates, interpolation. +- theoremIds: total prompt catalog, no raw prompt leakage, benchmarkable parts. +- replayStepIds: registry resolution, interpolation, redaction, benchmark run. +- witnessArtifactPaths: prompt inventory and benchmark receipts. +- current member closure criteria: prompt programs are complete and traceable. +- current member verdict shape: pass, repair-required, or blocked. +- current theorem-by-theorem closure reading: each theorem binds a prompt + surface to a typed use. +- current theorem-to-replay grouping: prompt family to inference family. +- minimum artifact/replay binding set: prompt part id, prompt id, registry id, + rendered prompt hash. +- current proof-object fields: prompt ids, interpolation inputs, output type. +- generated-artifact and test bindings: V46 parity determines coverage. +- fail-closed conditions: missing prompt part, unsafe interpolation, raw prompt + exposure, or unbenchmarked critical prompt. + +### Static-code-analysis + +- proofArtifactPath: `.bitcode/v46-static-code-analysis-proof.json`. +- members: packages, routes, scripts, workflows, tests, docs. +- theoremIds: source names align with protocol, no forbidden source exposure, + no versioned source identifiers. +- replayStepIds: lint, typecheck, casing/imports, spec check. +- witnessArtifactPaths: CI logs, local command receipts, diff hygiene. +- current member closure criteria: static checks pass and scope is traced to + formal spec. +- current member verdict shape: pass, repair-required, or blocked. +- current theorem-by-theorem closure reading: each theorem links code surface + to spec law. +- current theorem-to-replay grouping: static commands plus source maps. +- minimum artifact/replay binding set: file path, command, result, spec row. +- current proof-object fields: command, status, artifact root, failures. +- generated-artifact and test bindings: future proof-only gates may harden. +- fail-closed conditions: lint/type failure, import drift, or source-safety + violation. + +### Verification-decisions + +- proofArtifactPath: `.bitcode/v46-verification-decisions-proof.json`. +- members: Need review, Fit thresholding, quote acceptance, payment finality, + rights transfer, delivery. +- theoremIds: explicit decision root, actor authority, no collapsed states. +- replayStepIds: approve Need, select Fits, accept quote, confirm finality. +- witnessArtifactPaths: review receipts, verification roots, policy roots. +- current member closure criteria: decisions are typed, authorized, and + readback-backed. +- current member verdict shape: pass, repair-required, or blocked. +- current theorem-by-theorem closure reading: each decision carries actor, + input, policy, and proof. +- current theorem-to-replay grouping: workflow boundary by state advancement. +- minimum artifact/replay binding set: decision root, actor root, policy root, + readback root. +- current proof-object fields: decision id, actor, state, result, blocker. +- generated-artifact and test bindings: parity must bind route and API tests. +- fail-closed conditions: unauthorized actor, stale decision, missing root, or + evidence conflict. + +### Selection-and-materialization + +- proofArtifactPath: `.bitcode/v46-selection-materialization-proof.json`. +- members: candidate recall, selected Fit set, withheld bundle, source-safe + preview, repository delivery. +- theoremIds: selected Fits above threshold, source withheld, delivery after + rights. +- replayStepIds: search, rank, select, synthesize, unlock, deliver. +- witnessArtifactPaths: selected-fit roots, storage roots, PR receipts. +- current member closure criteria: materialization honors disclosure state. +- current member verdict shape: pass, repair-required, or blocked. +- current theorem-by-theorem closure reading: each theorem binds source custody + to entitlement. +- current theorem-to-replay grouping: Finding Fits and delivery replay. +- minimum artifact/replay binding set: fit root, bundle root, preview root, + delivery root. +- current proof-object fields: candidate ids, bundle hash, preview hash, + delivery id. +- generated-artifact and test bindings: parity must bind storage and delivery. +- fail-closed conditions: no survivor, source overexposure, stale storage, or + delivery mismatch. + +### Authorization-and-sensitive-flow + +- proofArtifactPath: `.bitcode/v46-authorization-sensitive-flow-proof.json`. +- members: organization policy, wallet authority, depositor approval, buyer + entitlement, API/MCP, conversations. +- theoremIds: no secret leakage, no server custody, actor entitlement. +- replayStepIds: policy check, wallet ready, authorization denial, redaction. +- witnessArtifactPaths: policy roots, wallet roots, redaction receipts. +- current member closure criteria: sensitive data stays within its boundary. +- current member verdict shape: pass, repair-required, or blocked. +- current theorem-by-theorem closure reading: each theorem maps actor to + permitted data. +- current theorem-to-replay grouping: human, machine, and conversational + interfaces. +- minimum artifact/replay binding set: actor root, policy root, redaction root, + interface root. +- current proof-object fields: actor, scope, decision, redaction, blocker. +- generated-artifact and test bindings: parity must cover all interfaces. +- fail-closed conditions: secret exposure, wrong actor, missing policy, or + wallet custody drift. + +### Settlement-source-to-shares + +- proofArtifactPath: `.bitcode/v46-settlement-source-to-shares-proof.json`. +- members: BTD scalar-volume, BTC quote, PSBT, finality, rights transfer, + source-to-shares, compensation. +- theoremIds: deterministic quote, finality-before-rights, conservation, + allocation after settlement. +- replayStepIds: compute BTD, quote BTC, observe payment, confirm finality, + allocate shares. +- witnessArtifactPaths: BTD receipts, quote roots, wallet/provider receipts, + ledger journals, compensation statements. +- current member closure criteria: accounting conserves state and value. +- current member verdict shape: pass, repair-required, or blocked. +- current theorem-by-theorem closure reading: each theorem links quote, + payment, rights, and allocation. +- current theorem-to-replay grouping: settlement workflow and repair paths. +- minimum artifact/replay binding set: BTD root, quote root, tx root, + finality root, allocation root. +- current proof-object fields: sats, BTD range, txid, finality, allocation. +- generated-artifact and test bindings: parity must audit settlement packages. +- fail-closed conditions: mismatch, reorg, expired quote, stale readback, or + compensation drift. + +### Disclosure-boundary + +- proofArtifactPath: `.bitcode/v46-disclosure-boundary-proof.json`. +- members: `/deposit`, `/read`, `/packs`, API/MCP, ChatGPT App, Bitcode Chat, + public docs, landing page. +- theoremIds: source-safe before entitlement, non-final labels, boundary + equivalence across interfaces. +- replayStepIds: preview, quote, observation, finality, rights, delivery. +- witnessArtifactPaths: interface tests, redaction roots, read models. +- current member closure criteria: every surface shows only permitted state. +- current member verdict shape: pass, repair-required, or blocked. +- current theorem-by-theorem closure reading: each theorem maps state to + visible fields. +- current theorem-to-replay grouping: interface by actor and state boundary. +- minimum artifact/replay binding set: interface root, actor root, state root, + disclosure root. +- current proof-object fields: actor, boundary, visible fields, redactions. +- generated-artifact and test bindings: parity must bind UI/API proof. +- fail-closed conditions: overexposure, finality confusion, source leak, or + missing entitlement. + +### Proof-contract + +- proofArtifactPath: `.bitcode/v46-proof-contract-proof.json`. +- members: generated spec proof, workflow receipts, ledger journals, database + projections, storage roots, telemetry, provider receipts, repository + receipts. +- theoremIds: proof-backed readback, evidence precedence, repair on conflict. +- replayStepIds: readback join, contradiction, repair, replay. +- witnessArtifactPaths: generated proof appendix, workflow logs, readback + reports, repair receipts. +- current member closure criteria: protocol state advances only with required + readback. +- current member verdict shape: pass, repair-required, or blocked. +- current theorem-by-theorem closure reading: each theorem ties evidence class + to authority and limit. +- current theorem-to-replay grouping: state advancement and repair. +- minimum artifact/replay binding set: proof root, ledger root, database root, + storage root, external receipt when relevant. +- current proof-object fields: evidence class, authority, limit, readback, + conflict policy. +- generated-artifact and test bindings: parity must bind proof and workflow + checks. +- fail-closed conditions: missing, stale, contradictory, or out-of-boundary + evidence. + +## V46 generated canon + +V46 generated canon begins with draft spec-family and canonical-input +validation. Gates 2 through 7 authorize the source-safe protocol +comprehension artifacts. Gate 8 authorizes promotion readiness, the generated +V46 proof appendix, and the maintained V46 promotion workflow. The proof-family +catalog remains a future catalog until a later canon explicitly authorizes +those artifacts. + +### Inherited V19 reproducible-canon artifacts + +V46 inherits V19 reproducible-canon discipline for deterministic replay, +proof-member matrices, theorem evidence, state machines, volatility, negative +mutation, and contract ledger shape. + +### Inherited V20 operator-quality artifacts + +V46 inherits V20 operator-quality artifact posture for accessibility, +operator acceptance, performance budget, projection quality, visual regression, +and quality summary. + +### Exact generated-artifact inventory matrix + +| artifactPath | role | V46 posture | +| --- | --- | --- | +| `.bitcode/v46-spec-family-report.json` | draft spec-family validation report | Gate 1 planned | +| `.bitcode/v46-canonical-input-report.json` | draft canonical input report | Gate 1 planned | +| `.bitcode/v46-protocol-comprehension-object-model.json` | protocol comprehension object and claim taxonomy artifact | Gate 2 | +| `.bitcode/v46-public-operator-claim-boundaries.json` | public/operator claim-boundary artifact | Gate 3 | +| `.bitcode/v46-product-route-comprehension-readback.json` | product route comprehension readback artifact | Gate 4 | +| `.bitcode/v46-interface-claim-contracts.json` | API/MCP, ChatGPT App, Bitcode Chat, and package-consumer claim-contract artifact | Gate 5 | +| `.bitcode/v46-proof-readback-operator-explanation.json` | proof readback and source-safe operator explanation artifact | Gate 6 | +| `.bitcode/v46-local-interface-comprehension-rehearsal.json` | local interface comprehension rehearsal artifact | Gate 7 | +| `.bitcode/v46-promotion-readiness-report.json` | promotion-readiness artifact | Gate 8 | +| `BITCODE_SPEC_V46_PROVEN.md` | generated proof appendix | Gate 8 | +| `.bitcode/v46-inference-synthesis-proof.json` | inference proof-family artifact | future proof catalog | +| `.bitcode/v46-prompt-completeness-proof.json` | prompt proof-family artifact | future proof catalog | +| `.bitcode/v46-static-code-analysis-proof.json` | static-code proof-family artifact | future proof catalog | +| `.bitcode/v46-verification-decisions-proof.json` | verification-decision proof-family artifact | future proof catalog | +| `.bitcode/v46-selection-materialization-proof.json` | selection and materialization proof-family artifact | future proof catalog | +| `.bitcode/v46-authorization-sensitive-flow-proof.json` | authorization and sensitive-flow proof-family artifact | future proof catalog | +| `.bitcode/v46-settlement-source-to-shares-proof.json` | settlement and allocation proof-family artifact | future proof catalog | +| `.bitcode/v46-disclosure-boundary-proof.json` | disclosure-boundary proof-family artifact | future proof catalog | +| `.bitcode/v46-proof-contract-proof.json` | proof-contract proof-family artifact | future proof catalog | +| `.bitcode/v46-source-safe-e2e-rehearsal.json` | source-safe end-to-end rehearsal artifact | future rehearsal catalog | + +### V46 specifying generated artifacts + +V46 specifying generated artifacts must include `.bitcode/v46-spec-family-report.json`, +`.bitcode/v46-canonical-input-report.json`, +`.bitcode/v46-protocol-comprehension-object-model.json`, +`.bitcode/v46-public-operator-claim-boundaries.json`, +`.bitcode/v46-product-route-comprehension-readback.json`, +`.bitcode/v46-interface-claim-contracts.json`, +`.bitcode/v46-proof-readback-operator-explanation.json`, +`.bitcode/v46-local-interface-comprehension-rehearsal.json`, +`.bitcode/v46-promotion-readiness-report.json`, and +`BITCODE_SPEC_V46_PROVEN.md`. The nine proof-family artifacts and separate +source-safe end-to-end rehearsal artifact remain cataloged future evidence, not +Gate 8 promotion prerequisites. + +### Shared generated-artifact fields + +Shared generated-artifact fields include report id, version, generatedAt, +source commit, input roots, artifact roots, pass/fail status, failures, +warnings, source-safe posture, and repair instructions. + +### Artifact-specific generated payload fields + +Artifact-specific generated payload fields include BTD scalar-volume rows, BTC +quote and finality rows, source-to-shares rows, disclosure boundary rows, +interface authority rows, readback evidence rows, and gate taxonomy rows. + +### Artifact confidentiality and disclosability taxonomy + +Artifacts classify fields as public, source-safe actor-scoped, operator-safe, +entitled-source, secret, wallet-private, provider-private, or repair-only. + +### Minimum generated appendix rendered contents + +The minimum generated appendix rendered contents must include aggregate proof +verdict, exact proof-family inventory, exact per-family member inventory, exact +per-family theorem inventory, exact replay-step inventories and theorem +bindings, witness artifact inventories, generated artifact inventories, +scenario and run coverage matrices, proof-source commit, and fail closed when +required evidence is missing, stale, contradictory, or unsafe. + +### Canonical regeneration and fail-closed posture + +Canonical regeneration and fail-closed posture require deterministic outputs, +clean worktree proofs when promotion eventually requires them, and repair +states for missing generated artifacts or stale proof roots. + +## V46 validation canon + +V46 validation proceeds in order: draft spec-family checks, active V45 +promoted-canon checks, canon posture drift checks, small specification atom +checks, formal specification consolidation, parity audit, grouped +implementation tests, proof-only checks, interface proofs, rehearsal, +promotion readiness, and a later promotion workflow. + +Gate 1 validates only active V45 plus draft V46 posture: + +- `node scripts/check-bitcode-spec-family.mjs --version V45 --mode promoted --current-target V45` +- `node scripts/check-bitcode-spec-family.mjs --version V46 --mode draft --current-target V45` +- `node scripts/check-bitcode-canonical-inputs.mjs --current-target V45` +- `node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V45 --draft-target V46` +- `pnpm run check:v46-gate1` +- `pnpm run check:v46-gate2` +- `pnpm run check:v46-gate3` +- `pnpm run check:v46-gate4` +- `pnpm run check:v46-gate5` +- `pnpm run check:v46-gate6` +- `pnpm run check:v46-gate7` +- `pnpm run check:v46-gate8` + +## V46 promotion canon + +V46 promotion is Gate 8 work. It requires every accepted V46 protocol +comprehension row to be closed or explicitly deferred, source-safety to be +preserved, Gate 2 through Gate 7 artifacts to be parseable and fresh, +promotion scripts support V46, `BITCODE_SPEC_V46_PROVEN.md` generation to be +covered, and the V46 promotion workflow to validate before any standalone +`BITCODE_SPEC.txt` pointer change. + +### V46 promotion readiness canon + +V46 promotion readiness is current in Gate 8. Gate 8 generates +`.bitcode/v46-promotion-readiness-report.json`, wires +`.github/workflows/v46-canon-promotion.yml`, binds the six accepted V46 +protocol comprehension artifacts, proves source-safety exclusions, runs +`node scripts/promote-bitcode-canon.mjs --version V46 --commit HEAD --dry-run`, +and prepares the post-promotion `V46 active / draft V47` posture. + +## V46 appendices and canonical supporting material + +V46 supporting material consists of `BITCODE_SPEC_V46.md`, +`BITCODE_SPEC_V46_DELTA.md`, `BITCODE_SPEC_V46_NOTES.md`, +`BITCODE_SPEC_V46_PARITY_MATRIX.md`, `BITCODE_SPEC_V46_PROVEN.md`, +`BITCODE_SPECIFYING.md`, `BITCODE_SPEC_TEMPLATEGUIDE.md`, V46 checkers, and +generated V46 `.bitcode` reports. + +## V46 accepted boundaries and reopen conditions + +Accepted boundaries: + +- V45 is active canon and V46 is draft target. +- V46 formal spec is active runtime law only inside the source-safe, + entitlement-bound, proof-backed boundaries it states after a later + promotion. +- No protected source or wallet private material is exposed. +- BTC finality precedes BTD rights, source unlock, delivery, and compensation. +- Proof-backed readback advances state; telemetry observes state. + +Reopen conditions: + +- A formal V46 section contradicts accepted notes law. +- A parity audit finds a protocol impossibility or unsafe implementation gap. +- A proof, ledger, database, storage, wallet, provider, or delivery evidence + class cannot satisfy readback law. +- A product surface requires source disclosure before entitlement. + +## V46 completion condition + +V46 Gate 1 is complete when the V46 draft spec family exists over active V45, +the roadmap names the version focus and tentative gates, the Gate 1 checker is +green, and CI can validate active V45 plus draft V46. The full V46 version is +complete only after later specification, parity, implementation, proof, +interface, rehearsal, and promotion gates close. + +## Appendix A. Canonical type and surface catalog + +Canonical types and surfaces include AssetPack, deposit AssetPack option, +Depository AssetPack, Read Request, Need, selected Fit set, Need-Fit AssetPack, +BTD scalar-volume, BTC quote, settlement receipt, rights receipt, delivery +receipt, compensation statement, repair case, `/deposit`, `/read`, `/packs`, +API/MCP, ChatGPT App, Bitcode Chat, public docs, landing page, proof roots, +ledger journals, database projections, storage roots, wallet/provider receipts, +and repository delivery receipts. + +## Appendix B. Proof family closure catalog + +The V46 proof family closure catalog binds inference, prompts, static code, +decisions, materialization, authorization, settlement, disclosure, and proof +contracts to generated artifacts and replay. + +### Exact proof-family inventory matrix + +| proofFamily | proofArtifactPath | memberIds | theoremIds | replayStepIds | witnessArtifactPaths | Current source basis | +| --- | --- | --- | --- | --- | --- | --- | +| Inference-synthesis | `.bitcode/v46-inference-synthesis-proof.json` | Reading, deposit, conversation | typed inference, source safety | synthesize, search, preview | execution receipts | formal V46 law | +| Prompt-completeness | `.bitcode/v46-prompt-completeness-proof.json` | prompts, registries | total prompt catalog | resolve, interpolate | prompt inventory | formal V46 law | +| Static-code-analysis | `.bitcode/v46-static-code-analysis-proof.json` | packages, routes, workflows | source alignment | lint, typecheck | CI logs | formal V46 law | +| Verification-decisions | `.bitcode/v46-verification-decisions-proof.json` | review, quote, finality | actor authority | approve, select, settle | decision roots | formal V46 law | +| Selection-and-materialization | `.bitcode/v46-selection-materialization-proof.json` | Fits, bundle, preview, delivery | source withheld | search, synthesize, deliver | storage roots | formal V46 law | +| Authorization-and-sensitive-flow | `.bitcode/v46-authorization-sensitive-flow-proof.json` | policy, wallet, entitlement | no secret leakage | authorize, redact | policy roots | formal V46 law | +| Settlement-source-to-shares | `.bitcode/v46-settlement-source-to-shares-proof.json` | BTD, BTC, allocation | finality before rights | quote, observe, allocate | ledger roots | formal V46 law | +| Disclosure-boundary | `.bitcode/v46-disclosure-boundary-proof.json` | interfaces | source-safe boundary | preview, quote, delivery | interface roots | formal V46 law | +| Proof-contract | `.bitcode/v46-proof-contract-proof.json` | evidence classes | proof-backed readback | readback, repair | proof roots | formal V46 law | + +## Appendix C. Generated artifact contract catalog + +Generated artifacts must be deterministic, source-safe by default, explicit +about confidentiality, and fail closed when proof roots or readback evidence +are missing. The draft generated artifacts are `.bitcode/v46-spec-family-report.json`, +`.bitcode/v46-canonical-input-report.json`, the six Gate 2 through Gate 7 +protocol comprehension artifacts, `.bitcode/v46-promotion-readiness-report.json`, +and `BITCODE_SPEC_V46_PROVEN.md`. The nine proof-family artifacts and separate +source-safe end-to-end rehearsal artifact remain future catalog rows until a +later canon authorizes them. + +### Minimum generated appendix rendered contents + +Minimum generated appendix rendered contents are aggregate proof verdict, exact +proof-family inventory, exact per-family member inventory, exact per-family +theorem inventory, exact replay-step inventories and theorem bindings, witness +artifact inventories, generated artifact inventories, scenario and run coverage +matrices, proof-source commit, and fail closed when evidence cannot be trusted. + +### Canonical regeneration and fail-closed posture + +Canonical regeneration and fail-closed posture require deterministic generation, +source-safe output, current proof-source commit, and repair on stale or missing +artifact roots. + +## Appendix D. Validation and checking gate catalog + +Validation commands include `check:v46-gate1`, `check:v46-gate2`, +`check:v46-gate3`, `check:v46-gate4`, `check:v46-gate5`, +`check:v46-gate6`, `check:v46-gate7`, `check:v46-gate8`, draft V46 +spec-family checks, active V45 promoted checks, V45/V46 canon posture drift +checks, V46 promotion dry-run, and later parity, proof, implementation, +rehearsal, and promotion commands. + +## Appendix E. Current canonical source map + +The current source map is active V45 canon with V46 draft target posture +prepared. Implementation source remains unversioned and is audited from V45 +until a V46 parity gate authorizes specific implementation work. + +## Appendix F. Subsystem totality and derivability matrix + +Required subsystem coverage includes repo supply and depositing, reading and +measured demand, prompt/inference/evaluator ownership, deposit-to-read fit, +recall and ranking, verification decisions, selection and materialization, +branch artifacts and assetPackEvidence, identity, authority, signing, and +policy, sensitive data and confidentiality flows, projection, disclosure, and +redaction, proof families, members, theorems, witnesses, and replay, +settlement, source-to-shares, journals, and exact accounting, telemetry, +persistence, state, and failure semantics, host/runtime capability truth, +operator experience and pedagogy, validation and test stack, generated +artifacts and canonical promotion. + +## Appendix G. Canonical file-family and promotion contract catalog + +The V46 file family is `BITCODE_SPEC_V46.md`, +`BITCODE_SPEC_V46_DELTA.md`, `BITCODE_SPEC_V46_NOTES.md`, +`BITCODE_SPEC_V46_PARITY_MATRIX.md`, `BITCODE_SPEC_V46_PROVEN.md`, and +supporting Bitcode specifying files. Promotion may update `BITCODE_SPEC.txt` +only through the promotion gate. + +## Appendix H. Operator surface and quality contract catalog + +Operator surfaces include website routes, ChatGPT App, Bitcode Chat, API/MCP, +public docs, landing page, workflow checks, proof reports, and repair readback. +Quality contracts require accessible, source-safe, performant, replayable, and +operator-legible outputs. + +## Appendix I. Scenario, workflow, and cross-product contract catalog + +Scenario coverage inherits auth-issuer-rollback, privacy-boundary-proof-export, +polyglot-gateway-benchmark-remediation, and auth-many-asset-normalization. +Workflow coverage includes Targeted deposit and Normalization deposit across +patch and context branches and public, buyer, reviewer, and internal +principals. The contract remains Openly writable, Measurably readable, +Provable, and Valuable. + +## Appendix J. Fail-closed contract and error posture matrix + +Fail closed on invalid deposit, prompt contract incompleteness, +parsed-envelope inadmissibility, no-survivor asset pack, authorization denial, +public projection overexposure, settlement conservation drift, stale promoted +status truth, missing proof readback, contradictory evidence, source leak, +wallet custody drift, or delivery mismatch. + +## Appendix K. Source-bearing AssetPack and artifact contract catalog + +Source-bearing AssetPack artifacts include `.bitcode/asset-pack.lock.json`, +`.bitcode/selected-source-material.json`, `.bitcode/verification-report.json`, +`.bitcode/source-to-shares.json`, `.bitcode/projection-policy.json`, +`.bitcode/system-proof-bundle.json`, +`.bitcode/v46-promotion-readiness-report.json`, and +`BITCODE_SPEC_V46_PROVEN.md`. V46 requires protected source custody, +source-safe preview, entitlement-based unlock, and repository delivery receipt +before Reader-visible source. diff --git a/BITCODE_SPEC_V46_DELTA.md b/BITCODE_SPEC_V46_DELTA.md new file mode 100644 index 000000000..85bdd64b2 --- /dev/null +++ b/BITCODE_SPEC_V46_DELTA.md @@ -0,0 +1,263 @@ +# Bitcode Spec V46 Delta + +## Status + +- Version: `V46` +- V46 state: canonical promotion complete; this delta records the promoted V45-to-V46 protocol-comprehension closure set +- Current canonical/latest target: `V46` +- Canonical proof-source commit: `40a32e9d61a64130c958eda1498812e25a682653` +- Prior canonical anchor: `BITCODE_SPEC_V45.md` +- Prior generated proof appendix: `BITCODE_SPEC_V45_PROVEN.md` +- Generated structured artifact inventory: active canonical `.bitcode/v46-spec-family-report.json`, `.bitcode/v46-canonical-input-report.json`, `.bitcode/v46-canon-posture-drift-report.json`, V46 protocol-comprehension artifacts, `.bitcode/v46-promotion-readiness-report.json`, V46 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V46_PROVEN.md` as the generated proof appendix for V46 promotion +- Source parity state: V46 source-side protocol comprehension object model, public/operator claim boundaries, route readback, interface claim contracts, proof readback, local rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V46 file family +- Notes companion: `BITCODE_SPEC_V46_NOTES.md` +- Spec companion: `BITCODE_SPEC_V46.md` +- Parity companion: `BITCODE_SPEC_V46_PARITY_MATRIX.md` +- Scope: V46 canonical delta for protocol comprehension and public/operator explanation over promoted V45 knowledge commoditization canon +- Last fully realized canonical target preserved in source: `V45` + +## Why V46 exists + +V45 made Bitcode's knowledge commoditization law explicit: AssetPack is the +commodity, BTD is Need-relative weighted scalar knowledge-volume whose settled +form carries rights, BTC is settlement money, source-to-shares routes +contributor compensation, and proof-backed readback advances state. V46 exists +to make that law commercially legible across public, operator, product, +machine, and conversational surfaces without weakening source-safety or +overstating live value-bearing posture. + +## Accepted V46 decisions + +- V46 is active canon after promotion workflow validation. +- V46 opens as a specification-first version; Gate 1 is roadmap/spec-family + opening only. +- V46 focuses on external protocol comprehension and launch-facing claim + readiness before it authorizes implementation changes. +- Public docs, landing copy, `/packs`, `/read`, `/deposit`, API/MCP, ChatGPT + App, and Bitcode Chat must explain the same protocol law with source-safe + boundaries. +- Investor or pitch material may inform wording, but it is not protocol law + unless reconciled into the formal V46 specification family. +- All V46 work must preserve V45's source-safe preview, BTC finality before + source unlock, BTD rights, proof readback, repair, and value-bearing mainnet + blocks. + +## Explicitly deferred + +- V46 replaces V45 after the maintained promotion workflow validates and + advances `BITCODE_SPEC.txt`. +- Gate 8 does not authorize runtime behavior, schema changes, route changes, + settlement behavior, proof-family artifacts, separate source-safe + end-to-end rehearsal artifacts, value-bearing settlement, or source + disclosure. +- Value-bearing mainnet operation remains deferred. +- Generated V46 proof appendix material is source-safe promotion evidence, not + live operation evidence. + +## Accepted Pre-Implementation Sequence + +1. Open the V46 draft family over active V45 and validate draft posture. +2. Specify commercial protocol comprehension atoms in small gates. +3. Consolidate accepted atoms into the formal V46 specification family. +4. Audit implementation parity from the formal V46 family. +5. Group implementation, proof, interface, rehearsal, and documentation work + by accepted parity gaps. +6. Close promotion readiness only after all scoped gates are green. +7. Promote V46 only through the maintained promotion workflow. + +## Gate 1: V46 Commercial Protocol Comprehension Roadmap Opening + +Gate 1 closes when the V46 spec family exists as draft material over active +V45, the roadmap names the V46 focus and tentative gates, the branch/check +contract is present, CI knows how to validate active V45 plus draft V46, and no +V46 file claims promoted authority. + +## Gate 2: Protocol Comprehension Object Model And Claim Taxonomy + +Gate 2 adds `V46ProtocolComprehensionObjectModel` as a source-safe generated +artifact at `.bitcode/v46-protocol-comprehension-object-model.json`. It +formalizes the object vocabulary and claim taxonomy that every public, +product, operator, API/MCP, ChatGPT App, Bitcode Chat, telemetry, and +investor-facing surface must use when explaining Bitcode. + +Accepted Gate 2 decisions: + +- AssetPack, BTD, BTC, Finding Fits, source-safe preview, quote, settlement, + rights transfer, delivery, compensation, proof, repair, and interface claims + are distinct comprehension objects. +- Every explanation is an `InterfaceClaim` with a category, authority source, + disclosure boundary, required evidence class, and forbidden interpretation. +- Claim categories are `protocol-law`, `product-guidance`, + `operator-evidence`, `investor-framing`, `telemetry-observability`, + `preview-claim`, `quote-claim`, `settlement-claim`, `rights-claim`, + `delivery-claim`, `compensation-claim`, and `repair-claim`. +- Claim authority is evidence-specific: generated proof, ledger readback, + database projection, object storage root, wallet/provider receipt, + repository delivery receipt, telemetry, interface guidance, and public + education do not have interchangeable authority. +- Gate 2 is still specification/proof metadata work. It does not authorize + route, API, settlement, delivery, or value-bearing mainnet behavior changes. + +## Gate 3: Public Docs, Landing, And Operator Claim Boundaries + +Gate 3 adds `V46PublicOperatorClaimBoundaries` as a source-safe generated +artifact at `.bitcode/v46-public-operator-claim-boundaries.json`. It binds +public docs, landing copy, README surfaces, and operator notes to Gate 2 claim +authority so launch-facing statements are readable, source-safe, and +non-overclaiming. + +Accepted Gate 3 decisions: + +- Public docs explain; proof readback decides. +- Landing copy may teach AssetPacks, BTD scalar volume and rights, BTC + settlement, and product routes, but it cannot claim protocol-law authority. +- Public docs may expose route links, state labels, source-safe measurements, + claim categories, proof roots, and compatibility redirects. +- Operator notes may name proof roots and repair commands, but must not record + secret values, wallet private material, protected source, raw protected + prompts, provider responses with source, or unpaid AssetPack source. +- The legacy `protocol-v26` docs route is only a compatibility alias to the + current `/docs/protocol` article. +- Gate 3 does not authorize runtime, route-state, settlement, delivery, or + value-bearing mainnet behavior changes. + +## Gate 4: `/packs`, `/read`, And `/deposit` Comprehension UX Readback + +Gate 4 adds `V46ProductRouteComprehensionReadback` as a source-safe generated +artifact at `.bitcode/v46-product-route-comprehension-readback.json`. It binds +the three product routes to Gate 2 claim authority and Gate 3 public/operator +boundaries so route UX can stay low-detail by default while preserving +expandable proof readback. + +Accepted Gate 4 decisions: + +- `/packs` is the searchable PackActivity master-detail readback for + source-safe market, portfolio, settlement, compensation, delivery, repair, + governance, and proof-root activity. +- `/read` remains the five-step Reading route: request Read, review + synthesized Need, request Finding Fits, review source-safe AssetPack preview, + and buy/settle. +- `/deposit` remains the five-step source-supply route: connect source, + synthesize AssetPack options, review source-safe options, submit deposit, and + read Depository state. +- Low-detail route summaries are allowed only when expandable source-safe + detail preserves route-owned state, proof roots, disclosure boundaries, and + repair blockers. +- Gate 4 does not expose protected source, unpaid AssetPack source, raw + prompts, raw provider responses, credentials, wallet private material, + private settlement payloads, or value-bearing mainnet authority. + +## Gate 5: API/MCP, ChatGPT App, And Bitcode Chat Claim Contracts + +Gate 5 adds `V46InterfaceClaimContracts` as a source-safe generated artifact +at `.bitcode/v46-interface-claim-contracts.json`. It binds public API, MCP +API, ChatGPT App, Bitcode Chat, and package-consumer surfaces to the Gate 2 +`InterfaceClaim` taxonomy, Gate 3 public/operator claim boundaries, and Gate 4 +product-route readback law. + +Accepted Gate 5 decisions: + +- The public API exposes versionless source-safe schema compatibility, proof + roots, denied repair states, and compatibility posture without protected + source or private payload serialization. +- MCP exposes package-owned tool contracts, permission requirements, provider + binding blockers, write-admission posture, proof roots, queue metadata, and + denied repair states; it does not settle BTC, transfer BTD rights, unlock + source, or deliver source-bearing AssetPacks by itself. +- The ChatGPT App exposes package-owned Reading and delivery-adjacent action + contracts, source-safe rendering, explicit write admission, proof roots, and + settlement/right/delivery denied states until proof readback authorizes the + next boundary. +- Bitcode Chat exposes route-local conversation, stream, proof-root, and + terminal-delegated handoff metadata; it does not advance protocol state or + create parallel state authority. +- Package consumers receive stable source-safe contracts and generated + readback metadata, not a separate state machine or disclosure boundary. +- Gate 5 remains source-safe metadata and contract readback work. It does not + authorize runtime behavior changes, source disclosure, settlement, delivery, + or value-bearing mainnet behavior. + +## Gate 6: Proof Readback And Source-Safe Operator Explanation + +Gate 6 adds `V46ProofReadbackOperatorExplanation` as a source-safe generated +artifact at `.bitcode/v46-proof-readback-operator-explanation.json`. It binds +canonical/generated proof, execution/workflow receipts, ledger journals, +database projections, object-storage roots, telemetry streams, +wallet/provider receipts, repository delivery receipts, and +repair/reconciliation receipts into one operator-readable evidence authority +ladder. + +Accepted Gate 6 decisions: + +- Every evidence class answers the same operator questions: what evidence is + this, what can it authorize, what can it not authorize, what stronger + evidence must agree, and what repair happens on conflict. +- Proof-backed readback remains the only state advancement mechanism. +- Telemetry streams remain observability only. +- Database projections remain queryable read models, not ledger truth. +- Wallet/provider receipts prove non-custodial payment observation posture, + not final settlement. +- Repository delivery receipts prove entitled source unlock only after + finality, BTD rights, source-to-shares compensation, storage, and + reconciliation agree. +- Evidence conflict fails closed into source-safe repair rather than partial + success. +- Gate 6 remains source-safe metadata and explanation work. It does not + authorize source disclosure, settlement, delivery, rights transfer, or + value-bearing mainnet behavior. + +## Gate 7: Local Interface Comprehension Rehearsal + +Gate 7 adds `V46LocalInterfaceComprehensionRehearsal` as a source-safe +generated artifact at `.bitcode/v46-local-interface-comprehension-rehearsal.json`. +It rehearses local docs/landing, `/packs`, `/read`, `/deposit`, API/MCP, +ChatGPT App, Bitcode Chat, proof telemetry, and repair readback surfaces +against the Gate 2 through Gate 6 claim and authority artifacts. + +Accepted Gate 7 decisions: + +- The rehearsal is local-only and does not run value-bearing mainnet, + live BTC finality, source-bearing delivery, or external settlement. +- Each rehearsed surface binds to Gate 2 claim ids, claim categories, and + authority ids. +- Gate 2 through Gate 6 generated artifacts must pass before the rehearsal + can pass. +- Public and product routes may explain source-safe state, but proof readback + remains state authority. +- API/MCP, ChatGPT App, and Bitcode Chat remain source-safe guidance or machine + interfaces; they cannot create parallel protocol authority. +- Proof telemetry and repair readback can show phases, steps, proof roots, + disclosure posture, and metadata, but telemetry remains observability only. +- Gate 7 does not expose protected source, unpaid AssetPack source, prompts, + provider responses, credentials, wallet private material, private settlement + payloads, or private repository access. + +## Gate 8: V46 Promotion Readiness + +Gate 8 adds `V46PromotionReadinessReport` as a source-safe generated artifact +at `.bitcode/v46-promotion-readiness-report.json`. It binds the six accepted +V46 protocol comprehension artifacts, generated `BITCODE_SPEC_V46_PROVEN.md` +support, `v46-canon-promotion.yml`, V46 gate/canon workflow posture, and +promotion scripts support V46 before a version-promotion pull request can ask +`main` to advance from V45 to V46. + +Accepted Gate 8 decisions: + +- Gate 8 covers V46 promotion readiness only; it does not add runtime route, + settlement, delivery, proof-family, value-bearing mainnet, or source + disclosure behavior. +- The report must prove source-safe promotion metadata over Gate 2 through + Gate 7 artifacts and generated proof outputs. +- The promotion workflow must validate pre-promotion V45-to-V46 draft before + promotion generation and V46 active / draft V47 after generation. +- `BITCODE_SPEC_V46_PROVEN.md` is the generated proof appendix for V46 + promotion readiness, not evidence of live payment or delivery. +- `node scripts/promote-bitcode-canon.mjs --version V46 --commit HEAD --dry-run` + must be greenable before the gate can close. + +## Commit-Body Direction + +V46 commit bodies should name the gate class, protocol law or interface claim +being clarified, validation command, source-safety posture, and whether the +change is specification-only, parity-only, proof-only, interface-only, +implementation, rehearsal, or promotion work. diff --git a/BITCODE_SPEC_V46_NOTES.md b/BITCODE_SPEC_V46_NOTES.md new file mode 100644 index 000000000..0c5d2fb9f --- /dev/null +++ b/BITCODE_SPEC_V46_NOTES.md @@ -0,0 +1,1035 @@ +# Bitcode Spec V46 Notes + +## Status + +- Version: `V46` +- Canonical pointer: `BITCODE_SPEC.txt` -> `V46` +- Active canonical anchor: `BITCODE_SPEC_V46.md` +- Active generated proof appendix: `BITCODE_SPEC_V46_PROVEN.md` +- Current canonical/latest target: `V46` +- Canonical proof-source commit: `40a32e9d61a64130c958eda1498812e25a682653` +- Prior canonical anchor: `BITCODE_SPEC_V45.md` +- Prior generated proof appendix: `BITCODE_SPEC_V45_PROVEN.md` +- Generated structured artifact inventory: active canonical `.bitcode/v46-spec-family-report.json`, `.bitcode/v46-canonical-input-report.json`, `.bitcode/v46-canon-posture-drift-report.json`, V46 protocol-comprehension artifacts, `.bitcode/v46-promotion-readiness-report.json`, V46 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V46_PROVEN.md` as the generated proof appendix for V46 promotion +- Source parity state: V46 source-side protocol comprehension object model, public/operator claim boundaries, route readback, interface claim contracts, proof readback, local rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V46 file family +- V46 state: canonical promotion complete; V46 notes record accepted protocol object-model, public/operator claim boundary, route readback, interface contract, proof explanation, local rehearsal, and promotion-readiness evidence +- Scope: V46 canonical notes for protocol comprehension and public/operator explanation over promoted V45 knowledge commoditization canon +- Last fully realized canonical target preserved in source: `V46` + +## Notes companion rule + +These notes record the accepted V46 opening atoms. After formal specification +consolidation and promotion, a later workflow may make `BITCODE_SPEC_V46.md` +and its companion family active canon. V46 now holds the active pointer truth through `BITCODE_SPEC.txt`. + +## Concise current-system reading + +V46 formalizes Bitcode as the world's knowledge commoditization system: +AssetPacks enter and leave the Depository, BTD measures Need-relative scalar +knowledge-volume and settled rights, BTC is payment truth, interfaces remain +source-safe windows, and proof-backed readback advances protocol state. + +## Simplified-spec reading rule + +When V46 work becomes broad, reduce it to the formal law: + +1. AssetPack is the traded commodity, never raw source. +2. BTD is weighted scalar knowledge-volume whose settled form carries rights. +3. BTC settlement finality precedes BTD rights transfer and source unlock. +4. Interfaces may guide and inspect, but proof readback advances state. +5. Implementation begins only after formal specification and parity audit. + +## Notes provenance rule + +These notes are implementation authority only through the promoted V46 +specification family. They preserve accepted notes-level atoms that have been +consolidated into formal V46 specification text, parity evidence, proof +readback, and promotion receipts. + +## Deferred from V45 + +V45 promotes the scaled engineering economy: `/packs` as portfolio and market +intelligence, `/read` as budgeted BTC procurement of source-bearing +AssetPacks, `/deposit` as supply and earning visibility, and organization +policy over wallet authority, spend limits, source criticality, and approval +thresholds. + +V46 began by discussing Bitcode as the world's knowledge commoditization +system. The discussion audited whether the canonical +protocol fully specifies the commercial experience of depositing and reading +packs, BTC source-of-truth settlement, BTD measuring/mining/minting, rights +transfer, proof/ledger observability, API/MCP access, GitHub delivery, +ChatGPT App surfaces, Bitcode Chat conversation overlays, public docs, +landing-page claims, compute constraints, storage boundaries, and +build/process validation. + +## Candidate V46 workstreams + +- Protocol completeness: audit the V45 canon for AssetPack synthesis, BTD + measuring/mining/minting, BTC settlement, proof roots, ledgerized + journaling, and source-safe disclosure boundaries. +- Product comprehension: refine how `/packs`, `/read`, and `/deposit` explain + the exchange without in-app essays while preserving expandable proof, + telemetry, and economic detail. +- Interface system: align website routes, ChatGPT App, Bitcode Chat + conversation overlay, API/MCP entrypoints, public docs, and landing page as + coherent windows into the same protocol. +- Operational proof: preserve V45 workflow reliability while identifying the + next proof, test, and replay obligations needed for the commercial system. + +## Gate 1: V46 Commercial Protocol Comprehension Roadmap Opening + +Gate 1 records the draft-opening note for the V46 family. It creates the V46 +files, preserves `BITCODE_SPEC.txt -> V45`, names the draft focus, wires a +Gate 1 checker, and prepares CI to validate active V45 plus draft V46. It does +not authorize runtime behavior or generated V46 proof-family artifacts. + +## Gate 2: Protocol Comprehension Object Model And Claim Taxonomy + +Gate 2 records the first package-backed V46 comprehension atom. It creates a +source-safe object model and claim taxonomy artifact for the commercial +protocol explanation layer. It remains draft-target metadata over active V45: +no route behavior, API behavior, settlement behavior, delivery behavior, +source disclosure, or value-bearing mainnet admission is authorized by this +gate. + +## Gate 3: Public Docs, Landing, And Operator Claim Boundaries + +Gate 3 records the public/operator-facing comprehension atom. It creates a +source-safe claim-boundary artifact for public docs, landing, README, and +operator notes. It remains draft-target metadata over active V45: no route +behavior, API behavior, settlement behavior, delivery behavior, source +disclosure, or value-bearing mainnet admission is authorized by this gate. + +## Gate 4: `/packs`, `/read`, And `/deposit` Comprehension UX Readback + +Gate 4 records the product-route comprehension atom. It creates a source-safe +route readback artifact for `/packs`, `/read`, and `/deposit`. It remains +draft-target metadata over active V45: it may audit and clarify route copy, +state labels, readback roots, and tests, but it does not authorize source +disclosure, payment finality, delivery, or value-bearing mainnet admission. + +## Gate 5: API/MCP, ChatGPT App, And Bitcode Chat Claim Contracts + +Gate 5 records the interface claim contract atom. It creates a source-safe +artifact for API, MCP API, ChatGPT App, Bitcode Chat, and package-consumer +readback. It remains draft-target metadata over active V45: it may audit and +clarify schema contracts, tool/action contracts, source-safe rendering, +conversation handoff, denied states, proof roots, and tests, but it does not +authorize source disclosure, settlement finality, delivery, rights transfer, or +value-bearing mainnet admission. + +## V46 interface claim contract atom: InterfaceClaim contracts + +Audit classification: Gates 2 through 4 make claim taxonomy, public/operator +boundaries, and product route comprehension explicit, but machine and +conversation surfaces still need a single source-safe contract that prevents +API, MCP, ChatGPT App, Bitcode Chat, or package consumers from becoming a +parallel state authority. The contract must make every surface readable to +operators and integrators while preserving proof-backed protocol authority. + +Interface claim contract law: + +The public API is a versionless schema-compatibility boundary. It may expose +source-safe fields, proof roots, denied repair states, example postures, and +schema compatibility readback. It must not expose protected source, unpaid +AssetPack source, raw protected prompts, raw provider responses, credentials, +wallet private material, private settlement payloads, or live value-bearing +mainnet authority. + +The MCP API is a package-owned tool boundary. It may expose tool ids, +permission requirements, provider binding requirements, queue metadata, +write-admission posture, proof roots, and denied repair states. It cannot +settle BTC, transfer BTD rights, unlock source, or deliver source-bearing +AssetPacks without the ledger, wallet, rights, and delivery receipts required +by protocol law. + +The ChatGPT App is a package-owned assistant action boundary. It may expose +source-safe Reading action descriptors, source-safe renderers, explicit +confirmation/write-admission blockers, settlement blockers, delivery locks, +and proof roots. It must keep the same source-safe preview and settlement +boundary as `/read` and `/packs`. + +Bitcode Chat is a conversation overlay, stream, and terminal-delegated handoff +surface. It may summarize route-local state, stream source-safe execution +metadata, preserve proof roots, and hand users to `/read`; it cannot advance +protocol state, create delivery entitlement, settle, or bypass route-owned +state machines. + +Package consumers receive stable source-safe read contracts and generated +metadata. They can inspect `InterfaceClaim` contracts and proof-root posture, +but they do not get separate protocol authority, source access, settlement +authority, or private payload visibility. + +Acceptance for this atom: `V46InterfaceClaimContracts` must bind all five +surface ids, all required claim ids, claim categories, authority ids, +capability ids, source roots, proof-root projection, denied-state repair, +source-safe disclosure exclusions, package exports, generated artifact +freshness, workflow wiring, and focused protocol tests. The artifact path is +`.bitcode/v46-interface-claim-contracts.json`. + +## Gate 6: Proof Readback And Source-Safe Operator Explanation + +Gate 6 records the proof readback operator explanation atom. It creates a +source-safe artifact for evidence authority classes and operator repair +readback. It remains draft-target metadata over active V45: it may audit and +clarify evidence classes, authority ids, stronger/weaker evidence, conflict +behavior, repair states, and tests, but it does not authorize source +disclosure, settlement finality, delivery, rights transfer, or value-bearing +mainnet admission. + +## V46 proof readback operator explanation atom: evidence authority ladder + +Audit classification: V45 defines proof-backed readback as the only state +advancement mechanism, and Gates 2 through 5 make claims and interfaces +source-safe. Operators and integrators still need one generated object that +distinguishes which receipt has which authority when proof, ledger, database, +storage, wallet/provider, repository delivery, telemetry, and repair evidence +do not all agree. + +Proof readback operator law: + +Canonical specification and generated proof define the law and accepted proof +families; they do not prove that a live payment, delivery, or rights transfer +happened. Execution/workflow receipts prove that work ran and can be replayed; +they do not own commercial finality. Ledger journals are payment/finality +authority, but source unlock still requires matching rights, storage, and +repository delivery readback. Database projections are read models and must +yield to stronger roots. Object-storage roots prove custody and withheld +bundle posture, not Reader entitlement by themselves. Telemetry streams are +observability only. Wallet/provider receipts prove non-custodial payment +observation posture, not finality. Repository delivery receipts prove +entitled delivery after finality, BTD rights, source-to-shares compensation, +and storage reconciliation. Repair/reconciliation receipts explain conflict, +retry, approval, and fail-closed state. + +Acceptance for this atom: `V46ProofReadbackOperatorExplanation` must bind all +evidence class ids, Gate 2 authority ids and claim ids, required operator +question ids, source roots, stronger-evidence requirements, conflict behavior, +repair states, source-safe disclosure exclusions, package exports, generated +artifact freshness, workflow wiring, and focused protocol tests. The artifact +path is `.bitcode/v46-proof-readback-operator-explanation.json`. + +## V46 local interface comprehension rehearsal atom: local surface readback rehearsal + +Audit classification: Gates 2 through 6 now define the claim taxonomy, public +and product wording boundaries, machine/conversation contracts, and proof +authority ladder. Gate 7 must rehearse those artifacts together against local +source roots before promotion work can claim the interface explanation is +coherent. + +Local rehearsal law: + +The local rehearsal reads source roots for public docs, landing, `/packs`, +`/read`, `/deposit`, API/MCP, ChatGPT App, Bitcode Chat, proof telemetry, and +repair readback. It checks that each surface maps back to Gate 2 claim ids, +uses accepted evidence authority, keeps source-safe disclosure labels, and +names repair expectations when proof roots or stronger evidence are missing. + +Acceptance for this atom: `V46LocalInterfaceComprehensionRehearsal` must bind +all local surface ids, required local step ids, Gate 2 claim ids, claim +categories, authority ids, source roots, prior V46 artifact pass states, +source-safe disclosure exclusions, package exports, generated artifact +freshness, workflow wiring, and focused protocol tests. The artifact path is +`.bitcode/v46-local-interface-comprehension-rehearsal.json`. + +## Gate 8: V46 Promotion Readiness + +Gate 8 records the promotion-readiness atom. It creates +`.bitcode/v46-promotion-readiness-report.json`, binds the six accepted V46 +protocol comprehension artifacts, adds generated `BITCODE_SPEC_V46_PROVEN.md` +support, wires `v46-canon-promotion.yml`, and prepares active V46 / draft V47 +posture after promotion. It remains source-safe promotion metadata over active +V45 until the version-promotion pull request validates and updates +`BITCODE_SPEC.txt`. + +Promotion readiness law: + +Gate 8 proves that the V46 specification family, generated artifacts, package +exports, promotion scripts, shared workflows, and promotion workflow agree on +the same state transition: pre-promotion V45-to-V46 draft before promotion, then active +V46 / draft V47 after promotion. It must not treat proof-family catalog rows, +source-bearing delivery, BTC finality, rights transfer, or value-bearing +mainnet behavior as completed by documentation alone. + +Acceptance for this atom: `V46PromotionReadinessReport` must be source-safe, +parseable, fresh, and backed by `check:v46-gate8`, V46 promotion-script +support, `BITCODE_SPEC_V46_PROVEN.md`, `.github/workflows/v46-canon-promotion.yml`, +gate/canon workflow support, docs support, package exports, generated artifact +freshness, and focused protocol tests. + +## V46 product route comprehension atom: route readback for Packs, Reading, and Depositing + +Audit classification: V43 through V45 created the route-product skeleton and +economic law, but product routes still need one V46 comprehension contract that +binds their low-detail UX to proof readback. The route should be easy to scan +in collapsed/default form, while every commercial claim must remain expandable +to source-safe proof, route-owned state, and repair posture. + +Product-route law: + +`/packs` is the searchable PackActivity master-detail surface. It is allowed +to show rows, filters, sorting, source-safe measurements, proof roots, +settlement state, compensation state, delivery state, repair state, governance +readback, accounting readback, portfolio positions, and market signals. It is +not a source disclosure surface and cannot override ledger or proof readback. + +`/read` is the five-step Reading route. It moves from Read Request to reviewed +Need, Finding Fits, source-safe AssetPack preview, and buy/settle. It must name +`ReadNeedComprehensionSynthesis` and `ReadFitsFindingSynthesis`, preserve the +accepted-Need blocker before Finding Fits, show preview and quote metadata +without source, and keep source-bearing AssetPack contents withheld until BTC +finality, BTD rights transfer, and entitled repository delivery. + +`/deposit` is the five-step source-supply route. It moves from connected +source to AssetPack option synthesis, source-safe option review, deposit +submission, and Depository state readback. It may show measurements, demand +roots, policy roots, estimated ROI, BTD potential, and compensation metadata. +It must not claim final Need-relative BTD or expose raw source at option time. + +Acceptance for this atom: `V46ProductRouteComprehensionReadback` must bind +`/packs`, `/read`, and `/deposit` route ids, route paths, low-detail defaults, +route-owned state, search/filter/sort, Reading and Depositing five-step flows, +expandable proof readback, source-safe disclosure exclusions, package exports, +generated artifact freshness, workflow wiring, and focused protocol tests. The +artifact path is `.bitcode/v46-product-route-comprehension-readback.json`. + +## V46 public/operator claim-boundary atom: public/operator claim boundaries + +Audit classification: Gate 2 defines the typed claim taxonomy, but public and +operator surfaces still need an explicit source-safe readback boundary. Public +docs and landing copy can help humans understand Bitcode; operator notes can +help maintainers triage proof and repair posture. Neither surface can become +protocol law, payment truth, finality truth, ledger truth, telemetry authority, +or a source disclosure channel. + +Claim-boundary law: + +Public docs explain; proof readback decides. Public docs, landing copy, +README surfaces, and operator notes may name AssetPack commodity flow, BTD +scalar knowledge volume and rights, BTC settlement money, source-safe +measurements, route links, state labels, proof roots, compatibility aliases, +generated artifact paths, dashboard ids, runbook ids, and repair commands. +They must not serialize protected source, unpaid AssetPack source, raw +protected prompts, raw protected model/provider responses with source, secret +values, provider tokens, wallet private material, private settlement payloads, +or live value-bearing mainnet authority. + +Compatibility law: + +`/docs/protocol` is the current public protocol article. `protocol-v26` is only +a compatibility alias and must redirect or resolve to the current article +without creating a parallel current docs surface. + +Acceptance for this atom: `V46PublicOperatorClaimBoundaries` must bind public +docs, landing, operator docs, README surfaces, required copy anchors, forbidden +overclaim scans, source-safety exclusions, package exports, generated artifact +freshness, workflow wiring, and focused protocol tests. The artifact path is +`.bitcode/v46-public-operator-claim-boundaries.json`. + +## V46 protocol atom 6: protocol comprehension object model and claim taxonomy + +Audit classification: V46 already names the major protocol objects in the +specification, and V45 already proves the knowledge commoditization law. The +remaining comprehension gap is that external and interface statements need a +typed claim boundary: what object is being described, what authority backs the +claim, which disclosure boundary applies, and which common overclaims are +forbidden. + +Protocol-law statement: + +Every public, product, operator, API/MCP, ChatGPT App, Bitcode Chat, +telemetry, investor, or documentation statement about Bitcode is an +`InterfaceClaim`. Each `InterfaceClaim` must identify the object it describes, +the claim category, the evidence authority, the disclosure boundary, required +proof/readback roots, and forbidden interpretations. Claims may simplify +language for their audience, but they may not collapse AssetPack, BTD, BTC, +preview, quote, observed payment, finality, rights transfer, delivery, +compensation, proof, or repair states. + +Claim taxonomy separates protocol law from product guidance, operator evidence, investor framing, telemetry, preview, quote, settlement, rights, delivery, compensation, and repair claims. + +The canonical claim categories are: + +- `protocol-law` +- `product-guidance` +- `operator-evidence` +- `investor-framing` +- `telemetry-observability` +- `preview-claim` +- `quote-claim` +- `settlement-claim` +- `rights-claim` +- `delivery-claim` +- `compensation-claim` +- `repair-claim` + +The canonical authority classes are: + +- `canonical-specification` +- `generated-proof` +- `ledger-readback` +- `database-projection` +- `object-storage-root` +- `wallet-provider-receipt` +- `repository-delivery-receipt` +- `telemetry-observability-only` +- `interface-guidance-only` +- `public-education-only` + +Forbidden claim collapses are now explicit: AssetPack is not raw source, BTD +is not only a read-right and not money, deposit option is not final BTD, +preview is not source disclosure, quote is not payment, observed payment is +not finality, database projection is not ledger truth when stronger readback +conflicts, telemetry and conversation do not advance state, investor copy is +not protocol law, value-bearing mainnet remains blocked, and Bitcode never +takes custody of wallet private material. + +Acceptance for this atom: later V46 documentation, route, API/MCP, ChatGPT +App, Bitcode Chat, public docs, landing, proof, and rehearsal gates may adapt +the wording by surface, but they must preserve this object model, claim +taxonomy, evidence-specific authority, disclosure boundary labeling, +forbidden-collapse list, and source-safe generated artifact posture. + +## V46 opening discussion frame + +V46 opened from the premise that specification is the source of protocol truth. +Before the V46 parity matrix and gate plan existed, the first work was a +protocol audit over the promoted V45 canon. The audit classified each framing +as clearly specified, vaguely specified, incorrectly specified, missing, or +already production-grade: + +- Bitcode as the world's knowledge commoditization system. +- AssetPacks as the packaged knowledge commodity entering and leaving the + Depository. +- Depositing as source-safe supply formation and later contributor + compensation. +- Reading as demand formation, Need synthesis, Finding Fits, quote approval, + BTC settlement, BTD rights transfer, and repository delivery. +- `/packs` as the searchable master-detail surface for Bitcode network + activity, proofs, statements, repairs, and economic state. +- BTC as settlement money and source of payment truth. +- BTD as the weighted scalar knowledge-volume unit whose settled form carries + rights, source unlock authority, ownership boundaries, and source-to-shares + allocation context. +- Proof roots, ledgerized journaling, telemetry, database/storage + synchronization, and generated canon as auditability rails. +- Website routes, ChatGPT App, Bitcode Chat conversation overlays, API/MCP, + public docs, and landing page as coherent interface windows into the same + protocol law. + +## V46 known starting observations + +- V45 is strong on source-safe economic labels, route law, proof families, + generated artifacts, organization governance, and scaled rehearsal. +- V45 needed this promotion addendum because canon posture text is protocol law: + a promoted spec cannot contain stale active/draft hierarchy prose. +- V45 states the BTD/BTC/source-to-shares roles clearly, but V46 must decide + whether BTD measuring, mining, minting, scalar knowledge-volume, ownership, + and lifecycle state are specified precisely enough for enterprise and public + protocol comprehension. +- V45 names BTC settlement, quote, observed payment, final settlement, + reconciliation, and repair states, but V46 should audit whether the exact + payment/finality/source-unlock/delivery state machine is complete enough. +- V45 identifies interface surfaces beyond the website only as future alignment + targets; V46 should decide how deeply each interface must be specified before + implementation gates. + +## V46 questions before a parity matrix + +1. What is the smallest complete protocol-law statement for Bitcode as + knowledge commoditization system? +2. What exact state transitions define an AssetPack from potential deposit + option through admitted supply, Finding Fits, paid Need-Fit pack, delivery, + compensation, and repair? +3. What exact state transitions define BTD measuring, mining, minting, scalar + knowledge-volume, ownership transfer, source unlock, and post-settlement + rights? +4. What exact state transitions define BTC quote, payment observation, + confirmation/finality, repair, refund/escalation if any, and contributor + compensation? +5. Which user-visible statements are allowed before settlement, after preview, + after quote, after payment observation, after finality, after rights + transfer, and after repository delivery? +6. Which surfaces are protocol-authoritative in V46: `/packs`, `/read`, + `/deposit`, API/MCP, ChatGPT App, Bitcode Chat, public docs, and landing + page? +7. Which V46 gates should be specification-only, proof-only, interface-only, + implementation, rehearsal, and promotion gates? + +## V46 gate sequencing rule + +V46 proceeds in four ordered movements: + +1. Specification atom gates. Each small protocol specification atom is its own + gate and pull request. Each atom must be correct alone before the next atom + begins, and every atom must be reconciled into the gestalt of Bitcode as the + knowledge commoditization system. +2. Formal specification consolidation gate. After the notes-level + specification atoms are accepted, one gate updates the V46 specification + family from those accepted atoms before implementation auditing begins. +3. Specification parity matrix gate. After the V46 specification family is + updated, one gate audits implementation against the formalized + specification and builds the V46 parity matrix across source code, tests, + proofs, generated artifacts, workflows, documentation, and interface + surfaces. +4. Grouped implementation gates. Only after the parity matrix is accepted do + implementation gates begin, grouped by coherent protocol/product work rather + than by isolated prose atoms. + +This ordering is itself V46 protocol-development law: do not start +implementation work, broad parity claims, or promotion planning while the +specification atoms remain unsettled, while accepted notes have not yet been +consolidated into the V46 specification family, or while implementation parity +has not yet been audited from that formal specification. + +## V46 protocol atom 1: knowledge commoditization system + +Audit classification: V42, V43, and V45 clearly state the commercial path for +depositing and reading technical knowledge, and V43/V45 clearly establish +AssetPacks as the object in and out. The remaining gap is precision of the +one-sentence protocol identity. V46 begins by making that identity exact before +it expands any state machine, interface, pricing, or proof surface. + +Protocol-law statement: + +Bitcode is the knowledge commoditization protocol and commercial system for +turning source-derived technical knowledge into source-safe, measurable +AssetPacks whose measurements can be weighted and summed into BTD scalar +knowledge-volume when evaluated against a reviewed Need. That Need-relative BTD +volume drives deterministic BTC quote/settlement, expresses post-settlement +rights, controls source unlock, routes contributor shares, and is audited +through proof roots, ledgerized journals, telemetry, database/storage +synchronization, and generated canon. + +This means: + +- The traded commodity is the AssetPack, not raw source, raw prompts, provider + responses, loose files, screenshots, telemetry logs, or private repository + access. +- BTC is settlement money and payment truth. +- BTD is the protocol's weighted scalar knowledge-volume unit. Settled BTD is + also rights-bearing: it expresses paid read/use rights, source unlock + authority, ownership boundaries, and source-to-shares allocation context. It + is not merely a read-right, not a deposit option, and not a replacement for + BTC. +- BTD-relevant measurements may exist before a Need: deposit-time measurements + can preview coverage, source criticality, likely utility, BTD potential, and + search posture for the depositor and the Depository. +- Final BTD size can only be calculated against a reviewed Need because the + knowledge volume depends on Need-relative measurement weights, admitted fit + quality, and the selected Need-Fit AssetPack context. +- All admissible Need-Fit measurements are weighted and summed to determine the + scalar BTD knowledge volume and source-to-shares allocation basis for the + settled AssetPack. +- Depositing forms source-safe AssetPack supply; it does not sell or disclose + protected source before paid settlement and rights transfer. +- Reading forms measured demand, synthesizes Needs, finds fitting Depository + supply, previews only source-safe measurements/metadata, and buys full + source-bearing delivery only after BTC settlement and BTD rights transfer. +- Source-to-shares is contributor allocation after paid Need-Fit selection; it + is not an estimated earning range and not a quote. +- `/packs`, `/read`, `/deposit`, API/MCP, ChatGPT App, Bitcode Chat, public + docs, and landing pages may present the system differently, but none may + change the protocol law or disclose source outside the settlement boundary. + +What this atom does not yet decide: + +- the exact AssetPack lifecycle state machine; +- the exact BTD measuring, mining, minting, scalar knowledge-volume, + ownership, and transfer state machine; +- the exact BTC quote, observation, confirmation, finality, repair, refund, or + compensation state machine; +- which non-website interfaces are protocol-authoritative in V46; or +- whether later V46 gates should broaden from technical knowledge toward + all knowledge commodities. + +Acceptance for this atom: later V46 specification may refine terms, but it must +preserve AssetPack as commodity, BTC as settlement money, BTD as weighted scalar +knowledge-volume unit whose settled form carries rights, final BTD size as +Need-relative, source-safety before settlement, repository delivery after rights +proof, and proof/ledger/journal observability as Bitcode's market-infrastructure +rails. + +## V46 protocol atom 2: AssetPack lifecycle state machine + +Audit classification: V43/V45 correctly establish AssetPacks in and +AssetPacks out, but the canon still spreads lifecycle law across `/deposit`, +`/read`, `/packs`, BTD accounting, preview, settlement, and delivery sections. +V46 consolidates the lifecycle into one source-safe state machine before it +specifies BTD calculation and BTC settlement state in later atoms. + +Protocol-law statement: + +Every AssetPack-like object must occupy exactly one lifecycle state at every +protocol boundary, and every transition must state whether the object is source +safe only, source-bearing but withheld, quoteable, settled, deliverable, +compensable, or in repair. No interface, API, pipeline, proof artifact, or +operator tool may collapse lifecycle states to make a deposit option look like +settled BTD, a preview look like source disclosure, a quote look like payment +finality, or an admitted Depository AssetPack look like a delivered Need-Fit +AssetPack. + +The canonical AssetPack lifecycle states are: + +| State | Owner boundary | Source visibility | BTD posture | Required proof | +| --- | --- | --- | --- | --- | +| `deposit-option-synthesized` | Depositor-connected source and deposit pipeline | Source-safe measurements and metadata only; protected source remains outside visible Bitcode surfaces | Deposit-time BTD-relevant measurements may show potential, coverage, likely utility, criticality, and search posture; no final BTD size | option synthesis root, source-safety root, measurement root | +| `deposit-option-reviewed` | Depositor review | Same source-safe view; depositor may approve, reject, or request resynthesis | Still no final BTD size and no minted BTD | review decision root and policy root | +| `depository-assetpack-admitted` | Depository supply | Searchable source-safe metadata, measurements, embeddings, and external protected-source pointer roots only | Admitted supply may carry BTD potential, not final BTD, because no reviewed Need has selected it yet | admission receipt, Depository index root, storage projection root | +| `fit-candidates-recalled` | Reading Finding Fits search | Candidate identity, ranking, measurements, and provenance are source-safe to the Reader; candidate source remains withheld | Candidate BTD contribution is only provisional until selected against the reviewed Need | query root, search-channel roots, ranking root | +| `fit-set-selected` | Reading Finding Fits selection | Selected Fit set provenance is source-safe; protected source remains withheld from the Reader | Need-relative contribution can be measured for quote preparation, but rights-bearing BTD is not minted or transferred | selected-fit root, threshold root, verification root | +| `need-fit-assetpack-synthesized` | AssetPack synthesis pipeline | Source-bearing pack material may exist internally, but Reader-visible output is only a source-safe preview | Need-relative BTD scalar volume may be computed for quote; it is not settled BTD | synthesis root, withheld-source bundle root, preview boundary root | +| `need-fit-assetpack-quoted` | Reading procurement and quote authority | Source-safe measurements, metadata, quality posture, BTD volume/range, BTC quote, expiration, and proof roots only | Quoteable BTD volume exists because a reviewed Need and selected Fit set exist; rights are still unpaid and untransferred | quote root, budget approval root when required, expiry root | +| `settlement-observed` | BTC observation and ledger/database journal | Still source-safe to the Reader until settlement finality and BTD transfer are proven | BTC payment is observed but not final; BTD rights are not yet authoritative | BTC observation root, journal root, reconciliation root | +| `btd-settled-rights-transferred` | BTD and settlement authority | Source unlock is authorized for the paying Reader and still withheld from other parties | Rights-bearing BTD is minted/mined/assigned for the Need-Fit AssetPack according to the later BTD state machine | final settlement root, BTD rights receipt, source-to-shares root | +| `source-unlocked-delivery` | Repository delivery authority | Full source-bearing AssetPack delivery is visible only to the entitled Reader boundary, such as the target repository pull request | BTD rights authorize delivery and future ownership/read/use boundaries | source unlock root, repository delivery receipt, pull request root | +| `compensated-and-reconciled` | Contributor compensation and Packs accounting | `/packs` shows source-safe settlement, delivery, and compensation readback; protected source remains boundary-scoped | Source-to-shares allocation and BTC compensation statements reconcile to settlement truth | compensation statement root, ledger/database/storage reconciliation root | +| `repair-required` | Operator repair | Only source-safe failure class, blocker, repair command, and proof roots are visible | No state may advance until the failed transition is repaired and replayed | repair case root, replay root, operator action root | + +Transition law: + +- A deposit option may transition to `depository-assetpack-admitted` only after + depositor approval, policy eligibility, source-safety verification, and + storage/index projection. +- A Depository AssetPack may transition into Reading only through Finding Fits; + the search may recall many candidates above threshold, and the selected Fit + set may contain one or many admitted Depository AssetPacks. +- The Need-Fit AssetPack is synthesized from the reviewed Need plus the selected + Fit set. It is a new Need-relative AssetPack state, not a disclosure of the + underlying admitted Depository AssetPacks. +- The Reader may review the Need-Fit preview and quote, but may not see source + before BTC settlement finality and BTD rights transfer. +- BTD final scalar knowledge-volume is Need-relative. It may be calculated for + quote only after the reviewed Need, selected Fit set, and synthesized + Need-Fit AssetPack exist; it becomes rights-bearing only after settlement. +- BTC payment observation, BTC finality, BTD rights transfer, source unlock, + repository delivery, source-to-shares compensation, and reconciliation are + distinct states and must not be represented as synonyms. +- Any missing proof root, stale storage projection, failed source-safety check, + failed payment finality, failed rights transfer, failed delivery, or failed + compensation reconciliation moves the object to `repair-required`. + +Acceptance for this atom: later V46 specification may refine field names and +proof root schemas, but it must preserve this lifecycle ordering, exact state +separation, source visibility boundaries, Need-relative BTD calculation +condition, one-to-many Finding Fits input set, BTC settlement-before-source law, +and repair-required fail-closed posture. + +## V46 protocol atom 3: BTD scalar-volume state machine + +Audit classification: V45 names BTD range, rights transfer, BTC settlement, +and source-to-shares accounting, and the BTD package already owns semantic +volume measurement, measureminting, range allocation, mint receipts, read +receipts, rights transfer receipts, and contributor allocation. V46 must make +the protocol meaning explicit: BTD is first the weighted scalar +knowledge-volume of a Need-Fit AssetPack, and only its settled form carries +rights, source unlock, ownership boundaries, and contributor allocation +context. + +Protocol-law statement: + +BTD is the non-fungible, proof-addressed scalar unit of technical knowledge +volume for a Need-Fit AssetPack. Deposit-time measurement may estimate BTD +potential, but final BTD size is only computed after a reviewed Need, selected +Fit set, synthesized Need-Fit AssetPack, deterministic measurement weights, +dedupe proofs, and source-safe proof roots exist. BTC remains the payment +asset. BTD is not money, not a spendable balance, not raw source, not a +fungible exchange token, and not final merely because a deposit was admitted. + +The canonical BTD state machine is: + +| State | Meaning | Required inputs | Output posture | +| --- | --- | --- | --- | +| `btd-not-applicable` | Raw source, a Read Request, or an unreviewed pipeline output is not BTD. | none | no BTD claim | +| `btd-potential-measured` | Deposit or market intelligence has source-safe measurements that may estimate future utility. | deposit option root, source-safety root, measurement roots | potential/range language only; no final BTD size | +| `need-fit-measurements-admitted` | A reviewed Need, selected Fit set, and synthesized Need-Fit AssetPack admit measurement rows. | accepted Need root, selected Fit root, synthesis root, dedupe roots | admissible measurement vector | +| `measurement-weight-policy-locked` | Deterministic measurement weights are bound before scalar volume calculation. | weight policy id/hash, measurement taxonomy root, versioned formula root | no post hoc reweighting | +| `weighted-scalar-volume-computed` | Each admissible measurement contributes `normalizedMeasurementVolume * measurementWeight`, summed with fixed-point arithmetic into BTD scalar knowledge-volume. | admitted measurement vector, weight policy root, dedupe roots, proof roots | Need-relative normalized BTD volume | +| `btd-quantized` | The normalized scalar volume is quantized into protocol BTD cell count or zero-cell tail posture. | normalized BTD volume, quantization root, fixed supply parameters | quoteable BTD token count or zero-cell receipt | +| `measuremint-applied` | The measureminting curve applies cumulative admitted measurement against fixed supply. | prior measuremint state, normalized BTD volume, settlement journal root, access policy hash | measuremint receipt and next measuremint state | +| `btd-range-assigned` | A non-overlapping AssetPack BTD range is assigned when positive cells are minted. | measuremint receipt, supply state, range allocation inputs | source-safe mint receipt; no Reader rights yet | +| `btd-quote-bound` | The BTD volume/range and access policy are bound to a BTC quote for the Reader. | BTD receipt roots, quote root, budget approval root when required | source-safe quote; no payment finality | +| `btd-rights-pending` | BTC payment may be prepared, signed, broadcast, or observed, but finality and rights transfer are incomplete. | payment observation root, quote root, ledger journal root | source remains locked | +| `btd-rights-transferred` | Confirmed BTC settlement authorizes BTD rights transfer to the Reader boundary. | confirmed BTC finality root, rights transfer receipt, ledger projection root | rights-bearing BTD and source unlock authority | +| `btd-source-to-shares-allocated` | Contributor compensation is allocated from the paid Need-Fit settlement. | source-to-shares proof, BTD range slices, BTC payment observation, contributor roots | allocation and compensation readback | +| `btd-repair-required` | Measurement, weight, mint, range, quote, payment, rights, allocation, or reconciliation proof is missing or stale. | repair blocker root | fail-closed repair only | + +Measurement law: + +- Every final BTD measurement row must be Need-relative, accepted, deduped, + proof-rooted, and tied to the selected Fit set that contributed to the + synthesized Need-Fit AssetPack. +- Measurement weights are deterministic protocol policy, not UI preference, + operator discretion, model confidence alone, or depositor-provided pricing. +- Scalar volume calculation uses fixed-point or integer arithmetic. Floating + rounding, hidden post-processing, or undocumented prompt-derived weights are + not protocol-valid. +- Deposit-time measurements may inform depositor review, Depository search, + market intelligence, and BTD potential, but they cannot mint, transfer, + quote final BTD, unlock source, or allocate contributor shares without a + reviewed Need and selected Fit set. +- Positive BTD cells must conserve fixed supply and occupy a contiguous, + non-overlapping AssetPack range. Zero-cell tail receipts remain valid + measuremint evidence but cannot be represented as positive rights-bearing + BTD cells. +- Rights-bearing BTD exists only after BTC settlement finality and BTD rights + transfer. Before that, BTD volume/range is preview or quote state only. +- Source-to-shares uses the settled Need-Fit AssetPack, selected Fit deposits, + BTD range slices, and BTC payment observation to allocate contributor + compensation; it must not be confused with scalar-volume calculation. + +Acceptance for this atom: later V46 specification may refine measurement +taxonomy and formula constants, but it must preserve BTD as Need-relative +weighted scalar knowledge-volume, deposit-time BTD potential as non-final, +deterministic fixed-point measurement weighting, measuremint/range conservation, +zero-cell tail posture, BTC-before-rights law, and source-to-shares as +post-settlement contributor allocation rather than BTD size. + +## V46 protocol atom 4: BTC settlement state machine + +Audit classification: V45 correctly names estimates, quotes, observed payment, +final settlement, contributor allocation, delivery, and repair as distinct +economic labels. The implementation already separates BTC fee quotes, PSBT +handoff, broadcast observation, finality receipts, settlement unlock, +source-to-shares, and compensation statements. V46 must make BTC settlement +law explicit so that a quote, a broadcast transaction, an observed payment, +confirmed finality, BTD rights transfer, source delivery, refund/escalation, +and contributor compensation cannot be collapsed by an interface, pipeline, +or operator. + +Protocol-law statement: + +BTC is Bitcode settlement money and payment truth. A BTC quote is a +source-safe procurement offer bound to a reviewed Need, selected Fit set, +synthesized Need-Fit AssetPack, BTD scalar-volume/range, deterministic +share-to-fee policy, wallet authority, network, expiry, and proof roots. A BTC +payment is not final merely because a transaction is prepared, signed, +broadcast, visible in mempool, or observed by a provider. Source unlock, +rights-bearing BTD transfer, delivery, and contributor compensation require +confirmed BTC finality, quote/payment conservation, ledger/database/storage +readback, and repair-free settlement receipts. + +The canonical BTC settlement state machine is: + +| State | Meaning | Required inputs | Output posture | +| --- | --- | --- | --- | +| `btc-not-quoteable` | No reviewed Need-Fit quote can exist yet. | reviewed Need missing, selected Fit set missing, BTD quote posture missing, wallet authority missing, or policy blocker | no BTC quote claim | +| `btc-quote-issued` | Deterministic sats quote is created for the Reader. | quote root, BTD scalar-volume/range roots, deterministic share-to-fee policy root, network, expiry, budget policy | source-safe offer only; no payment | +| `btc-quote-accepted` | Reader and organization authority accept the quote before expiry. | accepted quote root, buyer authorization root, wallet authority root, budget approval root when required | PSBT preparation admitted | +| `btc-quote-inactive` | Quote is expired, superseded, failed, revoked, or mismatched. | inactive quote root and reason | payment against this quote cannot unlock rights | +| `btc-wallet-ready` | Reader wallet can sign without server custody. | wallet signer session, network match, PSBT signing capability, no-server-custody proof | PSBT handoff may proceed | +| `btc-psbt-prepared` | Settlement transaction is prepared but unsigned. | accepted quote, wallet-ready proof, terminal journal root, PSBT root | no payment observation | +| `btc-psbt-signed` | Reader has signed the transaction. | prepared PSBT root, wallet authorization proof, signed PSBT root | broadcast admitted; no finality | +| `btc-broadcast-submitted` | Signed transaction has been submitted to the Bitcoin network. | signed transaction root, txid, network root, provider observation root | observed payment pending finality | +| `btc-payment-observed` | Debit, credit, txid, amount, payer, payee, and network are observed. | payment observation root, expected sats, observed debit sats, observed credit sats, txid | source remains locked; finality pending | +| `btc-payment-mismatch-repair-required` | Observed payment does not conserve the accepted quote or violates wallet/network policy. | mismatch proof root, repair blocker root | repair, replacement, refund, or escalation only | +| `btc-finality-confirmed` | Bitcoin finality satisfies the configured confirmation/finality policy. | finality receipt, confirmations, txid, block/reorg readback, quote/payment conservation root | settlement can authorize BTD rights transfer | +| `btc-replaced-reorged-or-failed` | Transaction was replaced, reorged out, failed, or became non-final. | replacement, reorg, or failure root | source remains locked; repair or refund/escalation required | +| `btc-settlement-finalized` | Quote, payment, finality, ledger, database, object storage, and source-safe readback agree. | finality root, ledger/database/storage reconciliation root, terminal journal root, settlement unlock root | BTD rights transfer and delivery unlock may proceed | +| `btc-contributor-compensation-routable` | Final settlement is available to source-to-shares allocation and contributor statements. | finalized settlement root, BTD range slices, source-to-shares proof, contributor roots | compensation statements and treasury routes may be issued | +| `btc-refund-or-escalation-required` | A payment or quote cannot be accepted as final settlement, and value movement or operator review is required. | refund/escalation case root, payment evidence, policy reason | no rights, no source unlock, no contributor compensation | +| `btc-settlement-repair-required` | Any quote, wallet, PSBT, broadcast, observation, finality, readback, unlock, or compensation proof is missing or stale. | repair blocker root | fail-closed repair only | + +Settlement law: + +- A quote is not an estimate. It must be denominated in BTC sats, bind the + BTD scalar-volume/range and deterministic share-to-fee policy, name its + network and expiry, and carry a source-safe quote root. +- A quote must be accepted before PSBT preparation. Expired, superseded, + failed, revoked, wrong-network, wrong-wallet, or mismatched quotes cannot + unlock rights even if a payment is later observed. +- Bitcode must never take server custody of wallet private material. The + Reader signs through a wallet session that proves network, capability, + authorization, and no-server-custody posture. +- Prepared, signed, broadcast, and observed states are not final settlement. + They cannot transfer BTD rights, unlock source, deliver a pull request, or + allocate contributor compensation. +- Payment observation must conserve the accepted quote: expected sats, + observed debit sats, observed credit sats, payer, payee, network, txid, and + quote root must reconcile. Drift enters repair, refund, or escalation. +- BTC finality requires the configured confirmation/finality policy and must + fail closed on replacement, reorg, failure, stale provider readback, or + missing ledger/database/object-storage reconciliation. +- Refund or escalation is a repair path, not a successful purchase path. It + does not transfer BTD rights, disclose source, satisfy contributor + compensation, or convert an inactive quote into final settlement. +- Contributor compensation is routable only after final settlement and must be + derived from source-to-shares, BTD range slices, contributor roots, and the + settled BTC payment. Estimated depositor earning ranges remain non-final. +- Product surfaces may show quote, observed payment, finality, repair, + refund/escalation, and compensation states, but they must not expose private + settlement payloads, wallet private material, unpaid AssetPack source, raw + protected source, raw prompts, or raw provider responses. + +Acceptance for this atom: later V46 specification may refine confirmation +thresholds, wallet-provider adapters, refund mechanisms, and compensation +route mechanics, but it must preserve BTC as settlement money, quote as +source-safe deterministic procurement offer, observed payment as non-final, +confirmed finality as prerequisite to BTD rights transfer, source unlock only +after settlement readback, refund/escalation as fail-closed repair, and +contributor compensation as post-finality source-to-shares allocation. + +## V46 protocol-development atom 5: notes-to-spec consolidation before parity + +Audit classification: V46 is intentionally opening through small notes-level +specification atoms because the protocol law must be correct atom by atom +before it is expanded into a full canonical candidate. The missing process +precision was the boundary between notes and implementation parity: accepted +notes are not enough to audit implementations. V46 must first consolidate the +accepted notes into the formal V46 specification family, then audit source +against that formal specification. + +Protocol-development law: + +After the notes-level specification atoms are accepted, V46 must run a formal +specification consolidation gate before any implementation parity matrix gate. +That consolidation gate updates the V46 specification family from the accepted +notes, reconciles terminology across the full document set, preserves the V45 +active canon pointer until promotion, and validates that the V46 formal +specification is internally coherent before implementation auditing begins. +The implementation parity matrix must audit against the formal V46 +specification family, not against loose notes, branch discussion, PR bodies, +or operator memory. + +The required sequence is: + +| Movement | Output | Forbidden shortcut | +| --- | --- | --- | +| `notes-specification-atoms` | Accepted notes-level protocol atoms, each merged through its gate branch | combining unresolved atoms into a broad parity or implementation claim | +| `formal-specification-consolidation` | Updated V46 specification family with accepted atoms reconciled into protocol law | auditing implementation directly from notes or PR discussion | +| `implementation-parity-audit` | V46 parity matrix comparing formal specification to code, tests, proofs, workflows, docs, generated artifacts, and interfaces | claiming parity before the formal specification exists | +| `grouped-implementation-closure` | Grouped implementation gates derived from the accepted parity matrix | implementing speculative behavior before the parity matrix is accepted | + +Consolidation law: + +- The formal specification consolidation gate must update the V46 spec-family + documents before any implementation audit begins. +- The consolidation gate must preserve `BITCODE_SPEC.txt -> V45` while V46 is + still a draft target; promotion remains a later gate. +- The consolidation gate must reconcile accepted notes into one coherent V46 + protocol law, including AssetPack lifecycle, BTD scalar-volume, BTC + settlement, source safety, interface authority, proof roots, and operational + boundaries. +- The parity matrix gate must cite the formal V46 specification family as its + source of truth. It may cite notes only as historical provenance for why the + formal specification changed. +- Implementation gates must be grouped from parity gaps found against the + formal specification, not from isolated notes, UI desire, or ad hoc code + inspection. + +Acceptance for this atom: later V46 sequencing may add more notes atoms or +split formal specification documents further, but it must preserve +notes-specification atoms before formal spec consolidation, formal spec +consolidation before implementation parity auditing, parity auditing before +grouped implementation closure, and V45 as the active canon pointer until V46 +promotion. + +## V46 protocol atom 6: interface authority and disclosure boundaries + +Audit classification: V45 names `/packs`, `/read`, `/deposit`, API/MCP, +ChatGPT App, Bitcode Chat, public docs, and landing pages as interface +surfaces, and it strongly protects source-safe disclosure before settlement. +The remaining protocol gap is exact interface authority: which statements each +surface may make, which actions each surface may initiate, and what may be +shown before settlement, after preview, after quote, after payment observation, +after finality, after BTD rights transfer, and after repository delivery. + +Protocol-law statement: + +All Bitcode interfaces are protocol windows into the same AssetPack, BTD, BTC, +proof, ledger, database, storage, and delivery state. No interface is an +independent source of protocol law. A user-visible statement is valid only when +it is source-safe for that party, names the current protocol state, and can be +traced to the required proof root, ledger/database readback, storage root, +workflow receipt, or generated canonical specification. + +Canonical interface authority is: + +| Surface | Authority | Forbidden claim or action | +| --- | --- | --- | +| `/deposit` | Depositor supply formation: connect source, synthesize deposit AssetPack options, review source-owner measurements, approve or reject Depository admission, and view source-safe earning potential. | claiming final BTD size, reader ownership, final BTC proceeds, or public source visibility before a paid Need-Fit settlement exists | +| `/read` | Reader demand procurement: request a Read, review or resynthesize the Need, request Finding Fits, review source-safe Need-Fit preview, accept quote, pay, and receive entitled repository delivery. | exposing unpaid AssetPack source, treating observed payment as final, bypassing organization/wallet authority, or delivering before BTD rights transfer | +| `/packs` | Searchable master-detail projection of network activity, AssetPack states, quotes, repairs, proof roots, delivery receipts, and compensation statements. | becoming the source of truth without ledger/database/storage readback or showing private source to non-entitled parties | +| API/MCP | Machine interface for the same workflows, read models, proofs, and repair commands exposed under explicit policy and capability boundaries. | returning more data than the corresponding human interface is entitled to see or mutating state without the same proof obligations | +| ChatGPT App | Conversational interface for guided Bitcode actions, summaries, confirmations, and state inspection. | presenting conversational text as final settlement, rights transfer, source unlock, or canonical law without authoritative readback | +| Bitcode Chat | Product conversation overlay for assistance, explanations, workflow navigation, telemetry summarization, and operator-facing repair guidance. | leaking raw prompts, raw provider responses, protected source, wallet private material, or unpaid source-bearing pack content | +| Public docs and landing pages | Explanatory surface for protocol claims, public product positioning, and non-transactional education. | representing live transaction state, buyer entitlement, seller proceeds, or private network facts without a linked authoritative surface | + +Canonical disclosure boundary is: + +| Boundary | User-visible statements allowed | User-visible statements forbidden | +| --- | --- | --- | +| `before-settlement` | source-safe state labels, public protocol explanation, party-owned source to that party, deposit measurements, Need text, candidate counts, proof roots, estimates, and repair blockers | unpaid AssetPack source, raw protected source, secrets, raw prompts, raw provider responses, final rights, final BTD ownership, or final BTC settlement | +| `after-preview` | source-safe Need-Fit measurements, selected Fit set identities when source-safe, rankings, quality/confidence, BTD range or potential, preview proof roots, and why the preview may be worth buying | source-bearing implementation contents, private candidate source, contributor secrets, or assertions that the Reader already owns the AssetPack | +| `after-quote` | deterministic BTC quote, quote expiry, wallet/network, BTD volume/range posture, authorization requirements, quote root, and explicit non-final status | payment-final, rights-transferred, source-unlocked, delivered, or contributor-compensated statements | +| `after-payment-observation` | observed txid, network, amount, payer/payee, quote match or mismatch, mempool/provider evidence, and pending finality/repair posture | treating observation as confirmed finality, unlocking source, transferring BTD rights, or routing contributor compensation | +| `after-finality` | confirmation/finality receipt, finalized payment evidence, settlement readback progress, and remaining rights-transfer or repair requirements | exposing source before settlement readback and BTD rights transfer or claiming delivery before repository delivery receipt | +| `after-btd-rights-transfer` | entitled Reader boundary, source unlock authorization, rights receipt, BTD range ownership, and delivery preparation state | making the source public, granting non-payer access, or claiming contributor compensation before source-to-shares allocation | +| `after-repository-delivery` | delivery PR/commit receipt, entitled repository visibility, delivered AssetPack root, reconciliation state, and source-safe contributor compensation statements | exposing source outside the entitled repository or masking unsettled repair, compensation, or ledger/database mismatch states | + +Interface disclosure law: + +- Every interface must fail closed to the narrowest source-safe state when proof + roots, ledger/database readback, storage roots, wallet authority, or delivery + receipts are missing. +- Human and machine interfaces must use the same entitlement boundary. API/MCP, + ChatGPT App, and Bitcode Chat may not reveal data that `/read`, `/deposit`, + or `/packs` would withhold from the same actor in the same state. +- Public docs and landing pages may explain the protocol and commercial + experience, but they are not transaction state, settlement evidence, source + entitlement, or compensation evidence. +- Conversational interfaces may guide and summarize, but all final claims about + quote, payment, BTD rights, source unlock, delivery, and compensation must be + backed by authoritative state readback. +- Interface copy may be concise and elegant, but it must never collapse preview, + quote, observed payment, finality, rights transfer, delivery, and + compensation into a single "done" state. + +Acceptance for this atom: later V46 formal specification and implementation +work may refine wording and UI shapes, but it must preserve one protocol law +across all surfaces, source-safe user-visible statements before paid +entitlement, explicit non-final language for preview/quote/payment +observation, authoritative readback for final settlement and rights transfer, +and repository delivery visibility only for the entitled Reader boundary. + +## V46 protocol atom 7: proof readback and operational authority + +Audit classification: V45 establishes generated specification proof, +ledgerized journaling, telemetry, database/storage synchronization, workflow +checks, and source-safe repair posture. The remaining gap is evidence +authority: which operational artifacts can advance protocol state, which are +only observability, and what happens when proof, ledger, database, storage, +telemetry, provider, or delivery evidence disagrees. + +Protocol-law statement: + +Bitcode state advances only by proof-backed readback. No UI row, conversation +message, streamed telemetry item, route response, external provider event, or +workflow log can alone advance AssetPack lifecycle, BTD rights, BTC settlement, +source unlock, delivery, or contributor compensation. The advancing artifact +must be paired with the required proof root and read back from the appropriate +ledger, database, storage, wallet, provider, or repository boundary. + +Canonical evidence authority is: + +| Evidence class | Protocol authority | Limit | +| --- | --- | --- | +| canonical specification and generated proof appendix | defines protocol law, required proof families, and promotion-grade validation posture | not a live transaction, wallet, source, or delivery receipt | +| execution/workflow receipt | proves a pipeline, PTRR agent, tool, route, workflow, or validation step ran with typed inputs/outputs and status | not economic finality and not source entitlement unless joined to settlement and rights readback | +| ledger journal | records protocol-economic state transitions, BTD/BTC journals, repair states, and auditable event ordering | cannot override Bitcoin finality, protected storage, or repository delivery evidence | +| database projection | serves queryable application state, interface read models, and reconciliation indexes | cannot be treated as final when it diverges from ledger, storage, wallet, or delivery roots | +| object storage and protected-source roots | prove content custody, source-safe preview objects, source-bearing withheld pack objects, and delivery payload roots | cannot disclose source without entitlement, rights transfer, and delivery authority | +| telemetry stream | makes running phases, agents, tools, prompts, outputs, timings, and errors observable | observability only; telemetry is not settlement, rights transfer, or source unlock | +| wallet/provider receipt | supplies quote, PSBT, broadcast, observation, txid, block/finality, or network evidence | provider observation is not final settlement until reconciled with quote, wallet authority, and finality policy | +| repository delivery receipt | proves pull request, branch, commit, patch, or delivery artifact reached the entitled repository boundary | not public source permission and not contributor compensation by itself | + +Canonical readback requirements are: + +| State advancement | Required readback before advancement | +| --- | --- | +| Depository admission | depositor approval root, source-safety proof, policy eligibility, protected-source storage root, Depository index root, ledger/database projection | +| reviewed Need acceptance | Read Request root, Need synthesis receipt, user review/approval root, database read model, telemetry summary root | +| Finding Fits selection | search receipt, candidate provenance roots, measurement/ranking roots, source-safe Fit set root, depository readback | +| Need-Fit AssetPack synthesis | selected Fit set root, synthesis execution receipt, source-bearing withheld storage root, source-safe preview root, measurement/BTD posture root | +| BTC quote issuance | reviewed Need root, selected Fit set root, Need-Fit AssetPack root, BTD volume/range roots, deterministic quote root, wallet/network policy root | +| BTC payment observation | accepted quote root, wallet authority root, provider observation, txid/network/amount readback, mismatch classification if any | +| BTC settlement finalization | payment observation, configured finality receipt, quote/payment conservation, ledger/database/storage agreement, repair-free settlement receipt | +| BTD rights transfer | finalized settlement root, BTD range/rights receipt, entitled Reader boundary, ledger/database readback | +| source unlock and repository delivery | rights transfer root, protected-source object readback, delivery payload root, repository PR/commit receipt, entitled repository boundary | +| contributor compensation | finalized settlement root, source-to-shares allocation root, contributor roots, compensation statement, ledger/database reconciliation | + +Operational repair law: + +- If any required readback is missing, stale, contradictory, or outside the + allowed actor/network/source boundary, the state must remain in or return to + a source-safe repair state. +- Repair state may expose failure class, blocker, retry command, proof root + identifiers, and operator-safe telemetry, but not unpaid source, secrets, + wallet private material, raw provider payloads, raw prompts, or raw model + responses. +- Computation hosts, sandbox executions, workflow runners, browser proofs, and + API routes may produce receipts, but they do not own protocol truth. They + must write/read through the canonical proof, ledger, database, storage, + wallet, and repository boundaries. +- If evidence classes conflict, Bitcode must prefer the stricter + source-safety and economic-finality posture until reconciliation proves the + correct state. + +Acceptance for this atom: later V46 formal specification and implementation +work may split the readback tables, but it must preserve proof-backed readback +as the only state advancement mechanism, telemetry as observability rather +than authority, Bitcoin finality as payment truth, storage and repository roots +as delivery truth, database projections as reconciled read models, and +fail-closed repair for every evidence mismatch. + +## V46 protocol-development atom 8: gate taxonomy and formal spec readiness + +Audit classification: the opening V46 questions have now been reduced into +accepted notes-level protocol atoms for Bitcode identity, AssetPack lifecycle, +BTD scalar-volume, BTC settlement, notes-to-spec sequencing, interface +authority, disclosure boundaries, proof readback, and operational authority. +The remaining opening question is process taxonomy: which gates are allowed to +change notes, formal specification, parity matrices, proofs, interfaces, +implementations, rehearsals, and promotion state. + +Protocol-development law: + +V46 gates must be classified before the formal specification consolidation +begins. A gate's class defines what it may change, what it must not claim, and +which proof obligations close it. No gate may claim a stronger class than its +accepted artifacts prove. Notes-level atom gates are discussion-to-law +preparation; formal specification gates are draft canon authoring; parity gates +are implementation audit; proof-only gates harden validation; interface-only +gates adjust protocol windows; implementation gates close audited parity gaps; +rehearsal gates prove whole-system behavior; promotion gates alone may advance +`BITCODE_SPEC.txt`. + +The canonical V46 gate taxonomy is: + +| Gate class | Allowed output | Required closure evidence | Forbidden shortcut | +| --- | --- | --- | --- | +| `notes-specification-atom` | one small accepted note atom in `BITCODE_SPEC_V46_NOTES.md` plus its checker | local atom check, prior atom checks, draft-canon posture check, clean diff, PR into `version/v46` | changing source behavior, claiming implementation parity, or updating `BITCODE_SPEC.txt` | +| `formal-specification-consolidation` | V46 specification family documents updated from all accepted notes atoms | spec-family validation, terminology reconciliation, prior notes checks, generated proof posture when applicable | auditing implementation from loose notes or leaving accepted atoms outside the formal spec | +| `specification-parity-matrix` | matrix mapping formal V46 law to code, tests, proofs, workflows, docs, generated artifacts, and interfaces | cited formal V46 specification sections, source-grounded audit, categorized gaps, closure groups | using PR discussion, memory, or notes as primary implementation authority | +| `proof-only` | validators, generated proofs, workflow checks, replay checks, or CI hardening | deterministic command output, CI greenability, no product-state mutation unless specified | silently changing protocol behavior under validation work | +| `interface-only` | source-safe UX/UI, route, API/MCP, ChatGPT App, Bitcode Chat, docs, or landing-page presentation changes | entitlement/disclosure trace to formal spec, accessible UI proof when relevant, read-model tests | making interface copy or telemetry authoritative over protocol readback | +| `implementation` | commercial source code, schemas, APIs, pipelines, storage, ledger, settlement, delivery, or package behavior closing accepted parity gaps | focused tests, integration proof where relevant, source-safety checks, parity row closure | implementing behavior not traced to formal spec and parity matrix | +| `rehearsal` | end-to-end proof run, browser/API/database/ledger/storage replay, staged or local system validation | replayable receipts, logs, screenshots when relevant, ledger/database/storage reconciliation | counting a mocked unit test as whole-system commercial proof | +| `promotion` | formal version promotion PR into `main` and promotion workflow result | complete gate ledger, green promotion workflow, generated proof update, standalone `BITCODE_SPEC.txt` pointer update after validations | promoting while accepted gates, parity gaps, proofs, or required checks remain open | + +Readiness law: + +- The notes-specification atom set for the V46 opening is complete enough to + begin formal specification consolidation after this atom is accepted. +- Formal consolidation must preserve the accepted semantics of all notes atoms: + AssetPack as commodity, Need-relative BTD scalar-volume, BTC settlement + finality, source-safe disclosure boundaries, proof-backed readback, and + fail-closed repair. +- Formal consolidation may reorganize, rename headings, or split sections for + clarity, but it must not weaken or omit accepted atom law without an explicit + new notes-specification atom. +- After consolidation, the parity matrix gate must treat the formal V46 + specification family as the only implementation-audit authority. +- Proof-only and interface-only gates may occur after the parity matrix when + their changes close matrix rows; they are not loopholes for speculative + product behavior. +- Promotion remains prohibited until formal specification, parity, grouped + implementation, proof, interface, rehearsal, and promotion-readiness gates + are accepted according to this taxonomy. + +Acceptance for this atom: later V46 process work may split gate classes or add +stricter closure evidence, but it must preserve class-scoped authority, +formal-specification consolidation as the next movement after accepted notes, +parity auditing from the formal V46 specification, implementation only from +accepted parity gaps, and `BITCODE_SPEC.txt` promotion only through the +promotion gate. + +## Non-goals during V46 opening + +- Do not implement V46 gate behavior before the V46 intent discussion is + completed. +- Do not rename V45 canon surfaces while the active canonical pointer remains + V45. +- Do not weaken Bitcoin, BTD, GitHub, compute, storage, build/process, + proof, or source-safety boundaries to simplify the opening notes. diff --git a/BITCODE_SPEC_V46_PARITY_MATRIX.md b/BITCODE_SPEC_V46_PARITY_MATRIX.md new file mode 100644 index 000000000..83f5b5e6e --- /dev/null +++ b/BITCODE_SPEC_V46_PARITY_MATRIX.md @@ -0,0 +1,146 @@ +# Bitcode Spec V46 Parity Matrix + +## Status + +- Version: `V46` +- V46 state: canonical promotion complete; V46 promoted parity truth, generated comprehension artifacts, local interface rehearsal, gate closure, and promotion automation are aligned +- Current canonical/latest target: `V46` +- Canonical proof-source commit: `40a32e9d61a64130c958eda1498812e25a682653` +- Prior canonical anchor: `BITCODE_SPEC_V45.md` +- Prior generated proof appendix: `BITCODE_SPEC_V45_PROVEN.md` +- Generated structured artifact inventory: active canonical `.bitcode/v46-spec-family-report.json`, `.bitcode/v46-canonical-input-report.json`, `.bitcode/v46-canon-posture-drift-report.json`, V46 protocol-comprehension artifacts, `.bitcode/v46-promotion-readiness-report.json`, V46 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V46_PROVEN.md` as the generated proof appendix for V46 promotion +- Source parity state: V46 source-side protocol comprehension object model, public/operator claim boundaries, route readback, interface claim contracts, proof readback, local rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V46 file family +- Notes companion: `BITCODE_SPEC_V46_NOTES.md` +- Spec companion: `BITCODE_SPEC_V46.md` +- Delta companion: `BITCODE_SPEC_V46_DELTA.md` +- Scope: V46 canonical parity ledger for protocol comprehension and public/operator explanation over promoted V45 knowledge commoditization canon +- Last fully realized canonical target preserved in source: `V46` + +## Purpose + +This matrix records promoted V46 parity work. It records +the initial audit surface that later V46 gates must turn into source-grounded +implementation, proof, documentation, interface, and rehearsal rows. The +current authority is V46. + +Draft judgment vocabulary: + +- `draft-required`: V46 must specify and later audit this area. +- `implemented prerequisite`: V45 source already contains material that V46 may + reuse or clarify, but V46 has not yet audited it for closure. +- `accepted boundary`: V45 law remains active and must not be weakened. +- `pending`: V46 has not yet accepted a parity or implementation gate. + +## Audit basis + +Gate 1 audit inputs are `BITCODE_SPEC.txt`, `BITCODE_SPEC_V45.md`, +`BITCODE_SPEC_V45_DELTA.md`, `BITCODE_SPEC_V45_NOTES.md`, +`BITCODE_SPEC_V45_PARITY_MATRIX.md`, `BITCODE_SPEC_V45_PROVEN.md`, +`BITCODE_SPEC_V46.md`, `BITCODE_SPEC_V46_DELTA.md`, +`BITCODE_SPEC_V46_NOTES.md`, this draft parity matrix, `SPECIFICATIONS_ROADMAP.md`, +branch/workflow rules, and the existing product surfaces named by V45: +`/deposit`, `/read`, `/packs`, API/MCP, ChatGPT App, Bitcode Chat, public docs, +landing page, proof roots, ledger/database/storage readback, wallet/provider +receipts, and repository delivery receipts. + +## Source Evidence Map + +Gate 1 does not claim source closure. Later V46 parity gates must inspect the +source files and generated artifacts that implement or explain each row. + +| Evidence area | Current source evidence | Audit reading | +| --- | --- | --- | +| Active canon posture | `BITCODE_SPEC.txt`, `BITCODE_SPEC_V45.md`, `BITCODE_SPEC_V45_PROVEN.md`, spec-family and canon-posture checkers | V46 is active canon; V45 is the prior promoted anchor. | +| Product routes | `/deposit`, `/read`, `/packs`, and `/exchange` compatibility redirect | V46 must make route claims commercially legible without source leakage or stale Exchange-first framing. | +| Reading and deposit pipelines | Reading, Finding Fits, AssetPack preview, settlement, deposit option, and admission packages named by V45 | V46 may clarify comprehension and claim boundaries, but implementation parity is pending. | +| Interfaces | API/MCP, ChatGPT App, Bitcode Chat, package consumers, public docs, and landing page | V46 must decide which statements are protocol-authoritative and how each surface exposes proof readback. | +| Proof and operations | Generated proof appendices, `.bitcode` artifacts, workflows, ledger/database/storage readback, wallet/provider receipts, repository receipts | V46 must keep proof-backed state advancement clear to non-operator readers. | + +## V46 Implementation Matrix + +| Area | Required V46 result | Current judgment | Source-grounded finding | Closure gate | +| --- | --- | --- | --- | --- | +| Commercial protocol comprehension | Explain Bitcode as knowledge commoditization without reducing BTD to a read-right or AssetPack to raw source | closed | V45 law is precise but launch-facing surfaces need a shared claim taxonomy and readback language. | Gate 2 | +| Claim taxonomy | Separate protocol law, product guidance, operator evidence, investor framing, telemetry, preview, quote, settlement, rights, delivery, compensation, and repair claims | closed | Gate 2 owns package-backed `V46ProtocolComprehensionObjectModel`, deterministic `.bitcode/v46-protocol-comprehension-object-model.json`, object rows, claim rows, evidence-specific authority ids, disclosure boundary ids, forbidden claim collapse ids, source-safe generated artifact freshness, protocol tests, docs, and workflow wiring. | Gate 2 | +| Public and operator docs | Public docs, landing copy, README/operator docs, and route help stay accurate, source-safe, and non-overclaiming | closed | Gate 3 owns package-backed `V46PublicOperatorClaimBoundaries`, deterministic `.bitcode/v46-public-operator-claim-boundaries.json`, public docs, landing, operator docs, README anchors, protocol docs compatibility alias, forbidden overclaim scans, source-safety exclusions, focused tests, package exports, and workflow wiring. | Gate 3 | +| Product route comprehension | `/packs`, `/read`, and `/deposit` expose low-detail default UX with expandable proof and consistent commercial terms | closed | Gate 4 owns package-backed `V46ProductRouteComprehensionReadback`, deterministic `.bitcode/v46-product-route-comprehension-readback.json`, route ids, route paths, low-detail defaults, route-owned state, Packs search/filter/sort, Reading five-step readback, Depositing five-step readback, source-safe proof detail, package exports, focused tests, and workflow wiring. | Gate 4 | +| Machine and conversation interfaces | API/MCP, ChatGPT App, Bitcode Chat, and package consumers expose the same claim boundaries as website routes | closed | Gate 5 owns package-backed `V46InterfaceClaimContracts`, deterministic `.bitcode/v46-interface-claim-contracts.json`, public API schema compatibility, MCP tool contracts, ChatGPT App action contracts, Bitcode Chat conversation/stream/handoff contracts, package-consumer read contracts, proof-root projection, denied-state repair, source-safe disclosure exclusions, focused tests, and workflow wiring. | Gate 5 | +| Proof readback explanation | Users and operators can understand why proof, ledger, database, storage, wallet/provider, and repository receipts have different authority | closed | Gate 6 owns package-backed `V46ProofReadbackOperatorExplanation`, deterministic `.bitcode/v46-proof-readback-operator-explanation.json`, canonical/generated proof rows, execution/workflow receipt rows, ledger journal rows, database projection rows, object-storage root rows, telemetry stream rows, wallet/provider receipt rows, repository delivery receipt rows, repair/reconciliation rows, source-safe operator explanation, focused tests, and workflow wiring. | Gate 6 | +| Local interface rehearsal | A source-safe local rehearsal verifies docs/routes/interfaces explain the protocol without exposing unpaid source | closed | Gate 7 owns package-backed `V46LocalInterfaceComprehensionRehearsal`, deterministic `.bitcode/v46-local-interface-comprehension-rehearsal.json`, local docs/landing, `/packs`, `/read`, `/deposit`, API/MCP, ChatGPT App, Bitcode Chat, proof telemetry, repair readback rows, prior V46 artifact pass checks, source-safe disclosure exclusions, focused tests, package exports, and workflow wiring. | Gate 7 | +| Promotion readiness | V46 can promote only after all accepted comprehension, parity, proof, interface, rehearsal, and source-safety gates close | closed | Gate 8 owns `V46PromotionReadinessReport`, `.bitcode/v46-promotion-readiness-report.json`, `BITCODE_SPEC_V46_PROVEN.md`, V46 promotion script support, `v46-canon-promotion.yml`, shared gate/canon workflow posture, package exports, source-safe generated artifact freshness, focused tests, and V46 active / draft V47 runtime preparation. | Gate 8 | + +## V46 Implementation Checklist + +| Area | Required V46 result | Current judgment | Source-grounded finding | Closure gate | +| --- | --- | --- | --- | --- | +| Active pointer truth | `BITCODE_SPEC.txt` points to V46 after promotion | closed | Gate 1 preserved pre-promotion posture; promotion now records active V46 posture. | Gate 1 | +| Draft files | V46 SPEC, DELTA, NOTES, and PARITY files exist and name draft posture | closed | Gate 1 creates and validates the draft family. | Gate 1 | +| CI posture | Gate and canon workflows validate active V45 plus draft V46 when V46 files exist | closed | Gate 1 wires the checker into workflows. | Gate 1 | +| Source safety | No V46 explanatory surface may expose protected source, unpaid AssetPack source, raw prompts, raw responses, credentials, or wallet-private material | closed | V45 source-safety law remains binding. | Gate 2+ | +| Value-bearing mainnet | V46 launch comprehension work must not imply value-bearing mainnet authority | closed | V45 value-bearing mainnet block remains binding. | Gate 2+ | +| Implementation scope | Runtime work begins only after formal specification and parity gates authorize it | closed | Gate 1 is roadmap/spec/checking only. | Gate 4+ | +| Protocol comprehension object model | V46 explanation surfaces share object ids, claim categories, claim authority ids, disclosure boundaries, and forbidden interpretation ids | closed | `V46ProtocolComprehensionObjectModel` binds AssetPack, BTD, BTC, preview, quote, settlement, rights, delivery, compensation, proof, repair, and InterfaceClaim rows without source-bearing payloads. | Gate 2 | +| Public/operator claim-boundary artifact | Public and operator surfaces expose only source-safe guidance and proof posture while avoiding stale vocabulary and overclaims | closed | `V46PublicOperatorClaimBoundaries` binds landing, docs home, docs content, docs protocol page, operator README, root README, package README, and V46 spec-family rows to required copy anchors, claim authorities, forbidden overclaim scans, and `.bitcode/v46-public-operator-claim-boundaries.json`. | Gate 3 | +| Product route comprehension readback artifact | `/packs`, `/read`, and `/deposit` expose route-specific source-safe readback without collapsing preview, quote, finality, delivery, compensation, or repair claims | closed | `V46ProductRouteComprehensionReadback` binds route rows to claim ids, authority ids, required copy anchors, low-detail defaults, expandable proof readback, route-owned state, no-source/no-secret checks, and `.bitcode/v46-product-route-comprehension-readback.json`. | Gate 4 | +| Interface claim contracts artifact | API/MCP, ChatGPT App, Bitcode Chat, and package consumers expose source-safe contracts without parallel state authority | closed | `V46InterfaceClaimContracts` binds public API, MCP API, ChatGPT App, Bitcode Chat, and package-consumer rows to claim ids, category ids, authority ids, capability ids, source roots, proof-root projection, denied-state repair, no-source/no-secret checks, and `.bitcode/v46-interface-claim-contracts.json`. | Gate 5 | +| Proof readback operator explanation artifact | Proof, ledger, database, storage, wallet/provider, repository, telemetry, execution, and repair evidence classes remain distinct and source-safe | closed | `V46ProofReadbackOperatorExplanation` binds all evidence class ids to Gate 2 authority ids, required operator questions, stronger evidence requirements, conflict behavior, fail-closed repair states, no-source/no-secret checks, and `.bitcode/v46-proof-readback-operator-explanation.json`. | Gate 6 | +| Local interface comprehension rehearsal artifact | Local docs, product routes, machine interfaces, conversation surfaces, proof telemetry, and repair readback rehearse V46 comprehension without external state authority | closed | `V46LocalInterfaceComprehensionRehearsal` binds local surface ids to Gate 2 claim ids, claim categories, authority ids, source roots, copy anchors, prior V46 artifact pass checks, no-source/no-secret checks, and `.bitcode/v46-local-interface-comprehension-rehearsal.json`. | Gate 7 | +| Gate 8 implementation readback | Promotion readiness has source-backed package, generated, workflow, documentation, and promotion-script evidence | closed | `V46PromotionReadinessReport` binds the six accepted V46 comprehension artifacts, `.bitcode/v46-promotion-readiness-report.json`, `BITCODE_SPEC_V46_PROVEN.md`, `check:v46-gate8`, V46 promotion workflow support, V46 promotion dry-run support, and source-safe post-promotion `V46 active / draft V47` posture. | Gate 8 | + +## Grouped Closure Gates + +The V46 draft-opening plan groups work into eight provisional gates: + +1. Commercial Protocol Comprehension Roadmap Opening. +2. Protocol Comprehension Object Model And Claim Taxonomy. +3. Public Docs, Landing, And Operator Claim Boundaries. +4. `/packs`, `/read`, And `/deposit` Comprehension UX Readback. +5. API/MCP, ChatGPT App, And Bitcode Chat Claim Contracts. +6. Proof Readback And Source-Safe Operator Explanation. +7. Local Interface Comprehension Rehearsal. +8. Promotion Readiness And Canonical Promotion. + +Later V46 gates may split these rows if specification work reveals a safer or +more maintainable closure order. + +## Accepted boundaries + +- V46 is active canon after promotion workflow validation. +- Gate 1 does not authorize runtime behavior changes. +- V46 public or product comprehension may simplify language but must not + simplify protocol law. +- AssetPack remains the commodity, BTD remains Need-relative scalar + knowledge-volume and settled rights, BTC remains settlement money, and proof + readback remains state authority. +- Source-safe preview is not source disclosure; quote is not payment; payment + observation is not finality; database projection is not ledger truth when it + conflicts with stronger readback. + +## Current completion condition + +V46 Gate 8 is complete when `V46PromotionReadinessReport`, +`.bitcode/v46-promotion-readiness-report.json`, `BITCODE_SPEC_V46_PROVEN.md`, +`v46-canon-promotion.yml`, V46 promotion scripts, gate/canon workflows, +package exports, focused tests, source-safe generated artifact freshness, +`check:v46-gate8`, and +`node scripts/promote-bitcode-canon.mjs --version V46 --commit HEAD --dry-run` +validated pre-promotion V46 draft posture, prepare V46 active / draft V47 posture, and +the gate branch is committed, pushed, and pull-requested into `version/v46`. + +Historical Gate 7 completion condition: V46 Gate 7 is complete when `V46LocalInterfaceComprehensionRehearsal`, +`.bitcode/v46-local-interface-comprehension-rehearsal.json`, docs/landing, +`/packs`, `/read`, `/deposit`, API/MCP, ChatGPT App, Bitcode Chat, proof +telemetry, repair readback rows, prior V46 artifact pass checks, package +exports, workflow checks, focused tests, and `check:v46-gate7` validate active +V45 plus draft V46 and the gate branch is committed, pushed, and pull-requested +into `version/v46`. + +Historical Gate 6 completion condition: V46 Gate 6 is complete when `V46ProofReadbackOperatorExplanation`, `.bitcode/v46-proof-readback-operator-explanation.json`, proof/ledger/database/storage/wallet/provider/repository/telemetry/execution/repair evidence authority anchors, package exports, workflow checks, focused tests, and `check:v46-gate6` validated pre-promotion V46 draft posture and the gate branch is committed, pushed, and pull-requested into `version/v46`. + +Historical Gate 5 completion condition: V46 Gate 5 is complete when `V46InterfaceClaimContracts`, `.bitcode/v46-interface-claim-contracts.json`, public API, MCP API, ChatGPT App, Bitcode Chat, and package-consumer claim contract anchors, package exports, workflow checks, focused tests, and `check:v46-gate5` validated pre-promotion V46 draft posture and the gate branch is committed, pushed, and pull-requested into `version/v46`. + +Historical Gate 4 completion condition: V46 Gate 4 is complete when `V46ProductRouteComprehensionReadback`, `.bitcode/v46-product-route-comprehension-readback.json`, `/packs`, `/read`, and `/deposit` route readback anchors, package exports, workflow checks, focused tests, and `check:v46-gate4` validated pre-promotion V46 draft posture and the gate branch is committed, pushed, and pull-requested into `version/v46`. + +Historical Gate 3 completion condition: V46 Gate 3 is complete when `V46PublicOperatorClaimBoundaries`, `.bitcode/v46-public-operator-claim-boundaries.json`, public docs, landing copy, operator docs, README anchors, route compatibility docs, package exports, workflow checks, focused tests, and `check:v46-gate3` validated pre-promotion V46 draft posture and the gate branch is committed, pushed, and pull-requested into `version/v46`. + +Historical Gate 1 completion condition: V46 Gate 1 is complete when the V46 draft spec family, roadmap, package script, Gate 1 checker, and CI workflow hooks validated pre-promotion V46 draft posture and the gate branch is committed, pushed, and pull-requested into `version/v46`. diff --git a/BITCODE_SPEC_V46_PROVEN.md b/BITCODE_SPEC_V46_PROVEN.md new file mode 100644 index 000000000..496a498e2 --- /dev/null +++ b/BITCODE_SPEC_V46_PROVEN.md @@ -0,0 +1,2648 @@ +# Bitcode Spec V46 Proven + +- canonicalVersion: `V46` +- canonicalCommit: `40a32e9d61a64130c958eda1498812e25a682653` +- canonicalCommitRecordedAt: `2026-06-02T14:25:14-03:00` +- worktreeState: `clean` +- generatorId: `bitcode.proven-generator.v1` +- generatedAt: `2026-06-02T14:25:14-03:00` +- outputPath: `BITCODE_SPEC_V46_PROVEN.md` +- scenarioIds: `auth-issuer-rollback`, `rust-validator-proof-gap`, `config-policy-precedence-incident`, `unsafe-patch-review-recovery`, `infra-deployment-mismatch`, `privacy-boundary-proof-export`, `polyglot-gateway-benchmark-remediation`, `auth-many-asset-normalization` +- branchModes: `patch`, `context` + +## Aggregate Verdict + +- fullyProven: `true` +- runCount: `16` +- familyCount: `9` +- theoremCount: `58` +- memberCount: `46` +- artifactDigestCount: `736` +- v19PositiveMatrixCellCount: `1864` +- v19MutationCellCount: `10` +- v19MutationCoverageMode: `representative-first-gate` +- v19VolatilityBlockingFindings: `0` +- v19ReplayDeterministic: `true` +- v19ContractLedgerPassed: `true` +- v20QualityPassed: `true` +- v20QualityReportCount: `5` +- v20GeneratedQualityArtifactCount: `6` +- v20QualityBlockingFailures: `0` +- v20ProjectionSmokeCells: `4` + +## V19 Reproducible Canon Reports + +### V19 Generated Artifact Inventory + +| artifactPath | digest | byteLength | +| --- | --- | --- | +| `.bitcode/v19-contract-change-ledger.json` | `sha256:36bf107f5b315d63c207ebc315d34641c40dd3ddf96a8fc57986625684cc408c` | 3311 | +| `.bitcode/v19-deterministic-replay-report.json` | `sha256:c3b0cccf374eb622c21ea689685c22d3b79794138f98c82a932513ea7f525940` | 8459 | +| `.bitcode/v19-negative-proof-mutation-matrix.json` | `sha256:8f4b1f240b95f9e4c0149226ec9ccfa613f9bdbf290055d835a9430afaf0b11a` | 8085 | +| `.bitcode/v19-proof-member-semantic-matrix.json` | `sha256:c7485df196a9b1bc8780ab95a2a32fc1eeee681b9bb299c46c69c9a3229f5293` | 1815750 | +| `.bitcode/v19-state-machine-matrix.json` | `sha256:bf9872370b7bcc42814a6cdc371a22a9c7e7a0805ab566bad1d412162580cfdc` | 154965 | +| `.bitcode/v19-theorem-evidence-matrix.json` | `sha256:b81059db400d9332b1e8bd3d629e9d29378b04ee4171670f71750bb54e497b77` | 2405676 | +| `.bitcode/v19-volatility-inventory.json` | `sha256:7f62479b9b588cf35ffd720a53e0c9d9d21cd514d8ad3db73ce8de2599653372` | 6206 | + +### V19 Inherited Positive Matrix Summaries + +| matrixId | sourceRunCount | cellCount | passedCellCount | failedCellCount | acceptedExclusionCount | +| --- | --- | --- | --- | --- | --- | +| `v19-proof-member-semantic-matrix` | 16 | 736 | 736 | 0 | 0 | +| `v19-theorem-evidence-matrix` | 16 | 928 | 928 | 0 | 0 | +| `v19-state-machine-matrix` | 16 | 200 | 200 | 0 | 0 | + +### V19 Deterministic Replay + +- reportId: `v19-deterministic-replay-report` +- runCount: `2` +- passed: `true` +- failureReason: `none` + +| artifactPath | firstDigest | secondDigest | byteEqual | +| --- | --- | --- | --- | +| `.bitcode/v19-contract-change-ledger.json` | `sha256:36bf107f5b315d63c207ebc315d34641c40dd3ddf96a8fc57986625684cc408c` | `sha256:36bf107f5b315d63c207ebc315d34641c40dd3ddf96a8fc57986625684cc408c` | `true` | +| `.bitcode/v19-negative-proof-mutation-matrix.json` | `sha256:8f4b1f240b95f9e4c0149226ec9ccfa613f9bdbf290055d835a9430afaf0b11a` | `sha256:8f4b1f240b95f9e4c0149226ec9ccfa613f9bdbf290055d835a9430afaf0b11a` | `true` | +| `.bitcode/v19-proof-member-semantic-matrix.json` | `sha256:c7485df196a9b1bc8780ab95a2a32fc1eeee681b9bb299c46c69c9a3229f5293` | `sha256:c7485df196a9b1bc8780ab95a2a32fc1eeee681b9bb299c46c69c9a3229f5293` | `true` | +| `.bitcode/v19-state-machine-matrix.json` | `sha256:bf9872370b7bcc42814a6cdc371a22a9c7e7a0805ab566bad1d412162580cfdc` | `sha256:bf9872370b7bcc42814a6cdc371a22a9c7e7a0805ab566bad1d412162580cfdc` | `true` | +| `.bitcode/v19-theorem-evidence-matrix.json` | `sha256:b81059db400d9332b1e8bd3d629e9d29378b04ee4171670f71750bb54e497b77` | `sha256:b81059db400d9332b1e8bd3d629e9d29378b04ee4171670f71750bb54e497b77` | `true` | +| `.bitcode/v19-volatility-inventory.json` | `sha256:7f62479b9b588cf35ffd720a53e0c9d9d21cd514d8ad3db73ce8de2599653372` | `sha256:7f62479b9b588cf35ffd720a53e0c9d9d21cd514d8ad3db73ce8de2599653372` | `true` | +| `_legacy/ENGI_SPEC_V19_PROVEN.md` | `sha256:5bd098f2f703f96331282857b9f755a28995c653438dc29a9cc9a0487b64805b` | `sha256:5bd098f2f703f96331282857b9f755a28995c653438dc29a9cc9a0487b64805b` | `true` | + +### V19 Volatility Inventory + +- inventoryId: `v19-volatility-inventory` +- scannedArtifactCount: `4` +- findingCount: `21` +- blockingFindingCount: `0` +- passed: `true` + +| classification | count | +| --- | --- | +| `canonical-stable` | 16 | +| `context-bound` | 5 | +| `preview-volatile` | 0 | +| `blocking-volatile` | 0 | + +### V19 Negative Proof Mutation Matrix + +- matrixId: `v19-negative-proof-mutation-matrix` +- coverageMode: `representative-first-gate` +- mutationClassCount: `10` +- cellCount: `10` +- rejectedCellCount: `10` +- unexpectedPassCount: `0` +- unexpectedErrorCount: `0` + +| mutationClass | expectedErrorClass | actualErrorClass | rejectedAsExpected | +| --- | --- | --- | --- | +| `missing-digest` | `missing-digest` | `missing-digest` | `true` | +| `proof-family-catalog-drift` | `catalog-drift` | `catalog-drift` | `true` | +| `corrupted-replay-step` | `corrupted-replay-step` | `corrupted-replay-step` | `true` | +| `dropped-theorem-verdict` | `missing-theorem-verdict` | `missing-theorem-verdict` | `true` | +| `mutated-member-payload` | `member-predicate-failed` | `member-predicate-failed` | `true` | +| `changed-projection-policy` | `projection-policy-mismatch` | `projection-policy-mismatch` | `true` | +| `missing-witness-path` | `missing-witness-path` | `missing-witness-path` | `true` | +| `changed-matrix-axis` | `changed-matrix-axis` | `changed-matrix-axis` | `true` | +| `unsorted-artifact-inventory` | `unsorted-artifact-inventory` | `unsorted-artifact-inventory` | `true` | +| `volatile-timestamp` | `volatile-timestamp` | `volatile-timestamp` | `true` | + +### V19 Omitted Mutation Cross-Products + +| omittedPermutation | reason | reopenCondition | +| --- | --- | --- | +| `every mutation class across every proof family member` | representative fail-closed class coverage is the V19 target | a member-payload mutation passes unexpectedly or failure classification varies by member class | +| `every mutation class across every theorem id` | V18 theorem evidence matrix already proves positive theorem coverage | a theorem mutation passes unexpectedly or replay-step validation varies by theorem group | +| `every mutation class across every artifact path` | digest, path, and inventory classes are sampled by required artifact category | missing-path, missing-digest, or artifact-inventory mutation has path-specific behavior | +| `every mutation class across every scenario and branch mode` | required only where mutation target varies by run | a mutation result differs by scenario or branch mode | +| `projection mutation across every principal` | full projection behavior is inherited from V17 browser proof | projection policy source changes or visibility changes | +| `mutation under every materialization mode` | V19 accepts committed generated artifacts as the only canonical mode | a side-artifact or preview-only materialization mode is introduced | + +### V19 Contract-Change Ledger + +- ledgerId: `v19-contract-change-ledger` +- fromVersion: `V18` +- toVersion: `V19` +- passed: `true` +- proofCatalogDelta: `unchanged-inherited-positive-baseline` + +| changeType | fromMatrixId | toMatrixId | cellCount | +| --- | --- | --- | --- | +| `renamed-materialized-artifact` | `v18-proof-member-semantic-matrix` | `v19-proof-member-semantic-matrix` | 736 | +| `renamed-materialized-artifact` | `v18-theorem-evidence-matrix` | `v19-theorem-evidence-matrix` | 928 | +| `renamed-materialized-artifact` | `v18-state-machine-matrix` | `v19-state-machine-matrix` | 200 | +| `added-negative-proof-coverage` | `none` | `v19-negative-proof-mutation-matrix` | 10 | + +## V46 Promotion Readiness + +- reportId: `v46-promotion-readiness-report` +- sourceSafe: `false` +- passed: `true` +- failureCount: `0` +- prePromotionPosture: `V45 active / V46 draft` +- postPromotionPosture: `V46 active / V47 draft` + +| artifactPath | digest | byteLength | +| --- | --- | --- | +| `.bitcode/v46-canon-posture-drift-report.json` | `sha256:a0cf4c5f33bd1551631084ce4011f890d1361a68220d9a5bf5c3b0d6c5209811` | 2809 | +| `.bitcode/v46-canonical-input-report.json` | `sha256:532cb01a3128f21f8c8a23b35976a7a7ecf85b466fb7400beae598626db46534` | 1136 | +| `.bitcode/v46-promotion-readiness-report.json` | `sha256:ca932bacf8bca3d217670e4f13e8dec7038db23fae2023c3610e5fe0ff6ce79a` | 16626 | +| `.bitcode/v46-spec-family-report.json` | `sha256:4c04ee9cbe417b7de636b60615cb23cf9db4f2f01b9689f05bfebe8bf035cd74` | 1009 | + +## V20 Operator Quality Reports + +### V20 Generated Quality Artifact Inventory + +| artifactPath | digest | byteLength | +| --- | --- | --- | +| `.bitcode/v20-accessibility-report.json` | `sha256:08ef2d4d78c623fdb75febab26d633848ba927aeff9dd9c8c21fdfa05a8cd2e3` | 8210 | +| `.bitcode/v20-operator-acceptance-transcript.json` | `sha256:bdb301e9509c4ff5b06b79ac49c570695caa4e6f0d8f33875415297ebcc7519b` | 10913 | +| `.bitcode/v20-performance-budget-report.json` | `sha256:8e76275e5261593f9d9a8a2f3d64b072ac2557b00b42d0fc26a6608c20659258` | 5038 | +| `.bitcode/v20-projection-quality-smoke-matrix.json` | `sha256:79bcbb6e5df9d780fa183ff882557872ca44b6af67d9b1cb759d5185d44eb2b7` | 4935 | +| `.bitcode/v20-quality-summary.json` | `sha256:56306e69b69f2aec50232b19641a1fb68af0b6d153599d82d827adf34f72c7a0` | 4464 | +| `.bitcode/v20-visual-regression-report.json` | `sha256:15e61744bca80b049e5dc5b25c01cb6d34b178e2c65d2afddeb964e7371a3cd6` | 19369 | + +### V20 Quality Summary + +- reportId: `v20-quality-summary` +- passed: `true` +- qualityReportCount: `5` +- generatedArtifactCount: `6` +- inheritedPositiveMatrixCellCount: `1864` +- inheritedNegativeMutationCellCount: `10` +- inheritedDeterministicReplayPassed: `true` + +| reportId | artifactPath | passed | blockingFailures | acceptedExclusions | +| --- | --- | --- | --- | --- | +| `v20-operator-acceptance-transcript` | `.bitcode/v20-operator-acceptance-transcript.json` | `true` | 0 | 0 | +| `v20-visual-regression-report` | `.bitcode/v20-visual-regression-report.json` | `true` | 0 | 0 | +| `v20-accessibility-report` | `.bitcode/v20-accessibility-report.json` | `true` | 0 | 0 | +| `v20-performance-budget-report` | `.bitcode/v20-performance-budget-report.json` | `true` | 0 | 1 | +| `v20-projection-quality-smoke-matrix` | `.bitcode/v20-projection-quality-smoke-matrix.json` | `true` | 0 | 0 | + +### V20 Operator Acceptance Transcript + +- reportId: `v20-operator-acceptance-transcript` +- transcriptMode: `executable-browser-workflow-summary` +- flowCount: `10` +- stepCount: `10` +- passed: `true` + +| flowId | stepId | scenarioId | branchMode | principal | passed | +| --- | --- | --- | --- | --- | --- | +| `seeded-shell-posture` | `seeded-shell-visible` | `auth-issuer-rollback` | `patch` | `buyer` | `true` | +| `targeted-branch-run` | `targeted-deposit-to-settlement` | `auth-issuer-rollback` | `patch` | `buyer` | `true` | +| `normalization-branch-run` | `normalization-source-to-shares` | `auth-many-asset-normalization` | `context` | `buyer` | `true` | +| `public-privacy-boundary-projection` | `public-projection-quality-visible` | `privacy-boundary-proof-export` | `patch` | `public` | `true` | +| `reviewer-privacy-boundary-projection` | `reviewer-projection-quality-visible` | `privacy-boundary-proof-export` | `patch` | `reviewer` | `true` | +| `buyer-targeted-projection` | `buyer-projection-quality-visible` | `auth-issuer-rollback` | `patch` | `buyer` | `true` | +| `internal-privacy-boundary-projection` | `internal-projection-quality-visible` | `privacy-boundary-proof-export` | `patch` | `internal` | `true` | +| `invalid-deposit-error` | `invalid-deposit-fails-without-state-mutation` | `auth-issuer-rollback` | `patch` | `buyer` | `true` | +| `no-survivor-conflict-reset` | `no-survivor-conflict-recovers-after-reset` | `auth-issuer-rollback` | `patch` | `buyer` | `true` | +| `generated-appendix-report-discovery` | `generated-proof-and-quality-report-reference-visible` | `auth-issuer-rollback` | `patch` | `buyer` | `true` | + +### V20 Visual Regression Budget + +- reportId: `v20-visual-regression-report` +- signatureMode: `deterministic-dom-geometry-signature` +- screenshotMode: `deferred-until-local-ci-screenshot-stability` +- stateCount: `10` +- passed: `true` + +| stateId | scenarioId | branchMode | principal | signatureDigest | passed | +| --- | --- | --- | --- | --- | --- | +| `initial-seeded-shell` | `auth-issuer-rollback` | `patch` | `buyer` | `sha256:46e31a90a55a3977d6747b0200dbd441077fa34b167846c9d85cf94316c58f64` | `true` | +| `targeted-branch-run` | `auth-issuer-rollback` | `patch` | `buyer` | `sha256:f783c8de2a49678bb7ee2b0fed8e1bd5ca294a7dab91b9e244dc7519d925f51e` | `true` | +| `normalization-branch-run` | `auth-many-asset-normalization` | `context` | `buyer` | `sha256:19313616e2f72dc3273cb5f7f3b8411ae050e4e328215d10714385827ad1506b` | `true` | +| `public-privacy-boundary-projection` | `privacy-boundary-proof-export` | `patch` | `public` | `sha256:6f1c0efce5abfea06241b85d1eeadca1a0fd4f4b2a67c1b28053705f9c65f026` | `true` | +| `reviewer-privacy-boundary-projection` | `privacy-boundary-proof-export` | `patch` | `reviewer` | `sha256:08cdf8898535afff0b9d36673707de6894193e1c44e8f8ba7603800411d71895` | `true` | +| `buyer-targeted-projection` | `auth-issuer-rollback` | `patch` | `buyer` | `sha256:8dc35576526041a6b3b922213d51aa9641d8ea3aa91c8cfaef6aa4b5cc91385d` | `true` | +| `internal-privacy-boundary-projection` | `privacy-boundary-proof-export` | `patch` | `internal` | `sha256:e295312ba215829d49c1162e82de4c292893d885779de50f0d0f8b371fdf0112` | `true` | +| `invalid-deposit-error` | `auth-issuer-rollback` | `patch` | `buyer` | `sha256:10b2c66c83978f5f0275271a67d4e7f45c45707470d616aef3fed48580e8d179` | `true` | +| `no-survivor-conflict` | `auth-issuer-rollback` | `patch` | `buyer` | `sha256:1a681d66e8657a5927acbc617033fb35ae85c2dfff5ce6d88366b70a1b283b9a` | `true` | +| `generated-appendix-report-reference` | `auth-issuer-rollback` | `patch` | `buyer` | `sha256:729bf4d2a934338eb78b303a1b5be9505fbdf20673e82bf91589187e9b60998f` | `true` | + +### V20 Accessibility Budget + +- reportId: `v20-accessibility-report` +- engine: `deterministic-dom-accessibility-contract` +- checkCount: `11` +- normalTextContrast: `4.5` +- nonTextUiContrast: `3` +- passed: `true` + +| checkId | passed | assertionCount | +| --- | --- | --- | +| `control-names` | `true` | 4 | +| `form-labeling` | `true` | 2 | +| `keyboard-operation` | `true` | 3 | +| `focus-order` | `true` | 8 | +| `focus-visibility` | `true` | 5 | +| `status-announcements` | `true` | 3 | +| `landmarks-and-sections` | `true` | 4 | +| `toggle-state` | `true` | 3 | +| `contrast` | `true` | 4 | +| `reduced-motion` | `true` | 1 | +| `projection-safety` | `true` | 3 | + +### V20 Performance Budget + +- reportId: `v20-performance-budget-report` +- measurementMode: `live-test-hard-gate-with-canonical-normalized-class` +- operationCount: `9` +- passed: `true` + +| operationId | budgetMs | hardGate | normalizedElapsedClass | passed | +| --- | --- | --- | --- | --- | +| `initial-seeded-shell-ready` | 1500 | `true` | `within-budget` | `true` | +| `scenario-switch-summary-update` | 500 | `true` | `within-budget` | `true` | +| `projection-switch-summary-update` | 500 | `true` | `within-budget` | `true` | +| `targeted-branch-creation` | 5000 | `true` | `within-budget` | `true` | +| `normalization-branch-creation` | 7000 | `true` | `within-budget` | `true` | +| `proof-family-catalog-render-after-branch` | 1000 | `true` | `within-budget` | `true` | +| `raw-visual-surface-mode-toggle` | 250 | `true` | `within-budget` | `true` | +| `reset-to-ready-state` | 1500 | `true` | `within-budget` | `true` | +| `full-quality-suite-duration` | `report-only` | `false` | `telemetry-only` | `true` | + +### V20 Projection Quality Smoke Matrix + +- reportId: `v20-projection-quality-smoke-matrix` +- matrixMode: `representative-principal-quality-smoke` +- cellCount: `4` +- inheritedBrowserMatrixCells: `64` +- passed: `true` + +| principal | scenarioId | rawFiles | sourceVisible | authVisible | qualityRequiresForbidden | passed | +| --- | --- | --- | --- | --- | --- | --- | +| `public` | `privacy-boundary-proof-export` | `false` | `false` | `false` | `false` | `true` | +| `reviewer` | `privacy-boundary-proof-export` | `false` | `false` | `false` | `false` | `true` | +| `buyer` | `auth-issuer-rollback` | `false` | `false` | `true` | `false` | `true` | +| `internal` | `privacy-boundary-proof-export` | `true` | `true` | `true` | `false` | `true` | + +## Proof Family Inventory + +| proofFamily | proofArtifactPath | memberCount | theoremCount | witnessArtifactCount | replayArtifactCount | replayStepCount | +| --- | --- | --- | --- | --- | --- | --- | +| `inference-synthesis` | `.bitcode/inference-synthesis-proof.json` | 5 | 6 | 6 | 7 | 3 | +| `prompt-completeness` | `.bitcode/prompt-completeness-proof.json` | 5 | 8 | 5 | 5 | 4 | +| `static-code-analysis` | `.bitcode/static-measurement-proof.json` | 4 | 5 | 5 | 5 | 3 | +| `verification-decisions` | `.bitcode/verification-decisions-proof.json` | 5 | 7 | 3 | 3 | 2 | +| `selection-and-materialization` | `.bitcode/selection-and-materialization-proof.json` | 5 | 7 | 7 | 7 | 2 | +| `authorization-and-sensitive-flow` | `.bitcode/authorization-and-sensitive-flow-proof.json` | 5 | 6 | 6 | 6 | 2 | +| `settlement-source-to-shares` | `.bitcode/settlement-source-to-shares-proof.json` | 8 | 8 | 8 | 8 | 2 | +| `disclosure-boundary` | `.bitcode/disclosure-boundary-proof.json` | 4 | 5 | 5 | 5 | 2 | +| `proof-contract` | `.bitcode/proof-contract.json` | 5 | 6 | 3 | 3 | 3 | + +## Family Details + +### inference-synthesis + +- proofArtifactPath: `.bitcode/inference-synthesis-proof.json` +- witnessArtifactPaths: `.bitcode/inference-moment-contracts.json`, `.bitcode/inference-proofs.json`, `.bitcode/prompt-implementation-surface.json`, `.bitcode/prompt-surfaces.json`, `.bitcode/parsed-completion-envelopes.json`, `.bitcode/inference-synthesis-proof.json` +- replayArtifacts: `.bitcode/inference-moment-contracts.json`, `.bitcode/inference-proofs.json`, `.bitcode/prompt-implementation-surface.json`, `.bitcode/prompt-surfaces.json`, `.bitcode/parsed-completion-envelopes.json`, `.bitcode/eval-manifest.json`, `.bitcode/inference-synthesis-proof.json` +- replayStepIds: `inference-synthesis.coverage-reconciliation`, `inference-synthesis.evaluator-status-replay`, `inference-synthesis.evidence-basis-replay` + +#### Members + +| memberId | passedRuns | totalRuns | fieldShape | failingRuns | +| --- | --- | --- | --- | --- | +| `task` | 16 | 16 | `evaluatorStatusTruthful`, `evidenceBasisClosed`, `field`, `fieldProofPresent`, `momentContractPresent`, `parsedEnvelopePresent`, `passed`, `promptSurfacePresent` | `none` | +| `failureModes` | 16 | 16 | `evaluatorStatusTruthful`, `evidenceBasisClosed`, `field`, `fieldProofPresent`, `momentContractPresent`, `parsedEnvelopePresent`, `passed`, `promptSurfacePresent` | `none` | +| `constraints` | 16 | 16 | `evaluatorStatusTruthful`, `evidenceBasisClosed`, `field`, `fieldProofPresent`, `momentContractPresent`, `parsedEnvelopePresent`, `passed`, `promptSurfacePresent` | `none` | +| `targetArtifactKinds` | 16 | 16 | `evaluatorStatusTruthful`, `evidenceBasisClosed`, `field`, `fieldProofPresent`, `momentContractPresent`, `parsedEnvelopePresent`, `passed`, `promptSurfacePresent` | `none` | +| `closureCriteria` | 16 | 16 | `evaluatorStatusTruthful`, `evidenceBasisClosed`, `field`, `fieldProofPresent`, `momentContractPresent`, `parsedEnvelopePresent`, `passed`, `promptSurfacePresent` | `none` | + +#### Theorems + +| theoremId | passedRuns | totalRuns | replayStepIds | failureReasons | failingRuns | +| --- | --- | --- | --- | --- | --- | +| `inference_synthesis.coverage_totality` | 16 | 16 | `inference-synthesis.coverage-reconciliation` | `none` | `none` | +| `inference_synthesis.evaluator_status_truth` | 16 | 16 | `inference-synthesis.evaluator-status-replay` | `none` | `none` | +| `inference_synthesis.evidence_basis_closure` | 16 | 16 | `inference-synthesis.evidence-basis-replay` | `none` | `none` | +| `inference_synthesis.ownership_traceability_closure` | 16 | 16 | `inference-synthesis.evidence-basis-replay` | `none` | `none` | +| `inference_synthesis.witness_materialization_closure` | 16 | 16 | `inference-synthesis.coverage-reconciliation`, `inference-synthesis.evaluator-status-replay`, `inference-synthesis.evidence-basis-replay` | `none` | `none` | +| `inference_synthesis.replay_closure` | 16 | 16 | `inference-synthesis.coverage-reconciliation`, `inference-synthesis.evaluator-status-replay`, `inference-synthesis.evidence-basis-replay` | `none` | `none` | + +#### Replay Steps + +| stepId | theoremIds | requiredArtifactPaths | +| --- | --- | --- | +| `inference-synthesis.coverage-reconciliation` | `inference_synthesis.coverage_totality` | `.bitcode/inference-moment-contracts.json`, `.bitcode/inference-proofs.json`, `.bitcode/inference-synthesis-proof.json`, `.bitcode/prompt-surfaces.json` | +| `inference-synthesis.evaluator-status-replay` | `inference_synthesis.evaluator_status_truth` | `.bitcode/inference-moment-contracts.json`, `.bitcode/inference-proofs.json`, `.bitcode/prompt-surfaces.json`, `.bitcode/eval-manifest.json` | +| `inference-synthesis.evidence-basis-replay` | `inference_synthesis.evidence_basis_closure`, `inference_synthesis.ownership_traceability_closure` | `.bitcode/inference-moment-contracts.json`, `.bitcode/inference-proofs.json`, `.bitcode/prompt-surfaces.json`, `.bitcode/parsed-completion-envelopes.json`, `.bitcode/inference-synthesis-proof.json` | + +### prompt-completeness + +- proofArtifactPath: `.bitcode/prompt-completeness-proof.json` +- witnessArtifactPaths: `.bitcode/prompt-family-registry.json`, `.bitcode/prompt-contracts.json`, `.bitcode/prompt-surfaces.json`, `.bitcode/parsed-completion-envelopes.json`, `.bitcode/prompt-completeness-proof.json` +- replayArtifacts: `.bitcode/prompt-family-registry.json`, `.bitcode/prompt-contracts.json`, `.bitcode/prompt-surfaces.json`, `.bitcode/parsed-completion-envelopes.json`, `.bitcode/prompt-completeness-proof.json` +- replayStepIds: `prompt-completeness.member-set-reconciliation`, `prompt-completeness.parse-admissibility`, `prompt-completeness.consumer-closure`, `prompt-completeness.provenance-truth` + +#### Members + +| memberId | passedRuns | totalRuns | fieldShape | failingRuns | +| --- | --- | --- | --- | --- | +| `task` | 16 | 16 | `classified`, `contractComplete`, `downstreamConsumersClosed`, `explicitlyExcluded`, `field`, `inDeclaredFamilyRegistry`, `parsedEnvelopeAdmissible`, `passed`, `provenanceAnnotationsTruthful`, `registered` | `none` | +| `failureModes` | 16 | 16 | `classified`, `contractComplete`, `downstreamConsumersClosed`, `explicitlyExcluded`, `field`, `inDeclaredFamilyRegistry`, `parsedEnvelopeAdmissible`, `passed`, `provenanceAnnotationsTruthful`, `registered` | `none` | +| `constraints` | 16 | 16 | `classified`, `contractComplete`, `downstreamConsumersClosed`, `explicitlyExcluded`, `field`, `inDeclaredFamilyRegistry`, `parsedEnvelopeAdmissible`, `passed`, `provenanceAnnotationsTruthful`, `registered` | `none` | +| `targetArtifactKinds` | 16 | 16 | `classified`, `contractComplete`, `downstreamConsumersClosed`, `explicitlyExcluded`, `field`, `inDeclaredFamilyRegistry`, `parsedEnvelopeAdmissible`, `passed`, `provenanceAnnotationsTruthful`, `registered` | `none` | +| `closureCriteria` | 16 | 16 | `classified`, `contractComplete`, `downstreamConsumersClosed`, `explicitlyExcluded`, `field`, `inDeclaredFamilyRegistry`, `parsedEnvelopeAdmissible`, `passed`, `provenanceAnnotationsTruthful`, `registered` | `none` | + +#### Theorems + +| theoremId | passedRuns | totalRuns | replayStepIds | failureReasons | failingRuns | +| --- | --- | --- | --- | --- | --- | +| `prompt_completeness.coverage_totality` | 16 | 16 | `prompt-completeness.member-set-reconciliation` | `none` | `none` | +| `prompt_completeness.no_ghost_coverage` | 16 | 16 | `prompt-completeness.member-set-reconciliation` | `none` | `none` | +| `prompt_completeness.explicit_exclusion_closure` | 16 | 16 | `prompt-completeness.member-set-reconciliation` | `none` | `none` | +| `prompt_completeness.contract_closure` | 16 | 16 | `prompt-completeness.parse-admissibility` | `none` | `none` | +| `prompt_completeness.parsed_envelope_admissibility` | 16 | 16 | `prompt-completeness.parse-admissibility` | `none` | `none` | +| `prompt_completeness.downstream_consumer_closure` | 16 | 16 | `prompt-completeness.consumer-closure` | `none` | `none` | +| `prompt_completeness.provenance_truth` | 16 | 16 | `prompt-completeness.provenance-truth` | `none` | `none` | +| `prompt_completeness.witness_replay_closure` | 16 | 16 | `prompt-completeness.member-set-reconciliation`, `prompt-completeness.parse-admissibility`, `prompt-completeness.consumer-closure`, `prompt-completeness.provenance-truth` | `none` | `none` | + +#### Replay Steps + +| stepId | theoremIds | requiredArtifactPaths | +| --- | --- | --- | +| `prompt-completeness.member-set-reconciliation` | `prompt_completeness.coverage_totality`, `prompt_completeness.no_ghost_coverage`, `prompt_completeness.explicit_exclusion_closure` | `.bitcode/prompt-family-registry.json`, `.bitcode/prompt-contracts.json`, `.bitcode/prompt-surfaces.json` | +| `prompt-completeness.parse-admissibility` | `prompt_completeness.contract_closure`, `prompt_completeness.parsed_envelope_admissibility` | `.bitcode/prompt-contracts.json`, `.bitcode/parsed-completion-envelopes.json` | +| `prompt-completeness.consumer-closure` | `prompt_completeness.downstream_consumer_closure` | `.bitcode/prompt-surfaces.json` | +| `prompt-completeness.provenance-truth` | `prompt_completeness.provenance_truth` | `.bitcode/prompt-surfaces.json`, `.bitcode/prompt-contracts.json` | + +### static-code-analysis + +- proofArtifactPath: `.bitcode/static-measurement-proof.json` +- witnessArtifactPaths: `.bitcode/code-analysis-fact-registry.json`, `.bitcode/static-heuristics-registry.json`, `.bitcode/measurement-receipts.json`, `.bitcode/static-measurement-report.json`, `.bitcode/static-measurement-proof.json` +- replayArtifacts: `.bitcode/code-analysis-fact-registry.json`, `.bitcode/static-heuristics-registry.json`, `.bitcode/measurement-receipts.json`, `.bitcode/static-measurement-report.json`, `.bitcode/static-measurement-proof.json` +- replayStepIds: `static-code-analysis.stage-domain`, `static-code-analysis.stage-mapping`, `static-code-analysis.receipt-report-proof` + +#### Members + +| memberId | passedRuns | totalRuns | fieldShape | failingRuns | +| --- | --- | --- | --- | --- | +| `deterministic-parser` | 16 | 16 | `memberId`, `passed`, `stageIds` | `none` | +| `repo-context` | 16 | 16 | `memberId`, `passed`, `stageIds` | `none` | +| `content-unit` | 16 | 16 | `memberId`, `passed`, `stageIds` | `none` | +| `measurement-stages` | 16 | 16 | `memberId`, `passed`, `stageIds` | `none` | + +#### Theorems + +| theoremId | passedRuns | totalRuns | replayStepIds | failureReasons | failingRuns | +| --- | --- | --- | --- | --- | --- | +| `static_code_analysis.stage_domain_purity` | 16 | 16 | `static-code-analysis.stage-domain` | `none` | `none` | +| `static_code_analysis.abstract_to_concrete_stage_mapping` | 16 | 16 | `static-code-analysis.stage-mapping` | `none` | `none` | +| `static_code_analysis.registry_role_closure` | 16 | 16 | `static-code-analysis.stage-mapping` | `none` | `none` | +| `static_code_analysis.receipt_report_proof_agreement` | 16 | 16 | `static-code-analysis.receipt-report-proof` | `none` | `none` | +| `static_code_analysis.witness_replay_closure` | 16 | 16 | `static-code-analysis.stage-domain`, `static-code-analysis.stage-mapping`, `static-code-analysis.receipt-report-proof` | `none` | `none` | + +#### Replay Steps + +| stepId | theoremIds | requiredArtifactPaths | +| --- | --- | --- | +| `static-code-analysis.stage-domain` | `static_code_analysis.stage_domain_purity` | `.bitcode/measurement-receipts.json`, `.bitcode/static-measurement-proof.json` | +| `static-code-analysis.stage-mapping` | `static_code_analysis.abstract_to_concrete_stage_mapping`, `static_code_analysis.registry_role_closure` | `.bitcode/measurement-receipts.json`, `.bitcode/code-analysis-fact-registry.json`, `.bitcode/static-heuristics-registry.json` | +| `static-code-analysis.receipt-report-proof` | `static_code_analysis.receipt_report_proof_agreement`, `static_code_analysis.witness_replay_closure` | `.bitcode/measurement-receipts.json`, `.bitcode/static-measurement-report.json`, `.bitcode/static-measurement-proof.json` | + +### verification-decisions + +- proofArtifactPath: `.bitcode/verification-decisions-proof.json` +- witnessArtifactPaths: `.bitcode/verification-report.json`, `.bitcode/verification-receipts.json`, `.bitcode/verification-decisions-proof.json` +- replayArtifacts: `.bitcode/verification-report.json`, `.bitcode/verification-receipts.json`, `.bitcode/verification-decisions-proof.json` +- replayStepIds: `verification-decisions.stage-mapping`, `verification-decisions.use-tier-consequence` + +#### Members + +| memberId | passedRuns | totalRuns | fieldShape | failingRuns | +| --- | --- | --- | --- | --- | +| `issuance` | 16 | 16 | `memberId`, `passed`, `stageIds` | `none` | +| `provenance` | 16 | 16 | `memberId`, `passed`, `stageIds` | `none` | +| `sufficiency` | 16 | 16 | `memberId`, `passed`, `stageIds` | `none` | +| `issuer-policy` | 16 | 16 | `memberId`, `passed`, `stageIds` | `none` | +| `use-tier-consequence` | 16 | 16 | `memberId`, `passed`, `stageIds` | `none` | + +#### Theorems + +| theoremId | passedRuns | totalRuns | replayStepIds | failureReasons | failingRuns | +| --- | --- | --- | --- | --- | --- | +| `verification_decisions.issuance_closure` | 16 | 16 | `verification-decisions.stage-mapping` | `none` | `none` | +| `verification_decisions.provenance_closure` | 16 | 16 | `verification-decisions.stage-mapping` | `none` | `none` | +| `verification_decisions.sufficiency_closure` | 16 | 16 | `verification-decisions.stage-mapping` | `none` | `none` | +| `verification_decisions.issuer_policy_closure` | 16 | 16 | `verification-decisions.stage-mapping` | `none` | `none` | +| `verification_decisions.use_tier_consequence_closure` | 16 | 16 | `verification-decisions.use-tier-consequence` | `none` | `none` | +| `verification_decisions.receipt_report_role_closure` | 16 | 16 | `verification-decisions.use-tier-consequence` | `none` | `none` | +| `verification_decisions.witness_replay_closure` | 16 | 16 | `verification-decisions.stage-mapping`, `verification-decisions.use-tier-consequence` | `none` | `none` | + +#### Replay Steps + +| stepId | theoremIds | requiredArtifactPaths | +| --- | --- | --- | +| `verification-decisions.stage-mapping` | `verification_decisions.issuance_closure`, `verification_decisions.provenance_closure`, `verification_decisions.sufficiency_closure`, `verification_decisions.issuer_policy_closure` | `.bitcode/verification-receipts.json`, `.bitcode/verification-report.json` | +| `verification-decisions.use-tier-consequence` | `verification_decisions.use_tier_consequence_closure`, `verification_decisions.receipt_report_role_closure` | `.bitcode/verification-receipts.json`, `.bitcode/verification-report.json`, `.bitcode/verification-decisions-proof.json` | + +### selection-and-materialization + +- proofArtifactPath: `.bitcode/selection-and-materialization-proof.json` +- witnessArtifactPaths: `.bitcode/asset-pack.lock.json`, `.bitcode/selected-source-material.json`, `.bitcode/materialization-exclusions.json`, `.bitcode/materialization-visibility-proof.json`, `.bitcode/selection-consistency-proof.json`, `.bitcode/materialization-proof.json`, `.bitcode/selection-and-materialization-proof.json` +- replayArtifacts: `.bitcode/asset-pack.lock.json`, `.bitcode/selected-source-material.json`, `.bitcode/materialization-exclusions.json`, `.bitcode/materialization-visibility-proof.json`, `.bitcode/selection-consistency-proof.json`, `.bitcode/materialization-proof.json`, `.bitcode/selection-and-materialization-proof.json` +- replayStepIds: `selection-and-materialization.selected-set`, `selection-and-materialization.visibility` + +#### Members + +| memberId | passedRuns | totalRuns | fieldShape | failingRuns | +| --- | --- | --- | --- | --- | +| `selected-assets` | 16 | 16 | `memberId`, `passed` | `none` | +| `locked-units` | 16 | 16 | `memberId`, `passed` | `none` | +| `materialized-source` | 16 | 16 | `memberId`, `passed` | `none` | +| `exclusions` | 16 | 16 | `memberId`, `passed` | `none` | +| `visibility-rules` | 16 | 16 | `memberId`, `passed` | `none` | + +#### Theorems + +| theoremId | passedRuns | totalRuns | replayStepIds | failureReasons | failingRuns | +| --- | --- | --- | --- | --- | --- | +| `selection_and_materialization.selected_asset_closure` | 16 | 16 | `selection-and-materialization.selected-set` | `none` | `none` | +| `selection_and_materialization.lock_closure` | 16 | 16 | `selection-and-materialization.selected-set` | `none` | `none` | +| `selection_and_materialization.materialized_source_closure` | 16 | 16 | `selection-and-materialization.selected-set` | `none` | `none` | +| `selection_and_materialization.exclusion_closure` | 16 | 16 | `selection-and-materialization.visibility` | `none` | `none` | +| `selection_and_materialization.visibility_closure` | 16 | 16 | `selection-and-materialization.visibility` | `none` | `none` | +| `selection_and_materialization.selection_consistency_closure` | 16 | 16 | `selection-and-materialization.selected-set` | `none` | `none` | +| `selection_and_materialization.materialization_proof_closure` | 16 | 16 | `selection-and-materialization.selected-set`, `selection-and-materialization.visibility` | `none` | `none` | + +#### Replay Steps + +| stepId | theoremIds | requiredArtifactPaths | +| --- | --- | --- | +| `selection-and-materialization.selected-set` | `selection_and_materialization.selected_asset_closure`, `selection_and_materialization.lock_closure`, `selection_and_materialization.materialized_source_closure`, `selection_and_materialization.selection_consistency_closure` | `.bitcode/asset-pack.lock.json`, `.bitcode/selected-source-material.json`, `.bitcode/selection-consistency-proof.json`, `.bitcode/materialization-proof.json` | +| `selection-and-materialization.visibility` | `selection_and_materialization.visibility_closure`, `selection_and_materialization.exclusion_closure` | `.bitcode/materialization-exclusions.json`, `.bitcode/materialization-visibility-proof.json` | + +### authorization-and-sensitive-flow + +- proofArtifactPath: `.bitcode/authorization-and-sensitive-flow-proof.json` +- witnessArtifactPaths: `.bitcode/identity-bindings.json`, `.bitcode/authorization-decisions.json`, `.bitcode/sensitive-data-flow.json`, `.bitcode/identity-authorization-proof.json`, `.bitcode/sensitive-data-flow-proof.json`, `.bitcode/authorization-and-sensitive-flow-proof.json` +- replayArtifacts: `.bitcode/identity-bindings.json`, `.bitcode/authorization-decisions.json`, `.bitcode/sensitive-data-flow.json`, `.bitcode/identity-authorization-proof.json`, `.bitcode/sensitive-data-flow-proof.json`, `.bitcode/authorization-and-sensitive-flow-proof.json` +- replayStepIds: `authorization-sensitive-flow.identity`, `authorization-sensitive-flow.flows` + +#### Members + +| memberId | passedRuns | totalRuns | fieldShape | failingRuns | +| --- | --- | --- | --- | --- | +| `principals` | 16 | 16 | `memberId`, `passed` | `none` | +| `authorization-decisions` | 16 | 16 | `memberId`, `passed` | `none` | +| `confidentiality-classes` | 16 | 16 | `memberId`, `passed` | `none` | +| `retention-disclosure-rules` | 16 | 16 | `memberId`, `passed` | `none` | +| `sensitive-data-flows` | 16 | 16 | `memberId`, `passed` | `none` | + +#### Theorems + +| theoremId | passedRuns | totalRuns | replayStepIds | failureReasons | failingRuns | +| --- | --- | --- | --- | --- | --- | +| `authorization_and_sensitive_flow.principal_authority_totality` | 16 | 16 | `authorization-sensitive-flow.identity` | `none` | `none` | +| `authorization_and_sensitive_flow.authorization_decision_closure` | 16 | 16 | `authorization-sensitive-flow.identity` | `none` | `none` | +| `authorization_and_sensitive_flow.classification_closure` | 16 | 16 | `authorization-sensitive-flow.flows` | `none` | `none` | +| `authorization_and_sensitive_flow.policy_assignment_closure` | 16 | 16 | `authorization-sensitive-flow.flows` | `none` | `none` | +| `authorization_and_sensitive_flow.no_unauthorized_public_flow` | 16 | 16 | `authorization-sensitive-flow.flows` | `none` | `none` | +| `authorization_and_sensitive_flow.witness_replay_closure` | 16 | 16 | `authorization-sensitive-flow.identity`, `authorization-sensitive-flow.flows` | `none` | `none` | + +#### Replay Steps + +| stepId | theoremIds | requiredArtifactPaths | +| --- | --- | --- | +| `authorization-sensitive-flow.identity` | `authorization_and_sensitive_flow.principal_authority_totality`, `authorization_and_sensitive_flow.authorization_decision_closure` | `.bitcode/identity-bindings.json`, `.bitcode/authorization-decisions.json`, `.bitcode/identity-authorization-proof.json` | +| `authorization-sensitive-flow.flows` | `authorization_and_sensitive_flow.classification_closure`, `authorization_and_sensitive_flow.policy_assignment_closure`, `authorization_and_sensitive_flow.no_unauthorized_public_flow` | `.bitcode/sensitive-data-flow.json`, `.bitcode/sensitive-data-flow-proof.json` | + +### settlement-source-to-shares + +- proofArtifactPath: `.bitcode/settlement-source-to-shares-proof.json` +- witnessArtifactPaths: `.bitcode/source-to-shares.json`, `.bitcode/settlement-participation.json`, `.bitcode/settlement-preview.json`, `.bitcode/accounting-precision-report.json`, `.bitcode/journal-diff.json`, `.bitcode/journal-completeness-proof.json`, `.bitcode/settlement-proof.json`, `.bitcode/settlement-source-to-shares-proof.json` +- replayArtifacts: `.bitcode/source-to-shares.json`, `.bitcode/settlement-participation.json`, `.bitcode/settlement-preview.json`, `.bitcode/accounting-precision-report.json`, `.bitcode/journal-diff.json`, `.bitcode/journal-completeness-proof.json`, `.bitcode/settlement-proof.json`, `.bitcode/settlement-source-to-shares-proof.json` +- replayStepIds: `settlement-source-to-shares.contribution-allocation`, `settlement-source-to-shares.journal-theorem` + +#### Members + +| memberId | passedRuns | totalRuns | fieldShape | failingRuns | +| --- | --- | --- | --- | --- | +| `contribution` | 16 | 16 | `memberId`, `passed` | `none` | +| `clipping` | 16 | 16 | `memberId`, `passed` | `none` | +| `normalization` | 16 | 16 | `memberId`, `passed` | `none` | +| `participation` | 16 | 16 | `memberId`, `passed` | `none` | +| `allocation` | 16 | 16 | `memberId`, `passed` | `none` | +| `quantized-fit-quality-receipting` | 16 | 16 | `memberId`, `passed` | `none` | +| `journal` | 16 | 16 | `memberId`, `passed` | `none` | +| `settlement-proof` | 16 | 16 | `memberId`, `passed` | `none` | + +#### Theorems + +| theoremId | passedRuns | totalRuns | replayStepIds | failureReasons | failingRuns | +| --- | --- | --- | --- | --- | --- | +| `settlement_source_to_shares.contribution_totality` | 16 | 16 | `settlement-source-to-shares.contribution-allocation` | `none` | `none` | +| `settlement_source_to_shares.clipping_determinism` | 16 | 16 | `settlement-source-to-shares.contribution-allocation` | `none` | `none` | +| `settlement_source_to_shares.normalization_exactness` | 16 | 16 | `settlement-source-to-shares.contribution-allocation` | `none` | `none` | +| `settlement_source_to_shares.participation_totality` | 16 | 16 | `settlement-source-to-shares.contribution-allocation` | `none` | `none` | +| `settlement_source_to_shares.allocation_conservation` | 16 | 16 | `settlement-source-to-shares.contribution-allocation` | `none` | `none` | +| `settlement_source_to_shares.quantized_fit_quality_receipting` | 16 | 16 | `settlement-source-to-shares.contribution-allocation` | `none` | `none` | +| `settlement_source_to_shares.journal_completeness` | 16 | 16 | `settlement-source-to-shares.journal-theorem` | `none` | `none` | +| `settlement_source_to_shares.settlement_theorem_integrity` | 16 | 16 | `settlement-source-to-shares.journal-theorem` | `none` | `none` | + +#### Replay Steps + +| stepId | theoremIds | requiredArtifactPaths | +| --- | --- | --- | +| `settlement-source-to-shares.contribution-allocation` | `settlement_source_to_shares.contribution_totality`, `settlement_source_to_shares.clipping_determinism`, `settlement_source_to_shares.normalization_exactness`, `settlement_source_to_shares.participation_totality`, `settlement_source_to_shares.allocation_conservation`, `settlement_source_to_shares.quantized_fit_quality_receipting` | `.bitcode/source-to-shares.json`, `.bitcode/settlement-participation.json`, `.bitcode/settlement-preview.json`, `.bitcode/accounting-precision-report.json` | +| `settlement-source-to-shares.journal-theorem` | `settlement_source_to_shares.journal_completeness`, `settlement_source_to_shares.settlement_theorem_integrity` | `.bitcode/journal-diff.json`, `.bitcode/journal-completeness-proof.json`, `.bitcode/settlement-proof.json` | + +### disclosure-boundary + +- proofArtifactPath: `.bitcode/disclosure-boundary-proof.json` +- witnessArtifactPaths: `.bitcode/projection-policy.json`, `.bitcode/bounded-public-proof.json`, `.bitcode/redaction-proof.json`, `.bitcode/disclosure-proof.json`, `.bitcode/disclosure-boundary-proof.json` +- replayArtifacts: `.bitcode/projection-policy.json`, `.bitcode/bounded-public-proof.json`, `.bitcode/redaction-proof.json`, `.bitcode/disclosure-proof.json`, `.bitcode/disclosure-boundary-proof.json` +- replayStepIds: `disclosure-boundary.policy-bounded-public`, `disclosure-boundary.redaction-disclosure` + +#### Members + +| memberId | passedRuns | totalRuns | fieldShape | failingRuns | +| --- | --- | --- | --- | --- | +| `projection-policy` | 16 | 16 | `memberId`, `passed` | `none` | +| `bounded-public-proof` | 16 | 16 | `memberId`, `passed` | `none` | +| `redaction-proof` | 16 | 16 | `memberId`, `passed` | `none` | +| `disclosure-proof` | 16 | 16 | `memberId`, `passed` | `none` | + +#### Theorems + +| theoremId | passedRuns | totalRuns | replayStepIds | failureReasons | failingRuns | +| --- | --- | --- | --- | --- | --- | +| `disclosure_boundary.projection_policy_closure` | 16 | 16 | `disclosure-boundary.policy-bounded-public` | `none` | `none` | +| `disclosure_boundary.bounded_public_metadata_only` | 16 | 16 | `disclosure-boundary.policy-bounded-public` | `none` | `none` | +| `disclosure_boundary.redaction_alignment` | 16 | 16 | `disclosure-boundary.redaction-disclosure` | `none` | `none` | +| `disclosure_boundary.disclosure_verdict_alignment` | 16 | 16 | `disclosure-boundary.redaction-disclosure` | `none` | `none` | +| `disclosure_boundary.witness_replay_closure` | 16 | 16 | `disclosure-boundary.policy-bounded-public`, `disclosure-boundary.redaction-disclosure` | `none` | `none` | + +#### Replay Steps + +| stepId | theoremIds | requiredArtifactPaths | +| --- | --- | --- | +| `disclosure-boundary.policy-bounded-public` | `disclosure_boundary.projection_policy_closure`, `disclosure_boundary.bounded_public_metadata_only` | `.bitcode/projection-policy.json`, `.bitcode/bounded-public-proof.json` | +| `disclosure-boundary.redaction-disclosure` | `disclosure_boundary.redaction_alignment`, `disclosure_boundary.disclosure_verdict_alignment`, `disclosure_boundary.witness_replay_closure` | `.bitcode/redaction-proof.json`, `.bitcode/disclosure-proof.json`, `.bitcode/disclosure-boundary-proof.json` | + +### proof-contract + +- proofArtifactPath: `.bitcode/proof-contract.json` +- witnessArtifactPaths: `.bitcode/proof-contract.json`, `.bitcode/system-proof-bundle.json`, `.bitcode/proof-witness-manifest.json` +- replayArtifacts: `.bitcode/proof-contract.json`, `.bitcode/system-proof-bundle.json`, `.bitcode/proof-witness-manifest.json` +- replayStepIds: `proof-contract.contract-materialization`, `proof-contract.evidence-chain`, `proof-contract.bundle-witness` + +#### Members + +| memberId | passedRuns | totalRuns | fieldShape | failingRuns | +| --- | --- | --- | --- | --- | +| `proof-contract` | 16 | 16 | `memberId`, `passed` | `none` | +| `evidence-chain` | 16 | 16 | `memberId`, `passed` | `none` | +| `theorem-checks` | 16 | 16 | `memberId`, `passed` | `none` | +| `system-proof-bundle` | 16 | 16 | `memberId`, `passed` | `none` | +| `witness-manifest-closure` | 16 | 16 | `memberId`, `passed` | `none` | + +#### Theorems + +| theoremId | passedRuns | totalRuns | replayStepIds | failureReasons | failingRuns | +| --- | --- | --- | --- | --- | --- | +| `proof_contract.contract_materialization` | 16 | 16 | `proof-contract.contract-materialization` | `none` | `none` | +| `proof_contract.evidence_chain_closure` | 16 | 16 | `proof-contract.evidence-chain` | `none` | `none` | +| `proof_contract.theorem_check_binding` | 16 | 16 | `proof-contract.evidence-chain` | `none` | `none` | +| `proof_contract.bundle_coherence` | 16 | 16 | `proof-contract.bundle-witness` | `none` | `none` | +| `proof_contract.witness_manifest_coherence` | 16 | 16 | `proof-contract.bundle-witness` | `none` | `none` | +| `proof_contract.replay_closure` | 16 | 16 | `proof-contract.bundle-witness` | `none` | `none` | + +#### Replay Steps + +| stepId | theoremIds | requiredArtifactPaths | +| --- | --- | --- | +| `proof-contract.contract-materialization` | `proof_contract.contract_materialization` | `.bitcode/proof-contract.json` | +| `proof-contract.evidence-chain` | `proof_contract.evidence_chain_closure`, `proof_contract.theorem_check_binding` | `.bitcode/proof-contract.json`, `.bitcode/system-proof-bundle.json` | +| `proof-contract.bundle-witness` | `proof_contract.bundle_coherence`, `proof_contract.witness_manifest_coherence`, `proof_contract.replay_closure` | `.bitcode/system-proof-bundle.json`, `.bitcode/proof-witness-manifest.json`, `.bitcode/proof-contract.json` | + +## Scenario and Run Matrix + +| scenarioId | branchMode | readId | branchName | assetPackId | familyCount | allFamiliesPassed | proofContractPassed | requiredArtifactPathCount | artifactDigestCount | fullyProven | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| `auth-issuer-rollback` | `patch` | `read_auth-issuer-rollback_40b4b5cc9b` | `bitcode/remediation-read_auth-issuer-rollback_40b4b5cc9b-auth-issuer-rollback` | `asset_pack_f4d2f98e2b7f` | 9 | `true` | `true` | 47 | 46 | `true` | +| `auth-issuer-rollback` | `context` | `read_auth-issuer-rollback_40b4b5cc9b` | `bitcode/remediation-read_auth-issuer-rollback_40b4b5cc9b-auth-issuer-rollback` | `asset_pack_19909dd95164` | 9 | `true` | `true` | 47 | 46 | `true` | +| `rust-validator-proof-gap` | `patch` | `read_rust-validator-proof-gap_7044fe8972` | `bitcode/remediation-read_rust-validator-proof-gap_7044fe8972-rust-validator-proof-gap` | `asset_pack_3b7a68101d23` | 9 | `true` | `true` | 47 | 46 | `true` | +| `rust-validator-proof-gap` | `context` | `read_rust-validator-proof-gap_7044fe8972` | `bitcode/remediation-read_rust-validator-proof-gap_7044fe8972-rust-validator-proof-gap` | `asset_pack_3b7a68101d23` | 9 | `true` | `true` | 47 | 46 | `true` | +| `config-policy-precedence-incident` | `patch` | `read_config-policy-precedence-incident_f39d972e54` | `bitcode/remediation-read_config-policy-precedence-incident_f39d972e54-config-policy-precedence-incident` | `asset_pack_d0c7f0b06b9a` | 9 | `true` | `true` | 47 | 46 | `true` | +| `config-policy-precedence-incident` | `context` | `read_config-policy-precedence-incident_f39d972e54` | `bitcode/remediation-read_config-policy-precedence-incident_f39d972e54-config-policy-precedence-incident` | `asset_pack_d0c7f0b06b9a` | 9 | `true` | `true` | 47 | 46 | `true` | +| `unsafe-patch-review-recovery` | `patch` | `read_unsafe-patch-review-recovery_16a56c87c5` | `bitcode/remediation-read_unsafe-patch-review-recovery_16a56c87c5-unsafe-patch-review-recovery` | `asset_pack_fd3c892c8e9e` | 9 | `true` | `true` | 47 | 46 | `true` | +| `unsafe-patch-review-recovery` | `context` | `read_unsafe-patch-review-recovery_16a56c87c5` | `bitcode/remediation-read_unsafe-patch-review-recovery_16a56c87c5-unsafe-patch-review-recovery` | `asset_pack_fd3c892c8e9e` | 9 | `true` | `true` | 47 | 46 | `true` | +| `infra-deployment-mismatch` | `patch` | `read_infra-deployment-mismatch_be8a999141` | `bitcode/remediation-read_infra-deployment-mismatch_be8a999141-infra-deployment-mismatch` | `asset_pack_9f1b844a2cdf` | 9 | `true` | `true` | 47 | 46 | `true` | +| `infra-deployment-mismatch` | `context` | `read_infra-deployment-mismatch_be8a999141` | `bitcode/remediation-read_infra-deployment-mismatch_be8a999141-infra-deployment-mismatch` | `asset_pack_9f1b844a2cdf` | 9 | `true` | `true` | 47 | 46 | `true` | +| `privacy-boundary-proof-export` | `patch` | `read_privacy-boundary-proof-export_8163942d95` | `bitcode/remediation-read_privacy-boundary-proof-export_8163942d95-privacy-boundary-proof-export` | `asset_pack_c5fef3ab17c5` | 9 | `true` | `true` | 47 | 46 | `true` | +| `privacy-boundary-proof-export` | `context` | `read_privacy-boundary-proof-export_8163942d95` | `bitcode/remediation-read_privacy-boundary-proof-export_8163942d95-privacy-boundary-proof-export` | `asset_pack_c5fef3ab17c5` | 9 | `true` | `true` | 47 | 46 | `true` | +| `polyglot-gateway-benchmark-remediation` | `patch` | `read_polyglot-gateway-benchmark-remediation_ca6f233369` | `bitcode/remediation-read_polyglot-gateway-benchmark-remediation_ca6f233369-polyglot-gateway-benchmark-remediation` | `asset_pack_654da1e46737` | 9 | `true` | `true` | 47 | 46 | `true` | +| `polyglot-gateway-benchmark-remediation` | `context` | `read_polyglot-gateway-benchmark-remediation_ca6f233369` | `bitcode/remediation-read_polyglot-gateway-benchmark-remediation_ca6f233369-polyglot-gateway-benchmark-remediation` | `asset_pack_654da1e46737` | 9 | `true` | `true` | 47 | 46 | `true` | +| `auth-many-asset-normalization` | `patch` | `read_auth-many-asset-normalization_f6dbfe951c` | `bitcode/remediation-read_auth-many-asset-normalization_f6dbfe951c-auth-many-asset-normalization` | `asset_pack_186c76eb7d2d` | 9 | `true` | `true` | 47 | 46 | `true` | +| `auth-many-asset-normalization` | `context` | `read_auth-many-asset-normalization_f6dbfe951c` | `bitcode/remediation-read_auth-many-asset-normalization_f6dbfe951c-auth-many-asset-normalization` | `asset_pack_186c76eb7d2d` | 9 | `true` | `true` | 47 | 46 | `true` | + +## Incomplete Verdicts + +- none + +## Run Details + +### auth-issuer-rollback/patch + +- branchName: `bitcode/remediation-read_auth-issuer-rollback_40b4b5cc9b-auth-issuer-rollback` +- readId: `read_auth-issuer-rollback_40b4b5cc9b` +- assetPackId: `asset_pack_f4d2f98e2b7f` +- proofContractHash: `sha256:2bc0cdb1b9c54e9b714d946f3bee408f0343a3dade3175bb2dd3e34c1ca022a9` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:256959c2fe4952b795e30622c3811861f5488c1d81c55cb836ce21d8b2813e64` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:f4595d1c00efd134c3dbaf7f5eb8a1ea6f7afb1afeaacfc52da133a9d6619393` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:9592d38f7281eafa7ac658e48cbf6e35ab44591384bf73dc11e332237160df39` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:098b3934f79eaf77bbd0f72593b3e9d35a83344894d46a09a1c84853f2bc710e` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:cfea2cc82ce182248ce41d6c0354e00c55fad05e1304ab3e37f6ee43b43b4fca` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:0896df3fcc89b27fe7ac491caad0d739503111bdce24e03e8f037937ac2790de` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:2bc0cdb1b9c54e9b714d946f3bee408f0343a3dade3175bb2dd3e34c1ca022a9` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:a08dcb38b21b853afb64378b8872b02e066da3a7a72adfa93c6abfd217c55cfc` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:1c38aa47b7361ce985b48e3da400d880f37290debf70271c34ed3b10fafe72fa` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:098b3934f79eaf77bbd0f72593b3e9d35a83344894d46a09a1c84853f2bc710e` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:5f4251534a23662cdb4ebac2a3c8436648448bfd5495818036ebfd1030bbf9d6` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:f5da41a20f3a15375abbe1fdabd2a88239a2a8f637aaf033e8018915a0e9c7eb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:7be4db9348b2c5ba639d54417be9e428fda3017cf10f61ed4c552272d07e01a4` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:0896df3fcc89b27fe7ac491caad0d739503111bdce24e03e8f037937ac2790de` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:f5da41a20f3a15375abbe1fdabd2a88239a2a8f637aaf033e8018915a0e9c7eb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:46e2aab2c9db74f02f715034b5c63518119a590f18d4d2bf37c35c5c174e76ba` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:d25e761512f1d40adc659462dd06c03af6e25f2e48a30b5b89ae7ffc928e776d` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:4d4111ebb0cb41d0246d93e30a808c007241d27c715b491aa53e762342c8759c` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:02e131ce1efdb0b3f9a621fbd2ba6a3f805b9b85b6903292117901611b0fe21d` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:9e6a10b2ec749912879e6bcd36fa1fba4ea6addfe1a37475e7a49718a154ad2d` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:256959c2fe4952b795e30622c3811861f5488c1d81c55cb836ce21d8b2813e64` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:f5f9f0d0bfcdb4e04468c26d9ad18a982d1c96bd542f748eb3e2f8895702dcb7` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:b259d0cc8915b4491f7cf220e2bba34ae95e7b68e1d30f07e3fa6ada7dfb0563` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:f377c98e7db49df061805373caca01b550d3fcadd7be710991e4c3ddf2df826d` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:a9c087535c2de8ba4550cb9ed8b7c0cb92b64dd3e9bf0eb5d8e502981602b771` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:295cf78382de6b94a028e4c61541ea0c6a57aa62ed63593efd0ba7998459a4e0` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:6dcc4f10e576cd74891519cda9354cd2b04d7a01f2a014653957f856f3eb1f6f` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:a612d67d1995853ee132d9dd21fd8c64c8f986b6c41a2b0e0d042447552f2cd6` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:bb8674abf94ae1d8ee5d5ed695258555f039326c2a75d3632dfd65271a06b1e1` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:1a33ac2be9d039f56b0448f6eb47833327f655c46770eff998d30232f759fe03` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:49a7941430fe1eccbe71c0b321955dd7790faa63c7d983123118ca94fddeb04d` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:7b3b4c552085629cbb6af1dfc705a69ada6e0f34c32365ac768407679052b24f` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:70bc3fdae9bd5f4424476c90c9272989d161c73c04c88ae96c87e8f8473a0848` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:f5da41a20f3a15375abbe1fdabd2a88239a2a8f637aaf033e8018915a0e9c7eb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:a116782f3f2d2a02acc6f45be8320e9eb265bc77de7f4b2db59a5c610a0d2e97` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:9592d38f7281eafa7ac658e48cbf6e35ab44591384bf73dc11e332237160df39` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:0458593a95733b5c411c3cbdfe188bcc394fbfe5811f5deb8e73bb3a83aca630` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:9901fc2c0ead9f1445ec4254fdc9c621f3fd92e413e815b0b8d768fb8ab30f5d` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:98cf7cd3c820a2cb9970b1474b5d081c96efacb957ebb23ca47953dae3f6a46e` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:f6e862d56ff0166f78dd46659332af9cb94f638d39c165b1573dcfb524aed357` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:dff1642ab7d6939c2263360e45775d5e737934200b4dd05740f2aa1d437b26cf` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:433796e9495bb735acb1fd1a916b3e3d212cae22a4bec0ccda69a4ba7b538620` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:cfea2cc82ce182248ce41d6c0354e00c55fad05e1304ab3e37f6ee43b43b4fca` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:83bcaaf9d2b037535e3155879f3b613e714a963aee6577de070099cba6a07e14` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:d1ff71fa51725c5244d89beced18e8cd51aec0504c0aca07cc10c66c94e492c9` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:f4595d1c00efd134c3dbaf7f5eb8a1ea6f7afb1afeaacfc52da133a9d6619393` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:0e40751f7e15e39c69210e9bd1abd9d12cd49bb873bde875cf3c7de9b1395bd4` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:0feea3e1993fb13794a7017859665acff7c7f180604739e7835f49d5feb425ab` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:ba96ccbd5f1ff2e65173d06e47ad3ff7c071eff0579ffd3cf2067f52444af1af` | `verification-decisions` | `verification-evidence` | `false` | + +### auth-issuer-rollback/context + +- branchName: `bitcode/remediation-read_auth-issuer-rollback_40b4b5cc9b-auth-issuer-rollback` +- readId: `read_auth-issuer-rollback_40b4b5cc9b` +- assetPackId: `asset_pack_19909dd95164` +- proofContractHash: `sha256:0800e46f246b20d88857779f128a9a59edd322529b3dc5735eba5a9710399db0` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:256959c2fe4952b795e30622c3811861f5488c1d81c55cb836ce21d8b2813e64` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:f4595d1c00efd134c3dbaf7f5eb8a1ea6f7afb1afeaacfc52da133a9d6619393` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:e5d0ddd164f244e7747c498ab9ebebd58c9bbc881a38786fc3185a6a47f27cf6` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:ff2d9cec42dd2f31397e5bc8de46cffd9f53379230391b865468c27e8354122d` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:09cd59c100db1e5a7931d10338fce407145c0d97ce0eef28a59a5a6dcd3096d3` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:ac206af0e4758da5b5b9b75d0972dee99057ce5f0694e7d84428c1e132f0d11c` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:0800e46f246b20d88857779f128a9a59edd322529b3dc5735eba5a9710399db0` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:cb89d3a06d4b07b5e70012ed8ad97838ee36e9689232913f9a86f1228dfe91cc` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:a077681f046fbb925c387550b5a8df129bfb602c74b0a482699ff28c8dcf6fac` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:ff2d9cec42dd2f31397e5bc8de46cffd9f53379230391b865468c27e8354122d` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:9dffc6cda7ce8ebc9d64788e39ae4cdedc7e1da0d27452a9d2b8de546392c40f` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:588c76e7d32b2409990e39ad16946c59d6cf15db87d451f043f2a194cdd56dbb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:7be4db9348b2c5ba639d54417be9e428fda3017cf10f61ed4c552272d07e01a4` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:ac206af0e4758da5b5b9b75d0972dee99057ce5f0694e7d84428c1e132f0d11c` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:588c76e7d32b2409990e39ad16946c59d6cf15db87d451f043f2a194cdd56dbb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:46e2aab2c9db74f02f715034b5c63518119a590f18d4d2bf37c35c5c174e76ba` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:7e22edb0b2a1daf5244a70102f5b66356ceb9358a23b92c3b31cc1a0eed849a4` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:94c92e34df4f6e3a8e15ef2030bdbd36663f16419a5fc66bf3b6c3fbc19a2a2e` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:02e131ce1efdb0b3f9a621fbd2ba6a3f805b9b85b6903292117901611b0fe21d` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:9e6a10b2ec749912879e6bcd36fa1fba4ea6addfe1a37475e7a49718a154ad2d` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:256959c2fe4952b795e30622c3811861f5488c1d81c55cb836ce21d8b2813e64` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:474af6929f6571b43b0bf7775885c66089db4111b9fe4862a10bc74c1453906c` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:8c167479576094e68a68e8e4041079403a22635f31826494a5a62eed0bd812d4` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:cbcae63fa8e4650193ba088f2efbe3132de023f9ad4334384d64b506d72f3db4` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:813bfe253077e589372561323feee22b8c354887d667ad66137d47b586d63f2f` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:5ea216f7a4ad931f4bb1cb10500eaffca2a183d29e828b4fbb2559239216b94e` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:6dcc4f10e576cd74891519cda9354cd2b04d7a01f2a014653957f856f3eb1f6f` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:a612d67d1995853ee132d9dd21fd8c64c8f986b6c41a2b0e0d042447552f2cd6` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:fa7522727b5f22d3920b966611ed101f0d3c28365936db8cc66fa60f84ac1a4a` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:1a33ac2be9d039f56b0448f6eb47833327f655c46770eff998d30232f759fe03` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:49a7941430fe1eccbe71c0b321955dd7790faa63c7d983123118ca94fddeb04d` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:7b3b4c552085629cbb6af1dfc705a69ada6e0f34c32365ac768407679052b24f` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:9aed3047408104cd9854d48fcc38cbd920fc4abe243ac795da4885014d9ece82` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:588c76e7d32b2409990e39ad16946c59d6cf15db87d451f043f2a194cdd56dbb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:ae941c8173e039154e73aed5639abd804c445e4a995ea70860c6a0e47f2f1c5d` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:e5d0ddd164f244e7747c498ab9ebebd58c9bbc881a38786fc3185a6a47f27cf6` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:ecbd5a7070f28dda086bce15a4dde9516694e604b5a5813f0f17e85a2adefede` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:9901fc2c0ead9f1445ec4254fdc9c621f3fd92e413e815b0b8d768fb8ab30f5d` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:d7ba3091eb9e8a83de9be7cd61dc5aa6648eaf67712fbce41cdf671c731ee50b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:38d3d641821f37594d0ee5dd779048826440a417be4faedfaa1c0273a9aafd83` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:bfa3f543a1f69577e855dc7432c5325b4b0be48a90890a1019559509f677af7f` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:d82bd7f5eef9645e375b456c1a159320b5b3c6d2cac1826c14e45d74098250d6` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:09cd59c100db1e5a7931d10338fce407145c0d97ce0eef28a59a5a6dcd3096d3` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:83bcaaf9d2b037535e3155879f3b613e714a963aee6577de070099cba6a07e14` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:d1ff71fa51725c5244d89beced18e8cd51aec0504c0aca07cc10c66c94e492c9` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:f4595d1c00efd134c3dbaf7f5eb8a1ea6f7afb1afeaacfc52da133a9d6619393` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:0e40751f7e15e39c69210e9bd1abd9d12cd49bb873bde875cf3c7de9b1395bd4` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:0feea3e1993fb13794a7017859665acff7c7f180604739e7835f49d5feb425ab` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:ee68b62ef943bdda96b84eaa1efadaa91529571b4ab874eb652f98461f901a37` | `verification-decisions` | `verification-evidence` | `false` | + +### rust-validator-proof-gap/patch + +- branchName: `bitcode/remediation-read_rust-validator-proof-gap_7044fe8972-rust-validator-proof-gap` +- readId: `read_rust-validator-proof-gap_7044fe8972` +- assetPackId: `asset_pack_3b7a68101d23` +- proofContractHash: `sha256:34f2a976e6dc61ca978b606608d7205e2c5c0cd4ed5e8eb38fdaea91c8faa026` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:4f09eb2ae7c6db3a769ab72b39c692158c09da634ddd72b205c3d7a507783ede` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:b55a0102ac4e3332e525d2353d74b80087b1fdc6d2929fcfb9f2c8948441b92a` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:0832ded750cdd02c6465643c4472466116da0c4543272bbcad7040e9ac166dee` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:54673ee8002b9b47cdf6543c747ea377da8d7a2f4b16672a7d3f1cd01cd08acb` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:b14ee59f7d8b27885fd96e5bb0f20222825045013c5827525f291844a597c26a` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:6d730db590e80e5b9070d41dc88dfa2a83ec00050ee9bd976eb63c221fded753` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:34f2a976e6dc61ca978b606608d7205e2c5c0cd4ed5e8eb38fdaea91c8faa026` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:954f6fe05a26bb44a1f65602fb4a23d8b88571c3453cd0ed215c45963766a83b` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:f62b272e830007b203ceff28d5b8bc0fd395e9da882d1e594174a9082a434dfc` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:54673ee8002b9b47cdf6543c747ea377da8d7a2f4b16672a7d3f1cd01cd08acb` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:b8a2b011c97f34c6efa4eca244296c9f33c7eb2d21cf940712238dac7c4dd4f6` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:03329a4920190ad468ca25efb3ca0848cac25529e67e23273f2b6126ea7b126d` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:1124a2f883b00427e64f6bd489c4cafcaa0bac94ff0da746d1ac2cc18315928a` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:6d730db590e80e5b9070d41dc88dfa2a83ec00050ee9bd976eb63c221fded753` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:03329a4920190ad468ca25efb3ca0848cac25529e67e23273f2b6126ea7b126d` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:fce26ebe697ef2aef5f0977e48ec147406bea365c4af301bc28a82d71b97d85a` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:2287984d304bf31068f4c3517233a3f7da5f2dc444ee5236b539bfd548e7be5a` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:6fb14d8000883576783bf728694ae38f202197fa34e056d59e4ea56e44642887` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:0ba1bdf22cb299df63508fa49e6d994d716d0a5d89e426c260c68ebccd969771` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:276a42d09d1c3507cae113787129c222569bdb7a9934d70c791715e3a490b6b1` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:4f09eb2ae7c6db3a769ab72b39c692158c09da634ddd72b205c3d7a507783ede` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:ac5961a0c7d2162c86ce74e6e50119cd020397bca3db2ea0002f908aeae4c366` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:bb6746f6788dc16b240d863028e05f3522e9fa814c21f47723e79308f5016b41` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:56f03f73459c307d37adc3b8727e831934e2a4c9f563e1d3941fa04548cfd8b0` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:b32f4eec3c3318b969c91f9e90ad70b2242d3213e970e1660463916a86a8a01f` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:4084b99de4b1408240b0538b780841a006ec33f21a4d23346035a4ea32b3e272` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:f57acf4f92feccaf527a3136e98e0c62e8793e1791777cf2810fe80d9864381c` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:75fee22c4117c5669cf0b25919bda19d9dd09d68faa223d6fc2bcf42c4b1045b` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:797e292bde61047478891c4753ee3e83d53e5adf90fac0f2870f3a5a74465909` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:81745756a07140ab4d6633127a602d24ea2e43eedbf1803eee531b391fcbd1bf` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:10c1bc687b7b161f69a70c174f548b1a6708c0e87394630574e19ddcd791c960` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:99b79e74239ef796716c5ddd713dbcf9bda1ca10c4b6368916e6736f4b290f1a` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:03329a4920190ad468ca25efb3ca0848cac25529e67e23273f2b6126ea7b126d` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:06d016c0dc874b965838fcd75b9ab33f642c8dde4f995b545da8ce88506c79d0` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:0832ded750cdd02c6465643c4472466116da0c4543272bbcad7040e9ac166dee` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:3f7148afee2a0b067968500edbdc812560dbc5936fae54b6558474ac8a4687d9` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:ea8daa50baf855ebc90a9ce32cba0f9063d02f165f0badee508fb646b673e6c7` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:406c7ec6249c5b7d3d6c3301501f51bb3d2d6c1136aedc6e0a8e3777a9abcdca` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:2d9c02287ce036d3f03f9a47e18c617a933e3797d06f5309431e3a4c52eb8d0e` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:56d9507dd0e963d4c9391523388f28f105c1414c49cea88e0047aade1298663d` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:7b1b9bb523ffbadf3fe64cffd26bec00e2d6fd6c17aa068d933c5371237b4e0e` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:b14ee59f7d8b27885fd96e5bb0f20222825045013c5827525f291844a597c26a` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:8f009ea19064c0f16810c3751adde06a46aa57c19b400218bfc84972da0319a1` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:ec13771783a116c9d3a317dd42d32f02a865ae0f39547c4c7294bd641e559981` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:b55a0102ac4e3332e525d2353d74b80087b1fdc6d2929fcfb9f2c8948441b92a` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:a44a0169819cfa3ba7f4476ec9ec1a688db2144a2938eb19d0331b0a08ec6a7c` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:ab5f4f8343130819435c7ad0345a8f7e8497831a45861fdaa9ef605b59c33395` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:0570227ca830f82b6d45ac42b70a1a15fa1a24782bbc7f684f40117f9a28f0ab` | `verification-decisions` | `verification-evidence` | `false` | + +### rust-validator-proof-gap/context + +- branchName: `bitcode/remediation-read_rust-validator-proof-gap_7044fe8972-rust-validator-proof-gap` +- readId: `read_rust-validator-proof-gap_7044fe8972` +- assetPackId: `asset_pack_3b7a68101d23` +- proofContractHash: `sha256:34f2a976e6dc61ca978b606608d7205e2c5c0cd4ed5e8eb38fdaea91c8faa026` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:4f09eb2ae7c6db3a769ab72b39c692158c09da634ddd72b205c3d7a507783ede` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:b55a0102ac4e3332e525d2353d74b80087b1fdc6d2929fcfb9f2c8948441b92a` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:fae43adb9a288eabaf5946221c0715414693f6cf144b78fd3b6a8b43fe4b54ab` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:54673ee8002b9b47cdf6543c747ea377da8d7a2f4b16672a7d3f1cd01cd08acb` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:d5c9baa464fc2e61ec0f46da3be4a4eef78cf0ea474feb6a3198e14feb1b5e11` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:2fbb1f37244e7d0a1e313cfbe7f24e1cd88a6059bea1efe553030c45f3d31d24` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:34f2a976e6dc61ca978b606608d7205e2c5c0cd4ed5e8eb38fdaea91c8faa026` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:aa38f0352b0b25daa0bb120f6ec6bba92ad433f14fdbb522171f11e24add092d` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:10a58df1e6f48dcdf09098f83021c983c8bfe3c17173dc79b4a9e73e3fd96258` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:54673ee8002b9b47cdf6543c747ea377da8d7a2f4b16672a7d3f1cd01cd08acb` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:b8a2b011c97f34c6efa4eca244296c9f33c7eb2d21cf940712238dac7c4dd4f6` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:7bd6a0865e9267411b854f91754b10dc446d1b20375009a3099e670933eab4fb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:1124a2f883b00427e64f6bd489c4cafcaa0bac94ff0da746d1ac2cc18315928a` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:2fbb1f37244e7d0a1e313cfbe7f24e1cd88a6059bea1efe553030c45f3d31d24` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:7bd6a0865e9267411b854f91754b10dc446d1b20375009a3099e670933eab4fb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:fce26ebe697ef2aef5f0977e48ec147406bea365c4af301bc28a82d71b97d85a` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:2287984d304bf31068f4c3517233a3f7da5f2dc444ee5236b539bfd548e7be5a` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:6fb14d8000883576783bf728694ae38f202197fa34e056d59e4ea56e44642887` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:0ba1bdf22cb299df63508fa49e6d994d716d0a5d89e426c260c68ebccd969771` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:276a42d09d1c3507cae113787129c222569bdb7a9934d70c791715e3a490b6b1` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:4f09eb2ae7c6db3a769ab72b39c692158c09da634ddd72b205c3d7a507783ede` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:5e125c7620a790c8e3fd50ad27d8602568d5d43e00b0aff8b8efa52127286d59` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:e9c4799551aa74c418c9d483f98e19bb6ba61e073607f4bb7c058805a8032d61` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:b426ce94afa920bc8d16702fd2f54da342ba198387e30b237bf9d58305153be7` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:2fc6ecb431bf4672b35049183c26ce43260e20c9a79a2cea65b089ee7820ab2a` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:4084b99de4b1408240b0538b780841a006ec33f21a4d23346035a4ea32b3e272` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:f57acf4f92feccaf527a3136e98e0c62e8793e1791777cf2810fe80d9864381c` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:75fee22c4117c5669cf0b25919bda19d9dd09d68faa223d6fc2bcf42c4b1045b` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:797e292bde61047478891c4753ee3e83d53e5adf90fac0f2870f3a5a74465909` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:81745756a07140ab4d6633127a602d24ea2e43eedbf1803eee531b391fcbd1bf` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:10c1bc687b7b161f69a70c174f548b1a6708c0e87394630574e19ddcd791c960` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:99b79e74239ef796716c5ddd713dbcf9bda1ca10c4b6368916e6736f4b290f1a` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:7bd6a0865e9267411b854f91754b10dc446d1b20375009a3099e670933eab4fb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:63ef504f3945894d77cc0974005bcce1092d5982ec3deb3ee2037d96f4aea598` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:fae43adb9a288eabaf5946221c0715414693f6cf144b78fd3b6a8b43fe4b54ab` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:3f7148afee2a0b067968500edbdc812560dbc5936fae54b6558474ac8a4687d9` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:ea8daa50baf855ebc90a9ce32cba0f9063d02f165f0badee508fb646b673e6c7` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:406c7ec6249c5b7d3d6c3301501f51bb3d2d6c1136aedc6e0a8e3777a9abcdca` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:ca40d86f416da0c66700f1a3ca2dc6651a16ce69276bda6c0c081987edd67c39` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:25dca8a8160905ae58f03c40b3e12dfc364ffde6092510d80df425313a973380` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:faa095740f49cc6fcf3378253dd0e6416df8b6c3e9bb655c0acd1ac3c3ea2fd3` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:d5c9baa464fc2e61ec0f46da3be4a4eef78cf0ea474feb6a3198e14feb1b5e11` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:8f009ea19064c0f16810c3751adde06a46aa57c19b400218bfc84972da0319a1` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:ec13771783a116c9d3a317dd42d32f02a865ae0f39547c4c7294bd641e559981` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:b55a0102ac4e3332e525d2353d74b80087b1fdc6d2929fcfb9f2c8948441b92a` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:a44a0169819cfa3ba7f4476ec9ec1a688db2144a2938eb19d0331b0a08ec6a7c` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:ab5f4f8343130819435c7ad0345a8f7e8497831a45861fdaa9ef605b59c33395` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:bf96cac17f262ed884e2a4fd28dcaad4ae3bb6e0c4e08fea7b436bcbd6c3e34d` | `verification-decisions` | `verification-evidence` | `false` | + +### config-policy-precedence-incident/patch + +- branchName: `bitcode/remediation-read_config-policy-precedence-incident_f39d972e54-config-policy-precedence-incident` +- readId: `read_config-policy-precedence-incident_f39d972e54` +- assetPackId: `asset_pack_d0c7f0b06b9a` +- proofContractHash: `sha256:83aa4f69425eb95cb36148bfada58f4d224013ca26a2917c9b69bd61da2a57ac` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:b128d3ebfafc59642ae7d5574f24afe8f80dae532dcf68c24cef779bce0666c0` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:adab7903446c23a53b6104c1e12fefca4bd54fe2bba624f440d3aa2e774b2068` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:cef9aa43641f124d922603a162b931dcf0c616ce487316b777cdc29b976f03ed` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:1ef6377e7a3c393fe2fc43f8a9b54f24904631c887e365200062f87c720d08d4` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:9b61e0764eaca5f2d924d2f7b7a62c993489998c320433aee84d03ed62a236bf` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:43693ee69ddeef8ddbf2fb1059065789e6112ca8afa015368d31bdd12ec08c95` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:83aa4f69425eb95cb36148bfada58f4d224013ca26a2917c9b69bd61da2a57ac` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:acd148ad1e066d9d770424e43c377e9e516aedab81942860b14da52311d0dc4e` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:8b08e9c366913f1acc0fc80e40c4031756e21361ca5d502c15676c6e9aaf07f9` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:1ef6377e7a3c393fe2fc43f8a9b54f24904631c887e365200062f87c720d08d4` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:048dcc9df7146577db58b601ea0d62b545660e38ca91bdd820cab202fcd8b4ba` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:f4ea54ea40d36968ee1f9f3cf6938f04df6f448f98b4f5acad7a015bfed90ed8` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:23bc3c813aa06c1751c60db5beae2ada951202499df981aa8e9900fdc5cdb1b6` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:43693ee69ddeef8ddbf2fb1059065789e6112ca8afa015368d31bdd12ec08c95` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:f4ea54ea40d36968ee1f9f3cf6938f04df6f448f98b4f5acad7a015bfed90ed8` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:8e8d0e036c1e6ebdd3c2bd9eaf982040180adcbd56f7bed3ccf2386babdf46f4` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:cc3c680acc654e92261f714408b1cb0f2bbdc45d5623570d4ab6deecf552705b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:2b239e284be7d4bf2a1f43342e7c5318f77e5212e06257bfe663564893ff21ae` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:3c7873de78e25bb306c492ef3018539a5a164dbc34bb957a1016351c6d445808` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:f5c66f068437c614430df435bca8880c968a92209ee38ee56c564ad60ff678f1` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:b128d3ebfafc59642ae7d5574f24afe8f80dae532dcf68c24cef779bce0666c0` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:2a6e281fcd4a3d35f937a54f6906a4f063b301ec1fa4b7bbbd734091eb60a10f` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:c60b87b9eae4982faffb851a30b8d5cae58d436d34f1a460e9e7c7c1a0ea0989` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:7ffbb056c93ce895989b51308a6c83ab5022c974f8ac26d27aa29b43011cb122` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:1c9350dc5d2544a80dde57b1b15d8075cfcea39658d105312f5bba32521f93b5` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:e71a0789bffb8fba9b03092e766d0f589299c55d14f8d61edbf4a750a6c3b1b2` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:d717a53262cb2b72f17796e62b9b37cf4e20d1e90410560ed03db9fc7051b0d3` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:5e34372dc7330b48d668a36d656c06ceda4545f5911669c8da146fb4cb9be7d6` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:e47ded65b7fa05c782049d88d0b5e48b71facde2517912023d24e7a306c364ca` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:c91b6d44013d9514498b464bc4c6dce52197bdf70121663ada56f7af3c331da4` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:3e365f6603e4066510fc07f0c16c245058c19b77e1b796ddc3e50d5ac5f2b91b` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:fe4a268e5d78b61c451ed9eabda2a6a27e2264ac39f8ec724cb2b9f82ee5272f` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:f4ea54ea40d36968ee1f9f3cf6938f04df6f448f98b4f5acad7a015bfed90ed8` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:80f8353e889bf019158f21988f781765f90b0f126df426fcfc76ded8d3e639ef` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:cef9aa43641f124d922603a162b931dcf0c616ce487316b777cdc29b976f03ed` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:501307fda8ba5ca845f985e7c2857595abc67ce54037f07ffa384080d45ca725` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:fdd7c9f7f92d31fd298f5a2259959d8f8e9b0cb1ce754e5d4a5a84aba4aa196b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:da432159de6488b580de43d61685aafab427d6cc6870695e723efbcfcdad3a3d` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:d4b23a10fd81910d3ec2b5a0b275f4507b4146685e3a833c94c2623970b5e49b` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:419448fbe69f2f592f7cdd64ebfb2f91d115670b389db2b0116cae60d0186036` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:b171b6c6807c2d2e6d94fd0565a9bed9c9963572c963aebe2ffc70453fcea25d` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:9b61e0764eaca5f2d924d2f7b7a62c993489998c320433aee84d03ed62a236bf` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:ba57d7503ee19baee3d14abff0c0386aa5c6cac616c94d37a6d7f94d419b3d98` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:a0ffd24e12eb594dd4a9f26c5f3c8d30fac981d018bc57e689c19dca067cd6cb` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:adab7903446c23a53b6104c1e12fefca4bd54fe2bba624f440d3aa2e774b2068` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:1bb54e49a9d35a309f6d4609c114a240249ed537150afec8202fe0d882fb91cf` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:ef5b77905b73c2034704e7eb8f68a0577c5ac40cfd418d541336936ccf9015c8` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:469bdca0efcde89073eb29c577106c5e9b512d8ee0be3daa591f66b756e9c1d7` | `verification-decisions` | `verification-evidence` | `false` | + +### config-policy-precedence-incident/context + +- branchName: `bitcode/remediation-read_config-policy-precedence-incident_f39d972e54-config-policy-precedence-incident` +- readId: `read_config-policy-precedence-incident_f39d972e54` +- assetPackId: `asset_pack_d0c7f0b06b9a` +- proofContractHash: `sha256:83aa4f69425eb95cb36148bfada58f4d224013ca26a2917c9b69bd61da2a57ac` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:b128d3ebfafc59642ae7d5574f24afe8f80dae532dcf68c24cef779bce0666c0` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:adab7903446c23a53b6104c1e12fefca4bd54fe2bba624f440d3aa2e774b2068` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:5effc18dd1f65e1188616aa32cf8e4dc3a8a06bdd3eb95cc2e04341d166fca65` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:1ef6377e7a3c393fe2fc43f8a9b54f24904631c887e365200062f87c720d08d4` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:bb393d54832f9a216f0fe6129671c9369071e0cf78aa823ea5eae59c1d0383e1` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:5610c4975fb289b3909932d3f5b53a7032b7a2507f60ec1b69079cb50f84dbf8` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:83aa4f69425eb95cb36148bfada58f4d224013ca26a2917c9b69bd61da2a57ac` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:95b45ae9eb9536bbfee549a496b4063a1be139c0c7afb6c793c4e2cb78d94012` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:4327385821b6c9f534039e1493494702105307e978a3b06fb3403794861f541f` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:1ef6377e7a3c393fe2fc43f8a9b54f24904631c887e365200062f87c720d08d4` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:048dcc9df7146577db58b601ea0d62b545660e38ca91bdd820cab202fcd8b4ba` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:74c8e4cf02f637a9e6dc48854666992a91f6402dd5f80b2f31bfe483df9ef71c` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:23bc3c813aa06c1751c60db5beae2ada951202499df981aa8e9900fdc5cdb1b6` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:5610c4975fb289b3909932d3f5b53a7032b7a2507f60ec1b69079cb50f84dbf8` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:74c8e4cf02f637a9e6dc48854666992a91f6402dd5f80b2f31bfe483df9ef71c` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:8e8d0e036c1e6ebdd3c2bd9eaf982040180adcbd56f7bed3ccf2386babdf46f4` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:cc3c680acc654e92261f714408b1cb0f2bbdc45d5623570d4ab6deecf552705b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:2b239e284be7d4bf2a1f43342e7c5318f77e5212e06257bfe663564893ff21ae` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:3c7873de78e25bb306c492ef3018539a5a164dbc34bb957a1016351c6d445808` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:f5c66f068437c614430df435bca8880c968a92209ee38ee56c564ad60ff678f1` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:b128d3ebfafc59642ae7d5574f24afe8f80dae532dcf68c24cef779bce0666c0` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:0309f74cd280d6f56073065c73e01a0d81a260e6dd1e7d6c10c8f27ab9eea4e1` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:255aac1f31bf9ca54f311e31ecec87028cc6fa19815508a35292c16f480881aa` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:a5170676e5a1483126e7e8ec86a8740c5a033c44bfada9f7d54cc6fc9307ba13` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:ec141f1062a9fd079135318d1407ccab9340f96c037cb5fc2de32aea4918e3d7` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:e71a0789bffb8fba9b03092e766d0f589299c55d14f8d61edbf4a750a6c3b1b2` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:d717a53262cb2b72f17796e62b9b37cf4e20d1e90410560ed03db9fc7051b0d3` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:5e34372dc7330b48d668a36d656c06ceda4545f5911669c8da146fb4cb9be7d6` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:e47ded65b7fa05c782049d88d0b5e48b71facde2517912023d24e7a306c364ca` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:c91b6d44013d9514498b464bc4c6dce52197bdf70121663ada56f7af3c331da4` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:3e365f6603e4066510fc07f0c16c245058c19b77e1b796ddc3e50d5ac5f2b91b` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:fe4a268e5d78b61c451ed9eabda2a6a27e2264ac39f8ec724cb2b9f82ee5272f` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:74c8e4cf02f637a9e6dc48854666992a91f6402dd5f80b2f31bfe483df9ef71c` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:6690719da2460798a8b855d707f9ded84fc28ce60b00aec55636e9d99e47cdd6` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:5effc18dd1f65e1188616aa32cf8e4dc3a8a06bdd3eb95cc2e04341d166fca65` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:501307fda8ba5ca845f985e7c2857595abc67ce54037f07ffa384080d45ca725` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:fdd7c9f7f92d31fd298f5a2259959d8f8e9b0cb1ce754e5d4a5a84aba4aa196b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:da432159de6488b580de43d61685aafab427d6cc6870695e723efbcfcdad3a3d` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:9d143e66aa4753576e168a51b6c81203c7f90154f8762c493a1d7e3e914f8c56` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:b4f48f36750bb8e789199080421c4a051dadf37bc0519ca0738c263961d0afc3` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:93619dac9545954b993d6058012a17d6b6a87d961cf68699492f29d5bfc7cb89` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:bb393d54832f9a216f0fe6129671c9369071e0cf78aa823ea5eae59c1d0383e1` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:ba57d7503ee19baee3d14abff0c0386aa5c6cac616c94d37a6d7f94d419b3d98` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:a0ffd24e12eb594dd4a9f26c5f3c8d30fac981d018bc57e689c19dca067cd6cb` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:adab7903446c23a53b6104c1e12fefca4bd54fe2bba624f440d3aa2e774b2068` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:1bb54e49a9d35a309f6d4609c114a240249ed537150afec8202fe0d882fb91cf` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:ef5b77905b73c2034704e7eb8f68a0577c5ac40cfd418d541336936ccf9015c8` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:aaef2e74211a6ce18cb681c9be1f8c2c0ff323f3f61f4a4318c824a96eb58b97` | `verification-decisions` | `verification-evidence` | `false` | + +### unsafe-patch-review-recovery/patch + +- branchName: `bitcode/remediation-read_unsafe-patch-review-recovery_16a56c87c5-unsafe-patch-review-recovery` +- readId: `read_unsafe-patch-review-recovery_16a56c87c5` +- assetPackId: `asset_pack_fd3c892c8e9e` +- proofContractHash: `sha256:081e1b7dde51ffe365b65b8a69d22bef36b87ec49e90d3c5bc81f1d731ba23eb` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:1d10c217eace8afce8408b11245435b2e9081835c29f5f2da5f29c59e41b7cc5` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:f4fba9666f284d709559ee6516ee9563926a367b8f7c6351fca108f319f1b4b6` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:fcc2ca2a8cb1a47c046d4cb66e6cce5bda0205778c6ab6e262d3be2cf5871816` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:2260487892adf8f4485b3d2e93477abe006715da4c6b703f30d76a57e028a12c` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:a7bd13bcc1b386278afc294cdf8a4b9461667919c53fdac7649ad8a9c5950f68` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:45acb0a245c588240d0e9198a27e3ffa3a65362869d56727eb807343e4e36413` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:081e1b7dde51ffe365b65b8a69d22bef36b87ec49e90d3c5bc81f1d731ba23eb` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:211dcb4811d83b8ebc24e5c11af5fc09afb3c84e51c7d19b9f991fb7e7c81cdc` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:cdf13e57999ee55469779a4e1e2872709b99b67bf725465dc7a70ced3651cb4a` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:2260487892adf8f4485b3d2e93477abe006715da4c6b703f30d76a57e028a12c` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:f995059c67cd6f7cefcc2dc1046910e77f6ebdc733d981a33191bd69e3f6ab84` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:4c34cfb8e09abc3fea234130d5e22306e4384e7e02b72d10c38ed4e6a48f9ed6` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:a03da5047522735e147503bfc9fc47f210f6733e934dc36ad29b4fcc10f2a409` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:45acb0a245c588240d0e9198a27e3ffa3a65362869d56727eb807343e4e36413` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:4c34cfb8e09abc3fea234130d5e22306e4384e7e02b72d10c38ed4e6a48f9ed6` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:9206df458686f3d4cdb0badae8e803cccf2b57501066b0da3c5e7e22eebaac92` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:1c9b1263bb7b7369c5198c518dfabccd135d3bb66f52807b99022037b205f034` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:d0debea21fc12d3c1b01fe923ed58a92b5f9188074c7f35bf138cc5cdbedcc89` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:0b81c774979bc960c5470c092f9d0f240bf9cbec0454b4f6e9a6afa595589607` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:c1cea028a02c09bf4071337f6971368a1ca149b1172b7cc0e251b9d3794e4245` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:1d10c217eace8afce8408b11245435b2e9081835c29f5f2da5f29c59e41b7cc5` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:b49a12e17932a30da0273d11cf9a47d7b2d43f51739526eacd600f272f2e1133` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:ce56c4fb5c0c3de094741a30c5a6e220192bb8b911ab4d9c0a172ef6b57180f0` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:1497918b2148fb9bad562416b2d46b90b85eeb988c3ea355e9aad5d38ea36547` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:ba634a091705d48920bbde42a75e0dc700bb1697c8b33feb68367b356814adf5` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:d27e089bde28105989dbbf6ec9bafe5da53f3c72ae8533e605b7c9f4ca12ff95` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:8af4e3ce8938d57e58bc1282d863cbfd15f15d6ba99c4972ab17d5bf1a571957` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:95ceba55806dcbebce98645a62a55e31b48767f7e5c1aa2fb5fd2d3a1ba512fa` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:139369067a8d2d1ec94ed67bb51ba0b2ad74e92af71a988fda83113eb9edba14` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:566ba4e640705978e4064fa1c9c8d55b77f0fe7cfde0d4b112d006edc0ca63f2` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:927b1a4ce68b0ccc92e9e85c605b2e2f2d2ff0011b39b46c2ea31c4e2de6712b` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:a42c8c346a20e5c82f84941bf3245ab46a5d9a111ffb073398a5e51e3eda7cab` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:4c34cfb8e09abc3fea234130d5e22306e4384e7e02b72d10c38ed4e6a48f9ed6` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:241a88c2df2623a0f2fda365a4b56fbd0b87396d61b13975bd92331c85d16f22` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:fcc2ca2a8cb1a47c046d4cb66e6cce5bda0205778c6ab6e262d3be2cf5871816` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:6d85aaed7d0cf7270dc0b1a3f44b04df5487492cb02b8165e63c08e7efc38a7e` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:5cf464309b76a143cbf7a6aa7809b3ba933be40f9d5f216b525853ab6cfc675b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:711bd14abc93b5ca20527c0076576343c53a35473a1002012d839be23ed248d5` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:02cc19fd505fa15604a7ef08ef0c8ec020ffab6bb6dd32482e70392023aae9c9` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:19433854367ec23425e38e1b53936787abe6160b52cd15ee32bb7e9c42ebad69` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:1e847396743898e5595e7e509eec458e430bedb888294df628c18ced2ed39ec5` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:a7bd13bcc1b386278afc294cdf8a4b9461667919c53fdac7649ad8a9c5950f68` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:2cfd1ebd2206bd145f3eb79ca92d6692b40f55283c973459914e90dcaa1a6786` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:33ad5ce4f284cc878d2f575c66cb51521fe6d0d9e892bdbc088fee71017df424` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:f4fba9666f284d709559ee6516ee9563926a367b8f7c6351fca108f319f1b4b6` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:49801567def5c6832d2e1fad1c1ba1f3a03dbf85a224802074b5d0dd777bbe2b` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:6031671fc2964a6ed265ad22e7f06da2a3a11d0cdcb45c1ef0707d63613c44f6` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:d90a28e4b0230c440e755c382eccfbc349293dca056b37fe7508c5ade82f572b` | `verification-decisions` | `verification-evidence` | `false` | + +### unsafe-patch-review-recovery/context + +- branchName: `bitcode/remediation-read_unsafe-patch-review-recovery_16a56c87c5-unsafe-patch-review-recovery` +- readId: `read_unsafe-patch-review-recovery_16a56c87c5` +- assetPackId: `asset_pack_fd3c892c8e9e` +- proofContractHash: `sha256:081e1b7dde51ffe365b65b8a69d22bef36b87ec49e90d3c5bc81f1d731ba23eb` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:1d10c217eace8afce8408b11245435b2e9081835c29f5f2da5f29c59e41b7cc5` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:f4fba9666f284d709559ee6516ee9563926a367b8f7c6351fca108f319f1b4b6` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:f6abbdaf4249320486a9fd70d316ab1edda52b764cc4242f0136c40efa30ef27` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:2260487892adf8f4485b3d2e93477abe006715da4c6b703f30d76a57e028a12c` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:d0e3bad9478b45ec41131e9b79f625426f75e870265f91104f859ac8cbe7b7c6` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:1821843556aeb7ea7924f52129b0e00e9e7c35a7795f842947bde87b9120b743` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:081e1b7dde51ffe365b65b8a69d22bef36b87ec49e90d3c5bc81f1d731ba23eb` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:aedd512b38435c2c8788db85a80e13b2b3fc29417c12b244ad61101af9ba8b60` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:10fb949ac86f2c3234beeb4453c01b73de4a46c1413ccc83edcb9dff1074df5a` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:2260487892adf8f4485b3d2e93477abe006715da4c6b703f30d76a57e028a12c` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:f995059c67cd6f7cefcc2dc1046910e77f6ebdc733d981a33191bd69e3f6ab84` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:3920104b24531e329948f80b2d900fc98cfc42698d4ac1fa0e7286df74a5e01d` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:a03da5047522735e147503bfc9fc47f210f6733e934dc36ad29b4fcc10f2a409` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:1821843556aeb7ea7924f52129b0e00e9e7c35a7795f842947bde87b9120b743` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:3920104b24531e329948f80b2d900fc98cfc42698d4ac1fa0e7286df74a5e01d` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:9206df458686f3d4cdb0badae8e803cccf2b57501066b0da3c5e7e22eebaac92` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:1c9b1263bb7b7369c5198c518dfabccd135d3bb66f52807b99022037b205f034` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:d0debea21fc12d3c1b01fe923ed58a92b5f9188074c7f35bf138cc5cdbedcc89` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:0b81c774979bc960c5470c092f9d0f240bf9cbec0454b4f6e9a6afa595589607` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:c1cea028a02c09bf4071337f6971368a1ca149b1172b7cc0e251b9d3794e4245` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:1d10c217eace8afce8408b11245435b2e9081835c29f5f2da5f29c59e41b7cc5` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:7c1ebcb79090dd09243552478df9b9eb637bedbd91044dda36836887a4f4332d` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:bbaff4c9e409f03b11defdf0c152826374fde34f79b7a07be8b38471ee547e36` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:0979d8fece848a46034cff3b7439c73928e4490316688e0a5458a29d4251c34f` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:c106e15b75acfbdfe03de98f435b1e8c8c8ebb59867e0e6a1341a810935cb245` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:d27e089bde28105989dbbf6ec9bafe5da53f3c72ae8533e605b7c9f4ca12ff95` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:8af4e3ce8938d57e58bc1282d863cbfd15f15d6ba99c4972ab17d5bf1a571957` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:95ceba55806dcbebce98645a62a55e31b48767f7e5c1aa2fb5fd2d3a1ba512fa` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:139369067a8d2d1ec94ed67bb51ba0b2ad74e92af71a988fda83113eb9edba14` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:566ba4e640705978e4064fa1c9c8d55b77f0fe7cfde0d4b112d006edc0ca63f2` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:927b1a4ce68b0ccc92e9e85c605b2e2f2d2ff0011b39b46c2ea31c4e2de6712b` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:a42c8c346a20e5c82f84941bf3245ab46a5d9a111ffb073398a5e51e3eda7cab` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:3920104b24531e329948f80b2d900fc98cfc42698d4ac1fa0e7286df74a5e01d` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:9885cb919e9f819c193899633241241f3217d2583aa76d8719a6f5fcc5308e0c` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:f6abbdaf4249320486a9fd70d316ab1edda52b764cc4242f0136c40efa30ef27` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:6d85aaed7d0cf7270dc0b1a3f44b04df5487492cb02b8165e63c08e7efc38a7e` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:5cf464309b76a143cbf7a6aa7809b3ba933be40f9d5f216b525853ab6cfc675b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:711bd14abc93b5ca20527c0076576343c53a35473a1002012d839be23ed248d5` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:5ce74f215f9d60e8005345240f4ece14b01bf4d68cca0e452e66f69fea4a77c9` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:6ca0519ff7c12cc846645d1b0340688b7cd5391f185dfc67584a325f853cfc01` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:5aaca53542865b3794065212b504d1c0901e2b805b44aed4934c50a66b7e6a2d` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:d0e3bad9478b45ec41131e9b79f625426f75e870265f91104f859ac8cbe7b7c6` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:2cfd1ebd2206bd145f3eb79ca92d6692b40f55283c973459914e90dcaa1a6786` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:33ad5ce4f284cc878d2f575c66cb51521fe6d0d9e892bdbc088fee71017df424` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:f4fba9666f284d709559ee6516ee9563926a367b8f7c6351fca108f319f1b4b6` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:49801567def5c6832d2e1fad1c1ba1f3a03dbf85a224802074b5d0dd777bbe2b` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:6031671fc2964a6ed265ad22e7f06da2a3a11d0cdcb45c1ef0707d63613c44f6` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:5c2e8fb59c61a922499b94bde2804e017b040f87dfce03d240ac8853eea65781` | `verification-decisions` | `verification-evidence` | `false` | + +### infra-deployment-mismatch/patch + +- branchName: `bitcode/remediation-read_infra-deployment-mismatch_be8a999141-infra-deployment-mismatch` +- readId: `read_infra-deployment-mismatch_be8a999141` +- assetPackId: `asset_pack_9f1b844a2cdf` +- proofContractHash: `sha256:7170c26e2b0d89451f79fe30b5e96f548a4f0c5e45f1947ee0fcefb109f93ca6` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:6a44eb26908aadf6943c6411c6e798675331f88d6e670690ac29f72f2df2d971` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:de13e187f609cf5b5a4f7462d404f3e5b6a9ec6a1b5409af0a41d54be89c7637` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:a8f038138ceed6859020675d71736cdba5a587e6b48ddb29133db3011ef74d52` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:2c1624cf684ae0a83834d9c7a28789d966ff776e1c61c5fbb611b5d73392547c` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:53e4472e0cf10ebdeddb6ae3b5e212f910a837ed1115dcd4175fc6f46f737650` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:5bde14deb75ac18013f2f69e21112f774c1d4322a93489e95c3919c7a967f7d5` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:7170c26e2b0d89451f79fe30b5e96f548a4f0c5e45f1947ee0fcefb109f93ca6` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:e6eb896b77c9fb159e64a9e29533a7c305055e01a579aeae6efbbb42bef72b77` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:d4d3e9495263cb92a69fddd0f7edb72c63c7c303c4cb5535f352ec51604959e8` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:2c1624cf684ae0a83834d9c7a28789d966ff776e1c61c5fbb611b5d73392547c` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:81f8c679ced14b692141b24aee4dc3c190e409eb7f952f51d6fe6ce47f8e6e61` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:af3e0c2cb3148443ca9f967906fa079cade336b39bbd36b05e6f031353dc0715` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:edd0136dc30e19e51631f64ff76b847822eebe97c68811bc8dc8dd1a4c368126` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:5bde14deb75ac18013f2f69e21112f774c1d4322a93489e95c3919c7a967f7d5` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:af3e0c2cb3148443ca9f967906fa079cade336b39bbd36b05e6f031353dc0715` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:285912525499e94c8651783b615cec94c09ed1bc4a721d2cd9b2bb7d45ca6bc0` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:965ba1aff4604765638f5f2fba6721007f57f6d4fa553938df7397fa460ad8d1` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:980c3e9afa612cfbdae5fee2668cea479236ea1ed699ed688ed553f8d960a054` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:a1e7ba65e662bebe0b9babb6067655b7cdcbaa5876d82140a3e84ecd8a892726` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:a7f910211080b140df9104153bc1ee2ca4e79cc014b42d89ee687e24278319c6` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:6a44eb26908aadf6943c6411c6e798675331f88d6e670690ac29f72f2df2d971` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:a7ca588dddbfafce36107d95c7d237b46c644c0122614e4967656c308fb38365` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:a726a4c350631cdff6d4f512a3b6cd30f7cf26b33077ba1049b66c54cf229fae` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:cbacb2561b13b5e8480a7fbc23488dfd87df92f9c07098d4bba449941109b45a` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:f27a92cfffb61f084e63838cda18b35ebd4b118170f88b06e427f9c8844464bf` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:598b7bb92d2791407ac01d15fe35c2b46f729c30534b819dff177672e9c44166` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:9c29647f452b16962ba7c3046d365f04e63e667df669fdcb4d0f16322c3de76e` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:adfd68a5c9458827e53484abc4f4b7c24320972545e0f5becd4c3443d1b828fd` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:ebcb977eb8b8ad5a9fcb3d6640307ad033c642f08fab42326f1a2e7844752525` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:c3732845741f36061ac1103c9b2485c814592989e3402bc91a38f7a8541b38af` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:469e541169edd2d2bde8ff4ff540b41b3e2ad528438a1f425a644a9aabd2018c` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:e178cb17a881d2d0de927141ac19877252fc1f4c09d4788e2209b7b2b738914d` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:af3e0c2cb3148443ca9f967906fa079cade336b39bbd36b05e6f031353dc0715` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:e1818adb231f247cfcf9d54189d132f7c6d27020d5af67ab2c8d5ed3a3117aeb` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:a8f038138ceed6859020675d71736cdba5a587e6b48ddb29133db3011ef74d52` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:b0acbf48dbd4c5a4202a8683fc011822c96f6d7c566fd287412d544f7de1b4be` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:8f1970d50b815044e763d8f192ab7269689ea0b3916334f534df680e4b3eed57` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:620b40d757a005fac44182303f2c5e9d9c71c1e77ab9b939d420fb83ef000892` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:aef45c4332d64546c4ae0c94af83be2384f25ba49770b025c5bf85e40b82d71f` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:7cafe2b41af74f6a20eb15346a5100fcdb9026530df8386fc049bb792c3e9030` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:30518f8d5444b646771c961b268999103b5bd54a9a1438ff50d1813931edad56` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:53e4472e0cf10ebdeddb6ae3b5e212f910a837ed1115dcd4175fc6f46f737650` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:81cb9d04a88483e9a534ebb47a3c9dba1ca3ccdbfe7dd6b363516979753c0a6c` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:1e425d3c3c057eea53cb4f984e775611cfc3bfc585355ae5c2c974e69e270804` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:de13e187f609cf5b5a4f7462d404f3e5b6a9ec6a1b5409af0a41d54be89c7637` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:cef9d5e516f74689f3dc7315086660e2dd6d1385337367ac0038bb3681c53fe9` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:3f1c7e91fc6bbc7ed84ca4a14b784481c20fd8cf1551a2ead24791e5283d22d4` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:919db1e7f91824815ab4570c9c45a19211b0f9c93ce4e64486264c22b4bf759f` | `verification-decisions` | `verification-evidence` | `false` | + +### infra-deployment-mismatch/context + +- branchName: `bitcode/remediation-read_infra-deployment-mismatch_be8a999141-infra-deployment-mismatch` +- readId: `read_infra-deployment-mismatch_be8a999141` +- assetPackId: `asset_pack_9f1b844a2cdf` +- proofContractHash: `sha256:7170c26e2b0d89451f79fe30b5e96f548a4f0c5e45f1947ee0fcefb109f93ca6` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:6a44eb26908aadf6943c6411c6e798675331f88d6e670690ac29f72f2df2d971` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:de13e187f609cf5b5a4f7462d404f3e5b6a9ec6a1b5409af0a41d54be89c7637` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:4ed2198c3827ebb995f8a02e140884f55fc4af51746f586804533a0bcc7f6904` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:2c1624cf684ae0a83834d9c7a28789d966ff776e1c61c5fbb611b5d73392547c` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:df2768d346405d0277894299351973b730a660e7f710af0b6f30f210d699c1af` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:7f7de72b8b776f3b6b5250fb88ebb9efff0c3c67ba93043fc3efc63d507ea0a6` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:7170c26e2b0d89451f79fe30b5e96f548a4f0c5e45f1947ee0fcefb109f93ca6` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:7d34b19c9298cfe043e5ab0096e5766e839444a3027c806efd64f115e98a38b9` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:8c81abd46de1f27dccd1607ef96d0fdd79f0f64d6436918478e6872d010660f1` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:2c1624cf684ae0a83834d9c7a28789d966ff776e1c61c5fbb611b5d73392547c` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:81f8c679ced14b692141b24aee4dc3c190e409eb7f952f51d6fe6ce47f8e6e61` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:0ee4bbf7e89b96f7249da804ad174d47b8ed2133ca5ee6d533b080eafdeca75d` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:edd0136dc30e19e51631f64ff76b847822eebe97c68811bc8dc8dd1a4c368126` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:7f7de72b8b776f3b6b5250fb88ebb9efff0c3c67ba93043fc3efc63d507ea0a6` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:0ee4bbf7e89b96f7249da804ad174d47b8ed2133ca5ee6d533b080eafdeca75d` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:285912525499e94c8651783b615cec94c09ed1bc4a721d2cd9b2bb7d45ca6bc0` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:965ba1aff4604765638f5f2fba6721007f57f6d4fa553938df7397fa460ad8d1` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:980c3e9afa612cfbdae5fee2668cea479236ea1ed699ed688ed553f8d960a054` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:a1e7ba65e662bebe0b9babb6067655b7cdcbaa5876d82140a3e84ecd8a892726` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:a7f910211080b140df9104153bc1ee2ca4e79cc014b42d89ee687e24278319c6` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:6a44eb26908aadf6943c6411c6e798675331f88d6e670690ac29f72f2df2d971` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:3dc46c757b0617248af558fcd07a9e7e1a76281804749174d8e8100cf3fe24c5` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:7779bde5b2647f3de068b07f9d17fcfeceeea06564c801e6da94240cbe6ff0d9` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:53ce7e742f5a762e92a11728f0fbcd2785f87f4c4fd1564256a6948601932e03` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:3f3fe6bf4ec60092b5dd255619c6f5938268123cead2ce104e6a2ed9c5ede4b9` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:598b7bb92d2791407ac01d15fe35c2b46f729c30534b819dff177672e9c44166` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:9c29647f452b16962ba7c3046d365f04e63e667df669fdcb4d0f16322c3de76e` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:adfd68a5c9458827e53484abc4f4b7c24320972545e0f5becd4c3443d1b828fd` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:ebcb977eb8b8ad5a9fcb3d6640307ad033c642f08fab42326f1a2e7844752525` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:c3732845741f36061ac1103c9b2485c814592989e3402bc91a38f7a8541b38af` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:469e541169edd2d2bde8ff4ff540b41b3e2ad528438a1f425a644a9aabd2018c` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:e178cb17a881d2d0de927141ac19877252fc1f4c09d4788e2209b7b2b738914d` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:0ee4bbf7e89b96f7249da804ad174d47b8ed2133ca5ee6d533b080eafdeca75d` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:93d3913609ce424a9e1fa849345755f1447e5d1da6b3df68afc118c72332155c` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:4ed2198c3827ebb995f8a02e140884f55fc4af51746f586804533a0bcc7f6904` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:b0acbf48dbd4c5a4202a8683fc011822c96f6d7c566fd287412d544f7de1b4be` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:8f1970d50b815044e763d8f192ab7269689ea0b3916334f534df680e4b3eed57` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:620b40d757a005fac44182303f2c5e9d9c71c1e77ab9b939d420fb83ef000892` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:7ad6bd3fd130367f088328db7f66846195082ec030bda9f4a9b5efa3ab04c7d2` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:0a31a8bd83ab1d4b208f31790940e2fed1c7ecedda8e3b904fb25b0824fdbbb5` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:e5fdec8d3f9cc0ae660fede823a31ffdddab96b3b2fdb808738bc2385ba59d0a` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:df2768d346405d0277894299351973b730a660e7f710af0b6f30f210d699c1af` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:81cb9d04a88483e9a534ebb47a3c9dba1ca3ccdbfe7dd6b363516979753c0a6c` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:1e425d3c3c057eea53cb4f984e775611cfc3bfc585355ae5c2c974e69e270804` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:de13e187f609cf5b5a4f7462d404f3e5b6a9ec6a1b5409af0a41d54be89c7637` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:cef9d5e516f74689f3dc7315086660e2dd6d1385337367ac0038bb3681c53fe9` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:3f1c7e91fc6bbc7ed84ca4a14b784481c20fd8cf1551a2ead24791e5283d22d4` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:d4c2a17b99f712ba1133aec25049179e0314e2a030d4d26004b37325273df09d` | `verification-decisions` | `verification-evidence` | `false` | + +### privacy-boundary-proof-export/patch + +- branchName: `bitcode/remediation-read_privacy-boundary-proof-export_8163942d95-privacy-boundary-proof-export` +- readId: `read_privacy-boundary-proof-export_8163942d95` +- assetPackId: `asset_pack_c5fef3ab17c5` +- proofContractHash: `sha256:94214cf13298a6992d32afa5572d4359fc9c21a74ab86c4625e2b03d3a1a6d6c` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:af111ab74d6aa230fc1ae3a12a02592d15e6476d692beb927a2480c2033c8b60` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:dde5e174eddf0911801b1eb8845991d70f97df445d99c45e1002e24c80ab721c` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:9c75d8e790d30a067d1eebbd604bacf8be0ddab8a1b121e9b71f7e4fd1871ec3` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:d0a68ad68adbab5b801152274edbd5e7914f9172858603b62f2b16ba47c23c8b` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:79f9ea2fd8b58ef8177936d2819e6c1d135693c93aec5c3365d5893ef535a83e` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:f19ba812efd8d9010544988cbf24396d069b1996f6e96d3414278422ca581d3f` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:94214cf13298a6992d32afa5572d4359fc9c21a74ab86c4625e2b03d3a1a6d6c` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:880417de4a0cbaa4d2f42bc0b11ab35ae6f10df26bf243dd13eaac365485aacf` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:e37a1973ff0ecb2bfff26028905d753286e6ce17c636cc944775ed6628a1bec2` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:d0a68ad68adbab5b801152274edbd5e7914f9172858603b62f2b16ba47c23c8b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:f027cac3696faf36eb4c817c1643764037ac6bde0d165edcbf92a93d088d6cd1` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:f7c3eaa6764f14eeee4e24e7692dfa16936c6051f3fb3f30a3464aad5ddaeca8` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:7b1572586cb2bbae134213aff92a138d266e4ca5aa4b8ccfba7fd8d31fe7eff7` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:f19ba812efd8d9010544988cbf24396d069b1996f6e96d3414278422ca581d3f` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:f7c3eaa6764f14eeee4e24e7692dfa16936c6051f3fb3f30a3464aad5ddaeca8` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:03f1187ca4a208891625d9df395dddfa4d3b777f6faf54027f18c3d254e9dd4c` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:204f4d39d06860e0b3d61d3ff23546c5d9e82ef0aa2ef829c3f8a612255bdf32` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:8a90b3cdf83cdf0ddd801342dfa9de3fc5036568d4e052f5334c6ca47b3a8175` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:7951f9416b5cc1a695aff3680f06573ce1ac52d185354df683cfdbda5c5a2e51` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:33ff45151baa265773582247cbe9d91529ee60888a2cdfb0de8a859b7e944470` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:af111ab74d6aa230fc1ae3a12a02592d15e6476d692beb927a2480c2033c8b60` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:a141b4bdf8c4659b8673034b87b34dd0a9db5b92993e2daa53a43a9ef375b402` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:b8c45aab1fc6181e6c20e2ce44ce3b56f455214c84d06e723873f1eaa7d37db8` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:77d34bf29812acc7deb933efef36044d638745e819ca34c195b2a83ca8472b8a` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:5c1db48989b73dd62e014886879996570d643fdb279adb9b9e5e3b3c1e207c40` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:176d7d498737532e79fdfa67a5a8cdfb7a8957f9cf5763970fbbd329c90bc9ab` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:17c95fe334d9af77142728c4bf8b16bd6ac399b57dcd9372325dd7702ea18a23` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:063a855154f438e9d4b9db49bfa62c06014135b8433e4add2db9d253483e9f3d` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:df0ea68f7f27865bff6d69e5443d7f6599cb4e6bffab89a158e8f70be15087db` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:8eecc81dd8c33aef035eebf6fc194b04434593c743fdb2741a0f04fa116c8b11` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:30faae37b6da6cd4ab8be205941828d1ec4b5f247557ad7048be4c9924227ae4` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:dc2616c0590a0848aab9e9c8ebc8e2a9618e16c7a1f807a93d9f5f6e08a3b219` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:f7c3eaa6764f14eeee4e24e7692dfa16936c6051f3fb3f30a3464aad5ddaeca8` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:34a0bf4054fa32b67637643a3f479b80e393bc8aece3ab00bd5bdc3cc5af026c` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:9c75d8e790d30a067d1eebbd604bacf8be0ddab8a1b121e9b71f7e4fd1871ec3` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:d2bb74466474b95020ef27ac13ab2978c4b4fe1d19cb41146414f38dfca8200b` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:51a841a7255f59929dbd350752437fd41a64b9fd512ffb10dbdf090b0652ab6a` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:4c40449e20a3913dbc777c6b4463c3a0c52e7575ecc64960c8379d5d0de772e7` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:a5c163e62bec0a1d0942a3cc1e1ee9fa69810e3a443ae937b2148f65b0b957c9` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:d7ccac088cc1d6f442e6c2643b56b1f3a4116c4ecee5bb0d5b5cd3d813d08f5b` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:2de06d0d907c63f24a43fa2c28e1e12c5ab2a83003ced5b4db19f49743aa0787` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:79f9ea2fd8b58ef8177936d2819e6c1d135693c93aec5c3365d5893ef535a83e` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:521a6dc55ecc831891cc7751754790b1c9e63a8019266e9955e60f7a4adbece3` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:d00118d0baf321746f503b0ae04b036fe9810c50713f9b1783fd9042bbdf64fc` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:dde5e174eddf0911801b1eb8845991d70f97df445d99c45e1002e24c80ab721c` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:3ddb6480ee510888e48cf1b9d97a62056c2d45daae10325dc890f80a58f14794` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:6b8086334a4e8e65a529ab9006e331188ef5636c5798d46471bb93be3939756c` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:4b033cad9a2b91d3a2abdecd3429b8281e987d8b151ab08d26a1dfb3202547a0` | `verification-decisions` | `verification-evidence` | `false` | + +### privacy-boundary-proof-export/context + +- branchName: `bitcode/remediation-read_privacy-boundary-proof-export_8163942d95-privacy-boundary-proof-export` +- readId: `read_privacy-boundary-proof-export_8163942d95` +- assetPackId: `asset_pack_c5fef3ab17c5` +- proofContractHash: `sha256:94214cf13298a6992d32afa5572d4359fc9c21a74ab86c4625e2b03d3a1a6d6c` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:af111ab74d6aa230fc1ae3a12a02592d15e6476d692beb927a2480c2033c8b60` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:dde5e174eddf0911801b1eb8845991d70f97df445d99c45e1002e24c80ab721c` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:62345c3c0528519a4ba2ee002df3c4e5a5c37895bfb80dcf9e20b064f6a5d6aa` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:d0a68ad68adbab5b801152274edbd5e7914f9172858603b62f2b16ba47c23c8b` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:7a5f4ed6447e7eb2a4bd65dba164f8a090ab31d9fe741a8bb78ad68fea244d5a` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:25b1de6de0319574567b9345d304adc2bbf7626fd606391213062744b1690f8f` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:94214cf13298a6992d32afa5572d4359fc9c21a74ab86c4625e2b03d3a1a6d6c` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:04ba8c7c86a5d011ed124447ba82e47b05c3eedc12dfcc68371b1da4158857b9` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:8b16f037f1078be1cef6650dac42752e414afc52f680fa3e5fd0ebd603cbc054` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:d0a68ad68adbab5b801152274edbd5e7914f9172858603b62f2b16ba47c23c8b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:f027cac3696faf36eb4c817c1643764037ac6bde0d165edcbf92a93d088d6cd1` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:49f8db175b8e0b080dbf8b99c35eab571742c0cd9047e213bfc29195d006ed34` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:7b1572586cb2bbae134213aff92a138d266e4ca5aa4b8ccfba7fd8d31fe7eff7` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:25b1de6de0319574567b9345d304adc2bbf7626fd606391213062744b1690f8f` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:49f8db175b8e0b080dbf8b99c35eab571742c0cd9047e213bfc29195d006ed34` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:03f1187ca4a208891625d9df395dddfa4d3b777f6faf54027f18c3d254e9dd4c` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:204f4d39d06860e0b3d61d3ff23546c5d9e82ef0aa2ef829c3f8a612255bdf32` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:8a90b3cdf83cdf0ddd801342dfa9de3fc5036568d4e052f5334c6ca47b3a8175` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:7951f9416b5cc1a695aff3680f06573ce1ac52d185354df683cfdbda5c5a2e51` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:33ff45151baa265773582247cbe9d91529ee60888a2cdfb0de8a859b7e944470` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:af111ab74d6aa230fc1ae3a12a02592d15e6476d692beb927a2480c2033c8b60` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:87776778ee2357eb269dfb6ee9978c21d4dd2d70d9c7f874b37de502e8100970` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:91b709761e65f51447f25399a5a419b27d351c985fbd05569d3d6ce1272e4015` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:b5d167c7f2d2b4b7a024fced17a93f00ef6de0764b7ac76c09fe5cf365b8dab5` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:c17f205b4e3b9a75e4bb141648d46f69b5a7ef60c06916aa26509d69a73abd87` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:176d7d498737532e79fdfa67a5a8cdfb7a8957f9cf5763970fbbd329c90bc9ab` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:17c95fe334d9af77142728c4bf8b16bd6ac399b57dcd9372325dd7702ea18a23` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:063a855154f438e9d4b9db49bfa62c06014135b8433e4add2db9d253483e9f3d` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:df0ea68f7f27865bff6d69e5443d7f6599cb4e6bffab89a158e8f70be15087db` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:8eecc81dd8c33aef035eebf6fc194b04434593c743fdb2741a0f04fa116c8b11` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:30faae37b6da6cd4ab8be205941828d1ec4b5f247557ad7048be4c9924227ae4` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:dc2616c0590a0848aab9e9c8ebc8e2a9618e16c7a1f807a93d9f5f6e08a3b219` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:49f8db175b8e0b080dbf8b99c35eab571742c0cd9047e213bfc29195d006ed34` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:fc0ecbd01376203a64dfdca51241ccab04bceee2b9577295637193cc9525537a` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:62345c3c0528519a4ba2ee002df3c4e5a5c37895bfb80dcf9e20b064f6a5d6aa` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:d2bb74466474b95020ef27ac13ab2978c4b4fe1d19cb41146414f38dfca8200b` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:51a841a7255f59929dbd350752437fd41a64b9fd512ffb10dbdf090b0652ab6a` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:4c40449e20a3913dbc777c6b4463c3a0c52e7575ecc64960c8379d5d0de772e7` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:6a812e4e668d8ef1fc28ad2f8d8ee77da8bafdd71c54845f8d702891f283bc40` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:926c1aab017318fa8511f4790233f5658cf37dfa6455266d42aac2bb2867205e` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:712dae63457f735eb11c24d036d7a93c3e8c93ec20a7e0d686ec4391979889d3` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:7a5f4ed6447e7eb2a4bd65dba164f8a090ab31d9fe741a8bb78ad68fea244d5a` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:521a6dc55ecc831891cc7751754790b1c9e63a8019266e9955e60f7a4adbece3` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:d00118d0baf321746f503b0ae04b036fe9810c50713f9b1783fd9042bbdf64fc` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:dde5e174eddf0911801b1eb8845991d70f97df445d99c45e1002e24c80ab721c` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:3ddb6480ee510888e48cf1b9d97a62056c2d45daae10325dc890f80a58f14794` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:6b8086334a4e8e65a529ab9006e331188ef5636c5798d46471bb93be3939756c` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:635ad895a89de6d0143ea73bb6d6d02e2e1b0297be84e48cbe64ca237d4b065a` | `verification-decisions` | `verification-evidence` | `false` | + +### polyglot-gateway-benchmark-remediation/patch + +- branchName: `bitcode/remediation-read_polyglot-gateway-benchmark-remediation_ca6f233369-polyglot-gateway-benchmark-remediation` +- readId: `read_polyglot-gateway-benchmark-remediation_ca6f233369` +- assetPackId: `asset_pack_654da1e46737` +- proofContractHash: `sha256:22639f352c74be4b4f1c33522cbea29687fbe5455521c9aed0d64103a90f5426` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:8ab3e39c78bd87bf4c686eb3b3a3cfa9ace4af2b6a0665a2726e455b86c3b5b2` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:0a196b14d27f8f17eb9952cf2c568764983f22d2efb6411f42d9e4cb227fda48` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:c08c6baf9c335ea6d9f771efde006ff8577953196a2bab6b9acace0521350189` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:8c6a898ee8e19a41a8f8399f98c61b80362ac20513ecd53dae26950fcae6e772` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:4d5c56e3b4786a2e26d5631d1137183e88802278f9c443ecb198819c8e8dbc08` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:46424cedd179cc2e3248e7a9360316513092e0223703b917fdbaae180a9badb0` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:22639f352c74be4b4f1c33522cbea29687fbe5455521c9aed0d64103a90f5426` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:8d90f117e89ca5fd018f3ceb01de869a40618cc0676cbe6b7f7b8b60f514bb66` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:6870d6756abb2632fa4d124c1d23d46c54fd59f1f06b9a0c9bf92d9d2ad7d794` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:8c6a898ee8e19a41a8f8399f98c61b80362ac20513ecd53dae26950fcae6e772` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:b26292234ca875961d2ceaaf93f6933feae5c2431bd4804979812ea155cd25f9` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:15f24a288cbf0de131137d9d96db7322a1e08fbd1a97bb987d5b63e8589693eb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:ff42d1ddc734448891c792f25f30403b9034b0ffa724f1034087591fd47a7ce5` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:46424cedd179cc2e3248e7a9360316513092e0223703b917fdbaae180a9badb0` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:15f24a288cbf0de131137d9d96db7322a1e08fbd1a97bb987d5b63e8589693eb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:48bfae0465523a00316782e22cc4044f9a4a2446d47fb77b8b56da6718f44ddb` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:9e17674ef60968c65af2f5e1c75a4d708ef2c603bfb0773362a384feabf93efb` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:f9bb5020368bc879a8463c16f39d410417d782cbad6414fe385e98e19e0a1377` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:9a947a33796d73ef1411053e0bce2b3bf269565e2d203ab6367dc6d1dacfe307` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:a334f0e7a5667f10b9c70831920b1ea755383f680661768745ee7403026d3520` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:8ab3e39c78bd87bf4c686eb3b3a3cfa9ace4af2b6a0665a2726e455b86c3b5b2` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:58c42eb9f8ba892bb071b8ad41905cf51ba215330e3659ca7039ac6583929d2b` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:1ee5dee8a724aade1fb69c47806cf2ebc8d2aa159340a5002e98068c9e493191` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:7840b9fec52f2ca8b3320cf239fe7388ee444621133bb04b0c855bfb68214bda` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:9f2b9eafe157c6224500eaa4935f6b063f46aee795639246df58765d3875bb42` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:dbb3ac97b571dbc90d9cd8482bf9535a14608b8bfcf2cd196b9facd52ba5453d` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:86fe9486c43f5878a655acd61ec83330ff8197114de70be6b5dfe3e7dff7a918` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:bba36f476eee16207d7ebdd896e4ba21836dcbda21ca4b2b0d68e8d38b7de713` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:620e667076d4e955a26712e5aa2af0e52005f6f52829183d4e45467166a92d39` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:c921d4fc1c2722ebaaa7dee8dd7b44c6db3a8dfc739ab7cf3ffafbe1e5a97d0e` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:7699508f4e5564064848f7abcf4b2efbdb1a52e400a742d4017e6b28aa57047c` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:a6d6f5e1bd226a087aae8bd89116b417f2b2b49f93abbf1f70477b20b3114e26` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:15f24a288cbf0de131137d9d96db7322a1e08fbd1a97bb987d5b63e8589693eb` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:79f3761e05a1511827f8929493f3eb32dce2e1497c6a1a19b31475173631bc7c` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:c08c6baf9c335ea6d9f771efde006ff8577953196a2bab6b9acace0521350189` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:c1e577b132475f4b327b593f0ec0052f8bb6668c7efad0693bfdc79debd96f2c` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:7cd7e52ebfbe66f7b7fedc9100e7803f6823a28488837f408ce98b076987d75b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:9e29b97d18a63445c8b1debdedbe638a3919b30affd2660ccc406f686ce7ae07` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:16d764b15028c1c70d2b1b023f0007ae9082c9673a8f2d606a58b2d5c9cf313e` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:bb7194024cad19cc03abf7ef89fe672a990be8dd6a25b8e34ce3fc8830958a7e` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:623ae942a593bb129e3c864ca3d1a4975290493197f6c86cc86d69c80a45fb0e` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:4d5c56e3b4786a2e26d5631d1137183e88802278f9c443ecb198819c8e8dbc08` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:70876006dc0c82da94e83a2b5faaff421960021e01454778c6c8dbbfb7d0c510` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:b67436b913840cd4c7031841ef5dbf83ac9f6cf3a4726c3b065eecdf3dd8d3aa` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:0a196b14d27f8f17eb9952cf2c568764983f22d2efb6411f42d9e4cb227fda48` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:6a5638b93a2bea9e4945c0be2501e582dcf4cd1b992b178c5e0fb3a8a2d8dd35` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:7d4c9a10309d2e2394f12d4f5663748630b9fd84e068502da2c4e7eb34205154` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:b16626bce72e7545e05b1259d7d4777e0f62dd9c1edf7cf59b5f6e682e7eb214` | `verification-decisions` | `verification-evidence` | `false` | + +### polyglot-gateway-benchmark-remediation/context + +- branchName: `bitcode/remediation-read_polyglot-gateway-benchmark-remediation_ca6f233369-polyglot-gateway-benchmark-remediation` +- readId: `read_polyglot-gateway-benchmark-remediation_ca6f233369` +- assetPackId: `asset_pack_654da1e46737` +- proofContractHash: `sha256:22639f352c74be4b4f1c33522cbea29687fbe5455521c9aed0d64103a90f5426` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:8ab3e39c78bd87bf4c686eb3b3a3cfa9ace4af2b6a0665a2726e455b86c3b5b2` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:0a196b14d27f8f17eb9952cf2c568764983f22d2efb6411f42d9e4cb227fda48` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:64713d43c3cf4ffe06599dd9a3571e5ba55636fd3a2fca591dc507c476edf424` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:8c6a898ee8e19a41a8f8399f98c61b80362ac20513ecd53dae26950fcae6e772` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:5947d74600886a598b53dd562efda22bfa373be7ce1a46fe0e0d0613660014bf` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:e47ecbea6d5fe25f3bcb908905403927e553c9c4c01063b58a2a4cf7b5e154ac` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:22639f352c74be4b4f1c33522cbea29687fbe5455521c9aed0d64103a90f5426` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:a3cbf9297ffd5abaf253fc9ab4f7ebcb5f7d21f0ae8077d66292de6c59773528` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:e3118a3a34b3348834b504893014d99748974a6498b9bb6a3ef439f294aa7e9b` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:8c6a898ee8e19a41a8f8399f98c61b80362ac20513ecd53dae26950fcae6e772` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:b26292234ca875961d2ceaaf93f6933feae5c2431bd4804979812ea155cd25f9` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:f96900f0e7fee9f34ff255f1bd686f4d0332e055bb170604c4da7eaf9ff45130` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:ff42d1ddc734448891c792f25f30403b9034b0ffa724f1034087591fd47a7ce5` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:e47ecbea6d5fe25f3bcb908905403927e553c9c4c01063b58a2a4cf7b5e154ac` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:f96900f0e7fee9f34ff255f1bd686f4d0332e055bb170604c4da7eaf9ff45130` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:48bfae0465523a00316782e22cc4044f9a4a2446d47fb77b8b56da6718f44ddb` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:9e17674ef60968c65af2f5e1c75a4d708ef2c603bfb0773362a384feabf93efb` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:f9bb5020368bc879a8463c16f39d410417d782cbad6414fe385e98e19e0a1377` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:9a947a33796d73ef1411053e0bce2b3bf269565e2d203ab6367dc6d1dacfe307` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:a334f0e7a5667f10b9c70831920b1ea755383f680661768745ee7403026d3520` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:8ab3e39c78bd87bf4c686eb3b3a3cfa9ace4af2b6a0665a2726e455b86c3b5b2` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:85b9e0e294968560055014dcd2a989cad5b13bc80500d77d874aa7be4c5ac558` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:9f9acd2e42dd074bee49110bc22c450d0324e5ccb0183e3a2fcbf7cd18f6a6c7` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:7099e3048552085f0e49254ef7289bc9779aed170bdd285f0a741dada43b9da7` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:e94250d47636bfd2849803b0e765656b23dfe35be771fdee5aa556f131f76c35` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:dbb3ac97b571dbc90d9cd8482bf9535a14608b8bfcf2cd196b9facd52ba5453d` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:86fe9486c43f5878a655acd61ec83330ff8197114de70be6b5dfe3e7dff7a918` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:bba36f476eee16207d7ebdd896e4ba21836dcbda21ca4b2b0d68e8d38b7de713` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:12f98ec39b4b52000dd7c1a8cc86eb1deb8ba614dabdb5591dd02b54b8b4cb48` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:620e667076d4e955a26712e5aa2af0e52005f6f52829183d4e45467166a92d39` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:c921d4fc1c2722ebaaa7dee8dd7b44c6db3a8dfc739ab7cf3ffafbe1e5a97d0e` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:7699508f4e5564064848f7abcf4b2efbdb1a52e400a742d4017e6b28aa57047c` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:a6d6f5e1bd226a087aae8bd89116b417f2b2b49f93abbf1f70477b20b3114e26` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:f96900f0e7fee9f34ff255f1bd686f4d0332e055bb170604c4da7eaf9ff45130` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:18b721ef22d8b28c8016d53dd7a5c1eeeaccb31defb64bb52d116c98c7900d7f` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:64713d43c3cf4ffe06599dd9a3571e5ba55636fd3a2fca591dc507c476edf424` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:c1e577b132475f4b327b593f0ec0052f8bb6668c7efad0693bfdc79debd96f2c` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:7cd7e52ebfbe66f7b7fedc9100e7803f6823a28488837f408ce98b076987d75b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:9e29b97d18a63445c8b1debdedbe638a3919b30affd2660ccc406f686ce7ae07` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:8be23f5f1875a101ba6de6aa6ef5beaf82b2d5b88eb2ef06f2a6dff714a3e6bf` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:0dfd94e5a9e486386b9fb81e4973951b070993b66a3cdd7a2b8631899a569454` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:638d67a9b5409f737dc0070b57ea7070006e49afbc17020f515f5093ae37b27e` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:5947d74600886a598b53dd562efda22bfa373be7ce1a46fe0e0d0613660014bf` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:70876006dc0c82da94e83a2b5faaff421960021e01454778c6c8dbbfb7d0c510` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:b67436b913840cd4c7031841ef5dbf83ac9f6cf3a4726c3b065eecdf3dd8d3aa` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:0a196b14d27f8f17eb9952cf2c568764983f22d2efb6411f42d9e4cb227fda48` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:6a5638b93a2bea9e4945c0be2501e582dcf4cd1b992b178c5e0fb3a8a2d8dd35` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:7d4c9a10309d2e2394f12d4f5663748630b9fd84e068502da2c4e7eb34205154` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:6b6e79a5d82a31550c8212fd6bf6588b93a3c7827afe5b0ed95bb1b9c22fcac0` | `verification-decisions` | `verification-evidence` | `false` | + +### auth-many-asset-normalization/patch + +- branchName: `bitcode/remediation-read_auth-many-asset-normalization_f6dbfe951c-auth-many-asset-normalization` +- readId: `read_auth-many-asset-normalization_f6dbfe951c` +- assetPackId: `asset_pack_186c76eb7d2d` +- proofContractHash: `sha256:07e9dde9b1decdd69ab9f3287b1158f89b3d3badb085d8f55489f6339b296f43` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:7021f326f42f8a44233fe094d79ada504e346a9f58b95f63ae28b60780d5d7a5` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:43d0c993cc81696809f32616c596372a95d41980c77a4477c880fe68f8463739` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:93443b0becdeebae98f5e288352518435faff73ab467b341fad0bd038eceefbc` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:9958392c28c4be80006c2bb33b353601ac820b5b635544a0ecdfb672629535e1` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:15beb995e962657b3fb02214f4afe13fbe89a111bfbfab3e1cb9715712838c6a` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:93a6ae4d4886dea6ad89f294965b4980be1e971839a80510bf75c669a86f207e` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:07e9dde9b1decdd69ab9f3287b1158f89b3d3badb085d8f55489f6339b296f43` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:c487b54c19633f825bba257c5fbc803c2411cb9826ba760fc721436fc8c1ac99` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:213eb10dd78b5eda96564d25f7f2e66519a5f2deaf3956328d370c3f53607a7b` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:9958392c28c4be80006c2bb33b353601ac820b5b635544a0ecdfb672629535e1` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:72f7ad00bcc7bf8b01ec89310b04b32eabd56c2389e6348bfa76d191c0588aa3` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:e74ce71b622f8a4351bf789598fb2422993e0f52d8cb57b7ec3857c841f461ec` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:e65ea12ed612db3a7eb8a17c9d4874d295fbb1a751097756f1f7d42f56cdf8c0` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:93a6ae4d4886dea6ad89f294965b4980be1e971839a80510bf75c669a86f207e` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:e74ce71b622f8a4351bf789598fb2422993e0f52d8cb57b7ec3857c841f461ec` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:77de93b5ba0c3c68e65d18a64a9b1531c722577f1f50dc99dc1c1197a1b835b5` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:d32d2d442f872b5e5b4e1822631c6a4e55119476bd366aaa873a85b747c79aac` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:266980ddc09575e6b26a343be37671d921651aee24825537291cd68715853f53` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:f8d7a53bb5f56c87074b7b5e2aefd4e582278b9d737e1ddb647f51dc1c987f00` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:83b1f7096042f13d63d72e42e6188565208bd8e2bcacd74105a5547d9e73c7fd` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:7021f326f42f8a44233fe094d79ada504e346a9f58b95f63ae28b60780d5d7a5` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:c2c97292448cc0e0f3979d510f284cdef3f9d404cbf6b39eb639a6c6c214486d` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:f3ebf01987d5b184b19c7d02d3c196a848fa9b4eef79a99f7063d7b4794f3c27` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:d94851d00d025a78f73546c90077ee7dbbb35ada30b531745a094eea0fb9f5f0` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:d592858705dec7131279c0a523123d86107e9875111420fe703ee9172be6dda2` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:bf3148690787d7fe41f97061bdff0977f410b941b443ccaa4cc27976d18ef101` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:f7cdf9cd6177b5aa71578adffc7a985144bb3cc4343e15c66bd3a508a94643a4` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:cb6b93a204a1b42acc7c426b702bb4d317f4cae5bc4f9c297f66727d3dd795fc` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:bb8674abf94ae1d8ee5d5ed695258555f039326c2a75d3632dfd65271a06b1e1` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:ff9bb2fb885bff4335f776405fb197df7e5a3e1e7addb97b506b3f2060d200c9` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:2b167bf2a71100c16c5218af06210aad08f889af7c2ceeec5aef3a9d0c6bb38e` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:88d8d904ea7059636eddcf4ccc60796e32e48986f64743380167b007b5ac880b` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:3027b1bd2e77c3bc6dc73616bd7a4f02934389726d6ca569f5503543ada9d96d` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:e74ce71b622f8a4351bf789598fb2422993e0f52d8cb57b7ec3857c841f461ec` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:e51ecbf057c3863e2f20cea5414ee9f6f0783e4e964f671eb01c94968e805015` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:93443b0becdeebae98f5e288352518435faff73ab467b341fad0bd038eceefbc` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:3bfc16906769f2d1c0ed837a29f95a1b94589171a4aa0fed584ce85434742659` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:8e6cb9e1a5f53b05188964fc477ed3dc9cb246a3bfbaa57690cd38ad833b4dcb` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:621377f9e58e2fcb814448078aedf04b60d85ef8f3efba504b3ba73d28adad2b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:85562bd4e401bc83d714a4da40234b3b03e6fc34157cb4f2ba4185646febcf6f` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:e0331346702d3904ffafc0e1f0d82d7ef6c7afec8dc415f92d553729d68a02e8` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:dece620c1dd99b204862c8372a376e01fb46c9da7c988732582c2bb1ed0b7e32` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:15beb995e962657b3fb02214f4afe13fbe89a111bfbfab3e1cb9715712838c6a` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:45beb6ee9be4ba5f94fb02b8f61427db470435df7219f2cd7eee33339fc831f3` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:7c1ba09bff9a89f39696c4ea125bf77a68fc1e387de9ca4121214a1051c8c296` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:43d0c993cc81696809f32616c596372a95d41980c77a4477c880fe68f8463739` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:02b5cdc5a05c89652a579902133e8333659c9496bbc08a993b828a6a6231d952` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:cb3a3cda6ffcd3ac8cda341aeb9fb12628dcd15182202c1d703b50e951d3447d` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:13570e06df4eb03c796ac68d5dbdff215afe6b783d0c48c6929649ab99aa372c` | `verification-decisions` | `verification-evidence` | `false` | + +### auth-many-asset-normalization/context + +- branchName: `bitcode/remediation-read_auth-many-asset-normalization_f6dbfe951c-auth-many-asset-normalization` +- readId: `read_auth-many-asset-normalization_f6dbfe951c` +- assetPackId: `asset_pack_186c76eb7d2d` +- proofContractHash: `sha256:07e9dde9b1decdd69ab9f3287b1158f89b3d3badb085d8f55489f6339b296f43` +- allFamiliesPassed: `true` +- proofContractPassed: `true` + +#### Family Proof Hashes + +| proofFamily | proofHash | proofArtifactPath | +| --- | --- | --- | +| `inference-synthesis` | `sha256:7021f326f42f8a44233fe094d79ada504e346a9f58b95f63ae28b60780d5d7a5` | `.bitcode/inference-synthesis-proof.json` | +| `prompt-completeness` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `.bitcode/prompt-completeness-proof.json` | +| `static-code-analysis` | `sha256:43d0c993cc81696809f32616c596372a95d41980c77a4477c880fe68f8463739` | `.bitcode/static-measurement-proof.json` | +| `verification-decisions` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `.bitcode/verification-decisions-proof.json` | +| `selection-and-materialization` | `sha256:44178db54efb33b972cd2e6cff2159b7d6c03cfc69901fa81a47ade8ef1b3e9b` | `.bitcode/selection-and-materialization-proof.json` | +| `authorization-and-sensitive-flow` | `sha256:9958392c28c4be80006c2bb33b353601ac820b5b635544a0ecdfb672629535e1` | `.bitcode/authorization-and-sensitive-flow-proof.json` | +| `settlement-source-to-shares` | `sha256:03b769f4dd08d73838c93f2c639f3e98e7b7f65efe6b7b09f15b264d653f5df2` | `.bitcode/settlement-source-to-shares-proof.json` | +| `disclosure-boundary` | `sha256:d4ecd4fa6a549fec13e5514cc6960b24afaaf385e312f2c6ae3c2280e5417584` | `.bitcode/disclosure-boundary-proof.json` | +| `proof-contract` | `sha256:07e9dde9b1decdd69ab9f3287b1158f89b3d3badb085d8f55489f6339b296f43` | `.bitcode/proof-contract.json` | + +#### Proof Artifact Disclosure Classification + +| path | sensitiveDataClass | disclosable | assetPackEvidenceConfidentiality | potentiallyDisclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/identity-authorization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/proof-witness-manifest.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `licensed-source-material` | `false` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `settlement-preview` | `false` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `bounded-public-proof-metadata` | `true` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/system-proof-bundle.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-decisions-proof.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `private-proof-artifact` | `false` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `verification-evidence` | `false` | `verification-evidence` | `false` | + +#### Witness Artifact Digest Inventory + +| path | digest | proofFamilies | sensitiveDataClass | disclosable | +| --- | --- | --- | --- | --- | +| `.bitcode/accounting-precision-report.json` | `sha256:9c0f5287e2cc4af88889d02d72d1d34a127745dfbfc02c47d59bd55a37478e11` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/asset-pack.lock.json` | `sha256:967d39cbb5233e24d1e4ced45f3ad715d396afc47ea21cc06f0eee81df1996d2` | `selection-and-materialization`, `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-and-sensitive-flow-proof.json` | `sha256:9958392c28c4be80006c2bb33b353601ac820b5b635544a0ecdfb672629535e1` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/authorization-decisions.json` | `sha256:72f7ad00bcc7bf8b01ec89310b04b32eabd56c2389e6348bfa76d191c0588aa3` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/bounded-public-proof.json` | `sha256:faa5bed0f9cd0e812aee5a69e3f21ac975f21e29e57eca1200f53636b2d20093` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/code-analysis-fact-registry.json` | `sha256:e65ea12ed612db3a7eb8a17c9d4874d295fbb1a751097756f1f7d42f56cdf8c0` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/disclosure-boundary-proof.json` | `sha256:d4ecd4fa6a549fec13e5514cc6960b24afaaf385e312f2c6ae3c2280e5417584` | `disclosure-boundary` | `private-proof-artifact` | `false` | +| `.bitcode/disclosure-proof.json` | `sha256:faa5bed0f9cd0e812aee5a69e3f21ac975f21e29e57eca1200f53636b2d20093` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/eval-manifest.json` | `sha256:77de93b5ba0c3c68e65d18a64a9b1531c722577f1f50dc99dc1c1197a1b835b5` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/external-boundary-manifest.json` | `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a` | `bitcoin-settlement-interface` | `private-proof-artifact` | `false` | +| `.bitcode/identity-authorization-proof.json` | `sha256:d32d2d442f872b5e5b4e1822631c6a4e55119476bd366aaa873a85b747c79aac` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/identity-bindings.json` | `sha256:266980ddc09575e6b26a343be37671d921651aee24825537291cd68715853f53` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/inference-moment-contracts.json` | `sha256:f8d7a53bb5f56c87074b7b5e2aefd4e582278b9d737e1ddb647f51dc1c987f00` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-proofs.json` | `sha256:83b1f7096042f13d63d72e42e6188565208bd8e2bcacd74105a5547d9e73c7fd` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/inference-synthesis-proof.json` | `sha256:7021f326f42f8a44233fe094d79ada504e346a9f58b95f63ae28b60780d5d7a5` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/journal-completeness-proof.json` | `sha256:4b7ef245c2ccfe1cfaeaab022153ec9c9b8f99b617f4bb2a9a1d551db2de5c55` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/journal-diff.json` | `sha256:25862851c298858a3f7cb68e4d49383ffe6d6c03afd4a0d18f9a048ceaf6be9c` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-exclusions.json` | `sha256:b0c51aa9b75ae8f2f042d7d75121acda8a74d3a34fffd3c21bae43059440047a` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/materialization-proof.json` | `sha256:aae1b1470954e15061ea1345cd1d5074e8d598f923ad0ee31bcb188a03e76ec2` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/materialization-visibility-proof.json` | `sha256:bf3148690787d7fe41f97061bdff0977f410b941b443ccaa4cc27976d18ef101` | `selection-and-materialization` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/measurement-receipts.json` | `sha256:f7cdf9cd6177b5aa71578adffc7a985144bb3cc4343e15c66bd3a508a94643a4` | `static-code-analysis` | `private-proof-artifact` | `false` | +| `.bitcode/parsed-completion-envelopes.json` | `sha256:cb6b93a204a1b42acc7c426b702bb4d317f4cae5bc4f9c297f66727d3dd795fc` | `inference-synthesis`, `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/projection-policy.json` | `sha256:bb8674abf94ae1d8ee5d5ed695258555f039326c2a75d3632dfd65271a06b1e1` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-completeness-proof.json` | `sha256:9746305d06e0b55e0d7fe59a9ebddcd8d321d4de6e9c26b067aaa74e4842b018` | `prompt-completeness` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/prompt-contracts.json` | `sha256:ff9bb2fb885bff4335f776405fb197df7e5a3e1e7addb97b506b3f2060d200c9` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-family-registry.json` | `sha256:ab753a9f2a8152aff00bb63282d32a3cd518e38ab37d28372237ea049242cf59` | `prompt-completeness` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-implementation-surface.json` | `sha256:2b167bf2a71100c16c5218af06210aad08f889af7c2ceeec5aef3a9d0c6bb38e` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/prompt-surfaces.json` | `sha256:88d8d904ea7059636eddcf4ccc60796e32e48986f64743380167b007b5ac880b` | `inference-synthesis` | `private-proof-artifact` | `false` | +| `.bitcode/proof-contract.json` | `sha256:3027b1bd2e77c3bc6dc73616bd7a4f02934389726d6ca569f5503543ada9d96d` | `proof-contract` | `private-proof-artifact` | `false` | +| `.bitcode/redaction-proof.json` | `sha256:faa5bed0f9cd0e812aee5a69e3f21ac975f21e29e57eca1200f53636b2d20093` | `disclosure-boundary` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/selected-source-material.json` | `sha256:1de88ee5d506a61af4e096e89edb43a83742b3f8b69bbac2066d4c7820d027b9` | `selection-and-materialization` | `licensed-source-material` | `false` | +| `.bitcode/selection-and-materialization-proof.json` | `sha256:44178db54efb33b972cd2e6cff2159b7d6c03cfc69901fa81a47ade8ef1b3e9b` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/selection-consistency-proof.json` | `sha256:3bfc16906769f2d1c0ed837a29f95a1b94589171a4aa0fed584ce85434742659` | `selection-and-materialization` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow-proof.json` | `sha256:8e6cb9e1a5f53b05188964fc477ed3dc9cb246a3bfbaa57690cd38ad833b4dcb` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/sensitive-data-flow.json` | `sha256:621377f9e58e2fcb814448078aedf04b60d85ef8f3efba504b3ba73d28adad2b` | `authorization-and-sensitive-flow` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-participation.json` | `sha256:b23dd79a34d7fb37ff0884e0d475413c5760303d27525501c00069415a280588` | `settlement-source-to-shares` | `settlement-preview` | `false` | +| `.bitcode/settlement-preview.json` | `sha256:a9f661b49799f2c6bf9a3460452a72681d8bf9c899de68b97f1cff085b355f3d` | `settlement-source-to-shares`, `bitcoin-settlement-interface` | `settlement-preview` | `false` | +| `.bitcode/settlement-proof.json` | `sha256:afa5aa92da369956610e7ffd1a0e01aa7bba9732775d56a65f4cdfcef41e1ce9` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/settlement-source-to-shares-proof.json` | `sha256:03b769f4dd08d73838c93f2c639f3e98e7b7f65efe6b7b09f15b264d653f5df2` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/source-to-shares.json` | `sha256:45beb6ee9be4ba5f94fb02b8f61427db470435df7219f2cd7eee33339fc831f3` | `settlement-source-to-shares` | `private-proof-artifact` | `false` | +| `.bitcode/static-heuristics-registry.json` | `sha256:7c1ba09bff9a89f39696c4ea125bf77a68fc1e387de9ca4121214a1051c8c296` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-proof.json` | `sha256:43d0c993cc81696809f32616c596372a95d41980c77a4477c880fe68f8463739` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/static-measurement-report.json` | `sha256:02b5cdc5a05c89652a579902133e8333659c9496bbc08a993b828a6a6231d952` | `static-code-analysis` | `bounded-public-proof-metadata` | `true` | +| `.bitcode/verification-decisions-proof.json` | `sha256:608f4210eb9b498b765f65b1d7a8c67edddf9bc3d5ff1fd6a0c7c3aeb7c5859f` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-receipts.json` | `sha256:cb3a3cda6ffcd3ac8cda341aeb9fb12628dcd15182202c1d703b50e951d3447d` | `verification-decisions` | `private-proof-artifact` | `false` | +| `.bitcode/verification-report.json` | `sha256:cb5173184e0de33f4a625debb2dceaabba82d100cdff1216bcf95b7c7c4e766b` | `verification-decisions` | `verification-evidence` | `false` | diff --git a/BITCODE_SPEC_V47_NOTES.md b/BITCODE_SPEC_V47_NOTES.md new file mode 100644 index 000000000..bd8b06da7 --- /dev/null +++ b/BITCODE_SPEC_V47_NOTES.md @@ -0,0 +1,59 @@ +# Bitcode Spec V47 Notes + +## Status + +- Version: `V47` +- Canonical pointer: `BITCODE_SPEC.txt` -> `V46` +- Active canonical anchor: `BITCODE_SPEC_V46.md` +- Active generated proof appendix: `BITCODE_SPEC_V46_PROVEN.md` +- Current canonical/latest target: `V46` +- Prior canonical anchor: `BITCODE_SPEC_V45.md` +- Prior generated proof appendix: `BITCODE_SPEC_V45_PROVEN.md` +- V47 state: notes-only draft opening +- Scope: V47 starts as a specification-workshopping target over promoted V46 protocol comprehension canon. + +## Notes-only draft rule + +These notes make the V47 draft target visible to strict spec-quality checks after +V46 promotion. They are not first-gate implementation authority, not a full V47 +specification family, and not permission to bypass the V46 canon. V47 work must +continue by refining specification atoms, creating an explicit parity matrix, +and then opening scoped gate branches only after the new specification intent is +clear. + +## Deferred from V46 + +V46 promoted protocol comprehension and launch-facing claim readiness. It made +Bitcode explainable as a source-safe knowledge commoditization protocol across +`/packs`, `/read`, `/deposit`, public docs, operator readback, API/MCP, +ChatGPT App, Bitcode Chat, proof roots, repair states, Bitcoin/BTC settlement +language, BTD scalar-volume and rights language, GitHub delivery boundaries, compute +constraints, storage boundaries, and build/process validation. + +V47 begins from the remaining question: which protocol atoms need further +precision before the next implementation parity pass. The opening posture is +intentionally small so V47 can be workshopped from the promoted canon rather +than inherited from stale notes. + +## Candidate V47 workstreams + +- Protocol atom audit: inspect the promoted V46 law in small pieces and classify + each atom as precise, vague, contradictory, missing, or implementation-ready. +- Parity matrix preparation: convert accepted V47 specification changes into a + source-to-proof matrix before implementation gates begin. +- Product claim discipline: keep public, operator, interface, and proof + language aligned with source-safe AssetPack, BTD, BTC, rights, settlement, + delivery, repair, and compensation law. +- Commercial readiness proofs: identify the tests, generated artifacts, + workflows, local rehearsals, and staging-testnet evidence needed for any V47 + implementation gates. + +## Non-goals during V47 opening + +- Do not implement V47 product behavior from this notes-only opening. +- Do not rewrite V46 promoted canon except through an explicit addendum. +- Do not expose raw source, unpaid AssetPack source, secrets, wallet private + material, private settlement payloads, raw prompts, or raw provider responses. +- Do not collapse estimate, quote, observed payment, final settlement, + contributor allocation, delivery, compensation, and repair states. +- Do not treat notes-only V47 material as stronger than active V46 protocol law. diff --git a/README.md b/README.md index 90c512195..61b88b5f9 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Bitcode Repository `BITCODE_SPEC.txt` is the canonical pointer for active-system work. It currently -resolves to `V43`; V44 is the active draft target for scaled engineering economy -operation over the Packs, Read, and Deposit route model promoted in V43. +resolves to `V46`; V47 is the active draft target after commercial protocol +comprehension was promoted as canon in V46. ## Current Product Posture @@ -13,13 +13,63 @@ The promoted V43 enterprise routes are: - `/read` for the five-step Reading path from Read Request to settlement-gated delivery. - `/deposit` for connected-source deposit AssetPack option synthesis, review, and admission. -The active V44 draft target makes those routes economically operable at -enterprise scale: `/packs` becomes the portfolio and market-intelligence -surface, `/read` gains budgeted procurement and quote governance, and -`/deposit` gains earning, demand, ROI, compensation-range, and source-safe -supply opportunity visibility. Gate 6 adds `/packs` accounting readback for -source-safe BTD/BTC/source-to-shares compensation statements over paid -settlement receipts. +The promoted V46 canon makes those routes easier to explain and audit: +public docs, landing, and operator docs must teach AssetPack commodity flow, +BTD scalar knowledge volume and rights, BTC settlement money, proof readback +authority, and source-safe claim boundaries without turning public guidance into +protocol law. + +V46 Gate 3 adds `V46PublicOperatorClaimBoundaries` through +`packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js`, +`.bitcode/v46-public-operator-claim-boundaries.json`, +`generate:v46-public-operator-claim-boundaries`, +`check:v46-public-operator-claim-boundaries`, and `check:v46-gate3`. It binds +public docs, landing, and operator docs to source-safe claim categories, +evidence authority, compatibility redirects, and forbidden overclaims while +keeping protected source, unpaid AssetPack source, raw prompts, raw provider +responses, credentials, wallet private material, and value-bearing mainnet +operation out of generated metadata. + +V46 Gate 4 adds `V46ProductRouteComprehensionReadback` through +`packages/protocol/src/canonical/v46-product-route-comprehension-readback.js`, +`.bitcode/v46-product-route-comprehension-readback.json`, +`generate:v46-product-route-comprehension-readback`, +`check:v46-product-route-comprehension-readback`, and `check:v46-gate4`. It +binds `/packs`, `/read`, and `/deposit` to low-detail route defaults, +route-owned state, searchable PackActivity readback, Reading and Depositing +five-step flows, expandable proof detail, settlement/delivery boundaries, +compensation readback, and no-source/no-secret route metadata. + +V46 Gate 5 adds `V46InterfaceClaimContracts` through +`packages/protocol/src/canonical/v46-interface-claim-contracts.js`, +`.bitcode/v46-interface-claim-contracts.json`, +`generate:v46-interface-claim-contracts`, +`check:v46-interface-claim-contracts`, and `check:v46-gate5`. It binds public +API, MCP API, ChatGPT App, Bitcode Chat, and package-consumer surfaces to +source-safe `InterfaceClaim` contracts, proof-root projection, denied-state +repair, no parallel state authority, and no-source/no-secret interface +metadata. + +V46 Gate 6 adds `V46ProofReadbackOperatorExplanation` through +`packages/protocol/src/canonical/v46-proof-readback-operator-explanation.js`, +`.bitcode/v46-proof-readback-operator-explanation.json`, +`generate:v46-proof-readback-operator-explanation`, +`check:v46-proof-readback-operator-explanation`, and `check:v46-gate6`. It +binds canonical/generated proof, execution/workflow receipts, ledger journals, +database projections, object-storage roots, telemetry streams, +wallet/provider receipts, repository delivery receipts, and repair +reconciliation receipts into a source-safe operator authority ladder. + +V46 Gate 7 adds `V46LocalInterfaceComprehensionRehearsal` through +`packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js`, +`.bitcode/v46-local-interface-comprehension-rehearsal.json`, +`generate:v46-local-interface-comprehension-rehearsal`, +`check:v46-local-interface-comprehension-rehearsal`, and `check:v46-gate7`. +It rehearses local docs/landing, `/packs`, `/read`, `/deposit`, API/MCP, +ChatGPT App, Bitcode Chat, proof telemetry, and repair readback against the +V46 claim and authority artifacts without exposing protected source, unpaid +AssetPack source, prompts, provider responses, credentials, wallet private +material, private settlement payloads, or value-bearing mainnet behavior. V41 Gate 1 opens the prompts-as-programs specification family over active V40 with `check:v41-gate1`. V41 will catalogue every raw PromptPart and composed @@ -429,6 +479,39 @@ promotion, protected source, unpaid AssetPack source, raw prompts, provider payloads, credentials, wallet private material, private settlement payloads, live logs, and value-bearing mainnet operation. +V46 Gate 1 opens commercial protocol comprehension work over the promoted +`V45` active, `V46` draft posture with the V46 specification family and +`check:v46-gate1`. It keeps `BITCODE_SPEC.txt` pointed at `V45` while naming +V46's launch-facing focus: public/operator explanation, `/packs`, `/read`, +`/deposit`, API/MCP, ChatGPT App, Bitcode Chat, proof readback, and source-safe +claim boundaries for Bitcode as the knowledge commoditization system. + +V46 Gate 2 adds `V46ProtocolComprehensionObjectModel`, +`.bitcode/v46-protocol-comprehension-object-model.json`, +`generate:v46-protocol-comprehension-object-model`, +`check:v46-protocol-comprehension-object-model`, and `check:v46-gate2`. +It binds source-safe object rows for AssetPack, deposit options, Depository +AssetPacks, Read Requests, reviewed Needs, Finding Fits, selected Fit sets, +Need-Fit AssetPacks, previews, BTD scalar volume, BTC quotes/settlement, +rights, delivery, source-to-shares compensation, proof, repair, and +`InterfaceClaim`; it also separates protocol law, product guidance, operator +evidence, investor framing, telemetry, preview, quote, settlement, rights, +delivery, compensation, and repair claims without exposing protected source, +unpaid AssetPack source, prompts, provider payloads, credentials, wallet +private material, private settlement payloads, or value-bearing mainnet +authority. + +V46 Gate 8 adds `V46PromotionReadinessReport`, +`.bitcode/v46-promotion-readiness-report.json`, +`generate:v46-promotion-readiness`, `check:v46-promotion-readiness`, +`check:v46-gate8`, and `v46-canon-promotion.yml`. It binds the accepted V46 +protocol comprehension artifacts, generated `BITCODE_SPEC_V46_PROVEN.md` +support, V46 promotion scripts, gate/canon workflow posture, package exports, +focused tests, and the promoted `V46` active, `V47` draft runtime posture while +continuing to withhold protected source, unpaid AssetPack source, raw prompts, +provider payloads, credentials, wallet private material, private settlement +payloads, live logs, and value-bearing mainnet operation. + Exchange is inherited V36 canon: market-wide activity master-detail, buy/sell/ bid/ask/cancel/accept/settle/history flows, AssetPack range trading, rights-transfer review, pricing/liquidity/wrapper analysis, settlement diff --git a/SPECIFICATIONS_ROADMAP.md b/SPECIFICATIONS_ROADMAP.md index 0a68dee83..9131e9863 100644 --- a/SPECIFICATIONS_ROADMAP.md +++ b/SPECIFICATIONS_ROADMAP.md @@ -2,15 +2,30 @@ ## Status -- Current active canonical pointer: `BITCODE_SPEC.txt` -> `V45` -- Current active canon: `BITCODE_SPEC_V45.md` -- Current draft target: V46 to be opened from active V45 canon. -- Current working gate: V45 Gate 19 Promotion Addendum And Stale Draft Enforcement. -- Next queued work after V45 Gate 19: open V46 Gate 1 from a clean active V45 / draft V46 posture. -- Latest closed gate: V45 Gate 18 Promotion Readiness And Canonical Promotion, which generated `.bitcode/v45-promotion-readiness-report.json`, bound active `BITCODE_SPEC_V45_PROVEN.md`, validated `v45-canon-promotion.yml`, promotion script support, gate/canon workflow active V45 / draft V46 posture, source-safe proof metadata, and V45 workflow promotion. -- V45 Gate 18 closure anchor: promotion readiness closed with a source-safe artifact, proof appendix, V45 promotion workflow, promotion dry-run, gate/canon workflow posture, package exports, tests, docs, and `check:v45-gate18` current and green. -- Current V45 Gate 19 closure target: promoted V45 spec-family addendum that removes stale draft-era active-canon language from `BITCODE_SPEC_V45*`, updates this roadmap to active V45 / draft V46, and extends promoted spec-family validation so future promotions fail on stale active/draft posture outside the source-of-truth section. -- V45 Gate 19 closure anchor: addendum is closed when promoted V45 spec-family checks, canonical-input checks, canon-posture drift checks, promoted-stale-posture tests, generated artifact freshness checks, `check:v45-gate19`, and diff hygiene pass, then the gate branch is committed, pushed, and pull-requested into `main`. +- Current active canonical pointer: `BITCODE_SPEC.txt` -> `V46` +- Current active canon: `BITCODE_SPEC_V46.md` +- Current draft target: `BITCODE_SPEC_V47_NOTES.md` notes-only opening +- Current working gate: V47 opening preparation after V46 canonical promotion. +- Next queued work after V46 promotion: workshop V47 protocol atoms from promoted V46, then create the V47 parity matrix and scoped gate branches. +- Latest closed gate: V46 Gate 8 Promotion Readiness And Canonical Promotion, which added `V46PromotionReadinessReport`, `.bitcode/v46-promotion-readiness-report.json`, `BITCODE_SPEC_V46_PROVEN.md`, V46 promotion workflow support, promotion-script support, promoted V46 / draft V47 runtime posture, source-safe promotion metadata, package exports, focused tests, workflow wiring, `check:v46-gate8`, and the standalone `BITCODE_SPEC.txt` pointer promotion to V46. +- V45 Gate 19 closure anchor: promoted V45 spec-family checks, canonical-input checks, canon-posture drift checks, promoted-stale-posture tests, generated artifact freshness checks, `check:v45-gate19`, and diff hygiene passed before merge to `main`. +- V46 Gate 1 closure target: open the V46 draft family over active V45, name commercial protocol comprehension as the V46 focus, list provisional V46 gates, expose `check:v46-gate1`, and wire CI to validate active V45 plus draft V46 without claiming V46 promotion. +- V46 Gate 1 closure anchor: Gate 1 is closed when V46 SPEC, DELTA, NOTES, and PARITY files validate in draft mode, this roadmap lists V46 as active draft target, V45 remains the active pointer, CI runs draft V46 checks when V46 files exist, `check:v46-gate1` passes, and the gate branch is committed, pushed, and pull-requested into `version/v46`. +- V46 Gate 2 closure target: add package-backed `V46ProtocolComprehensionObjectModel`, deterministic `.bitcode/v46-protocol-comprehension-object-model.json`, claim taxonomy law, object model law, docs, workflow wiring, protocol tests, and `check:v46-gate2` while preserving `BITCODE_SPEC.txt` -> `V45`. +- V46 Gate 2 closure anchor: Gate 2 is closed when AssetPack, BTD scalar-volume, BTC quote/settlement, source unlock delivery, source-to-shares compensation, proof, repair, and `InterfaceClaim` objects are source-safe; claim categories distinguish protocol law, product guidance, operator evidence, investor framing, telemetry, preview, quote, settlement, rights, delivery, compensation, and repair; forbidden claim collapses are modeled; the generated artifact is fresh; focused protocol tests pass; gate/canon workflows run the checker; and the gate branch is committed, pushed, and pull-requested into `version/v46`. +- V46 Gate 3 closure target: add package-backed `V46PublicOperatorClaimBoundaries`, deterministic `.bitcode/v46-public-operator-claim-boundaries.json`, public docs, landing, operator docs, README anchors, protocol docs compatibility alias, source-safe forbidden overclaim scans, workflow wiring, focused tests, and `check:v46-gate3` while preserving `BITCODE_SPEC.txt` -> `V45`. +- V46 Gate 3 closure anchor: Gate 3 is closed when public docs, landing copy, README/operator docs, and route docs explain AssetPack, BTD scalar volume and rights, BTC settlement, proof readback, and route compatibility without stale Source Shares/Exchange-first framing or overclaiming; operator notes may name proof roots but not secret values; generated metadata is fresh and source-safe; focused public docs/protocol tests pass; gate/canon workflows run the checker; and the gate branch is committed, pushed, and pull-requested into `version/v46`. +- V46 Gate 4 closure target: add package-backed `V46ProductRouteComprehensionReadback`, deterministic `.bitcode/v46-product-route-comprehension-readback.json`, `/packs`, `/read`, and `/deposit` source-safe route readback rows, low-detail defaults, route-owned state, expandable proof detail, workflow wiring, focused tests, and `check:v46-gate4` while preserving `BITCODE_SPEC.txt` -> `V45`. +- V46 Gate 4 closure anchor: Gate 4 is closed when `/packs` binds searchable PackActivity master-detail readback; `/read` binds the five-step Reading route, `ReadNeedComprehensionSynthesis`, `ReadFitsFindingSynthesis`, source-safe preview, quote, BTC settlement, BTD rights, and delivery boundary; `/deposit` binds the five-step source-supply route, option synthesis, source-safe option review, admission, Depository state, and compensation metadata; generated metadata is fresh and source-safe; focused route/protocol tests pass; gate/canon workflows run the checker; and the gate branch is committed, pushed, and pull-requested into `version/v46`. +- V46 Gate 5 closure target: add package-backed `V46InterfaceClaimContracts`, deterministic `.bitcode/v46-interface-claim-contracts.json`, public API, MCP API, ChatGPT App, Bitcode Chat, and package-consumer source-safe InterfaceClaim contracts, proof-root projection, denied-state repair, no parallel state authority, workflow wiring, focused tests, and `check:v46-gate5` while preserving `BITCODE_SPEC.txt` -> `V45`. +- V46 Gate 5 closure anchor: Gate 5 is closed when public API schema compatibility, MCP tool registry contracts, ChatGPT App action contracts, Bitcode Chat conversation/stream/handoff contracts, and package-consumer read contracts are bound to Gate 2 claim ids, source-safe fields, proof roots, denied states, no-source/no-secret exclusions, generated metadata freshness, package exports, focused protocol tests, gate/canon workflow wiring, and the gate branch is committed, pushed, and pull-requested into `version/v46`. +- V46 Gate 6 closure target: add package-backed `V46ProofReadbackOperatorExplanation`, deterministic `.bitcode/v46-proof-readback-operator-explanation.json`, canonical/generated proof, execution/workflow receipt, ledger journal, database projection, object-storage root, telemetry stream, wallet/provider receipt, repository delivery receipt, and repair/reconciliation receipt rows, source-safe operator explanation, workflow wiring, focused tests, and `check:v46-gate6` while preserving `BITCODE_SPEC.txt` -> `V45`. +- V46 Gate 6 closure anchor: Gate 6 is closed when evidence authority classes are bound to Gate 2 authority ids and claim ids, required operator questions, stronger evidence requirements, conflict behavior, fail-closed repair states, no-source/no-secret exclusions, generated metadata freshness, package exports, focused protocol tests, gate/canon workflow wiring, and the gate branch is committed, pushed, and pull-requested into `version/v46`. +- V46 Gate 7 closure target: add package-backed `V46LocalInterfaceComprehensionRehearsal`, deterministic `.bitcode/v46-local-interface-comprehension-rehearsal.json`, local docs/landing, `/packs`, `/read`, `/deposit`, API/MCP, ChatGPT App, Bitcode Chat, proof telemetry, and repair readback rehearsal rows, workflow wiring, focused tests, and `check:v46-gate7` while preserving `BITCODE_SPEC.txt` -> `V45`. +- V46 Gate 7 closure anchor: Gate 7 is closed when all Gate 2 through Gate 6 artifacts pass, local interface surfaces rehearse their source-safe claims and evidence authority without source/secret leakage, denied repair states remain fail-closed, generated metadata is fresh, package exports, focused protocol tests, gate/canon workflow wiring, and the gate branch is committed, pushed, and pull-requested into `version/v46`. +- V46 Gate 8 closure target: add package-backed `V46PromotionReadinessReport`, deterministic `.bitcode/v46-promotion-readiness-report.json`, `BITCODE_SPEC_V46_PROVEN.md` generation support, `v46-canon-promotion.yml`, V46 promotion-script support, gate/canon workflow posture, package exports, focused tests, promotion dry-run, and `check:v46-gate8` while preserving `BITCODE_SPEC.txt` -> `V45` on the gate branch. +- V46 Gate 8 closure anchor: Gate 8 is closed when all six accepted V46 comprehension artifacts are covered, source-safe promotion metadata is fresh, `BITCODE_SPEC_V46_PROVEN.md` exists, promotion scripts support V46, shared workflows validate active V45 / draft V46 and promoted V46 / draft V47 postures, `v46-canon-promotion.yml` can prepare the standalone pointer promotion, `node scripts/promote-bitcode-canon.mjs --version V46 --commit HEAD --dry-run` is greenable, `check:v46-gate8` passes, and the gate branch is committed, pushed, and pull-requested into `version/v46`. +- V45 Gate 18 closure anchor: promotion readiness closed with a source-safe artifact, `BITCODE_SPEC_V45_PROVEN.md`, V45 promotion workflow, promotion dry-run, gate/canon workflow posture, package exports, tests, docs, and `check:v45-gate18` current and green. - Latest closed version: V43 Route Product Cleanup, which promoted `/packs`, `/read`, and `/deposit`; PackActivity master-detail; five-step Reading route UX; deposit AssetPack option synthesis; deposit criticality/ROI/compensation policy; option admission; product route UX; cross-route rehearsal; and V43 promotion readiness. - Recent V43 canonical promotion anchor: V43 canonical promotion updated `BITCODE_SPEC.txt` to `V43`, generated `BITCODE_SPEC_V43_PROVEN.md`, preserved active V43 / draft V44 runtime posture, and closed route-product cleanup canon. - V44 Gate 1 opening anchor: scaled engineering economy opens over promoted V43 with V44 SPEC, DELTA, NOTES, and PARITY files, `check:v44-gate1`, active V43 / draft V44 posture, and a ten-gate plan for economic domain models, Packs portfolio intelligence, Reading budget/quote governance, Depositor earnings/ROI intelligence, BTD/BTC compensation statements, organization policy/wallet authority, enterprise economic UX, scaled local/staging rehearsal, and promotion readiness. @@ -141,9 +156,9 @@ They are referenced here for specification history only; active implementation w ## Source Families - Legacy ENGI specifications: `_legacy/ENGI_SPEC_V1.md` through `_legacy/ENGI_SPEC_V25.md`, with companion `NOTES`, `DELTA`, `PARITY_MATRIX`, `SYSTEM_PARITY_MATRIX`, `PROVEN`, and audit files where present. -- Active Bitcode specifications: `BITCODE_SPEC_V45.md`, with companion `DELTA`, `NOTES`, `PARITY_MATRIX`, and `PROVEN` files. -- Promoted Bitcode history: `BITCODE_SPEC_V26.md` through `BITCODE_SPEC_V44.md`, with companion `DELTA`, `NOTES`, `PARITY_MATRIX`, and `PROVEN` files. -- Draft and future Bitcode specifications: V46 opens next over promoted V45. Planned V46+ work follows the active roadmap and any accepted notes created after V45 promotion. +- Active Bitcode specifications: `BITCODE_SPEC_V46.md`, with companion `DELTA`, `NOTES`, `PARITY_MATRIX`, and `PROVEN` files. +- Promoted Bitcode history: `BITCODE_SPEC_V26.md` through `BITCODE_SPEC_V45.md`, with companion `DELTA`, `NOTES`, `PARITY_MATRIX`, and `PROVEN` files. +- Draft and future Bitcode specifications: V47 opens next over promoted V46 as `BITCODE_SPEC_V47_NOTES.md` until a full V47 specification family is intentionally drafted. Planned V47+ work follows the active roadmap and any accepted notes created after V46 promotion. - Specification discipline references: `BITCODE_SPECIFYING.md` and `BITCODE_SPEC_TEMPLATEGUIDE.md`. ## Roadmap @@ -194,8 +209,9 @@ They are referenced here for specification history only; active implementation w | V42 | `BITCODE_SPEC_V42.md` | promoted historical Bitcode canon | Reliable MVP experience after V41 prompt hardening: shortest-path Depositing for any source material with Depository admission proof and later BTC compensation when deposits contribute to synthesized AssetPacks; shortest-path Reading for Read Request submission, synthesized Need review/resynthesis, Finding Fits, source-safe AssetPack measurement/preview review, BTD/BTC purchase and settlement, and repository delivery; and an AI-reading dominant demonstration proving an AssetPack can improve an AI system's training, prompt/context, or evaluation performance beyond public-data-only baselines using proprietary or otherwise non-public deposit and read materials. | | V43 | `BITCODE_SPEC_V43.md` | promoted historical Bitcode canon | Agentic enterprise deposit-side AssetPack option synthesis and broad UX cleanup after V42 reliable MVP paths: repository-installed Bitcode Agents compare a connected enterprise codebase, the Bitcode Depository, and Reading activity to propose deposit AssetPack options for review; filter out critical IP; estimate positive ROI against development cost and likely demand; let enterprises approve/reject options for Depository admission; split `/terminal` into `/read` and `/deposit`; and rename `/exchange` to `/packs` throughout product routes, code naming, docs, component prefixes, tests, and operator vocabulary. `/packs` becomes the searchable master-detail activity surface for all pack activity, with column sorting/filtering/search over measurements, synthesized AssetPack titles and descriptions, values, activity/transaction type, settlement posture, compensation, proof roots, and repair state. `/deposit` and `/read` become the short core paths into and out of the Depository. Outside public docs, product UX should be self-explanatory through route structure, concise labels, progressive detail, and rich reusable themed components rather than self-referential instructional copy. | | V44 | `BITCODE_SPEC_V44.md` | promoted historical Bitcode canon | Scaled engineering economy and tokenized AssetPack network operation after V43 route cleanup: enterprise AssetPack portfolios, Pack market signals, Reading demand signals, deposit supply opportunities, Reading budget policy, AssetPack quote policy, BTD/BTC/source-to-shares accounting, contributor compensation statements, organization policy, wallet/spend authority, scaled local/staging-testnet rehearsal, and polished economic operation across `/packs`, `/read`, and `/deposit` while keeping value-bearing mainnet blocked until later launch authority. | -| V45 | `BITCODE_SPEC_V45.md` | active canon | Knowledge commoditization protocol precision after V44 scaled economics: AssetPack commodity lifecycle, BTD Need-relative scalar knowledge-volume and rights, BTC settlement finality, source-safe interface disclosure, proof-backed readback, operational repair, generated proof-family artifacts, source-safe end-to-end rehearsal, and canonical promotion. | -| V46 | to be opened | planned draft target | Next version to be specified from active V45 after the V45 promotion addendum closes. | +| V45 | `BITCODE_SPEC_V45.md` | promoted historical Bitcode canon | Knowledge commoditization protocol precision after V44 scaled economics: AssetPack commodity lifecycle, BTD Need-relative scalar knowledge-volume and rights, BTC settlement finality, source-safe interface disclosure, proof-backed readback, operational repair, generated proof-family artifacts, source-safe end-to-end rehearsal, and canonical promotion. | +| V46 | `BITCODE_SPEC_V46.md` | active canon | Commercial protocol comprehension and launch-facing interface claim readiness after V45 knowledge commoditization law: source-safe public/operator explanation, product route comprehension for `/packs`, `/read`, and `/deposit`, API/MCP/ChatGPT App/Bitcode Chat claim contracts, proof-readable market activity, local interface rehearsal without value-bearing mainnet authority, and canonical promotion. | +| V47 | `BITCODE_SPEC_V47_NOTES.md` | notes-only draft target | Specification-workshopping target after promoted V46: audit protocol atoms in small pieces, refine exact Bitcode law before implementation parity, prepare the V47 parity matrix, and then open scoped gates only after the accepted specification changes are precise. | ## Current Planning Spine @@ -219,13 +235,15 @@ They are referenced here for specification history only; active implementation w 18. V43 promoted agentic deposit-side and route-product cleanup after the MVP paths became reliable: enterprises get deposit AssetPack options synthesized from connected repositories and Bitcode's observed Depository/Reading demand, then approve or reject source-safe, sub-critical, positive-ROI options for Depository admission; `/terminal` split into `/read` and `/deposit`, and `/exchange` became `/packs`. 19. V44 promoted the scaled engineering economy after product routes became intelligible: enterprise AssetPack portfolios, Pack market intelligence, Reading budgets and quote governance, deposit earning/ROI intelligence, BTD/BTC/source-to-shares compensation statements, organization policy/wallet authority, enterprise economic UX, and scaled local/staging-testnet rehearsal without weakening source-safety or value-bearing mainnet blocks. 20. V45 promoted Bitcode's knowledge commoditization law after V44: AssetPack as commodity, BTD as Need-relative scalar knowledge-volume and settled rights, BTC as settlement money, proof-backed readback as state authority, source-safe interface disclosure, operational repair, generated proof-family artifacts, source-safe rehearsal, and canonical promotion. +21. V46 opens commercial protocol comprehension after V45: the active law remains V45 while V46 drafts how public, operator, product, API/MCP, ChatGPT App, and Bitcode Chat surfaces explain AssetPacks, BTD scalar knowledge-volume and rights, BTC settlement, proof readback, source-safe preview, quotes, finality, delivery, compensation, and repair with launch-safe claims. ## Boundary Rules - Do not treat `_legacy/` ENGI specifications as active implementation authority. - Do use `_legacy/` specifications to understand why current Bitcode concepts exist and what must not regress. - New version work must build on V45 active canon and V27 `$BTD` law unless a future promoted spec explicitly supersedes it. -- V46 is the next draft target to open from active V45 posture after the V45 promotion addendum closes. -- V45 Gate 19 is a promotion addendum only. It repairs promoted specification posture and enforcement, not runtime protocol behavior. +- V46 is the active draft target opened from active V45 posture. +- V46 Gate 1 is a roadmap/spec-family/checking gate only. It does not authorize runtime protocol behavior. +- V45 Gate 19 was a promotion addendum only. It repaired promoted specification posture and enforcement, not runtime protocol behavior. - No implementation route should be versioned by spec number; source should move in place with the active canon. - Future notes files are planning memory only until their version is explicitly opened as the draft-target SPEC family. diff --git a/internal-docs/README.md b/internal-docs/README.md index 43415bd69..9b5e63ec9 100644 --- a/internal-docs/README.md +++ b/internal-docs/README.md @@ -1,6 +1,6 @@ # Bitcode Internal Notes -Status: non-canonical internal documentation. The active canonical system specification pointer is `BITCODE_SPEC.txt` -> `V34`; V35 is the active draft-target family for telemetry and documentation depth. These notes are useful only insofar as they help draft, implement, or verify the active SPEC family or the explicitly opened draft-target family. +Status: non-canonical internal documentation. The active canonical system specification pointer resolves to `V46`. V47 is the active draft-target family after promoted V46 canon. These notes are useful only insofar as they help draft, implement, or verify the active SPEC family or the explicitly opened draft-target family. ## Rules @@ -11,6 +11,8 @@ Status: non-canonical internal documentation. The active canonical system specif - Prefer Read, fit, AssetPack, shares, Finish, delivery mechanism, Terminal, Exchange, Protocol, proof, and settlement vocabulary. - Treat compatibility source names as implementation corridors, not product vocabulary. - Remove or reform non-Bitcode product vocabulary and removed operator-control language. +- Operator notes may name proof roots, generated artifact paths, dashboard ids, runbook ids, state labels, and repair commands when those values are source-safe. +- Operator notes must not record secret values, provider tokens, wallet private material, raw protected prompts, protected source payloads, raw protected model responses with source, or unpaid AssetPack source. ## Core Notes diff --git a/package.json b/package.json index e5b8cd52d..7912f1cba 100644 --- a/package.json +++ b/package.json @@ -412,6 +412,28 @@ "check:v45-promotion-readiness": "node scripts/generate-v45-promotion-readiness-report.mjs --check", "check:v45-gate18": "node scripts/check-v45-gate18-promotion-readiness.mjs", "check:v45-gate19": "node scripts/check-v45-gate19-promotion-addendum.mjs", + "check:v46-gate1": "node scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs", + "generate:v46-protocol-comprehension-object-model": "node scripts/generate-v46-protocol-comprehension-object-model.mjs", + "check:v46-protocol-comprehension-object-model": "node scripts/generate-v46-protocol-comprehension-object-model.mjs --check", + "check:v46-gate2": "node scripts/check-v46-gate2-protocol-comprehension-object-model.mjs", + "generate:v46-public-operator-claim-boundaries": "node scripts/generate-v46-public-operator-claim-boundaries.mjs", + "check:v46-public-operator-claim-boundaries": "node scripts/generate-v46-public-operator-claim-boundaries.mjs --check", + "check:v46-gate3": "node scripts/check-v46-gate3-public-operator-claim-boundaries.mjs", + "generate:v46-product-route-comprehension-readback": "node scripts/generate-v46-product-route-comprehension-readback.mjs", + "check:v46-product-route-comprehension-readback": "node scripts/generate-v46-product-route-comprehension-readback.mjs --check", + "check:v46-gate4": "node scripts/check-v46-gate4-product-route-comprehension-readback.mjs", + "generate:v46-interface-claim-contracts": "node scripts/generate-v46-interface-claim-contracts.mjs", + "check:v46-interface-claim-contracts": "node scripts/generate-v46-interface-claim-contracts.mjs --check", + "check:v46-gate5": "node scripts/check-v46-gate5-interface-claim-contracts.mjs", + "generate:v46-proof-readback-operator-explanation": "node scripts/generate-v46-proof-readback-operator-explanation.mjs", + "check:v46-proof-readback-operator-explanation": "node scripts/generate-v46-proof-readback-operator-explanation.mjs --check", + "check:v46-gate6": "node scripts/check-v46-gate6-proof-readback-operator-explanation.mjs", + "generate:v46-local-interface-comprehension-rehearsal": "node scripts/generate-v46-local-interface-comprehension-rehearsal.mjs", + "check:v46-local-interface-comprehension-rehearsal": "node scripts/generate-v46-local-interface-comprehension-rehearsal.mjs --check", + "check:v46-gate7": "node scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs", + "generate:v46-promotion-readiness": "node scripts/generate-v46-promotion-readiness-report.mjs", + "check:v46-promotion-readiness": "node scripts/generate-v46-promotion-readiness-report.mjs --check", + "check:v46-gate8": "node scripts/check-v46-gate8-promotion-readiness.mjs", "generate:v38-inference-surface-inventory": "node scripts/generate-v38-inference-surface-inventory.mjs", "check:v38-inference-surface-inventory": "node scripts/generate-v38-inference-surface-inventory.mjs --check", "check:v38-gate2": "node scripts/check-v38-gate2-inference-surface-inventory.mjs", diff --git a/packages/protocol/README.md b/packages/protocol/README.md index 5fdcf1548..8350821ac 100644 --- a/packages/protocol/README.md +++ b/packages/protocol/README.md @@ -15,7 +15,7 @@ inventories, but it is not a commercial runtime implementation dependency. Current exported commercial helpers include: -- active/draft canon posture (`V45` active, `V46` draft after V45 promotion); +- active/draft canon posture (`V46` active, `V47` draft after V46 promotion); - spec-family and canonical-input validation helpers; - canon-posture drift reporting; - `DocumentationSurfaceCatalog` helpers for V35 documentation surface proof; @@ -65,6 +65,10 @@ Current exported commercial helpers include: - `V42PromotionReadinessReport` helpers for V42 source-safe promotion readiness across all V42 reliable MVP artifacts, generated proof support, workflow posture, promotion dry-run support, value-bearing mainnet blocking, and `V42` active, `V43` draft runtime preparation; - `V43RouteVocabularyInventory` helpers for V43 source-safe route vocabulary inventory, source-safe file/token counts, `/exchange` to `/packs` planning, `/terminal` to `/read` and `/deposit` planning, retained debug cockpit boundary, redirect compatibility, self-referential copy cleanup, and migration matrix proof; - `V43PacksActivityMasterDetail` helpers for V43 source-safe PackActivity contracts, `/api/packs/activity`, `/packs` master-detail search/filter/sort/detail projection, proof roots, settlement/compensation/delivery/repair readback, and `/exchange` compatibility redirection; +- `V46PublicOperatorClaimBoundaries` helpers for V46 source-safe public/operator claim boundary metadata across public docs, landing, operator docs, README surfaces, workflow checks, and forbidden overclaim scans; +- `V46ProductRouteComprehensionReadback` helpers for V46 source-safe `/packs`, `/read`, and `/deposit` route comprehension metadata, low-detail defaults, expandable proof readback, route-owned state, and forbidden product-route overclaim scans; +- `V46InterfaceClaimContracts` helpers for V46 source-safe API/MCP, ChatGPT App, Bitcode Chat, and package-consumer claim contracts, proof-root projection, denied-state repair, no parallel state authority, and forbidden interface overclaim scans; +- `V46LocalInterfaceComprehensionRehearsal` helpers for V46 source-safe local docs, route, API/MCP, ChatGPT App, Bitcode Chat, proof telemetry, and repair readback rehearsal metadata over prior V46 claim and authority artifacts; - canonical proven-generation helpers; - the package app/server context used by commercial interfaces. @@ -322,6 +326,95 @@ exports, and `V45` active, `V46` draft runtime preparation while preserving the same source, prompt, provider, credential, wallet-private, private-settlement, live-log, and value-bearing mainnet exclusions. +V46 Gate 1 opens commercial protocol comprehension over active `V45` with the +V46 draft spec family and `check:v46-gate1`. It keeps V46 as draft-target +material while naming the public/operator/interface explanation scope. + +V46 Gate 2 adds `V46ProtocolComprehensionObjectModel` through +`packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js`, +`packages/protocol/test/v46-protocol-comprehension-object-model.test.js`, +`.bitcode/v46-protocol-comprehension-object-model.json`, +`generate:v46-protocol-comprehension-object-model`, +`check:v46-protocol-comprehension-object-model`, and `check:v46-gate2`. It +binds the source-safe object model, claim categories, authority classes, +disclosure boundaries, forbidden claim collapses, package exports, workflow +checks, and generated artifact freshness for later public docs, route, +API/MCP, ChatGPT App, Bitcode Chat, proof readback, and launch-facing claim +work. + +V46 Gate 3 adds `V46PublicOperatorClaimBoundaries` through +`packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js`, +`packages/protocol/test/v46-public-operator-claim-boundaries.test.js`, +`.bitcode/v46-public-operator-claim-boundaries.json`, +`generate:v46-public-operator-claim-boundaries`, +`check:v46-public-operator-claim-boundaries`, and `check:v46-gate3`. +Package consumers can call `buildV46PublicOperatorClaimBoundaries` to produce +source-safe public/operator claim boundary metadata for public docs, landing, +operator docs, README surfaces, workflow wiring, required copy anchors, and +forbidden overclaim scans without serializing protected source, unpaid +AssetPack source, raw prompts, raw provider responses, credentials, wallet +private material, or value-bearing mainnet authority. + +V46 Gate 4 adds `V46ProductRouteComprehensionReadback` through +`packages/protocol/src/canonical/v46-product-route-comprehension-readback.js`, +`packages/protocol/test/v46-product-route-comprehension-readback.test.js`, +`.bitcode/v46-product-route-comprehension-readback.json`, +`generate:v46-product-route-comprehension-readback`, +`check:v46-product-route-comprehension-readback`, and `check:v46-gate4`. It +binds `/packs`, `/read`, and `/deposit` to source-safe low-detail defaults, +route-owned state, expandable proof readback, Reading and Depositing five-step +flows, Packs search/filter/sort, proof-root readback, settlement/delivery +boundaries, contributor compensation readback, and no-source/no-secret product +route scans. + +V46 Gate 5 adds `V46InterfaceClaimContracts` through +`packages/protocol/src/canonical/v46-interface-claim-contracts.js`, +`packages/protocol/test/v46-interface-claim-contracts.test.js`, +`.bitcode/v46-interface-claim-contracts.json`, +`generate:v46-interface-claim-contracts`, +`check:v46-interface-claim-contracts`, and `check:v46-gate5`. It binds public +API schema compatibility, MCP tool contracts, ChatGPT App action contracts, +Bitcode Chat conversation/stream/handoff contracts, and package-consumer read +contracts to source-safe `InterfaceClaim` rows, proof-root projection, +denied-state repair, no parallel state authority, package exports, and +no-source/no-secret interface scans. + +V46 Gate 6 adds `V46ProofReadbackOperatorExplanation` through +`packages/protocol/src/canonical/v46-proof-readback-operator-explanation.js`, +`packages/protocol/test/v46-proof-readback-operator-explanation.test.js`, +`.bitcode/v46-proof-readback-operator-explanation.json`, +`generate:v46-proof-readback-operator-explanation`, +`check:v46-proof-readback-operator-explanation`, and `check:v46-gate6`. It +distinguishes canonical/generated proof, execution/workflow receipts, ledger +journals, database projections, object-storage roots, telemetry streams, +wallet/provider receipts, repository delivery receipts, and repair +reconciliation receipts without creating parallel state authority or exposing +private payloads. + +V46 Gate 7 adds `V46LocalInterfaceComprehensionRehearsal` through +`packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js`, +`packages/protocol/test/v46-local-interface-comprehension-rehearsal.test.js`, +`.bitcode/v46-local-interface-comprehension-rehearsal.json`, +`generate:v46-local-interface-comprehension-rehearsal`, +`check:v46-local-interface-comprehension-rehearsal`, and `check:v46-gate7`. +It rehearses local docs/landing, `/packs`, `/read`, `/deposit`, API/MCP, +ChatGPT App, Bitcode Chat, proof telemetry, and repair readback against Gate 2 +through Gate 6 generated artifacts while remaining local-only and +source-safe. + +V46 Gate 8 adds `V46PromotionReadinessReport` through +`packages/protocol/src/canonical/v46-promotion-readiness-report.js`, +`packages/protocol/test/v46-promotion-readiness.test.js`, +`.bitcode/v46-promotion-readiness-report.json`, +`generate:v46-promotion-readiness`, `check:v46-promotion-readiness`, and +`check:v46-gate8`. It binds the accepted V46 protocol comprehension artifacts, +generated `BITCODE_SPEC_V46_PROVEN.md` support, `v46-canon-promotion.yml`, +promotion dry-run support, workflow posture, package exports, and the promoted +`V46` active, `V47` draft runtime preparation without serializing protected +source, unpaid AssetPack source, raw prompts, provider payloads, credentials, +wallet private material, private settlement payloads, live logs, or +value-bearing mainnet authority. + Historical V39 promotion moved this package through the `V39` active, `V40` draft posture. V40 promotion has since advanced the current package posture to `V40` active, `V41` draft. diff --git a/packages/protocol/data/state.json b/packages/protocol/data/state.json index b2f77f91b..87da3e1db 100644 --- a/packages/protocol/data/state.json +++ b/packages/protocol/data/state.json @@ -1,18 +1,18 @@ { "version": 3, - "specVersion": "Bitcode Spec V45 active canon / V46 system draft", + "specVersion": "Bitcode Spec V46 active canon / V47 system draft", "canonPosture": { - "activeCanonVersion": "V45", - "draftTargetVersion": "V46", - "operatorLabel": "V45 active canon / V46 system draft", - "specVersionLabel": "Bitcode Spec V45 active canon / V46 system draft", + "activeCanonVersion": "V46", + "draftTargetVersion": "V47", + "operatorLabel": "V46 active canon / V47 system draft", + "specVersionLabel": "Bitcode Spec V46 active canon / V47 system draft", "documentTitle": "Bitcode Demonstration", - "policyRef": "policy://bitcode/spec-v45-active-v46-system-draft/current", - "activeProvenAppendixPath": "BITCODE_SPEC_V45_PROVEN.md", - "draftSpecPath": "BITCODE_SPEC_V46.md", - "draftDeltaPath": "BITCODE_SPEC_V46_DELTA.md", - "draftParityPath": "BITCODE_SPEC_V46_PARITY_MATRIX.md", - "inheritedCanonSurfaceLabel": "V16/V17/V18/V19/V20/V21/V22/V23/V24/V25/V26/V27/V28/V29/V30/V31/V32/V33/V34/V35/V36/V37/V38/V39/V40/V41/V42/V43/V44", + "policyRef": "policy://bitcode/spec-v46-active-v47-system-draft/current", + "activeProvenAppendixPath": "BITCODE_SPEC_V46_PROVEN.md", + "draftSpecPath": "BITCODE_SPEC_V47.md", + "draftDeltaPath": "BITCODE_SPEC_V47_DELTA.md", + "draftParityPath": "BITCODE_SPEC_V47_PARITY_MATRIX.md", + "inheritedCanonSurfaceLabel": "V16/V17/V18/V19/V20/V21/V22/V23/V24/V25/V26/V27/V28/V29/V30/V31/V32/V33/V34/V35/V36/V37/V38/V39/V40/V41/V42/V43/V44/V45", "heroEyebrow": "Bitcode transactions and activity", "heroLede": "Set the active scenario, select supply, and follow the flow from deposit through settlement.", "heroTip": "Use the guide and lower runtime surfaces when you read exact replay, proof, or settlement detail." diff --git a/packages/protocol/src/canon-posture.js b/packages/protocol/src/canon-posture.js index f6d31663a..6fd507606 100644 --- a/packages/protocol/src/canon-posture.js +++ b/packages/protocol/src/canon-posture.js @@ -1,7 +1,7 @@ // @ts-check -export const ACTIVE_CANON_VERSION = 'V45'; -export const DRAFT_TARGET_VERSION = 'V46'; +export const ACTIVE_CANON_VERSION = 'V46'; +export const DRAFT_TARGET_VERSION = 'V47'; export const CURRENT_CANON_OPERATOR_LABEL = `${ACTIVE_CANON_VERSION} active canon / ${DRAFT_TARGET_VERSION} system draft`; /** @@ -48,7 +48,7 @@ export function buildCanonPosture() { draftSpecPath: DRAFT_SPEC_PATH, draftDeltaPath: DRAFT_DELTA_PATH, draftParityPath: DRAFT_PARITY_PATH, - inheritedCanonSurfaceLabel: 'V16/V17/V18/V19/V20/V21/V22/V23/V24/V25/V26/V27/V28/V29/V30/V31/V32/V33/V34/V35/V36/V37/V38/V39/V40/V41/V42/V43/V44', + inheritedCanonSurfaceLabel: 'V16/V17/V18/V19/V20/V21/V22/V23/V24/V25/V26/V27/V28/V29/V30/V31/V32/V33/V34/V35/V36/V37/V38/V39/V40/V41/V42/V43/V44/V45', heroEyebrow: `${CURRENT_PROJECT_LABEL} transactions and activity`, heroLede: 'Set the active scenario, select supply, and follow the flow from deposit through settlement.', heroTip: 'Use the guide and lower runtime surfaces when you read exact replay, proof, or settlement detail.' diff --git a/packages/protocol/src/canonical/proven-generator.js b/packages/protocol/src/canonical/proven-generator.js index 6d8911d9b..63ecc00b5 100644 --- a/packages/protocol/src/canonical/proven-generator.js +++ b/packages/protocol/src/canonical/proven-generator.js @@ -49,6 +49,7 @@ import { buildV42PromotionReadinessReport as buildV42PromotionReadinessReportArt import { buildV43PromotionReadinessReport as buildV43PromotionReadinessReportArtifact } from './v43-promotion-readiness-report.js'; import { buildV44PromotionReadinessReport as buildV44PromotionReadinessReportArtifact } from './v44-promotion-readiness-report.js'; import { buildV45PromotionReadinessReport as buildV45PromotionReadinessReportArtifact } from './v45-promotion-readiness-report.js'; +import { buildV46PromotionReadinessReport as buildV46PromotionReadinessReportArtifact } from './v46-promotion-readiness-report.js'; export const DEFAULT_PROVEN_BRANCH_MODES = ['patch', 'context']; export const DEFAULT_V23_PROVEN_PAYMENT_MODES = [...BITCOIN_PAYMENT_MODES]; @@ -74,6 +75,7 @@ const V42_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v42-promotion-readiness- const V43_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v43-promotion-readiness-report.json'; const V44_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v44-promotion-readiness-report.json'; const V45_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v45-promotion-readiness-report.json'; +const V46_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v46-promotion-readiness-report.json'; /** * @param {string} version @@ -6326,6 +6328,27 @@ export function renderCanonicalProvenMarkdown(data) { )); lines.push(''); } + if (data.v46) { + const { v46 } = data; + lines.push('## V46 Promotion Readiness'); + lines.push(''); + lines.push(`- reportId: ${markdownCode(v46.promotionReadinessReport.reportId || v46.promotionReadinessReport.artifactId)}`); + lines.push(`- sourceSafe: ${markdownCode(String(v46.promotionReadinessReport.sourceSafe === true))}`); + lines.push(`- passed: ${markdownCode(String(v46.promotionReadinessReport.passed === true))}`); + lines.push(`- failureCount: ${markdownCode(String(v46.promotionReadinessReport.failures.length))}`); + lines.push(`- prePromotionPosture: ${markdownCode(v46.promotionReadinessReport.prePromotionPosture)}`); + lines.push(`- postPromotionPosture: ${markdownCode(v46.promotionReadinessReport.postPromotionPosture)}`); + lines.push(''); + lines.push(renderMarkdownTable( + ['artifactPath', 'digest', 'byteLength'], + (v46.artifactSummaries || []).map((/** @type {any} */ artifact) => [ + markdownCode(artifact.artifactPath), + markdownCode(artifact.digest), + artifact.byteLength + ]) + )); + lines.push(''); + } if (v20) { lines.push('## V20 Operator Quality Reports'); lines.push(''); @@ -11315,6 +11338,123 @@ function buildV45ProvenPackage(baseData, { }; } +/** + * @param {{ + * generatedAt: string + * }} input + */ +function buildV46PromotionReadinessReport({ generatedAt }) { + return buildV46PromotionReadinessReportArtifact({ + generatedAt, + repoRoot: REPO_ROOT + }); +} + +/** + * @param {any} baseData + * @param {{ + * generatedAt: string, + * inheritedV19: any, + * inheritedV20: any + * }} input + */ +function buildV46ProvenPackage(baseData, { + generatedAt, + inheritedV19, + inheritedV20 +}) { + const draftPreview = ACTIVE_CANON_VERSION !== 'V46'; + const specFamilyReport = buildV21SpecFamilyReport({ + version: 'V46', + mode: draftPreview ? 'draft' : 'promoted', + ...(draftPreview ? { currentTarget: ACTIVE_CANON_VERSION } : { currentTarget: 'V46' }) + }); + const assumedArtifactPaths = [ + 'BITCODE_SPEC_V46_PROVEN.md', + '.bitcode/v46-spec-family-report.json', + '.bitcode/v46-canonical-input-report.json', + '.bitcode/v46-canon-posture-drift-report.json', + '.bitcode/v46-protocol-comprehension-object-model.json', + '.bitcode/v46-public-operator-claim-boundaries.json', + '.bitcode/v46-product-route-comprehension-readback.json', + '.bitcode/v46-interface-claim-contracts.json', + '.bitcode/v46-proof-readback-operator-explanation.json', + '.bitcode/v46-local-interface-comprehension-rehearsal.json', + V46_PROMOTION_READINESS_ARTIFACT_PATH + ]; + const canonicalInputReport = buildV21CanonicalInputReport({ + currentTarget: 'V46', + reportVersion: 'V46', + ...(draftPreview + ? { + skipPointerCheck: true, + assumeExistingRelativePaths: assumedArtifactPaths + } + : { assumeExistingRelativePaths: assumedArtifactPaths }) + }); + const canonPostureDriftReport = buildCanonPostureDriftReport({ + version: 'V46', + activeCanonVersion: draftPreview ? ACTIVE_CANON_VERSION : 'V46', + draftTargetVersion: draftPreview ? 'V46' : 'V47', + proofSourceCommit: baseData.canonicalCommit, + generatedAt, + generatorId: baseData.generatorId, + worktreeState: baseData.worktreeState + }); + const promotionReadinessReport = buildV46PromotionReadinessReport({ + generatedAt + }); + const artifacts = { + ...buildCanonPostureGeneratedArtifactContents({ + version: 'V46', + proofSourceCommit: baseData.canonicalCommit, + generatedAt, + generatorId: baseData.generatorId, + worktreeState: baseData.worktreeState, + specFamilyReport, + canonicalInputReport, + canonPostureDriftReport + }), + [V46_PROMOTION_READINESS_ARTIFACT_PATH]: `${JSON.stringify(promotionReadinessReport, null, 2)}\n` + }; + const artifactSummaries = summarizeArtifactContents(artifacts); + const promotionReady = specFamilyReport.passed === true + && canonicalInputReport.passed === true + && canonPostureDriftReport.passed === true + && promotionReadinessReport.passed === true; + const data = { + ...baseData, + v19: inheritedV19, + v20: inheritedV20, + v46: { + specFamilyReport, + canonicalInputReport, + canonPostureDriftReport, + promotionReadinessReport, + artifactSummaries, + draftPreview, + promotionReady, + activeCanonicalTarget: ACTIVE_CANON_VERSION, + nextDraftTarget: 'V47' + }, + aggregate: { + ...baseData.aggregate, + fullyProven: baseData.aggregate.fullyProven + && inheritedV19?.deterministicReplayReport?.passed === true + && inheritedV19?.volatilityInventory?.passed === true + && inheritedV19?.contractChangeLedger?.passed === true + && inheritedV20?.qualitySummary?.passed === true + && promotionReady + && specFamilyReport.mode === 'promoted' + } + }; + return { + data, + markdown: renderCanonicalProvenMarkdown(data), + artifacts + }; +} + /** * @param {{ * version: string, @@ -12563,6 +12703,58 @@ export function generateCanonicalProvenMarkdown({ finishGenerateProfile(); return v45Package; } + if (version === 'V46') { + const inheritedV19BaseData = buildBaseCanonicalProvenData({ + version: 'V19', + canonicalCommit, + canonicalCommitRecordedAt, + generatedAt, + worktreeState, + generatorId, + branchModes, + buildInitialStateFn, + runMakeBitcodeBranchFn, + ...(scenarioIds ? { scenarioIds } : {}) + }); + const inheritedV19Package = buildV19DeterministicProvenPackage(inheritedV19BaseData, { + version: 'V19', + canonicalCommit, + canonicalCommitRecordedAt, + generatedAt, + worktreeState, + generatorId, + branchModes, + buildInitialStateFn, + runMakeBitcodeBranchFn, + renderMarkdown: false, + ...(scenarioIds ? { scenarioIds } : {}) + }); + const inheritedV20BaseData = buildBaseCanonicalProvenData({ + version: 'V20', + canonicalCommit, + canonicalCommitRecordedAt, + generatedAt, + worktreeState, + generatorId, + branchModes, + buildInitialStateFn, + runMakeBitcodeBranchFn, + ...(scenarioIds ? { scenarioIds } : {}) + }); + const inheritedV20Package = buildV20ProvenPackage(inheritedV20BaseData, { + version: 'V20', + generatedAt, + inheritedV19: inheritedV19Package.data.v19, + renderMarkdown: false + }); + const v46Package = buildV46ProvenPackage(baseData, { + generatedAt, + inheritedV19: inheritedV19Package.data.v19, + inheritedV20: inheritedV20Package.data.v20 + }); + finishGenerateProfile(); + return v46Package; + } const v18Matrices = version === 'V18' ? buildV18Matrices(baseData, { version, diff --git a/packages/protocol/src/canonical/public-docs-usage-guide-catalog.js b/packages/protocol/src/canonical/public-docs-usage-guide-catalog.js index 1c0b0f581..cedb8f407 100644 --- a/packages/protocol/src/canonical/public-docs-usage-guide-catalog.js +++ b/packages/protocol/src/canonical/public-docs-usage-guide-catalog.js @@ -91,7 +91,7 @@ const guideRows = Object.freeze([ }, { guideId: 'protocol_usage', - publicRoute: '/docs/protocol-v26', + publicRoute: '/docs/protocol', title: 'Protocol usage guide', audience: ['protocol_reviewers', 'contributors', 'enterprise_reviewers'], guideIntent: 'Connect public users to the active Protocol model without treating generated proof or source artifacts as public payloads.', @@ -103,7 +103,7 @@ const guideRows = Object.freeze([ 'uapi/app/docs/bitcode-docs-content.ts', ], packageSurfaces: ['packages/protocol/src/index.js', 'packages/protocol/src/canonical/v21-specifying.js'], - docsSections: ['protocol-v26', 'proofs', 'settlement-btd'], + docsSections: ['protocol', 'proofs', 'settlement-btd'], proofSignals: ['active canon pointer', 'draft family status', 'generated artifact inventory'], disclosureNotes: [ 'Protocol docs may expose rule names, proof families, and source-safe generated artifact names.', @@ -268,7 +268,7 @@ const guideRows = Object.freeze([ 'packages/protocol/README.md', ], packageSurfaces: ['packages/protocol/src', 'scripts/generate-bitcode-proven.mjs'], - docsSections: ['proofs', 'protocol-v26'], + docsSections: ['proofs', 'protocol'], proofSignals: ['witness artifact', 'replay command', 'redaction state'], disclosureNotes: [ 'Proof docs may expose proof roots, replay commands, generated artifact names, and fail-closed causes.', diff --git a/packages/protocol/src/canonical/v21-specifying.js b/packages/protocol/src/canonical/v21-specifying.js index 7d6ebf94a..242ccdc0d 100644 --- a/packages/protocol/src/canonical/v21-specifying.js +++ b/packages/protocol/src/canonical/v21-specifying.js @@ -541,6 +541,17 @@ function buildV21LikeProfile(version) { '.bitcode/v45-promotion-readiness-report.json' ] : []), + ...(version === 'V46' + ? [ + '.bitcode/v46-protocol-comprehension-object-model.json', + '.bitcode/v46-public-operator-claim-boundaries.json', + '.bitcode/v46-product-route-comprehension-readback.json', + '.bitcode/v46-interface-claim-contracts.json', + '.bitcode/v46-proof-readback-operator-explanation.json', + '.bitcode/v46-local-interface-comprehension-rehearsal.json', + '.bitcode/v46-promotion-readiness-report.json' + ] + : []), ...(version === 'V26' ? [ '.bitcode/terminal-composition-proof.json', @@ -1793,6 +1804,9 @@ function buildRequiredCanonicalArtifacts(repoRoot, currentTarget) { if (currentTarget === 'V45') { artifacts.push(...buildV21LikeProfile('V45').requiredGeneratedArtifactPaths); } + if (currentTarget === 'V46') { + artifacts.push(...buildV21LikeProfile('V46').requiredGeneratedArtifactPaths); + } return artifacts.map((relativePath) => path.join(repoRoot, relativePath)); } diff --git a/packages/protocol/src/canonical/v43-deposit-option-admission.js b/packages/protocol/src/canonical/v43-deposit-option-admission.js index c9eed4197..472291c78 100644 --- a/packages/protocol/src/canonical/v43-deposit-option-admission.js +++ b/packages/protocol/src/canonical/v43-deposit-option-admission.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -139,7 +141,7 @@ function buildPredicateResults(repoRoot) { ); return [ - predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === 'V42'), + predicateResult('active-canon-pointer-supports-v43-draft-or-later', SOURCE_ROOTS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V42')), predicateResult('spec-defines-gate7', SOURCE_ROOTS.spec, sources.spec.includes('V43 Gate 7 Deposit Option Review, Approval, And Admission')), predicateResult('spec-names-admission-report', SOURCE_ROOTS.spec, sources.spec.includes('DepositAssetPackOptionAdmissionReport') && sources.spec.includes('DepositOptionAdmissionReceipt')), predicateResult('delta-records-gate7', SOURCE_ROOTS.delta, sources.delta.includes('Gate 7') && sources.delta.includes('v43-deposit-option-admission')), @@ -155,7 +157,12 @@ function buildPredicateResults(repoRoot) { predicateResult('admission-model-defines-packs-sync', SOURCE_ROOTS.admissionModel, sources.admissionModel.includes('packsActivitySync') && sources.admissionModel.includes("'depository-assetpack'")), predicateResult('admission-model-defines-telemetry', SOURCE_ROOTS.admissionModel, sources.admissionModel.includes("eventType: 'deposit-option-admission'") && sources.admissionModel.includes("channel: 'execution-stream'")), predicateResult('admission-model-forbids-source-leakage', SOURCE_ROOTS.admissionModel, sources.admissionModel.includes('protectedSourceVisible: false') && sources.admissionModel.includes('rawProviderResponseVisible: false') && sources.admissionModel.includes('settlementPrivatePayloadVisible: false')), - predicateResult('route-model-owns-admission', SOURCE_ROOTS.routeModel, sources.routeModel.includes('DepositAssetPackOptionAdmissionReport') && sources.routeModel.includes('admissionAndIndexingOwnedByGate7')), + predicateResult( + 'route-model-owns-admission', + SOURCE_ROOTS.routeModel, + sources.routeModel.includes('DepositAssetPackOptionAdmissionReport') && + sources.routeModel.includes('admissionAndIndexingPolicyPresent: true'), + ), predicateResult('deposit-client-renders-admission', SOURCE_ROOTS.client, sources.client.includes('DepositAssetPackOptionAdmissionReport') && sources.client.includes('Approve for Depository') && sources.client.includes('Resynthesis queued')), predicateResult('pack-activity-recognizes-admission', SOURCE_ROOTS.packActivityModel, sources.packActivityModel.includes('deposit-option-admission') && sources.packActivityModel.includes('depository-assetpack')), predicateResult('asset-pack-package-exports-admission', SOURCE_ROOTS.packageIndex, sources.packageIndex.includes("export * from './deposit-asset-pack-option-admission'")), diff --git a/packages/protocol/src/canonical/v43-deposit-policy-compensation.js b/packages/protocol/src/canonical/v43-deposit-policy-compensation.js index c6466d859..ba6197602 100644 --- a/packages/protocol/src/canonical/v43-deposit-policy-compensation.js +++ b/packages/protocol/src/canonical/v43-deposit-policy-compensation.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -138,7 +140,7 @@ function buildPredicateResults(repoRoot) { ); return [ - predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === 'V42'), + predicateResult('active-canon-pointer-supports-v43-draft-or-later', SOURCE_ROOTS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V42')), predicateResult('spec-defines-gate6', SOURCE_ROOTS.spec, sources.spec.includes('V43 Gate 6 Source Criticality, Demand, ROI, And Compensation Policy')), predicateResult('spec-names-policy-objects', SOURCE_ROOTS.spec, sources.spec.includes('DepositAssetPackOptionPolicy') && sources.spec.includes('BTD potential')), predicateResult('delta-records-gate6', SOURCE_ROOTS.delta, sources.delta.includes('Gate 6') && sources.delta.includes('v43-deposit-policy-compensation')), @@ -153,7 +155,13 @@ function buildPredicateResults(repoRoot) { predicateResult('policy-model-defines-btd-compensation', SOURCE_ROOTS.policyModel, sources.policyModel.includes('not-minted-until-future-need-fit-settlement') && sources.policyModel.includes('source-to-shares-largest-remainder')), predicateResult('policy-model-defers-gate7-admission', SOURCE_ROOTS.policyModel, sources.policyModel.includes('future-gate7-deposit-option-review') && sources.policyModel.includes('admissionAndIndexingOwnedBy')), predicateResult('policy-model-forbids-source-leakage', SOURCE_ROOTS.policyModel, sources.policyModel.includes('rawSourceTextVisible: false') && sources.policyModel.includes('settlementPrivatePayloadVisible: false') && sources.policyModel.includes('walletPrivateMaterialVisible: false')), - predicateResult('route-model-owns-policy', SOURCE_ROOTS.routeModel, sources.routeModel.includes('DepositAssetPackOptionPolicyReport') && sources.routeModel.includes('sourceCriticalityDemandRoiPolicyOwnedByGate6')), + predicateResult( + 'route-model-owns-policy', + SOURCE_ROOTS.routeModel, + sources.routeModel.includes('DepositAssetPackOptionPolicyReport') && + sources.routeModel.includes('sourceCriticalityDemandRoiPolicyPresent: true') && + sources.routeModel.includes('sourceCriticalityDemandRoiPolicySourceSafe: true'), + ), predicateResult('deposit-client-renders-policy', SOURCE_ROOTS.client, sources.client.includes('DepositAssetPackOptionPolicy') && includesWithWhitespace(sources.client, 'BTC source-to-shares preview')), predicateResult('asset-pack-package-exports-policy', SOURCE_ROOTS.packageIndex, sources.packageIndex.includes("export * from './deposit-asset-pack-option-policy'")), predicateResult('asset-pack-manifest-exports-policy', SOURCE_ROOTS.packageManifest, sources.packageManifest.includes('"./deposit-asset-pack-option-policy"')), diff --git a/packages/protocol/src/canonical/v43-deposit-route-options.js b/packages/protocol/src/canonical/v43-deposit-route-options.js index 42b349447..6f877592b 100644 --- a/packages/protocol/src/canonical/v43-deposit-route-options.js +++ b/packages/protocol/src/canonical/v43-deposit-route-options.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -148,7 +150,7 @@ function buildPredicateResults(repoRoot) { ); return [ - predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === 'V42'), + predicateResult('active-canon-pointer-supports-v43-draft-or-later', SOURCE_ROOTS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V42')), predicateResult('spec-defines-gate5', SOURCE_ROOTS.spec, sources.spec.includes('V43 Gate 5 Deposit Route And Agentic AssetPack Option Synthesis')), predicateResult('spec-names-deposit-option-objects', SOURCE_ROOTS.spec, sources.spec.includes('DepositAssetPackOption') && sources.spec.includes('DepositOptionSynthesisRequest')), predicateResult('delta-records-gate5', SOURCE_ROOTS.delta, sources.delta.includes('Gate 5') && sources.delta.includes('v43-deposit-route-options')), @@ -159,7 +161,15 @@ function buildPredicateResults(repoRoot) { predicateResult('protocol-readme-records-gate5', SOURCE_ROOTS.protocolReadme, sources.protocolReadme.includes('V43 Gate 5')), predicateResult('terminal-routes-define-deposit', SOURCE_ROOTS.terminalRoutes, sources.terminalRoutes.includes("DEPOSIT_ROUTE = '/deposit'") && sources.terminalRoutes.includes('buildDepositHref')), predicateResult('route-model-defines-deposit-session', SOURCE_ROOTS.routeModel, sources.routeModel.includes("schema: 'bitcode.deposit.route-session'") && sources.routeModel.includes('assertDepositRouteSessionSourceSafe')), - predicateResult('route-model-defines-pipeline-ownership', SOURCE_ROOTS.routeModel, sources.routeModel.includes('DepositAssetPackOptionSynthesis') && sources.routeModel.includes('sourceCriticalityDemandRoiPolicyDeferredToGate6')), + predicateResult( + 'route-model-defines-pipeline-ownership', + SOURCE_ROOTS.routeModel, + sources.routeModel.includes('DepositAssetPackOptionSynthesis') && + sources.routeModel.includes("depositOptionPolicy: 'DepositAssetPackOptionPolicy'") && + sources.routeModel.includes("depositOptionAdmission: 'DepositAssetPackOptionAdmissionReport'") && + sources.routeModel.includes('sourceCriticalityDemandRoiPolicyPresent: true') && + sources.routeModel.includes('admissionAndIndexingPolicyPresent: true'), + ), predicateResult('route-model-forbids-source-leakage', SOURCE_ROOTS.routeModel, sources.routeModel.includes('protectedSourceVisible: false') && sources.routeModel.includes('rawSourceTextVisible: false') && sources.routeModel.includes('unpaidAssetPackSourceVisible: false')), predicateResult('deposit-page-canonical-route', SOURCE_ROOTS.page, sources.page.includes("canonical: '/deposit'") && sources.page.includes('DepositPageClient')), predicateResult( diff --git a/packages/protocol/src/canonical/v43-packs-activity-master-detail.js b/packages/protocol/src/canonical/v43-packs-activity-master-detail.js index 3cddeed2c..c558fb1eb 100644 --- a/packages/protocol/src/canonical/v43-packs-activity-master-detail.js +++ b/packages/protocol/src/canonical/v43-packs-activity-master-detail.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -190,7 +192,7 @@ function buildPredicateResults(repoRoot) { ); return [ - predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === 'V42'), + predicateResult('active-canon-pointer-supports-v43-draft-or-later', SOURCE_ROOTS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V42')), predicateResult('spec-defines-gate3', SOURCE_ROOTS.spec, sources.spec.includes('V43 Gate 3 Packs Activity Master-Detail Data Model')), predicateResult('spec-names-packactivity-contracts', SOURCE_ROOTS.spec, sources.spec.includes('PackActivity data contracts')), predicateResult('delta-records-gate3', SOURCE_ROOTS.delta, sources.delta.includes('Gate 3') && sources.delta.includes('v43-packs-activity-master-detail')), diff --git a/packages/protocol/src/canonical/v43-read-route-five-step-ux.js b/packages/protocol/src/canonical/v43-read-route-five-step-ux.js index cdd110056..5c5ef533f 100644 --- a/packages/protocol/src/canonical/v43-read-route-five-step-ux.js +++ b/packages/protocol/src/canonical/v43-read-route-five-step-ux.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -156,7 +158,7 @@ function buildPredicateResults(repoRoot) { ); return [ - predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === 'V42'), + predicateResult('active-canon-pointer-supports-v43-draft-or-later', SOURCE_ROOTS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V42')), predicateResult('spec-defines-gate4', SOURCE_ROOTS.spec, sources.spec.includes('V43 Gate 4 Read Route Extraction And Five-Step UX')), predicateResult('spec-names-read-route-objects', SOURCE_ROOTS.spec, sources.spec.includes('ReadRouteSession') && sources.spec.includes('Finding Fits request')), predicateResult('delta-records-gate4', SOURCE_ROOTS.delta, sources.delta.includes('Gate 4') && sources.delta.includes('v43-read-route-five-step-ux')), diff --git a/packages/protocol/src/canonical/v43-route-ux-product-excellence.js b/packages/protocol/src/canonical/v43-route-ux-product-excellence.js index 2a79d8502..9e8de6725 100644 --- a/packages/protocol/src/canonical/v43-route-ux-product-excellence.js +++ b/packages/protocol/src/canonical/v43-route-ux-product-excellence.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -132,7 +134,7 @@ function buildPredicateResults(repoRoot) { const productCopy = [sources.packsClient, sources.readClient, sources.depositClient].join('\n'); return [ - predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === 'V42'), + predicateResult('active-canon-pointer-supports-v43-draft-or-later', SOURCE_ROOTS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V42')), predicateResult('spec-defines-gate8', SOURCE_ROOTS.spec, sources.spec.includes('V43 Gate 8 UX/UI Product Excellence Pass')), predicateResult('spec-records-shared-route-shell', SOURCE_ROOTS.spec, sources.spec.includes('ProductRouteShell') && sources.spec.includes('ProductRouteStepGrid')), predicateResult('delta-records-gate8', SOURCE_ROOTS.delta, sources.delta.includes('Gate 8') && sources.delta.includes('v43-route-ux-product-excellence')), diff --git a/packages/protocol/src/canonical/v43-route-vocabulary-inventory.js b/packages/protocol/src/canonical/v43-route-vocabulary-inventory.js index 396fd3a20..e1a41d1f8 100644 --- a/packages/protocol/src/canonical/v43-route-vocabulary-inventory.js +++ b/packages/protocol/src/canonical/v43-route-vocabulary-inventory.js @@ -6,6 +6,8 @@ import { existsSync, readdirSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -403,7 +405,7 @@ function buildPredicateResults(repoRoot, scan) { predicateResult( 'active-canon-pointer-supports-v43-route-migration-posture', 'BITCODE_SPEC.txt', - ['V42', 'V43', 'V44', 'V45'].includes(readSource(repoRoot, 'BITCODE_SPEC.txt').trim()), + bitcodeVersionAtLeast(readSource(repoRoot, 'BITCODE_SPEC.txt'), 'V42'), ), predicateResult('spec-defines-gate2-inventory', 'BITCODE_SPEC_V43.md', spec.includes('V43 Gate 2') && spec.includes('route vocabulary inventory')), predicateResult('spec-defines-migration-matrix', 'BITCODE_SPEC_V43.md', spec.includes('migration matrix') && spec.includes('retained debug cockpit')), diff --git a/packages/protocol/src/canonical/v44-btd-btc-compensation-statements.js b/packages/protocol/src/canonical/v44-btd-btc-compensation-statements.js index cebca7f18..6cea7c359 100644 --- a/packages/protocol/src/canonical/v44-btd-btc-compensation-statements.js +++ b/packages/protocol/src/canonical/v44-btd-btc-compensation-statements.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -195,7 +197,7 @@ function buildPredicateResults(repoRoot) { predicateResult( 'active-canon-pointer-supports-v44-draft-or-promoted', SOURCE_ROOTS.activePointer, - ['V43', 'V44', 'V45'].includes(sources.activePointer.trim()), + bitcodeVersionAtLeast(sources.activePointer, 'V43'), ), predicateResult('spec-defines-gate6', SOURCE_ROOTS.spec, sources.spec.includes('V44 Gate 6 BTD/BTC Accounting And Contributor Compensation Statements')), predicateResult('spec-names-gate6-artifact', SOURCE_ROOTS.spec, sources.spec.includes('v44-btd-btc-compensation-statements')), diff --git a/packages/protocol/src/canonical/v44-depositor-earnings-supply-opportunities.js b/packages/protocol/src/canonical/v44-depositor-earnings-supply-opportunities.js index 15ad4696c..e46e34929 100644 --- a/packages/protocol/src/canonical/v44-depositor-earnings-supply-opportunities.js +++ b/packages/protocol/src/canonical/v44-depositor-earnings-supply-opportunities.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -163,7 +165,7 @@ function buildPredicateResults(repoRoot) { predicateResult( 'active-canon-pointer-supports-v44-draft-or-promoted', SOURCE_ROOTS.activePointer, - ['V43', 'V44', 'V45'].includes(sources.activePointer.trim()), + bitcodeVersionAtLeast(sources.activePointer, 'V43'), ), predicateResult('spec-defines-gate5', SOURCE_ROOTS.spec, sources.spec.includes('V44 Gate 5 Depositor Earnings, ROI, And Supply Opportunity Intelligence')), predicateResult('spec-names-gate5-artifact', SOURCE_ROOTS.spec, sources.spec.includes('v44-depositor-earnings-supply-opportunities')), diff --git a/packages/protocol/src/canonical/v44-economic-domain-model.js b/packages/protocol/src/canonical/v44-economic-domain-model.js index 4955dc3bd..4a2af9254 100644 --- a/packages/protocol/src/canonical/v44-economic-domain-model.js +++ b/packages/protocol/src/canonical/v44-economic-domain-model.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -341,7 +343,7 @@ function buildPredicateResults(repoRoot) { predicateResult( 'active-canon-pointer-supports-v44-draft-or-promoted', SOURCE_ROOTS.activePointer, - ['V43', 'V44'].includes(sources.activePointer.trim()), + bitcodeVersionAtLeast(sources.activePointer, 'V43'), ), predicateResult('spec-defines-gate2', SOURCE_ROOTS.spec, sources.spec.includes('V44 Gate 2 Economic Domain Model And Receipt Taxonomy')), predicateResult('spec-names-domain-artifact', SOURCE_ROOTS.spec, sources.spec.includes('v44-economic-domain-model')), diff --git a/packages/protocol/src/canonical/v44-enterprise-product-ux.js b/packages/protocol/src/canonical/v44-enterprise-product-ux.js index 8e13502a1..12c749675 100644 --- a/packages/protocol/src/canonical/v44-enterprise-product-ux.js +++ b/packages/protocol/src/canonical/v44-enterprise-product-ux.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -182,7 +184,7 @@ function buildPredicateResults(repoRoot) { predicateResult( 'active-canon-pointer-supports-v44-draft-or-promoted', SOURCE_ROOTS.activePointer, - ['V43', 'V44'].includes(sources.activePointer.trim()), + bitcodeVersionAtLeast(sources.activePointer, 'V43'), ), predicateResult( 'spec-defines-gate8', diff --git a/packages/protocol/src/canonical/v44-organization-policy-wallet-authority.js b/packages/protocol/src/canonical/v44-organization-policy-wallet-authority.js index f56ee12ab..909bed387 100644 --- a/packages/protocol/src/canonical/v44-organization-policy-wallet-authority.js +++ b/packages/protocol/src/canonical/v44-organization-policy-wallet-authority.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -199,7 +201,7 @@ function buildPredicateResults(repoRoot) { predicateResult( 'active-canon-pointer-supports-v44-draft-or-promoted', SOURCE_ROOTS.activePointer, - ['V43', 'V44', 'V45'].includes(sources.activePointer.trim()), + bitcodeVersionAtLeast(sources.activePointer, 'V43'), ), predicateResult('spec-defines-gate7', SOURCE_ROOTS.spec, sources.spec.includes('V44 Gate 7 Organization Policy, Approval, And Wallet Authority')), predicateResult('spec-names-gate7-artifact', SOURCE_ROOTS.spec, sources.spec.includes('v44-organization-policy-wallet-authority')), diff --git a/packages/protocol/src/canonical/v44-packs-portfolio-market-intelligence.js b/packages/protocol/src/canonical/v44-packs-portfolio-market-intelligence.js index 5c904ae4b..5886ed922 100644 --- a/packages/protocol/src/canonical/v44-packs-portfolio-market-intelligence.js +++ b/packages/protocol/src/canonical/v44-packs-portfolio-market-intelligence.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -139,7 +141,7 @@ function buildPredicateResults(repoRoot) { predicateResult( 'active-canon-pointer-supports-v44-draft-or-promoted', SOURCE_ROOTS.activePointer, - ['V43', 'V44'].includes(sources.activePointer.trim()), + bitcodeVersionAtLeast(sources.activePointer, 'V43'), ), predicateResult('spec-defines-gate3', SOURCE_ROOTS.spec, sources.spec.includes('V44 Gate 3 Packs Portfolio Search And Market Intelligence')), predicateResult('spec-names-gate3-artifact', SOURCE_ROOTS.spec, sources.spec.includes('v44-packs-portfolio-market-intelligence')), diff --git a/packages/protocol/src/canonical/v44-reading-budget-quote-policy.js b/packages/protocol/src/canonical/v44-reading-budget-quote-policy.js index feeaa7053..4085666e5 100644 --- a/packages/protocol/src/canonical/v44-reading-budget-quote-policy.js +++ b/packages/protocol/src/canonical/v44-reading-budget-quote-policy.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -162,7 +164,7 @@ function buildPredicateResults(repoRoot) { predicateResult( 'active-canon-pointer-supports-v44-draft-or-promoted', SOURCE_ROOTS.activePointer, - ['V43', 'V44', 'V45'].includes(sources.activePointer.trim()), + bitcodeVersionAtLeast(sources.activePointer, 'V43'), ), predicateResult('spec-defines-gate4', SOURCE_ROOTS.spec, sources.spec.includes('V44 Gate 4 Reading Budget, Quote Policy, And Procurement Governance')), predicateResult('spec-names-gate4-artifact', SOURCE_ROOTS.spec, sources.spec.includes('v44-reading-budget-quote-policy')), diff --git a/packages/protocol/src/canonical/v44-scaled-network-rehearsal.js b/packages/protocol/src/canonical/v44-scaled-network-rehearsal.js index 88f039851..8329cc8ce 100644 --- a/packages/protocol/src/canonical/v44-scaled-network-rehearsal.js +++ b/packages/protocol/src/canonical/v44-scaled-network-rehearsal.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -286,7 +288,7 @@ function buildPredicateResults(repoRoot) { predicateResult( 'active-canon-pointer-supports-v44-draft-or-promoted', SOURCE_ROOTS.activePointer, - ['V43', 'V44'].includes(sources.activePointer.trim()), + bitcodeVersionAtLeast(sources.activePointer, 'V43'), ), predicateResult('gate2-artifact-passed', SOURCE_ROOTS.gate2Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate2Artifact, 'v44-economic-domain-model')), predicateResult('gate3-artifact-passed', SOURCE_ROOTS.gate3Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate3Artifact, 'v44-packs-portfolio-market-intelligence')), diff --git a/packages/protocol/src/canonical/v45-source-safe-e2e-rehearsal.js b/packages/protocol/src/canonical/v45-source-safe-e2e-rehearsal.js index 6d4327139..4308310f2 100644 --- a/packages/protocol/src/canonical/v45-source-safe-e2e-rehearsal.js +++ b/packages/protocol/src/canonical/v45-source-safe-e2e-rehearsal.js @@ -5,6 +5,8 @@ import { existsSync, readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import { bitcodeVersionAtLeast } from './version-posture.js'; + const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); @@ -288,7 +290,7 @@ function buildPredicateResults(repoRoot) { ); return [ - predicateResult('active-canon-pointer-is-v45', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === 'V45'), + predicateResult('active-canon-pointer-supports-v45-or-later', SOURCE_ROOTS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V45')), predicateResult('v45-spec-defines-proof-and-rehearsal-law', SOURCE_ROOTS.spec, sources.spec.includes('V45 proof-family canon') && sources.spec.includes('rehearsal')), predicateResult('v45-parity-defines-gate17', SOURCE_ROOTS.parity, sources.parity.includes('Gate 17: Source-Safe End-To-End Rehearsal') && sources.parity.includes('check:v45-gate17')), predicateResult('v45-notes-allow-rehearsal-gates', SOURCE_ROOTS.notes, sources.notes.includes('| `rehearsal` |') && sources.notes.includes('replayable receipts')), diff --git a/packages/protocol/src/canonical/v46-interface-claim-contracts.js b/packages/protocol/src/canonical/v46-interface-claim-contracts.js new file mode 100644 index 000000000..4a752a45f --- /dev/null +++ b/packages/protocol/src/canonical/v46-interface-claim-contracts.js @@ -0,0 +1,603 @@ +// @ts-check + +import crypto from 'node:crypto'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { bitcodeVersionAtLeast } from './version-posture.js'; +import { + V46_PROTOCOL_CLAIM_AUTHORITY_IDS, + V46_PROTOCOL_CLAIM_CATEGORY_IDS, + V46_PROTOCOL_CLAIM_ROWS, + V46_PROTOCOL_PRIVATE_PAYLOAD_IDS, + V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS, +} from './v46-protocol-comprehension-object-model.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); + +export const V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH = + '.bitcode/v46-interface-claim-contracts.json'; +export const V46_INTERFACE_CLAIM_CONTRACTS_SCHEMA_ID = + 'bitcode.v46.interfaceClaimContracts.v1'; +export const V46_INTERFACE_CLAIM_CONTRACTS_VERSION = 'V46'; +export const V46_INTERFACE_CLAIM_CONTRACTS_CURRENT_TARGET = 'V45'; +export const V46_INTERFACE_CLAIM_CONTRACTS_SOURCE_SAFETY_VERDICT = + 'source-safe-interface-claim-contracts'; + +export const V46_INTERFACE_CLAIM_SURFACE_IDS = Object.freeze([ + 'public_api', + 'mcp_api', + 'chatgpt_app', + 'bitcode_chat', + 'package_consumer', +]); + +export const V46_INTERFACE_CLAIM_CAPABILITY_IDS = Object.freeze([ + 'source-safe-schema-compatibility', + 'tool-registry-contract', + 'action-registry-contract', + 'terminal-delegated-handoff', + 'proof-root-projection', + 'denied-state-repair', + 'no-parallel-state-authority', + 'source-safe-response-rendering', + 'protected-source-lock', + 'versionless-interface-paths', +]); + +const SOURCE_PATHS = Object.freeze({ + activePointer: 'BITCODE_SPEC.txt', + spec: 'BITCODE_SPEC_V46.md', + delta: 'BITCODE_SPEC_V46_DELTA.md', + notes: 'BITCODE_SPEC_V46_NOTES.md', + parity: 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + roadmap: 'SPECIFICATIONS_ROADMAP.md', + readme: 'README.md', + protocolReadme: 'packages/protocol/README.md', + packageJson: 'package.json', + packageIndex: 'packages/protocol/src/index.js', + packageTypes: 'packages/protocol/src/index.d.ts', + packageSource: 'packages/protocol/src/canonical/v46-interface-claim-contracts.js', + packageTest: 'packages/protocol/test/v46-interface-claim-contracts.test.js', + generator: 'scripts/generate-v46-interface-claim-contracts.mjs', + checker: 'scripts/check-v46-gate5-interface-claim-contracts.mjs', + gateWorkflow: '.github/workflows/bitcode-gate-quality.yml', + canonWorkflow: '.github/workflows/bitcode-canon-quality.yml', + btdApiSchema: 'packages/btd/src/api-schema-compatibility-matrix.ts', + btdApiSchemaTest: 'packages/btd/__tests__/api-schema-compatibility-matrix.test.ts', + btdMcpContract: 'packages/btd/src/mcp-tool-contract.ts', + btdMcpContractTest: 'packages/btd/__tests__/mcp-tool-contract.test.ts', + mcpIngressTest: 'packages/executions-mcp/src/mcp-server/src/__tests__/unit/pipeline-ingress-contract.test.ts', + mcpDocsReference: 'packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md', + btdChatGptContract: 'packages/btd/src/chatgpt-app-action-contract.ts', + btdChatGptContractTest: 'packages/btd/__tests__/chatgpt-app-action-contract.test.ts', + chatGptTools: 'packages/chatgptapp/src/tools.ts', + chatGptToolsTest: 'packages/chatgptapp/src/__tests__/chatgpt-action-contract.test.ts', + conversationRoute: 'packages/api/src/routes/conversations.ts', + conversationParityTest: 'uapi/tests/api/conversationReadingInterfaceParity.test.ts', + conversationHandoffTest: 'uapi/tests/conversationTerminalHandoff.test.tsx', + conversationStreamLogTest: 'uapi/tests/conversationStreamPipelineLog.test.tsx', + conversationSessionHistory: 'uapi/app/conversations/conversation-session-route-history.ts', + v39InterfaceParity: 'packages/protocol/src/canonical/v39-interface-conversation-product-parity.js', +}); + +export const V46_INTERFACE_CLAIM_CONTRACTS_SOURCE_ROOTS = Object.freeze({ ...SOURCE_PATHS }); + +const SECRET_MARKERS = Object.freeze([ + `${['sk', 'proj'].join('-')}-`, + `${['sb', 'secret'].join('_')}__`, + ['service', 'role'].join('_'), + ['eyJ', 'hbGciOiJI', 'UzI1NiIsInR5cCI6IkpXVCJ9'].join(''), + ['SUPABASE', 'SERVICE', 'ROLE'].join('_'), + ['OPENAI', 'API', 'KEY'].join('_'), + ['VERCEL', 'TOKEN'].join('_'), + ['VERCEL', 'OIDC', 'TOKEN'].join('_'), + ['PRIVATE', 'KEY'].join('_'), +]); + +const FORBIDDEN_INTERFACE_CLAIM_PHRASES = Object.freeze([ + 'BTD is money', + 'BTD is only a read right', + 'preview discloses source', + 'quote is payment', + 'payment observation is finality', + 'database is ledger truth', + 'telemetry advances state', + 'conversation advances state', + 'ChatGPT App advances state', + 'MCP advances state', + 'API advances state without proof', + 'server custodies wallet private material', + 'value-bearing mainnet operation is live', +]); + +function digest(value) { + return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24); +} + +function readSource(repoRoot, sourcePath) { + const absolutePath = path.join(repoRoot, sourcePath); + return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : ''; +} + +function sourceExists(repoRoot, sourcePath) { + return existsSync(path.join(repoRoot, sourcePath)); +} + +function sourceRoot(repoRoot, sourcePath) { + return `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`; +} + +function predicateResult(id, sourcePath, passed) { + return { id, sourcePath, passed: Boolean(passed) }; +} + +function scanSourcesForMarkers(repoRoot, sourcePaths, markers) { + const joined = sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return markers.filter((marker) => marker && joined.includes(marker)); +} + +function claimExists(claimId) { + return V46_PROTOCOL_CLAIM_ROWS.some((row) => row.claimId === claimId); +} + +function categoryExists(categoryId) { + return V46_PROTOCOL_CLAIM_CATEGORY_IDS.includes(categoryId); +} + +function authorityExists(authorityId) { + return V46_PROTOCOL_CLAIM_AUTHORITY_IDS.includes(authorityId); +} + +function requiredTokensPresent(repoRoot, row) { + const joined = row.sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return row.requiredCopyTokens.every((token) => joined.includes(token)); +} + +function interfaceRow({ + surfaceId, + surfaceLabel, + surfaceRole, + sourcePaths, + claimIds, + claimCategoryIds, + authorityIds, + capabilityIds, + requiredCopyTokens, + readbackRoots, + deniedStateRoots, + operatorReading, +}) { + return { + surfaceId, + surfaceLabel, + surfaceRole, + sourcePaths, + claimIds, + claimCategoryIds, + authorityIds, + capabilityIds, + requiredCopyTokens, + readbackRoots, + deniedStateRoots, + operatorReading, + noParallelStateAuthority: true, + stateAdvanceRequiresProof: true, + interfaceGuidanceOnly: true, + sourceSafeMetadataOnly: true, + proofRootProjectionRequired: true, + deniedStateRepairRequired: true, + protectedSourceVisible: false, + unpaidAssetPackSourceVisible: false, + rawPromptVisible: false, + interpolatedPromptVisible: false, + rawProviderResponseVisible: false, + credentialsSerialized: false, + walletPrivateMaterialVisible: false, + settlementPrivatePayloadVisible: false, + valueBearingMainnetAdmitted: false, + sourceSafeFieldIds: [...V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS], + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + rowRoot: `v46-interface-claim-contract-row:${digest(JSON.stringify({ surfaceId, sourcePaths, capabilityIds, readbackRoots }))}`, + }; +} + +export const V46_INTERFACE_CLAIM_CONTRACT_ROWS = Object.freeze([ + interfaceRow({ + surfaceId: 'public_api', + surfaceLabel: 'API', + surfaceRole: + 'versionless machine interface for schema-compatible source-safe requests, responses, and proof roots', + sourcePaths: [SOURCE_PATHS.btdApiSchema, SOURCE_PATHS.btdApiSchemaTest], + claimIds: [ + 'operator-evidence-is-source-safe-readback', + 'preview-is-source-safe-measurement', + 'quote-is-source-safe-offer', + 'finality-authorizes-rights-and-delivery', + 'repair-fails-closed', + 'telemetry-is-observability-only', + ], + claimCategoryIds: [ + 'product-guidance', + 'operator-evidence', + 'preview-claim', + 'quote-claim', + 'rights-claim', + 'repair-claim', + 'telemetry-observability', + ], + authorityIds: ['canonical-specification', 'generated-proof', 'database-projection', 'interface-guidance-only'], + capabilityIds: [ + 'source-safe-schema-compatibility', + 'proof-root-projection', + 'denied-state-repair', + 'no-parallel-state-authority', + 'protected-source-lock', + 'versionless-interface-paths', + ], + requiredCopyTokens: [ + 'BTD_API_SCHEMA_COMPATIBILITY_CONSUMER_SURFACES', + "'public_api'", + "versionlessPathDiscipline: 'enforced'", + 'protectedSourceSerialized: false', + 'missing consumer surfaces', + 'missing example postures', + ], + readbackRoots: ['matrixRoot', 'requestExampleRoot', 'responseExampleRoot'], + deniedStateRoots: ['breaking_change_denied', 'blocked_until_rights', 'stale_rejected', 'deferred_not_admitted'], + operatorReading: + 'API contracts expose source-safe schema compatibility and proof-root examples; they do not become ledger or delivery authority.', + }), + interfaceRow({ + surfaceId: 'mcp_api', + surfaceLabel: 'MCP', + surfaceRole: + 'tool-call interface for source-safe AssetPack pipeline ingress under API-key, permission, provider-binding, and schema policy', + sourcePaths: [ + SOURCE_PATHS.btdMcpContract, + SOURCE_PATHS.btdMcpContractTest, + SOURCE_PATHS.mcpIngressTest, + SOURCE_PATHS.mcpDocsReference, + ], + claimIds: [ + 'assetpack-is-commodity', + 'operator-evidence-is-source-safe-readback', + 'preview-is-source-safe-measurement', + 'finality-authorizes-rights-and-delivery', + 'repair-fails-closed', + 'telemetry-is-observability-only', + ], + claimCategoryIds: [ + 'protocol-law', + 'product-guidance', + 'operator-evidence', + 'preview-claim', + 'rights-claim', + 'repair-claim', + 'telemetry-observability', + ], + authorityIds: ['canonical-specification', 'generated-proof', 'telemetry-observability-only', 'interface-guidance-only'], + capabilityIds: [ + 'tool-registry-contract', + 'source-safe-schema-compatibility', + 'proof-root-projection', + 'denied-state-repair', + 'no-parallel-state-authority', + 'protected-source-lock', + ], + requiredCopyTokens: [ + 'bitcode://pipelines/asset-pack/create', + 'interface.authorization.pipeline-permission', + 'pipelines.create', + 'protected-source-locked', + 'writeAdmission', + 'PROVIDER_BINDING_REQUIRED', + 'ReadingInterfaceProductParity', + 'mcp_api', + ], + readbackRoots: ['contractRoot', 'requestRoot', 'responseRoot', 'writeAdmission'], + deniedStateRoots: [ + 'MISSING_API_KEY', + 'INSUFFICIENT_PERMISSIONS', + 'PROVIDER_BINDING_REQUIRED', + 'SCHEMA_VALIDATION_FAILED', + 'RATE_LIMITED', + 'UNKNOWN_TOOL', + ], + operatorReading: + 'MCP may queue source-safe pipeline work through a package-owned tool contract, but settlement, rights, and delivery remain proof-gated.', + }), + interfaceRow({ + surfaceId: 'chatgpt_app', + surfaceLabel: 'ChatGPT App', + surfaceRole: + 'conversational action surface for the Reading sequence with source-safe renderers, denied-state repairs, and explicit write admission', + sourcePaths: [ + SOURCE_PATHS.btdChatGptContract, + SOURCE_PATHS.btdChatGptContractTest, + SOURCE_PATHS.chatGptTools, + SOURCE_PATHS.chatGptToolsTest, + ], + claimIds: [ + 'btd-is-weighted-scalar-volume-and-settled-rights', + 'preview-is-source-safe-measurement', + 'quote-is-source-safe-offer', + 'payment-observation-is-not-finality', + 'finality-authorizes-rights-and-delivery', + 'delivery-is-entitled-source-unlock', + 'repair-fails-closed', + ], + claimCategoryIds: [ + 'protocol-law', + 'product-guidance', + 'preview-claim', + 'quote-claim', + 'settlement-claim', + 'rights-claim', + 'delivery-claim', + 'repair-claim', + ], + authorityIds: ['canonical-specification', 'generated-proof', 'wallet-provider-receipt', 'repository-delivery-receipt', 'interface-guidance-only'], + capabilityIds: [ + 'action-registry-contract', + 'source-safe-response-rendering', + 'proof-root-projection', + 'denied-state-repair', + 'no-parallel-state-authority', + 'protected-source-lock', + ], + requiredCopyTokens: [ + 'BTD_CHATGPT_APP_ACTION_CONTRACT_IDS', + 'bitcode_request_read', + 'bitcode_deliver_asset_pack', + 'chatgpt.sourceSafeRenderer', + 'writeAdmission', + 'Settlement finality is required', + 'Bitcode ChatGPT App write admission requires confirmed: true', + 'settle before delivery', + ], + readbackRoots: ['contractRoot', 'requestRoot', 'responseRoot', 'sourceSafeRendererId', 'writeAdmission'], + deniedStateRoots: ['READ_NEED_REQUIRED', 'FINDING_FITS_REQUIRED', 'SETTLEMENT_REQUIRED', 'READ_LICENSE_REQUIRED', 'CONFIRMATION_REQUIRED'], + operatorReading: + 'ChatGPT App actions guide the Reading sequence and render source-safe proof roots; they cannot expose locked AssetPack contents before settlement and rights transfer.', + }), + interfaceRow({ + surfaceId: 'bitcode_chat', + surfaceLabel: 'Bitcode Chat', + surfaceRole: + 'website conversation overlay for workflow assistance, stream readback, and Terminal-delegated Reading handoff', + sourcePaths: [ + SOURCE_PATHS.conversationRoute, + SOURCE_PATHS.conversationParityTest, + SOURCE_PATHS.conversationHandoffTest, + SOURCE_PATHS.conversationStreamLogTest, + SOURCE_PATHS.conversationSessionHistory, + ], + claimIds: [ + 'operator-evidence-is-source-safe-readback', + 'preview-is-source-safe-measurement', + 'finality-authorizes-rights-and-delivery', + 'delivery-is-entitled-source-unlock', + 'repair-fails-closed', + 'telemetry-is-observability-only', + ], + claimCategoryIds: [ + 'product-guidance', + 'operator-evidence', + 'preview-claim', + 'settlement-claim', + 'rights-claim', + 'delivery-claim', + 'repair-claim', + 'telemetry-observability', + ], + authorityIds: ['canonical-specification', 'generated-proof', 'telemetry-observability-only', 'interface-guidance-only'], + capabilityIds: [ + 'terminal-delegated-handoff', + 'source-safe-response-rendering', + 'proof-root-projection', + 'denied-state-repair', + 'no-parallel-state-authority', + 'protected-source-lock', + ], + requiredCopyTokens: [ + 'Conversation Reading interface parity', + 'terminal-delegated-handoff', + 'conversation.terminal-reading-handoff', + 'source_bearing_delivery_locked_until_settlement_and_rights', + 'Conversation stream proof roots anchored', + 'source_safe_conversation_stream_event_metadata', + 'source_safe_conversation_session_metadata', + 'Conversation write failed closed.', + ], + readbackRoots: ['proofRoot', 'conversationStreamEvent', 'persistencePrivacyProofRoot', 'terminalRoute'], + deniedStateRoots: ['acceptedNeedGate', 'deliveryBoundary', 'Conversation write failed closed'], + operatorReading: + 'Bitcode Chat is a source-safe conversation and handoff surface; Terminal/product routes and proof-backed receipts remain state authority.', + }), + interfaceRow({ + surfaceId: 'package_consumer', + surfaceLabel: 'Package Consumer', + surfaceRole: + 'package-level contract readback for consumers that need stable source-safe semantics without operational authority', + sourcePaths: [SOURCE_PATHS.btdApiSchema, SOURCE_PATHS.btdApiSchemaTest, SOURCE_PATHS.v39InterfaceParity], + claimIds: [ + 'assetpack-is-commodity', + 'btd-is-weighted-scalar-volume-and-settled-rights', + 'operator-evidence-is-source-safe-readback', + 'repair-fails-closed', + 'telemetry-is-observability-only', + ], + claimCategoryIds: ['protocol-law', 'operator-evidence', 'product-guidance', 'repair-claim', 'telemetry-observability'], + authorityIds: ['canonical-specification', 'generated-proof', 'interface-guidance-only'], + capabilityIds: [ + 'source-safe-schema-compatibility', + 'proof-root-projection', + 'denied-state-repair', + 'no-parallel-state-authority', + 'protected-source-lock', + 'versionless-interface-paths', + ], + requiredCopyTokens: [ + "'package_consumer'", + 'package-consumer-exchange-hook-deferred', + 'deferred_not_admitted', + 'packageConsumersReadContractsOnly', + 'parallelAuthorityCreated: false', + 'sameAuthorityAsTerminal: true', + ], + readbackRoots: ['matrixRoot', 'rowRoot', 'registryRoot'], + deniedStateRoots: ['deferred_not_admitted', 'packageConsumersReadContractsOnly'], + operatorReading: + 'Package consumers can inspect source-safe contracts and compatibility posture, but they cannot bypass website, API, settlement, rights, or delivery authority.', + }), +]); + +function buildPredicateResults(repoRoot) { + const spec = readSource(repoRoot, SOURCE_PATHS.spec); + const delta = readSource(repoRoot, SOURCE_PATHS.delta); + const notes = readSource(repoRoot, SOURCE_PATHS.notes); + const parity = readSource(repoRoot, SOURCE_PATHS.parity); + const roadmap = readSource(repoRoot, SOURCE_PATHS.roadmap); + const readme = readSource(repoRoot, SOURCE_PATHS.readme); + const protocolReadme = readSource(repoRoot, SOURCE_PATHS.protocolReadme); + const packageJson = readSource(repoRoot, SOURCE_PATHS.packageJson); + const packageIndex = readSource(repoRoot, SOURCE_PATHS.packageIndex); + const packageTypes = readSource(repoRoot, SOURCE_PATHS.packageTypes); + const packageSource = readSource(repoRoot, SOURCE_PATHS.packageSource); + const packageTest = readSource(repoRoot, SOURCE_PATHS.packageTest); + const generator = readSource(repoRoot, SOURCE_PATHS.generator); + const checker = readSource(repoRoot, SOURCE_PATHS.checker); + const gateWorkflow = readSource(repoRoot, SOURCE_PATHS.gateWorkflow); + const canonWorkflow = readSource(repoRoot, SOURCE_PATHS.canonWorkflow); + + return [ + predicateResult('active-pointer-supports-v46-draft-or-later', SOURCE_PATHS.activePointer, bitcodeVersionAtLeast(readSource(repoRoot, SOURCE_PATHS.activePointer), 'V45')), + predicateResult('spec-defines-gate5-law', SOURCE_PATHS.spec, spec.includes('V46 interface claim contract law') && spec.includes(V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH)), + predicateResult('delta-records-gate5', SOURCE_PATHS.delta, delta.includes('Gate 5: API/MCP, ChatGPT App, And Bitcode Chat Claim Contracts') && delta.includes(V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH)), + predicateResult('notes-records-gate5', SOURCE_PATHS.notes, notes.includes('V46 interface claim contract atom') && notes.includes('InterfaceClaim contracts')), + predicateResult('parity-records-gate5', SOURCE_PATHS.parity, parity.includes('V46InterfaceClaimContracts') && parity.includes(V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH)), + predicateResult( + 'roadmap-records-gate5-closure', + SOURCE_PATHS.roadmap, + roadmap.includes('V46 Gate 5 closure anchor') && + roadmap.includes('V46InterfaceClaimContracts') && + roadmap.includes(V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH), + ), + predicateResult('readmes-document-gate5', SOURCE_PATHS.readme, readme.includes('V46 Gate 5') && protocolReadme.includes('V46InterfaceClaimContracts')), + predicateResult('package-source-defines-surfaces', SOURCE_PATHS.packageSource, V46_INTERFACE_CLAIM_SURFACE_IDS.every((surfaceId) => packageSource.includes(`'${surfaceId}'`))), + predicateResult('package-source-defines-capabilities', SOURCE_PATHS.packageSource, V46_INTERFACE_CLAIM_CAPABILITY_IDS.every((capabilityId) => packageSource.includes(`'${capabilityId}'`))), + predicateResult('package-exports-gate5', SOURCE_PATHS.packageIndex, packageIndex.includes("v46-interface-claim-contracts.js") && packageTypes.includes('V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH')), + predicateResult('package-test-covers-gate5', SOURCE_PATHS.packageTest, packageTest.includes('V46 interface claim contracts') && packageTest.includes('bitcode_chat')), + predicateResult('generator-and-checker-exist', SOURCE_PATHS.generator, generator.includes('buildV46InterfaceClaimContracts') && checker.includes('V46 Gate 5 interface claim contracts check')), + predicateResult('package-json-scripts', SOURCE_PATHS.packageJson, packageJson.includes('generate:v46-interface-claim-contracts') && packageJson.includes('check:v46-gate5')), + predicateResult('workflows-run-gate5', SOURCE_PATHS.gateWorkflow, gateWorkflow.includes('check-v46-gate5-interface-claim-contracts.mjs') && canonWorkflow.includes('check-v46-gate5-interface-claim-contracts.mjs')), + predicateResult('btd-api-schema-binds-surfaces', SOURCE_PATHS.btdApiSchema, readSource(repoRoot, SOURCE_PATHS.btdApiSchema).includes('BTD_API_SCHEMA_COMPATIBILITY_CONSUMER_SURFACES')), + predicateResult('mcp-contract-binds-tool', SOURCE_PATHS.btdMcpContract, readSource(repoRoot, SOURCE_PATHS.btdMcpContract).includes('bitcode://pipelines/asset-pack/create')), + predicateResult('chatgpt-contract-binds-actions', SOURCE_PATHS.btdChatGptContract, readSource(repoRoot, SOURCE_PATHS.btdChatGptContract).includes('bitcode_request_finding_fits')), + predicateResult('conversation-binds-terminal-handoff', SOURCE_PATHS.conversationParityTest, readSource(repoRoot, SOURCE_PATHS.conversationParityTest).includes('conversation.terminal-reading-handoff')), + ]; +} + +export function buildV46InterfaceClaimContracts(input = {}) { + const repoRoot = input.repoRoot ? path.resolve(input.repoRoot) : DEFAULT_REPO_ROOT; + const rows = V46_INTERFACE_CLAIM_CONTRACT_ROWS.map((row) => ({ + ...row, + sourceRoots: row.sourcePaths.map((sourcePath) => sourceRoot(repoRoot, sourcePath)), + sourceFilesPresent: row.sourcePaths.every((sourcePath) => sourceExists(repoRoot, sourcePath)), + requiredCopyPresent: requiredTokensPresent(repoRoot, row), + })); + const sourcePathsToScan = [...new Set(rows.flatMap((row) => row.sourcePaths))]; + const predicateResults = buildPredicateResults(repoRoot); + const failedPredicateIds = predicateResults.filter((predicate) => !predicate.passed).map((predicate) => predicate.id); + const allClaimIds = rows.flatMap((row) => row.claimIds); + const allCategoryIds = rows.flatMap((row) => row.claimCategoryIds); + const allAuthorityIds = rows.flatMap((row) => row.authorityIds); + const allCapabilityIds = rows.flatMap((row) => row.capabilityIds); + const rowsMissingRequiredCopy = rows.filter((row) => !row.requiredCopyPresent).map((row) => row.surfaceId); + const rowsMissingSourceFiles = rows.filter((row) => !row.sourceFilesPresent).map((row) => row.surfaceId); + const forbiddenPhraseHits = scanSourcesForMarkers(repoRoot, sourcePathsToScan, FORBIDDEN_INTERFACE_CLAIM_PHRASES); + const secretMarkerHits = scanSourcesForMarkers(repoRoot, sourcePathsToScan, SECRET_MARKERS); + + const coverage = { + predicateCount: predicateResults.length, + failedPredicateIds, + allSurfacesCovered: V46_INTERFACE_CLAIM_SURFACE_IDS.every((surfaceId) => rows.some((row) => row.surfaceId === surfaceId)), + allClaimIdsKnown: allClaimIds.every(claimExists), + allCategoryIdsKnown: allCategoryIds.every(categoryExists), + allAuthorityIdsKnown: allAuthorityIds.every(authorityExists), + requiredCapabilitiesCovered: V46_INTERFACE_CLAIM_CAPABILITY_IDS.every((capabilityId) => allCapabilityIds.includes(capabilityId)), + sourceFilesPresent: rowsMissingSourceFiles.length === 0, + rowsMissingSourceFiles, + rowsMissingRequiredCopy, + allRowsRequireProofRootProjection: rows.every((row) => row.proofRootProjectionRequired === true), + allRowsRequireDeniedStateRepair: rows.every((row) => row.deniedStateRepairRequired === true), + noParallelStateAuthority: rows.every((row) => row.noParallelStateAuthority === true), + stateAdvanceRequiresProof: rows.every((row) => row.stateAdvanceRequiresProof === true), + sourceSafeMetadataOnly: rows.every((row) => row.sourceSafeMetadataOnly === true), + protectedSourceVisible: rows.some((row) => row.protectedSourceVisible), + unpaidAssetPackSourceVisible: rows.some((row) => row.unpaidAssetPackSourceVisible), + rawPromptVisible: rows.some((row) => row.rawPromptVisible), + interpolatedPromptVisible: rows.some((row) => row.interpolatedPromptVisible), + rawProviderResponseVisible: rows.some((row) => row.rawProviderResponseVisible), + credentialsSerialized: rows.some((row) => row.credentialsSerialized), + walletPrivateMaterialVisible: rows.some((row) => row.walletPrivateMaterialVisible), + settlementPrivatePayloadVisible: rows.some((row) => row.settlementPrivatePayloadVisible), + valueBearingMainnetAdmitted: rows.some((row) => row.valueBearingMainnetAdmitted), + forbiddenPhraseHits, + secretMarkerHits, + }; + + const artifactBody = { + surfaceIds: [...V46_INTERFACE_CLAIM_SURFACE_IDS], + capabilityIds: [...V46_INTERFACE_CLAIM_CAPABILITY_IDS], + rowRoots: rows.map((row) => row.rowRoot), + coverage, + }; + + const passed = + failedPredicateIds.length === 0 && + coverage.allSurfacesCovered && + coverage.allClaimIdsKnown && + coverage.allCategoryIdsKnown && + coverage.allAuthorityIdsKnown && + coverage.requiredCapabilitiesCovered && + coverage.sourceFilesPresent && + coverage.rowsMissingRequiredCopy.length === 0 && + coverage.allRowsRequireProofRootProjection && + coverage.allRowsRequireDeniedStateRepair && + coverage.noParallelStateAuthority && + coverage.stateAdvanceRequiresProof && + coverage.sourceSafeMetadataOnly && + coverage.protectedSourceVisible === false && + coverage.unpaidAssetPackSourceVisible === false && + coverage.rawPromptVisible === false && + coverage.interpolatedPromptVisible === false && + coverage.rawProviderResponseVisible === false && + coverage.credentialsSerialized === false && + coverage.walletPrivateMaterialVisible === false && + coverage.settlementPrivatePayloadVisible === false && + coverage.valueBearingMainnetAdmitted === false && + coverage.forbiddenPhraseHits.length === 0 && + coverage.secretMarkerHits.length === 0; + + return { + artifactId: 'v46-interface-claim-contracts', + schemaId: V46_INTERFACE_CLAIM_CONTRACTS_SCHEMA_ID, + version: V46_INTERFACE_CLAIM_CONTRACTS_VERSION, + currentTarget: V46_INTERFACE_CLAIM_CONTRACTS_CURRENT_TARGET, + sourceSafetyVerdict: V46_INTERFACE_CLAIM_CONTRACTS_SOURCE_SAFETY_VERDICT, + generatedAt: 'deterministic', + artifactRoot: `v46-interface-claim-contracts:${digest(JSON.stringify(artifactBody))}`, + sourceRoots: Object.fromEntries(Object.values(SOURCE_PATHS).map((sourcePath) => [sourcePath, sourceRoot(repoRoot, sourcePath)])), + surfaceIds: [...V46_INTERFACE_CLAIM_SURFACE_IDS], + capabilityIds: [...V46_INTERFACE_CLAIM_CAPABILITY_IDS], + interfaceRows: rows, + predicateResults, + coverage, + passed, + }; +} diff --git a/packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js b/packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js new file mode 100644 index 000000000..9291bacd7 --- /dev/null +++ b/packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js @@ -0,0 +1,663 @@ +// @ts-check + +import crypto from 'node:crypto'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { bitcodeVersionAtLeast } from './version-posture.js'; +import { + V46_PROTOCOL_CLAIM_AUTHORITY_IDS, + V46_PROTOCOL_CLAIM_CATEGORY_IDS, + V46_PROTOCOL_CLAIM_ROWS, + V46_PROTOCOL_PRIVATE_PAYLOAD_IDS, + V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS, +} from './v46-protocol-comprehension-object-model.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); + +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH = + '.bitcode/v46-local-interface-comprehension-rehearsal.json'; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SCHEMA_ID = + 'bitcode.v46.localInterfaceComprehensionRehearsal.v1'; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_VERSION = 'V46'; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_CURRENT_TARGET = 'V45'; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_SAFETY_VERDICT = + 'source-safe-local-interface-comprehension-rehearsal'; + +export const V46_LOCAL_INTERFACE_REHEARSAL_SURFACE_IDS = Object.freeze([ + 'docs_landing', + 'packs_route', + 'read_route', + 'deposit_route', + 'api_mcp', + 'chatgpt_bitcode_chat', + 'proof_telemetry_repair', +]); + +export const V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS = Object.freeze([ + 'load-local-source', + 'identify-interface-claims', + 'verify-source-safe-disclosure', + 'verify-evidence-authority', + 'verify-denied-state-repair', + 'emit-source-safe-rehearsal-root', +]); + +export const V46_LOCAL_INTERFACE_REHEARSAL_REQUIRED_ARTIFACT_IDS = Object.freeze([ + 'v46-protocol-comprehension-object-model', + 'v46-public-operator-claim-boundaries', + 'v46-product-route-comprehension-readback', + 'v46-interface-claim-contracts', + 'v46-proof-readback-operator-explanation', +]); + +const SOURCE_PATHS = Object.freeze({ + activePointer: 'BITCODE_SPEC.txt', + spec: 'BITCODE_SPEC_V46.md', + delta: 'BITCODE_SPEC_V46_DELTA.md', + notes: 'BITCODE_SPEC_V46_NOTES.md', + parity: 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + roadmap: 'SPECIFICATIONS_ROADMAP.md', + readme: 'README.md', + protocolReadme: 'packages/protocol/README.md', + packageJson: 'package.json', + packageIndex: 'packages/protocol/src/index.js', + packageTypes: 'packages/protocol/src/index.d.ts', + packageSource: 'packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js', + packageTest: 'packages/protocol/test/v46-local-interface-comprehension-rehearsal.test.js', + generator: 'scripts/generate-v46-local-interface-comprehension-rehearsal.mjs', + checker: 'scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs', + gateWorkflow: '.github/workflows/bitcode-gate-quality.yml', + canonWorkflow: '.github/workflows/bitcode-canon-quality.yml', + v46ProtocolArtifact: '.bitcode/v46-protocol-comprehension-object-model.json', + v46PublicArtifact: '.bitcode/v46-public-operator-claim-boundaries.json', + v46ProductArtifact: '.bitcode/v46-product-route-comprehension-readback.json', + v46InterfaceArtifact: '.bitcode/v46-interface-claim-contracts.json', + v46ProofArtifact: '.bitcode/v46-proof-readback-operator-explanation.json', + landingPage: 'uapi/app/page.tsx', + docsPage: 'uapi/app/docs/page.tsx', + docsContent: 'uapi/app/(root)/components/PublicDocsPageContent.tsx', + packsPage: 'uapi/app/packs/page.tsx', + packsClient: 'uapi/app/packs/PacksPageClient.tsx', + packActivityModel: 'uapi/components/base/bitcode/activity/pack-activity-model.ts', + readPage: 'uapi/app/read/page.tsx', + readClient: 'uapi/app/read/ReadPageClient.tsx', + depositPage: 'uapi/app/deposit/page.tsx', + depositClient: 'uapi/app/deposit/DepositPageClient.tsx', + btdApiSchema: 'packages/btd/src/api-schema-compatibility-matrix.ts', + btdMcpContract: 'packages/btd/src/mcp-tool-contract.ts', + mcpDocsReference: 'packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md', + btdChatGptContract: 'packages/btd/src/chatgpt-app-action-contract.ts', + chatGptTools: 'packages/chatgptapp/src/tools.ts', + conversationHandoff: 'uapi/app/conversations/conversation-terminal-handoff.ts', + conversationTelemetry: 'uapi/app/conversations/conversation-telemetry-proof-hooks.ts', + conversationParityTest: 'uapi/tests/api/conversationReadingInterfaceParity.test.ts', + pipelineLogUi: 'uapi/components/base/bitcode/execution/pipeline-execution-log.tsx', + v39OperationalTelemetryReadback: + 'packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js', + uapiLedgerStorageSync: 'uapi/app/bitcode-ledger-storage-sync.ts', +}); + +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_ROOTS = Object.freeze({ + ...SOURCE_PATHS, +}); + +const SECRET_MARKERS = Object.freeze([ + `${['sk', 'proj'].join('-')}-`, + `${['sb', 'secret'].join('_')}__`, + ['service', 'role'].join('_'), + ['eyJ', 'hbGciOiJI', 'UzI1NiIsInR5cCI6IkpXVCJ9'].join(''), + ['SUPABASE', 'SERVICE', 'ROLE'].join('_'), + ['OPENAI', 'API', 'KEY'].join('_'), + ['VERCEL', 'TOKEN'].join('_'), + ['VERCEL', 'OIDC', 'TOKEN'].join('_'), + ['PRIVATE', 'KEY'].join('_'), +]); + +const FORBIDDEN_REHEARSAL_PHRASES = Object.freeze([ + 'preview discloses source', + 'quote is payment', + 'payment observation is finality', + 'database is ledger truth', + 'telemetry advances state', + 'conversation advances state', + 'ChatGPT App advances state', + 'MCP advances state', + 'proof roots reveal source', + 'value-bearing mainnet operation is live', +]); + +function digest(value) { + return crypto.createHash('sha256').update(String(value)).digest('hex').slice(0, 24); +} + +function root(prefix, value) { + return `${prefix}:${digest(typeof value === 'string' ? value : JSON.stringify(value))}`; +} + +function readSource(repoRoot, sourcePath) { + const absolutePath = path.join(repoRoot, sourcePath); + return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : ''; +} + +function sourceExists(repoRoot, sourcePath) { + return existsSync(path.join(repoRoot, sourcePath)); +} + +function sourceRoot(repoRoot, sourcePath) { + return `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`; +} + +function predicateResult(id, sourcePath, passed) { + return { id, sourcePath, passed: Boolean(passed) }; +} + +function artifactPassed(repoRoot, sourcePath, artifactId) { + const text = readSource(repoRoot, sourcePath); + if (!text) return false; + try { + const parsed = JSON.parse(text); + return parsed.artifactId === artifactId && parsed.passed === true; + } catch { + return false; + } +} + +function scanSourcesForMarkers(repoRoot, sourcePaths, markers) { + const joined = sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return markers.filter((marker) => marker && joined.includes(marker)); +} + +function claimExists(claimId) { + return V46_PROTOCOL_CLAIM_ROWS.some((row) => row.claimId === claimId); +} + +function categoryExists(categoryId) { + return V46_PROTOCOL_CLAIM_CATEGORY_IDS.includes(categoryId); +} + +function authorityExists(authorityId) { + return V46_PROTOCOL_CLAIM_AUTHORITY_IDS.includes(authorityId); +} + +function requiredTokensPresent(repoRoot, row) { + const joined = row.sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return row.requiredCopyTokens.every((token) => joined.includes(token)); +} + +function rehearsalRow({ + surfaceId, + surfaceLabel, + sourcePaths, + claimIds, + claimCategoryIds, + authorityIds, + requiredCopyTokens, + expectedReadback, + repairExpectation, +}) { + return { + surfaceId, + surfaceLabel, + sourcePaths, + claimIds, + claimCategoryIds, + authorityIds, + stepIds: [...V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS], + requiredCopyTokens, + expectedReadback, + repairExpectation, + localOnly: true, + sourceSafeMetadataOnly: true, + protectedSourceVisible: false, + unpaidAssetPackSourceVisible: false, + rawPromptVisible: false, + interpolatedPromptVisible: false, + rawProviderResponseVisible: false, + credentialsSerialized: false, + walletPrivateMaterialVisible: false, + settlementPrivatePayloadVisible: false, + valueBearingMainnetAdmitted: false, + noParallelStateAuthority: true, + stateAdvanceRequiresProofRoot: true, + sourceSafeFieldIds: [...V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS], + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + rowRoot: root('v46-local-interface-rehearsal-row', { surfaceId, claimIds, authorityIds }), + }; +} + +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ROWS = Object.freeze([ + rehearsalRow({ + surfaceId: 'docs_landing', + surfaceLabel: 'Public Docs And Landing', + sourcePaths: [SOURCE_PATHS.landingPage, SOURCE_PATHS.docsPage, SOURCE_PATHS.docsContent], + claimIds: [ + 'assetpack-is-commodity', + 'btd-is-weighted-scalar-volume-and-settled-rights', + 'operator-evidence-is-source-safe-readback', + ], + claimCategoryIds: ['protocol-law', 'product-guidance', 'operator-evidence'], + authorityIds: ['canonical-specification', 'generated-proof', 'interface-guidance-only'], + requiredCopyTokens: [ + 'Bitcode public home for AssetPacks', + 'Learn Bitcode from AssetPacks to proof.', + 'Public docs explain; proof readback decides.', + ], + expectedReadback: + 'The local public route and docs route explain AssetPacks, BTD scalar volume and rights, BTC settlement, proof readback, and interface boundaries without live state authority.', + repairExpectation: + 'If public copy overclaims state authority, route copy returns to source-safe explanation and proof readback remains decisive.', + }), + rehearsalRow({ + surfaceId: 'packs_route', + surfaceLabel: '/packs', + sourcePaths: [SOURCE_PATHS.packsPage, SOURCE_PATHS.packsClient, SOURCE_PATHS.packActivityModel], + claimIds: [ + 'operator-evidence-is-source-safe-readback', + 'preview-is-source-safe-measurement', + 'repair-fails-closed', + 'telemetry-is-observability-only', + ], + claimCategoryIds: ['product-guidance', 'operator-evidence', 'preview-claim', 'repair-claim'], + authorityIds: ['canonical-specification', 'database-projection', 'generated-proof', 'interface-guidance-only'], + requiredCopyTokens: [ + 'Search pack activity', + 'Search titles, measurements, values, proof roots', + 'assertPackActivitySourceSafe', + 'unpaidAssetPackSourceVisible: false', + ], + expectedReadback: + '/packs rehearses searchable PackActivity master-detail readback with source-safe measurements, values, proof roots, settlement, delivery, compensation, and repair state.', + repairExpectation: + 'If PackActivity source-safety assertion fails, the route must hold the row in repair instead of projecting source-bearing detail.', + }), + rehearsalRow({ + surfaceId: 'read_route', + surfaceLabel: '/read', + sourcePaths: [SOURCE_PATHS.readPage, SOURCE_PATHS.readClient], + claimIds: [ + 'operator-evidence-is-source-safe-readback', + 'preview-is-source-safe-measurement', + 'quote-is-source-safe-offer', + 'finality-authorizes-rights-and-delivery', + ], + claimCategoryIds: ['product-guidance', 'preview-claim', 'quote-claim', 'settlement-claim', 'rights-claim'], + authorityIds: ['canonical-specification', 'generated-proof', 'interface-guidance-only', 'ledger-readback'], + requiredCopyTokens: [ + 'Request Reading, review synthesized Needs', + 'Read request -> Need -> Finding Fits -> Preview -> Settlement.', + 'Visible: Need measurements, fit ids, proof roots, fee quotes', + 'Withheld until paid', + ], + expectedReadback: + '/read rehearses the five-step Reading path from request through Need review, Finding Fits, source-safe preview, quote, settlement, BTD rights, and delivery boundary.', + repairExpectation: + 'If Need, quote, finality, or delivery proof is missing, the route keeps the Reader at the narrowest source-safe step.', + }), + rehearsalRow({ + surfaceId: 'deposit_route', + surfaceLabel: '/deposit', + sourcePaths: [SOURCE_PATHS.depositPage, SOURCE_PATHS.depositClient], + claimIds: [ + 'deposit-option-is-potential-supply', + 'assetpack-is-commodity', + 'operator-evidence-is-source-safe-readback', + 'compensation-follows-source-to-shares', + ], + claimCategoryIds: ['product-guidance', 'protocol-law', 'operator-evidence', 'compensation-claim'], + authorityIds: ['canonical-specification', 'generated-proof', 'database-projection', 'interface-guidance-only'], + requiredCopyTokens: [ + 'source-safe AssetPack deposit options', + 'Source-safe AssetPack proposals', + 'Criticality, demand, ROI, BTD potential, compensation.', + 'Withheld: raw source, unpaid AssetPack source', + ], + expectedReadback: + '/deposit rehearses source-safe deposit option synthesis, review, policy, admission, BTD potential, and compensation posture without final Need-relative BTD claims.', + repairExpectation: + 'If source criticality, ROI, or admission evidence is unsafe or missing, the route blocks Depository admission and keeps raw source withheld.', + }), + rehearsalRow({ + surfaceId: 'api_mcp', + surfaceLabel: 'API And MCP', + sourcePaths: [SOURCE_PATHS.btdApiSchema, SOURCE_PATHS.btdMcpContract, SOURCE_PATHS.mcpDocsReference], + claimIds: [ + 'operator-evidence-is-source-safe-readback', + 'preview-is-source-safe-measurement', + 'finality-authorizes-rights-and-delivery', + 'repair-fails-closed', + ], + claimCategoryIds: ['product-guidance', 'operator-evidence', 'preview-claim', 'rights-claim', 'repair-claim'], + authorityIds: ['canonical-specification', 'generated-proof', 'interface-guidance-only'], + requiredCopyTokens: [ + 'BTD_API_SCHEMA_COMPATIBILITY_CONSUMER_SURFACES', + 'bitcode://pipelines/asset-pack/create', + 'protected-source-locked', + 'MCP API Reference', + ], + expectedReadback: + 'API and MCP rehearse versionless source-safe request/response contracts, proof-root projection, protected-source locks, and denied-state repair.', + repairExpectation: + 'If schema, permission, provider binding, or protected-source lock evidence is missing, machine interfaces deny writes and emit repair state.', + }), + rehearsalRow({ + surfaceId: 'chatgpt_bitcode_chat', + surfaceLabel: 'ChatGPT App And Bitcode Chat', + sourcePaths: [ + SOURCE_PATHS.btdChatGptContract, + SOURCE_PATHS.chatGptTools, + SOURCE_PATHS.conversationHandoff, + SOURCE_PATHS.conversationTelemetry, + SOURCE_PATHS.conversationParityTest, + ], + claimIds: [ + 'preview-is-source-safe-measurement', + 'payment-observation-is-not-finality', + 'delivery-is-entitled-source-unlock', + 'telemetry-is-observability-only', + ], + claimCategoryIds: ['product-guidance', 'preview-claim', 'settlement-claim', 'delivery-claim', 'telemetry-observability'], + authorityIds: ['canonical-specification', 'generated-proof', 'telemetry-observability-only', 'interface-guidance-only'], + requiredCopyTokens: [ + 'BTD_CHATGPT_APP_ACTION_CONTRACT_IDS', + 'bitcode_request_read', + 'terminal-delegated-handoff', + 'source_safe_conversation_telemetry_metadata', + 'source_bearing_delivery_locked_until_settlement_and_rights', + ], + expectedReadback: + 'ChatGPT App and Bitcode Chat rehearse guided Reading actions, source-safe response rendering, delegated handoff, telemetry proof roots, and delivery lock boundaries.', + repairExpectation: + 'If conversational state conflicts with route/proof state, conversation remains guidance-only and hands off to product proof readback.', + }), + rehearsalRow({ + surfaceId: 'proof_telemetry_repair', + surfaceLabel: 'Proof, Telemetry, And Repair Readback', + sourcePaths: [ + SOURCE_PATHS.pipelineLogUi, + SOURCE_PATHS.v39OperationalTelemetryReadback, + SOURCE_PATHS.uapiLedgerStorageSync, + SOURCE_PATHS.v46ProofArtifact, + ], + claimIds: [ + 'operator-evidence-is-source-safe-readback', + 'telemetry-is-observability-only', + 'repair-fails-closed', + 'payment-observation-is-not-finality', + ], + claimCategoryIds: ['operator-evidence', 'telemetry-observability', 'repair-claim', 'settlement-claim'], + authorityIds: [ + 'generated-proof', + 'telemetry-observability-only', + 'database-projection', + 'ledger-readback', + 'interface-guidance-only', + ], + requiredCopyTokens: [ + 'promptDisclosurePosture', + 'source_safe_reading_operational_telemetry_repair_readback_metadata', + 'BITCODE_LEDGER_STORAGE_SYNC_CONTRACT', + 'v46-proof-readback-operator-explanation', + ], + expectedReadback: + 'Proof, telemetry, and repair rehearsal confirms local stream UI can show phases, steps, proof roots, disclosure posture, and metadata while preserving evidence authority hierarchy.', + repairExpectation: + 'If telemetry, database projection, ledger, storage, wallet, or delivery evidence disagree, repair fails closed and telemetry stays observability only.', + }), +]); + +function buildPredicateResults(repoRoot) { + const sources = Object.fromEntries( + Object.entries(SOURCE_PATHS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]), + ); + + return [ + predicateResult('active-pointer-supports-v46-draft-or-later', SOURCE_PATHS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V45')), + predicateResult( + 'spec-defines-gate7-law', + SOURCE_PATHS.spec, + sources.spec.includes('V46 local interface comprehension rehearsal law') && + sources.spec.includes(V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH), + ), + predicateResult( + 'delta-records-gate7', + SOURCE_PATHS.delta, + sources.delta.includes('Gate 7: Local Interface Comprehension Rehearsal') && + sources.delta.includes(V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH), + ), + predicateResult( + 'notes-records-gate7', + SOURCE_PATHS.notes, + sources.notes.includes('V46 local interface comprehension rehearsal atom') && + sources.notes.includes('local surface readback rehearsal'), + ), + predicateResult( + 'parity-records-gate7', + SOURCE_PATHS.parity, + sources.parity.includes('V46LocalInterfaceComprehensionRehearsal') && + sources.parity.includes(V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH), + ), + predicateResult( + 'roadmap-advanced-to-gate7', + SOURCE_PATHS.roadmap, + (sources.roadmap.includes('Current working gate: V46 Gate 7 Local Interface Comprehension Rehearsal') && + sources.roadmap.includes('V46 Gate 6 closure anchor')) || + (sources.roadmap.includes('V46 Gate 7 closure anchor') && + sources.roadmap.includes('Current working gate: V46 Gate 8 Promotion Readiness And Canonical Promotion')) || + (sources.roadmap.includes('V46 Gate 7 closure anchor') && + sources.roadmap.includes('Latest closed gate: V46 Gate 8 Promotion Readiness And Canonical Promotion') && + sources.roadmap.includes('Current working gate: V47 opening preparation')), + ), + predicateResult( + 'readmes-document-gate7', + SOURCE_PATHS.readme, + sources.readme.includes('V46 Gate 7') && sources.protocolReadme.includes('V46LocalInterfaceComprehensionRehearsal'), + ), + predicateResult( + 'prior-v46-artifacts-pass', + SOURCE_PATHS.v46ProtocolArtifact, + V46_LOCAL_INTERFACE_REHEARSAL_REQUIRED_ARTIFACT_IDS.every((artifactId) => { + const sourcePath = + artifactId === 'v46-protocol-comprehension-object-model' + ? SOURCE_PATHS.v46ProtocolArtifact + : artifactId === 'v46-public-operator-claim-boundaries' + ? SOURCE_PATHS.v46PublicArtifact + : artifactId === 'v46-product-route-comprehension-readback' + ? SOURCE_PATHS.v46ProductArtifact + : artifactId === 'v46-interface-claim-contracts' + ? SOURCE_PATHS.v46InterfaceArtifact + : SOURCE_PATHS.v46ProofArtifact; + return artifactPassed(repoRoot, sourcePath, artifactId); + }), + ), + predicateResult( + 'package-exports-gate7', + SOURCE_PATHS.packageIndex, + sources.packageIndex.includes('v46-local-interface-comprehension-rehearsal.js') && + sources.packageTypes.includes('V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH'), + ), + predicateResult( + 'package-test-covers-gate7', + SOURCE_PATHS.packageTest, + sources.packageTest.includes('V46 local interface comprehension rehearsal') && + sources.packageTest.includes('chatgpt_bitcode_chat'), + ), + predicateResult( + 'generator-and-checker-exist', + SOURCE_PATHS.generator, + sources.generator.includes('buildV46LocalInterfaceComprehensionRehearsal') && + sources.checker.includes('V46 Gate 7 local interface comprehension rehearsal check'), + ), + predicateResult( + 'package-json-scripts', + SOURCE_PATHS.packageJson, + sources.packageJson.includes('generate:v46-local-interface-comprehension-rehearsal') && + sources.packageJson.includes('check:v46-gate7'), + ), + predicateResult( + 'workflows-run-gate7', + SOURCE_PATHS.gateWorkflow, + sources.gateWorkflow.includes('check-v46-gate7-local-interface-comprehension-rehearsal.mjs') && + sources.canonWorkflow.includes('check-v46-gate7-local-interface-comprehension-rehearsal.mjs'), + ), + ]; +} + +export function buildV46LocalInterfaceComprehensionRehearsal(input = {}) { + const repoRoot = input.repoRoot ? path.resolve(input.repoRoot) : DEFAULT_REPO_ROOT; + const rows = V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ROWS.map((row) => ({ + ...row, + sourceRoots: row.sourcePaths.map((sourcePath) => sourceRoot(repoRoot, sourcePath)), + sourceFilesPresent: row.sourcePaths.every((sourcePath) => sourceExists(repoRoot, sourcePath)), + requiredCopyPresent: requiredTokensPresent(repoRoot, row), + })); + const predicateResults = buildPredicateResults(repoRoot); + const failedPredicateIds = predicateResults.filter((predicate) => !predicate.passed).map((predicate) => predicate.id); + const allClaimIds = rows.flatMap((row) => row.claimIds); + const allCategoryIds = rows.flatMap((row) => row.claimCategoryIds); + const allAuthorityIds = rows.flatMap((row) => row.authorityIds); + const rowsMissingRequiredCopy = rows.filter((row) => !row.requiredCopyPresent).map((row) => row.surfaceId); + const rowsMissingSourceFiles = rows.filter((row) => !row.sourceFilesPresent).map((row) => row.surfaceId); + const sourcePathsToScan = [ + SOURCE_PATHS.spec, + SOURCE_PATHS.delta, + SOURCE_PATHS.notes, + SOURCE_PATHS.parity, + SOURCE_PATHS.roadmap, + SOURCE_PATHS.readme, + SOURCE_PATHS.protocolReadme, + SOURCE_PATHS.packageTest, + SOURCE_PATHS.generator, + SOURCE_PATHS.checker, + ]; + const forbiddenPhraseHits = scanSourcesForMarkers(repoRoot, sourcePathsToScan, FORBIDDEN_REHEARSAL_PHRASES); + const secretMarkerHits = scanSourcesForMarkers(repoRoot, sourcePathsToScan, SECRET_MARKERS); + const priorArtifactResults = V46_LOCAL_INTERFACE_REHEARSAL_REQUIRED_ARTIFACT_IDS.map((artifactId) => { + const sourcePath = + artifactId === 'v46-protocol-comprehension-object-model' + ? SOURCE_PATHS.v46ProtocolArtifact + : artifactId === 'v46-public-operator-claim-boundaries' + ? SOURCE_PATHS.v46PublicArtifact + : artifactId === 'v46-product-route-comprehension-readback' + ? SOURCE_PATHS.v46ProductArtifact + : artifactId === 'v46-interface-claim-contracts' + ? SOURCE_PATHS.v46InterfaceArtifact + : SOURCE_PATHS.v46ProofArtifact; + return { + artifactId, + sourcePath, + passed: artifactPassed(repoRoot, sourcePath, artifactId), + sourceRoot: sourceRoot(repoRoot, sourcePath), + }; + }); + + const coverage = { + predicateCount: predicateResults.length, + failedPredicateIds, + surfaceCount: rows.length, + stepCount: V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS.length, + allSurfacesCovered: V46_LOCAL_INTERFACE_REHEARSAL_SURFACE_IDS.every((id) => + rows.some((row) => row.surfaceId === id), + ), + allStepsCovered: rows.every((row) => + V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS.every((id) => row.stepIds.includes(id)), + ), + allPriorArtifactsPassed: priorArtifactResults.every((artifact) => artifact.passed), + allClaimIdsKnown: allClaimIds.every(claimExists), + allCategoryIdsKnown: allCategoryIds.every(categoryExists), + allAuthorityIdsKnown: allAuthorityIds.every(authorityExists), + sourceFilesPresent: rows.every((row) => row.sourceFilesPresent), + rowsMissingSourceFiles, + rowsMissingRequiredCopy, + localOnly: rows.every((row) => row.localOnly), + sourceSafeMetadataOnly: rows.every((row) => row.sourceSafeMetadataOnly), + noParallelStateAuthority: rows.every((row) => row.noParallelStateAuthority), + stateAdvanceRequiresProofRoot: rows.every((row) => row.stateAdvanceRequiresProofRoot), + protectedSourceVisible: rows.some((row) => row.protectedSourceVisible), + unpaidAssetPackSourceVisible: rows.some((row) => row.unpaidAssetPackSourceVisible), + rawPromptVisible: rows.some((row) => row.rawPromptVisible), + interpolatedPromptVisible: rows.some((row) => row.interpolatedPromptVisible), + rawProviderResponseVisible: rows.some((row) => row.rawProviderResponseVisible), + credentialsSerialized: rows.some((row) => row.credentialsSerialized), + walletPrivateMaterialVisible: rows.some((row) => row.walletPrivateMaterialVisible), + settlementPrivatePayloadVisible: rows.some((row) => row.settlementPrivatePayloadVisible), + valueBearingMainnetAdmitted: rows.some((row) => row.valueBearingMainnetAdmitted), + forbiddenPhraseHits, + secretMarkerHits, + }; + + const passed = + failedPredicateIds.length === 0 && + coverage.allSurfacesCovered && + coverage.allStepsCovered && + coverage.allPriorArtifactsPassed && + coverage.allClaimIdsKnown && + coverage.allCategoryIdsKnown && + coverage.allAuthorityIdsKnown && + coverage.sourceFilesPresent && + rowsMissingRequiredCopy.length === 0 && + coverage.localOnly && + coverage.sourceSafeMetadataOnly && + coverage.noParallelStateAuthority && + coverage.stateAdvanceRequiresProofRoot && + coverage.protectedSourceVisible === false && + coverage.unpaidAssetPackSourceVisible === false && + coverage.rawPromptVisible === false && + coverage.interpolatedPromptVisible === false && + coverage.rawProviderResponseVisible === false && + coverage.credentialsSerialized === false && + coverage.walletPrivateMaterialVisible === false && + coverage.settlementPrivatePayloadVisible === false && + coverage.valueBearingMainnetAdmitted === false && + forbiddenPhraseHits.length === 0 && + secretMarkerHits.length === 0; + + const sourceRoots = Object.fromEntries( + Object.entries(SOURCE_PATHS).map(([key, sourcePath]) => [key, sourceRoot(repoRoot, sourcePath)]), + ); + const artifactRoot = root('v46-local-interface-comprehension-rehearsal', { + surfaceIds: V46_LOCAL_INTERFACE_REHEARSAL_SURFACE_IDS, + stepIds: V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS, + rows, + predicateResults, + priorArtifactResults, + }); + + return { + artifactId: 'v46-local-interface-comprehension-rehearsal', + schemaId: V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SCHEMA_ID, + version: V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_VERSION, + currentTarget: V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_CURRENT_TARGET, + sourceSafetyVerdict: V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_SAFETY_VERDICT, + generatedAt: 'deterministic', + artifactRoot, + rehearsalStatus: passed ? 'completed_source_safe_local' : 'repair_required', + passed, + surfaceIds: [...V46_LOCAL_INTERFACE_REHEARSAL_SURFACE_IDS], + stepIds: [...V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS], + requiredArtifactIds: [...V46_LOCAL_INTERFACE_REHEARSAL_REQUIRED_ARTIFACT_IDS], + rows, + priorArtifactResults, + predicateResults, + sourceRoots, + coverage, + sourceSafety: { + sourceSafetyVerdict: V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_SAFETY_VERDICT, + sourceSafeMetadataOnly: true, + protectedSourceVisible: false, + unpaidAssetPackSourceVisible: false, + rawPromptVisible: false, + interpolatedPromptVisible: false, + rawProviderResponseVisible: false, + credentialsSerialized: false, + walletPrivateMaterialVisible: false, + settlementPrivatePayloadVisible: false, + valueBearingMainnetAdmitted: false, + sourceSafeFieldIds: [...V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS], + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + }, + }; +} diff --git a/packages/protocol/src/canonical/v46-product-route-comprehension-readback.js b/packages/protocol/src/canonical/v46-product-route-comprehension-readback.js new file mode 100644 index 000000000..e8cb5372f --- /dev/null +++ b/packages/protocol/src/canonical/v46-product-route-comprehension-readback.js @@ -0,0 +1,493 @@ +// @ts-check + +import crypto from 'node:crypto'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { bitcodeVersionAtLeast } from './version-posture.js'; +import { + V46_PROTOCOL_CLAIM_AUTHORITY_IDS, + V46_PROTOCOL_CLAIM_CATEGORY_IDS, + V46_PROTOCOL_CLAIM_ROWS, + V46_PROTOCOL_PRIVATE_PAYLOAD_IDS, +} from './v46-protocol-comprehension-object-model.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); + +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH = + '.bitcode/v46-product-route-comprehension-readback.json'; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SCHEMA_ID = + 'bitcode.v46.productRouteComprehensionReadback.v1'; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_VERSION = 'V46'; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_CURRENT_TARGET = 'V45'; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SOURCE_SAFETY_VERDICT = + 'source-safe-product-route-comprehension-readback'; + +export const V46_PRODUCT_ROUTE_IDS = Object.freeze(['packs', 'read', 'deposit']); +export const V46_PRODUCT_ROUTE_PATHS = Object.freeze(['/packs', '/read', '/deposit']); +export const V46_PRODUCT_ROUTE_CAPABILITY_IDS = Object.freeze([ + 'low-detail-default', + 'route-owned-state', + 'search-filter-sort', + 'five-step-reading', + 'five-step-depositing', + 'source-safe-preview', + 'expandable-proof-readback', + 'keyboard-navigation', + 'proof-root-readback', + 'settlement-rights-delivery-boundary', + 'compensation-readback', + 'terminal-debug-compatibility', +]); + +const SOURCE_PATHS = Object.freeze({ + activePointer: 'BITCODE_SPEC.txt', + spec: 'BITCODE_SPEC_V46.md', + delta: 'BITCODE_SPEC_V46_DELTA.md', + notes: 'BITCODE_SPEC_V46_NOTES.md', + parity: 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + roadmap: 'SPECIFICATIONS_ROADMAP.md', + packageJson: 'package.json', + packageIndex: 'packages/protocol/src/index.js', + packageTypes: 'packages/protocol/src/index.d.ts', + packageSource: 'packages/protocol/src/canonical/v46-product-route-comprehension-readback.js', + packageTest: 'packages/protocol/test/v46-product-route-comprehension-readback.test.js', + generator: 'scripts/generate-v46-product-route-comprehension-readback.mjs', + checker: 'scripts/check-v46-gate4-product-route-comprehension-readback.mjs', + gateWorkflow: '.github/workflows/bitcode-gate-quality.yml', + canonWorkflow: '.github/workflows/bitcode-canon-quality.yml', + productRouteShell: 'uapi/components/base/bitcode/routes/product-route-shell.tsx', + packsClient: 'uapi/app/packs/PacksPageClient.tsx', + packsModel: 'uapi/components/base/bitcode/activity/pack-activity-model.ts', + packsApi: 'uapi/app/api/packs/activity/route.ts', + packsTest: 'uapi/tests/packsPageClient.test.tsx', + readClient: 'uapi/app/read/ReadPageClient.tsx', + readModel: 'uapi/app/read/read-route-model.ts', + readStepModel: 'uapi/app/terminal/terminal-enterprise-reading-ux-state.ts', + readClientTest: 'uapi/tests/readPageClient.test.tsx', + readModelTest: 'uapi/tests/readRouteModel.test.ts', + depositClient: 'uapi/app/deposit/DepositPageClient.tsx', + depositModel: 'uapi/app/deposit/deposit-route-model.ts', + depositClientTest: 'uapi/tests/depositPageClient.test.tsx', + depositModelTest: 'uapi/tests/depositRouteModel.test.ts', +}); + +const SECRET_MARKERS = Object.freeze([ + `${['sk', 'proj'].join('-')}-`, + `${['sb', 'secret'].join('_')}__`, + ['service', 'role'].join('_'), + ['eyJhbGciOiJI', 'UzI1NiIsInR5cCI6IkpXVCJ9'].join(''), + ['SUPABASE', 'SERVICE', 'ROLE'].join('_'), + ['OPENAI', 'API', 'KEY'].join('_'), + ['VERCEL', 'TOKEN'].join('_'), + ['VERCEL', 'OIDC', 'TOKEN'].join('_'), + ['PRIVATE', 'KEY'].join('_'), +]); + +const FORBIDDEN_PRODUCT_ROUTE_PHRASES = Object.freeze([ + 'Source Shares and the Bitcode Exchange', + 'Learn Bitcode from Source Shares to proof', + 'BTD is money', + 'BTD is only a read right', + 'preview discloses source', + 'quote is payment', + 'payment observation is finality', + 'database is ledger truth', + 'telemetry advances state', + 'server custodies wallet private material', + 'value-bearing mainnet operation is live', +]); + +function digest(value) { + return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24); +} + +function readSource(repoRoot, sourcePath) { + const absolutePath = path.join(repoRoot, sourcePath); + return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : ''; +} + +function sourceExists(repoRoot, sourcePath) { + return existsSync(path.join(repoRoot, sourcePath)); +} + +function sourceRoot(repoRoot, sourcePath) { + return `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`; +} + +function predicateResult(id, sourcePath, passed) { + return { id, sourcePath, passed: Boolean(passed) }; +} + +function scanSourcesForMarkers(repoRoot, sourcePaths, markers) { + const joined = sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return markers.filter((marker) => marker && joined.includes(marker)); +} + +function claimExists(claimId) { + return V46_PROTOCOL_CLAIM_ROWS.some((row) => row.claimId === claimId); +} + +function categoryExists(categoryId) { + return V46_PROTOCOL_CLAIM_CATEGORY_IDS.includes(categoryId); +} + +function authorityExists(authorityId) { + return V46_PROTOCOL_CLAIM_AUTHORITY_IDS.includes(authorityId); +} + +function requiredTokensPresent(repoRoot, row) { + const joined = row.sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return row.requiredCopyTokens.every((token) => joined.includes(token)); +} + +function routeRow({ + routeId, + routePath, + routeRole, + sourcePaths, + claimIds, + claimCategoryIds, + authorityIds, + capabilityIds, + requiredCopyTokens, + readbackRoots, + operatorReading, +}) { + return { + routeId, + routePath, + routeRole, + sourcePaths, + claimIds, + claimCategoryIds, + authorityIds, + capabilityIds, + requiredCopyTokens, + readbackRoots, + operatorReading, + lowDetailDefault: true, + expandableSourceSafeDetail: true, + routeOwnedState: true, + proofReadbackVisible: true, + sourceSafeMetadataOnly: true, + protectedSourceVisible: false, + unpaidAssetPackSourceVisible: false, + rawPromptVisible: false, + interpolatedPromptVisible: false, + rawProviderResponseVisible: false, + credentialsSerialized: false, + walletPrivateMaterialVisible: false, + settlementPrivatePayloadVisible: false, + valueBearingMainnetAdmitted: false, + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + rowRoot: `v46-product-route-row:${digest(JSON.stringify({ routeId, sourcePaths, capabilityIds, readbackRoots }))}`, + }; +} + +export const V46_PRODUCT_ROUTE_READBACK_ROWS = Object.freeze([ + routeRow({ + routeId: 'packs', + routePath: '/packs', + routeRole: 'searchable source-safe PackActivity master-detail and market activity readback', + sourcePaths: [SOURCE_PATHS.packsClient, SOURCE_PATHS.packsModel, SOURCE_PATHS.packsApi, SOURCE_PATHS.packsTest, SOURCE_PATHS.productRouteShell], + claimIds: [ + 'assetpack-is-commodity', + 'operator-evidence-is-source-safe-readback', + 'preview-is-source-safe-measurement', + 'finality-authorizes-rights-and-delivery', + 'compensation-follows-source-to-shares', + 'repair-fails-closed', + 'telemetry-is-observability-only', + ], + claimCategoryIds: [ + 'protocol-law', + 'product-guidance', + 'operator-evidence', + 'preview-claim', + 'rights-claim', + 'compensation-claim', + 'repair-claim', + 'telemetry-observability', + ], + authorityIds: ['canonical-specification', 'generated-proof', 'ledger-readback', 'database-projection', 'interface-guidance-only'], + capabilityIds: [ + 'low-detail-default', + 'route-owned-state', + 'search-filter-sort', + 'source-safe-preview', + 'expandable-proof-readback', + 'keyboard-navigation', + 'proof-root-readback', + 'settlement-rights-delivery-boundary', + 'compensation-readback', + ], + requiredCopyTokens: [ + 'Pack activity', + 'Portfolio positions, market signals, proof roots, settlement, compensation, delivery, repair.', + 'Search titles, measurements, values, proof roots', + 'Source-safe detail', + 'Expandable proof detail', + 'packs-enterprise-activity-grid', + 'PackActivityRecord', + ], + readbackRoots: ['proofRoots', 'accounting.statementRoot', 'governance.authorityRoot', 'commodityState'], + operatorReading: + '/packs is the source-safe master-detail readback for PackActivity, not a source disclosure surface or ledger source of truth.', + }), + routeRow({ + routeId: 'read', + routePath: '/read', + routeRole: 'five-step Reading procurement route from Read Request to settled delivery', + sourcePaths: [ + SOURCE_PATHS.readClient, + SOURCE_PATHS.readModel, + SOURCE_PATHS.readStepModel, + SOURCE_PATHS.readClientTest, + SOURCE_PATHS.readModelTest, + SOURCE_PATHS.productRouteShell, + ], + claimIds: [ + 'assetpack-is-commodity', + 'btd-is-weighted-scalar-volume-and-settled-rights', + 'preview-is-source-safe-measurement', + 'quote-is-source-safe-offer', + 'payment-observation-is-not-finality', + 'finality-authorizes-rights-and-delivery', + 'delivery-is-entitled-source-unlock', + 'operator-evidence-is-source-safe-readback', + ], + claimCategoryIds: [ + 'protocol-law', + 'product-guidance', + 'preview-claim', + 'quote-claim', + 'settlement-claim', + 'rights-claim', + 'delivery-claim', + 'operator-evidence', + ], + authorityIds: [ + 'canonical-specification', + 'generated-proof', + 'ledger-readback', + 'wallet-provider-receipt', + 'repository-delivery-receipt', + 'interface-guidance-only', + ], + capabilityIds: [ + 'low-detail-default', + 'route-owned-state', + 'five-step-reading', + 'source-safe-preview', + 'expandable-proof-readback', + 'keyboard-navigation', + 'proof-root-readback', + 'settlement-rights-delivery-boundary', + 'terminal-debug-compatibility', + ], + requiredCopyTokens: [ + 'Read request -> Need -> Finding Fits -> Preview -> Settlement.', + 'ReadNeedComprehensionSynthesis', + 'ReadFitsFindingSynthesis', + 'Withheld until paid rights: source-bearing AssetPack contents', + 'read-route-step-request-read', + 'read-expandable-proof-detail', + 'measurement-weight-volume', + ], + readbackRoots: ['readRouteSession.proofRoot', 'budgetPolicy.policyRoot', 'quotePolicy.quoteRoot', 'settlement.readinessRoot', 'authorityRoot'], + operatorReading: + '/read keeps the buyer path in five steps and withholds source-bearing AssetPack contents until BTC finality, BTD rights transfer, and entitled delivery readback.', + }), + routeRow({ + routeId: 'deposit', + routePath: '/deposit', + routeRole: 'five-step Depositing route from connected source to Depository admission', + sourcePaths: [ + SOURCE_PATHS.depositClient, + SOURCE_PATHS.depositModel, + SOURCE_PATHS.depositClientTest, + SOURCE_PATHS.depositModelTest, + SOURCE_PATHS.productRouteShell, + ], + claimIds: [ + 'assetpack-is-commodity', + 'deposit-option-is-potential-supply', + 'operator-evidence-is-source-safe-readback', + 'compensation-follows-source-to-shares', + 'repair-fails-closed', + 'telemetry-is-observability-only', + ], + claimCategoryIds: ['protocol-law', 'product-guidance', 'operator-evidence', 'compensation-claim', 'repair-claim', 'telemetry-observability'], + authorityIds: ['canonical-specification', 'generated-proof', 'database-projection', 'object-storage-root', 'interface-guidance-only'], + capabilityIds: [ + 'low-detail-default', + 'route-owned-state', + 'five-step-depositing', + 'source-safe-preview', + 'expandable-proof-readback', + 'keyboard-navigation', + 'proof-root-readback', + 'compensation-readback', + 'terminal-debug-compatibility', + ], + requiredCopyTokens: [ + 'Source -> Options -> Review -> Admission -> Depository.', + 'DepositAssetPackOptionSynthesis', + 'Reviewable AssetPack supply options.', + 'Withheld: raw source', + 'deposit-route-step-connect-source', + 'deposit-expandable-proof-detail', + 'Expected compensation', + ], + readbackRoots: ['depositRouteSession.proofRoot', 'synthesis.roots.synthesisRoot', 'policy.roots.policyReportRoot', 'admission.roots.admissionReportRoot', 'earningSupplyIntelligence.roots.intelligenceRoot'], + operatorReading: + '/deposit is the source-safe supply route; it forms reviewable options and admission readback without exposing protected source or claiming final Need-relative BTD at option time.', + }), +]); + +function buildSourceRoots(repoRoot) { + return Object.fromEntries(Object.entries(SOURCE_PATHS).map(([key, sourcePath]) => [key, sourceRoot(repoRoot, sourcePath)])); +} + +function buildSourcePredicates(repoRoot) { + const sources = Object.fromEntries(Object.entries(SOURCE_PATHS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)])); + return [ + predicateResult('active-pointer-supports-v46-draft-or-later', SOURCE_PATHS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V45')), + predicateResult('spec-records-route-readback-law', SOURCE_PATHS.spec, sources.spec.includes('V46 product route comprehension readback law')), + predicateResult('delta-records-gate4', SOURCE_PATHS.delta, sources.delta.includes('Gate 4: `/packs`, `/read`, And `/deposit` Comprehension UX Readback')), + predicateResult('notes-record-gate4', SOURCE_PATHS.notes, sources.notes.includes('Gate 4 records the product-route comprehension atom')), + predicateResult('parity-records-gate4', SOURCE_PATHS.parity, sources.parity.includes('Product route comprehension readback artifact')), + predicateResult('roadmap-records-gate4-closure', SOURCE_PATHS.roadmap, sources.roadmap.includes('V46 Gate 4 closure anchor')), + predicateResult('package-source-exists', SOURCE_PATHS.packageSource, sourceExists(repoRoot, SOURCE_PATHS.packageSource)), + predicateResult('package-test-exists', SOURCE_PATHS.packageTest, sourceExists(repoRoot, SOURCE_PATHS.packageTest)), + predicateResult('generator-exists', SOURCE_PATHS.generator, sourceExists(repoRoot, SOURCE_PATHS.generator)), + predicateResult('checker-exists', SOURCE_PATHS.checker, sourceExists(repoRoot, SOURCE_PATHS.checker)), + predicateResult('package-json-exposes-gate4', SOURCE_PATHS.packageJson, sources.packageJson.includes('"check:v46-gate4"')), + predicateResult('package-exports-gate4', SOURCE_PATHS.packageIndex, sources.packageIndex.includes('buildV46ProductRouteComprehensionReadback')), + predicateResult('package-types-export-gate4', SOURCE_PATHS.packageTypes, sources.packageTypes.includes('buildV46ProductRouteComprehensionReadback')), + predicateResult('gate-and-canon-workflows-run-gate4', SOURCE_PATHS.gateWorkflow, sources.gateWorkflow.includes('check-v46-gate4-product-route-comprehension-readback.mjs') && sources.canonWorkflow.includes('check-v46-gate4-product-route-comprehension-readback.mjs')), + predicateResult('packs-route-uses-shared-shell', SOURCE_PATHS.packsClient, sources.packsClient.includes('route-shell-packs') && sources.packsClient.includes('ProductRouteEnterpriseSummary') && sources.packsClient.includes('ProductRouteProofDetail')), + predicateResult( + 'read-route-uses-five-step-shell', + SOURCE_PATHS.readClient, + sources.readClient.includes('route-shell-read') && + sources.readClient.includes('ProductRouteStepGrid') && + sources.readModel.includes('ReadFitsFindingSynthesis'), + ), + predicateResult('deposit-route-uses-five-step-shell', SOURCE_PATHS.depositClient, sources.depositClient.includes('route-shell-deposit') && sources.depositClient.includes('ProductRouteStepGrid') && sources.depositClient.includes('DepositAssetPackOptionSynthesis')), + ]; +} + +function sourceSafetyCoverage(repoRoot, rows) { + const allSourcePaths = [...new Set(rows.flatMap((row) => row.sourcePaths))]; + const forbiddenPhraseHits = scanSourcesForMarkers(repoRoot, allSourcePaths, FORBIDDEN_PRODUCT_ROUTE_PHRASES); + const secretMarkerHits = scanSourcesForMarkers(repoRoot, allSourcePaths, SECRET_MARKERS); + const rowsMissingRequiredCopy = rows.filter((row) => !requiredTokensPresent(repoRoot, row)).map((row) => row.routeId); + return { + sourceSafeMetadataOnly: rows.every((row) => row.sourceSafeMetadataOnly === true), + protectedSourceVisible: rows.some((row) => row.protectedSourceVisible === true), + unpaidAssetPackSourceVisible: rows.some((row) => row.unpaidAssetPackSourceVisible === true), + rawPromptVisible: rows.some((row) => row.rawPromptVisible === true), + interpolatedPromptVisible: rows.some((row) => row.interpolatedPromptVisible === true), + rawProviderResponseVisible: rows.some((row) => row.rawProviderResponseVisible === true), + credentialsSerialized: rows.some((row) => row.credentialsSerialized === true), + walletPrivateMaterialVisible: rows.some((row) => row.walletPrivateMaterialVisible === true), + settlementPrivatePayloadVisible: rows.some((row) => row.settlementPrivatePayloadVisible === true), + valueBearingMainnetAdmitted: rows.some((row) => row.valueBearingMainnetAdmitted === true), + forbiddenPhraseHits, + secretMarkerHits, + rowsMissingRequiredCopy, + }; +} + +export function buildV46ProductRouteComprehensionReadback(input = {}) { + const repoRoot = typeof input.repoRoot === 'string' ? input.repoRoot : DEFAULT_REPO_ROOT; + const routeRows = [...V46_PRODUCT_ROUTE_READBACK_ROWS]; + const sourcePredicates = buildSourcePredicates(repoRoot); + const failedPredicateIds = sourcePredicates.filter((predicate) => !predicate.passed).map((predicate) => predicate.id); + const claimIdsUsed = [...new Set(routeRows.flatMap((row) => row.claimIds))]; + const categoryIdsUsed = [...new Set(routeRows.flatMap((row) => row.claimCategoryIds))]; + const authorityIdsUsed = [...new Set(routeRows.flatMap((row) => row.authorityIds))]; + const capabilityIdsUsed = [...new Set(routeRows.flatMap((row) => row.capabilityIds))]; + const coverage = { + routeCount: routeRows.length, + routeIds: [...V46_PRODUCT_ROUTE_IDS], + routePaths: [...V46_PRODUCT_ROUTE_PATHS], + capabilityIds: [...V46_PRODUCT_ROUTE_CAPABILITY_IDS], + capabilityIdsUsed, + claimIdsUsed, + categoryIdsUsed, + authorityIdsUsed, + privatePayloadIds: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + allRoutesCovered: V46_PRODUCT_ROUTE_IDS.every((routeId) => routeRows.some((row) => row.routeId === routeId)), + allRoutePathsCovered: V46_PRODUCT_ROUTE_PATHS.every((routePath) => routeRows.some((row) => row.routePath === routePath)), + lowDetailDefaultsCovered: routeRows.every((row) => row.lowDetailDefault === true), + expandableProofReadbackCovered: routeRows.every((row) => row.expandableSourceSafeDetail === true && row.proofReadbackVisible === true), + routeOwnedStateCovered: routeRows.every((row) => row.routeOwnedState === true), + requiredCapabilitiesCovered: V46_PRODUCT_ROUTE_CAPABILITY_IDS.filter((capabilityId) => capabilityId !== 'terminal-debug-compatibility').every( + (capabilityId) => capabilityIdsUsed.includes(capabilityId), + ), + routeSpecificCapabilitiesCovered: + capabilityIdsUsed.includes('search-filter-sort') && + capabilityIdsUsed.includes('five-step-reading') && + capabilityIdsUsed.includes('five-step-depositing'), + allClaimIdsKnown: claimIdsUsed.every(claimExists), + allCategoryIdsKnown: categoryIdsUsed.every(categoryExists), + allAuthorityIdsKnown: authorityIdsUsed.every(authorityExists), + sourcePredicates, + failedPredicateIds, + ...sourceSafetyCoverage(repoRoot, routeRows), + }; + + return { + artifactId: 'v46-product-route-comprehension-readback', + artifactPath: V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH, + artifactRoot: `v46-product-route-comprehension-readback:${digest(JSON.stringify({ routeRows, coverage }))}`, + schemaId: V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SCHEMA_ID, + version: V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_VERSION, + currentTarget: V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_CURRENT_TARGET, + sourceSafetyVerdict: V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SOURCE_SAFETY_VERDICT, + sourceRoots: buildSourceRoots(repoRoot), + routeIds: [...V46_PRODUCT_ROUTE_IDS], + routePaths: [...V46_PRODUCT_ROUTE_PATHS], + capabilityIds: [...V46_PRODUCT_ROUTE_CAPABILITY_IDS], + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + routeRows, + coverage, + passed: + failedPredicateIds.length === 0 && + coverage.allRoutesCovered === true && + coverage.allRoutePathsCovered === true && + coverage.lowDetailDefaultsCovered === true && + coverage.expandableProofReadbackCovered === true && + coverage.routeOwnedStateCovered === true && + coverage.requiredCapabilitiesCovered === true && + coverage.routeSpecificCapabilitiesCovered === true && + coverage.allClaimIdsKnown === true && + coverage.allCategoryIdsKnown === true && + coverage.allAuthorityIdsKnown === true && + coverage.sourceSafeMetadataOnly === true && + coverage.protectedSourceVisible === false && + coverage.unpaidAssetPackSourceVisible === false && + coverage.rawPromptVisible === false && + coverage.interpolatedPromptVisible === false && + coverage.rawProviderResponseVisible === false && + coverage.credentialsSerialized === false && + coverage.walletPrivateMaterialVisible === false && + coverage.settlementPrivatePayloadVisible === false && + coverage.valueBearingMainnetAdmitted === false && + coverage.forbiddenPhraseHits.length === 0 && + coverage.secretMarkerHits.length === 0 && + coverage.rowsMissingRequiredCopy.length === 0, + closureReading: + 'V46 Gate 4 closes source-safe route comprehension readback for /packs, /read, and /deposit without changing active V45 canon or admitting value-bearing mainnet operation.', + }; +} + +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SOURCE_ROOTS = Object.freeze( + buildSourceRoots(DEFAULT_REPO_ROOT), +); diff --git a/packages/protocol/src/canonical/v46-promotion-readiness-report.js b/packages/protocol/src/canonical/v46-promotion-readiness-report.js new file mode 100644 index 000000000..d609a4529 --- /dev/null +++ b/packages/protocol/src/canonical/v46-promotion-readiness-report.js @@ -0,0 +1,425 @@ +// @ts-check + +import crypto from 'node:crypto'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export const V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH = + '.bitcode/v46-promotion-readiness-report.json'; +export const V46_PROMOTION_READINESS_REPORT_SCHEMA_ID = + 'bitcode.v46.promotionReadinessReport.v1'; +export const V46_PROMOTION_READINESS_REPORT_VERSION = 'V46'; +export const V46_PROMOTION_READINESS_REPORT_CURRENT_TARGET = 'V45'; +export const V46_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT = + 'source-safe-v46-protocol-comprehension-promotion-metadata'; + +export const V46_PROMOTION_READINESS_GATE_ARTIFACT_PATHS = Object.freeze([ + '.bitcode/v46-protocol-comprehension-object-model.json', + '.bitcode/v46-public-operator-claim-boundaries.json', + '.bitcode/v46-product-route-comprehension-readback.json', + '.bitcode/v46-interface-claim-contracts.json', + '.bitcode/v46-proof-readback-operator-explanation.json', + '.bitcode/v46-local-interface-comprehension-rehearsal.json', +]); + +export const V46_PROMOTION_READINESS_GENERATED_OUTPUTS = Object.freeze([ + 'BITCODE_SPEC_V46_PROVEN.md', + '.bitcode/v46-spec-family-report.json', + '.bitcode/v46-canonical-input-report.json', + '.bitcode/v46-canon-posture-drift-report.json', + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, +]); + +const JWT_HEADER_PREFIX = String.fromCharCode( + 101, + 121, + 74, + 104, + 98, + 71, + 99, + 105, + 79, + 105, + 74, + 73, + 85, + 122, + 73, + 49, + 78, + 105, + 73, + 115, + 73, + 110, + 82, + 53, + 99, + 67, + 73, + 54, + 73, + 107, + 112, + 88, + 86, + 67, + 74, + 57, +); + +const SECRET_MARKERS = Object.freeze([ + `${['sk', 'proj'].join('-')}-`, + `${['sb', 'secret'].join('_')}__`, + ['service', 'role'].join('_'), + JWT_HEADER_PREFIX, + ['SUPABASE', 'SERVICE', 'ROLE'].join('_'), + ['OPENAI', 'API', 'KEY'].join('_'), + ['VERCEL', 'TOKEN'].join('_'), + ['VERCEL', 'OIDC', 'TOKEN'].join('_'), + ['PRIVATE', 'KEY'].join('_'), +]); + +const REQUIRED_SOURCE_EVIDENCE = Object.freeze([ + source('scripts/check-v46-gate8-promotion-readiness.mjs', [ + 'V46 Gate 8 promotion readiness', + '--promotion-mode', + 'promotedPointer', + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + ]), + source('scripts/generate-v46-promotion-readiness-report.mjs', [ + 'buildV46PromotionReadinessReport', + V46_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT, + 'v46-promotion-readiness-report', + ]), + source('scripts/promote-bitcode-canon.mjs', [ + "if (version === 'V46')", + 'const v46Gate8Command', + 'buildDerivedV46CommitMessageBody', + 'scripts/check-v46-gate8-promotion-readiness.mjs', + ]), + source('scripts/prepare-bitcode-spec-family-promotion.mjs', [ + "if (version === 'V46')", + 'V46 canonical system specification for protocol comprehension', + 'BITCODE_SPEC_V46_PROVEN.md', + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + ]), + source('scripts/prepare-bitcode-runtime-canon-promotion.mjs', [ + '--next-draft', + 'rewritePackageReadme', + 'rewriteRuntimeDataState', + ]), + source('.github/workflows/v46-canon-promotion.yml', [ + "head.ref == 'version/v46'", + 'node scripts/prepare-bitcode-spec-family-promotion.mjs --version V46', + 'node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V46 --next-draft V47', + 'node scripts/generate-bitcode-proven.mjs --version V46', + 'node scripts/check-bitcode-spec-family.mjs --version V46 --mode promoted --current-target V46', + 'BITCODE_SPEC_V46_PROVEN.md', + 'Promote V46 canon files', + ]), + source('.github/workflows/bitcode-gate-quality.yml', [ + 'check-v46-gate8-promotion-readiness.mjs', + 'elif [ "$POINTER" = "V46" ]', + '--active-canon V46 --draft-target V47', + ]), + source('.github/workflows/bitcode-canon-quality.yml', [ + 'check-v46-gate8-promotion-readiness.mjs', + 'elif [ "$POINTER" = "V46" ]', + '--active-canon V46 --draft-target V47', + ]), + source('packages/protocol/src/canonical/proven-generator.js', [ + 'buildV46ProvenPackage', + 'buildV46PromotionReadinessReport', + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + ]), + source('packages/protocol/test/v46-promotion-readiness.test.js', [ + 'builds source-safe V46 PromotionReadinessReport', + 'v46-promotion-readiness-report', + 'V46 Promotion Readiness', + ]), + source('packages/protocol/src/canonical/v21-specifying.js', [ + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + ]), + source('package.json', [ + 'generate:v46-promotion-readiness', + 'check:v46-promotion-readiness', + 'check:v46-gate8', + ]), +]); + +const REQUIRED_DOCUMENTATION_EVIDENCE = Object.freeze([ + source('BITCODE_SPEC_V46.md', [ + 'V46 promotion readiness canon', + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + 'V46 active / draft V47', + ]), + source('BITCODE_SPEC_V46_DELTA.md', [ + 'Gate 8: V46 Promotion Readiness', + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + 'promotion scripts support V46', + ]), + source('BITCODE_SPEC_V46_NOTES.md', [ + 'Gate 8: V46 Promotion Readiness', + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + 'active V46 / draft V47', + ]), + source('BITCODE_SPEC_V46_PARITY_MATRIX.md', [ + 'Gate 8 implementation readback', + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + 'closed', + ]), + source('SPECIFICATIONS_ROADMAP.md', [ + 'V46 Gate 8 closure anchor', + 'BITCODE_SPEC_V46_PROVEN.md', + ]), + source('README.md', [ + 'check:v46-gate8', + 'v46-canon-promotion.yml', + ]), + source('packages/protocol/README.md', [ + 'V46 Gate 8', + 'V46` active, `V47` draft', + ]), +]); + +/** + * @param {string} relativePath + * @param {readonly string[]} tokens + */ +function source(relativePath, tokens) { + return { relativePath, tokens }; +} + +/** + * @param {string} repoRoot + * @param {{ relativePath: string, tokens: readonly string[] }} item + */ +function scanTokens(repoRoot, item) { + const absolutePath = path.join(repoRoot, item.relativePath); + const present = existsSync(absolutePath); + const content = present ? readFileSync(absolutePath, 'utf8') : ''; + return { + relativePath: item.relativePath, + present, + digest: present ? sha256(content) : null, + requiredTokens: item.tokens.map((token) => ({ + token, + present: content.includes(token), + })), + }; +} + +/** + * @param {string} repoRoot + * @param {string} relativePath + */ +function scanArtifact(repoRoot, relativePath) { + const absolutePath = path.join(repoRoot, relativePath); + const present = existsSync(absolutePath); + const content = present ? readFileSync(absolutePath, 'utf8') : ''; + let parsed = null; + let parseable = false; + if (present) { + try { + parsed = JSON.parse(content); + parseable = true; + } catch { + parseable = false; + } + } + return { + relativePath, + present, + parseable, + digest: present ? sha256(content) : null, + byteLength: present ? Buffer.byteLength(content, 'utf8') : 0, + sourceSafe: present ? !includesSecretMarker(content) && !content.includes('protectedSourceBody') : false, + artifactId: parsed?.artifactId || parsed?.reportId || null, + version: parsed?.version || null, + sourceSafetyVerdict: parsed?.sourceSafetyVerdict || null, + }; +} + +/** + * @param {unknown} value + * @returns {string} + */ +function canonicalJson(value) { + if (value === null || typeof value !== 'object') return JSON.stringify(value); + if (Array.isArray(value)) return `[${value.map(canonicalJson).join(',')}]`; + const record = /** @type {Record} */ (value); + return `{${Object.keys(record) + .sort() + .map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`) + .join(',')}}`; +} + +/** + * @param {unknown} value + * @returns {string} + */ +function sha256(value) { + return `sha256:${crypto.createHash('sha256').update(String(value)).digest('hex')}`; +} + +/** + * @param {string} value + * @returns {boolean} + */ +function includesSecretMarker(value) { + return SECRET_MARKERS.some((marker) => value.includes(marker)); +} + +/** + * @param {ReturnType} entry + */ +function allTokensPresent(entry) { + return entry.present && entry.requiredTokens.every((token) => token.present); +} + +/** + * @param {{ + * version?: string, + * currentTarget?: string, + * generatedAt?: string, + * repoRoot?: string, + * }} [input] + */ +export function buildV46PromotionReadinessReport(input = {}) { + const version = input.version || V46_PROMOTION_READINESS_REPORT_VERSION; + const currentTarget = input.currentTarget || V46_PROMOTION_READINESS_REPORT_CURRENT_TARGET; + const generatedAt = input.generatedAt || '2026-06-02T00:00:00.000Z'; + const repoRoot = input.repoRoot || path.resolve(__dirname, '../../../..'); + const sourceEvidence = REQUIRED_SOURCE_EVIDENCE.map((item) => scanTokens(repoRoot, item)); + const documentationEvidence = REQUIRED_DOCUMENTATION_EVIDENCE.map((item) => scanTokens(repoRoot, item)); + const gateArtifactEvidence = V46_PROMOTION_READINESS_GATE_ARTIFACT_PATHS.map((artifactPath) => + scanArtifact(repoRoot, artifactPath), + ); + const missingGateArtifacts = gateArtifactEvidence.filter((artifact) => !artifact.present).map((artifact) => artifact.relativePath); + const unparseableGateArtifacts = gateArtifactEvidence + .filter((artifact) => artifact.present && !artifact.parseable) + .map((artifact) => artifact.relativePath); + const sourceUnsafeGateArtifacts = gateArtifactEvidence + .filter((artifact) => artifact.present && artifact.sourceSafe !== true) + .map((artifact) => artifact.relativePath); + const sourceEvidenceFailures = sourceEvidence.flatMap((entry) => { + if (!entry.present) return [`missing promotion source ${entry.relativePath}`]; + return entry.requiredTokens + .filter((token) => !token.present) + .map((token) => `${entry.relativePath} missing token ${token.token}`); + }); + const documentationEvidenceFailures = documentationEvidence.flatMap((entry) => { + if (!entry.present) return [`missing promotion documentation ${entry.relativePath}`]; + return entry.requiredTokens + .filter((token) => !token.present) + .map((token) => `${entry.relativePath} missing token ${token.token}`); + }); + const serializedEvidence = canonicalJson({ sourceEvidence, documentationEvidence, gateArtifactEvidence }); + const forbiddenMarkerDetected = includesSecretMarker(serializedEvidence); + const failures = [ + ...sourceEvidenceFailures, + ...documentationEvidenceFailures, + ...missingGateArtifacts.map((artifactPath) => `missing gate artifact ${artifactPath}`), + ...unparseableGateArtifacts.map((artifactPath) => `unparseable gate artifact ${artifactPath}`), + ...sourceUnsafeGateArtifacts.map((artifactPath) => `source-unsafe gate artifact ${artifactPath}`), + ...(forbiddenMarkerDetected ? ['promotion readiness evidence contains a secret-shaped marker'] : []), + ]; + const validationCommands = [ + 'pnpm run check:v46-gate2', + 'pnpm run check:v46-gate3', + 'pnpm run check:v46-gate4', + 'pnpm run check:v46-gate5', + 'pnpm run check:v46-gate6', + 'pnpm run check:v46-gate7', + 'pnpm run check:v46-gate8', + 'node scripts/promote-bitcode-canon.mjs --version V46 --commit HEAD --dry-run', + ]; + const coverage = { + requiredGateArtifactPaths: [...V46_PROMOTION_READINESS_GATE_ARTIFACT_PATHS], + generatedProofOutputs: [...V46_PROMOTION_READINESS_GENERATED_OUTPUTS], + gateArtifactCount: gateArtifactEvidence.length, + missingGateArtifacts, + unparseableGateArtifacts, + sourceUnsafeGateArtifacts, + sourceEvidenceComplete: sourceEvidence.every(allTokensPresent), + documentationEvidenceComplete: documentationEvidence.every(allTokensPresent), + allGateArtifactsCovered: missingGateArtifacts.length === 0, + allGateArtifactsParseable: unparseableGateArtifacts.length === 0, + allGateArtifactsSourceSafe: sourceUnsafeGateArtifacts.length === 0, + generatedProofOutputsCovered: V46_PROMOTION_READINESS_GENERATED_OUTPUTS.includes('BITCODE_SPEC_V46_PROVEN.md'), + promotionWorkflowCovered: sourceEvidence.some((entry) => entry.relativePath === '.github/workflows/v46-canon-promotion.yml' && allTokensPresent(entry)), + gateQualityWorkflowCovered: sourceEvidence.some((entry) => entry.relativePath === '.github/workflows/bitcode-gate-quality.yml' && allTokensPresent(entry)), + canonQualityWorkflowCovered: sourceEvidence.some((entry) => entry.relativePath === '.github/workflows/bitcode-canon-quality.yml' && allTokensPresent(entry)), + promotionScriptCovered: sourceEvidence.some((entry) => entry.relativePath === 'scripts/promote-bitcode-canon.mjs' && allTokensPresent(entry)), + specFamilyPromotionScriptCovered: sourceEvidence.some((entry) => entry.relativePath === 'scripts/prepare-bitcode-spec-family-promotion.mjs' && allTokensPresent(entry)), + runtimePromotionScriptCovered: sourceEvidence.some((entry) => entry.relativePath === 'scripts/prepare-bitcode-runtime-canon-promotion.mjs' && allTokensPresent(entry)), + provenGeneratorCovered: sourceEvidence.some((entry) => entry.relativePath === 'packages/protocol/src/canonical/proven-generator.js' && allTokensPresent(entry)), + prePromotionPosture: 'V45 active / V46 draft', + postPromotionPosture: 'V46 active / V47 draft', + valueBearingMainnetAdmission: false, + credentialsSerialized: forbiddenMarkerDetected, + protectedSourceVisible: false, + rawProtectedPromptVisible: false, + rawProviderResponseVisible: false, + unpaidAssetPackSourceVisible: false, + walletPrivateMaterialVisible: false, + }; + const artifactSeed = { + version, + currentTarget, + validationCommands, + coverage, + sourceSafetyVerdict: V46_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT, + }; + + return { + artifactId: 'v46-promotion-readiness-report', + schemaId: V46_PROMOTION_READINESS_REPORT_SCHEMA_ID, + version, + currentTarget, + generatedAt, + sourceSafetyVerdict: V46_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT, + prePromotionPosture: 'V45 active / V46 draft', + postPromotionPosture: 'V46 active / V47 draft', + branchProtection: { + directMainPushAdmitted: false, + promotionPrRequired: true, + versionBranch: 'version/v46', + versionPromotionPullRequestTitlePrefix: 'V46 Canonical Promotion', + }, + generatedArtifactPolicy: { + provenAppendixPath: 'BITCODE_SPEC_V46_PROVEN.md', + provenAppendixRequiredBeforePromotion: false, + generatedArtifactPrefix: '.bitcode/v46-', + promotionOverwritesPreviewArtifacts: true, + secretValuesSerialized: false, + protectedSourceSerialized: false, + rawProtectedPromptSerialized: false, + rawProviderResponseSerialized: false, + unpaidAssetPackSourceSerialized: false, + }, + validationCommands, + gateArtifactEvidence, + sourceEvidence, + documentationEvidence, + coverage, + failClosedResult: + 'promotion remains blocked when any V46 comprehension artifact, interface rehearsal, workflow, promotion script, generated proof support, source-safety check, or value-bearing mainnet block is missing', + artifactRoot: `v46-protocol-comprehension-promotion-readiness-report:${sha256(canonicalJson(artifactSeed)).slice(7, 31)}`, + passed: failures.length === 0, + failures, + validationCommand: 'pnpm run check:v46-gate8', + }; +} + +export function listMissingV46PromotionReadinessSources(repoRoot = path.resolve(__dirname, '../../../..')) { + return [...REQUIRED_SOURCE_EVIDENCE, ...REQUIRED_DOCUMENTATION_EVIDENCE] + .filter((item) => !existsSync(path.join(repoRoot, item.relativePath))) + .map((item) => item.relativePath); +} diff --git a/packages/protocol/src/canonical/v46-proof-readback-operator-explanation.js b/packages/protocol/src/canonical/v46-proof-readback-operator-explanation.js new file mode 100644 index 000000000..977dbd5b6 --- /dev/null +++ b/packages/protocol/src/canonical/v46-proof-readback-operator-explanation.js @@ -0,0 +1,706 @@ +// @ts-check + +import crypto from 'node:crypto'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { bitcodeVersionAtLeast } from './version-posture.js'; +import { + V46_PROTOCOL_CLAIM_AUTHORITY_IDS, + V46_PROTOCOL_CLAIM_ROWS, + V46_PROTOCOL_PRIVATE_PAYLOAD_IDS, + V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS, +} from './v46-protocol-comprehension-object-model.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); + +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH = + '.bitcode/v46-proof-readback-operator-explanation.json'; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_SCHEMA_ID = + 'bitcode.v46.proofReadbackOperatorExplanation.v1'; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_VERSION = 'V46'; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_CURRENT_TARGET = 'V45'; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_SOURCE_SAFETY_VERDICT = + 'source-safe-proof-readback-operator-explanation'; + +export const V46_PROOF_READBACK_EVIDENCE_CLASS_IDS = Object.freeze([ + 'canonical_spec_generated_proof', + 'execution_workflow_receipt', + 'ledger_journal', + 'database_projection', + 'object_storage_root', + 'telemetry_stream', + 'wallet_provider_receipt', + 'repository_delivery_receipt', + 'repair_reconciliation_receipt', +]); + +export const V46_PROOF_READBACK_REQUIRED_OPERATOR_QUESTION_IDS = Object.freeze([ + 'what_evidence_is_this', + 'what_can_it_authorize', + 'what_can_it_not_authorize', + 'what_stronger_evidence_must_agree', + 'what_repair_happens_on_conflict', +]); + +export const V46_PROOF_READBACK_OPERATOR_DECISION_IDS = Object.freeze([ + 'state-advancement-requires-required-proof-root', + 'telemetry-is-observability-only', + 'database-projection-is-not-ledger-truth', + 'payment-observation-is-not-finality', + 'wallet-provider-receipt-is-non-custodial-authority', + 'repository-delivery-receipt-is-entitled-source-unlock', + 'repair-reconciliation-fails-closed', + 'interfaces-explain-without-parallel-authority', +]); + +const SOURCE_PATHS = Object.freeze({ + activePointer: 'BITCODE_SPEC.txt', + spec: 'BITCODE_SPEC_V46.md', + delta: 'BITCODE_SPEC_V46_DELTA.md', + notes: 'BITCODE_SPEC_V46_NOTES.md', + parity: 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + roadmap: 'SPECIFICATIONS_ROADMAP.md', + v45Spec: 'BITCODE_SPEC_V45.md', + v45Proven: 'BITCODE_SPEC_V45_PROVEN.md', + readme: 'README.md', + protocolReadme: 'packages/protocol/README.md', + packageJson: 'package.json', + packageIndex: 'packages/protocol/src/index.js', + packageTypes: 'packages/protocol/src/index.d.ts', + packageSource: 'packages/protocol/src/canonical/v46-proof-readback-operator-explanation.js', + packageTest: 'packages/protocol/test/v46-proof-readback-operator-explanation.test.js', + generator: 'scripts/generate-v46-proof-readback-operator-explanation.mjs', + checker: 'scripts/check-v46-gate6-proof-readback-operator-explanation.mjs', + gateWorkflow: '.github/workflows/bitcode-gate-quality.yml', + canonWorkflow: '.github/workflows/bitcode-canon-quality.yml', + v40LedgerStorageSync: 'packages/protocol/src/canonical/v40-ledger-storage-sync.js', + v39OperationalTelemetryReadback: + 'packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js', + distributedExecutionReceipt: 'packages/pipeline-hosts/src/distributed-execution-runtime-receipt.ts', + btdReceipts: 'packages/btd/src/receipts.ts', + btdReconciliation: 'packages/btd/src/reconciliation.ts', + btdSettlement: 'packages/btd/src/settlement.ts', + btdWallet: 'packages/btd/src/wallet.ts', + btdBtcFeeOperation: 'packages/btd/src/btc-fee-operation.ts', + settlementBoundary: 'packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts', + settlementBoundaryTest: + 'packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts', + localStagingRehearsal: 'packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts', + uapiLedgerStorageSync: 'uapi/app/bitcode-ledger-storage-sync.ts', + uapiLedgerStorageSyncTest: 'uapi/tests/bitcodeLedgerStorageSync.test.ts', +}); + +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_SOURCE_ROOTS = Object.freeze({ + ...SOURCE_PATHS, +}); + +const SECRET_MARKERS = Object.freeze([ + `${['sk', 'proj'].join('-')}-`, + `${['sb', 'secret'].join('_')}__`, + ['service', 'role'].join('_'), + ['eyJ', 'hbGciOiJI', 'UzI1NiIsInR5cCI6IkpXVCJ9'].join(''), + ['SUPABASE', 'SERVICE', 'ROLE'].join('_'), + ['OPENAI', 'API', 'KEY'].join('_'), + ['VERCEL', 'TOKEN'].join('_'), + ['VERCEL', 'OIDC', 'TOKEN'].join('_'), + ['PRIVATE', 'KEY'].join('_'), +]); + +const FORBIDDEN_EXPLANATION_PHRASES = Object.freeze([ + 'database is ledger truth', + 'telemetry advances state', + 'provider observation is final settlement', + 'payment observation is finality', + 'repository delivery receipt bypasses rights', + 'proof roots reveal source', + 'wallet provider receipt contains private keys', + 'interfaces create protocol authority', + 'value-bearing mainnet operation is live', +]); + +function digest(value) { + return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24); +} + +function readSource(repoRoot, sourcePath) { + const absolutePath = path.join(repoRoot, sourcePath); + return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : ''; +} + +function sourceExists(repoRoot, sourcePath) { + return existsSync(path.join(repoRoot, sourcePath)); +} + +function sourceRoot(repoRoot, sourcePath) { + return `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`; +} + +function predicateResult(id, sourcePath, passed) { + return { id, sourcePath, passed: Boolean(passed) }; +} + +function claimExists(claimId) { + return V46_PROTOCOL_CLAIM_ROWS.some((row) => row.claimId === claimId); +} + +function authorityExists(authorityId) { + return V46_PROTOCOL_CLAIM_AUTHORITY_IDS.includes(authorityId); +} + +function requiredTokensPresent(repoRoot, row) { + const joined = row.sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return row.requiredCopyTokens.every((token) => joined.includes(token)); +} + +function scanSourcesForMarkers(repoRoot, sourcePaths, markers) { + const joined = sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return markers.filter((marker) => marker && joined.includes(marker)); +} + +function proofReadbackRow({ + evidenceClassId, + label, + authorityIds, + claimIds, + sourcePaths, + requiredCopyTokens, + canAuthorize, + cannotAuthorize, + strongerEvidenceRequired, + conflictBehavior, + repairStates, + operatorExplanation, +}) { + return { + evidenceClassId, + label, + authorityIds, + claimIds, + sourcePaths, + requiredCopyTokens, + canAuthorize, + cannotAuthorize, + strongerEvidenceRequired, + conflictBehavior, + repairStates, + operatorQuestionIds: [...V46_PROOF_READBACK_REQUIRED_OPERATOR_QUESTION_IDS], + operatorExplanation, + noParallelStateAuthority: true, + stateAdvanceRequiresProofRoot: true, + sourceSafeMetadataOnly: true, + protectedSourceVisible: false, + unpaidAssetPackSourceVisible: false, + rawPromptVisible: false, + interpolatedPromptVisible: false, + rawProviderResponseVisible: false, + credentialsSerialized: false, + walletPrivateMaterialVisible: false, + settlementPrivatePayloadVisible: false, + valueBearingMainnetAdmitted: false, + sourceSafeFieldIds: [...V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS], + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + rowRoot: `v46-proof-readback-row:${digest(JSON.stringify({ evidenceClassId, authorityIds, claimIds }))}`, + }; +} + +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_ROWS = Object.freeze([ + proofReadbackRow({ + evidenceClassId: 'canonical_spec_generated_proof', + label: 'Canonical Specification And Generated Proof', + authorityIds: ['canonical-specification', 'generated-proof'], + claimIds: ['operator-evidence-is-source-safe-readback', 'repair-fails-closed'], + sourcePaths: [SOURCE_PATHS.v45Spec, SOURCE_PATHS.v45Proven, SOURCE_PATHS.spec], + requiredCopyTokens: [ + 'Bitcode state advances only by proof-backed readback', + 'generated proof appendix', + 'proof-backed readback is the only state advancement', + ], + canAuthorize: + 'Defines protocol law, accepted evidence classes, proof-family roots, and source-safe repair expectations.', + cannotAuthorize: + 'Cannot by itself prove a live payment, BTD rights transfer, source unlock, or repository delivery happened.', + strongerEvidenceRequired: ['ledger_journal', 'wallet_provider_receipt', 'repository_delivery_receipt'], + conflictBehavior: 'prefer-active-canon-and-generated-proof-family-then-fail-closed-to-repair', + repairStates: ['stale_spec_pointer', 'missing_generated_proof', 'conflicting_generated_artifact'], + operatorExplanation: + 'Spec and generated proof say what may count as evidence; runtime state still needs boundary readback from the relevant system.', + }), + proofReadbackRow({ + evidenceClassId: 'execution_workflow_receipt', + label: 'Execution And Workflow Receipt', + authorityIds: ['generated-proof'], + claimIds: ['operator-evidence-is-source-safe-readback', 'telemetry-is-observability-only'], + sourcePaths: [SOURCE_PATHS.distributedExecutionReceipt, SOURCE_PATHS.v39OperationalTelemetryReadback, SOURCE_PATHS.v45Spec], + requiredCopyTokens: [ + 'bitcode.distributed_execution_runtime_receipt', + 'proofRoot', + 'repairPosture', + 'Telemetry is observability only', + ], + canAuthorize: + 'Proves that an execution, worker, PTRR agent, tool, proof generation, storage write, or repair job ran and produced roots.', + cannotAuthorize: + 'Cannot alone settle BTC, transfer BTD rights, admit source delivery, or override ledger/database/storage repair posture.', + strongerEvidenceRequired: ['ledger_journal', 'database_projection', 'object_storage_root'], + conflictBehavior: 'receipt-output-must-reconcile-with-ledger-storage-and-proof-or-enter-repair', + repairStates: ['missing_parent_receipt', 'failed_execution', 'unreconciled_output_root'], + operatorExplanation: + 'Execution receipts are replay and provenance evidence; they explain work performed but do not own commercial finality.', + }), + proofReadbackRow({ + evidenceClassId: 'ledger_journal', + label: 'Ledger Journal', + authorityIds: ['ledger-readback'], + claimIds: [ + 'payment-observation-is-not-finality', + 'finality-authorizes-rights-and-delivery', + 'compensation-follows-source-to-shares', + ], + sourcePaths: [ + SOURCE_PATHS.settlementBoundary, + SOURCE_PATHS.settlementBoundaryTest, + SOURCE_PATHS.btdReceipts, + SOURCE_PATHS.v40LedgerStorageSync, + ], + requiredCopyTokens: [ + 'AssetPackSettlementFinalityReceipt', + 'finalityState', + 'blocked_until_payment_finality', + 'ledger:database-storage-reconciliation', + ], + canAuthorize: + 'Provides payment/finality and settlement readback required before BTD rights, delivery unlock, and compensation allocation.', + cannotAuthorize: + 'Cannot expose source without matching rights, storage, repository delivery, and reconciliation evidence.', + strongerEvidenceRequired: ['wallet_provider_receipt', 'database_projection', 'object_storage_root', 'repository_delivery_receipt'], + conflictBehavior: 'ledger-finality-conflict-blocks-rights-delivery-and-compensation', + repairStates: ['underpayment', 'unconfirmed_finality', 'reorged_or_failed_finality', 'ledger_root_mismatch'], + operatorExplanation: + 'Ledger readback is the payment and finality boundary; payment observation remains non-final until policy confirms finality.', + }), + proofReadbackRow({ + evidenceClassId: 'database_projection', + label: 'Database Projection', + authorityIds: ['database-projection'], + claimIds: ['operator-evidence-is-source-safe-readback', 'repair-fails-closed'], + sourcePaths: [SOURCE_PATHS.btdReconciliation, SOURCE_PATHS.uapiLedgerStorageSync, SOURCE_PATHS.uapiLedgerStorageSyncTest], + requiredCopyTokens: [ + 'DatabaseProjectedFact', + 'LedgerDatabaseReconciliationReport', + 'databaseProjectionRoot', + 'missing_database_projection', + ], + canAuthorize: + 'Provides queryable read-model state and operator/product projection once reconciled to stronger proof and ledger roots.', + cannotAuthorize: + 'Cannot override ledger finality, object-storage custody, wallet authority, repository delivery, or proof-contract law.', + strongerEvidenceRequired: ['ledger_journal', 'object_storage_root', 'wallet_provider_receipt'], + conflictBehavior: 'database-projection-is-repaired-or-quarantined-when-stronger-roots-disagree', + repairStates: ['missing_database_projection', 'database_orphan_projection', 'ledger_finality_mismatch'], + operatorExplanation: + 'Database rows make state readable; they are projections, not stronger truth than ledger, storage, wallet, or delivery readback.', + }), + proofReadbackRow({ + evidenceClassId: 'object_storage_root', + label: 'Object Storage And Protected-Source Root', + authorityIds: ['object-storage-root'], + claimIds: ['delivery-is-entitled-source-unlock', 'operator-evidence-is-source-safe-readback'], + sourcePaths: [SOURCE_PATHS.btdReconciliation, SOURCE_PATHS.settlementBoundary, SOURCE_PATHS.v40LedgerStorageSync], + requiredCopyTokens: [ + 'ObjectStorageArtifactFact', + 'asset_pack_protected_source_encrypted', + 'objectStorageRoot', + 'storage:artifact-lock-and-source-safe-projection', + ], + canAuthorize: + 'Proves custody, source-safe projection, encrypted protected-source storage, delivery manifest, and withheld bundle roots.', + cannotAuthorize: + 'Cannot grant Reader visibility without settlement finality, BTD rights transfer, and repository delivery receipt.', + strongerEvidenceRequired: ['ledger_journal', 'repository_delivery_receipt', 'repair_reconciliation_receipt'], + conflictBehavior: 'storage-root-conflict-blocks-source-unlock-until-projection-repair', + repairStates: ['missing_object_storage_artifact', 'object_storage_root_mismatch', 'stale_storage_manifest'], + operatorExplanation: + 'Storage roots prove what exists and where custody sits; entitlement still requires settlement, rights, and delivery readback.', + }), + proofReadbackRow({ + evidenceClassId: 'telemetry_stream', + label: 'Telemetry Stream', + authorityIds: ['telemetry-observability-only'], + claimIds: ['telemetry-is-observability-only', 'operator-evidence-is-source-safe-readback'], + sourcePaths: [SOURCE_PATHS.v39OperationalTelemetryReadback, SOURCE_PATHS.distributedExecutionReceipt, SOURCE_PATHS.v45Spec], + requiredCopyTokens: [ + 'telemetry stream', + 'Telemetry is observability only', + 'operator readback', + 'source_safe_reading_operational_telemetry_repair_readback_metadata', + ], + canAuthorize: + 'Explains live progress, event lineage, prompt/result disclosure posture, repair hooks, and stream UI readback.', + cannotAuthorize: + 'Cannot advance AssetPack lifecycle, BTC settlement, BTD rights, source unlock, repository delivery, or compensation.', + strongerEvidenceRequired: ['execution_workflow_receipt', 'ledger_journal', 'repository_delivery_receipt'], + conflictBehavior: 'telemetry-conflict-is-debug-signal-not-state-truth', + repairStates: ['missing_event_root', 'stale_stream_state', 'conflicting_operator_readback'], + operatorExplanation: + 'Telemetry is the running-system narrative; it remains observability and troubleshooting evidence only.', + }), + proofReadbackRow({ + evidenceClassId: 'wallet_provider_receipt', + label: 'Wallet And Provider Receipt', + authorityIds: ['wallet-provider-receipt'], + claimIds: ['payment-observation-is-not-finality', 'finality-authorizes-rights-and-delivery'], + sourcePaths: [ + SOURCE_PATHS.btdWallet, + SOURCE_PATHS.btdBtcFeeOperation, + SOURCE_PATHS.settlementBoundary, + SOURCE_PATHS.uapiLedgerStorageSync, + ], + requiredCopyTokens: [ + 'WalletSignerSession', + 'serverCustody: false', + 'wallet_provider_session', + 'server_custody_rejected', + ], + canAuthorize: + 'Proves non-custodial wallet posture, provider session, signing capability, and payment-observation boundary.', + cannotAuthorize: + 'Cannot be treated as final settlement and never serializes wallet private material or server custody.', + strongerEvidenceRequired: ['ledger_journal', 'canonical_spec_generated_proof'], + conflictBehavior: 'wallet-provider-conflict-blocks-payment-and-requires-wallet-repair', + repairStates: ['address_authorization_required', 'wrong_network_blocked', 'server_custody_blocked'], + operatorExplanation: + 'Wallet/provider receipts prove user-controlled signing and payment observation posture; finality still comes from ledger readback.', + }), + proofReadbackRow({ + evidenceClassId: 'repository_delivery_receipt', + label: 'Repository Delivery Receipt', + authorityIds: ['repository-delivery-receipt'], + claimIds: ['delivery-is-entitled-source-unlock', 'finality-authorizes-rights-and-delivery'], + sourcePaths: [SOURCE_PATHS.settlementBoundary, SOURCE_PATHS.settlementBoundaryTest, SOURCE_PATHS.uapiLedgerStorageSync], + requiredCopyTokens: [ + 'pull_request_after_settlement', + 'source_bearing_pull_request_ready', + 'blocked_until_pull_request_delivery', + 'deliveryRoot', + ], + canAuthorize: + 'Proves entitled repository delivery after settlement finality, BTD rights transfer, compensation, and storage reconciliation.', + cannotAuthorize: + 'Cannot bypass quote, finality, rights transfer, source-to-shares conservation, or storage proof.', + strongerEvidenceRequired: ['ledger_journal', 'object_storage_root', 'repair_reconciliation_receipt'], + conflictBehavior: 'delivery-missing-keeps-source-withheld-and-enters-repair', + repairStates: ['pull_request_delivery_missing', 'delivery_withheld', 'recover_pull_request_delivery'], + operatorExplanation: + 'Repository delivery receipt is the source-unlock readback boundary for an entitled Reader, not public source permission.', + }), + proofReadbackRow({ + evidenceClassId: 'repair_reconciliation_receipt', + label: 'Repair And Reconciliation Receipt', + authorityIds: ['generated-proof', 'database-projection', 'ledger-readback', 'object-storage-root'], + claimIds: ['repair-fails-closed', 'operator-evidence-is-source-safe-readback'], + sourcePaths: [ + SOURCE_PATHS.btdReconciliation, + SOURCE_PATHS.settlementBoundary, + SOURCE_PATHS.settlementBoundaryTest, + SOURCE_PATHS.v40LedgerStorageSync, + ], + requiredCopyTokens: [ + 'ProjectionRepairReceipt', + 'repairPosture', + 'repair_ledger_database_storage_projection', + 'repair:drift-finality-delivery-recovery', + ], + canAuthorize: + 'Records mismatch class, blocker, retry action, operator approval need, proof roots, and the source-safe repair posture.', + cannotAuthorize: + 'Cannot silently turn conflicting evidence into success or expose source while repair is unresolved.', + strongerEvidenceRequired: ['canonical_spec_generated_proof', 'ledger_journal', 'object_storage_root', 'repository_delivery_receipt'], + conflictBehavior: 'every-evidence-mismatch-fails-closed-to-source-safe-repair', + repairStates: ['projection_repair', 'finality_repair', 'delivery_recovery', 'operator_approval_required'], + operatorExplanation: + 'Repair receipts are how operators explain and replay disagreement; unresolved repair keeps the narrower source-safe state.', + }), +]); + +function buildPredicateResults(repoRoot) { + const sources = Object.fromEntries( + Object.entries(SOURCE_PATHS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]), + ); + + return [ + predicateResult('active-pointer-supports-v46-draft-or-later', SOURCE_PATHS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V45')), + predicateResult( + 'spec-defines-gate6-law', + SOURCE_PATHS.spec, + sources.spec.includes('V46 proof readback operator explanation law') && + sources.spec.includes(V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH), + ), + predicateResult( + 'delta-records-gate6', + SOURCE_PATHS.delta, + sources.delta.includes('Gate 6: Proof Readback And Source-Safe Operator Explanation') && + sources.delta.includes(V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH), + ), + predicateResult( + 'notes-records-gate6', + SOURCE_PATHS.notes, + sources.notes.includes('V46 proof readback operator explanation atom') && + sources.notes.includes('evidence authority ladder'), + ), + predicateResult( + 'parity-records-gate6', + SOURCE_PATHS.parity, + sources.parity.includes('V46ProofReadbackOperatorExplanation') && + sources.parity.includes(V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH), + ), + predicateResult( + 'roadmap-records-gate6-closure', + SOURCE_PATHS.roadmap, + sources.roadmap.includes('V46 Gate 6 closure anchor') && + sources.roadmap.includes('V46ProofReadbackOperatorExplanation') && + sources.roadmap.includes(V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH), + ), + predicateResult( + 'readmes-document-gate6', + SOURCE_PATHS.readme, + sources.readme.includes('V46 Gate 6') && sources.protocolReadme.includes('V46ProofReadbackOperatorExplanation'), + ), + predicateResult( + 'v45-proof-readback-law-present', + SOURCE_PATHS.v45Spec, + sources.v45Spec.includes('Bitcode state advances only by proof-backed readback') && + sources.v45Spec.includes('Telemetry is observability only') && + sources.v45Spec.includes('Provider observation is not final settlement'), + ), + predicateResult( + 'distributed-execution-receipts-are-source-safe', + SOURCE_PATHS.distributedExecutionReceipt, + sources.distributedExecutionReceipt.includes('bitcode.distributed_execution_runtime_receipt') && + sources.distributedExecutionReceipt.includes('protectedSourceVisible: false') && + sources.distributedExecutionReceipt.includes('receiptRoot'), + ), + predicateResult( + 'ledger-storage-sync-binds-finality-repair-delivery', + SOURCE_PATHS.v40LedgerStorageSync, + sources.v40LedgerStorageSync.includes('blocked_until_payment_finality') && + sources.v40LedgerStorageSync.includes('ledger:database-storage-reconciliation') && + sources.v40LedgerStorageSync.includes('delivery:post-settlement-pull-request-unlock'), + ), + predicateResult( + 'telemetry-readback-is-observability-only', + SOURCE_PATHS.v39OperationalTelemetryReadback, + sources.v45Spec.includes('Telemetry is observability only') && + sources.v39OperationalTelemetryReadback.includes('operator readback') && + sources.v39OperationalTelemetryReadback.includes('source_safe_reading_operational_telemetry_repair_readback_metadata'), + ), + predicateResult( + 'reconciliation-defines-database-storage-repair', + SOURCE_PATHS.btdReconciliation, + sources.btdReconciliation.includes('LedgerDatabaseReconciliationReport') && + sources.btdReconciliation.includes('DatabaseProjectedFact') && + sources.btdReconciliation.includes('ObjectStorageArtifactFact') && + sources.btdReconciliation.includes('ProjectionRepairReceipt'), + ), + predicateResult( + 'wallet-boundary-is-no-custody', + SOURCE_PATHS.btdWallet, + sources.btdWallet.includes('WalletSignerSession') && + sources.btdWallet.includes('serverCustody: false') && + sources.btdWallet.includes('Bitcode wallet sessions must not custody user private keys'), + ), + predicateResult( + 'settlement-boundary-blocks-until-finality-and-delivery', + SOURCE_PATHS.settlementBoundary, + sources.settlementBoundary.includes('AssetPackSettlementFinalityReceipt') && + sources.settlementBoundary.includes('blocked_until_payment_finality') && + sources.settlementBoundary.includes('blocked_until_pull_request_delivery') && + sources.settlementBoundary.includes('AssetPackSettlementRightsDeliveryRepairPosture'), + ), + predicateResult( + 'settlement-tests-cover-fail-closed-delivery', + SOURCE_PATHS.settlementBoundaryTest, + sources.settlementBoundaryTest.includes('fails closed for %s BTC state before finality') && + sources.settlementBoundaryTest.includes('withholds delivery when ledger, database, or object storage projections drift') && + sources.settlementBoundaryTest.includes('withholds source unlock and rights delivery when repository delivery is missing'), + ), + predicateResult( + 'uapi-ledger-storage-sync-contract-present', + SOURCE_PATHS.uapiLedgerStorageSync, + sources.uapiLedgerStorageSync.includes('BITCODE_LEDGER_STORAGE_SYNC_CONTRACT') && + sources.uapiLedgerStorageSync.includes('walletPrivateMaterialVisible: false') && + sources.uapiLedgerStorageSync.includes('sourceBearingDeliveryVisibleBeforeSettlement: false'), + ), + predicateResult( + 'package-exports-gate6', + SOURCE_PATHS.packageIndex, + sources.packageIndex.includes("v46-proof-readback-operator-explanation.js") && + sources.packageTypes.includes('V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH'), + ), + predicateResult( + 'package-test-covers-gate6', + SOURCE_PATHS.packageTest, + sources.packageTest.includes('V46 proof readback operator explanation') && + sources.packageTest.includes('telemetry_stream'), + ), + predicateResult( + 'generator-and-checker-exist', + SOURCE_PATHS.generator, + sources.generator.includes('buildV46ProofReadbackOperatorExplanation') && + sources.checker.includes('V46 Gate 6 proof readback operator explanation check'), + ), + predicateResult( + 'package-json-scripts', + SOURCE_PATHS.packageJson, + sources.packageJson.includes('generate:v46-proof-readback-operator-explanation') && + sources.packageJson.includes('check:v46-gate6'), + ), + predicateResult( + 'workflows-run-gate6', + SOURCE_PATHS.gateWorkflow, + sources.gateWorkflow.includes('check-v46-gate6-proof-readback-operator-explanation.mjs') && + sources.canonWorkflow.includes('check-v46-gate6-proof-readback-operator-explanation.mjs'), + ), + ]; +} + +export function buildV46ProofReadbackOperatorExplanation(input = {}) { + const repoRoot = input.repoRoot ? path.resolve(input.repoRoot) : DEFAULT_REPO_ROOT; + const rows = V46_PROOF_READBACK_OPERATOR_EXPLANATION_ROWS.map((row) => ({ + ...row, + sourceRoots: row.sourcePaths.map((sourcePath) => sourceRoot(repoRoot, sourcePath)), + sourceFilesPresent: row.sourcePaths.every((sourcePath) => sourceExists(repoRoot, sourcePath)), + requiredCopyPresent: requiredTokensPresent(repoRoot, row), + })); + const sourcePathsToScan = [ + SOURCE_PATHS.spec, + SOURCE_PATHS.delta, + SOURCE_PATHS.notes, + SOURCE_PATHS.parity, + SOURCE_PATHS.roadmap, + SOURCE_PATHS.readme, + SOURCE_PATHS.protocolReadme, + SOURCE_PATHS.packageTest, + SOURCE_PATHS.generator, + SOURCE_PATHS.checker, + ]; + const predicateResults = buildPredicateResults(repoRoot); + const failedPredicateIds = predicateResults.filter((predicate) => !predicate.passed).map((predicate) => predicate.id); + const allAuthorityIds = rows.flatMap((row) => row.authorityIds); + const allClaimIds = rows.flatMap((row) => row.claimIds); + const rowsMissingRequiredCopy = rows.filter((row) => !row.requiredCopyPresent).map((row) => row.evidenceClassId); + const rowsMissingSourceFiles = rows.filter((row) => !row.sourceFilesPresent).map((row) => row.evidenceClassId); + const forbiddenPhraseHits = scanSourcesForMarkers(repoRoot, sourcePathsToScan, FORBIDDEN_EXPLANATION_PHRASES); + const secretMarkerHits = scanSourcesForMarkers(repoRoot, sourcePathsToScan, SECRET_MARKERS); + + const coverage = { + predicateCount: predicateResults.length, + failedPredicateIds, + evidenceClassCount: rows.length, + allEvidenceClassesCovered: V46_PROOF_READBACK_EVIDENCE_CLASS_IDS.every((id) => + rows.some((row) => row.evidenceClassId === id), + ), + allAuthorityIdsKnown: allAuthorityIds.every(authorityExists), + allClaimIdsKnown: allClaimIds.every(claimExists), + allOperatorQuestionsCovered: V46_PROOF_READBACK_REQUIRED_OPERATOR_QUESTION_IDS.every((id) => + rows.every((row) => row.operatorQuestionIds.includes(id)), + ), + allRowsHaveConflictBehavior: rows.every((row) => row.conflictBehavior.length > 0), + allRowsHaveRepairStates: rows.every((row) => row.repairStates.length > 0), + allRowsNameStrongerEvidence: rows.every((row) => row.strongerEvidenceRequired.length > 0), + sourceFilesPresent: rows.every((row) => row.sourceFilesPresent), + rowsMissingSourceFiles, + rowsMissingRequiredCopy, + noParallelStateAuthority: rows.every((row) => row.noParallelStateAuthority), + stateAdvanceRequiresProofRoot: rows.every((row) => row.stateAdvanceRequiresProofRoot), + sourceSafeMetadataOnly: rows.every((row) => row.sourceSafeMetadataOnly), + protectedSourceVisible: rows.some((row) => row.protectedSourceVisible), + unpaidAssetPackSourceVisible: rows.some((row) => row.unpaidAssetPackSourceVisible), + rawPromptVisible: rows.some((row) => row.rawPromptVisible), + interpolatedPromptVisible: rows.some((row) => row.interpolatedPromptVisible), + rawProviderResponseVisible: rows.some((row) => row.rawProviderResponseVisible), + credentialsSerialized: rows.some((row) => row.credentialsSerialized), + walletPrivateMaterialVisible: rows.some((row) => row.walletPrivateMaterialVisible), + settlementPrivatePayloadVisible: rows.some((row) => row.settlementPrivatePayloadVisible), + valueBearingMainnetAdmitted: rows.some((row) => row.valueBearingMainnetAdmitted), + telemetryObservabilityOnly: rows.some((row) => row.evidenceClassId === 'telemetry_stream' && row.cannotAuthorize.includes('Cannot advance')), + databaseProjectionNotLedgerTruth: rows.some((row) => row.evidenceClassId === 'database_projection' && row.cannotAuthorize.includes('Cannot override ledger finality')), + paymentObservationNotFinality: rows.some((row) => row.evidenceClassId === 'wallet_provider_receipt' && row.cannotAuthorize.includes('final settlement')), + repositoryDeliveryRequiresEntitlement: rows.some((row) => row.evidenceClassId === 'repository_delivery_receipt' && row.canAuthorize.includes('entitled repository delivery')), + repairFailsClosed: rows.some((row) => row.evidenceClassId === 'repair_reconciliation_receipt' && row.conflictBehavior.includes('fails-closed')), + forbiddenPhraseHits, + secretMarkerHits, + }; + + const proofRoots = { + rowSetRoot: `sha256:${digest(JSON.stringify(rows.map((row) => row.rowRoot)))}`, + predicateRoot: `sha256:${digest(JSON.stringify(predicateResults))}`, + coverageRoot: `sha256:${digest(JSON.stringify(coverage))}`, + }; + + return { + artifactId: 'v46-proof-readback-operator-explanation', + schemaId: V46_PROOF_READBACK_OPERATOR_EXPLANATION_SCHEMA_ID, + version: V46_PROOF_READBACK_OPERATOR_EXPLANATION_VERSION, + currentTarget: V46_PROOF_READBACK_OPERATOR_EXPLANATION_CURRENT_TARGET, + generatedAt: input.generatedAt || '2026-06-02T00:00:00.000Z', + artifactPath: V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH, + sourceSafetyVerdict: V46_PROOF_READBACK_OPERATOR_EXPLANATION_SOURCE_SAFETY_VERDICT, + evidenceClassIds: [...V46_PROOF_READBACK_EVIDENCE_CLASS_IDS], + operatorQuestionIds: [...V46_PROOF_READBACK_REQUIRED_OPERATOR_QUESTION_IDS], + operatorDecisionIds: [...V46_PROOF_READBACK_OPERATOR_DECISION_IDS], + proofReadbackRows: rows, + predicateResults, + coverage, + proofRoots: { + ...proofRoots, + artifactRoot: `sha256:${digest(JSON.stringify({ rows: rows.map((row) => row.rowRoot), coverage, proofRoots }))}`, + }, + sourceSafety: { + sourceSafeMetadataOnly: coverage.sourceSafeMetadataOnly, + protectedSourceVisible: coverage.protectedSourceVisible, + unpaidAssetPackSourceVisible: coverage.unpaidAssetPackSourceVisible, + rawPromptVisible: coverage.rawPromptVisible, + interpolatedPromptVisible: coverage.interpolatedPromptVisible, + rawProviderResponseVisible: coverage.rawProviderResponseVisible, + credentialsSerialized: coverage.credentialsSerialized, + walletPrivateMaterialVisible: coverage.walletPrivateMaterialVisible, + settlementPrivatePayloadVisible: coverage.settlementPrivatePayloadVisible, + valueBearingMainnetAdmitted: coverage.valueBearingMainnetAdmitted, + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + }, + passed: + failedPredicateIds.length === 0 && + coverage.allEvidenceClassesCovered && + coverage.allAuthorityIdsKnown && + coverage.allClaimIdsKnown && + coverage.allOperatorQuestionsCovered && + coverage.allRowsHaveConflictBehavior && + coverage.allRowsHaveRepairStates && + coverage.allRowsNameStrongerEvidence && + coverage.sourceFilesPresent && + coverage.rowsMissingRequiredCopy.length === 0 && + coverage.noParallelStateAuthority && + coverage.stateAdvanceRequiresProofRoot && + coverage.sourceSafeMetadataOnly && + !coverage.protectedSourceVisible && + !coverage.unpaidAssetPackSourceVisible && + !coverage.rawPromptVisible && + !coverage.interpolatedPromptVisible && + !coverage.rawProviderResponseVisible && + !coverage.credentialsSerialized && + !coverage.walletPrivateMaterialVisible && + !coverage.settlementPrivatePayloadVisible && + !coverage.valueBearingMainnetAdmitted && + coverage.telemetryObservabilityOnly && + coverage.databaseProjectionNotLedgerTruth && + coverage.paymentObservationNotFinality && + coverage.repositoryDeliveryRequiresEntitlement && + coverage.repairFailsClosed && + coverage.forbiddenPhraseHits.length === 0 && + coverage.secretMarkerHits.length === 0, + }; +} diff --git a/packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js b/packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js new file mode 100644 index 000000000..6e4675647 --- /dev/null +++ b/packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js @@ -0,0 +1,821 @@ +// @ts-check + +import crypto from 'node:crypto'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { bitcodeVersionAtLeast } from './version-posture.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); + +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH = + '.bitcode/v46-protocol-comprehension-object-model.json'; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SCHEMA_ID = + 'bitcode.v46.protocolComprehensionObjectModel.v1'; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_VERSION = 'V46'; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_CURRENT_TARGET = 'V45'; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SOURCE_SAFETY_VERDICT = + 'source-safe-protocol-comprehension-metadata'; + +export const V46_PROTOCOL_COMPREHENSION_OBJECT_IDS = Object.freeze([ + 'AssetPack', + 'DepositAssetPackOption', + 'DepositoryAssetPack', + 'ReadRequest', + 'ReviewedNeed', + 'FindingFitsReceipt', + 'SelectedFitSet', + 'NeedFitAssetPack', + 'SourceSafePreview', + 'BtdScalarVolumeReceipt', + 'BtcQuote', + 'BtcSettlementReceipt', + 'BtdRightsReceipt', + 'SourceUnlockDeliveryReceipt', + 'SourceToSharesAllocation', + 'ContributorCompensationStatement', + 'ProofRoot', + 'RepairCase', + 'InterfaceClaim', +]); + +export const V46_PROTOCOL_CLAIM_CATEGORY_IDS = Object.freeze([ + 'protocol-law', + 'product-guidance', + 'operator-evidence', + 'investor-framing', + 'telemetry-observability', + 'preview-claim', + 'quote-claim', + 'settlement-claim', + 'rights-claim', + 'delivery-claim', + 'compensation-claim', + 'repair-claim', +]); + +export const V46_PROTOCOL_CLAIM_AUTHORITY_IDS = Object.freeze([ + 'canonical-specification', + 'generated-proof', + 'ledger-readback', + 'database-projection', + 'object-storage-root', + 'wallet-provider-receipt', + 'repository-delivery-receipt', + 'telemetry-observability-only', + 'interface-guidance-only', + 'public-education-only', +]); + +export const V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS = Object.freeze([ + 'before-settlement', + 'after-preview', + 'after-quote', + 'after-payment-observation', + 'after-finality', + 'after-btd-rights-transfer', + 'after-repository-delivery', +]); + +export const V46_PROTOCOL_FORBIDDEN_CLAIM_IDS = Object.freeze([ + 'assetpack-is-raw-source', + 'btd-is-only-a-read-right', + 'btd-is-money', + 'deposit-option-is-final-btd', + 'preview-discloses-source', + 'quote-is-payment', + 'payment-observed-is-finality', + 'database-is-ledger-truth', + 'telemetry-advances-state', + 'conversation-advances-state', + 'investor-copy-is-protocol-law', + 'mainnet-value-is-admitted', + 'server-custodies-wallet-private-material', +]); + +export const V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS = Object.freeze([ + 'objectId', + 'claimId', + 'claimCategoryId', + 'authorityId', + 'surfaceId', + 'stateId', + 'measurementRoot', + 'proofRoot', + 'ledgerRoot', + 'databaseProjectionRoot', + 'storageRoot', + 'walletReceiptRoot', + 'repositoryReceiptRoot', + 'telemetryRoot', + 'repairCaseId', +]); + +export const V46_PROTOCOL_PRIVATE_PAYLOAD_IDS = Object.freeze([ + 'protected-source-payloads', + 'unpaid-assetpack-source', + 'source-snippets', + 'raw-prompts', + 'interpolated-prompts', + 'raw-provider-responses', + 'credentials', + 'wallet-private-material', + 'private-settlement-payloads', + 'private-read-context', + 'value-bearing-mainnet-admission', +]); + +const SOURCE_PATHS = Object.freeze({ + activePointer: 'BITCODE_SPEC.txt', + spec: 'BITCODE_SPEC_V46.md', + delta: 'BITCODE_SPEC_V46_DELTA.md', + notes: 'BITCODE_SPEC_V46_NOTES.md', + parity: 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + roadmap: 'SPECIFICATIONS_ROADMAP.md', + readme: 'README.md', + protocolReadme: 'packages/protocol/README.md', + packageJson: 'package.json', + gateWorkflow: '.github/workflows/bitcode-gate-quality.yml', + canonWorkflow: '.github/workflows/bitcode-canon-quality.yml', + packageIndex: 'packages/protocol/src/index.js', + packageTypes: 'packages/protocol/src/index.d.ts', + packageSource: 'packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js', + packageTest: 'packages/protocol/test/v46-protocol-comprehension-object-model.test.js', + generator: 'scripts/generate-v46-protocol-comprehension-object-model.mjs', + checker: 'scripts/check-v46-gate2-protocol-comprehension-object-model.mjs', +}); + +function digest(value) { + return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24); +} + +function readSource(repoRoot, sourcePath) { + const absolutePath = path.join(repoRoot, sourcePath); + return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : ''; +} + +function sourceExists(repoRoot, sourcePath) { + return existsSync(path.join(repoRoot, sourcePath)); +} + +function predicateResult(id, sourcePath, passed) { + return { id, sourcePath, passed: Boolean(passed) }; +} + +function sourceRoot(repoRoot, sourcePath) { + return `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`; +} + +function objectRow({ + objectId, + objectKind, + sourceSafeMeaning, + lifecycleStateIds, + btdPosture, + btcPosture, + sourceVisibility, + authoritativeEvidence, + allowedClaimCategoryIds, + forbiddenClaimIds, +}) { + return { + objectId, + objectKind, + sourceSafeMeaning, + lifecycleStateIds, + btdPosture, + btcPosture, + sourceVisibility, + authoritativeEvidence, + allowedClaimCategoryIds, + forbiddenClaimIds, + sourceSafeFieldIds: [...V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS], + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + sourceSafeMetadataOnly: true, + protectedSourceVisible: false, + unpaidAssetPackSourceVisible: false, + rawPromptVisible: false, + rawProviderResponseVisible: false, + credentialsSerialized: false, + walletPrivateMaterialVisible: false, + valueBearingMainnetAdmitted: false, + rowRoot: `v46-protocol-object-row:${digest(JSON.stringify({ objectId, objectKind, lifecycleStateIds }))}`, + }; +} + +function claimRow({ + claimId, + claimCategoryId, + authorityId, + statement, + allowedSurfaces, + disclosureBoundaryIds, + requiredEvidenceIds, + forbiddenInterpretationIds, +}) { + return { + claimId, + claimCategoryId, + authorityId, + statement, + allowedSurfaces, + disclosureBoundaryIds, + requiredEvidenceIds, + forbiddenInterpretationIds, + sourceSafeMetadataOnly: true, + protectedSourceVisible: false, + unpaidAssetPackSourceVisible: false, + rawPromptVisible: false, + rawProviderResponseVisible: false, + credentialsSerialized: false, + walletPrivateMaterialVisible: false, + valueBearingMainnetAdmitted: false, + rowRoot: `v46-protocol-claim-row:${digest(JSON.stringify({ claimId, claimCategoryId, authorityId }))}`, + }; +} + +export const V46_PROTOCOL_OBJECT_ROWS = Object.freeze([ + objectRow({ + objectId: 'AssetPack', + objectKind: 'commodity', + sourceSafeMeaning: + 'AssetPack is the packaged technical knowledge commodity traded by Bitcode, never raw source or a loose file bundle.', + lifecycleStateIds: [ + 'deposit-option-synthesized', + 'depository-assetpack-admitted', + 'need-fit-assetpack-synthesized', + 'source-unlocked-delivery', + ], + btdPosture: 'may carry deposit-time potential before Need selection and final Need-relative BTD after quote/finality gates', + btcPosture: 'quoteable only after reviewed Need, selected Fit set, and source-safe synthesis evidence', + sourceVisibility: 'source-safe preview before settlement; entitled source delivery only after BTD rights transfer', + authoritativeEvidence: ['canonical-specification', 'generated-proof', 'object-storage-root', 'repository-delivery-receipt'], + allowedClaimCategoryIds: ['protocol-law', 'product-guidance', 'preview-claim', 'delivery-claim'], + forbiddenClaimIds: ['assetpack-is-raw-source', 'preview-discloses-source'], + }), + objectRow({ + objectId: 'DepositAssetPackOption', + objectKind: 'supply-formation', + sourceSafeMeaning: + 'Deposit option is a proposed source-safe AssetPack candidate for depositor review, not final BTD or public source disclosure.', + lifecycleStateIds: ['deposit-option-synthesized', 'deposit-option-reviewed'], + btdPosture: 'BTD potential only; no final Need-relative scalar volume', + btcPosture: 'no quote, payment, or compensation claim', + sourceVisibility: 'depositor-reviewed source-safe measurements and protected-source custody roots', + authoritativeEvidence: ['generated-proof', 'object-storage-root', 'database-projection'], + allowedClaimCategoryIds: ['product-guidance', 'operator-evidence'], + forbiddenClaimIds: ['deposit-option-is-final-btd', 'mainnet-value-is-admitted'], + }), + objectRow({ + objectId: 'DepositoryAssetPack', + objectKind: 'admitted-supply', + sourceSafeMeaning: + 'Depository AssetPack is approved searchable supply with source-safe measurements, embeddings, provenance, and protected-source roots.', + lifecycleStateIds: ['depository-assetpack-admitted', 'fit-candidates-recalled', 'fit-set-selected'], + btdPosture: 'candidate contribution remains provisional until selected against a reviewed Need', + btcPosture: 'not directly paid; participates in Need-Fit quote and source-to-shares after settlement', + sourceVisibility: 'candidate identity and provenance may be previewed source-safely; protected source stays withheld', + authoritativeEvidence: ['database-projection', 'object-storage-root', 'generated-proof'], + allowedClaimCategoryIds: ['product-guidance', 'operator-evidence', 'preview-claim'], + forbiddenClaimIds: ['preview-discloses-source', 'database-is-ledger-truth'], + }), + objectRow({ + objectId: 'ReadRequest', + objectKind: 'demand-formation', + sourceSafeMeaning: + 'Read Request is buyer demand input that may synthesize a reviewed Need but is not itself a Need, Fit, quote, or BTD.', + lifecycleStateIds: ['read-requested', 'need-synthesizing', 'need-review-required'], + btdPosture: 'BTD not applicable until Need-Fit measurement exists', + btcPosture: 'no quoteable state', + sourceVisibility: 'private read context remains scoped to the Reading boundary', + authoritativeEvidence: ['execution-receipt', 'telemetry-observability-only'], + allowedClaimCategoryIds: ['product-guidance', 'telemetry-observability'], + forbiddenClaimIds: ['telemetry-advances-state', 'conversation-advances-state'], + }), + objectRow({ + objectId: 'ReviewedNeed', + objectKind: 'demand-authority', + sourceSafeMeaning: + 'Reviewed Need is the accepted buyer objective that authorizes Finding Fits and Need-relative measurement.', + lifecycleStateIds: ['need-synthesized', 'need-reviewed', 'finding-fits-admitted'], + btdPosture: 'admits Need-relative measurement but does not by itself compute final BTD', + btcPosture: 'quote preparation still blocked until Fits and synthesis exist', + sourceVisibility: 'Need is visible to the Reader and source-safe to operators according to policy', + authoritativeEvidence: ['generated-proof', 'database-projection', 'telemetry-observability-only'], + allowedClaimCategoryIds: ['protocol-law', 'product-guidance', 'operator-evidence'], + forbiddenClaimIds: ['conversation-advances-state', 'telemetry-advances-state'], + }), + objectRow({ + objectId: 'FindingFitsReceipt', + objectKind: 'search-evidence', + sourceSafeMeaning: + 'Finding Fits receipt proves depository search, ranking, thresholding, and provenance for one or many candidate Fits.', + lifecycleStateIds: ['fit-candidates-recalled', 'fit-set-selected', 'repair-required'], + btdPosture: 'candidate BTD contribution remains provisional until the selected Fit set is synthesized into a Need-Fit AssetPack', + btcPosture: 'no payment claim', + sourceVisibility: 'candidate source is withheld; ranking and provenance roots are source-safe', + authoritativeEvidence: ['execution-receipt', 'database-projection', 'generated-proof'], + allowedClaimCategoryIds: ['operator-evidence', 'preview-claim', 'repair-claim'], + forbiddenClaimIds: ['preview-discloses-source', 'database-is-ledger-truth'], + }), + objectRow({ + objectId: 'SelectedFitSet', + objectKind: 'fit-selection', + sourceSafeMeaning: + 'Selected Fit set is the one-or-many admitted Depository AssetPack set accepted for Need-Fit synthesis.', + lifecycleStateIds: ['fit-set-selected', 'need-fit-assetpack-synthesized'], + btdPosture: 'required input to final Need-relative BTD calculation', + btcPosture: 'required input to quote preparation', + sourceVisibility: 'provenance is source-safe; underlying source remains withheld', + authoritativeEvidence: ['generated-proof', 'database-projection', 'object-storage-root'], + allowedClaimCategoryIds: ['protocol-law', 'operator-evidence', 'preview-claim'], + forbiddenClaimIds: ['preview-discloses-source'], + }), + objectRow({ + objectId: 'NeedFitAssetPack', + objectKind: 'buyer-pack', + sourceSafeMeaning: + 'Need-Fit AssetPack is a new Need-relative AssetPack synthesized from the reviewed Need and selected Fit set.', + lifecycleStateIds: [ + 'need-fit-assetpack-synthesized', + 'need-fit-assetpack-quoted', + 'source-unlocked-delivery', + ], + btdPosture: 'final BTD scalar volume can be computed for quote and becomes rights-bearing only after settlement', + btcPosture: 'quoteable, payable, and deliverable through BTC finality gates', + sourceVisibility: 'source-bearing bundle is withheld until rights transfer and repository delivery', + authoritativeEvidence: ['generated-proof', 'object-storage-root', 'ledger-readback', 'repository-delivery-receipt'], + allowedClaimCategoryIds: ['protocol-law', 'preview-claim', 'quote-claim', 'rights-claim', 'delivery-claim'], + forbiddenClaimIds: ['preview-discloses-source', 'payment-observed-is-finality'], + }), + objectRow({ + objectId: 'SourceSafePreview', + objectKind: 'pre-settlement-disclosure', + sourceSafeMeaning: + 'Preview is a source-safe explanation of measurements, quality, provenance, and quote readiness, not the AssetPack source.', + lifecycleStateIds: ['after-preview', 'need-fit-assetpack-quoted'], + btdPosture: 'may show BTD volume/range posture source-safely', + btcPosture: 'may show quote readiness but not payment finality', + sourceVisibility: 'never contains protected source, unpaid AssetPack source, or source snippets', + authoritativeEvidence: ['generated-proof', 'database-projection', 'telemetry-observability-only'], + allowedClaimCategoryIds: ['preview-claim', 'product-guidance'], + forbiddenClaimIds: ['preview-discloses-source', 'quote-is-payment'], + }), + objectRow({ + objectId: 'BtdScalarVolumeReceipt', + objectKind: 'measurement-volume', + sourceSafeMeaning: + 'BTD scalar volume receipt records Need-relative weighted technical knowledge volume with deterministic measurement policy.', + lifecycleStateIds: ['weighted-scalar-volume-computed', 'btd-quantized', 'btd-quote-bound'], + btdPosture: 'BTD volume is quote-bound before settlement and rights-bearing only after finality', + btcPosture: 'binds deterministic share-to-fee quote inputs', + sourceVisibility: 'measurement roots and formulas are source-safe; protected source is not serialized', + authoritativeEvidence: ['canonical-specification', 'generated-proof', 'ledger-readback'], + allowedClaimCategoryIds: ['protocol-law', 'quote-claim', 'operator-evidence'], + forbiddenClaimIds: ['btd-is-only-a-read-right', 'btd-is-money', 'payment-observed-is-finality'], + }), + objectRow({ + objectId: 'BtcQuote', + objectKind: 'procurement-offer', + sourceSafeMeaning: + 'BTC quote is a deterministic sats offer bound to BTD volume, policy, expiry, wallet authority, and proof roots.', + lifecycleStateIds: ['btc-quote-issued', 'btc-quote-accepted', 'btc-quote-inactive'], + btdPosture: 'quote-bound BTD only; rights are unpaid and untransferred', + btcPosture: 'quote is not payment or final settlement', + sourceVisibility: 'quote is source-safe and carries no wallet private material', + authoritativeEvidence: ['generated-proof', 'wallet-provider-receipt', 'ledger-readback'], + allowedClaimCategoryIds: ['quote-claim', 'product-guidance', 'operator-evidence'], + forbiddenClaimIds: ['quote-is-payment', 'server-custodies-wallet-private-material'], + }), + objectRow({ + objectId: 'BtcSettlementReceipt', + objectKind: 'settlement-readback', + sourceSafeMeaning: + 'BTC settlement receipt distinguishes quote, PSBT, broadcast, observation, finality, mismatch, repair, refund, and finalized settlement.', + lifecycleStateIds: ['btc-payment-observed', 'btc-finality-confirmed', 'btc-settlement-finalized'], + btdPosture: 'authorizes BTD rights transfer only after finality and reconciliation', + btcPosture: 'BTC is settlement truth after finality and conservation readback', + sourceVisibility: 'private settlement payloads and wallet private material are never serialized', + authoritativeEvidence: ['ledger-readback', 'wallet-provider-receipt', 'generated-proof'], + allowedClaimCategoryIds: ['settlement-claim', 'operator-evidence', 'repair-claim'], + forbiddenClaimIds: ['payment-observed-is-finality', 'server-custodies-wallet-private-material'], + }), + objectRow({ + objectId: 'BtdRightsReceipt', + objectKind: 'rights-transfer', + sourceSafeMeaning: + 'BTD rights receipt proves settled rights, source unlock authority, and ownership/read/use boundary for the paying Reader.', + lifecycleStateIds: ['btd-rights-pending', 'btd-rights-transferred'], + btdPosture: 'rights-bearing BTD after BTC finality and transfer receipt', + btcPosture: 'depends on finalized settlement', + sourceVisibility: 'source unlock is authorized only to the entitled Reader boundary', + authoritativeEvidence: ['ledger-readback', 'generated-proof', 'repository-delivery-receipt'], + allowedClaimCategoryIds: ['rights-claim', 'delivery-claim', 'protocol-law'], + forbiddenClaimIds: ['btd-is-only-a-read-right', 'payment-observed-is-finality'], + }), + objectRow({ + objectId: 'SourceUnlockDeliveryReceipt', + objectKind: 'delivery', + sourceSafeMeaning: + 'Delivery receipt proves repository handoff of the source-bearing AssetPack only after settlement and rights transfer.', + lifecycleStateIds: ['source-unlocked-delivery', 'compensated-and-reconciled'], + btdPosture: 'delivery is authorized by rights-bearing BTD', + btcPosture: 'requires finalized BTC settlement', + sourceVisibility: 'full source is visible only inside the entitled repository or delivery boundary', + authoritativeEvidence: ['repository-delivery-receipt', 'object-storage-root', 'ledger-readback'], + allowedClaimCategoryIds: ['delivery-claim', 'operator-evidence'], + forbiddenClaimIds: ['preview-discloses-source', 'database-is-ledger-truth'], + }), + objectRow({ + objectId: 'SourceToSharesAllocation', + objectKind: 'contributor-allocation', + sourceSafeMeaning: + 'Source-to-shares allocation routes post-finality contributor compensation from selected Fits and BTD range slices.', + lifecycleStateIds: ['btd-source-to-shares-allocated', 'compensated-and-reconciled'], + btdPosture: 'uses settled BTD range slices as allocation context, not BTD size calculation', + btcPosture: 'depends on finalized BTC settlement and conservation', + sourceVisibility: 'allocation statements are source-safe and do not expose underlying source', + authoritativeEvidence: ['ledger-readback', 'generated-proof', 'database-projection'], + allowedClaimCategoryIds: ['compensation-claim', 'operator-evidence'], + forbiddenClaimIds: ['database-is-ledger-truth', 'mainnet-value-is-admitted'], + }), + objectRow({ + objectId: 'ContributorCompensationStatement', + objectKind: 'compensation-readback', + sourceSafeMeaning: + 'Contributor compensation statement is source-safe post-finality readback of BTC compensation routing and reconciliation posture.', + lifecycleStateIds: ['btc-contributor-compensation-routable', 'compensated-and-reconciled', 'repair-required'], + btdPosture: 'references source-to-shares allocation context', + btcPosture: 'post-finality compensation or repair state only', + sourceVisibility: 'source-safe accounting only', + authoritativeEvidence: ['ledger-readback', 'database-projection', 'generated-proof'], + allowedClaimCategoryIds: ['compensation-claim', 'repair-claim'], + forbiddenClaimIds: ['database-is-ledger-truth', 'mainnet-value-is-admitted'], + }), + objectRow({ + objectId: 'ProofRoot', + objectKind: 'authority-evidence', + sourceSafeMeaning: + 'Proof root identifies the evidence required to advance or explain state without serializing hidden payloads.', + lifecycleStateIds: ['proof-recorded', 'proof-replayed', 'proof-repair-required'], + btdPosture: 'proof can support BTD measurement, quote, rights, and repair but is not BTD itself', + btcPosture: 'proof can support quote, observation, finality, and reconciliation but is not payment', + sourceVisibility: 'root hashes and evidence classes are source-safe unless entitled storage unlock exists', + authoritativeEvidence: ['canonical-specification', 'generated-proof', 'ledger-readback'], + allowedClaimCategoryIds: ['operator-evidence', 'repair-claim', 'protocol-law'], + forbiddenClaimIds: ['telemetry-advances-state', 'database-is-ledger-truth'], + }), + objectRow({ + objectId: 'RepairCase', + objectKind: 'fail-closed-state', + sourceSafeMeaning: + 'Repair case blocks advancement when evidence is missing, stale, contradictory, or policy-invalid.', + lifecycleStateIds: ['repair-required', 'repair-replayed', 'repair-closed'], + btdPosture: 'BTD rights, source unlock, allocation, or quote state remains blocked until repair closes', + btcPosture: 'payment, refund, escalation, or compensation remains fail-closed until readback agrees', + sourceVisibility: 'failure class and proof roots only; no protected payload exposure', + authoritativeEvidence: ['generated-proof', 'ledger-readback', 'database-projection', 'telemetry-observability-only'], + allowedClaimCategoryIds: ['repair-claim', 'operator-evidence', 'product-guidance'], + forbiddenClaimIds: ['telemetry-advances-state', 'database-is-ledger-truth'], + }), + objectRow({ + objectId: 'InterfaceClaim', + objectKind: 'surface-statement', + sourceSafeMeaning: + 'Interface claim is any public, product, API, MCP, ChatGPT App, Bitcode Chat, telemetry, or operator statement about protocol state.', + lifecycleStateIds: [...V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS], + btdPosture: 'must label whether BTD is potential, quote-bound, rights-pending, rights-transferred, allocation context, or repair', + btcPosture: 'must label whether BTC is quote, accepted quote, observed payment, finality, finalized settlement, compensation, refund, or repair', + sourceVisibility: 'claim projections must default to the narrowest source-safe disclosure boundary', + authoritativeEvidence: [...V46_PROTOCOL_CLAIM_AUTHORITY_IDS], + allowedClaimCategoryIds: [...V46_PROTOCOL_CLAIM_CATEGORY_IDS], + forbiddenClaimIds: [...V46_PROTOCOL_FORBIDDEN_CLAIM_IDS], + }), +]); + +export const V46_PROTOCOL_CLAIM_ROWS = Object.freeze([ + claimRow({ + claimId: 'assetpack-is-commodity', + claimCategoryId: 'protocol-law', + authorityId: 'canonical-specification', + statement: 'AssetPack is the traded commodity and raw source is never the public commodity.', + allowedSurfaces: ['BITCODE_SPEC_V46.md', '/packs', '/read', '/deposit', 'public-docs', 'api-mcp', 'chatgpt-app', 'bitcode-chat'], + disclosureBoundaryIds: [...V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS], + requiredEvidenceIds: ['canonical-specification', 'generated-proof'], + forbiddenInterpretationIds: ['assetpack-is-raw-source', 'preview-discloses-source'], + }), + claimRow({ + claimId: 'btd-is-weighted-scalar-volume-and-settled-rights', + claimCategoryId: 'protocol-law', + authorityId: 'canonical-specification', + statement: + 'BTD is Need-relative weighted scalar knowledge-volume whose settled form carries rights, source unlock authority, and allocation context.', + allowedSurfaces: ['BITCODE_SPEC_V46.md', '/packs', '/read', 'api-mcp', 'public-docs'], + disclosureBoundaryIds: ['after-quote', 'after-finality', 'after-btd-rights-transfer', 'after-repository-delivery'], + requiredEvidenceIds: ['canonical-specification', 'generated-proof', 'ledger-readback'], + forbiddenInterpretationIds: ['btd-is-only-a-read-right', 'btd-is-money', 'deposit-option-is-final-btd'], + }), + claimRow({ + claimId: 'deposit-option-is-potential-supply', + claimCategoryId: 'product-guidance', + authorityId: 'interface-guidance-only', + statement: + 'Deposit option may describe BTD potential, coverage, utility, criticality, and search posture but cannot claim final BTD or payment.', + allowedSurfaces: ['/deposit', '/packs', 'bitcode-chat', 'public-docs'], + disclosureBoundaryIds: ['before-settlement', 'after-preview'], + requiredEvidenceIds: ['object-storage-root', 'database-projection', 'generated-proof'], + forbiddenInterpretationIds: ['deposit-option-is-final-btd', 'mainnet-value-is-admitted'], + }), + claimRow({ + claimId: 'operator-evidence-is-source-safe-readback', + claimCategoryId: 'operator-evidence', + authorityId: 'generated-proof', + statement: + 'Operator evidence may expose proof roots, state labels, repair blockers, and readback posture, but not hidden source or private payloads.', + allowedSurfaces: ['operator-runbook', '/packs', '/read', '/deposit', 'api-mcp'], + disclosureBoundaryIds: [...V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS], + requiredEvidenceIds: ['generated-proof', 'ledger-readback', 'database-projection', 'object-storage-root'], + forbiddenInterpretationIds: ['database-is-ledger-truth', 'telemetry-advances-state'], + }), + claimRow({ + claimId: 'preview-is-source-safe-measurement', + claimCategoryId: 'preview-claim', + authorityId: 'generated-proof', + statement: + 'Preview may expose measurements, quality, provenance, BTD posture, quote readiness, and proof roots, but not unpaid AssetPack source.', + allowedSurfaces: ['/read', '/packs', 'api-mcp', 'chatgpt-app', 'bitcode-chat'], + disclosureBoundaryIds: ['after-preview', 'after-quote', 'after-payment-observation'], + requiredEvidenceIds: ['generated-proof', 'database-projection', 'telemetry-observability-only'], + forbiddenInterpretationIds: ['preview-discloses-source', 'quote-is-payment'], + }), + claimRow({ + claimId: 'quote-is-source-safe-offer', + claimCategoryId: 'quote-claim', + authorityId: 'generated-proof', + statement: + 'BTC quote is a deterministic source-safe offer bound to reviewed Need, selected Fits, BTD volume, policy, network, expiry, and authority.', + allowedSurfaces: ['/read', '/packs', 'api-mcp', 'bitcode-chat'], + disclosureBoundaryIds: ['after-quote'], + requiredEvidenceIds: ['generated-proof', 'wallet-provider-receipt', 'database-projection'], + forbiddenInterpretationIds: ['quote-is-payment', 'payment-observed-is-finality'], + }), + claimRow({ + claimId: 'payment-observation-is-not-finality', + claimCategoryId: 'settlement-claim', + authorityId: 'ledger-readback', + statement: + 'Prepared, signed, broadcast, and observed BTC payment states cannot unlock source, transfer BTD rights, deliver, or compensate contributors.', + allowedSurfaces: ['/read', '/packs', 'api-mcp', 'operator-runbook'], + disclosureBoundaryIds: ['after-payment-observation', 'after-finality'], + requiredEvidenceIds: ['ledger-readback', 'wallet-provider-receipt', 'generated-proof'], + forbiddenInterpretationIds: ['payment-observed-is-finality', 'database-is-ledger-truth'], + }), + claimRow({ + claimId: 'finality-authorizes-rights-and-delivery', + claimCategoryId: 'rights-claim', + authorityId: 'ledger-readback', + statement: + 'Confirmed BTC finality plus reconciliation authorizes BTD rights transfer, source unlock, and repository delivery to the entitled Reader.', + allowedSurfaces: ['/read', '/packs', 'api-mcp', 'operator-runbook'], + disclosureBoundaryIds: ['after-finality', 'after-btd-rights-transfer', 'after-repository-delivery'], + requiredEvidenceIds: ['ledger-readback', 'object-storage-root', 'repository-delivery-receipt'], + forbiddenInterpretationIds: ['payment-observed-is-finality', 'database-is-ledger-truth'], + }), + claimRow({ + claimId: 'delivery-is-entitled-source-unlock', + claimCategoryId: 'delivery-claim', + authorityId: 'repository-delivery-receipt', + statement: + 'Repository delivery is the entitled source-unlock boundary after BTC finality and BTD rights transfer, not a preview state.', + allowedSurfaces: ['/read', '/packs', 'api-mcp', 'operator-runbook'], + disclosureBoundaryIds: ['after-btd-rights-transfer', 'after-repository-delivery'], + requiredEvidenceIds: ['repository-delivery-receipt', 'object-storage-root', 'ledger-readback'], + forbiddenInterpretationIds: ['preview-discloses-source', 'payment-observed-is-finality'], + }), + claimRow({ + claimId: 'compensation-follows-source-to-shares', + claimCategoryId: 'compensation-claim', + authorityId: 'ledger-readback', + statement: + 'Contributor compensation follows final settlement, source-to-shares allocation, BTD range slices, and reconciliation readback.', + allowedSurfaces: ['/packs', '/deposit', 'api-mcp', 'operator-runbook'], + disclosureBoundaryIds: ['after-finality', 'after-btd-rights-transfer', 'after-repository-delivery'], + requiredEvidenceIds: ['ledger-readback', 'database-projection', 'generated-proof'], + forbiddenInterpretationIds: ['database-is-ledger-truth', 'mainnet-value-is-admitted'], + }), + claimRow({ + claimId: 'telemetry-is-observability-only', + claimCategoryId: 'telemetry-observability', + authorityId: 'telemetry-observability-only', + statement: + 'Telemetry can explain progress and repair blockers, but cannot alone advance AssetPack lifecycle, BTC settlement, BTD rights, or delivery.', + allowedSurfaces: ['/packs', '/read', '/deposit', 'bitcode-chat', 'operator-runbook'], + disclosureBoundaryIds: [...V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS], + requiredEvidenceIds: ['telemetry-observability-only', 'generated-proof'], + forbiddenInterpretationIds: ['telemetry-advances-state', 'conversation-advances-state'], + }), + claimRow({ + claimId: 'investor-framing-is-not-protocol-law', + claimCategoryId: 'investor-framing', + authorityId: 'public-education-only', + statement: + 'Investor and landing-page framing may explain Bitcode commercially, but formal protocol law comes only from the canonical specification family and proof readback.', + allowedSurfaces: ['landing-page', 'public-docs', 'pitch-material'], + disclosureBoundaryIds: ['before-settlement'], + requiredEvidenceIds: ['canonical-specification'], + forbiddenInterpretationIds: ['investor-copy-is-protocol-law', 'mainnet-value-is-admitted'], + }), + claimRow({ + claimId: 'repair-fails-closed', + claimCategoryId: 'repair-claim', + authorityId: 'generated-proof', + statement: + 'Missing, stale, contradictory, or policy-invalid evidence returns the object or claim to repair-required and the narrowest source-safe boundary.', + allowedSurfaces: ['/packs', '/read', '/deposit', 'api-mcp', 'operator-runbook', 'bitcode-chat'], + disclosureBoundaryIds: [...V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS], + requiredEvidenceIds: ['generated-proof', 'ledger-readback', 'database-projection', 'telemetry-observability-only'], + forbiddenInterpretationIds: ['telemetry-advances-state', 'database-is-ledger-truth'], + }), +]); + +function buildSourceRoots(repoRoot) { + return Object.fromEntries(Object.entries(SOURCE_PATHS).map(([key, sourcePath]) => [key, sourceRoot(repoRoot, sourcePath)])); +} + +function buildSourcePredicates(repoRoot) { + const sources = Object.fromEntries(Object.entries(SOURCE_PATHS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)])); + return [ + predicateResult('active-canon-pointer-supports-v46-draft-or-later', SOURCE_PATHS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V45')), + predicateResult( + 'spec-defines-comprehension-object-model', + SOURCE_PATHS.spec, + sources.spec.includes('V46 commercial protocol comprehension object model') && + sources.spec.includes('InterfaceClaim') && + sources.spec.includes('Claim authority is evidence-specific'), + ), + predicateResult( + 'spec-defines-claim-taxonomy-law', + SOURCE_PATHS.spec, + sources.spec.includes('V46 claim taxonomy law') && + sources.spec.includes('investor framing is not protocol law') && + sources.spec.includes('telemetry is observability only'), + ), + predicateResult( + 'delta-documents-gate2', + SOURCE_PATHS.delta, + sources.delta.includes('Gate 2: Protocol Comprehension Object Model And Claim Taxonomy') && + sources.delta.includes(V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH), + ), + predicateResult( + 'notes-record-gate2-atom', + SOURCE_PATHS.notes, + sources.notes.includes('V46 protocol atom 6: protocol comprehension object model and claim taxonomy') && + sources.notes.includes('Claim taxonomy separates protocol law from product guidance, operator evidence, investor framing, telemetry, preview, quote, settlement, rights, delivery, compensation, and repair claims.'), + ), + predicateResult( + 'parity-closes-gate2-row', + SOURCE_PATHS.parity, + sources.parity.includes('Gate 2') && + sources.parity.includes('V46ProtocolComprehensionObjectModel') && + sources.parity.includes(V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH), + ), + predicateResult( + 'roadmap-records-gate2', + SOURCE_PATHS.roadmap, + sources.roadmap.includes('V46 Gate 2 closure anchor') && + sources.roadmap.includes(V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH), + ), + predicateResult( + 'readmes-document-gate2', + SOURCE_PATHS.readme, + sources.readme.includes('V46 Gate 2 adds `V46ProtocolComprehensionObjectModel`') && + sources.protocolReadme.includes('V46 Gate 2 adds `V46ProtocolComprehensionObjectModel`'), + ), + predicateResult( + 'package-exports-wired', + SOURCE_PATHS.packageIndex, + sources.packageIndex.includes('buildV46ProtocolComprehensionObjectModel') && + sources.packageTypes.includes('buildV46ProtocolComprehensionObjectModel'), + ), + predicateResult( + 'generator-and-checker-exist', + SOURCE_PATHS.generator, + sourceExists(repoRoot, SOURCE_PATHS.generator) && sourceExists(repoRoot, SOURCE_PATHS.checker), + ), + predicateResult( + 'package-script-wired', + SOURCE_PATHS.packageJson, + sources.packageJson.includes('"generate:v46-protocol-comprehension-object-model"') && + sources.packageJson.includes('"check:v46-protocol-comprehension-object-model"') && + sources.packageJson.includes('"check:v46-gate2"'), + ), + predicateResult( + 'gate-and-canon-workflows-run-gate2', + SOURCE_PATHS.gateWorkflow, + sources.gateWorkflow.includes('check-v46-gate2-protocol-comprehension-object-model.mjs') && + sources.canonWorkflow.includes('check-v46-gate2-protocol-comprehension-object-model.mjs'), + ), + ]; +} + +function sourceSafetyCoverage(objectRows, claimRows) { + const allRows = [...objectRows, ...claimRows]; + return { + sourceSafeMetadataOnly: allRows.every((row) => row.sourceSafeMetadataOnly === true), + protectedSourceVisible: allRows.some((row) => row.protectedSourceVisible === true), + unpaidAssetPackSourceVisible: allRows.some((row) => row.unpaidAssetPackSourceVisible === true), + rawPromptVisible: allRows.some((row) => row.rawPromptVisible === true), + rawProviderResponseVisible: allRows.some((row) => row.rawProviderResponseVisible === true), + credentialsSerialized: allRows.some((row) => row.credentialsSerialized === true), + walletPrivateMaterialVisible: allRows.some((row) => row.walletPrivateMaterialVisible === true), + valueBearingMainnetAdmitted: allRows.some((row) => row.valueBearingMainnetAdmitted === true), + }; +} + +export function buildV46ProtocolComprehensionObjectModel(input = {}) { + const repoRoot = typeof input.repoRoot === 'string' ? input.repoRoot : DEFAULT_REPO_ROOT; + const objectRows = [...V46_PROTOCOL_OBJECT_ROWS]; + const claimRows = [...V46_PROTOCOL_CLAIM_ROWS]; + const sourcePredicates = buildSourcePredicates(repoRoot); + const failedPredicateIds = sourcePredicates.filter((predicate) => !predicate.passed).map((predicate) => predicate.id); + const coverage = { + objectCount: objectRows.length, + claimCount: claimRows.length, + objectIds: [...V46_PROTOCOL_COMPREHENSION_OBJECT_IDS], + claimCategoryIds: [...V46_PROTOCOL_CLAIM_CATEGORY_IDS], + claimAuthorityIds: [...V46_PROTOCOL_CLAIM_AUTHORITY_IDS], + disclosureBoundaryIds: [...V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS], + forbiddenClaimIds: [...V46_PROTOCOL_FORBIDDEN_CLAIM_IDS], + sourceSafeFieldIds: [...V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS], + privatePayloadIds: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + assetPackCommodityCovered: objectRows.some((row) => row.objectId === 'AssetPack'), + btdScalarVolumeCovered: objectRows.some((row) => row.objectId === 'BtdScalarVolumeReceipt'), + btcQuoteSettlementCovered: + objectRows.some((row) => row.objectId === 'BtcQuote') && + objectRows.some((row) => row.objectId === 'BtcSettlementReceipt'), + sourceUnlockDeliveryCovered: objectRows.some((row) => row.objectId === 'SourceUnlockDeliveryReceipt'), + contributorCompensationCovered: + objectRows.some((row) => row.objectId === 'SourceToSharesAllocation') && + objectRows.some((row) => row.objectId === 'ContributorCompensationStatement'), + interfaceClaimsCovered: objectRows.some((row) => row.objectId === 'InterfaceClaim'), + protocolLawClaimCovered: claimRows.some((row) => row.claimCategoryId === 'protocol-law'), + productGuidanceClaimCovered: claimRows.some((row) => row.claimCategoryId === 'product-guidance'), + operatorEvidenceClaimCovered: claimRows.some((row) => row.claimCategoryId === 'operator-evidence'), + investorFramingClaimCovered: claimRows.some((row) => row.claimCategoryId === 'investor-framing'), + telemetryObservabilityClaimCovered: claimRows.some((row) => row.claimCategoryId === 'telemetry-observability'), + previewQuoteSettlementRightsDeliveryCovered: ['preview-claim', 'quote-claim', 'settlement-claim', 'rights-claim', 'delivery-claim'].every((id) => + claimRows.some((row) => row.claimCategoryId === id), + ), + compensationRepairClaimsCovered: ['compensation-claim', 'repair-claim'].every((id) => + objectRows.some((row) => row.allowedClaimCategoryIds.includes(id)) || + claimRows.some((row) => row.claimCategoryId === id), + ), + noForbiddenClaimCollapsed: [...V46_PROTOCOL_FORBIDDEN_CLAIM_IDS].every((id) => + objectRows.some((row) => row.forbiddenClaimIds.includes(id)) || + claimRows.some((row) => row.forbiddenInterpretationIds.includes(id)), + ), + sourcePredicates, + failedPredicateIds, + ...sourceSafetyCoverage(objectRows, claimRows), + }; + + return { + artifactId: 'v46-protocol-comprehension-object-model', + artifactPath: V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH, + artifactRoot: `v46-protocol-comprehension-object-model:${digest(JSON.stringify({ objectRows, claimRows, coverage }))}`, + schemaId: V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SCHEMA_ID, + version: V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_VERSION, + currentTarget: V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_CURRENT_TARGET, + sourceSafetyVerdict: V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SOURCE_SAFETY_VERDICT, + sourceRoots: buildSourceRoots(repoRoot), + objectIds: [...V46_PROTOCOL_COMPREHENSION_OBJECT_IDS], + claimCategoryIds: [...V46_PROTOCOL_CLAIM_CATEGORY_IDS], + claimAuthorityIds: [...V46_PROTOCOL_CLAIM_AUTHORITY_IDS], + disclosureBoundaryIds: [...V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS], + forbiddenClaimIds: [...V46_PROTOCOL_FORBIDDEN_CLAIM_IDS], + sourceSafeFieldIds: [...V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS], + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + objectRows, + claimRows, + coverage, + passed: + failedPredicateIds.length === 0 && + coverage.sourceSafeMetadataOnly === true && + coverage.protectedSourceVisible === false && + coverage.unpaidAssetPackSourceVisible === false && + coverage.rawPromptVisible === false && + coverage.rawProviderResponseVisible === false && + coverage.credentialsSerialized === false && + coverage.walletPrivateMaterialVisible === false && + coverage.valueBearingMainnetAdmitted === false, + closureReading: + 'V46 Gate 2 closes the source-safe comprehension object model and claim taxonomy; it does not authorize runtime behavior or V46 promotion.', + }; +} + +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SOURCE_ROOTS = Object.freeze( + buildSourceRoots(DEFAULT_REPO_ROOT), +); diff --git a/packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js b/packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js new file mode 100644 index 000000000..8a40fac60 --- /dev/null +++ b/packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js @@ -0,0 +1,613 @@ +// @ts-check + +import crypto from 'node:crypto'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { bitcodeVersionAtLeast } from './version-posture.js'; +import { + V46_PROTOCOL_CLAIM_AUTHORITY_IDS, + V46_PROTOCOL_CLAIM_CATEGORY_IDS, + V46_PROTOCOL_CLAIM_ROWS, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH, + V46_PROTOCOL_FORBIDDEN_CLAIM_IDS, + V46_PROTOCOL_PRIVATE_PAYLOAD_IDS, +} from './v46-protocol-comprehension-object-model.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..'); + +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH = + '.bitcode/v46-public-operator-claim-boundaries.json'; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SCHEMA_ID = + 'bitcode.v46.publicOperatorClaimBoundaries.v1'; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_VERSION = 'V46'; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_CURRENT_TARGET = 'V45'; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SOURCE_SAFETY_VERDICT = + 'source-safe-public-operator-claim-boundary-metadata'; + +export const V46_PUBLIC_OPERATOR_SURFACE_IDS = Object.freeze([ + 'landing-page', + 'landing-preview', + 'public-docs-home', + 'public-docs-content-model', + 'public-docs-protocol-page', + 'operator-internal-readme', + 'root-readme', + 'protocol-package-readme', + 'v46-spec-family', +]); + +export const V46_PUBLIC_OPERATOR_SURFACE_KIND_IDS = Object.freeze([ + 'landing', + 'public-docs', + 'operator-docs', + 'package-docs', + 'formal-specification', +]); + +const SOURCE_PATHS = Object.freeze({ + activePointer: 'BITCODE_SPEC.txt', + spec: 'BITCODE_SPEC_V46.md', + delta: 'BITCODE_SPEC_V46_DELTA.md', + notes: 'BITCODE_SPEC_V46_NOTES.md', + parity: 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + roadmap: 'SPECIFICATIONS_ROADMAP.md', + readme: 'README.md', + protocolReadme: 'packages/protocol/README.md', + packageJson: 'package.json', + packageIndex: 'packages/protocol/src/index.js', + packageTypes: 'packages/protocol/src/index.d.ts', + packageSource: 'packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js', + packageTest: 'packages/protocol/test/v46-public-operator-claim-boundaries.test.js', + generator: 'scripts/generate-v46-public-operator-claim-boundaries.mjs', + checker: 'scripts/check-v46-gate3-public-operator-claim-boundaries.mjs', + gateWorkflow: '.github/workflows/bitcode-gate-quality.yml', + canonWorkflow: '.github/workflows/bitcode-canon-quality.yml', + publicCopy: 'uapi/components/base/bitcode/layout/bitcode-public-copy.ts', + publicExplainers: 'uapi/components/base/bitcode/layout/bitcode-public-explainers.ts', + landingShared: 'uapi/app/(root)/components/landing/marketing-landing-shared.tsx', + landingPreview: 'uapi/app/(root)/components/landing/MarketingLandingTerminalPreview.tsx', + docsPage: 'uapi/app/docs/page.tsx', + docsHome: 'uapi/app/(root)/components/PublicDocsPageContent.tsx', + docsContent: 'uapi/app/docs/bitcode-docs-content.ts', + docsRoute: 'uapi/app/docs/[slug]/page.tsx', + publicDocsUnitTest: 'uapi/tests/publicDocsPageContent.test.tsx', + docsContentUnitTest: 'uapi/tests/bitcodeDocsContent.test.tsx', + operatorReadme: 'internal-docs/README.md', +}); + +const SECRET_MARKERS = Object.freeze([ + `${['sk', 'proj'].join('-')}-`, + `${['sb', 'secret'].join('_')}__`, + ['service', 'role'].join('_'), + ['eyJhbGciOiJI', 'UzI1NiIsInR5cCI6IkpXVCJ9'].join(''), + ['SUPABASE', 'SERVICE', 'ROLE'].join('_'), + ['OPENAI', 'API', 'KEY'].join('_'), + ['VERCEL', 'TOKEN'].join('_'), + ['VERCEL', 'OIDC', 'TOKEN'].join('_'), + ['PRIVATE', 'KEY'].join('_'), +]); + +const FORBIDDEN_PUBLIC_OPERATOR_PHRASES = Object.freeze([ + 'Source Shares and the Bitcode Exchange', + 'Learn Bitcode from Source Shares to proof', + 'Map the V26 Protocol canon', + 'V26 coverage', + 'BTD is money', + 'BTD is only a read right', + 'preview discloses source', + 'quote is payment', + 'payment observation is finality', + 'database is ledger truth', + 'telemetry advances state', + 'server custodies wallet private material', + 'value-bearing mainnet operation is live', +]); + +export const V46_PUBLIC_OPERATOR_ALLOWED_DATA_CLASSES = Object.freeze([ + 'route-links', + 'plain-language-protocol-guidance', + 'source-safe-measurements', + 'state-labels', + 'claim-categories', + 'claim-authority-ids', + 'proof-root-ids', + 'ledger-readback-posture', + 'database-projection-posture', + 'object-storage-root-posture', + 'wallet-provider-receipt-posture', + 'repository-delivery-receipt-posture', + 'repair-state-labels', +]); + +function digest(value) { + return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24); +} + +function readSource(repoRoot, sourcePath) { + const absolutePath = path.join(repoRoot, sourcePath); + return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : ''; +} + +function sourceExists(repoRoot, sourcePath) { + return existsSync(path.join(repoRoot, sourcePath)); +} + +function sourceRoot(repoRoot, sourcePath) { + return `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`; +} + +function predicateResult(id, sourcePath, passed) { + return { id, sourcePath, passed: Boolean(passed) }; +} + +function claimExists(claimId) { + return V46_PROTOCOL_CLAIM_ROWS.some((row) => row.claimId === claimId); +} + +function categoryExists(categoryId) { + return V46_PROTOCOL_CLAIM_CATEGORY_IDS.includes(categoryId); +} + +function authorityExists(authorityId) { + return V46_PROTOCOL_CLAIM_AUTHORITY_IDS.includes(authorityId); +} + +function scanSourcesForMarkers(repoRoot, sourcePaths, markers) { + const joined = sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return markers.filter((marker) => marker && joined.includes(marker)); +} + +function requiredTokensPresent(repoRoot, row) { + const joined = row.sourcePaths.map((sourcePath) => readSource(repoRoot, sourcePath)).join('\n'); + return row.requiredCopyTokens.every((token) => joined.includes(token)); +} + +function surfaceRow({ + surfaceId, + surfaceKindId, + audience, + sourcePaths, + claimIds, + claimCategoryIds, + authorityIds, + requiredCopyTokens, + allowedDataClasses, + blockedDataClasses, + operatorReading, +}) { + return { + surfaceId, + surfaceKindId, + audience, + sourcePaths, + claimIds, + claimCategoryIds, + authorityIds, + requiredCopyTokens, + allowedDataClasses, + blockedDataClasses, + operatorReading, + sourceSafeMetadataOnly: true, + protectedSourceVisible: false, + unpaidAssetPackSourceVisible: false, + rawPromptVisible: false, + rawProviderResponseVisible: false, + credentialsSerialized: false, + walletPrivateMaterialVisible: false, + valueBearingMainnetAdmitted: false, + rowRoot: `v46-public-operator-surface-row:${digest(JSON.stringify({ surfaceId, sourcePaths, claimIds }))}`, + }; +} + +export const V46_PUBLIC_OPERATOR_SURFACE_ROWS = Object.freeze([ + surfaceRow({ + surfaceId: 'landing-page', + surfaceKindId: 'landing', + audience: ['first-time-reader', 'enterprise-buyer', 'depositor', 'investor'], + sourcePaths: [SOURCE_PATHS.publicCopy, SOURCE_PATHS.publicExplainers, SOURCE_PATHS.landingShared], + claimIds: [ + 'assetpack-is-commodity', + 'btd-is-weighted-scalar-volume-and-settled-rights', + 'finality-authorizes-rights-and-delivery', + 'investor-framing-is-not-protocol-law', + ], + claimCategoryIds: ['product-guidance', 'investor-framing', 'protocol-law'], + authorityIds: ['public-education-only', 'interface-guidance-only', 'canonical-specification'], + requiredCopyTokens: [ + 'AssetPacks for measured technical intelligence', + 'BTD records scalar knowledge volume and rights', + 'BTC settles value transfer', + 'BTC COMPENSATION', + 'Protocol law and proof readback decide state', + ], + allowedDataClasses: ['route-links', 'plain-language-protocol-guidance', 'state-labels'], + blockedDataClasses: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + operatorReading: + 'Landing copy may explain Bitcode commercially, but it remains public education and cannot claim protocol-law authority or source visibility.', + }), + surfaceRow({ + surfaceId: 'landing-preview', + surfaceKindId: 'landing', + audience: ['first-time-reader', 'operator'], + sourcePaths: [SOURCE_PATHS.landingPreview, SOURCE_PATHS.publicCopy, SOURCE_PATHS.landingShared], + claimIds: ['preview-is-source-safe-measurement', 'quote-is-source-safe-offer', 'telemetry-is-observability-only'], + claimCategoryIds: ['preview-claim', 'quote-claim', 'telemetry-observability', 'product-guidance'], + authorityIds: ['public-education-only', 'interface-guidance-only', 'telemetry-observability-only'], + requiredCopyTokens: [ + 'The preview keeps AssetPacks, source-safe measurements, and settlement posture legible', + 'static preview', + 'Packs', + 'Deposit', + 'Read', + ], + allowedDataClasses: ['state-labels', 'source-safe-measurements', 'proof-root-ids'], + blockedDataClasses: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + operatorReading: + 'Landing previews can show representative state labels and measurements, never source-bearing AssetPack contents or payment finality.', + }), + surfaceRow({ + surfaceId: 'public-docs-home', + surfaceKindId: 'public-docs', + audience: ['operator', 'developer', 'enterprise-buyer', 'depositor'], + sourcePaths: [SOURCE_PATHS.docsPage, SOURCE_PATHS.docsHome, SOURCE_PATHS.publicDocsUnitTest], + claimIds: [ + 'assetpack-is-commodity', + 'btd-is-weighted-scalar-volume-and-settled-rights', + 'finality-authorizes-rights-and-delivery', + 'repair-fails-closed', + ], + claimCategoryIds: ['product-guidance', 'protocol-law', 'operator-evidence', 'repair-claim'], + authorityIds: ['public-education-only', 'canonical-specification', 'generated-proof'], + requiredCopyTokens: [ + 'Learn Bitcode from AssetPacks to proof.', + 'V45 / V46 claim boundary', + 'Protocol docs map back to active law.', + 'Public docs explain; proof readback decides.', + ], + allowedDataClasses: ['route-links', 'claim-categories', 'claim-authority-ids', 'proof-root-ids'], + blockedDataClasses: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + operatorReading: + 'Docs home teaches route order and claim authority while reminding users that docs explain rather than advance state.', + }), + surfaceRow({ + surfaceId: 'public-docs-content-model', + surfaceKindId: 'public-docs', + audience: ['operator', 'developer', 'protocol-reviewer'], + sourcePaths: [SOURCE_PATHS.docsContent, SOURCE_PATHS.docsContentUnitTest], + claimIds: [ + 'assetpack-is-commodity', + 'preview-is-source-safe-measurement', + 'btd-is-weighted-scalar-volume-and-settled-rights', + 'operator-evidence-is-source-safe-readback', + ], + claimCategoryIds: ['protocol-law', 'product-guidance', 'preview-claim', 'operator-evidence'], + authorityIds: ['canonical-specification', 'public-education-only', 'generated-proof'], + requiredCopyTokens: [ + 'Public docs expose guidance and proof posture, not protected source', + 'AssetPacks, BTD, and the Bitcode activity ledger', + 'Map the active Protocol canon', + 'V46 claim boundary', + ], + allowedDataClasses: ['plain-language-protocol-guidance', 'source-safe-measurements', 'repair-state-labels'], + blockedDataClasses: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + operatorReading: + 'Docs content can describe objects, routes, and proof semantics while keeping source, prompts, provider responses, and secrets out.', + }), + surfaceRow({ + surfaceId: 'public-docs-protocol-page', + surfaceKindId: 'public-docs', + audience: ['operator', 'protocol-reviewer', 'implementation-reviewer'], + sourcePaths: [SOURCE_PATHS.docsContent, SOURCE_PATHS.docsRoute], + claimIds: ['operator-evidence-is-source-safe-readback', 'repair-fails-closed', 'investor-framing-is-not-protocol-law'], + claimCategoryIds: ['protocol-law', 'repair-claim', 'product-guidance'], + authorityIds: ['canonical-specification', 'generated-proof', 'public-education-only'], + requiredCopyTokens: [ + 'active Protocol canon', + 'V45 is active canon while V46 is draft target', + 'Public docs are not protocol law', + 'protocol-v26', + ], + allowedDataClasses: ['claim-authority-ids', 'proof-root-ids', 'state-labels'], + blockedDataClasses: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + operatorReading: + 'The protocol article teaches active-canon posture and supports the legacy protocol-v26 slug only as a compatibility alias.', + }), + surfaceRow({ + surfaceId: 'operator-internal-readme', + surfaceKindId: 'operator-docs', + audience: ['operator', 'maintainer', 'incident-reviewer'], + sourcePaths: [SOURCE_PATHS.operatorReadme], + claimIds: ['telemetry-is-observability-only', 'repair-fails-closed', 'operator-evidence-is-source-safe-readback'], + claimCategoryIds: ['operator-evidence', 'telemetry-observability', 'repair-claim'], + authorityIds: ['generated-proof', 'telemetry-observability-only', 'canonical-specification'], + requiredCopyTokens: [ + 'resolves to `V46`', + 'promoted V46 canon', + 'Operator notes may name proof roots', + 'Operator notes must not record secret values', + ], + allowedDataClasses: ['proof-root-ids', 'repair-state-labels', 'state-labels', 'claim-authority-ids'], + blockedDataClasses: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + operatorReading: + 'Internal operator docs may guide repair and evidence triage, but they cannot become canonical law or store source-bearing/private payloads.', + }), + surfaceRow({ + surfaceId: 'root-readme', + surfaceKindId: 'package-docs', + audience: ['contributor', 'operator', 'maintainer'], + sourcePaths: [SOURCE_PATHS.readme], + claimIds: ['assetpack-is-commodity', 'btd-is-weighted-scalar-volume-and-settled-rights', 'repair-fails-closed'], + claimCategoryIds: ['product-guidance', 'operator-evidence', 'protocol-law'], + authorityIds: ['canonical-specification', 'generated-proof', 'interface-guidance-only'], + requiredCopyTokens: [ + 'V46 Gate 3 adds `V46PublicOperatorClaimBoundaries`', + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH, + 'public docs, landing, and operator docs', + ], + allowedDataClasses: ['plain-language-protocol-guidance', 'claim-categories', 'proof-root-ids'], + blockedDataClasses: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + operatorReading: + 'Root README records the gate artifact and verification surface without claiming runtime promotion.', + }), + surfaceRow({ + surfaceId: 'protocol-package-readme', + surfaceKindId: 'package-docs', + audience: ['package-consumer', 'maintainer', 'operator'], + sourcePaths: [SOURCE_PATHS.protocolReadme], + claimIds: ['assetpack-is-commodity', 'btd-is-weighted-scalar-volume-and-settled-rights', 'repair-fails-closed'], + claimCategoryIds: ['product-guidance', 'operator-evidence', 'protocol-law'], + authorityIds: ['canonical-specification', 'generated-proof', 'interface-guidance-only'], + requiredCopyTokens: [ + 'V46 Gate 3 adds `V46PublicOperatorClaimBoundaries`', + 'source-safe public/operator claim boundary metadata', + 'buildV46PublicOperatorClaimBoundaries', + ], + allowedDataClasses: ['plain-language-protocol-guidance', 'claim-categories', 'proof-root-ids'], + blockedDataClasses: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + operatorReading: + 'Protocol package README documents the exported builder and source-safe artifact for package consumers.', + }), + surfaceRow({ + surfaceId: 'v46-spec-family', + surfaceKindId: 'formal-specification', + audience: ['protocol-reviewer', 'operator', 'implementation-reviewer'], + sourcePaths: [SOURCE_PATHS.spec, SOURCE_PATHS.delta, SOURCE_PATHS.notes, SOURCE_PATHS.parity, SOURCE_PATHS.roadmap], + claimIds: [ + 'assetpack-is-commodity', + 'btd-is-weighted-scalar-volume-and-settled-rights', + 'finality-authorizes-rights-and-delivery', + 'investor-framing-is-not-protocol-law', + 'repair-fails-closed', + ], + claimCategoryIds: ['protocol-law', 'operator-evidence', 'investor-framing', 'repair-claim'], + authorityIds: ['canonical-specification', 'generated-proof'], + requiredCopyTokens: [ + 'V46 public/operator claim boundary law', + 'Gate 3: Public Docs, Landing, And Operator Claim Boundaries', + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH, + 'V46 Gate 3 closure anchor', + ], + allowedDataClasses: ['claim-categories', 'claim-authority-ids', 'proof-root-ids', 'state-labels'], + blockedDataClasses: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + operatorReading: + 'The V46 spec family is the draft authority for Gate 3 and remains subordinate to V45 until promotion.', + }), +]); + +function buildSourceRoots(repoRoot) { + return Object.fromEntries(Object.entries(SOURCE_PATHS).map(([key, sourcePath]) => [key, sourceRoot(repoRoot, sourcePath)])); +} + +function buildSourcePredicates(repoRoot) { + const sources = Object.fromEntries(Object.entries(SOURCE_PATHS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)])); + return [ + predicateResult('active-canon-pointer-supports-v46-draft-or-later', SOURCE_PATHS.activePointer, bitcodeVersionAtLeast(sources.activePointer, 'V45')), + predicateResult( + 'spec-defines-public-operator-claim-boundary-law', + SOURCE_PATHS.spec, + sources.spec.includes('V46 public/operator claim boundary law') && + sources.spec.includes('Public docs explain; proof readback decides.') && + sources.spec.includes(V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH), + ), + predicateResult( + 'delta-documents-gate3', + SOURCE_PATHS.delta, + sources.delta.includes('Gate 3: Public Docs, Landing, And Operator Claim Boundaries') && + sources.delta.includes(V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH), + ), + predicateResult( + 'notes-record-gate3-atom', + SOURCE_PATHS.notes, + sources.notes.includes('Gate 3: Public Docs, Landing, And Operator Claim Boundaries') && + sources.notes.includes('V46 public/operator claim-boundary atom: public/operator claim boundaries'), + ), + predicateResult( + 'parity-closes-gate3-row', + SOURCE_PATHS.parity, + sources.parity.includes('V46PublicOperatorClaimBoundaries') && + sources.parity.includes(V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH), + ), + predicateResult( + 'roadmap-records-gate3', + SOURCE_PATHS.roadmap, + sources.roadmap.includes('V46 Gate 3 closure anchor') && + sources.roadmap.includes(V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH), + ), + predicateResult( + 'landing-copy-uses-current-claims', + SOURCE_PATHS.publicCopy, + sources.publicCopy.includes('BTD records scalar knowledge volume and rights') && + sources.landingShared.includes('BTC COMPENSATION') && + sources.landingPreview.includes('The preview keeps AssetPacks, source-safe measurements, and settlement posture legible'), + ), + predicateResult( + 'public-docs-home-uses-current-claims', + SOURCE_PATHS.docsHome, + sources.docsPage.includes('AssetPacks, /packs, /read, /deposit, proofs, settlement') && + sources.docsHome.includes('V45 / V46 claim boundary') && + sources.docsHome.includes('Public docs explain; proof readback decides.'), + ), + predicateResult( + 'public-docs-content-uses-current-protocol-page', + SOURCE_PATHS.docsContent, + sources.docsContent.includes("slug: 'protocol'") && + sources.docsContent.includes('Map the active Protocol canon') && + sources.docsContent.includes('V46 claim boundary') && + sources.docsRoute.includes('protocol-v26'), + ), + predicateResult( + 'operator-readme-uses-current-claim-boundary', + SOURCE_PATHS.operatorReadme, + sources.operatorReadme.includes('resolves to `V46`') && + sources.operatorReadme.includes('promoted V46 canon') && + sources.operatorReadme.includes('Operator notes must not record secret values'), + ), + predicateResult( + 'readmes-document-gate3', + SOURCE_PATHS.readme, + sources.readme.includes('V46 Gate 3 adds `V46PublicOperatorClaimBoundaries`') && + sources.protocolReadme.includes('V46 Gate 3 adds `V46PublicOperatorClaimBoundaries`'), + ), + predicateResult( + 'package-exports-wired', + SOURCE_PATHS.packageIndex, + sources.packageIndex.includes('buildV46PublicOperatorClaimBoundaries') && + sources.packageTypes.includes('buildV46PublicOperatorClaimBoundaries'), + ), + predicateResult( + 'generator-and-checker-exist', + SOURCE_PATHS.generator, + sourceExists(repoRoot, SOURCE_PATHS.generator) && sourceExists(repoRoot, SOURCE_PATHS.checker), + ), + predicateResult( + 'package-script-wired', + SOURCE_PATHS.packageJson, + sources.packageJson.includes('"generate:v46-public-operator-claim-boundaries"') && + sources.packageJson.includes('"check:v46-public-operator-claim-boundaries"') && + sources.packageJson.includes('"check:v46-gate3"'), + ), + predicateResult( + 'gate-and-canon-workflows-run-gate3', + SOURCE_PATHS.gateWorkflow, + sources.gateWorkflow.includes('check-v46-gate3-public-operator-claim-boundaries.mjs') && + sources.canonWorkflow.includes('check-v46-gate3-public-operator-claim-boundaries.mjs'), + ), + ]; +} + +function sourceSafetyCoverage(repoRoot, rows) { + const allSourcePaths = [...new Set(rows.flatMap((row) => row.sourcePaths))]; + const forbiddenPhraseHits = scanSourcesForMarkers(repoRoot, allSourcePaths, FORBIDDEN_PUBLIC_OPERATOR_PHRASES); + const secretMarkerHits = scanSourcesForMarkers(repoRoot, allSourcePaths, SECRET_MARKERS); + const rowsMissingRequiredCopy = rows.filter((row) => !requiredTokensPresent(repoRoot, row)).map((row) => row.surfaceId); + return { + sourceSafeMetadataOnly: rows.every((row) => row.sourceSafeMetadataOnly === true), + protectedSourceVisible: rows.some((row) => row.protectedSourceVisible === true), + unpaidAssetPackSourceVisible: rows.some((row) => row.unpaidAssetPackSourceVisible === true), + rawPromptVisible: rows.some((row) => row.rawPromptVisible === true), + rawProviderResponseVisible: rows.some((row) => row.rawProviderResponseVisible === true), + credentialsSerialized: rows.some((row) => row.credentialsSerialized === true), + walletPrivateMaterialVisible: rows.some((row) => row.walletPrivateMaterialVisible === true), + valueBearingMainnetAdmitted: rows.some((row) => row.valueBearingMainnetAdmitted === true), + forbiddenPhraseHits, + secretMarkerHits, + rowsMissingRequiredCopy, + }; +} + +export function buildV46PublicOperatorClaimBoundaries(input = {}) { + const repoRoot = typeof input.repoRoot === 'string' ? input.repoRoot : DEFAULT_REPO_ROOT; + const surfaceRows = [...V46_PUBLIC_OPERATOR_SURFACE_ROWS]; + const sourcePredicates = buildSourcePredicates(repoRoot); + const failedPredicateIds = sourcePredicates.filter((predicate) => !predicate.passed).map((predicate) => predicate.id); + const claimIdsUsed = [...new Set(surfaceRows.flatMap((row) => row.claimIds))]; + const categoryIdsUsed = [...new Set(surfaceRows.flatMap((row) => row.claimCategoryIds))]; + const authorityIdsUsed = [...new Set(surfaceRows.flatMap((row) => row.authorityIds))]; + const coverage = { + surfaceCount: surfaceRows.length, + surfaceIds: [...V46_PUBLIC_OPERATOR_SURFACE_IDS], + surfaceKindIds: [...V46_PUBLIC_OPERATOR_SURFACE_KIND_IDS], + claimIdsUsed, + categoryIdsUsed, + authorityIdsUsed, + objectModelArtifactPath: V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH, + forbiddenClaimIds: [...V46_PROTOCOL_FORBIDDEN_CLAIM_IDS], + privatePayloadIds: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + allowedDataClasses: [...V46_PUBLIC_OPERATOR_ALLOWED_DATA_CLASSES], + landingCovered: surfaceRows.some((row) => row.surfaceId === 'landing-page') && + surfaceRows.some((row) => row.surfaceId === 'landing-preview'), + publicDocsCovered: + surfaceRows.some((row) => row.surfaceId === 'public-docs-home') && + surfaceRows.some((row) => row.surfaceId === 'public-docs-content-model') && + surfaceRows.some((row) => row.surfaceId === 'public-docs-protocol-page'), + operatorDocsCovered: surfaceRows.some((row) => row.surfaceId === 'operator-internal-readme'), + readmesCovered: + surfaceRows.some((row) => row.surfaceId === 'root-readme') && + surfaceRows.some((row) => row.surfaceId === 'protocol-package-readme'), + specFamilyCovered: surfaceRows.some((row) => row.surfaceId === 'v46-spec-family'), + requiredClaimCategoriesCovered: ['protocol-law', 'product-guidance', 'operator-evidence', 'investor-framing', 'telemetry-observability'].every( + (categoryId) => categoryIdsUsed.includes(categoryId), + ), + requiredClaimAuthoritiesCovered: ['canonical-specification', 'generated-proof', 'public-education-only', 'interface-guidance-only'].every( + (authorityId) => authorityIdsUsed.includes(authorityId), + ), + allClaimIdsKnown: claimIdsUsed.every(claimExists), + allCategoryIdsKnown: categoryIdsUsed.every(categoryExists), + allAuthorityIdsKnown: authorityIdsUsed.every(authorityExists), + sourcePredicates, + failedPredicateIds, + ...sourceSafetyCoverage(repoRoot, surfaceRows), + }; + + return { + artifactId: 'v46-public-operator-claim-boundaries', + artifactPath: V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH, + artifactRoot: `v46-public-operator-claim-boundaries:${digest(JSON.stringify({ surfaceRows, coverage }))}`, + schemaId: V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SCHEMA_ID, + version: V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_VERSION, + currentTarget: V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_CURRENT_TARGET, + sourceSafetyVerdict: V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SOURCE_SAFETY_VERDICT, + sourceRoots: buildSourceRoots(repoRoot), + surfaceIds: [...V46_PUBLIC_OPERATOR_SURFACE_IDS], + surfaceKindIds: [...V46_PUBLIC_OPERATOR_SURFACE_KIND_IDS], + allowedDataClasses: [...V46_PUBLIC_OPERATOR_ALLOWED_DATA_CLASSES], + privatePayloadIdsNeverSerialized: [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS], + forbiddenClaimIds: [...V46_PROTOCOL_FORBIDDEN_CLAIM_IDS], + forbiddenPublicOperatorPhrases: [...FORBIDDEN_PUBLIC_OPERATOR_PHRASES], + surfaceRows, + coverage, + passed: + failedPredicateIds.length === 0 && + coverage.landingCovered === true && + coverage.publicDocsCovered === true && + coverage.operatorDocsCovered === true && + coverage.readmesCovered === true && + coverage.specFamilyCovered === true && + coverage.requiredClaimCategoriesCovered === true && + coverage.requiredClaimAuthoritiesCovered === true && + coverage.allClaimIdsKnown === true && + coverage.allCategoryIdsKnown === true && + coverage.allAuthorityIdsKnown === true && + coverage.sourceSafeMetadataOnly === true && + coverage.protectedSourceVisible === false && + coverage.unpaidAssetPackSourceVisible === false && + coverage.rawPromptVisible === false && + coverage.rawProviderResponseVisible === false && + coverage.credentialsSerialized === false && + coverage.walletPrivateMaterialVisible === false && + coverage.valueBearingMainnetAdmitted === false && + coverage.forbiddenPhraseHits.length === 0 && + coverage.secretMarkerHits.length === 0 && + coverage.rowsMissingRequiredCopy.length === 0, + closureReading: + 'V46 Gate 3 closes source-safe public docs, landing, and operator claim boundaries; public/operator surfaces explain Bitcode but proof readback decides protocol state.', + }; +} + +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SOURCE_ROOTS = Object.freeze( + buildSourceRoots(DEFAULT_REPO_ROOT), +); diff --git a/packages/protocol/src/canonical/version-posture.js b/packages/protocol/src/canonical/version-posture.js new file mode 100644 index 000000000..4577fb36f --- /dev/null +++ b/packages/protocol/src/canonical/version-posture.js @@ -0,0 +1,25 @@ +// @ts-check + +/** + * Canonical Bitcode pointer predicates must keep older generated artifacts + * green after a later promotion while still rejecting regressed pointers. + * + * @param {unknown} value + * @returns {number | null} + */ +export function parseBitcodeVersionNumber(value) { + const match = String(value ?? '').trim().match(/^V(\d+)$/u); + if (!match) return null; + return Number.parseInt(match[1], 10); +} + +/** + * @param {unknown} version + * @param {string} minimumVersion + * @returns {boolean} + */ +export function bitcodeVersionAtLeast(version, minimumVersion) { + const versionNumber = parseBitcodeVersionNumber(version); + const minimumNumber = parseBitcodeVersionNumber(minimumVersion); + return versionNumber !== null && minimumNumber !== null && versionNumber >= minimumNumber; +} diff --git a/packages/protocol/src/index.d.ts b/packages/protocol/src/index.d.ts index 62cbf7e5f..68f9fd0c7 100644 --- a/packages/protocol/src/index.d.ts +++ b/packages/protocol/src/index.d.ts @@ -833,6 +833,85 @@ export const V45_PROMOTION_READINESS_GATE_ARTIFACT_PATHS: readonly string[]; export const V45_PROMOTION_READINESS_GENERATED_OUTPUTS: readonly string[]; export function buildV45PromotionReadinessReport(input?: Record): BitcodeProtocolReport; export function listMissingV45PromotionReadinessSources(repoRoot?: string): string[]; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH: string; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_CURRENT_TARGET: string; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SCHEMA_ID: string; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_VERSION: string; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SOURCE_SAFETY_VERDICT: string; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SOURCE_ROOTS: Readonly>; +export const V46_PROTOCOL_COMPREHENSION_OBJECT_IDS: readonly string[]; +export const V46_PROTOCOL_CLAIM_CATEGORY_IDS: readonly string[]; +export const V46_PROTOCOL_CLAIM_AUTHORITY_IDS: readonly string[]; +export const V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS: readonly string[]; +export const V46_PROTOCOL_FORBIDDEN_CLAIM_IDS: readonly string[]; +export const V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS: readonly string[]; +export const V46_PROTOCOL_PRIVATE_PAYLOAD_IDS: readonly string[]; +export const V46_PROTOCOL_OBJECT_ROWS: readonly Record[]; +export const V46_PROTOCOL_CLAIM_ROWS: readonly Record[]; +export function buildV46ProtocolComprehensionObjectModel(input?: Record): BitcodeProtocolReport; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH: string; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_CURRENT_TARGET: string; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SCHEMA_ID: string; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_VERSION: string; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SOURCE_SAFETY_VERDICT: string; +export const V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SOURCE_ROOTS: Readonly>; +export const V46_PUBLIC_OPERATOR_SURFACE_IDS: readonly string[]; +export const V46_PUBLIC_OPERATOR_SURFACE_KIND_IDS: readonly string[]; +export const V46_PUBLIC_OPERATOR_ALLOWED_DATA_CLASSES: readonly string[]; +export const V46_PUBLIC_OPERATOR_SURFACE_ROWS: readonly Record[]; +export function buildV46PublicOperatorClaimBoundaries(input?: Record): BitcodeProtocolReport; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH: string; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_CURRENT_TARGET: string; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SCHEMA_ID: string; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_VERSION: string; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SOURCE_SAFETY_VERDICT: string; +export const V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SOURCE_ROOTS: Readonly>; +export const V46_PRODUCT_ROUTE_IDS: readonly string[]; +export const V46_PRODUCT_ROUTE_PATHS: readonly string[]; +export const V46_PRODUCT_ROUTE_CAPABILITY_IDS: readonly string[]; +export const V46_PRODUCT_ROUTE_READBACK_ROWS: readonly Record[]; +export function buildV46ProductRouteComprehensionReadback(input?: Record): BitcodeProtocolReport; +export const V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH: string; +export const V46_INTERFACE_CLAIM_CONTRACTS_CURRENT_TARGET: string; +export const V46_INTERFACE_CLAIM_CONTRACTS_SCHEMA_ID: string; +export const V46_INTERFACE_CLAIM_CONTRACTS_VERSION: string; +export const V46_INTERFACE_CLAIM_CONTRACTS_SOURCE_SAFETY_VERDICT: string; +export const V46_INTERFACE_CLAIM_CONTRACTS_SOURCE_ROOTS: Readonly>; +export const V46_INTERFACE_CLAIM_SURFACE_IDS: readonly string[]; +export const V46_INTERFACE_CLAIM_CAPABILITY_IDS: readonly string[]; +export const V46_INTERFACE_CLAIM_CONTRACT_ROWS: readonly Record[]; +export function buildV46InterfaceClaimContracts(input?: Record): BitcodeProtocolReport; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH: string; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_CURRENT_TARGET: string; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_SCHEMA_ID: string; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_VERSION: string; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_SOURCE_SAFETY_VERDICT: string; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_SOURCE_ROOTS: Readonly>; +export const V46_PROOF_READBACK_EVIDENCE_CLASS_IDS: readonly string[]; +export const V46_PROOF_READBACK_REQUIRED_OPERATOR_QUESTION_IDS: readonly string[]; +export const V46_PROOF_READBACK_OPERATOR_DECISION_IDS: readonly string[]; +export const V46_PROOF_READBACK_OPERATOR_EXPLANATION_ROWS: readonly Record[]; +export function buildV46ProofReadbackOperatorExplanation(input?: Record): BitcodeProtocolReport; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH: string; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_CURRENT_TARGET: string; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SCHEMA_ID: string; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_VERSION: string; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_SAFETY_VERDICT: string; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_ROOTS: Readonly>; +export const V46_LOCAL_INTERFACE_REHEARSAL_SURFACE_IDS: readonly string[]; +export const V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS: readonly string[]; +export const V46_LOCAL_INTERFACE_REHEARSAL_REQUIRED_ARTIFACT_IDS: readonly string[]; +export const V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ROWS: readonly Record[]; +export function buildV46LocalInterfaceComprehensionRehearsal(input?: Record): BitcodeProtocolReport; +export const V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH: string; +export const V46_PROMOTION_READINESS_REPORT_CURRENT_TARGET: string; +export const V46_PROMOTION_READINESS_REPORT_SCHEMA_ID: string; +export const V46_PROMOTION_READINESS_REPORT_VERSION: string; +export const V46_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT: string; +export const V46_PROMOTION_READINESS_GATE_ARTIFACT_PATHS: readonly string[]; +export const V46_PROMOTION_READINESS_GENERATED_OUTPUTS: readonly string[]; +export function buildV46PromotionReadinessReport(input?: Record): BitcodeProtocolReport; +export function listMissingV46PromotionReadinessSources(repoRoot?: string): string[]; export const EXCHANGE_INTENT_ORDER_CONTRACTS_ARTIFACT_PATH: string; export const EXCHANGE_INTENT_ORDER_CONTRACTS_CURRENT_TARGET: string; export const EXCHANGE_INTENT_ORDER_CONTRACTS_SCHEMA_ID: string; diff --git a/packages/protocol/src/index.js b/packages/protocol/src/index.js index ba49ca758..cb1758c7c 100644 --- a/packages/protocol/src/index.js +++ b/packages/protocol/src/index.js @@ -947,6 +947,100 @@ export { buildV45PromotionReadinessReport, listMissingV45PromotionReadinessSources } from './canonical/v45-promotion-readiness-report.js'; + +export { + V46_PROMOTION_READINESS_GATE_ARTIFACT_PATHS, + V46_PROMOTION_READINESS_GENERATED_OUTPUTS, + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + V46_PROMOTION_READINESS_REPORT_CURRENT_TARGET, + V46_PROMOTION_READINESS_REPORT_SCHEMA_ID, + V46_PROMOTION_READINESS_REPORT_VERSION, + V46_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT, + buildV46PromotionReadinessReport, + listMissingV46PromotionReadinessSources +} from './canonical/v46-promotion-readiness-report.js'; +export { + V46_PROTOCOL_CLAIM_AUTHORITY_IDS, + V46_PROTOCOL_CLAIM_CATEGORY_IDS, + V46_PROTOCOL_CLAIM_ROWS, + V46_PROTOCOL_COMPREHENSION_OBJECT_IDS, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_CURRENT_TARGET, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SCHEMA_ID, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SOURCE_ROOTS, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SOURCE_SAFETY_VERDICT, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_VERSION, + V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS, + V46_PROTOCOL_FORBIDDEN_CLAIM_IDS, + V46_PROTOCOL_OBJECT_ROWS, + V46_PROTOCOL_PRIVATE_PAYLOAD_IDS, + V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS, + buildV46ProtocolComprehensionObjectModel +} from './canonical/v46-protocol-comprehension-object-model.js'; +export { + V46_PUBLIC_OPERATOR_ALLOWED_DATA_CLASSES, + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH, + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_CURRENT_TARGET, + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SCHEMA_ID, + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SOURCE_ROOTS, + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SOURCE_SAFETY_VERDICT, + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_VERSION, + V46_PUBLIC_OPERATOR_SURFACE_IDS, + V46_PUBLIC_OPERATOR_SURFACE_KIND_IDS, + V46_PUBLIC_OPERATOR_SURFACE_ROWS, + buildV46PublicOperatorClaimBoundaries +} from './canonical/v46-public-operator-claim-boundaries.js'; +export { + V46_PRODUCT_ROUTE_CAPABILITY_IDS, + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH, + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_CURRENT_TARGET, + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SCHEMA_ID, + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SOURCE_ROOTS, + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SOURCE_SAFETY_VERDICT, + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_VERSION, + V46_PRODUCT_ROUTE_IDS, + V46_PRODUCT_ROUTE_PATHS, + V46_PRODUCT_ROUTE_READBACK_ROWS, + buildV46ProductRouteComprehensionReadback +} from './canonical/v46-product-route-comprehension-readback.js'; +export { + V46_INTERFACE_CLAIM_CAPABILITY_IDS, + V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH, + V46_INTERFACE_CLAIM_CONTRACTS_CURRENT_TARGET, + V46_INTERFACE_CLAIM_CONTRACTS_SCHEMA_ID, + V46_INTERFACE_CLAIM_CONTRACTS_SOURCE_ROOTS, + V46_INTERFACE_CLAIM_CONTRACTS_SOURCE_SAFETY_VERDICT, + V46_INTERFACE_CLAIM_CONTRACTS_VERSION, + V46_INTERFACE_CLAIM_CONTRACT_ROWS, + V46_INTERFACE_CLAIM_SURFACE_IDS, + buildV46InterfaceClaimContracts +} from './canonical/v46-interface-claim-contracts.js'; +export { + V46_PROOF_READBACK_EVIDENCE_CLASS_IDS, + V46_PROOF_READBACK_OPERATOR_DECISION_IDS, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_CURRENT_TARGET, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_SCHEMA_ID, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_SOURCE_ROOTS, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_SOURCE_SAFETY_VERDICT, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_VERSION, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_ROWS, + V46_PROOF_READBACK_REQUIRED_OPERATOR_QUESTION_IDS, + buildV46ProofReadbackOperatorExplanation +} from './canonical/v46-proof-readback-operator-explanation.js'; +export { + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH, + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_CURRENT_TARGET, + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ROWS, + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SCHEMA_ID, + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_ROOTS, + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_SAFETY_VERDICT, + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_VERSION, + V46_LOCAL_INTERFACE_REHEARSAL_REQUIRED_ARTIFACT_IDS, + V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS, + V46_LOCAL_INTERFACE_REHEARSAL_SURFACE_IDS, + buildV46LocalInterfaceComprehensionRehearsal +} from './canonical/v46-local-interface-comprehension-rehearsal.js'; export { EXCHANGE_INTENT_ACTION_KINDS, EXCHANGE_INTENT_ORDER_CONTRACTS_ARTIFACT_PATH, diff --git a/packages/protocol/test/protocol-package-boundary.test.js b/packages/protocol/test/protocol-package-boundary.test.js index b6b34748b..001e43897 100644 --- a/packages/protocol/test/protocol-package-boundary.test.js +++ b/packages/protocol/test/protocol-package-boundary.test.js @@ -65,6 +65,7 @@ test('@bitcode/protocol commercial formalization exports package-native canon he V43: { activeCanon: 'V43', draftTarget: 'V44' }, V44: { activeCanon: 'V44', draftTarget: 'V45' }, V45: { activeCanon: 'V45', draftTarget: 'V46' }, + V46: { activeCanon: 'V46', draftTarget: 'V47' }, }; const expectedPosture = expectedPostureByPointer[pointer]; diff --git a/packages/protocol/test/spec-family-promotion-posture.test.js b/packages/protocol/test/spec-family-promotion-posture.test.js index 2c284b36a..2539622be 100644 --- a/packages/protocol/test/spec-family-promotion-posture.test.js +++ b/packages/protocol/test/spec-family-promotion-posture.test.js @@ -1,4 +1,5 @@ import assert from 'node:assert/strict'; +import { execFileSync } from 'node:child_process'; import { copyFileSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; import path from 'node:path'; @@ -28,6 +29,16 @@ const V45_SPEC_FAMILY_FILES = [ 'BITCODE_SPEC_V45_PARITY_MATRIX.md', ]; +const V46_SPEC_FAMILY_FILES = [ + 'BITCODE_SPEC.txt', + 'BITCODE_SPECIFYING.md', + 'BITCODE_SPEC_TEMPLATEGUIDE.md', + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', +]; + test('promoted spec-family validation rejects stale draft source-of-truth prose', async () => { const protocol = await import('../src/index.js'); const tempDir = mkdtempSync(path.join(tmpdir(), 'bitcode-promoted-spec-posture-')); @@ -73,6 +84,52 @@ test('promoted spec-family validation rejects stale draft source-of-truth prose' } }); +test('V46 promotion preparation rewrites draft posture before promoted validation', async () => { + const protocol = await import('../src/index.js'); + const tempDir = mkdtempSync(path.join(tmpdir(), 'bitcode-promoted-spec-posture-')); + + try { + for (const relativePath of V46_SPEC_FAMILY_FILES) { + copyFileSync(path.join(repoRoot, relativePath), path.join(tempDir, relativePath)); + } + + writeFileSync(path.join(tempDir, 'BITCODE_SPEC.txt'), 'V46\n'); + + execFileSync( + process.execPath, + [ + path.join(repoRoot, 'scripts/prepare-bitcode-spec-family-promotion.mjs'), + '--version', + 'V46', + '--commit', + '0123456789abcdef0123456789abcdef01234567', + '--repo-root', + tempDir, + ], + { stdio: 'pipe' } + ); + + const report = protocol.buildV21SpecFamilyReport({ + repoRoot: tempDir, + version: 'V46', + mode: 'promoted', + currentTarget: 'V46', + }); + + assert.equal(report.passed, true, report.failures.join('; ')); + assert.match( + readFileSync(path.join(tempDir, 'BITCODE_SPEC_V46.md'), 'utf8'), + /`BITCODE_SPEC\.txt` points to `V46`; V46 is the active promoted Bitcode canon\./u + ); + assert.match( + readFileSync(path.join(tempDir, 'BITCODE_SPEC_V46_NOTES.md'), 'utf8'), + /Canonical pointer: `BITCODE_SPEC\.txt` -> `V46`/u + ); + } finally { + rmSync(tempDir, { recursive: true, force: true }); + } +}); + test('promoted spec-family validation rejects stale draft posture outside source-of-truth prose', async () => { const protocol = await import('../src/index.js'); const tempDir = mkdtempSync(path.join(tmpdir(), 'bitcode-promoted-spec-posture-')); diff --git a/packages/protocol/test/v46-interface-claim-contracts.test.js b/packages/protocol/test/v46-interface-claim-contracts.test.js new file mode 100644 index 000000000..540de93ca --- /dev/null +++ b/packages/protocol/test/v46-interface-claim-contracts.test.js @@ -0,0 +1,81 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { + V46_INTERFACE_CLAIM_CAPABILITY_IDS, + V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH, + V46_INTERFACE_CLAIM_CONTRACTS_SCHEMA_ID, + V46_INTERFACE_CLAIM_CONTRACTS_SOURCE_SAFETY_VERDICT, + V46_INTERFACE_CLAIM_CONTRACT_ROWS, + V46_INTERFACE_CLAIM_SURFACE_IDS, + buildV46InterfaceClaimContracts, +} from '../src/canonical/v46-interface-claim-contracts.js'; + +test('V46 interface claim contracts bind API/MCP, ChatGPT App, Bitcode Chat, and package consumers', () => { + const report = buildV46InterfaceClaimContracts(); + + assert.equal(V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH, '.bitcode/v46-interface-claim-contracts.json'); + assert.equal(report.artifactId, 'v46-interface-claim-contracts'); + assert.equal(report.schemaId, V46_INTERFACE_CLAIM_CONTRACTS_SCHEMA_ID); + assert.equal(report.version, 'V46'); + assert.equal(report.currentTarget, 'V45'); + assert.equal(report.sourceSafetyVerdict, V46_INTERFACE_CLAIM_CONTRACTS_SOURCE_SAFETY_VERDICT); + assert.ok(report.artifactRoot.startsWith('v46-interface-claim-contracts:')); + assert.deepEqual(report.surfaceIds, [...V46_INTERFACE_CLAIM_SURFACE_IDS]); + assert.deepEqual(report.capabilityIds, [...V46_INTERFACE_CLAIM_CAPABILITY_IDS]); + assert.equal(report.interfaceRows.length, V46_INTERFACE_CLAIM_CONTRACT_ROWS.length); + assert.equal(report.coverage.allSurfacesCovered, true); + assert.equal(report.coverage.allClaimIdsKnown, true); + assert.equal(report.coverage.allCategoryIdsKnown, true); + assert.equal(report.coverage.allAuthorityIdsKnown, true); + assert.equal(report.coverage.requiredCapabilitiesCovered, true); + assert.equal(report.coverage.sourceFilesPresent, true); + assert.equal(report.coverage.rowsMissingRequiredCopy.length, 0); + assert.equal(report.passed, true); +}); + +test('V46 interface claim contracts preserve source-safe disclosure boundaries', () => { + const report = buildV46InterfaceClaimContracts(); + + assert.equal(report.coverage.allRowsRequireProofRootProjection, true); + assert.equal(report.coverage.allRowsRequireDeniedStateRepair, true); + assert.equal(report.coverage.noParallelStateAuthority, true); + assert.equal(report.coverage.stateAdvanceRequiresProof, true); + assert.equal(report.coverage.sourceSafeMetadataOnly, true); + assert.equal(report.coverage.protectedSourceVisible, false); + assert.equal(report.coverage.unpaidAssetPackSourceVisible, false); + assert.equal(report.coverage.rawPromptVisible, false); + assert.equal(report.coverage.interpolatedPromptVisible, false); + assert.equal(report.coverage.rawProviderResponseVisible, false); + assert.equal(report.coverage.credentialsSerialized, false); + assert.equal(report.coverage.walletPrivateMaterialVisible, false); + assert.equal(report.coverage.settlementPrivatePayloadVisible, false); + assert.equal(report.coverage.valueBearingMainnetAdmitted, false); + assert.deepEqual(report.coverage.forbiddenPhraseHits, []); + assert.deepEqual(report.coverage.secretMarkerHits, []); + + for (const row of report.interfaceRows) { + assert.equal(row.noParallelStateAuthority, true); + assert.equal(row.stateAdvanceRequiresProof, true); + assert.equal(row.interfaceGuidanceOnly, true); + assert.equal(row.sourceSafeMetadataOnly, true); + assert.equal(row.proofRootProjectionRequired, true); + assert.equal(row.deniedStateRepairRequired, true); + assert.equal(row.protectedSourceVisible, false); + assert.equal(row.unpaidAssetPackSourceVisible, false); + assert.ok(row.rowRoot.includes(':')); + } +}); + +test('V46 interface claim contract rows keep each interface role distinct', () => { + const report = buildV46InterfaceClaimContracts(); + const rowBySurface = new Map(report.interfaceRows.map((row) => [row.surfaceId, row])); + + assert.equal(rowBySurface.get('public_api')?.capabilityIds.includes('versionless-interface-paths'), true); + assert.equal(rowBySurface.get('mcp_api')?.capabilityIds.includes('tool-registry-contract'), true); + assert.equal(rowBySurface.get('mcp_api')?.deniedStateRoots.includes('PROVIDER_BINDING_REQUIRED'), true); + assert.equal(rowBySurface.get('chatgpt_app')?.capabilityIds.includes('action-registry-contract'), true); + assert.equal(rowBySurface.get('chatgpt_app')?.deniedStateRoots.includes('CONFIRMATION_REQUIRED'), true); + assert.equal(rowBySurface.get('bitcode_chat')?.capabilityIds.includes('terminal-delegated-handoff'), true); + assert.equal(rowBySurface.get('bitcode_chat')?.operatorReading.includes('handoff surface'), true); + assert.equal(rowBySurface.get('package_consumer')?.deniedStateRoots.includes('packageConsumersReadContractsOnly'), true); +}); diff --git a/packages/protocol/test/v46-local-interface-comprehension-rehearsal.test.js b/packages/protocol/test/v46-local-interface-comprehension-rehearsal.test.js new file mode 100644 index 000000000..77cc62459 --- /dev/null +++ b/packages/protocol/test/v46-local-interface-comprehension-rehearsal.test.js @@ -0,0 +1,78 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH, + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ROWS, + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SCHEMA_ID, + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_SAFETY_VERDICT, + V46_LOCAL_INTERFACE_REHEARSAL_REQUIRED_ARTIFACT_IDS, + V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS, + V46_LOCAL_INTERFACE_REHEARSAL_SURFACE_IDS, + buildV46LocalInterfaceComprehensionRehearsal, +} from '../src/canonical/v46-local-interface-comprehension-rehearsal.js'; + +test('V46 local interface comprehension rehearsal binds every local surface', () => { + const report = buildV46LocalInterfaceComprehensionRehearsal(); + + assert.equal( + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH, + '.bitcode/v46-local-interface-comprehension-rehearsal.json', + ); + assert.equal(report.artifactId, 'v46-local-interface-comprehension-rehearsal'); + assert.equal(report.schemaId, V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SCHEMA_ID); + assert.equal(report.version, 'V46'); + assert.equal(report.currentTarget, 'V45'); + assert.equal(report.sourceSafetyVerdict, V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_SOURCE_SAFETY_VERDICT); + assert.deepEqual(report.surfaceIds, [...V46_LOCAL_INTERFACE_REHEARSAL_SURFACE_IDS]); + assert.deepEqual(report.stepIds, [...V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS]); + assert.deepEqual(report.requiredArtifactIds, [...V46_LOCAL_INTERFACE_REHEARSAL_REQUIRED_ARTIFACT_IDS]); + assert.equal(report.rows.length, V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ROWS.length); + assert.equal(report.coverage.allSurfacesCovered, true); + assert.equal(report.coverage.allStepsCovered, true); + assert.equal(report.coverage.allPriorArtifactsPassed, true); + assert.equal(report.coverage.allClaimIdsKnown, true); + assert.equal(report.coverage.allCategoryIdsKnown, true); + assert.equal(report.coverage.allAuthorityIdsKnown, true); + assert.equal(report.coverage.sourceFilesPresent, true); + assert.equal(report.coverage.rowsMissingRequiredCopy.length, 0); + assert.equal(report.passed, true); +}); + +test('V46 local interface comprehension rehearsal remains source-safe and local-only', () => { + const report = buildV46LocalInterfaceComprehensionRehearsal(); + + assert.equal(report.coverage.localOnly, true); + assert.equal(report.coverage.sourceSafeMetadataOnly, true); + assert.equal(report.coverage.noParallelStateAuthority, true); + assert.equal(report.coverage.stateAdvanceRequiresProofRoot, true); + assert.equal(report.coverage.protectedSourceVisible, false); + assert.equal(report.coverage.unpaidAssetPackSourceVisible, false); + assert.equal(report.coverage.rawPromptVisible, false); + assert.equal(report.coverage.interpolatedPromptVisible, false); + assert.equal(report.coverage.rawProviderResponseVisible, false); + assert.equal(report.coverage.credentialsSerialized, false); + assert.equal(report.coverage.walletPrivateMaterialVisible, false); + assert.equal(report.coverage.settlementPrivatePayloadVisible, false); + assert.equal(report.coverage.valueBearingMainnetAdmitted, false); + assert.deepEqual(report.coverage.forbiddenPhraseHits, []); + assert.deepEqual(report.coverage.secretMarkerHits, []); +}); + +test('V46 local interface rows rehearse product and machine interfaces distinctly', () => { + const report = buildV46LocalInterfaceComprehensionRehearsal(); + const rowBySurface = new Map(report.rows.map((row) => [row.surfaceId, row])); + + assert.equal(rowBySurface.get('packs_route')?.claimIds.includes('repair-fails-closed'), true); + assert.equal(rowBySurface.get('read_route')?.claimIds.includes('quote-is-source-safe-offer'), true); + assert.equal(rowBySurface.get('deposit_route')?.claimIds.includes('deposit-option-is-potential-supply'), true); + assert.equal(rowBySurface.get('api_mcp')?.authorityIds.includes('interface-guidance-only'), true); + assert.equal(rowBySurface.get('chatgpt_bitcode_chat')?.claimIds.includes('delivery-is-entitled-source-unlock'), true); + assert.equal(rowBySurface.get('proof_telemetry_repair')?.authorityIds.includes('telemetry-observability-only'), true); + + for (const row of report.rows) { + assert.equal(row.localOnly, true); + assert.equal(row.sourceSafeMetadataOnly, true); + assert.ok(row.rowRoot.startsWith('v46-local-interface-rehearsal-row:')); + assert.ok(row.stepIds.length >= V46_LOCAL_INTERFACE_REHEARSAL_STEP_IDS.length); + } +}); diff --git a/packages/protocol/test/v46-product-route-comprehension-readback.test.js b/packages/protocol/test/v46-product-route-comprehension-readback.test.js new file mode 100644 index 000000000..0b0426e6a --- /dev/null +++ b/packages/protocol/test/v46-product-route-comprehension-readback.test.js @@ -0,0 +1,92 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { + V46_PRODUCT_ROUTE_CAPABILITY_IDS, + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH, + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SCHEMA_ID, + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SOURCE_SAFETY_VERDICT, + V46_PRODUCT_ROUTE_IDS, + V46_PRODUCT_ROUTE_PATHS, + V46_PRODUCT_ROUTE_READBACK_ROWS, + buildV46ProductRouteComprehensionReadback, +} from '../src/canonical/v46-product-route-comprehension-readback.js'; + +test('V46 product route comprehension readback binds packs, read, and deposit routes', () => { + const report = buildV46ProductRouteComprehensionReadback(); + + assert.equal(V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH, '.bitcode/v46-product-route-comprehension-readback.json'); + assert.equal(report.artifactId, 'v46-product-route-comprehension-readback'); + assert.equal(report.schemaId, V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SCHEMA_ID); + assert.equal(report.version, 'V46'); + assert.equal(report.currentTarget, 'V45'); + assert.equal(report.sourceSafetyVerdict, V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_SOURCE_SAFETY_VERDICT); + assert.ok(report.artifactRoot.startsWith('v46-product-route-comprehension-readback:')); + assert.deepEqual(report.routeIds, [...V46_PRODUCT_ROUTE_IDS]); + assert.deepEqual(report.routePaths, [...V46_PRODUCT_ROUTE_PATHS]); + assert.deepEqual(report.capabilityIds, [...V46_PRODUCT_ROUTE_CAPABILITY_IDS]); + assert.equal(report.routeRows.length, V46_PRODUCT_ROUTE_READBACK_ROWS.length); + assert.equal(report.coverage.allRoutesCovered, true); + assert.equal(report.coverage.allRoutePathsCovered, true); + assert.equal(report.coverage.lowDetailDefaultsCovered, true); + assert.equal(report.coverage.expandableProofReadbackCovered, true); + assert.equal(report.coverage.routeOwnedStateCovered, true); + assert.equal(report.coverage.requiredCapabilitiesCovered, true); + assert.equal(report.coverage.routeSpecificCapabilitiesCovered, true); + assert.equal(report.coverage.allClaimIdsKnown, true); + assert.equal(report.coverage.allCategoryIdsKnown, true); + assert.equal(report.coverage.allAuthorityIdsKnown, true); + assert.equal(report.coverage.rowsMissingRequiredCopy.length, 0); + assert.equal(report.passed, true); +}); + +test('V46 product route readback rows preserve source-safe disclosure boundaries', () => { + const report = buildV46ProductRouteComprehensionReadback(); + + assert.equal(report.coverage.sourceSafeMetadataOnly, true); + assert.equal(report.coverage.protectedSourceVisible, false); + assert.equal(report.coverage.unpaidAssetPackSourceVisible, false); + assert.equal(report.coverage.rawPromptVisible, false); + assert.equal(report.coverage.interpolatedPromptVisible, false); + assert.equal(report.coverage.rawProviderResponseVisible, false); + assert.equal(report.coverage.credentialsSerialized, false); + assert.equal(report.coverage.walletPrivateMaterialVisible, false); + assert.equal(report.coverage.settlementPrivatePayloadVisible, false); + assert.equal(report.coverage.valueBearingMainnetAdmitted, false); + assert.deepEqual(report.coverage.forbiddenPhraseHits, []); + assert.deepEqual(report.coverage.secretMarkerHits, []); + + for (const row of report.routeRows) { + assert.equal(row.lowDetailDefault, true); + assert.equal(row.expandableSourceSafeDetail, true); + assert.equal(row.routeOwnedState, true); + assert.equal(row.proofReadbackVisible, true); + assert.equal(row.sourceSafeMetadataOnly, true); + assert.equal(row.protectedSourceVisible, false); + assert.equal(row.unpaidAssetPackSourceVisible, false); + assert.equal(row.rawPromptVisible, false); + assert.equal(row.interpolatedPromptVisible, false); + assert.equal(row.rawProviderResponseVisible, false); + assert.equal(row.credentialsSerialized, false); + assert.equal(row.walletPrivateMaterialVisible, false); + assert.equal(row.settlementPrivatePayloadVisible, false); + assert.equal(row.valueBearingMainnetAdmitted, false); + assert.ok(row.rowRoot.includes(':')); + } +}); + +test('V46 product route readback rows keep route-specific product meaning distinct', () => { + const report = buildV46ProductRouteComprehensionReadback(); + const rowById = new Map(report.routeRows.map((row) => [row.routeId, row])); + + assert.deepEqual(rowById.get('packs')?.requiredCopyTokens.slice(0, 3), [ + 'Pack activity', + 'Portfolio positions, market signals, proof roots, settlement, compensation, delivery, repair.', + 'Search titles, measurements, values, proof roots', + ]); + assert.equal(rowById.get('packs')?.capabilityIds.includes('search-filter-sort'), true); + assert.equal(rowById.get('read')?.capabilityIds.includes('five-step-reading'), true); + assert.equal(rowById.get('read')?.claimIds.includes('quote-is-source-safe-offer'), true); + assert.equal(rowById.get('deposit')?.capabilityIds.includes('five-step-depositing'), true); + assert.equal(rowById.get('deposit')?.claimIds.includes('deposit-option-is-potential-supply'), true); + assert.equal(rowById.get('deposit')?.operatorReading.includes('source-safe supply route'), true); +}); diff --git a/packages/protocol/test/v46-promotion-readiness.test.js b/packages/protocol/test/v46-promotion-readiness.test.js new file mode 100644 index 000000000..195190173 --- /dev/null +++ b/packages/protocol/test/v46-promotion-readiness.test.js @@ -0,0 +1,81 @@ +import assert from 'node:assert/strict'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { test } from 'node:test'; + +import { + V46_PROMOTION_READINESS_GATE_ARTIFACT_PATHS, + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + buildV46PromotionReadinessReport, + generateCanonicalProvenMarkdown, +} from '../src/index.js'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const repoRoot = path.resolve(__dirname, '..', '..', '..'); + +test('builds source-safe V46 PromotionReadinessReport', () => { + const report = buildV46PromotionReadinessReport({ + generatedAt: '2026-06-02T00:00:00.000Z', + repoRoot, + }); + + assert.equal(report.artifactId, 'v46-promotion-readiness-report'); + assert.equal(report.schemaId, 'bitcode.v46.promotionReadinessReport.v1'); + assert.equal(report.version, 'V46'); + assert.equal(report.currentTarget, 'V45'); + assert.equal(report.passed, true); + assert.equal(report.sourceSafetyVerdict, 'source-safe-v46-protocol-comprehension-promotion-metadata'); + assert.equal(report.prePromotionPosture, 'V45 active / V46 draft'); + assert.equal(report.postPromotionPosture, 'V46 active / V47 draft'); + assert.equal(report.coverage.allGateArtifactsCovered, true); + assert.equal(report.coverage.allGateArtifactsParseable, true); + assert.equal(report.coverage.allGateArtifactsSourceSafe, true); + assert.equal(report.coverage.sourceEvidenceComplete, true); + assert.equal(report.coverage.documentationEvidenceComplete, true); + assert.equal(report.coverage.generatedProofOutputsCovered, true); + assert.equal(report.coverage.promotionWorkflowCovered, true); + assert.equal(report.coverage.gateQualityWorkflowCovered, true); + assert.equal(report.coverage.canonQualityWorkflowCovered, true); + assert.equal(report.coverage.promotionScriptCovered, true); + assert.equal(report.coverage.specFamilyPromotionScriptCovered, true); + assert.equal(report.coverage.runtimePromotionScriptCovered, true); + assert.equal(report.coverage.provenGeneratorCovered, true); + assert.equal(report.coverage.valueBearingMainnetAdmission, false); + assert.equal(report.coverage.credentialsSerialized, false); + assert.equal(report.coverage.protectedSourceVisible, false); + assert.equal(report.coverage.rawProtectedPromptVisible, false); + assert.equal(report.coverage.rawProviderResponseVisible, false); + assert.equal(report.coverage.unpaidAssetPackSourceVisible, false); + assert.equal(report.coverage.walletPrivateMaterialVisible, false); + assert.deepEqual(report.coverage.missingGateArtifacts, []); + assert.deepEqual(report.coverage.unparseableGateArtifacts, []); + assert.deepEqual(report.coverage.sourceUnsafeGateArtifacts, []); + assert.match(report.artifactRoot, /^v46-protocol-comprehension-promotion-readiness-report:[a-f0-9]{24}$/u); + assert.equal( + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + '.bitcode/v46-promotion-readiness-report.json', + ); + + for (const artifactPath of V46_PROMOTION_READINESS_GATE_ARTIFACT_PATHS) { + assert.equal(report.gateArtifactEvidence.some((artifact) => artifact.relativePath === artifactPath), true, `missing ${artifactPath}`); + } +}); + +test('supports V46 promotion readiness with source-safe protocol comprehension artifacts', () => { + const result = generateCanonicalProvenMarkdown({ + version: 'V46', + canonicalCommit: '0'.repeat(40), + canonicalCommitRecordedAt: '2026-06-02T00:00:00.000Z', + generatedAt: '2026-06-02T00:00:00.000Z', + worktreeState: 'clean', + }); + + assert.equal(result.data.version, 'V46'); + assert.equal(result.data.v46.promotionReadinessReport.artifactId, 'v46-promotion-readiness-report'); + assert.equal(result.data.v46.promotionReadinessReport.prePromotionPosture, 'V45 active / V46 draft'); + assert.equal(result.data.v46.promotionReadinessReport.postPromotionPosture, 'V46 active / V47 draft'); + assert.equal(result.data.v46.promotionReadinessReport.passed, true); + assert.match(result.markdown, /V46 Promotion Readiness/); + assert.ok(result.artifacts['.bitcode/v46-promotion-readiness-report.json']); + assert.ok(result.artifacts['.bitcode/v46-canon-posture-drift-report.json']); +}); diff --git a/packages/protocol/test/v46-proof-readback-operator-explanation.test.js b/packages/protocol/test/v46-proof-readback-operator-explanation.test.js new file mode 100644 index 000000000..c22d19df7 --- /dev/null +++ b/packages/protocol/test/v46-proof-readback-operator-explanation.test.js @@ -0,0 +1,82 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { + V46_PROOF_READBACK_EVIDENCE_CLASS_IDS, + V46_PROOF_READBACK_OPERATOR_DECISION_IDS, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_ROWS, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_SCHEMA_ID, + V46_PROOF_READBACK_OPERATOR_EXPLANATION_SOURCE_SAFETY_VERDICT, + V46_PROOF_READBACK_REQUIRED_OPERATOR_QUESTION_IDS, + buildV46ProofReadbackOperatorExplanation, +} from '../src/canonical/v46-proof-readback-operator-explanation.js'; + +test('V46 proof readback operator explanation binds all evidence classes', () => { + const report = buildV46ProofReadbackOperatorExplanation(); + + assert.equal( + V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH, + '.bitcode/v46-proof-readback-operator-explanation.json', + ); + assert.equal(report.artifactId, 'v46-proof-readback-operator-explanation'); + assert.equal(report.schemaId, V46_PROOF_READBACK_OPERATOR_EXPLANATION_SCHEMA_ID); + assert.equal(report.version, 'V46'); + assert.equal(report.currentTarget, 'V45'); + assert.equal(report.sourceSafetyVerdict, V46_PROOF_READBACK_OPERATOR_EXPLANATION_SOURCE_SAFETY_VERDICT); + assert.deepEqual(report.evidenceClassIds, [...V46_PROOF_READBACK_EVIDENCE_CLASS_IDS]); + assert.deepEqual(report.operatorQuestionIds, [...V46_PROOF_READBACK_REQUIRED_OPERATOR_QUESTION_IDS]); + assert.deepEqual(report.operatorDecisionIds, [...V46_PROOF_READBACK_OPERATOR_DECISION_IDS]); + assert.equal(report.proofReadbackRows.length, V46_PROOF_READBACK_OPERATOR_EXPLANATION_ROWS.length); + assert.equal(report.coverage.allEvidenceClassesCovered, true); + assert.equal(report.coverage.allAuthorityIdsKnown, true); + assert.equal(report.coverage.allClaimIdsKnown, true); + assert.equal(report.coverage.allOperatorQuestionsCovered, true); + assert.equal(report.coverage.sourceFilesPresent, true); + assert.equal(report.coverage.rowsMissingRequiredCopy.length, 0); + assert.equal(report.passed, true); +}); + +test('V46 proof readback operator explanation preserves source-safe authority boundaries', () => { + const report = buildV46ProofReadbackOperatorExplanation(); + + assert.equal(report.coverage.noParallelStateAuthority, true); + assert.equal(report.coverage.stateAdvanceRequiresProofRoot, true); + assert.equal(report.coverage.telemetryObservabilityOnly, true); + assert.equal(report.coverage.databaseProjectionNotLedgerTruth, true); + assert.equal(report.coverage.paymentObservationNotFinality, true); + assert.equal(report.coverage.repositoryDeliveryRequiresEntitlement, true); + assert.equal(report.coverage.repairFailsClosed, true); + assert.equal(report.coverage.sourceSafeMetadataOnly, true); + assert.equal(report.coverage.protectedSourceVisible, false); + assert.equal(report.coverage.unpaidAssetPackSourceVisible, false); + assert.equal(report.coverage.rawPromptVisible, false); + assert.equal(report.coverage.interpolatedPromptVisible, false); + assert.equal(report.coverage.rawProviderResponseVisible, false); + assert.equal(report.coverage.credentialsSerialized, false); + assert.equal(report.coverage.walletPrivateMaterialVisible, false); + assert.equal(report.coverage.settlementPrivatePayloadVisible, false); + assert.equal(report.coverage.valueBearingMainnetAdmitted, false); + assert.deepEqual(report.coverage.forbiddenPhraseHits, []); + assert.deepEqual(report.coverage.secretMarkerHits, []); +}); + +test('V46 proof readback rows keep evidence authority distinct', () => { + const report = buildV46ProofReadbackOperatorExplanation(); + const rowByClass = new Map(report.proofReadbackRows.map((row) => [row.evidenceClassId, row])); + + assert.equal(rowByClass.get('ledger_journal')?.authorityIds.includes('ledger-readback'), true); + assert.equal(rowByClass.get('database_projection')?.cannotAuthorize.includes('Cannot override ledger finality'), true); + assert.equal(rowByClass.get('object_storage_root')?.repairStates.includes('object_storage_root_mismatch'), true); + assert.equal(rowByClass.get('telemetry_stream')?.authorityIds.includes('telemetry-observability-only'), true); + assert.equal(rowByClass.get('wallet_provider_receipt')?.cannotAuthorize.includes('final settlement'), true); + assert.equal(rowByClass.get('repository_delivery_receipt')?.canAuthorize.includes('entitled repository delivery'), true); + assert.equal(rowByClass.get('repair_reconciliation_receipt')?.conflictBehavior.includes('fails-closed'), true); + + for (const row of report.proofReadbackRows) { + assert.equal(row.noParallelStateAuthority, true); + assert.equal(row.stateAdvanceRequiresProofRoot, true); + assert.equal(row.sourceSafeMetadataOnly, true); + assert.ok(row.rowRoot.startsWith('v46-proof-readback-row:')); + assert.ok(row.operatorQuestionIds.length >= V46_PROOF_READBACK_REQUIRED_OPERATOR_QUESTION_IDS.length); + } +}); diff --git a/packages/protocol/test/v46-protocol-comprehension-object-model.test.js b/packages/protocol/test/v46-protocol-comprehension-object-model.test.js new file mode 100644 index 000000000..1ed545103 --- /dev/null +++ b/packages/protocol/test/v46-protocol-comprehension-object-model.test.js @@ -0,0 +1,95 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { + V46_PROTOCOL_CLAIM_AUTHORITY_IDS, + V46_PROTOCOL_CLAIM_CATEGORY_IDS, + V46_PROTOCOL_CLAIM_ROWS, + V46_PROTOCOL_COMPREHENSION_OBJECT_IDS, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SCHEMA_ID, + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SOURCE_SAFETY_VERDICT, + V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS, + V46_PROTOCOL_FORBIDDEN_CLAIM_IDS, + V46_PROTOCOL_OBJECT_ROWS, + V46_PROTOCOL_PRIVATE_PAYLOAD_IDS, + V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS, + buildV46ProtocolComprehensionObjectModel, +} from '../src/canonical/v46-protocol-comprehension-object-model.js'; + +test('V46 protocol comprehension object model binds source-safe objects and claim taxonomy', () => { + const report = buildV46ProtocolComprehensionObjectModel(); + + assert.equal(V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH, '.bitcode/v46-protocol-comprehension-object-model.json'); + assert.equal(report.artifactId, 'v46-protocol-comprehension-object-model'); + assert.equal(report.schemaId, V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SCHEMA_ID); + assert.equal(report.version, 'V46'); + assert.equal(report.currentTarget, 'V45'); + assert.equal(report.sourceSafetyVerdict, V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_SOURCE_SAFETY_VERDICT); + assert.ok(report.artifactRoot.startsWith('v46-protocol-comprehension-object-model:')); + assert.deepEqual(report.objectIds, [...V46_PROTOCOL_COMPREHENSION_OBJECT_IDS]); + assert.deepEqual(report.claimCategoryIds, [...V46_PROTOCOL_CLAIM_CATEGORY_IDS]); + assert.deepEqual(report.claimAuthorityIds, [...V46_PROTOCOL_CLAIM_AUTHORITY_IDS]); + assert.deepEqual(report.disclosureBoundaryIds, [...V46_PROTOCOL_DISCLOSURE_BOUNDARY_IDS]); + assert.deepEqual(report.forbiddenClaimIds, [...V46_PROTOCOL_FORBIDDEN_CLAIM_IDS]); + assert.deepEqual(report.sourceSafeFieldIds, [...V46_PROTOCOL_SOURCE_SAFE_FIELD_IDS]); + assert.deepEqual(report.privatePayloadIdsNeverSerialized, [...V46_PROTOCOL_PRIVATE_PAYLOAD_IDS]); + assert.equal(report.objectRows.length, V46_PROTOCOL_OBJECT_ROWS.length); + assert.equal(report.claimRows.length, V46_PROTOCOL_CLAIM_ROWS.length); + assert.equal(report.coverage.assetPackCommodityCovered, true); + assert.equal(report.coverage.btdScalarVolumeCovered, true); + assert.equal(report.coverage.btcQuoteSettlementCovered, true); + assert.equal(report.coverage.sourceUnlockDeliveryCovered, true); + assert.equal(report.coverage.contributorCompensationCovered, true); + assert.equal(report.coverage.interfaceClaimsCovered, true); + assert.equal(report.coverage.protocolLawClaimCovered, true); + assert.equal(report.coverage.productGuidanceClaimCovered, true); + assert.equal(report.coverage.operatorEvidenceClaimCovered, true); + assert.equal(report.coverage.investorFramingClaimCovered, true); + assert.equal(report.coverage.telemetryObservabilityClaimCovered, true); + assert.equal(report.coverage.previewQuoteSettlementRightsDeliveryCovered, true); + assert.equal(report.coverage.compensationRepairClaimsCovered, true); + assert.equal(report.coverage.noForbiddenClaimCollapsed, true); + assert.equal(report.passed, true); +}); + +test('V46 protocol comprehension rows do not serialize source or value-bearing mainnet authority', () => { + const report = buildV46ProtocolComprehensionObjectModel(); + + for (const row of [...report.objectRows, ...report.claimRows]) { + assert.equal(row.sourceSafeMetadataOnly, true); + assert.equal(row.protectedSourceVisible, false); + assert.equal(row.unpaidAssetPackSourceVisible, false); + assert.equal(row.rawPromptVisible, false); + assert.equal(row.rawProviderResponseVisible, false); + assert.equal(row.credentialsSerialized, false); + assert.equal(row.walletPrivateMaterialVisible, false); + assert.equal(row.valueBearingMainnetAdmitted, false); + assert.ok(row.rowRoot.includes(':')); + } +}); + +test('V46 protocol claim taxonomy separates law, guidance, evidence, framing, and state claims', () => { + const report = buildV46ProtocolComprehensionObjectModel(); + const categorySet = new Set(report.claimRows.map((row) => row.claimCategoryId)); + const authoritySet = new Set(report.claimRows.map((row) => row.authorityId)); + + for (const id of ['protocol-law', 'product-guidance', 'investor-framing', 'telemetry-observability']) { + assert.equal(categorySet.has(id), true); + } + for (const id of ['preview-claim', 'quote-claim', 'settlement-claim', 'rights-claim', 'repair-claim']) { + assert.equal(categorySet.has(id), true); + } + assert.equal(authoritySet.has('canonical-specification'), true); + assert.equal(authoritySet.has('generated-proof'), true); + assert.equal(authoritySet.has('ledger-readback'), true); + assert.equal(authoritySet.has('telemetry-observability-only'), true); + assert.equal(authoritySet.has('public-education-only'), true); + + for (const forbiddenId of V46_PROTOCOL_FORBIDDEN_CLAIM_IDS) { + assert.equal( + report.coverage.noForbiddenClaimCollapsed, + true, + `forbidden claim ${forbiddenId} must be represented as a blocked interpretation`, + ); + } +}); diff --git a/packages/protocol/test/v46-public-operator-claim-boundaries.test.js b/packages/protocol/test/v46-public-operator-claim-boundaries.test.js new file mode 100644 index 000000000..1e29bcf23 --- /dev/null +++ b/packages/protocol/test/v46-public-operator-claim-boundaries.test.js @@ -0,0 +1,84 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { + V46_PUBLIC_OPERATOR_ALLOWED_DATA_CLASSES, + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH, + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SCHEMA_ID, + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SOURCE_SAFETY_VERDICT, + V46_PUBLIC_OPERATOR_SURFACE_IDS, + V46_PUBLIC_OPERATOR_SURFACE_KIND_IDS, + V46_PUBLIC_OPERATOR_SURFACE_ROWS, + buildV46PublicOperatorClaimBoundaries, +} from '../src/canonical/v46-public-operator-claim-boundaries.js'; + +test('V46 public/operator claim boundaries bind public docs, landing, and operator surfaces', () => { + const report = buildV46PublicOperatorClaimBoundaries(); + + assert.equal(V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH, '.bitcode/v46-public-operator-claim-boundaries.json'); + assert.equal(report.artifactId, 'v46-public-operator-claim-boundaries'); + assert.equal(report.schemaId, V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SCHEMA_ID); + assert.equal(report.version, 'V46'); + assert.equal(report.currentTarget, 'V45'); + assert.equal(report.sourceSafetyVerdict, V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_SOURCE_SAFETY_VERDICT); + assert.ok(report.artifactRoot.startsWith('v46-public-operator-claim-boundaries:')); + assert.deepEqual(report.surfaceIds, [...V46_PUBLIC_OPERATOR_SURFACE_IDS]); + assert.deepEqual(report.surfaceKindIds, [...V46_PUBLIC_OPERATOR_SURFACE_KIND_IDS]); + assert.deepEqual(report.allowedDataClasses, [...V46_PUBLIC_OPERATOR_ALLOWED_DATA_CLASSES]); + assert.equal(report.surfaceRows.length, V46_PUBLIC_OPERATOR_SURFACE_ROWS.length); + assert.equal(report.coverage.landingCovered, true); + assert.equal(report.coverage.publicDocsCovered, true); + assert.equal(report.coverage.operatorDocsCovered, true); + assert.equal(report.coverage.readmesCovered, true); + assert.equal(report.coverage.specFamilyCovered, true); + assert.equal(report.coverage.requiredClaimCategoriesCovered, true); + assert.equal(report.coverage.requiredClaimAuthoritiesCovered, true); + assert.equal(report.coverage.allClaimIdsKnown, true); + assert.equal(report.coverage.allCategoryIdsKnown, true); + assert.equal(report.coverage.allAuthorityIdsKnown, true); + assert.equal(report.coverage.rowsMissingRequiredCopy.length, 0); + assert.equal(report.passed, true); +}); + +test('V46 public/operator surfaces never serialize source, secrets, or value-bearing authority', () => { + const report = buildV46PublicOperatorClaimBoundaries(); + + assert.equal(report.coverage.sourceSafeMetadataOnly, true); + assert.equal(report.coverage.protectedSourceVisible, false); + assert.equal(report.coverage.unpaidAssetPackSourceVisible, false); + assert.equal(report.coverage.rawPromptVisible, false); + assert.equal(report.coverage.rawProviderResponseVisible, false); + assert.equal(report.coverage.credentialsSerialized, false); + assert.equal(report.coverage.walletPrivateMaterialVisible, false); + assert.equal(report.coverage.valueBearingMainnetAdmitted, false); + assert.deepEqual(report.coverage.forbiddenPhraseHits, []); + assert.deepEqual(report.coverage.secretMarkerHits, []); + + for (const row of report.surfaceRows) { + assert.equal(row.sourceSafeMetadataOnly, true); + assert.equal(row.protectedSourceVisible, false); + assert.equal(row.unpaidAssetPackSourceVisible, false); + assert.equal(row.rawPromptVisible, false); + assert.equal(row.rawProviderResponseVisible, false); + assert.equal(row.credentialsSerialized, false); + assert.equal(row.walletPrivateMaterialVisible, false); + assert.equal(row.valueBearingMainnetAdmitted, false); + assert.ok(row.rowRoot.includes(':')); + } +}); + +test('V46 public/operator claim rows preserve proof authority and compatibility boundaries', () => { + const report = buildV46PublicOperatorClaimBoundaries(); + const rowById = new Map(report.surfaceRows.map((row) => [row.surfaceId, row])); + + assert.deepEqual(rowById.get('landing-preview')?.requiredCopyTokens, [ + 'The preview keeps AssetPacks, source-safe measurements, and settlement posture legible', + 'static preview', + 'Packs', + 'Deposit', + 'Read', + ]); + assert.equal(rowById.get('public-docs-protocol-page')?.requiredCopyTokens.includes('protocol-v26'), true); + assert.equal(rowById.get('public-docs-protocol-page')?.operatorReading.includes('compatibility alias'), true); + assert.equal(rowById.get('operator-internal-readme')?.blockedDataClasses.includes('wallet-private-material'), true); + assert.equal(rowById.get('v46-spec-family')?.claimIds.includes('finality-authorizes-rights-and-delivery'), true); +}); diff --git a/protocol-demonstration/README.md b/protocol-demonstration/README.md index 378e98203..53af45bd7 100644 --- a/protocol-demonstration/README.md +++ b/protocol-demonstration/README.md @@ -1,12 +1,12 @@ -# Bitcode Protocol Demonstration - V45 canonical deterministic local prototype +# Bitcode Protocol Demonstration - V46 canonical deterministic local prototype This package is the deterministic demonstration of Bitcode. Within this package the correct name is demonstration. `BITCODE_SPEC.txt` is the canonical pointer for active-system work. It currently -resolves to `V43`; V44 is the next draft target after this promotion. This demo is governed by the active V45 canonical -spec and `BITCODE_SPEC_V45_PROVEN.md` as the current generated appendix. -`BITCODE_SPEC.txt -> V45`. +resolves to `V43`; V44 is the next draft target after this promotion. This demo is governed by the active V46 canonical +spec and `BITCODE_SPEC_V46_PROVEN.md` as the current generated appendix. +`BITCODE_SPEC.txt -> V46`. V35 telemetry/documentation work may compare against demonstration facts, but the demonstration remains self-contained and does not import commercial runtime telemetry, documentation, dashboard, runbook, or public docs code. diff --git a/protocol-demonstration/src/canon-posture.js b/protocol-demonstration/src/canon-posture.js index f6d31663a..6fd507606 100644 --- a/protocol-demonstration/src/canon-posture.js +++ b/protocol-demonstration/src/canon-posture.js @@ -1,7 +1,7 @@ // @ts-check -export const ACTIVE_CANON_VERSION = 'V45'; -export const DRAFT_TARGET_VERSION = 'V46'; +export const ACTIVE_CANON_VERSION = 'V46'; +export const DRAFT_TARGET_VERSION = 'V47'; export const CURRENT_CANON_OPERATOR_LABEL = `${ACTIVE_CANON_VERSION} active canon / ${DRAFT_TARGET_VERSION} system draft`; /** @@ -48,7 +48,7 @@ export function buildCanonPosture() { draftSpecPath: DRAFT_SPEC_PATH, draftDeltaPath: DRAFT_DELTA_PATH, draftParityPath: DRAFT_PARITY_PATH, - inheritedCanonSurfaceLabel: 'V16/V17/V18/V19/V20/V21/V22/V23/V24/V25/V26/V27/V28/V29/V30/V31/V32/V33/V34/V35/V36/V37/V38/V39/V40/V41/V42/V43/V44', + inheritedCanonSurfaceLabel: 'V16/V17/V18/V19/V20/V21/V22/V23/V24/V25/V26/V27/V28/V29/V30/V31/V32/V33/V34/V35/V36/V37/V38/V39/V40/V41/V42/V43/V44/V45', heroEyebrow: `${CURRENT_PROJECT_LABEL} transactions and activity`, heroLede: 'Set the active scenario, select supply, and follow the flow from deposit through settlement.', heroTip: 'Use the guide and lower runtime surfaces when you read exact replay, proof, or settlement detail.' diff --git a/protocol-demonstration/test/v21-specifying.test.js b/protocol-demonstration/test/v21-specifying.test.js index 55c7366f6..df38bcc76 100644 --- a/protocol-demonstration/test/v21-specifying.test.js +++ b/protocol-demonstration/test/v21-specifying.test.js @@ -32,6 +32,8 @@ function expectedActiveCanonicalInputArtifactCount(version) { V42: 10, V43: 11, V44: 11, + V45: 13, + V46: 9, }; if (Object.hasOwn(expectedCountsByVersion, version)) { return expectedCountsByVersion[version]; diff --git a/scripts/check-v45-gate19-promotion-addendum.mjs b/scripts/check-v45-gate19-promotion-addendum.mjs index a0a459276..1f2ade25b 100644 --- a/scripts/check-v45-gate19-promotion-addendum.mjs +++ b/scripts/check-v45-gate19-promotion-addendum.mjs @@ -142,7 +142,7 @@ function main() { ['spec', spec, '`BITCODE_SPEC.txt` points to `V45`; V45 is the active promoted Bitcode canon.'], ['notes', notes, 'Canonical pointer: `BITCODE_SPEC.txt` -> `V45`'], ['roadmap', roadmap, 'Current active canonical pointer: `BITCODE_SPEC.txt` -> `V45`'], - ['roadmap', roadmap, 'Current draft target: V46 to be opened from active V45 canon.'], + ['roadmap', roadmap, 'Current draft target: `BITCODE_SPEC_V46.md`'], ['checker', checker, 'validatePromotedSpecFamilyHasNoStaleDraftPosture'], ['test', test, 'promoted spec-family validation rejects stale draft posture outside source-of-truth prose'], ['package.json', packageJson, '"check:v45-gate19"'], diff --git a/scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs b/scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs new file mode 100644 index 000000000..85e570a89 --- /dev/null +++ b/scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs @@ -0,0 +1,222 @@ +#!/usr/bin/env node + +import { execFileSync } from 'node:child_process'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const defaultRepoRoot = path.resolve(__dirname, '..'); + +function read(root, relativePath) { + return readFileSync(path.join(root, relativePath), 'utf8'); +} + +function exists(root, relativePath) { + return existsSync(path.join(root, relativePath)); +} + +function git(root, args) { + return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim(); +} + +function run(root, command, args) { + return execFileSync(command, args, { cwd: root, encoding: 'utf8', stdio: 'pipe' }).trim(); +} + +function assertCheck(failures, condition, message) { + if (!condition) failures.push(message); +} + +function parseArgs(argv) { + const args = { + repoRoot: defaultRepoRoot, + skipBranchCheck: false, + help: false, + }; + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === '--repo-root') args.repoRoot = path.resolve(argv[++index]); + else if (arg === '--skip-branch-check') args.skipBranchCheck = true; + else if (arg === '--help' || arg === '-h') args.help = true; + else throw new Error(`Unknown argument ${arg}`); + } + return args; +} + +function printHelp() { + process.stdout.write( + [ + 'Usage: node scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs [--skip-branch-check] [--repo-root ]', + '', + 'Checks the V46 Gate 1 draft-opening posture: active V45 pointer, draft V46 spec family, roadmap scope, package script, and CI workflow hooks.', + ].join('\n'), + ); + process.stdout.write('\n'); +} + +const STALE_PROMOTED_PHRASES = Object.freeze([ + 'canonical promotion complete', + 'Canonical proof-source commit', + 'Current canonical/latest target: `V46`', + 'Canonical pointer: `BITCODE_SPEC.txt` -> `V46`', + 'Active canonical anchor: `BITCODE_SPEC_V46.md`', + 'Active generated proof appendix: `BITCODE_SPEC_V46_PROVEN.md`', + 'V46 is active canon', + 'active V46 / draft V46', + 'promoted V46', + 'active `BITCODE_SPEC_V46_PROVEN.md`', + 'check:v46-gate18', +]); + +const GATE8_PROMOTION_READINESS_PHRASES = Object.freeze([ + 'v46-canon-promotion.yml', +]); + +function main() { + const args = parseArgs(process.argv.slice(2)); + if (args.help) { + printHelp(); + return; + } + + const root = args.repoRoot; + const failures = []; + const pointer = read(root, 'BITCODE_SPEC.txt').trim(); + + assertCheck(failures, pointer === 'V45', `BITCODE_SPEC.txt must remain V45 during V46 Gate 1. Observed ${pointer || 'empty'}.`); + + if (!args.skipBranchCheck) { + const branch = git(root, ['branch', '--show-current']); + assertCheck( + failures, + branch === 'version/v46' || /^v46\/gate-1-[a-z0-9][a-z0-9-]*$/u.test(branch), + `V46 Gate 1 work must occur on version/v46 or v46/gate-1-* branches. Observed ${branch || 'detached HEAD'}.`, + ); + } + + const requiredFiles = [ + 'BITCODE_SPEC.txt', + 'BITCODE_SPEC_V45.md', + 'BITCODE_SPEC_V45_PROVEN.md', + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + 'SPECIFICATIONS_ROADMAP.md', + 'package.json', + '.github/workflows/bitcode-gate-quality.yml', + '.github/workflows/bitcode-canon-quality.yml', + ]; + for (const relativePath of requiredFiles) { + assertCheck(failures, exists(root, relativePath), `Missing required V46 Gate 1 file: ${relativePath}`); + } + + const specFamilyFiles = [ + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + ]; + const gate8PromotionReadinessAccepted = + exists(root, 'scripts/check-v46-gate8-promotion-readiness.mjs') && + exists(root, '.bitcode/v46-promotion-readiness-report.json'); + const stalePromotedPhrases = gate8PromotionReadinessAccepted + ? STALE_PROMOTED_PHRASES + : [...STALE_PROMOTED_PHRASES, ...GATE8_PROMOTION_READINESS_PHRASES]; + + for (const relativePath of specFamilyFiles) { + const content = read(root, relativePath); + for (const phrase of stalePromotedPhrases) { + assertCheck(failures, !content.includes(phrase), `${relativePath} contains stale promoted V46 posture phrase "${phrase}".`); + } + for (const phrase of [ + 'Version: `V46`', + 'Current canonical/latest target: `V45`', + 'Prior canonical anchor: `BITCODE_SPEC_V45.md`', + 'Prior generated proof appendix: `BITCODE_SPEC_V45_PROVEN.md`', + 'Source parity state:', + 'Last fully realized canonical target preserved in source: `V45`', + ]) { + assertCheck(failures, content.includes(phrase), `${relativePath} must include "${phrase}".`); + } + } + + const spec = read(root, 'BITCODE_SPEC_V46.md'); + const delta = read(root, 'BITCODE_SPEC_V46_DELTA.md'); + const notes = read(root, 'BITCODE_SPEC_V46_NOTES.md'); + const parity = read(root, 'BITCODE_SPEC_V46_PARITY_MATRIX.md'); + const roadmap = read(root, 'SPECIFICATIONS_ROADMAP.md'); + const packageJson = read(root, 'package.json'); + const gateWorkflow = read(root, '.github/workflows/bitcode-gate-quality.yml'); + const canonWorkflow = read(root, '.github/workflows/bitcode-canon-quality.yml'); + + for (const [label, content, phrase] of [ + ['spec', spec, '`BITCODE_SPEC.txt` points to `V45`; V45 is the active promoted Bitcode canon.'], + ['spec', spec, 'V46 does not replace V45 as active canon until promotion workflow validation.'], + ['delta', delta, 'Gate 1: V46 Commercial Protocol Comprehension Roadmap Opening'], + ['notes', notes, 'Gate 1: V46 Commercial Protocol Comprehension Roadmap Opening'], + ['parity', parity, 'V46 Gate 1 is complete when the V46 draft spec family'], + ['roadmap', roadmap, 'Current draft target: `BITCODE_SPEC_V46.md`'], + ['roadmap', roadmap, 'V46 Gate 1 closure anchor'], + ['roadmap', roadmap, '| V46 | `BITCODE_SPEC_V46.md` | active draft target |'], + ['package.json', packageJson, '"check:v46-gate1"'], + ['gate workflow', gateWorkflow, 'check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs'], + ['canon workflow', canonWorkflow, 'check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs'], + ]) { + assertCheck(failures, content.includes(phrase), `${label} must include "${phrase}".`); + } + + for (const phrase of [ + 'commercial protocol comprehension', + 'source-safe public/operator explanation', + '/packs', + '/read', + '/deposit', + 'API/MCP', + 'ChatGPT App', + 'Bitcode Chat', + 'proof-readable', + 'value-bearing mainnet', + ]) { + assertCheck( + failures, + spec.includes(phrase) || delta.includes(phrase) || notes.includes(phrase) || parity.includes(phrase) || roadmap.includes(phrase), + `V46 Gate 1 opening must name ${phrase}.`, + ); + } + + const commandChecks = [ + ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V45', '--mode', 'promoted', '--current-target', 'V45']], + ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V46', '--mode', 'draft', '--current-target', 'V45']], + ['node', ['scripts/check-bitcode-canonical-inputs.mjs', '--current-target', 'V45']], + ['node', ['scripts/check-bitcode-canon-posture-drift.mjs', '--active-canon', 'V45', '--draft-target', 'V46']], + ]; + + for (const [command, commandArgs] of commandChecks) { + try { + run(root, command, commandArgs); + } catch (error) { + failures.push(`Command failed: ${command} ${commandArgs.join(' ')}`); + if (error && typeof error === 'object' && 'stdout' in error) { + const stdout = String(error.stdout || '').trim(); + if (stdout) failures.push(stdout); + } + if (error && typeof error === 'object' && 'stderr' in error) { + const stderr = String(error.stderr || '').trim(); + if (stderr) failures.push(stderr); + } + } + } + + if (failures.length > 0) { + process.stderr.write(['V46 Gate 1 roadmap opening check failed:', ...failures.map((failure) => `- ${failure}`)].join('\n')); + process.stderr.write('\n'); + process.exit(1); + } + + process.stdout.write('V46 Gate 1 roadmap opening check passed.\n'); +} + +main(); diff --git a/scripts/check-v46-gate2-protocol-comprehension-object-model.mjs b/scripts/check-v46-gate2-protocol-comprehension-object-model.mjs new file mode 100644 index 000000000..3572658f1 --- /dev/null +++ b/scripts/check-v46-gate2-protocol-comprehension-object-model.mjs @@ -0,0 +1,182 @@ +#!/usr/bin/env node + +import { execFileSync } from 'node:child_process'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH, + buildV46ProtocolComprehensionObjectModel, +} from '../packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const defaultRepoRoot = path.resolve(__dirname, '..'); + +function read(root, relativePath) { + return readFileSync(path.join(root, relativePath), 'utf8'); +} + +function exists(root, relativePath) { + return existsSync(path.join(root, relativePath)); +} + +function git(root, args) { + return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim(); +} + +function run(root, command, args) { + execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' }); +} + +function assertCheck(failures, condition, message) { + if (!condition) failures.push(message); +} + +function parseArgs(argv) { + const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipPackageTests: false }; + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === '--repo-root') args.repoRoot = path.resolve(argv[++index]); + else if (arg === '--skip-branch-check') args.skipBranchCheck = true; + else if (arg === '--skip-package-tests') args.skipPackageTests = true; + else if (arg === '--help' || arg === '-h') args.help = true; + else throw new Error(`Unknown argument ${arg}`); + } + return args; +} + +function printHelp() { + process.stdout.write( + [ + 'Usage: node scripts/check-v46-gate2-protocol-comprehension-object-model.mjs [--skip-branch-check] [--skip-package-tests] [--repo-root ]', + '', + 'V46 Gate 2 check: validates the source-safe protocol comprehension object model, claim taxonomy, generated artifact freshness, package exports, documentation, workflow wiring, and focused protocol tests.', + ].join('\n'), + ); + process.stdout.write('\n'); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + if (args.help) { + printHelp(); + return; + } + + const root = args.repoRoot; + const failures = []; + const pointer = read(root, 'BITCODE_SPEC.txt').trim(); + + assertCheck(failures, pointer === 'V45', `BITCODE_SPEC.txt must remain V45 during V46 gate work. Observed ${pointer || 'empty'}.`); + + if (!args.skipBranchCheck) { + const branch = git(root, ['branch', '--show-current']); + assertCheck( + failures, + branch === 'version/v46' || /^v46\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch), + `V46 work must occur on version/v46 or v46/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`, + ); + } + + for (const relativePath of [ + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH, + 'packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js', + 'packages/protocol/test/v46-protocol-comprehension-object-model.test.js', + 'scripts/generate-v46-protocol-comprehension-object-model.mjs', + 'scripts/check-v46-gate2-protocol-comprehension-object-model.mjs', + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + 'SPECIFICATIONS_ROADMAP.md', + 'README.md', + 'packages/protocol/README.md', + '.github/workflows/bitcode-gate-quality.yml', + '.github/workflows/bitcode-canon-quality.yml', + 'package.json', + ]) { + assertCheck(failures, exists(root, relativePath), `Missing required V46 Gate 2 file: ${relativePath}`); + } + + const artifact = buildV46ProtocolComprehensionObjectModel({ repoRoot: root }); + assertCheck(failures, artifact.passed, `V46 protocol comprehension predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`); + assertCheck(failures, artifact.coverage.assetPackCommodityCovered === true, 'AssetPack commodity object must be covered.'); + assertCheck(failures, artifact.coverage.btdScalarVolumeCovered === true, 'BTD scalar-volume object must be covered.'); + assertCheck(failures, artifact.coverage.btcQuoteSettlementCovered === true, 'BTC quote and settlement objects must be covered.'); + assertCheck(failures, artifact.coverage.sourceUnlockDeliveryCovered === true, 'Source unlock delivery object must be covered.'); + assertCheck(failures, artifact.coverage.contributorCompensationCovered === true, 'Contributor compensation objects must be covered.'); + assertCheck(failures, artifact.coverage.interfaceClaimsCovered === true, 'Interface claim object must be covered.'); + assertCheck(failures, artifact.coverage.protocolLawClaimCovered === true, 'Protocol law claim taxonomy must be covered.'); + assertCheck(failures, artifact.coverage.productGuidanceClaimCovered === true, 'Product guidance claim taxonomy must be covered.'); + assertCheck(failures, artifact.coverage.operatorEvidenceClaimCovered === true, 'Operator evidence claim taxonomy must be covered.'); + assertCheck(failures, artifact.coverage.investorFramingClaimCovered === true, 'Investor framing claim taxonomy must be covered.'); + assertCheck(failures, artifact.coverage.telemetryObservabilityClaimCovered === true, 'Telemetry observability claim taxonomy must be covered.'); + assertCheck(failures, artifact.coverage.previewQuoteSettlementRightsDeliveryCovered === true, 'Preview, quote, settlement, rights, and delivery claims must be covered.'); + assertCheck(failures, artifact.coverage.compensationRepairClaimsCovered === true, 'Compensation and repair claims must be covered.'); + assertCheck(failures, artifact.coverage.noForbiddenClaimCollapsed === true, 'Forbidden claim collapses must be modeled.'); + assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Artifact must be source-safe metadata only.'); + assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Artifact must not expose protected source.'); + assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Artifact must not expose unpaid AssetPack source.'); + assertCheck(failures, artifact.coverage.rawPromptVisible === false, 'Artifact must not expose raw prompts.'); + assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Artifact must not expose raw provider responses.'); + assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Artifact must not serialize credentials.'); + assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Artifact must not expose wallet private material.'); + assertCheck(failures, artifact.coverage.valueBearingMainnetAdmitted === false, 'Gate 2 must not admit value-bearing mainnet operation.'); + + const serialized = `${JSON.stringify(artifact, null, 2)}\n`; + assertCheck( + failures, + exists(root, V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH) && + read(root, V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH) === serialized, + `${V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH} must be generated and current.`, + ); + + const packageJson = read(root, 'package.json'); + const gateWorkflow = read(root, '.github/workflows/bitcode-gate-quality.yml'); + const canonWorkflow = read(root, '.github/workflows/bitcode-canon-quality.yml'); + assertCheck(failures, packageJson.includes('"generate:v46-protocol-comprehension-object-model"'), 'package.json must expose generate:v46-protocol-comprehension-object-model.'); + assertCheck(failures, packageJson.includes('"check:v46-protocol-comprehension-object-model"'), 'package.json must expose check:v46-protocol-comprehension-object-model.'); + assertCheck(failures, packageJson.includes('"check:v46-gate2"'), 'package.json must expose check:v46-gate2.'); + assertCheck(failures, gateWorkflow.includes('check-v46-gate2-protocol-comprehension-object-model.mjs'), 'Gate workflow must run V46 Gate 2 checker.'); + assertCheck(failures, canonWorkflow.includes('check-v46-gate2-protocol-comprehension-object-model.mjs'), 'Canon workflow must run V46 Gate 2 checker.'); + + try { + run(root, 'node', ['scripts/generate-v46-protocol-comprehension-object-model.mjs', '--check']); + } catch { + failures.push('V46 protocol comprehension object model artifact must be fresh.'); + } + + if (!args.skipPackageTests) { + try { + run(root, 'pnpm', [ + '--dir', + 'packages/protocol', + 'exec', + 'node', + '--test', + '--test-force-exit', + 'test/v46-protocol-comprehension-object-model.test.js', + ]); + } catch { + failures.push('packages/protocol/test/v46-protocol-comprehension-object-model.test.js must pass.'); + } + } + + if (failures.length > 0) { + process.stderr.write('V46 Gate 2 protocol comprehension object model check failed:\n'); + for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`); + process.exitCode = 1; + return; + } + + process.stdout.write('V46 Gate 2 protocol comprehension object model check passed.\n'); +} + +try { + main(); +} catch (error) { + const detail = error instanceof Error ? error.message : String(error); + process.stderr.write(`${detail}\n`); + process.exitCode = 1; +} diff --git a/scripts/check-v46-gate3-public-operator-claim-boundaries.mjs b/scripts/check-v46-gate3-public-operator-claim-boundaries.mjs new file mode 100644 index 000000000..1d6c35013 --- /dev/null +++ b/scripts/check-v46-gate3-public-operator-claim-boundaries.mjs @@ -0,0 +1,187 @@ +#!/usr/bin/env node + +import { execFileSync } from 'node:child_process'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH, + buildV46PublicOperatorClaimBoundaries, +} from '../packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const defaultRepoRoot = path.resolve(__dirname, '..'); + +function read(root, relativePath) { + return readFileSync(path.join(root, relativePath), 'utf8'); +} + +function exists(root, relativePath) { + return existsSync(path.join(root, relativePath)); +} + +function git(root, args) { + return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim(); +} + +function run(root, command, args) { + execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' }); +} + +function assertCheck(failures, condition, message) { + if (!condition) failures.push(message); +} + +function parseArgs(argv) { + const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipPackageTests: false }; + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === '--repo-root') args.repoRoot = path.resolve(argv[++index]); + else if (arg === '--skip-branch-check') args.skipBranchCheck = true; + else if (arg === '--skip-package-tests') args.skipPackageTests = true; + else if (arg === '--help' || arg === '-h') args.help = true; + else throw new Error(`Unknown argument ${arg}`); + } + return args; +} + +function printHelp() { + process.stdout.write( + [ + 'Usage: node scripts/check-v46-gate3-public-operator-claim-boundaries.mjs [--skip-branch-check] [--skip-package-tests] [--repo-root ]', + '', + 'V46 Gate 3 check: validates source-safe public docs, landing, operator docs, README anchors, workflow wiring, generated artifact freshness, and focused protocol tests.', + ].join('\n'), + ); + process.stdout.write('\n'); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + if (args.help) { + printHelp(); + return; + } + + const root = args.repoRoot; + const failures = []; + const pointer = read(root, 'BITCODE_SPEC.txt').trim(); + + assertCheck(failures, pointer === 'V45', `BITCODE_SPEC.txt must remain V45 during V46 gate work. Observed ${pointer || 'empty'}.`); + + if (!args.skipBranchCheck) { + const branch = git(root, ['branch', '--show-current']); + assertCheck( + failures, + branch === 'version/v46' || /^v46\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch), + `V46 work must occur on version/v46 or v46/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`, + ); + } + + for (const relativePath of [ + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH, + 'packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js', + 'packages/protocol/test/v46-public-operator-claim-boundaries.test.js', + 'scripts/generate-v46-public-operator-claim-boundaries.mjs', + 'scripts/check-v46-gate3-public-operator-claim-boundaries.mjs', + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + 'SPECIFICATIONS_ROADMAP.md', + 'README.md', + 'packages/protocol/README.md', + 'uapi/app/docs/bitcode-docs-content.ts', + 'uapi/app/docs/[slug]/page.tsx', + 'uapi/app/(root)/components/PublicDocsPageContent.tsx', + 'uapi/app/(root)/components/landing/MarketingLandingTerminalPreview.tsx', + 'uapi/app/(root)/components/landing/marketing-landing-shared.tsx', + 'internal-docs/README.md', + '.github/workflows/bitcode-gate-quality.yml', + '.github/workflows/bitcode-canon-quality.yml', + 'package.json', + ]) { + assertCheck(failures, exists(root, relativePath), `Missing required V46 Gate 3 file: ${relativePath}`); + } + + const artifact = buildV46PublicOperatorClaimBoundaries({ repoRoot: root }); + assertCheck(failures, artifact.passed, `V46 public/operator claim-boundary predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`); + assertCheck(failures, artifact.coverage.landingCovered === true, 'Landing surfaces must be covered.'); + assertCheck(failures, artifact.coverage.publicDocsCovered === true, 'Public docs surfaces must be covered.'); + assertCheck(failures, artifact.coverage.operatorDocsCovered === true, 'Operator docs surfaces must be covered.'); + assertCheck(failures, artifact.coverage.readmesCovered === true, 'Root and package READMEs must be covered.'); + assertCheck(failures, artifact.coverage.specFamilyCovered === true, 'V46 spec family must be covered.'); + assertCheck(failures, artifact.coverage.requiredClaimCategoriesCovered === true, 'Required claim categories must be covered.'); + assertCheck(failures, artifact.coverage.requiredClaimAuthoritiesCovered === true, 'Required claim authorities must be covered.'); + assertCheck(failures, artifact.coverage.allClaimIdsKnown === true, 'All referenced claim ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allCategoryIdsKnown === true, 'All referenced claim category ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allAuthorityIdsKnown === true, 'All referenced claim authority ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Artifact must be source-safe metadata only.'); + assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Artifact must not expose protected source.'); + assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Artifact must not expose unpaid AssetPack source.'); + assertCheck(failures, artifact.coverage.rawPromptVisible === false, 'Artifact must not expose raw prompts.'); + assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Artifact must not expose raw provider responses.'); + assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Artifact must not serialize credentials.'); + assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Artifact must not expose wallet private material.'); + assertCheck(failures, artifact.coverage.valueBearingMainnetAdmitted === false, 'Gate 3 must not admit value-bearing mainnet operation.'); + assertCheck(failures, artifact.coverage.forbiddenPhraseHits.length === 0, `Forbidden public/operator phrases found: ${artifact.coverage.forbiddenPhraseHits.join(', ')}`); + assertCheck(failures, artifact.coverage.secretMarkerHits.length === 0, `Secret markers found in public/operator sources: ${artifact.coverage.secretMarkerHits.join(', ')}`); + assertCheck(failures, artifact.coverage.rowsMissingRequiredCopy.length === 0, `Missing required copy tokens for rows: ${artifact.coverage.rowsMissingRequiredCopy.join(', ')}`); + + const serialized = `${JSON.stringify(artifact, null, 2)}\n`; + assertCheck( + failures, + exists(root, V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH) && + read(root, V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH) === serialized, + `${V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH} must be generated and current.`, + ); + + const packageJson = read(root, 'package.json'); + const gateWorkflow = read(root, '.github/workflows/bitcode-gate-quality.yml'); + const canonWorkflow = read(root, '.github/workflows/bitcode-canon-quality.yml'); + assertCheck(failures, packageJson.includes('"generate:v46-public-operator-claim-boundaries"'), 'package.json must expose generate:v46-public-operator-claim-boundaries.'); + assertCheck(failures, packageJson.includes('"check:v46-public-operator-claim-boundaries"'), 'package.json must expose check:v46-public-operator-claim-boundaries.'); + assertCheck(failures, packageJson.includes('"check:v46-gate3"'), 'package.json must expose check:v46-gate3.'); + assertCheck(failures, gateWorkflow.includes('check-v46-gate3-public-operator-claim-boundaries.mjs'), 'Gate workflow must run V46 Gate 3 checker.'); + assertCheck(failures, canonWorkflow.includes('check-v46-gate3-public-operator-claim-boundaries.mjs'), 'Canon workflow must run V46 Gate 3 checker.'); + + try { + run(root, 'node', ['scripts/generate-v46-public-operator-claim-boundaries.mjs', '--check']); + } catch { + failures.push('V46 public/operator claim-boundary artifact must be fresh.'); + } + + if (!args.skipPackageTests) { + try { + run(root, 'pnpm', [ + '--dir', + 'packages/protocol', + 'exec', + 'node', + '--test', + '--test-force-exit', + 'test/v46-public-operator-claim-boundaries.test.js', + ]); + } catch { + failures.push('packages/protocol/test/v46-public-operator-claim-boundaries.test.js must pass.'); + } + } + + if (failures.length > 0) { + process.stderr.write('V46 Gate 3 public/operator claim-boundary check failed:\n'); + for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`); + process.exitCode = 1; + return; + } + + process.stdout.write('V46 Gate 3 public/operator claim-boundary check passed.\n'); +} + +try { + main(); +} catch (error) { + const detail = error instanceof Error ? error.message : String(error); + process.stderr.write(`${detail}\n`); + process.exitCode = 1; +} diff --git a/scripts/check-v46-gate4-product-route-comprehension-readback.mjs b/scripts/check-v46-gate4-product-route-comprehension-readback.mjs new file mode 100644 index 000000000..d59735b8f --- /dev/null +++ b/scripts/check-v46-gate4-product-route-comprehension-readback.mjs @@ -0,0 +1,188 @@ +#!/usr/bin/env node + +import { execFileSync } from 'node:child_process'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH, + buildV46ProductRouteComprehensionReadback, +} from '../packages/protocol/src/canonical/v46-product-route-comprehension-readback.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const defaultRepoRoot = path.resolve(__dirname, '..'); + +function read(root, relativePath) { + return readFileSync(path.join(root, relativePath), 'utf8'); +} + +function exists(root, relativePath) { + return existsSync(path.join(root, relativePath)); +} + +function git(root, args) { + return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim(); +} + +function run(root, command, args) { + execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' }); +} + +function assertCheck(failures, condition, message) { + if (!condition) failures.push(message); +} + +function parseArgs(argv) { + const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipPackageTests: false }; + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === '--repo-root') args.repoRoot = path.resolve(argv[++index]); + else if (arg === '--skip-branch-check') args.skipBranchCheck = true; + else if (arg === '--skip-package-tests') args.skipPackageTests = true; + else if (arg === '--help' || arg === '-h') args.help = true; + else throw new Error(`Unknown argument ${arg}`); + } + return args; +} + +function printHelp() { + process.stdout.write( + [ + 'Usage: node scripts/check-v46-gate4-product-route-comprehension-readback.mjs [--skip-branch-check] [--skip-package-tests] [--repo-root ]', + '', + 'V46 Gate 4 check: validates source-safe /packs, /read, and /deposit route comprehension readback, generated artifact freshness, package exports, docs, workflow wiring, and focused protocol tests.', + ].join('\n'), + ); + process.stdout.write('\n'); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + if (args.help) { + printHelp(); + return; + } + + const root = args.repoRoot; + const failures = []; + const pointer = read(root, 'BITCODE_SPEC.txt').trim(); + + assertCheck(failures, pointer === 'V45', `BITCODE_SPEC.txt must remain V45 during V46 gate work. Observed ${pointer || 'empty'}.`); + + if (!args.skipBranchCheck) { + const branch = git(root, ['branch', '--show-current']); + assertCheck( + failures, + branch === 'version/v46' || /^v46\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch), + `V46 work must occur on version/v46 or v46/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`, + ); + } + + for (const relativePath of [ + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH, + 'packages/protocol/src/canonical/v46-product-route-comprehension-readback.js', + 'packages/protocol/test/v46-product-route-comprehension-readback.test.js', + 'scripts/generate-v46-product-route-comprehension-readback.mjs', + 'scripts/check-v46-gate4-product-route-comprehension-readback.mjs', + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + 'SPECIFICATIONS_ROADMAP.md', + 'uapi/app/packs/PacksPageClient.tsx', + 'uapi/app/read/ReadPageClient.tsx', + 'uapi/app/deposit/DepositPageClient.tsx', + 'uapi/components/base/bitcode/routes/product-route-shell.tsx', + 'uapi/tests/packsPageClient.test.tsx', + 'uapi/tests/readPageClient.test.tsx', + 'uapi/tests/depositPageClient.test.tsx', + '.github/workflows/bitcode-gate-quality.yml', + '.github/workflows/bitcode-canon-quality.yml', + 'package.json', + ]) { + assertCheck(failures, exists(root, relativePath), `Missing required V46 Gate 4 file: ${relativePath}`); + } + + const artifact = buildV46ProductRouteComprehensionReadback({ repoRoot: root }); + assertCheck(failures, artifact.passed, `V46 product route comprehension predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`); + assertCheck(failures, artifact.coverage.allRoutesCovered === true, 'All product route ids must be covered.'); + assertCheck(failures, artifact.coverage.allRoutePathsCovered === true, 'All product route paths must be covered.'); + assertCheck(failures, artifact.coverage.lowDetailDefaultsCovered === true, 'Routes must default to low-detail guided readback.'); + assertCheck(failures, artifact.coverage.expandableProofReadbackCovered === true, 'Routes must expose expandable source-safe proof readback.'); + assertCheck(failures, artifact.coverage.routeOwnedStateCovered === true, 'Routes must own their source-safe route state.'); + assertCheck(failures, artifact.coverage.requiredCapabilitiesCovered === true, 'Required shared capabilities must be covered.'); + assertCheck(failures, artifact.coverage.routeSpecificCapabilitiesCovered === true, 'Packs search, Reading five-step, and Depositing five-step capabilities must be covered.'); + assertCheck(failures, artifact.coverage.allClaimIdsKnown === true, 'All referenced claim ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allCategoryIdsKnown === true, 'All referenced claim category ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allAuthorityIdsKnown === true, 'All referenced claim authority ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Artifact must be source-safe metadata only.'); + assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Artifact must not expose protected source.'); + assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Artifact must not expose unpaid AssetPack source.'); + assertCheck(failures, artifact.coverage.rawPromptVisible === false, 'Artifact must not expose raw prompts.'); + assertCheck(failures, artifact.coverage.interpolatedPromptVisible === false, 'Artifact must not expose interpolated prompts.'); + assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Artifact must not expose raw provider responses.'); + assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Artifact must not serialize credentials.'); + assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Artifact must not expose wallet private material.'); + assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Artifact must not expose private settlement payloads.'); + assertCheck(failures, artifact.coverage.valueBearingMainnetAdmitted === false, 'Gate 4 must not admit value-bearing mainnet operation.'); + assertCheck(failures, artifact.coverage.forbiddenPhraseHits.length === 0, `Forbidden product route phrases found: ${artifact.coverage.forbiddenPhraseHits.join(', ')}`); + assertCheck(failures, artifact.coverage.secretMarkerHits.length === 0, `Secret markers found in product route sources: ${artifact.coverage.secretMarkerHits.join(', ')}`); + assertCheck(failures, artifact.coverage.rowsMissingRequiredCopy.length === 0, `Missing required route copy tokens for rows: ${artifact.coverage.rowsMissingRequiredCopy.join(', ')}`); + + const serialized = `${JSON.stringify(artifact, null, 2)}\n`; + assertCheck( + failures, + exists(root, V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH) && + read(root, V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH) === serialized, + `${V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH} must be generated and current.`, + ); + + const packageJson = read(root, 'package.json'); + const gateWorkflow = read(root, '.github/workflows/bitcode-gate-quality.yml'); + const canonWorkflow = read(root, '.github/workflows/bitcode-canon-quality.yml'); + assertCheck(failures, packageJson.includes('"generate:v46-product-route-comprehension-readback"'), 'package.json must expose generate:v46-product-route-comprehension-readback.'); + assertCheck(failures, packageJson.includes('"check:v46-product-route-comprehension-readback"'), 'package.json must expose check:v46-product-route-comprehension-readback.'); + assertCheck(failures, packageJson.includes('"check:v46-gate4"'), 'package.json must expose check:v46-gate4.'); + assertCheck(failures, gateWorkflow.includes('check-v46-gate4-product-route-comprehension-readback.mjs'), 'Gate workflow must run V46 Gate 4 checker.'); + assertCheck(failures, canonWorkflow.includes('check-v46-gate4-product-route-comprehension-readback.mjs'), 'Canon workflow must run V46 Gate 4 checker.'); + + try { + run(root, 'node', ['scripts/generate-v46-product-route-comprehension-readback.mjs', '--check']); + } catch { + failures.push('V46 product route comprehension readback artifact must be fresh.'); + } + + if (!args.skipPackageTests) { + try { + run(root, 'pnpm', [ + '--dir', + 'packages/protocol', + 'exec', + 'node', + '--test', + '--test-force-exit', + 'test/v46-product-route-comprehension-readback.test.js', + ]); + } catch { + failures.push('packages/protocol/test/v46-product-route-comprehension-readback.test.js must pass.'); + } + } + + if (failures.length > 0) { + process.stderr.write('V46 Gate 4 product route comprehension readback check failed:\n'); + for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`); + process.exitCode = 1; + return; + } + + process.stdout.write('V46 Gate 4 product route comprehension readback check passed.\n'); +} + +try { + main(); +} catch (error) { + const detail = error instanceof Error ? error.message : String(error); + process.stderr.write(`${detail}\n`); + process.exitCode = 1; +} diff --git a/scripts/check-v46-gate5-interface-claim-contracts.mjs b/scripts/check-v46-gate5-interface-claim-contracts.mjs new file mode 100644 index 000000000..e8cc37361 --- /dev/null +++ b/scripts/check-v46-gate5-interface-claim-contracts.mjs @@ -0,0 +1,187 @@ +#!/usr/bin/env node + +import { execFileSync } from 'node:child_process'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH, + buildV46InterfaceClaimContracts, +} from '../packages/protocol/src/canonical/v46-interface-claim-contracts.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const defaultRepoRoot = path.resolve(__dirname, '..'); + +function read(root, relativePath) { + return readFileSync(path.join(root, relativePath), 'utf8'); +} + +function exists(root, relativePath) { + return existsSync(path.join(root, relativePath)); +} + +function git(root, args) { + return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim(); +} + +function run(root, command, args) { + execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' }); +} + +function assertCheck(failures, condition, message) { + if (!condition) failures.push(message); +} + +function parseArgs(argv) { + const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipPackageTests: false }; + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === '--repo-root') args.repoRoot = path.resolve(argv[++index]); + else if (arg === '--skip-branch-check') args.skipBranchCheck = true; + else if (arg === '--skip-package-tests') args.skipPackageTests = true; + else if (arg === '--help' || arg === '-h') args.help = true; + else throw new Error(`Unknown argument ${arg}`); + } + return args; +} + +function printHelp() { + process.stdout.write( + [ + 'Usage: node scripts/check-v46-gate5-interface-claim-contracts.mjs [--skip-branch-check] [--skip-package-tests] [--repo-root ]', + '', + 'V46 Gate 5 interface claim contracts check: validates source-safe API/MCP, ChatGPT App, Bitcode Chat, and package-consumer InterfaceClaim contracts, generated artifact freshness, package exports, docs, workflow wiring, and focused protocol tests.', + ].join('\n'), + ); + process.stdout.write('\n'); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + if (args.help) { + printHelp(); + return; + } + + const root = args.repoRoot; + const failures = []; + const pointer = read(root, 'BITCODE_SPEC.txt').trim(); + + assertCheck(failures, pointer === 'V45', `BITCODE_SPEC.txt must remain V45 during V46 gate work. Observed ${pointer || 'empty'}.`); + + if (!args.skipBranchCheck) { + const branch = git(root, ['branch', '--show-current']); + assertCheck( + failures, + branch === 'version/v46' || /^v46\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch), + `V46 work must occur on version/v46 or v46/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`, + ); + } + + for (const relativePath of [ + V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH, + 'packages/protocol/src/canonical/v46-interface-claim-contracts.js', + 'packages/protocol/test/v46-interface-claim-contracts.test.js', + 'scripts/generate-v46-interface-claim-contracts.mjs', + 'scripts/check-v46-gate5-interface-claim-contracts.mjs', + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + 'SPECIFICATIONS_ROADMAP.md', + 'packages/btd/src/api-schema-compatibility-matrix.ts', + 'packages/btd/src/mcp-tool-contract.ts', + 'packages/btd/src/chatgpt-app-action-contract.ts', + 'packages/chatgptapp/src/tools.ts', + 'packages/api/src/routes/conversations.ts', + 'uapi/tests/api/conversationReadingInterfaceParity.test.ts', + '.github/workflows/bitcode-gate-quality.yml', + '.github/workflows/bitcode-canon-quality.yml', + 'package.json', + ]) { + assertCheck(failures, exists(root, relativePath), `Missing required V46 Gate 5 file: ${relativePath}`); + } + + const artifact = buildV46InterfaceClaimContracts({ repoRoot: root }); + assertCheck(failures, artifact.passed, `V46 interface claim contract predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`); + assertCheck(failures, artifact.coverage.allSurfacesCovered === true, 'All interface claim surfaces must be covered.'); + assertCheck(failures, artifact.coverage.allClaimIdsKnown === true, 'All referenced claim ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allCategoryIdsKnown === true, 'All referenced claim category ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allAuthorityIdsKnown === true, 'All referenced claim authority ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.requiredCapabilitiesCovered === true, 'All required interface capabilities must be covered.'); + assertCheck(failures, artifact.coverage.sourceFilesPresent === true, `Missing source files for rows: ${artifact.coverage.rowsMissingSourceFiles.join(', ')}`); + assertCheck(failures, artifact.coverage.rowsMissingRequiredCopy.length === 0, `Missing required interface copy tokens for rows: ${artifact.coverage.rowsMissingRequiredCopy.join(', ')}`); + assertCheck(failures, artifact.coverage.allRowsRequireProofRootProjection === true, 'All interface rows must require proof-root projection.'); + assertCheck(failures, artifact.coverage.allRowsRequireDeniedStateRepair === true, 'All interface rows must require denied-state repair.'); + assertCheck(failures, artifact.coverage.noParallelStateAuthority === true, 'Interfaces must not create parallel state authority.'); + assertCheck(failures, artifact.coverage.stateAdvanceRequiresProof === true, 'Interfaces must require proof-backed state advancement.'); + assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Artifact must be source-safe metadata only.'); + assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Artifact must not expose protected source.'); + assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Artifact must not expose unpaid AssetPack source.'); + assertCheck(failures, artifact.coverage.rawPromptVisible === false, 'Artifact must not expose raw prompts.'); + assertCheck(failures, artifact.coverage.interpolatedPromptVisible === false, 'Artifact must not expose interpolated prompts.'); + assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Artifact must not expose raw provider responses.'); + assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Artifact must not serialize credentials.'); + assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Artifact must not expose wallet private material.'); + assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Artifact must not expose private settlement payloads.'); + assertCheck(failures, artifact.coverage.valueBearingMainnetAdmitted === false, 'Gate 5 must not admit value-bearing mainnet operation.'); + assertCheck(failures, artifact.coverage.forbiddenPhraseHits.length === 0, `Forbidden interface claim phrases found: ${artifact.coverage.forbiddenPhraseHits.join(', ')}`); + assertCheck(failures, artifact.coverage.secretMarkerHits.length === 0, `Secret markers found in interface claim sources: ${artifact.coverage.secretMarkerHits.join(', ')}`); + + const serialized = `${JSON.stringify(artifact, null, 2)}\n`; + assertCheck( + failures, + exists(root, V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH) && + read(root, V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH) === serialized, + `${V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH} must be generated and current.`, + ); + + const packageJson = read(root, 'package.json'); + const gateWorkflow = read(root, '.github/workflows/bitcode-gate-quality.yml'); + const canonWorkflow = read(root, '.github/workflows/bitcode-canon-quality.yml'); + assertCheck(failures, packageJson.includes('"generate:v46-interface-claim-contracts"'), 'package.json must expose generate:v46-interface-claim-contracts.'); + assertCheck(failures, packageJson.includes('"check:v46-interface-claim-contracts"'), 'package.json must expose check:v46-interface-claim-contracts.'); + assertCheck(failures, packageJson.includes('"check:v46-gate5"'), 'package.json must expose check:v46-gate5.'); + assertCheck(failures, gateWorkflow.includes('check-v46-gate5-interface-claim-contracts.mjs'), 'Gate workflow must run V46 Gate 5 checker.'); + assertCheck(failures, canonWorkflow.includes('check-v46-gate5-interface-claim-contracts.mjs'), 'Canon workflow must run V46 Gate 5 checker.'); + + try { + run(root, 'node', ['scripts/generate-v46-interface-claim-contracts.mjs', '--check']); + } catch { + failures.push('V46 interface claim contracts artifact must be fresh.'); + } + + if (!args.skipPackageTests) { + try { + run(root, 'pnpm', [ + '--dir', + 'packages/protocol', + 'exec', + 'node', + '--test', + '--test-force-exit', + 'test/v46-interface-claim-contracts.test.js', + ]); + } catch { + failures.push('packages/protocol/test/v46-interface-claim-contracts.test.js must pass.'); + } + } + + if (failures.length > 0) { + process.stderr.write('V46 Gate 5 interface claim contracts check failed:\n'); + for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`); + process.exitCode = 1; + return; + } + + process.stdout.write('V46 Gate 5 interface claim contracts check passed.\n'); +} + +try { + main(); +} catch (error) { + const detail = error instanceof Error ? error.message : String(error); + process.stderr.write(`${detail}\n`); + process.exitCode = 1; +} diff --git a/scripts/check-v46-gate6-proof-readback-operator-explanation.mjs b/scripts/check-v46-gate6-proof-readback-operator-explanation.mjs new file mode 100644 index 000000000..61d129afb --- /dev/null +++ b/scripts/check-v46-gate6-proof-readback-operator-explanation.mjs @@ -0,0 +1,192 @@ +#!/usr/bin/env node + +import { execFileSync } from 'node:child_process'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH, + buildV46ProofReadbackOperatorExplanation, +} from '../packages/protocol/src/canonical/v46-proof-readback-operator-explanation.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const defaultRepoRoot = path.resolve(__dirname, '..'); + +function read(root, relativePath) { + return readFileSync(path.join(root, relativePath), 'utf8'); +} + +function exists(root, relativePath) { + return existsSync(path.join(root, relativePath)); +} + +function git(root, args) { + return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim(); +} + +function run(root, command, args) { + execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' }); +} + +function assertCheck(failures, condition, message) { + if (!condition) failures.push(message); +} + +function parseArgs(argv) { + const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipPackageTests: false }; + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === '--repo-root') args.repoRoot = path.resolve(argv[++index]); + else if (arg === '--skip-branch-check') args.skipBranchCheck = true; + else if (arg === '--skip-package-tests') args.skipPackageTests = true; + else if (arg === '--help' || arg === '-h') args.help = true; + else throw new Error(`Unknown argument ${arg}`); + } + return args; +} + +function printHelp() { + process.stdout.write( + [ + 'Usage: node scripts/check-v46-gate6-proof-readback-operator-explanation.mjs [--skip-branch-check] [--skip-package-tests] [--repo-root ]', + '', + 'V46 Gate 6 proof readback operator explanation check: validates source-safe evidence class rows, authority distinctions, repair posture, generated artifact freshness, package exports, docs, workflow wiring, and focused protocol tests.', + ].join('\n'), + ); + process.stdout.write('\n'); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + if (args.help) { + printHelp(); + return; + } + + const root = args.repoRoot; + const failures = []; + const pointer = read(root, 'BITCODE_SPEC.txt').trim(); + + assertCheck(failures, pointer === 'V45', `BITCODE_SPEC.txt must remain V45 during V46 gate work. Observed ${pointer || 'empty'}.`); + + if (!args.skipBranchCheck) { + const branch = git(root, ['branch', '--show-current']); + assertCheck( + failures, + branch === 'version/v46' || /^v46\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch), + `V46 work must occur on version/v46 or v46/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`, + ); + } + + for (const relativePath of [ + V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH, + 'packages/protocol/src/canonical/v46-proof-readback-operator-explanation.js', + 'packages/protocol/test/v46-proof-readback-operator-explanation.test.js', + 'scripts/generate-v46-proof-readback-operator-explanation.mjs', + 'scripts/check-v46-gate6-proof-readback-operator-explanation.mjs', + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + 'SPECIFICATIONS_ROADMAP.md', + 'packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts', + 'packages/btd/src/reconciliation.ts', + 'packages/btd/src/wallet.ts', + 'packages/pipeline-hosts/src/distributed-execution-runtime-receipt.ts', + 'uapi/app/bitcode-ledger-storage-sync.ts', + '.github/workflows/bitcode-gate-quality.yml', + '.github/workflows/bitcode-canon-quality.yml', + 'package.json', + ]) { + assertCheck(failures, exists(root, relativePath), `Missing required V46 Gate 6 file: ${relativePath}`); + } + + const artifact = buildV46ProofReadbackOperatorExplanation({ repoRoot: root }); + assertCheck(failures, artifact.passed, `V46 proof readback predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`); + assertCheck(failures, artifact.coverage.allEvidenceClassesCovered === true, 'All proof readback evidence classes must be covered.'); + assertCheck(failures, artifact.coverage.allAuthorityIdsKnown === true, 'All proof readback authority ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allClaimIdsKnown === true, 'All proof readback claim ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allOperatorQuestionsCovered === true, 'All rows must answer the required operator questions.'); + assertCheck(failures, artifact.coverage.allRowsHaveConflictBehavior === true, 'All rows must define conflict behavior.'); + assertCheck(failures, artifact.coverage.allRowsHaveRepairStates === true, 'All rows must define repair states.'); + assertCheck(failures, artifact.coverage.allRowsNameStrongerEvidence === true, 'All rows must name stronger evidence required.'); + assertCheck(failures, artifact.coverage.sourceFilesPresent === true, `Missing source files for rows: ${artifact.coverage.rowsMissingSourceFiles.join(', ')}`); + assertCheck(failures, artifact.coverage.rowsMissingRequiredCopy.length === 0, `Missing required proof readback copy tokens for rows: ${artifact.coverage.rowsMissingRequiredCopy.join(', ')}`); + assertCheck(failures, artifact.coverage.noParallelStateAuthority === true, 'Proof readback explanation must not create parallel state authority.'); + assertCheck(failures, artifact.coverage.stateAdvanceRequiresProofRoot === true, 'State advancement must require proof roots.'); + assertCheck(failures, artifact.coverage.telemetryObservabilityOnly === true, 'Telemetry must be observability only.'); + assertCheck(failures, artifact.coverage.databaseProjectionNotLedgerTruth === true, 'Database projection must not be ledger truth.'); + assertCheck(failures, artifact.coverage.paymentObservationNotFinality === true, 'Payment observation must not be finality.'); + assertCheck(failures, artifact.coverage.repositoryDeliveryRequiresEntitlement === true, 'Repository delivery must require entitlement.'); + assertCheck(failures, artifact.coverage.repairFailsClosed === true, 'Repair must fail closed.'); + assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Artifact must be source-safe metadata only.'); + assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Artifact must not expose protected source.'); + assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Artifact must not expose unpaid AssetPack source.'); + assertCheck(failures, artifact.coverage.rawPromptVisible === false, 'Artifact must not expose raw prompts.'); + assertCheck(failures, artifact.coverage.interpolatedPromptVisible === false, 'Artifact must not expose interpolated prompts.'); + assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Artifact must not expose raw provider responses.'); + assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Artifact must not serialize credentials.'); + assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Artifact must not expose wallet private material.'); + assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Artifact must not expose private settlement payloads.'); + assertCheck(failures, artifact.coverage.valueBearingMainnetAdmitted === false, 'Gate 6 must not admit value-bearing mainnet operation.'); + assertCheck(failures, artifact.coverage.forbiddenPhraseHits.length === 0, `Forbidden proof readback phrases found: ${artifact.coverage.forbiddenPhraseHits.join(', ')}`); + assertCheck(failures, artifact.coverage.secretMarkerHits.length === 0, `Secret markers found in proof readback sources: ${artifact.coverage.secretMarkerHits.join(', ')}`); + + const serialized = `${JSON.stringify(artifact, null, 2)}\n`; + assertCheck( + failures, + exists(root, V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH) && + read(root, V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH) === serialized, + `${V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH} must be generated and current.`, + ); + + const packageJson = read(root, 'package.json'); + const gateWorkflow = read(root, '.github/workflows/bitcode-gate-quality.yml'); + const canonWorkflow = read(root, '.github/workflows/bitcode-canon-quality.yml'); + assertCheck(failures, packageJson.includes('"generate:v46-proof-readback-operator-explanation"'), 'package.json must expose generate:v46-proof-readback-operator-explanation.'); + assertCheck(failures, packageJson.includes('"check:v46-proof-readback-operator-explanation"'), 'package.json must expose check:v46-proof-readback-operator-explanation.'); + assertCheck(failures, packageJson.includes('"check:v46-gate6"'), 'package.json must expose check:v46-gate6.'); + assertCheck(failures, gateWorkflow.includes('check-v46-gate6-proof-readback-operator-explanation.mjs'), 'Gate workflow must run V46 Gate 6 checker.'); + assertCheck(failures, canonWorkflow.includes('check-v46-gate6-proof-readback-operator-explanation.mjs'), 'Canon workflow must run V46 Gate 6 checker.'); + + try { + run(root, 'node', ['scripts/generate-v46-proof-readback-operator-explanation.mjs', '--check']); + } catch { + failures.push('V46 proof readback operator explanation artifact must be fresh.'); + } + + if (!args.skipPackageTests) { + try { + run(root, 'pnpm', [ + '--dir', + 'packages/protocol', + 'exec', + 'node', + '--test', + '--test-force-exit', + 'test/v46-proof-readback-operator-explanation.test.js', + ]); + } catch { + failures.push('packages/protocol/test/v46-proof-readback-operator-explanation.test.js must pass.'); + } + } + + if (failures.length > 0) { + process.stderr.write('V46 Gate 6 proof readback operator explanation check failed:\n'); + for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`); + process.exitCode = 1; + return; + } + + process.stdout.write('V46 Gate 6 proof readback operator explanation check passed.\n'); +} + +try { + main(); +} catch (error) { + const detail = error instanceof Error ? error.message : String(error); + process.stderr.write(`${detail}\n`); + process.exitCode = 1; +} + diff --git a/scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs b/scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs new file mode 100644 index 000000000..4e58c3130 --- /dev/null +++ b/scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs @@ -0,0 +1,189 @@ +#!/usr/bin/env node + +import { execFileSync } from 'node:child_process'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH, + buildV46LocalInterfaceComprehensionRehearsal, +} from '../packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const defaultRepoRoot = path.resolve(__dirname, '..'); + +function read(root, relativePath) { + return readFileSync(path.join(root, relativePath), 'utf8'); +} + +function exists(root, relativePath) { + return existsSync(path.join(root, relativePath)); +} + +function git(root, args) { + return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim(); +} + +function run(root, command, args) { + execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' }); +} + +function assertCheck(failures, condition, message) { + if (!condition) failures.push(message); +} + +function parseArgs(argv) { + const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipPackageTests: false }; + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === '--repo-root') args.repoRoot = path.resolve(argv[++index]); + else if (arg === '--skip-branch-check') args.skipBranchCheck = true; + else if (arg === '--skip-package-tests') args.skipPackageTests = true; + else if (arg === '--help' || arg === '-h') args.help = true; + else throw new Error(`Unknown argument ${arg}`); + } + return args; +} + +function printHelp() { + process.stdout.write( + [ + 'Usage: node scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs [--skip-branch-check] [--skip-package-tests] [--repo-root ]', + '', + 'V46 Gate 7 local interface comprehension rehearsal check: validates source-safe local docs, routes, API/MCP, ChatGPT App, Bitcode Chat, proof telemetry, generated artifact freshness, package exports, docs, workflow wiring, and focused protocol tests.', + ].join('\n'), + ); + process.stdout.write('\n'); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + if (args.help) { + printHelp(); + return; + } + + const root = args.repoRoot; + const failures = []; + const pointer = read(root, 'BITCODE_SPEC.txt').trim(); + + assertCheck(failures, pointer === 'V45', `BITCODE_SPEC.txt must remain V45 during V46 gate work. Observed ${pointer || 'empty'}.`); + + if (!args.skipBranchCheck) { + const branch = git(root, ['branch', '--show-current']); + assertCheck( + failures, + branch === 'version/v46' || /^v46\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch), + `V46 work must occur on version/v46 or v46/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`, + ); + } + + for (const relativePath of [ + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH, + 'packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js', + 'packages/protocol/test/v46-local-interface-comprehension-rehearsal.test.js', + 'scripts/generate-v46-local-interface-comprehension-rehearsal.mjs', + 'scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs', + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + 'SPECIFICATIONS_ROADMAP.md', + 'uapi/app/packs/PacksPageClient.tsx', + 'uapi/app/read/ReadPageClient.tsx', + 'uapi/app/deposit/DepositPageClient.tsx', + 'packages/btd/src/api-schema-compatibility-matrix.ts', + 'packages/btd/src/mcp-tool-contract.ts', + 'packages/btd/src/chatgpt-app-action-contract.ts', + 'uapi/app/conversations/conversation-terminal-handoff.ts', + 'uapi/components/base/bitcode/execution/pipeline-execution-log.tsx', + '.github/workflows/bitcode-gate-quality.yml', + '.github/workflows/bitcode-canon-quality.yml', + 'package.json', + ]) { + assertCheck(failures, exists(root, relativePath), `Missing required V46 Gate 7 file: ${relativePath}`); + } + + const artifact = buildV46LocalInterfaceComprehensionRehearsal({ repoRoot: root }); + assertCheck(failures, artifact.passed, `V46 local interface rehearsal predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`); + assertCheck(failures, artifact.coverage.allSurfacesCovered === true, 'All local interface rehearsal surfaces must be covered.'); + assertCheck(failures, artifact.coverage.allStepsCovered === true, 'All rehearsal rows must cover the required local steps.'); + assertCheck(failures, artifact.coverage.allPriorArtifactsPassed === true, 'Gate 7 must rehearse passed V46 Gate 2 through Gate 6 artifacts.'); + assertCheck(failures, artifact.coverage.allClaimIdsKnown === true, 'All local rehearsal claim ids must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allCategoryIdsKnown === true, 'All local rehearsal claim categories must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.allAuthorityIdsKnown === true, 'All local rehearsal authorities must be known to Gate 2.'); + assertCheck(failures, artifact.coverage.sourceFilesPresent === true, `Missing local rehearsal source files for rows: ${artifact.coverage.rowsMissingSourceFiles.join(', ')}`); + assertCheck(failures, artifact.coverage.rowsMissingRequiredCopy.length === 0, `Missing required local rehearsal copy tokens for rows: ${artifact.coverage.rowsMissingRequiredCopy.join(', ')}`); + assertCheck(failures, artifact.coverage.localOnly === true, 'Gate 7 rehearsal must remain local-only.'); + assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Gate 7 artifact must be source-safe metadata only.'); + assertCheck(failures, artifact.coverage.noParallelStateAuthority === true, 'Gate 7 must not create parallel state authority.'); + assertCheck(failures, artifact.coverage.stateAdvanceRequiresProofRoot === true, 'State advancement must require proof roots.'); + assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Gate 7 must not expose protected source.'); + assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Gate 7 must not expose unpaid AssetPack source.'); + assertCheck(failures, artifact.coverage.rawPromptVisible === false, 'Gate 7 must not expose raw prompts.'); + assertCheck(failures, artifact.coverage.interpolatedPromptVisible === false, 'Gate 7 must not expose interpolated prompts.'); + assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Gate 7 must not expose raw provider responses.'); + assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Gate 7 must not serialize credentials.'); + assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Gate 7 must not expose wallet private material.'); + assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Gate 7 must not expose private settlement payloads.'); + assertCheck(failures, artifact.coverage.valueBearingMainnetAdmitted === false, 'Gate 7 must not admit value-bearing mainnet operation.'); + assertCheck(failures, artifact.coverage.forbiddenPhraseHits.length === 0, `Forbidden local rehearsal phrases found: ${artifact.coverage.forbiddenPhraseHits.join(', ')}`); + assertCheck(failures, artifact.coverage.secretMarkerHits.length === 0, `Secret markers found in local rehearsal sources: ${artifact.coverage.secretMarkerHits.join(', ')}`); + + const serialized = `${JSON.stringify(artifact, null, 2)}\n`; + assertCheck( + failures, + exists(root, V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH) && + read(root, V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH) === serialized, + `${V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH} must be generated and current.`, + ); + + const packageJson = read(root, 'package.json'); + const gateWorkflow = read(root, '.github/workflows/bitcode-gate-quality.yml'); + const canonWorkflow = read(root, '.github/workflows/bitcode-canon-quality.yml'); + assertCheck(failures, packageJson.includes('"generate:v46-local-interface-comprehension-rehearsal"'), 'package.json must expose generate:v46-local-interface-comprehension-rehearsal.'); + assertCheck(failures, packageJson.includes('"check:v46-local-interface-comprehension-rehearsal"'), 'package.json must expose check:v46-local-interface-comprehension-rehearsal.'); + assertCheck(failures, packageJson.includes('"check:v46-gate7"'), 'package.json must expose check:v46-gate7.'); + assertCheck(failures, gateWorkflow.includes('check-v46-gate7-local-interface-comprehension-rehearsal.mjs'), 'Gate workflow must run V46 Gate 7 checker.'); + assertCheck(failures, canonWorkflow.includes('check-v46-gate7-local-interface-comprehension-rehearsal.mjs'), 'Canon workflow must run V46 Gate 7 checker.'); + + try { + run(root, 'node', ['scripts/generate-v46-local-interface-comprehension-rehearsal.mjs', '--check']); + } catch { + failures.push('V46 local interface comprehension rehearsal artifact must be fresh.'); + } + + if (!args.skipPackageTests) { + try { + run(root, 'pnpm', [ + '--dir', + 'packages/protocol', + 'exec', + 'node', + '--test', + '--test-force-exit', + 'test/v46-local-interface-comprehension-rehearsal.test.js', + ]); + } catch { + failures.push('packages/protocol/test/v46-local-interface-comprehension-rehearsal.test.js must pass.'); + } + } + + if (failures.length > 0) { + process.stderr.write('V46 Gate 7 local interface comprehension rehearsal check failed:\n'); + for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`); + process.exitCode = 1; + return; + } + + process.stdout.write('V46 Gate 7 local interface comprehension rehearsal check passed.\n'); +} + +try { + main(); +} catch (error) { + const detail = error instanceof Error ? error.message : String(error); + process.stderr.write(`${detail}\n`); + process.exitCode = 1; +} diff --git a/scripts/check-v46-gate8-promotion-readiness.mjs b/scripts/check-v46-gate8-promotion-readiness.mjs new file mode 100644 index 000000000..7fdb2c955 --- /dev/null +++ b/scripts/check-v46-gate8-promotion-readiness.mjs @@ -0,0 +1,361 @@ +#!/usr/bin/env node + +import { execFileSync } from 'node:child_process'; +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const defaultRepoRoot = path.resolve(__dirname, '..'); +const ARTIFACT_PATH = '.bitcode/v46-promotion-readiness-report.json'; + +const V46_GATE_ARTIFACTS = [ + '.bitcode/v46-protocol-comprehension-object-model.json', + '.bitcode/v46-public-operator-claim-boundaries.json', + '.bitcode/v46-product-route-comprehension-readback.json', + '.bitcode/v46-interface-claim-contracts.json', + '.bitcode/v46-proof-readback-operator-explanation.json', + '.bitcode/v46-local-interface-comprehension-rehearsal.json', +]; + +const JWT_HEADER_PREFIX = String.fromCharCode( + 101, + 121, + 74, + 104, + 98, + 71, + 99, + 105, + 79, + 105, + 74, + 73, + 85, + 122, + 73, + 49, + 78, + 105, + 73, + 115, + 73, + 110, + 82, + 53, + 99, + 67, + 73, + 54, + 73, + 107, + 112, + 88, + 86, + 67, + 74, + 57, +); + +const SECRET_MARKERS = [ + `${['sk', 'proj'].join('-')}-`, + `${['sb', 'secret'].join('_')}__`, + ['service', 'role'].join('_'), + JWT_HEADER_PREFIX, + ['SUPABASE', 'SERVICE', 'ROLE'].join('_'), + ['OPENAI', 'API', 'KEY'].join('_'), + ['VERCEL', 'TOKEN'].join('_'), + ['VERCEL', 'OIDC', 'TOKEN'].join('_'), + ['PRIVATE', 'KEY'].join('_'), +]; + +function read(root, relativePath) { + return readFileSync(path.join(root, relativePath), 'utf8'); +} + +function fileExists(root, relativePath) { + return existsSync(path.join(root, relativePath)); +} + +function git(root, args) { + return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim(); +} + +function run(root, command, args) { + return execFileSync(command, args, { + cwd: root, + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'pipe'], + }).trim(); +} + +function assertCheck(failures, condition, message) { + if (!condition) failures.push(message); +} + +function parseArgs(argv) { + const args = { + promotionMode: false, + skipBranchCheck: false, + skipPackageTests: false, + repoRoot: defaultRepoRoot, + }; + + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === '--') continue; + else if (arg === '--promotion-mode') args.promotionMode = true; + else if (arg === '--skip-branch-check') args.skipBranchCheck = true; + else if (arg === '--skip-package-tests') args.skipPackageTests = true; + else if (arg === '--repo-root') args.repoRoot = path.resolve(argv[++index]); + else if (arg === '--help' || arg === '-h') args.help = true; + else throw new Error(`Unknown argument ${arg}`); + } + + return args; +} + +function printHelp() { + process.stdout.write( + [ + 'Usage: node scripts/check-v46-gate8-promotion-readiness.mjs [--promotion-mode] [--skip-branch-check] [--skip-package-tests] [--repo-root ]', + '', + 'Checks V46 Gate 8 promotion readiness, protocol comprehension artifacts, V46 promotion workflow support, source-safety, generated proof support, and V46 draft posture preparation.', + 'Use --skip-package-tests only in lightweight workflow posture jobs that do not need promotion dry-run coverage.', + ].join('\n'), + ); + process.stdout.write('\n'); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + if (args.help) { + printHelp(); + return; + } + + const root = args.repoRoot; + const failures = []; + const pointer = read(root, 'BITCODE_SPEC.txt').trim(); + const promotedPointer = args.promotionMode && pointer === 'V46'; + + assertCheck( + failures, + args.promotionMode ? ['V45', 'V46'].includes(pointer) : pointer === 'V45', + args.promotionMode + ? `BITCODE_SPEC.txt must be V45 before V46 promotion or V46 after promotion. Observed ${pointer || 'empty'}.` + : `BITCODE_SPEC.txt must remain V45 during V46 Gate 8 work. Observed ${pointer || 'empty'}.`, + ); + + if (!args.skipBranchCheck) { + const branch = git(root, ['branch', '--show-current']); + assertCheck( + failures, + branch === 'version/v46' || /^v46\/gate-8-[a-z0-9][a-z0-9-]*$/u.test(branch), + `V46 Gate 8 work must occur on version/v46 or v46/gate-8-* branches. Observed ${branch || 'detached HEAD'}.`, + ); + } + + const requiredFiles = [ + 'BITCODE_SPEC_V46.md', + 'BITCODE_SPEC_V46_DELTA.md', + 'BITCODE_SPEC_V46_NOTES.md', + 'BITCODE_SPEC_V46_PARITY_MATRIX.md', + 'BITCODE_SPEC_V46_PROVEN.md', + ARTIFACT_PATH, + 'scripts/generate-v46-promotion-readiness-report.mjs', + 'scripts/check-v46-gate8-promotion-readiness.mjs', + 'scripts/promote-bitcode-canon.mjs', + 'scripts/prepare-bitcode-spec-family-promotion.mjs', + 'scripts/prepare-bitcode-runtime-canon-promotion.mjs', + 'scripts/generate-bitcode-proven.mjs', + '.github/workflows/bitcode-gate-quality.yml', + '.github/workflows/bitcode-canon-quality.yml', + '.github/workflows/v46-canon-promotion.yml', + 'packages/protocol/src/canon-posture.js', + 'packages/protocol/data/state.json', + 'packages/protocol/README.md', + 'packages/protocol/src/canonical/proven-generator.js', + 'packages/protocol/src/canonical/v46-promotion-readiness-report.js', + 'packages/protocol/test/v46-promotion-readiness.test.js', + 'packages/protocol/src/canonical/v21-specifying.js', + 'package.json', + 'README.md', + 'SPECIFICATIONS_ROADMAP.md', + ...V46_GATE_ARTIFACTS, + ]; + + for (const relativePath of requiredFiles) { + assertCheck(failures, fileExists(root, relativePath), `Missing V46 Gate 8 file: ${relativePath}`); + } + + if (failures.length === 0 && !promotedPointer) { + try { + run(root, 'node', ['scripts/generate-v46-promotion-readiness-report.mjs', '--check']); + } catch (error) { + failures.push(`V46 Gate 8 artifact freshness check failed: ${error.stderr || error.message}`); + } + } + + const artifactText = fileExists(root, ARTIFACT_PATH) ? read(root, ARTIFACT_PATH) : ''; + for (const marker of SECRET_MARKERS) { + assertCheck(failures, !artifactText.includes(marker), `${ARTIFACT_PATH} must not contain secret-shaped value ${marker}.`); + } + assertCheck(failures, !artifactText.includes('protectedSourceBody'), `${ARTIFACT_PATH} must not serialize protected source bodies.`); + + const artifact = artifactText ? JSON.parse(artifactText) : null; + if (artifact) { + assertCheck(failures, artifact.artifactId === 'v46-promotion-readiness-report', 'Promotion readiness artifactId must match.'); + assertCheck(failures, artifact.schemaId === 'bitcode.v46.promotionReadinessReport.v1', 'Promotion readiness schemaId must match.'); + assertCheck(failures, artifact.version === 'V46' && artifact.currentTarget === 'V45', 'Promotion readiness must bind V46 over active V45.'); + assertCheck(failures, artifact.passed === true, 'Promotion readiness report must pass.'); + assertCheck( + failures, + artifact.sourceSafetyVerdict === 'source-safe-v46-protocol-comprehension-promotion-metadata', + 'Promotion readiness report must be source-safe protocol comprehension promotion metadata.', + ); + assertCheck(failures, artifact.prePromotionPosture === 'V45 active / V46 draft', 'Promotion readiness pre-promotion posture must match.'); + assertCheck(failures, artifact.postPromotionPosture === 'V46 active / V47 draft', 'Promotion readiness post-promotion posture must match.'); + assertCheck(failures, artifact.coverage.allGateArtifactsCovered === true, 'Promotion readiness must cover all gate artifacts.'); + assertCheck(failures, artifact.coverage.allGateArtifactsParseable === true, 'Promotion readiness artifacts must be parseable.'); + assertCheck(failures, artifact.coverage.allGateArtifactsSourceSafe === true, 'Promotion readiness artifacts must be source-safe.'); + assertCheck(failures, artifact.coverage.sourceEvidenceComplete === true, 'Promotion readiness source evidence must be complete.'); + assertCheck(failures, artifact.coverage.documentationEvidenceComplete === true, 'Promotion readiness documentation evidence must be complete.'); + assertCheck(failures, artifact.coverage.generatedProofOutputsCovered === true, 'Promotion readiness must cover generated proof outputs.'); + assertCheck(failures, artifact.coverage.promotionWorkflowCovered === true, 'Promotion readiness must cover promotion workflow.'); + assertCheck(failures, artifact.coverage.gateQualityWorkflowCovered === true, 'Promotion readiness must cover gate-quality workflow.'); + assertCheck(failures, artifact.coverage.canonQualityWorkflowCovered === true, 'Promotion readiness must cover canon-quality workflow.'); + assertCheck(failures, artifact.coverage.promotionScriptCovered === true, 'Promotion readiness must cover promotion script.'); + assertCheck(failures, artifact.coverage.specFamilyPromotionScriptCovered === true, 'Promotion readiness must cover spec-family promotion script.'); + assertCheck(failures, artifact.coverage.runtimePromotionScriptCovered === true, 'Promotion readiness must cover runtime promotion script.'); + assertCheck(failures, artifact.coverage.provenGeneratorCovered === true, 'Promotion readiness must cover proven generator.'); + assertCheck(failures, artifact.coverage.valueBearingMainnetAdmission === false, 'Promotion readiness must not admit value-bearing mainnet.'); + assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Promotion readiness must not serialize credentials.'); + assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Promotion readiness must not expose protected source.'); + assertCheck(failures, artifact.coverage.rawProtectedPromptVisible === false, 'Promotion readiness must not expose raw protected prompts.'); + assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Promotion readiness must not expose raw provider responses.'); + assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Promotion readiness must not expose unpaid AssetPack source.'); + assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Promotion readiness must not expose wallet private material.'); + assertCheck(failures, artifact.validationCommands.includes('pnpm run check:v46-gate8'), 'Promotion readiness must list check:v46-gate8.'); + assertCheck( + failures, + artifact.validationCommands.includes('node scripts/promote-bitcode-canon.mjs --version V46 --commit HEAD --dry-run'), + 'Promotion readiness must list V46 promotion dry-run.', + ); + } + + const spec = read(root, 'BITCODE_SPEC_V46.md'); + const delta = read(root, 'BITCODE_SPEC_V46_DELTA.md'); + const notes = read(root, 'BITCODE_SPEC_V46_NOTES.md'); + const parity = read(root, 'BITCODE_SPEC_V46_PARITY_MATRIX.md'); + const packageJson = read(root, 'package.json'); + const proven = read(root, 'BITCODE_SPEC_V46_PROVEN.md'); + const gateWorkflow = read(root, '.github/workflows/bitcode-gate-quality.yml'); + const canonWorkflow = read(root, '.github/workflows/bitcode-canon-quality.yml'); + const promotionWorkflow = read(root, '.github/workflows/v46-canon-promotion.yml'); + const promoteScript = read(root, 'scripts/promote-bitcode-canon.mjs'); + const prepareSpecScript = read(root, 'scripts/prepare-bitcode-spec-family-promotion.mjs'); + const prepareRuntimeScript = read(root, 'scripts/prepare-bitcode-runtime-canon-promotion.mjs'); + const provenGenerator = read(root, 'packages/protocol/src/canonical/proven-generator.js'); + const protocolReadme = read(root, 'packages/protocol/README.md'); + const rootReadme = read(root, 'README.md'); + const roadmap = read(root, 'SPECIFICATIONS_ROADMAP.md'); + + assertCheck(failures, spec.includes('V46 promotion readiness canon'), 'V46 SPEC must define promotion readiness canon.'); + assertCheck(failures, spec.includes(ARTIFACT_PATH) && spec.includes('V46 active / draft V47'), 'V46 SPEC must include Gate 8 artifact and post-promotion posture.'); + assertCheck(failures, delta.includes('Gate 8: V46 Promotion Readiness') && delta.includes(ARTIFACT_PATH), 'V46 DELTA must define Gate 8 closure acceptance and artifact.'); + assertCheck(failures, delta.includes('promotion scripts support V46'), 'V46 DELTA must state V46 promotion script support.'); + assertCheck(failures, notes.includes('Gate 8: V46 Promotion Readiness') && notes.includes('active V46 / draft V47'), 'V46 NOTES must carry Gate 8 post-promotion posture notes.'); + assertCheck( + failures, + parity.includes('Gate 8 implementation readback') && parity.includes(ARTIFACT_PATH) && parity.includes('closed'), + 'V46 PARITY must close Gate 8 artifact parity.', + ); + assertCheck(failures, roadmap.includes('V46 Gate 8 closure anchor'), 'Roadmap must include V46 Gate 8 closure anchor.'); + assertCheck( + failures, + proven.includes('V46 Promotion Readiness') && proven.includes(ARTIFACT_PATH) && !proven.includes('protectedSourceBody'), + 'V46 PROVEN appendix must include source-safe promotion readiness output.', + ); + assertCheck( + failures, + packageJson.includes('"generate:v46-promotion-readiness"') && + packageJson.includes('"check:v46-promotion-readiness"') && + packageJson.includes('"check:v46-gate8"'), + 'package.json must expose V46 Gate 8 generator/check scripts.', + ); + assertCheck( + failures, + gateWorkflow.includes('check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check') && + gateWorkflow.includes('elif [ "$POINTER" = "V46" ]') && + gateWorkflow.includes('--active-canon V46 --draft-target V47'), + 'Gate-quality workflow must tolerate both V45-draft and V46-promoted states.', + ); + assertCheck( + failures, + canonWorkflow.includes('check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check') && + canonWorkflow.includes('elif [ "$POINTER" = "V46" ]') && + canonWorkflow.includes('--active-canon V46 --draft-target V47'), + 'Canon-quality workflow must validate V46 promoted posture.', + ); + assertCheck( + failures, + promotionWorkflow.includes("head.ref == 'version/v46'") && + promotionWorkflow.includes('node scripts/prepare-bitcode-spec-family-promotion.mjs --version V46') && + promotionWorkflow.includes('node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V46 --next-draft V47') && + promotionWorkflow.includes('node scripts/generate-bitcode-proven.mjs --version V46') && + promotionWorkflow.includes('node scripts/check-bitcode-spec-family.mjs --version V46 --mode promoted --current-target V46') && + promotionWorkflow.includes('check-v46-gate8-promotion-readiness.mjs --promotion-mode --skip-branch-check'), + 'V46 promotion workflow must validate Gate 8 and promote V46.', + ); + assertCheck( + failures, + promoteScript.includes("if (version === 'V46')") && + promoteScript.includes('const v46Gate8Command') && + promoteScript.includes('buildDerivedV46CommitMessageBody') && + promoteScript.includes("version === 'V46'"), + 'Promotion script must support V46.', + ); + assertCheck( + failures, + prepareSpecScript.includes("if (version === 'V46')") && + prepareSpecScript.includes('V46 canonical system specification for protocol comprehension') && + prepareSpecScript.includes(ARTIFACT_PATH), + 'Spec-family promotion preparation must support V46.', + ); + assertCheck( + failures, + prepareRuntimeScript.includes('--next-draft') && + prepareRuntimeScript.includes('rewritePackageReadme') && + prepareRuntimeScript.includes('rewriteRuntimeDataState'), + 'Runtime promotion preparation must preserve next-draft posture support.', + ); + assertCheck( + failures, + provenGenerator.includes('buildV46ProvenPackage') && + provenGenerator.includes('buildV46PromotionReadinessReport') && + provenGenerator.includes(ARTIFACT_PATH), + 'Proven generator must include V46 promotion package support.', + ); + assertCheck(failures, protocolReadme.includes('V46 Gate 8') && protocolReadme.includes('V46` active, `V47` draft'), 'Protocol README must document V46 Gate 8.'); + assertCheck(failures, rootReadme.includes('check:v46-gate8') && rootReadme.includes('v46-canon-promotion.yml'), 'Root README must document V46 Gate 8 scripts/workflow.'); + + if (failures.length === 0 && !args.skipPackageTests) { + try { + run(root, 'pnpm', ['--filter', '@bitcode/protocol', 'exec', 'node', '--test', '--test-force-exit', 'test/v46-promotion-readiness.test.js']); + run(root, 'node', ['scripts/promote-bitcode-canon.mjs', '--version', 'V46', '--commit', 'HEAD', '--dry-run']); + } catch (error) { + failures.push(`V46 Gate 8 package promotion tests failed: ${error.stderr || error.message}`); + } + } + + if (failures.length > 0) { + process.stderr.write(`V46 Gate 8 promotion readiness failed:\n${failures.map((failure) => `- ${failure}`).join('\n')}\n`); + process.exit(1); + } + + process.stdout.write(`V46 Gate 8 promotion readiness ok artifacts=${V46_GATE_ARTIFACTS.length} root=${artifact?.artifactRoot || 'pending'}\n`); +} + +main(); diff --git a/scripts/generate-v46-interface-claim-contracts.mjs b/scripts/generate-v46-interface-claim-contracts.mjs new file mode 100644 index 000000000..8cd4ff0ab --- /dev/null +++ b/scripts/generate-v46-interface-claim-contracts.mjs @@ -0,0 +1,30 @@ +#!/usr/bin/env node + +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH, + buildV46InterfaceClaimContracts, +} from '../packages/protocol/src/canonical/v46-interface-claim-contracts.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const repoRoot = path.resolve(__dirname, '..'); +const checkOnly = process.argv.includes('--check'); +const artifact = buildV46InterfaceClaimContracts({ repoRoot }); +const serialized = `${JSON.stringify(artifact, null, 2)}\n`; +const artifactPath = path.join(repoRoot, V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH); + +if (checkOnly) { + if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) { + process.stderr.write( + `${V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH} is stale. Run pnpm run generate:v46-interface-claim-contracts.\n`, + ); + process.exitCode = 1; + } +} else { + mkdirSync(path.dirname(artifactPath), { recursive: true }); + writeFileSync(artifactPath, serialized); + process.stdout.write(`wrote ${V46_INTERFACE_CLAIM_CONTRACTS_ARTIFACT_PATH}\n`); +} diff --git a/scripts/generate-v46-local-interface-comprehension-rehearsal.mjs b/scripts/generate-v46-local-interface-comprehension-rehearsal.mjs new file mode 100644 index 000000000..8b545a793 --- /dev/null +++ b/scripts/generate-v46-local-interface-comprehension-rehearsal.mjs @@ -0,0 +1,30 @@ +#!/usr/bin/env node + +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH, + buildV46LocalInterfaceComprehensionRehearsal, +} from '../packages/protocol/src/canonical/v46-local-interface-comprehension-rehearsal.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const repoRoot = path.resolve(__dirname, '..'); +const checkOnly = process.argv.includes('--check'); +const artifact = buildV46LocalInterfaceComprehensionRehearsal({ repoRoot }); +const serialized = `${JSON.stringify(artifact, null, 2)}\n`; +const artifactPath = path.join(repoRoot, V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH); + +if (checkOnly) { + if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) { + process.stderr.write( + `${V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH} is stale. Run pnpm run generate:v46-local-interface-comprehension-rehearsal.\n`, + ); + process.exitCode = 1; + } +} else { + mkdirSync(path.dirname(artifactPath), { recursive: true }); + writeFileSync(artifactPath, serialized); + process.stdout.write(`wrote ${V46_LOCAL_INTERFACE_COMPREHENSION_REHEARSAL_ARTIFACT_PATH}\n`); +} diff --git a/scripts/generate-v46-product-route-comprehension-readback.mjs b/scripts/generate-v46-product-route-comprehension-readback.mjs new file mode 100644 index 000000000..f35daae07 --- /dev/null +++ b/scripts/generate-v46-product-route-comprehension-readback.mjs @@ -0,0 +1,30 @@ +#!/usr/bin/env node + +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH, + buildV46ProductRouteComprehensionReadback, +} from '../packages/protocol/src/canonical/v46-product-route-comprehension-readback.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const repoRoot = path.resolve(__dirname, '..'); +const checkOnly = process.argv.includes('--check'); +const artifact = buildV46ProductRouteComprehensionReadback({ repoRoot }); +const serialized = `${JSON.stringify(artifact, null, 2)}\n`; +const artifactPath = path.join(repoRoot, V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH); + +if (checkOnly) { + if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) { + process.stderr.write( + `${V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH} is stale. Run pnpm run generate:v46-product-route-comprehension-readback.\n`, + ); + process.exitCode = 1; + } +} else { + mkdirSync(path.dirname(artifactPath), { recursive: true }); + writeFileSync(artifactPath, serialized); + process.stdout.write(`wrote ${V46_PRODUCT_ROUTE_COMPREHENSION_READBACK_ARTIFACT_PATH}\n`); +} diff --git a/scripts/generate-v46-promotion-readiness-report.mjs b/scripts/generate-v46-promotion-readiness-report.mjs new file mode 100644 index 000000000..d5e078d2f --- /dev/null +++ b/scripts/generate-v46-promotion-readiness-report.mjs @@ -0,0 +1,69 @@ +#!/usr/bin/env node + +import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { + V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH, + V46_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT, + buildV46PromotionReadinessReport, +} from '../packages/protocol/src/index.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const repoRoot = path.resolve(__dirname, '..'); +const GENERATED_AT = '2026-06-02T00:00:00.000Z'; +const EXPECTED_ARTIFACT_ID = 'v46-promotion-readiness-report'; +const EXPECTED_SOURCE_SAFETY_VERDICT = 'source-safe-v46-protocol-comprehension-promotion-metadata'; + +function parseArgs(argv) { + return { + check: argv.includes('--check'), + }; +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + const artifact = buildV46PromotionReadinessReport({ + generatedAt: GENERATED_AT, + repoRoot, + }); + if ( + artifact.artifactId !== EXPECTED_ARTIFACT_ID || + artifact.sourceSafetyVerdict !== V46_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT || + artifact.sourceSafetyVerdict !== EXPECTED_SOURCE_SAFETY_VERDICT + ) { + throw new Error('Unexpected V46 promotion readiness artifact identity.'); + } + const outputPath = path.join(repoRoot, V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH); + const serialized = `${JSON.stringify(artifact, null, 2)}\n`; + + if (args.check) { + const current = readFileSync(outputPath, 'utf8'); + if (current !== serialized) { + process.stderr.write( + `${V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH} is stale. Run pnpm run generate:v46-promotion-readiness.\n`, + ); + process.exitCode = 1; + return; + } + if (!artifact.passed) { + process.stderr.write(`V46 promotion readiness artifact failed:\n${artifact.failures.map((failure) => `- ${failure}`).join('\n')}\n`); + process.exitCode = 1; + return; + } + process.stdout.write( + `V46 promotion readiness artifact ok artifacts=${artifact.coverage.gateArtifactCount} root=${artifact.artifactRoot}\n`, + ); + return; + } + + mkdirSync(path.dirname(outputPath), { recursive: true }); + writeFileSync(outputPath, serialized); + process.stdout.write( + `Wrote ${V46_PROMOTION_READINESS_REPORT_ARTIFACT_PATH} artifacts=${artifact.coverage.gateArtifactCount} root=${artifact.artifactRoot}\n`, + ); +} + +main(); diff --git a/scripts/generate-v46-proof-readback-operator-explanation.mjs b/scripts/generate-v46-proof-readback-operator-explanation.mjs new file mode 100644 index 000000000..ef0569811 --- /dev/null +++ b/scripts/generate-v46-proof-readback-operator-explanation.mjs @@ -0,0 +1,31 @@ +#!/usr/bin/env node + +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH, + buildV46ProofReadbackOperatorExplanation, +} from '../packages/protocol/src/canonical/v46-proof-readback-operator-explanation.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const repoRoot = path.resolve(__dirname, '..'); +const checkOnly = process.argv.includes('--check'); +const artifact = buildV46ProofReadbackOperatorExplanation({ repoRoot }); +const serialized = `${JSON.stringify(artifact, null, 2)}\n`; +const artifactPath = path.join(repoRoot, V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH); + +if (checkOnly) { + if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) { + process.stderr.write( + `${V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH} is stale. Run pnpm run generate:v46-proof-readback-operator-explanation.\n`, + ); + process.exitCode = 1; + } +} else { + mkdirSync(path.dirname(artifactPath), { recursive: true }); + writeFileSync(artifactPath, serialized); + process.stdout.write(`wrote ${V46_PROOF_READBACK_OPERATOR_EXPLANATION_ARTIFACT_PATH}\n`); +} + diff --git a/scripts/generate-v46-protocol-comprehension-object-model.mjs b/scripts/generate-v46-protocol-comprehension-object-model.mjs new file mode 100644 index 000000000..7a4e24465 --- /dev/null +++ b/scripts/generate-v46-protocol-comprehension-object-model.mjs @@ -0,0 +1,30 @@ +#!/usr/bin/env node + +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH, + buildV46ProtocolComprehensionObjectModel, +} from '../packages/protocol/src/canonical/v46-protocol-comprehension-object-model.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const repoRoot = path.resolve(__dirname, '..'); +const checkOnly = process.argv.includes('--check'); +const artifact = buildV46ProtocolComprehensionObjectModel({ repoRoot }); +const serialized = `${JSON.stringify(artifact, null, 2)}\n`; +const artifactPath = path.join(repoRoot, V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH); + +if (checkOnly) { + if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) { + process.stderr.write( + `${V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH} is stale. Run pnpm run generate:v46-protocol-comprehension-object-model.\n`, + ); + process.exitCode = 1; + } +} else { + mkdirSync(path.dirname(artifactPath), { recursive: true }); + writeFileSync(artifactPath, serialized); + process.stdout.write(`wrote ${V46_PROTOCOL_COMPREHENSION_OBJECT_MODEL_ARTIFACT_PATH}\n`); +} diff --git a/scripts/generate-v46-public-operator-claim-boundaries.mjs b/scripts/generate-v46-public-operator-claim-boundaries.mjs new file mode 100644 index 000000000..0b6aac287 --- /dev/null +++ b/scripts/generate-v46-public-operator-claim-boundaries.mjs @@ -0,0 +1,30 @@ +#!/usr/bin/env node + +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH, + buildV46PublicOperatorClaimBoundaries, +} from '../packages/protocol/src/canonical/v46-public-operator-claim-boundaries.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const repoRoot = path.resolve(__dirname, '..'); +const checkOnly = process.argv.includes('--check'); +const artifact = buildV46PublicOperatorClaimBoundaries({ repoRoot }); +const serialized = `${JSON.stringify(artifact, null, 2)}\n`; +const artifactPath = path.join(repoRoot, V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH); + +if (checkOnly) { + if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) { + process.stderr.write( + `${V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH} is stale. Run pnpm run generate:v46-public-operator-claim-boundaries.\n`, + ); + process.exitCode = 1; + } +} else { + mkdirSync(path.dirname(artifactPath), { recursive: true }); + writeFileSync(artifactPath, serialized); + process.stdout.write(`wrote ${V46_PUBLIC_OPERATOR_CLAIM_BOUNDARIES_ARTIFACT_PATH}\n`); +} diff --git a/scripts/prepare-bitcode-spec-family-promotion.mjs b/scripts/prepare-bitcode-spec-family-promotion.mjs index 6b1f56590..605432577 100644 --- a/scripts/prepare-bitcode-spec-family-promotion.mjs +++ b/scripts/prepare-bitcode-spec-family-promotion.mjs @@ -31,7 +31,7 @@ function printHelp() { 'Usage: node scripts/prepare-bitcode-spec-family-promotion.mjs --version V31 --commit [--repo-root ]', '', 'Rewrites the hand-authored spec family status truth for canonical promotion.', - 'Currently implemented for V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, and V45.' + 'Currently implemented for V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, V45, and V46.' ].join('\n') ); } @@ -199,6 +199,101 @@ function rewriteV45PromotedParityMatrix(content, version) { .replaceAll('| spec closed; source gap |', '| closed |'); } +/** + * @param {string} content + * @param {string} version + */ +function rewriteV46PromotedSourceOfTruthHierarchy(content, version) { + if (version !== 'V46') return content; + return content.replace( + [ + '`BITCODE_SPEC.txt` points to `V45`; V45 is the active promoted Bitcode canon.', + '`BITCODE_SPEC_V46.md`, `BITCODE_SPEC_V46_DELTA.md`,', + '`BITCODE_SPEC_V46_NOTES.md`, and `BITCODE_SPEC_V46_PARITY_MATRIX.md` are draft', + 'target material only. They do not authorize implementation behavior until a', + 'gate-specific V46 parity or implementation gate accepts the relevant scope.' + ].join('\n'), + [ + '`BITCODE_SPEC.txt` points to `V46`; V46 is the active promoted Bitcode canon.', + '`BITCODE_SPEC_V46.md`, `BITCODE_SPEC_V46_DELTA.md`,', + '`BITCODE_SPEC_V46_NOTES.md`, and `BITCODE_SPEC_V46_PARITY_MATRIX.md` are the', + 'promoted V46 specification-family material. The V46 formal specification family', + 'is active canon and authorizes implementation behavior only through the', + 'source-safe, proof-backed comprehension, interface, and operator-readback', + 'boundaries it states.' + ].join('\n') + ); +} + +/** + * @param {string} content + * @param {string} version + */ +function rewriteV46PromotedDraftPosture(content, version) { + if (version !== 'V46') return content; + return content + .replace( + 'V46 does not replace V45 as active canon until promotion workflow validation.\nIt is the draft target for external protocol comprehension, public/operator\ndocs, route copy, interface contract readback, and launch-facing proof\nexplainability.', + 'V46 replaces V45 as active canon after promotion workflow validation. It is\nthe promoted target for external protocol comprehension, public/operator docs,\nroute copy, interface contract readback, and launch-facing proof explainability.' + ) + .replaceAll('V46 draft work', 'V46 promoted canon work') + .replaceAll('V46 formal draft', 'V46 formal canon') + .replaceAll('V46 remains draft', 'V46 is active canon') + .replaceAll('until V46 promotion', 'through V46 promotion') + .replaceAll('before V46 can be promoted', 'before V46 promotion closure') + .replaceAll('does not promote V46', 'records V46 promotion') + .replaceAll('draft `BITCODE_SPEC_V46_PROVEN.md`', 'promoted `BITCODE_SPEC_V46_PROVEN.md`') + .replaceAll('V45 remains active canon while V46 is drafted.', 'V46 is active canon after promotion workflow validation.') + .replaceAll( + 'V46 does not replace V45 until a later promotion workflow validates and\n advances `BITCODE_SPEC.txt`.', + 'V46 replaces V45 after the maintained promotion workflow validates and\n advances `BITCODE_SPEC.txt`.' + ) + .replaceAll('V45 active / V46 draft', 'pre-promotion V45-to-V46 draft') + .replaceAll('V45 active / draft V46', 'pre-promotion draft V46') + .replaceAll('Canonical pointer: `BITCODE_SPEC.txt` -> `V45`', 'Canonical pointer: `BITCODE_SPEC.txt` -> `V46`') + .replaceAll('Active canonical anchor: `BITCODE_SPEC_V45.md`', 'Active canonical anchor: `BITCODE_SPEC_V46.md`') + .replaceAll('Active generated proof appendix: `BITCODE_SPEC_V45_PROVEN.md`', 'Active generated proof appendix: `BITCODE_SPEC_V46_PROVEN.md`') + .replaceAll( + 'Until then, V45 remains the active\npointer truth through `BITCODE_SPEC.txt`.', + 'V46 now holds the active pointer truth through `BITCODE_SPEC.txt`.' + ) + .replaceAll( + 'These notes are not implementation authority above the active V45\nspecification family. They preserve draft notes-level atoms that must later be\nconsolidated into formal V46 specification text before parity or\nimplementation gates rely on them.', + 'These notes are implementation authority only through the promoted V46\nspecification family. They preserve accepted notes-level atoms that have been\nconsolidated into formal V46 specification text, parity evidence, proof\nreadback, and promotion receipts.' + ) + .replaceAll('This matrix opens V46 parity work. It is intentionally draft-only: it records', 'This matrix records promoted V46 parity work. It records') + .replaceAll('current authority remains V45.', 'current authority is V46.') + .replaceAll('V45 is active canon; V46 is draft target only.', 'V46 is active canon; V45 is the prior promoted anchor.') + .replaceAll('`BITCODE_SPEC.txt` remains V45 during V46 promoted canon work', '`BITCODE_SPEC.txt` points to V46 after promotion') + .replaceAll('Gate 1 preserves active V45 / draft V46 posture.', 'Gate 1 preserved pre-promotion posture; promotion now records active V46 posture.') + .replaceAll('V45 is active canon while V46 is draft target.', 'V46 is active canon after promotion workflow validation.') + .replaceAll( + 'validate active V45 plus draft V46, prepare V46 active / draft V47 posture', + 'validated pre-promotion V46 draft posture, prepare V46 active / draft V47 posture' + ) + .replaceAll( + 'validate active V45 plus draft V46 and the gate branch is committed', + 'validated pre-promotion V46 draft posture and the gate branch is committed' + ); +} + +/** + * @param {string} content + * @param {string} version + */ +function rewriteV46PromotedParityMatrix(content, version) { + if (version !== 'V46') return content; + return content + .replace( + 'V46 parity truth, generated comprehension artifacts, local interface rehearsal, gate closure, and promotion automation are aligned', + 'V46 promoted parity truth, generated comprehension artifacts, local interface rehearsal, gate closure, and promotion automation are aligned' + ) + .replaceAll('| draft-required |', '| closed |') + .replaceAll('| implemented prerequisite |', '| closed |') + .replaceAll('| accepted boundary |', '| closed |') + .replaceAll('| pending |', '| closed |'); +} + /** * @param {string} version * @param {string} commit @@ -730,8 +825,43 @@ function rewritePromotionStatus(version, commit, content, kind) { : promotedSourceTruth; } + if (version === 'V46') { + const sharedInventory = 'active canonical `.bitcode/v46-spec-family-report.json`, `.bitcode/v46-canonical-input-report.json`, `.bitcode/v46-canon-posture-drift-report.json`, V46 protocol-comprehension artifacts, `.bitcode/v46-promotion-readiness-report.json`, V46 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V46_PROVEN.md` as the generated proof appendix for V46 promotion'; + const scopeByKind = { + spec: 'V46 canonical system specification for protocol comprehension, source-safe public/operator explanation, interface claim contracts, proof readback, local interface rehearsal, and promotion readiness over promoted V45 knowledge commoditization canon', + delta: 'V46 canonical delta for protocol comprehension and public/operator explanation over promoted V45 knowledge commoditization canon', + notes: 'V46 canonical notes for protocol comprehension and public/operator explanation over promoted V45 knowledge commoditization canon', + parity: 'V46 canonical parity ledger for protocol comprehension and public/operator explanation over promoted V45 knowledge commoditization canon' + }; + const stateByKind = { + spec: 'canonical promotion complete; V46 is the active protocol-comprehension canon and the V46 hand-authored plus generated canon are aligned', + delta: 'canonical promotion complete; this delta records the promoted V45-to-V46 protocol-comprehension closure set', + notes: 'canonical promotion complete; V46 notes record accepted protocol object-model, public/operator claim boundary, route readback, interface contract, proof explanation, local rehearsal, and promotion-readiness evidence', + parity: 'canonical promotion complete; V46 parity truth, generated comprehension artifacts, local interface rehearsal, gate closure, and promotion automation are aligned' + }; + const rewritten = rewriteStatusValues(content, { + Scope: scopeByKind[kind], + ...(kind !== 'delta' + ? { 'Last fully realized canonical target preserved in source': '`V46`' } + : {}), + 'Current canonical/latest target': '`V46`', + 'Canonical proof-source commit': `\`${commit}\``, + 'Generated structured artifact inventory': sharedInventory, + 'Source parity state': + 'V46 source-side protocol comprehension object model, public/operator claim boundaries, route readback, interface claim contracts, proof readback, local rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V46 file family', + 'V46 state': stateByKind[kind] + }); + const promotedPosture = rewriteV46PromotedDraftPosture( + rewriteV46PromotedSourceOfTruthHierarchy(rewritten, version), + version + ); + return kind === 'parity' + ? rewriteV46PromotedParityMatrix(rewritePromotedParityJudgments(promotedPosture, version), version) + : promotedPosture; + } + if (!['V21', 'V22', 'V23', 'V24', 'V25'].includes(version)) { - throw new Error(`Promotion hand-authored family rewriting is currently implemented for V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, and V45. Received ${version}.`); + throw new Error(`Promotion hand-authored family rewriting is currently implemented for V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, V45, and V46. Received ${version}.`); } const sharedInventory = version === 'V21' ? 'active canonical `.bitcode/v19-*` reproducible reports, `.bitcode/v20-*` operator-quality reports, `.bitcode/v21-spec-family-report.json`, and `.bitcode/v21-canonical-input-report.json`; `ENGI_SPEC_V21_PROVEN.md` is the active generated proof appendix for V21' diff --git a/scripts/promote-bitcode-canon.mjs b/scripts/promote-bitcode-canon.mjs index cfe2b6354..2bfcecc08 100644 --- a/scripts/promote-bitcode-canon.mjs +++ b/scripts/promote-bitcode-canon.mjs @@ -47,7 +47,7 @@ function printHelp() { 'Usage: npm run promote:canon -- --version V20 --commit [--dry-run]', '', 'Options:', - ' --version Canonical version to promote. Accepted targets: V19, V20, V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, V45.', + ' --version Canonical version to promote. Accepted targets: V19, V20, V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, V45, V46.', ' --commit Proof-source commit to render into the generated appendix.', ' --dry-run Print the promotion plan without executing commands or writing files.', ' --allow-dirty-start Permit a dirty worktree before promotion. Not for canonical use.', @@ -637,6 +637,22 @@ function buildCommandPlan(version, commit) { const v45PromotedCanonicalInputCheckCommand = ['node', ['scripts/check-bitcode-canonical-inputs.mjs', '--current-target', 'V45']]; const v45PromotedSpecCheckCommand = ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V45', '--mode', 'promoted', '--current-target', 'V45']]; const v45PromotedCanonPostureDriftCommand = ['node', ['scripts/check-bitcode-canon-posture-drift.mjs', '--active-canon', 'V45', '--draft-target', 'V46']]; + const v46DraftSpecCheckCommand = ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V46', '--mode', 'draft', '--current-target', 'V45']]; + const v46CanonicalInputCheckCommand = ['node', ['scripts/check-bitcode-canonical-inputs.mjs', '--current-target', 'V45']]; + const v46DraftCanonPostureDriftCommand = ['node', ['scripts/check-bitcode-canon-posture-drift.mjs', '--active-canon', 'V45', '--draft-target', 'V46']]; + const v46Gate1Command = ['node', ['scripts/check-v46-gate1-commercial-protocol-comprehension-roadmap.mjs', '--skip-branch-check']]; + const v46Gate2Command = ['node', ['scripts/check-v46-gate2-protocol-comprehension-object-model.mjs', '--skip-branch-check', '--skip-package-tests']]; + const v46Gate3Command = ['node', ['scripts/check-v46-gate3-public-operator-claim-boundaries.mjs', '--skip-branch-check', '--skip-package-tests']]; + const v46Gate4Command = ['node', ['scripts/check-v46-gate4-product-route-comprehension-readback.mjs', '--skip-branch-check', '--skip-package-tests']]; + const v46Gate5Command = ['node', ['scripts/check-v46-gate5-interface-claim-contracts.mjs', '--skip-branch-check', '--skip-package-tests']]; + const v46Gate6Command = ['node', ['scripts/check-v46-gate6-proof-readback-operator-explanation.mjs', '--skip-branch-check', '--skip-package-tests']]; + const v46Gate7Command = ['node', ['scripts/check-v46-gate7-local-interface-comprehension-rehearsal.mjs', '--skip-branch-check', '--skip-package-tests']]; + const v46Gate8Command = ['node', ['scripts/check-v46-gate8-promotion-readiness.mjs', '--promotion-mode', '--skip-branch-check', '--skip-package-tests']]; + const v46PreparePromotionSpecFamilyCommand = ['node', ['scripts/prepare-bitcode-spec-family-promotion.mjs', '--version', 'V46', '--commit', commit]]; + const v46PrepareRuntimePromotionCommand = ['node', ['scripts/prepare-bitcode-runtime-canon-promotion.mjs', '--version', 'V46', '--next-draft', 'V47']]; + const v46PromotedCanonicalInputCheckCommand = ['node', ['scripts/check-bitcode-canonical-inputs.mjs', '--current-target', 'V46']]; + const v46PromotedSpecCheckCommand = ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V46', '--mode', 'promoted', '--current-target', 'V46']]; + const v46PromotedCanonPostureDriftCommand = ['node', ['scripts/check-bitcode-canon-posture-drift.mjs', '--active-canon', 'V46', '--draft-target', 'V47']]; const inheritedProofCommands = [ ['npm', ['--prefix', 'protocol-demonstration', 'run', 'typecheck']], ['npm', ['--prefix', 'protocol-demonstration', 'run', 'test:unit']], @@ -1443,6 +1459,39 @@ function buildCommandPlan(version, commit) { ['git', ['diff', '--check']] ]; } + if (version === 'V46') { + return [ + v46DraftSpecCheckCommand, + v46CanonicalInputCheckCommand, + v46DraftCanonPostureDriftCommand, + v46Gate1Command, + v46Gate2Command, + v46Gate3Command, + v46Gate4Command, + v46Gate5Command, + v46Gate6Command, + v46Gate7Command, + v46Gate8Command, + ['pnpm', ['--filter', '@bitcode/protocol', 'typecheck']], + ['pnpm', ['--filter', '@bitcode/protocol', 'test']], + ['pnpm', ['--filter', '@bitcode/btd', 'typecheck']], + ['pnpm', ['--filter', '@bitcode/btd', 'test']], + ['npm', ['--prefix', 'protocol-demonstration', 'test']], + ['npm', ['--prefix', 'protocol-demonstration', 'run', 'test:v28-mvp-qa']], + ['pnpm', ['--filter', '@bitcode/pipeline-asset-pack', 'typecheck']], + ['pnpm', ['--filter', '@bitcode/pipeline-hosts', 'typecheck']], + ['pnpm', ['--filter', '@bitcode/pipeline-asset-pack', 'exec', 'jest', '--config', 'jest.config.cjs', '--passWithNoTests', '--forceExit']], + ['pnpm', ['--filter', '@bitcode/pipeline-hosts', 'exec', 'jest', '--config', 'jest.config.cjs', '--passWithNoTests', '--forceExit']], + v46PreparePromotionSpecFamilyCommand, + v46PrepareRuntimePromotionCommand, + ['node', ['scripts/generate-bitcode-proven.mjs', '--version', version, '--commit', commit, '--worktree-state', 'clean', '--output', archivedProvenOutput(version), '--allow-dirty']], + ['node', ['scripts/generate-bitcode-proven.mjs', '--version', version, '--commit', commit, '--worktree-state', 'clean', '--output', archivedProvenOutput(version), '--check', '--allow-dirty']], + v46PromotedCanonicalInputCheckCommand, + v46PromotedSpecCheckCommand, + v46PromotedCanonPostureDriftCommand, + ['git', ['diff', '--check']] + ]; + } throw new Error(`Unsupported promotion target ${version}. Expected V19, V20, V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, or V45.`); } @@ -2702,6 +2751,64 @@ async function buildDerivedV45CommitMessageBody(commit) { ].join('\n'); } +/** + * @param {string} commit + * @returns {Promise} + */ +async function buildDerivedV46CommitMessageBody(commit) { + const { spec, delta, parity } = await readSpecFamily('V46'); + const scope = extractStatusValue(spec, 'Scope') || 'V46 canonical system specification for protocol comprehension'; + const derivedFocus = deriveScopeFocus(scope); + const focus = derivedFocus && derivedFocus !== 'specifying-canon hardening' + ? derivedFocus + : 'source-safe protocol comprehension over promoted V45 knowledge commoditization canon'; + const decisionSection = extractSection(delta, 'Accepted V46 decisions'); + const acceptedDecisions = extractOrderedItems(decisionSection).map(stripMarkdown); + const parityRows = [ + ...parseMarkdownTable(extractSection(parity, 'V46 Implementation Matrix')), + ...parseMarkdownTable(extractSection(parity, 'V46 Implementation Checklist')) + ]; + + /** @type {string[]} */ + const bullets = []; + for (const decision of acceptedDecisions.slice(0, 4)) { + bullets.push(trimTrailingPeriod(decision)); + } + + const prioritizedAreas = [ + 'Protocol comprehension object model', + 'Public/operator claim boundaries', + 'Product route comprehension readback', + 'Interface claim contracts', + 'Proof readback explanation', + 'Local interface comprehension rehearsal', + 'Promotion readiness', + 'Documentation' + ]; + for (const area of prioritizedAreas) { + const row = findParityRow(parityRows, area); + if (!row) continue; + const closureSignal = trimTrailingPeriod( + stripMarkdown(row['Required V46 result'] || row['Closure requirement'] || row['Source evidence'] || '') + ); + if (!closureSignal) continue; + bullets.push(`${stripMarkdown(area)}: ${closureSignal}`); + } + + const promotionLead = focus.startsWith('Bitcode ') + ? `Promotes V46: ${focus}.` + : `Promotes V46 as ${focus} for Bitcode.`; + + return [ + promotionLead, + '', + `Proof-source commit: ${commit}`, + '', + 'The promotion carries:', + ...bullets.slice(0, 14).map((bullet) => `- ${bullet}`) + ].join('\n'); +} + /** * @param {string} version * @param {string} commit @@ -2810,7 +2917,10 @@ async function buildCommitMessageBody(version, commit) { if (version === 'V45') { return buildDerivedV45CommitMessageBody(commit); } - throw new Error(`Unsupported promotion target ${version}. Expected V19, V20, V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, or V45.`); + if (version === 'V46') { + return buildDerivedV46CommitMessageBody(commit); + } + throw new Error(`Unsupported promotion target ${version}. Expected V19, V20, V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, V45, or V46.`); } async function main() { @@ -2821,8 +2931,8 @@ async function main() { } const version = args.version || ''; - if (!['V19', 'V20', 'V21', 'V22', 'V23', 'V24', 'V25', 'V28', 'V29', 'V30', 'V31', 'V32', 'V33', 'V34', 'V35', 'V36', 'V37', 'V38', 'V39', 'V40', 'V41', 'V42', 'V43', 'V44', 'V45'].includes(version)) { - throw new Error(`Canonical promotion accepts --version V19, V20, V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, or V45. Received ${version || 'none'}.`); + if (!['V19', 'V20', 'V21', 'V22', 'V23', 'V24', 'V25', 'V28', 'V29', 'V30', 'V31', 'V32', 'V33', 'V34', 'V35', 'V36', 'V37', 'V38', 'V39', 'V40', 'V41', 'V42', 'V43', 'V44', 'V45', 'V46'].includes(version)) { + throw new Error(`Canonical promotion accepts --version V19, V20, V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, V43, V44, V45, or V46. Received ${version || 'none'}.`); } const commit = args.commit || ''; if (!commit) { diff --git a/uapi/app/(root)/components/PublicDocsPageContent.tsx b/uapi/app/(root)/components/PublicDocsPageContent.tsx index 31ae4f83b..9e2a906c4 100644 --- a/uapi/app/(root)/components/PublicDocsPageContent.tsx +++ b/uapi/app/(root)/components/PublicDocsPageContent.tsx @@ -35,8 +35,8 @@ const firstReadingPath = [ }, { label: 'Audit the system', - body: 'Finish with V26, proofs, settlement, and interface docs so the under-the-hood system is clear.', - href: '/docs/protocol-v26', + body: 'Finish with active Protocol canon, proofs, settlement, and interface docs so the under-the-hood system is clear.', + href: '/docs/protocol', }, ] as const; @@ -45,7 +45,7 @@ const specCoverageCards = [ eyebrow: 'Protocol', title: 'V45 knowledge-commoditization law', body: 'AssetPack lifecycle, BTD scalar volume and rights, BTC settlement, proof readback authority, interface disclosure, and promotion truth.', - href: '/docs/protocol-v26', + href: '/docs/protocol', }, { eyebrow: 'Proofs', @@ -242,12 +242,13 @@ export default function PublicDocsPageContent({ sourcePlayable }: PublicDocsPage

- V26 coverage + V45 / V46 claim boundary

- Product docs map back to the canon. + Product docs map back to the active canon.

+ Protocol docs map back to active law. Public docs explain; proof readback decides. The public docs teach the current product routes in user order: AssetPack commodity, BTD scalar volume and rights, BTC settlement money, proof readback authority, /deposit, /read, /packs, interfaces, and configuration. diff --git a/uapi/app/(root)/components/landing/MarketingLandingTerminalPreview.tsx b/uapi/app/(root)/components/landing/MarketingLandingTerminalPreview.tsx index 0aec3ec48..4ae10365c 100644 --- a/uapi/app/(root)/components/landing/MarketingLandingTerminalPreview.tsx +++ b/uapi/app/(root)/components/landing/MarketingLandingTerminalPreview.tsx @@ -67,7 +67,7 @@ export const MarketingLandingTerminalPreview = memo(function MarketingLandingTer Compact depot view

- The depot preview keeps Source Shares, measurement, and settlement legible before the full Terminal opens. + The preview keeps AssetPacks, source-safe measurements, and settlement posture legible before the full product route opens.

diff --git a/uapi/app/(root)/components/landing/marketing-landing-shared.tsx b/uapi/app/(root)/components/landing/marketing-landing-shared.tsx index c85e60dbd..ad91fdcf8 100644 --- a/uapi/app/(root)/components/landing/marketing-landing-shared.tsx +++ b/uapi/app/(root)/components/landing/marketing-landing-shared.tsx @@ -41,8 +41,8 @@ export const productPillars = [ Icon: ScaleIcon, }, { - title: 'EARN $BTD', - description: 'Settlement and licensed consumption allocate $BTD across contributors and rights holders.', + title: 'BTC COMPENSATION', + description: 'BTC settlement and source-to-shares accounting compensate contributors after proof-backed finality.', Icon: CurrencyDollarIcon, }, ] as const; @@ -129,7 +129,7 @@ export const verificationRows = [ }, { label: 'Licensed reads', - detail: 'licensed readers hold AssetPack read-rights while metered usage records measured $BTD', + detail: 'licensed readers hold settled AssetPack rights while BTD records scalar knowledge volume', status: 'private*', Icon: LockClosedIcon, }, @@ -143,19 +143,19 @@ export const verificationRows = [ export const compactPreviewCards = [ { - title: 'Exchange', + title: 'Packs', body: 'Live deposit, read, and settlement posture', detail: 'Read the public market frame before you open a specific transaction.', }, { - title: 'Terminal', - body: 'Proofs • history • conversations • closure', - detail: 'Move into the full Terminal route when you read exact deposit-to-settle detail.', + title: 'Deposit', + body: 'Supply options • measurements • admission', + detail: 'Prepare source-safe AssetPack supply before downstream settlement.', }, { - title: 'Auxillaries', - body: 'Profile • connects • interfaces • $BTD', - detail: 'Open Auxillaries when you read identity, interface, or account posture.', + title: 'Read', + body: 'Need • Finding Fits • preview • quote', + detail: 'Request measured demand and inspect source-safe fit evidence.', }, ] as const; diff --git a/uapi/app/docs/[slug]/page.tsx b/uapi/app/docs/[slug]/page.tsx index 43789ab38..75a036e25 100644 --- a/uapi/app/docs/[slug]/page.tsx +++ b/uapi/app/docs/[slug]/page.tsx @@ -1,5 +1,5 @@ import type { Metadata } from 'next'; -import { notFound } from 'next/navigation'; +import { notFound, redirect } from 'next/navigation'; import PublicShellFrame from '@/app/(root)/components/PublicShellFrame'; @@ -12,12 +12,20 @@ type DocsRouteProps = { }; }; +const DOCS_ROUTE_ALIASES: Record = { + 'protocol-v26': 'protocol', +}; + +function resolveDocsSlug(slug: string) { + return DOCS_ROUTE_ALIASES[slug] ?? slug; +} + export function generateStaticParams() { return BITCODE_DOCS_PAGE_SLUGS.map((slug) => ({ slug })); } export function generateMetadata({ params }: DocsRouteProps): Metadata { - const page = getBitcodeDocsPage(params.slug); + const page = getBitcodeDocsPage(resolveDocsSlug(params.slug)); if (!page) { return { @@ -35,7 +43,13 @@ export function generateMetadata({ params }: DocsRouteProps): Metadata { } export default function DocsRoutePage({ params }: DocsRouteProps) { - const page = getBitcodeDocsPage(params.slug); + const resolvedSlug = resolveDocsSlug(params.slug); + + if (resolvedSlug !== params.slug) { + redirect(`/docs/${resolvedSlug}`); + } + + const page = getBitcodeDocsPage(resolvedSlug); if (!page) { notFound(); diff --git a/uapi/app/docs/bitcode-docs-content.ts b/uapi/app/docs/bitcode-docs-content.ts index 29d2a146c..5c1f0899b 100644 --- a/uapi/app/docs/bitcode-docs-content.ts +++ b/uapi/app/docs/bitcode-docs-content.ts @@ -268,7 +268,7 @@ const exchangeSections = [ summary: 'A write is not trusted merely because a button returned success. The expected result is durable /packs reread with the right proof, readiness, and state posture.', detail: - 'V26 treats persistence, schema, route-owned state, execution history, and final work summaries as part of the product truth rather than incidental backend storage.', + 'The active Protocol treats persistence, schema, route-owned state, execution history, and final work summaries as part of the product truth rather than incidental backend storage.', reason: 'AssetPacks require state that can be audited later by a different surface, not just local UI continuity.', steps: [ @@ -498,7 +498,7 @@ const conversationsSections = [ summary: 'The conversational workspace lets users draft Reads, attach source context, reference AssetPacks, choose destinations, and coordinate outputs while still writing back into source-safe route state.', detail: - 'V26 treats conversations as a first-class interface because many high-quality technical Reads begin in natural language. The important boundary is that messages must normalize into proof readback evidence rather than remaining unstructured chat history.', + 'The active Protocol treats conversations as a first-class interface because many high-quality technical Reads begin in natural language. The important boundary is that messages must normalize into proof readback evidence rather than remaining unstructured chat history.', reason: 'This is how Bitcode can support ChatGPT-like workflows without losing protocol-grade auditability.', points: [ @@ -522,31 +522,31 @@ const conversationsSections = [ const protocolSections = [ { - id: 'v26-gates', - eyebrow: 'V26', - title: 'V26 is the productization canon for Bitcode', + id: 'active-canon', + eyebrow: 'Active canon', + title: 'V45 is active canon while V46 is draft target', summary: - 'V26 turns the retained repository into a Bitcode-owned product system through eight gates: ownership migration, application hardening, public teaching, retained-system convergence, minimum-functional product closure, MVP, commercial testnet readiness, and whole-repository provation.', + 'V45 is the active Protocol canon for Bitcode knowledge commoditization. V46 is the draft-target family for commercial protocol comprehension and claim boundaries.', detail: - 'The docs do not replace the canon. They teach it in product order, using the same object flow: source supply, measured Read, fit, proof, settlement, reads, interfaces, and promotion evidence.', + 'Public docs are not protocol law. They teach the active Protocol canon in product order, using the same object flow: source supply, measured Read, fit, proof, settlement, rights, interfaces, and promotion evidence.', reason: - 'New users read a simpler path, while experienced readers read to know where the simplified story maps back to V26.', + 'New users read a simpler path, while experienced readers read to know where the simplified story maps back to active law and V46 claim boundary work.', points: [ - 'Fifth gate is still open until minimum-functional product-route closure is proven.', - 'Sixth through eighth gates remain later V26 work.', - 'Public docs should not overclaim closure that the canon keeps open.', + 'V45 is the current pointer truth until a promotion workflow advances BITCODE_SPEC.txt.', + 'V46 claim boundary work may clarify public language but must not weaken V45 law.', + 'Public docs should not overclaim state that proof readback keeps blocked or unproven.', ], }, { id: 'domain-model', eyebrow: 'Domain model', - title: 'Every V26 subsystem must be learnable from source to proof', + title: 'Every Protocol subsystem must be learnable from source to proof', summary: 'The protocol covers repo supply, depositing, Read measurement, prompt and inference ownership, fit, recall, verification, selection, AssetPacks, identity, disclosure, settlement, proof families, telemetry, persistence, live interfaces, validation, and generated artifacts.', detail: 'Docs readers should be able to move from the high-level product story into any subsystem and understand what it owns, what can fail closed, and what evidence proves it.', reason: - 'This is the path toward documenting the whole V26 spec without forcing every user to start in canonical prose.', + 'This is the path toward documenting the whole active Protocol without forcing every user to start in canonical prose.', }, { id: 'operator-chain', @@ -567,7 +567,7 @@ const proofSections = [ eyebrow: 'Proof families', title: 'Proof families are the replayable evidence contracts behind AssetPacks', summary: - 'V26 carries proof-family canon for inference synthesis, prompt completeness, static code analysis, verification decisions, selection and materialization, authorization and sensitive flow, AssetPack settlement, disclosure boundary, and proof contract closure.', + 'The active Protocol carries proof-family canon for inference synthesis, prompt completeness, static code analysis, verification decisions, selection and materialization, authorization and sensitive flow, AssetPack settlement, disclosure boundary, and proof contract closure.', detail: 'Each family has members, theorem IDs, replay step IDs, witness artifact paths, artifact bindings, and fail-closed conditions. The product hides most of that detail until the user needs an exact read.', reason: @@ -594,7 +594,7 @@ const proofSections = [ eyebrow: 'Generated evidence', title: 'Generated appendices and proof artifacts are part of the system', summary: - 'V26 generated evidence includes spec-family reports, canonical input reports, gate checkpoints, proof appendices, application composition proof, conversations continuity, persistence/schema totality, retained package admissibility, and later closure witnesses.', + 'Generated evidence includes spec-family reports, canonical input reports, gate checkpoints, proof appendices, application composition proof, conversations continuity, persistence/schema totality, retained package admissibility, and later closure witnesses.', detail: 'When evidence is stale, missing, or inconsistent, Bitcode must fail closed rather than letting product language outrun proof truth.', reason: @@ -624,7 +624,7 @@ const settlementSections = [ eyebrow: 'Payment modes', title: 'Base-layer, repeated-read, and sidechain modes are interface postures', summary: - 'V26 records bitcoin mainchain execution, repeated-read payment execution, and sidechain execution as hardened interface responsibilities, not marketing labels.', + 'The active Protocol records bitcoin mainchain execution, repeated-read payment execution, and sidechain execution as hardened interface responsibilities, not marketing labels.', detail: 'In launch mode these may be mocked or boundary-only. The product must still teach what the modes mean, which receipts would prove them, and which blockers prevent live settlement.', reason: @@ -654,7 +654,7 @@ const commercialInterfaceSections = [ eyebrow: 'GitHub + webhooks', title: 'GitHub and webhooks are connected-interface delivery and ingress surfaces', summary: - 'GitHub can bind repository supply and deliver the V26 Shippable as a pull request. Webhooks can schedule AssetPack automation and record ingress basis.', + 'GitHub can bind repository supply and deliver the Protocol-backed Shippable as a pull request. Webhooks can schedule AssetPack automation and record ingress basis.', detail: 'Neither GitHub nor webhooks own product canon. Their job is to feed or receive Bitcode-controlled state and leave evidence behind.', reason: @@ -1860,23 +1860,23 @@ export const BITCODE_DOCS_PAGES = [ sections: configurationSections, }), docsPage({ - slug: 'protocol-v26', + slug: 'protocol', chapterId: 'protocol', eyebrow: 'Protocol', - title: 'Map the V26 Protocol canon', + title: 'Map the active Protocol canon', summary: - 'A guided version of the V26 canon: gates, object flow, domain model, operator chain, source map, validation, and promotion posture.', + 'A guided version of the active Protocol canon: AssetPack commodity flow, BTD scalar volume and rights, BTC settlement, claim authority, validation, and promotion posture.', detail: - 'Use this page to connect product docs to the canonical specification without reading every formal section first.', + 'Use this page to connect product docs to the canonical specification without reading every formal section first. V45 is active canon while V46 is draft target; Public docs are not protocol law.', learningOutcome: - 'You can navigate from public docs into V26 canon and understand which areas remain open by design.', + 'You can navigate from public docs into active Protocol canon and understand which areas remain open by design under the V46 claim boundary.', primaryCta: { href: '/docs/proofs', label: 'Read proof system' }, sections: protocolSections, embeddedUi: [ { id: 'canon-map', eyebrow: 'Protocol map', - title: 'V26 teaches product, proof, packages, and promotion together', + title: 'The active Protocol teaches product, proof, packages, and promotion together', summary: 'The Protocol is not a whitepaper beside the app. It is the operating contract product routes and interfaces must satisfy.', explainer: BITCODE_PUBLIC_EXPLAINERS.protocolSpec, @@ -2059,7 +2059,7 @@ export const BITCODE_DOCS_CHAPTERS = [ number: '03', title: 'Protocol And Proof', summary: 'Canon, proof families, generated evidence, settlement, BTD, disclosure, and fail-closed rules.', - pages: docsPagesFor(['protocol-v26', 'proofs', 'settlement-btd']), + pages: docsPagesFor(['protocol', 'proofs', 'settlement-btd']), }, { id: 'interfaces', diff --git a/uapi/app/docs/page.tsx b/uapi/app/docs/page.tsx index 65b9b0521..b01a460a5 100644 --- a/uapi/app/docs/page.tsx +++ b/uapi/app/docs/page.tsx @@ -9,7 +9,7 @@ import { MARKETING_OPERATOR_GUIDE_SOURCE } from '../(root)/components/marketing- export const metadata: Metadata = { title: 'Bitcode Docs', description: - 'Learn Bitcode from Source Shares through Exchange, Terminal, proofs, settlement, Auxillaries, MCP/API, ChatGPT App, and connected interfaces.', + 'Learn Bitcode from AssetPacks, /packs, /read, /deposit, proofs, settlement, Auxillaries, MCP/API, ChatGPT App, and connected interfaces.', alternates: { canonical: '/docs', }, diff --git a/uapi/components/base/bitcode/layout/bitcode-public-explainers.ts b/uapi/components/base/bitcode/layout/bitcode-public-explainers.ts index f81ff5792..040022012 100644 --- a/uapi/components/base/bitcode/layout/bitcode-public-explainers.ts +++ b/uapi/components/base/bitcode/layout/bitcode-public-explainers.ts @@ -79,6 +79,7 @@ export const BITCODE_PUBLIC_EXPLAINERS = { 'This is the reference document for how Bitcode works. It is meant for readers who want the precise model behind the protocol and commercial interfaces.', points: [ 'Covers system semantics and proof-bearing posture', + 'Protocol law and proof readback decide state', 'Useful for partners, researchers, and implementation review', ], }), diff --git a/uapi/tests/bitcodeDocsContent.test.tsx b/uapi/tests/bitcodeDocsContent.test.tsx index 884514094..f15bdbd68 100644 --- a/uapi/tests/bitcodeDocsContent.test.tsx +++ b/uapi/tests/bitcodeDocsContent.test.tsx @@ -19,8 +19,23 @@ describe('Bitcode docs content model', () => { expect(serialized).toContain('/read'); expect(serialized).toContain('/packs'); expect(serialized).toContain('/exchange is a compatibility redirect to /packs'); - expect(serialized).not.toContain('Source Shares and the Bitcode Exchange'); - expect(serialized).not.toContain('Exchange is the durable state'); + expect(serialized).not.toContain(['Source Shares', 'and the Bitcode Exchange'].join(' ')); + expect(serialized).not.toContain(['Exchange is', 'the durable state'].join(' ')); + expect(serialized).not.toContain(['Map the V26', 'Protocol canon'].join(' ')); + expect(serialized).not.toContain(['V26', 'coverage'].join(' ')); + expect(serialized).not.toContain(['quote is', 'payment'].join(' ')); + expect(serialized).not.toContain(['payment observation is', 'finality'].join(' ')); + expect(serialized).not.toContain(['database is', 'ledger truth'].join(' ')); + }); + + it('publishes the active protocol article through current claim-boundary vocabulary', () => { + const page = getBitcodeDocsPage('protocol'); + const serialized = JSON.stringify(page); + + expect(page?.title).toBe('Map the active Protocol canon'); + expect(serialized).toContain('V45 is active canon while V46 is draft target'); + expect(serialized).toContain('Public docs are not protocol law'); + expect(serialized).toContain('V46 claim boundary'); }); it('documents ChatGPT App tools as API-style usage features', () => { diff --git a/uapi/tests/e2e/bitcode-browser-proof.spec.ts b/uapi/tests/e2e/bitcode-browser-proof.spec.ts index b89d13ebc..0f69b89d6 100644 --- a/uapi/tests/e2e/bitcode-browser-proof.spec.ts +++ b/uapi/tests/e2e/bitcode-browser-proof.spec.ts @@ -90,9 +90,9 @@ test.describe('Bitcode browser proof across product surfaces', () => { await expect(page.getByRole('button', { name: /mock-run-branch-remediation/i })).toBeVisible(); await expectNoHorizontalOverflow(page, 'Exchange rights review'); - await openCommercialRoute(page, '/docs', /Learn Bitcode from Source Shares to proof/i); - await expect(page.getByText(/Terminal action manual/i)).toBeVisible(); - await expect(page.getByRole('link', { name: /Terminal action manual/i })).toBeVisible(); + await openCommercialRoute(page, '/docs', /Learn Bitcode from AssetPacks to proof/i); + await expect(page.getByText(/Action manual/i)).toBeVisible(); + await expect(page.getByRole('link', { name: /Action manual/i })).toBeVisible(); await expectNoHorizontalOverflow(page, 'source-safe public docs'); await trap.assertClean(); diff --git a/uapi/tests/e2e/commercial-mvp.conversations-docs.spec.ts b/uapi/tests/e2e/commercial-mvp.conversations-docs.spec.ts index 537452280..62b27cfcf 100644 --- a/uapi/tests/e2e/commercial-mvp.conversations-docs.spec.ts +++ b/uapi/tests/e2e/commercial-mvp.conversations-docs.spec.ts @@ -33,7 +33,7 @@ test.describe('commercial MVP conversations and docs experiences', () => { const input = page.locator('textarea.rich-text-input').last(); await expect(input).toBeVisible(); - await input.fill('Summarize the selected Read and keep the result Exchange-readable.'); + await input.fill('Summarize the selected Read and keep the result Packs-readable.'); await input.press('Enter'); await expect(page.getByText(/Summarize the selected Read/i).first()).toBeVisible(); @@ -52,17 +52,17 @@ test.describe('commercial MVP conversations and docs experiences', () => { }, testInfo) => { const trap = installCommercialBrowserErrorTrap(page, testInfo); - await openCommercialRoute(page, '/docs', /Learn Bitcode from Source Shares to proof/i); + await openCommercialRoute(page, '/docs', /Learn Bitcode from AssetPacks to proof/i); - await expect(page.getByText(/Start with Source Shares/i)).toBeVisible(); + await expect(page.getByText(/Start with AssetPacks/i)).toBeVisible(); await expect( page.getByText( - 'Then separate Exchange state from Terminal operation before opening write controls.', + 'Then learn /deposit, /read, and /packs before opening value-bearing controls.', ), ).toBeVisible(); - await expect(page.getByText(/Terminal action manual/i)).toBeVisible(); + await expect(page.getByText(/Action manual/i)).toBeVisible(); - await page.getByRole('link', { name: /Terminal action manual/i }).click(); + await page.getByRole('link', { name: /Action manual/i }).click(); await expect(page).toHaveURL(/\/docs\/terminal-actions$/); await expectCommercialRouteReady(page, /Terminal actions: what writes and what should read back/i); await expect(page.getByText(/Every Terminal write should have an expected read result/i)).toBeVisible(); @@ -75,9 +75,9 @@ test.describe('commercial MVP conversations and docs experiences', () => { }, testInfo) => { const trap = installCommercialBrowserErrorTrap(page, testInfo); - await openCommercialRoute(page, '/docs/exchange', /Understand the Bitcode Exchange/i); + await openCommercialRoute(page, '/docs/exchange', /Understand \/exchange compatibility and \/packs/i); - await expect(page.getByText(/Exchange is the durable state/i)).toBeVisible(); + await expect(page.getByText(/\/exchange redirects to \/packs/i)).toBeVisible(); await page.getByRole('link', { name: /Open Terminal map/i }).click(); await expect(page).toHaveURL(/\/docs\/terminal$/); await expectCommercialRouteReady(page, /Orient inside the Bitcode Terminal/i); diff --git a/uapi/tests/e2e/commercial-mvp.routes.spec.ts b/uapi/tests/e2e/commercial-mvp.routes.spec.ts index d1588ac0d..58a67c5c7 100644 --- a/uapi/tests/e2e/commercial-mvp.routes.spec.ts +++ b/uapi/tests/e2e/commercial-mvp.routes.spec.ts @@ -40,7 +40,7 @@ const ROUTE_SMOKE_MATRIX = [ }, { path: '/docs', - expected: /Learn Bitcode from Source Shares to proof/i, + expected: /Learn Bitcode from AssetPacks to proof/i, name: 'docs home', }, { @@ -50,7 +50,7 @@ const ROUTE_SMOKE_MATRIX = [ }, { path: '/docs/source-shares', - expected: /Source Shares and the Bitcode Exchange/i, + expected: /AssetPacks, BTD, and the Bitcode activity ledger/i, name: 'source-shares docs', }, { @@ -79,8 +79,8 @@ const ROUTE_SMOKE_MATRIX = [ name: 'configuration docs', }, { - path: '/docs/protocol-v26', - expected: /Map the V26 Protocol canon/i, + path: '/docs/protocol', + expected: /Map the active Protocol canon/i, name: 'protocol canon docs', }, { @@ -142,7 +142,7 @@ test.describe('commercial MVP route surfaces', () => { await page.locator('a[href="/docs"]').first().click(); await expect(page).toHaveURL(/\/docs$/); - await expectCommercialRouteReady(page, /Learn Bitcode from Source Shares to proof/i); + await expectCommercialRouteReady(page, /Learn Bitcode from AssetPacks to proof/i); await trap.assertClean(); }); diff --git a/uapi/tests/publicDocsPageContent.test.tsx b/uapi/tests/publicDocsPageContent.test.tsx index 0d7d4a961..fdb884ebe 100644 --- a/uapi/tests/publicDocsPageContent.test.tsx +++ b/uapi/tests/publicDocsPageContent.test.tsx @@ -23,7 +23,10 @@ describe('PublicDocsPageContent', () => { expect(screen.getByText('Learn Bitcode from AssetPacks to proof.')).toBeInTheDocument(); expect(screen.getByRole('link', { name: 'Start reading' })).toHaveAttribute('href', '/docs/what-is-bitcode'); expect(screen.getByText('Read in this order if Bitcode is new.')).toBeInTheDocument(); - expect(screen.getByText('Product docs map back to the canon.')).toBeInTheDocument(); + expect(screen.getByText('Product docs map back to the active canon.')).toBeInTheDocument(); + expect(screen.getByText('V45 / V46 claim boundary')).toBeInTheDocument(); + expect(screen.getByText(/Protocol docs map back to active law/)).toBeInTheDocument(); + expect(screen.getByText(/Public docs explain; proof readback decides/)).toBeInTheDocument(); expect(screen.getByText('Interface API references')).toBeInTheDocument(); expect(screen.getByText('Build against Bitcode without losing proof readback authority.')).toBeInTheDocument(); expect(screen.getByText('00 / Start Here')).toBeInTheDocument();