diff --git a/.bitcode/v42-ai-reading-demonstration.json b/.bitcode/v42-ai-reading-demonstration.json
new file mode 100644
index 00000000..c83b2485
--- /dev/null
+++ b/.bitcode/v42-ai-reading-demonstration.json
@@ -0,0 +1,416 @@
+{
+ "artifactId": "v42-ai-reading-demonstration",
+ "schemaId": "bitcode.v42.aiReadingDemonstration.v1",
+ "version": "V42",
+ "currentTarget": "V41",
+ "sourceSafetyVerdict": "source-safe-v42-ai-reading-demonstration-metadata",
+ "rowIds": [
+ "baseline:public-data-only-ai-reading",
+ "need:source-bound-read-comprehension",
+ "fits:local-depository-assetpack-selection",
+ "assetpack:enhanced-ai-reading",
+ "measurement:benchmark-uplift",
+ "source-safety:settlement-gated-disclosure",
+ "boundary:self-contained-demonstration",
+ "proof:artifact-tests-workflows"
+ ],
+ "rows": [
+ {
+ "rowId": "baseline:public-data-only-ai-reading",
+ "purpose": "Represent the public-data-only AI answer as the baseline before any AssetPack knowledge is available.",
+ "sourceRoots": [
+ "protocol-demonstration/src/ai-reading-demonstration.js",
+ "protocol-demonstration/test/v42-ai-reading-mvp.test.js"
+ ],
+ "emittedTypes": [
+ "publicDataOnlyBaseline",
+ "scoreAssistantResponse"
+ ],
+ "requiredEvidence": [
+ "public-data-only",
+ "missingTerms",
+ "scoreBp"
+ ],
+ "rowRoot": "v42-ai-reading-demonstration-row:5ffb14f264ed1562ad56f42c",
+ "sourceSafetyClass": "source_safe_v42_ai_reading_demonstration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "outsideRuntimeImportRequired": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "secret-values",
+ "outside-runtime-imports"
+ ]
+ },
+ {
+ "rowId": "need:source-bound-read-comprehension",
+ "purpose": "Reuse the local ReadNeed synthesis loop so the demonstration starts from a reviewed source-bound Need.",
+ "sourceRoots": [
+ "protocol-demonstration/src/ai-reading-demonstration.js",
+ "protocol-demonstration/src/local-fit-finding.js",
+ "protocol-demonstration/test/v42-ai-reading-mvp.test.js"
+ ],
+ "emittedTypes": [
+ "readNeed",
+ "synthesizeReadNeedLocally",
+ "acceptReadNeedLocally"
+ ],
+ "requiredEvidence": [
+ "Acquire an AssetPack",
+ "needs_acceptance",
+ "accepted"
+ ],
+ "rowRoot": "v42-ai-reading-demonstration-row:442af48e760474900ab98cc6",
+ "sourceSafetyClass": "source_safe_v42_ai_reading_demonstration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "outsideRuntimeImportRequired": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "secret-values",
+ "outside-runtime-imports"
+ ]
+ },
+ {
+ "rowId": "fits:local-depository-assetpack-selection",
+ "purpose": "Find the deposited AssetPack candidate locally, rank it, and preserve proof roots without importing product code.",
+ "sourceRoots": [
+ "protocol-demonstration/src/ai-reading-demonstration.js",
+ "protocol-demonstration/src/local-fit-finding.js",
+ "protocol-demonstration/test/v42-ai-reading-mvp.test.js"
+ ],
+ "emittedTypes": [
+ "findNeedFitLocally",
+ "selectedDepositIds",
+ "rankingRoot"
+ ],
+ "requiredEvidence": [
+ "deposit-auth-migration-runbook",
+ "worthy_fit",
+ "queryRoot"
+ ],
+ "rowRoot": "v42-ai-reading-demonstration-row:86b108220396ff6f9cd23c24",
+ "sourceSafetyClass": "source_safe_v42_ai_reading_demonstration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "outsideRuntimeImportRequired": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "secret-values",
+ "outside-runtime-imports"
+ ]
+ },
+ {
+ "rowId": "assetpack:enhanced-ai-reading",
+ "purpose": "Apply the selected AssetPack knowledge to the AI answer after rights are available, while pre-settlement source remains withheld.",
+ "sourceRoots": [
+ "protocol-demonstration/src/ai-reading-demonstration.js",
+ "protocol-demonstration/test/v42-ai-reading-mvp.test.js"
+ ],
+ "emittedTypes": [
+ "assetPackEnhancedReading",
+ "assetPackPreview",
+ "sourceSafety"
+ ],
+ "requiredEvidence": [
+ "assetpack-enhanced-after-rights",
+ "withheld_until_settlement",
+ "sourceBearingDeliveryRequiresSettlement"
+ ],
+ "rowRoot": "v42-ai-reading-demonstration-row:2b0ecabe25a5188357a9fb9c",
+ "sourceSafetyClass": "source_safe_v42_ai_reading_demonstration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "outsideRuntimeImportRequired": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "secret-values",
+ "outside-runtime-imports"
+ ]
+ },
+ {
+ "rowId": "measurement:benchmark-uplift",
+ "purpose": "Measure basis-point improvement between public baseline and AssetPack-enhanced reading.",
+ "sourceRoots": [
+ "protocol-demonstration/src/ai-reading-demonstration.js",
+ "protocol-demonstration/src/benchmark-model.js",
+ "protocol-demonstration/test/v42-ai-reading-mvp.test.js"
+ ],
+ "emittedTypes": [
+ "benchmark",
+ "improvement",
+ "buildBenchmarkComparison"
+ ],
+ "requiredEvidence": [
+ "minimumUpliftBp",
+ "upliftBp",
+ "treatmentBp"
+ ],
+ "rowRoot": "v42-ai-reading-demonstration-row:63b02f505c01000a26880b15",
+ "sourceSafetyClass": "source_safe_v42_ai_reading_demonstration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "outsideRuntimeImportRequired": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "secret-values",
+ "outside-runtime-imports"
+ ]
+ },
+ {
+ "rowId": "source-safety:settlement-gated-disclosure",
+ "purpose": "Keep protected source and unpaid AssetPack source out of the demonstration result and preview.",
+ "sourceRoots": [
+ "protocol-demonstration/src/ai-reading-demonstration.js",
+ "protocol-demonstration/test/v42-ai-reading-mvp.test.js",
+ "protocol-demonstration/test/v28-boundary-separation.test.js"
+ ],
+ "emittedTypes": [
+ "sourceSafety",
+ "assetPackPreview"
+ ],
+ "requiredEvidence": [
+ "protectedSourceBeforeSettlement",
+ "publicBaselineUsesDepositorySource: false",
+ "v28-boundary-separation"
+ ],
+ "rowRoot": "v42-ai-reading-demonstration-row:d92819266a8a7ecb1ed19f3c",
+ "sourceSafetyClass": "source_safe_v42_ai_reading_demonstration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "outsideRuntimeImportRequired": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "secret-values",
+ "outside-runtime-imports"
+ ]
+ },
+ {
+ "rowId": "boundary:self-contained-demonstration",
+ "purpose": "Maintain the demonstration as self-contained code with no product runtime imports.",
+ "sourceRoots": [
+ "protocol-demonstration/src/ai-reading-demonstration.js",
+ "protocol-demonstration/src/index.js",
+ "protocol-demonstration/package.json",
+ "protocol-demonstration/test/v28-boundary-separation.test.js"
+ ],
+ "emittedTypes": [
+ "runAiReadingDominantDemonstration",
+ "buildAiReadingDemonstrationInput"
+ ],
+ "requiredEvidence": [
+ "outsideSourceImportsAllowed: false",
+ "test:v42-ai-reading-mvp",
+ "does not import outside source"
+ ],
+ "rowRoot": "v42-ai-reading-demonstration-row:16dc6761067d69eec8e9dff5",
+ "sourceSafetyClass": "source_safe_v42_ai_reading_demonstration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "outsideRuntimeImportRequired": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "secret-values",
+ "outside-runtime-imports"
+ ]
+ },
+ {
+ "rowId": "proof:artifact-tests-workflows",
+ "purpose": "Bind V42 Gate 7 closure to generated artifact, protocol test, demonstration test, docs, package scripts, and workflows.",
+ "sourceRoots": [
+ "packages/protocol/test/v42-ai-reading-demonstration.test.js",
+ "package.json",
+ ".github/workflows/bitcode-gate-quality.yml",
+ ".github/workflows/bitcode-canon-quality.yml"
+ ],
+ "emittedTypes": [
+ "V42AiReadingDemonstration"
+ ],
+ "requiredEvidence": [
+ "v42-ai-reading-demonstration",
+ "check-v42-gate7-ai-reading-demonstration.mjs"
+ ],
+ "rowRoot": "v42-ai-reading-demonstration-row:e57a2afa0a3f278e270c8196",
+ "sourceSafetyClass": "source_safe_v42_ai_reading_demonstration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "outsideRuntimeImportRequired": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "secret-values",
+ "outside-runtime-imports"
+ ]
+ }
+ ],
+ "predicateResults": [
+ {
+ "id": "demo-runtime-builds-input",
+ "sourcePath": "protocol-demonstration/src/ai-reading-demonstration.js",
+ "passed": true
+ },
+ {
+ "id": "demo-runtime-runs-fit-search",
+ "sourcePath": "protocol-demonstration/src/ai-reading-demonstration.js",
+ "passed": true
+ },
+ {
+ "id": "demo-runtime-measures-uplift",
+ "sourcePath": "protocol-demonstration/src/ai-reading-demonstration.js",
+ "passed": true
+ },
+ {
+ "id": "demo-runtime-source-safe",
+ "sourcePath": "protocol-demonstration/src/ai-reading-demonstration.js",
+ "passed": true
+ },
+ {
+ "id": "demo-index-exports-runtime",
+ "sourcePath": "protocol-demonstration/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "demo-test-proves-uplift",
+ "sourcePath": "protocol-demonstration/test/v42-ai-reading-mvp.test.js",
+ "passed": true
+ },
+ {
+ "id": "demo-test-proves-determinism",
+ "sourcePath": "protocol-demonstration/test/v42-ai-reading-mvp.test.js",
+ "passed": true
+ },
+ {
+ "id": "demo-boundary-test-retained",
+ "sourcePath": "protocol-demonstration/test/v28-boundary-separation.test.js",
+ "passed": true
+ },
+ {
+ "id": "demo-package-script-wired",
+ "sourcePath": "protocol-demonstration/package.json",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-wired",
+ "sourcePath": "packages/protocol/test/v42-ai-reading-demonstration.test.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-export-wired",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "package-scripts-wired",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "workflows-run-gate7",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "v42-docs-expanded",
+ "sourcePath": "BITCODE_SPEC_V42.md",
+ "passed": true
+ },
+ {
+ "id": "v42-delta-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "v42-notes-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "v42-parity-implemented",
+ "sourcePath": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate7-closure",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readmes-document-gate7",
+ "sourcePath": "README.md",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "rowCount": 8,
+ "sourceSafetyVerdict": "source-safe-v42-ai-reading-demonstration-metadata",
+ "demonstrationRuntime": "protocol-demonstration/src/ai-reading-demonstration.js",
+ "demonstrationTest": "protocol-demonstration/test/v42-ai-reading-mvp.test.js",
+ "baselineMode": "public-data-only",
+ "enhancedMode": "assetpack-enhanced-after-rights",
+ "minimumUpliftBp": 2400,
+ "expectedBaselineBp": 0,
+ "expectedTreatmentBp": 10000,
+ "expectedSelectedDepositId": "deposit-auth-migration-runbook",
+ "expectedFitResultState": "worthy_fit",
+ "protectedSourceBeforeSettlement": "withheld_until_settlement",
+ "sourceBearingDeliveryRequiresSettlement": true,
+ "deterministicLocalOnly": true,
+ "selfContainedDemonstration": true,
+ "outsideRuntimeImportRequired": false,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "failedPredicateIds": []
+ },
+ "passed": true,
+ "artifactRoot": "v42-ai-reading-demonstration:8d5fb53a20ade8253f106da8"
+}
diff --git a/.bitcode/v42-canon-posture-drift-report.json b/.bitcode/v42-canon-posture-drift-report.json
new file mode 100644
index 00000000..d3543eb3
--- /dev/null
+++ b/.bitcode/v42-canon-posture-drift-report.json
@@ -0,0 +1,77 @@
+{
+ "reportId": "v42-canon-posture-drift-report",
+ "version": "V42",
+ "checkedActiveCanonVersion": "V42",
+ "checkedDraftTargetVersion": "V43",
+ "pointerVersion": "V42",
+ "proofSourceCommit": "5c9c0270b9d864fe13b7e0a429700e1c9a7689d9",
+ "generatedAt": "2026-05-28T21:36:43-03:00",
+ "generatorId": "bitcode.proven-generator.v1",
+ "worktreeState": "clean",
+ "passed": true,
+ "checkCount": 10,
+ "blockingFailureCount": 0,
+ "blockingFailures": [],
+ "runtimeSpecVersion": "Bitcode Spec V42 active canon / V43 system draft",
+ "publicSpecVersion": "Bitcode Spec V42 active canon / V43 system draft",
+ "activeProvenAppendixPath": "BITCODE_SPEC_V42_PROVEN.md",
+ "policyRef": "policy://bitcode/spec-v42-active-v43-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 V42 while runtime expects V42."
+ },
+ {
+ "checkId": "canon-posture-constant-alignment",
+ "passed": true,
+ "detail": "canon-posture constants resolve V42/V43 with operator label V42 active canon / V43 system draft."
+ },
+ {
+ "checkId": "proven-appendix-alignment",
+ "passed": true,
+ "detail": "active generated appendix path is BITCODE_SPEC_V42_PROVEN.md."
+ },
+ {
+ "checkId": "policy-ref-alignment",
+ "passed": true,
+ "detail": "policy reference is policy://bitcode/spec-v42-active-v43-system-draft/current."
+ },
+ {
+ "checkId": "runtime-state-alignment",
+ "passed": true,
+ "detail": "buildInitialState() reports Bitcode Spec V42 active canon / V43 system draft with canon posture V42/V43."
+ },
+ {
+ "checkId": "public-state-alignment",
+ "passed": true,
+ "detail": "publicState() reports Bitcode Spec V42 active canon / V43 system draft with canon posture V42/V43."
+ },
+ {
+ "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 V42 active canon and BITCODE_SPEC_V42_PROVEN.md as the current generated appendix."
+ }
+ ]
+}
diff --git a/.bitcode/v42-canonical-input-report.json b/.bitcode/v42-canonical-input-report.json
new file mode 100644
index 00000000..9dc33c98
--- /dev/null
+++ b/.bitcode/v42-canonical-input-report.json
@@ -0,0 +1,30 @@
+{
+ "reportId": "v42-canonical-input-report",
+ "version": "V42",
+ "proofSourceCommit": "5c9c0270b9d864fe13b7e0a429700e1c9a7689d9",
+ "generatedAt": "2026-05-28T21:36:43-03:00",
+ "generatorId": "bitcode.proven-generator.v1",
+ "worktreeState": "clean",
+ "checkedTargetVersion": "V42",
+ "pointerVersion": "V42",
+ "passed": true,
+ "failureCount": 0,
+ "failures": [],
+ "specPath": "BITCODE_SPEC_V42.md",
+ "notesPath": "BITCODE_SPEC_V42_NOTES.md",
+ "provenPath": "BITCODE_SPEC_V42_PROVEN.md",
+ "parityPath": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "requiredGeneratedArtifactPaths": [
+ ".bitcode/v42-spec-family-report.json",
+ ".bitcode/v42-canonical-input-report.json",
+ ".bitcode/v42-depositing-shortest-path.json",
+ ".bitcode/v42-reading-shortest-path-state-machine.json",
+ ".bitcode/v42-readneed-review-resynthesis-product-closure.json",
+ ".bitcode/v42-readfitsfinding-preview-quote.json",
+ ".bitcode/v42-settlement-rights-delivery.json",
+ ".bitcode/v42-ai-reading-demonstration.json",
+ ".bitcode/v42-local-staging-mvp-rehearsal.json",
+ ".bitcode/v42-promotion-readiness-report.json"
+ ],
+ "requiredGeneratedArtifactCount": 10
+}
diff --git a/.bitcode/v42-depositing-shortest-path.json b/.bitcode/v42-depositing-shortest-path.json
new file mode 100644
index 00000000..e8a84d7f
--- /dev/null
+++ b/.bitcode/v42-depositing-shortest-path.json
@@ -0,0 +1,483 @@
+{
+ "artifactId": "v42-depositing-shortest-path",
+ "schemaId": "bitcode.v42.depositingShortestPath.v1",
+ "version": "V42",
+ "currentTarget": "V41",
+ "sourceSafetyVerdict": "source-safe-depositing-compensation-visibility-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v42-depositing-shortest-path:1059291e830568845da67d9e",
+ "passed": true,
+ "rows": [
+ {
+ "rowId": "path:source-to-admission-proof",
+ "purpose": "Make the shortest Depositing path explicit: source material, repository/source anchor, Depository admission, source-safe proof roots, and next Reading handoff.",
+ "sourceRoots": [
+ "packages/protocol/server.js",
+ "packages/protocol/src/bitcode-demo.js",
+ "uapi/app/api/deposits/route.ts",
+ "uapi/app/terminal/TerminalDepositComposer.tsx"
+ ],
+ "emittedTypes": [
+ "createDeposit",
+ "buildDepositoryEvidence",
+ "TerminalDepositResponseEvidence"
+ ],
+ "requiredEvidence": [
+ "repositoryFullName",
+ "sourceBranch",
+ "sourceCommit",
+ "proofRoot",
+ "measurementRoot"
+ ],
+ "rowRoot": "v42-depositing-shortest-path-row:7e931285b6eabbbcce8b6855",
+ "sourceSafetyClass": "source_safe_depositing_compensation_visibility_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "settlement-private-payloads"
+ ]
+ },
+ {
+ "rowId": "api:deposit-route-readiness-contract",
+ "purpose": "Keep POST /api/deposits admitted only after signed transaction and repository readiness checks, then project source-safe Depository evidence.",
+ "sourceRoots": [
+ "uapi/app/api/deposits/route.ts",
+ "packages/protocol/server.js",
+ "packages/protocol/test/protocol-package-boundary.test.js"
+ ],
+ "emittedTypes": [
+ "requireBitcodeSignedTransactionReadiness",
+ "BitcodeAppContext.createDeposit"
+ ],
+ "requiredEvidence": [
+ "requiresRepositoryAnchor",
+ "repositoryProvider",
+ "walletAuthorizationProof"
+ ],
+ "rowRoot": "v42-depositing-shortest-path-row:ce3fb56bc4fbed8d5867fda9",
+ "sourceSafetyClass": "source_safe_depositing_compensation_visibility_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "settlement-private-payloads"
+ ]
+ },
+ {
+ "rowId": "supply:depository-record-compensation-preview",
+ "purpose": "Attach a deterministic compensation preview to DepositorySupplyRecord without minting BTD or exposing source before an accepted Need-Fit and settlement.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/depository-supply-index.ts",
+ "packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts",
+ "packages/pipelines/asset-pack/src/embedding-config.ts"
+ ],
+ "emittedTypes": [
+ "DepositorySupplyCompensationPreview",
+ "DepositorySupplyRecord.compensationPreview"
+ ],
+ "requiredEvidence": [
+ "source-to-shares-largest-remainder",
+ "not-minted-by-deposit-admission",
+ "compensationPreviewRoot"
+ ],
+ "rowRoot": "v42-depositing-shortest-path-row:c51d568dcab3bc943f6a6a98",
+ "sourceSafetyClass": "source_safe_depositing_compensation_visibility_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "settlement-private-payloads"
+ ]
+ },
+ {
+ "rowId": "documents:source-safe-search-and-vector-projection",
+ "purpose": "Preserve source-safe lexical, metadata, measurement, and vector search documents so deposits become searchable without protected source payloads.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/depository-supply-index.ts",
+ "packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts"
+ ],
+ "emittedTypes": [
+ "DepositorySupplySearchDocument",
+ "DepositorySupplyVectorProjection"
+ ],
+ "requiredEvidence": [
+ "text-embedding-3-small",
+ "1536",
+ "match_deliverable_vectors"
+ ],
+ "rowRoot": "v42-depositing-shortest-path-row:54e3a870b07b258bde48dd92",
+ "sourceSafetyClass": "source_safe_depositing_compensation_visibility_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "settlement-private-payloads"
+ ]
+ },
+ {
+ "rowId": "storage:depository-readback-projection",
+ "purpose": "Bind Depository admission to durable source-safe storage readback through deliverables, vector rows, ledger rows, and source-to-shares allocation posture.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/depository-supply-index.ts",
+ "packages/pipelines/asset-pack/README.md",
+ "BITCODE_SPEC_V42.md"
+ ],
+ "emittedTypes": [
+ "DepositorySupplyStorageProjection",
+ "compensationPreview.readback"
+ ],
+ "requiredEvidence": [
+ "deliverables",
+ "deliverable_vectors",
+ "ledger_entries",
+ "source_to_shares_allocations"
+ ],
+ "rowRoot": "v42-depositing-shortest-path-row:ce303882896d4c8adb8abde6",
+ "sourceSafetyClass": "source_safe_depositing_compensation_visibility_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "settlement-private-payloads"
+ ]
+ },
+ {
+ "rowId": "ledger:source-to-shares-compensation-readback",
+ "purpose": "Record depositor compensation visibility through pending-claim and eligible-route ledger keys while deferring actual BTC allocation until paid AssetPack settlement.",
+ "sourceRoots": [
+ "packages/protocol/server.js",
+ "packages/protocol/src/bitcode-demo.js",
+ "packages/protocol/test/protocol-package-boundary.test.js"
+ ],
+ "emittedTypes": [
+ "ledger.accounts",
+ "compensationPreview.readback.ledgerAccountKeys"
+ ],
+ "requiredEvidence": [
+ "pending_claims",
+ "eligible_compensation_routes",
+ "future-reader-after-settlement"
+ ],
+ "rowRoot": "v42-depositing-shortest-path-row:5bcf92e8564e1d3d5ac09fd9",
+ "sourceSafetyClass": "source_safe_depositing_compensation_visibility_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "settlement-private-payloads"
+ ]
+ },
+ {
+ "rowId": "terminal:compensation-visibility-readback",
+ "purpose": "Show source-safe compensation posture in Terminal and carry compensation roots through activity history and the deposit-to-read workbench.",
+ "sourceRoots": [
+ "uapi/app/terminal/TerminalDepositComposer.tsx",
+ "uapi/app/terminal/terminal-activity-history.ts",
+ "uapi/app/terminal/terminal-deposit-read-workbench.ts",
+ "uapi/app/terminal/terminal-run-data.ts"
+ ],
+ "emittedTypes": [
+ "TerminalDepositResponseEvidence",
+ "WorkspaceRun",
+ "TerminalDepositedSourceRevision"
+ ],
+ "requiredEvidence": [
+ "compensationPreviewRoot",
+ "sourceToSharesPreviewRoot",
+ "Compensation route"
+ ],
+ "rowRoot": "v42-depositing-shortest-path-row:5ac46b95fa31585ff8f7ecef",
+ "sourceSafetyClass": "source_safe_depositing_compensation_visibility_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "settlement-private-payloads"
+ ]
+ },
+ {
+ "rowId": "rehearsal:local-staging-deposit-readback",
+ "purpose": "Keep Gate 2 locally checkable and staging-testnet rehearsable through package tests, protocol route tests, generated artifact checks, and source-safe proof rows.",
+ "sourceRoots": [
+ "BITCODE_SPEC_V42.md",
+ "BITCODE_SPEC_V42_DELTA.md",
+ "BITCODE_SPEC_V42_NOTES.md",
+ "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "SPECIFICATIONS_ROADMAP.md"
+ ],
+ "emittedTypes": [
+ "V42DepositingShortestPathReport"
+ ],
+ "requiredEvidence": [
+ "local/staging rehearsal",
+ "staging-testnet",
+ "check:v42-gate2"
+ ],
+ "rowRoot": "v42-depositing-shortest-path-row:b87642ce4dfa333fd4b4ea03",
+ "sourceSafetyClass": "source_safe_depositing_compensation_visibility_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "settlement-private-payloads"
+ ]
+ }
+ ],
+ "rowIds": [
+ "path:source-to-admission-proof",
+ "api:deposit-route-readiness-contract",
+ "supply:depository-record-compensation-preview",
+ "documents:source-safe-search-and-vector-projection",
+ "storage:depository-readback-projection",
+ "ledger:source-to-shares-compensation-readback",
+ "terminal:compensation-visibility-readback",
+ "rehearsal:local-staging-deposit-readback"
+ ],
+ "predicateResults": [
+ {
+ "id": "deposit-route-requires-readiness",
+ "sourcePath": "uapi/app/api/deposits/route.ts",
+ "passed": true
+ },
+ {
+ "id": "server-creates-deposit-and-ledger-readback",
+ "sourcePath": "packages/protocol/server.js",
+ "passed": true
+ },
+ {
+ "id": "runtime-builds-compensation-preview",
+ "sourcePath": "packages/protocol/src/bitcode-demo.js",
+ "passed": true
+ },
+ {
+ "id": "runtime-keeps-source-safe-visibility",
+ "sourcePath": "packages/protocol/src/bitcode-demo.js",
+ "passed": true
+ },
+ {
+ "id": "supply-index-defines-compensation-preview",
+ "sourcePath": "packages/pipelines/asset-pack/src/depository-supply-index.ts",
+ "passed": true
+ },
+ {
+ "id": "supply-index-defers-btd-mint",
+ "sourcePath": "packages/pipelines/asset-pack/src/depository-supply-index.ts",
+ "passed": true
+ },
+ {
+ "id": "supply-index-projects-source-to-shares-readback",
+ "sourcePath": "packages/pipelines/asset-pack/src/depository-supply-index.ts",
+ "passed": true
+ },
+ {
+ "id": "supply-index-preserves-search-documents",
+ "sourcePath": "packages/pipelines/asset-pack/src/depository-supply-index.ts",
+ "passed": true
+ },
+ {
+ "id": "supply-tests-cover-compensation-preview",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts",
+ "passed": true
+ },
+ {
+ "id": "supply-tests-cover-no-protected-source",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-covers-compensation-route",
+ "sourcePath": "packages/protocol/test/protocol-package-boundary.test.js",
+ "passed": true
+ },
+ {
+ "id": "terminal-composer-captures-compensation-roots",
+ "sourcePath": "uapi/app/terminal/TerminalDepositComposer.tsx",
+ "passed": true
+ },
+ {
+ "id": "terminal-history-maps-compensation-roots",
+ "sourcePath": "uapi/app/terminal/terminal-activity-history.ts",
+ "passed": true
+ },
+ {
+ "id": "terminal-workbench-shows-compensation-rows",
+ "sourcePath": "uapi/app/terminal/terminal-deposit-read-workbench.ts",
+ "passed": true
+ },
+ {
+ "id": "workspace-run-carries-compensation-fields",
+ "sourcePath": "uapi/app/terminal/terminal-run-data.ts",
+ "passed": true
+ },
+ {
+ "id": "asset-pack-readme-documents-compensation-preview",
+ "sourcePath": "packages/pipelines/asset-pack/README.md",
+ "passed": true
+ },
+ {
+ "id": "v42-spec-gate2-expanded",
+ "sourcePath": "BITCODE_SPEC_V42.md",
+ "passed": true
+ },
+ {
+ "id": "v42-delta-gate2-implemented",
+ "sourcePath": "BITCODE_SPEC_V42_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "v42-notes-gate2-rehearsal",
+ "sourcePath": "BITCODE_SPEC_V42_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "v42-parity-gate2-closed",
+ "sourcePath": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate2-closure",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "rowCount": 8,
+ "requiredPredicateCount": 21,
+ "passedPredicateCount": 21,
+ "failedPredicateIds": [],
+ "acceptedUserPath": [
+ "provide-source-material",
+ "select-repository-source-anchor",
+ "admit-deposit-to-depository",
+ "receive-source-safe-admission-proof",
+ "view-later-btc-compensation-attribution"
+ ],
+ "routeApiContractsCovered": true,
+ "sourceValidationCovered": true,
+ "storageProjectionCovered": true,
+ "depositorySearchDocumentCovered": true,
+ "sourceToSharesCompensationReadbackCovered": true,
+ "terminalCompensationVisibilityCovered": true,
+ "localStagingRehearsalCovered": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "btdMintedAtDepositAdmission": false,
+ "btdRightsTransferredBeforeSettlement": false,
+ "compensationAllocationMethod": "source-to-shares-largest-remainder",
+ "compensationPriceAsset": "BTC",
+ "legacySourceRoots": false
+ },
+ "sourceRoots": {
+ "depositorySupplyIndex": "packages/pipelines/asset-pack/src/depository-supply-index.ts",
+ "depositorySupplyIndexTest": "packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts",
+ "embeddingConfig": "packages/pipelines/asset-pack/src/embedding-config.ts",
+ "assetPackReadme": "packages/pipelines/asset-pack/README.md",
+ "protocolServer": "packages/protocol/server.js",
+ "protocolRuntime": "packages/protocol/src/bitcode-demo.js",
+ "protocolBoundaryTest": "packages/protocol/test/protocol-package-boundary.test.js",
+ "uapiDepositRoute": "uapi/app/api/deposits/route.ts",
+ "terminalDepositComposer": "uapi/app/terminal/TerminalDepositComposer.tsx",
+ "terminalActivityHistory": "uapi/app/terminal/terminal-activity-history.ts",
+ "terminalWorkbench": "uapi/app/terminal/terminal-deposit-read-workbench.ts",
+ "terminalRunData": "uapi/app/terminal/terminal-run-data.ts",
+ "v42Spec": "BITCODE_SPEC_V42.md",
+ "v42Delta": "BITCODE_SPEC_V42_DELTA.md",
+ "v42Notes": "BITCODE_SPEC_V42_NOTES.md",
+ "v42Parity": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "roadmap": "SPECIFICATIONS_ROADMAP.md"
+ }
+}
diff --git a/.bitcode/v42-local-staging-mvp-rehearsal.json b/.bitcode/v42-local-staging-mvp-rehearsal.json
new file mode 100644
index 00000000..4d790f02
--- /dev/null
+++ b/.bitcode/v42-local-staging-mvp-rehearsal.json
@@ -0,0 +1,824 @@
+{
+ "artifactId": "v42-local-staging-mvp-rehearsal",
+ "schemaId": "bitcode.v42.localStagingMvpRehearsal.v1",
+ "version": "V42",
+ "currentTarget": "V41",
+ "sourceSafetyVerdict": "source-safe-v42-local-staging-mvp-rehearsal-metadata",
+ "laneIds": [
+ "local",
+ "staging-testnet"
+ ],
+ "stageIds": [
+ "deposit-source",
+ "request-read",
+ "review-synthesized-need",
+ "request-finding-fits",
+ "review-assetpack-preview",
+ "buy-assetpack-settle",
+ "receive-repository-delivery"
+ ],
+ "rowIds": [
+ "lane:local-full-mvp-rehearsal",
+ "lane:staging-testnet-full-mvp-rehearsal",
+ "deposit:source-admission-compensation-readback",
+ "reading:request-read-state",
+ "reading:need-review-resynthesis",
+ "fits:many-candidate-depository-search",
+ "assetpack:source-safe-preview-quote",
+ "settlement:btd-rights-delivery",
+ "demonstration:ai-reading-uplift",
+ "telemetry:rich-stream-database-readback",
+ "sync:ledger-database-storage-reconciliation",
+ "operator:source-safe-rehearsal-receipts",
+ "boundary:value-bearing-mainnet-blocked",
+ "proof:artifact-tests-workflows-docs"
+ ],
+ "rows": [
+ {
+ "rowId": "lane:local-full-mvp-rehearsal",
+ "laneId": "local",
+ "stageId": null,
+ "purpose": "Bind the local MVP rehearsal to source-safe dry-run receipts, local package checks, and explicit sandbox execution opt-in.",
+ "sourceRoots": [
+ "scripts/rehearse-v42-local-staging-mvp.mjs",
+ "packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts",
+ "packages/pipelines/asset-pack/src/__tests__/reading-local-staging-rehearsal.test.ts"
+ ],
+ "requiredEvidence": [
+ "local",
+ "dryRun",
+ "BITCODE_V42_REHEARSAL_EXECUTE"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:07e88356683f8569b4523c07",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "lane:staging-testnet-full-mvp-rehearsal",
+ "laneId": "staging-testnet",
+ "stageId": null,
+ "purpose": "Bind the staging-testnet MVP rehearsal to real-inference posture, Vercel Sandbox authorization, database streaming, and Supabase readback.",
+ "sourceRoots": [
+ "scripts/rehearse-v42-local-staging-mvp.mjs",
+ "uapi/app/api/pipeline-harness/asset-pack/preflight.ts",
+ "uapi/app/api/pipeline-harness/asset-pack/runner.ts"
+ ],
+ "requiredEvidence": [
+ "staging-testnet",
+ "BITCODE_ASSET_PACK_REAL_INFERENCE",
+ "tkpyosihuouusyaxtbau"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:bc7dc738cea89605f4b07176",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "deposit:source-admission-compensation-readback",
+ "laneId": "local-and-staging-testnet",
+ "stageId": "deposit-source",
+ "purpose": "Carry Gate 2 Depositing shortest path through rehearsal with source admission proof and later compensation readback.",
+ "sourceRoots": [
+ ".bitcode/v42-depositing-shortest-path.json",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "requiredEvidence": [
+ "DepositorySupplyCompensationPreview",
+ "depositing-shortest-path",
+ "compensationPreview"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:b713cd6bf4f4fad63cdc5fe0",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "reading:request-read-state",
+ "laneId": "local-and-staging-testnet",
+ "stageId": "request-read",
+ "purpose": "Carry Gate 3 route-owned Reading state through transaction recovery, route hydration, and source-safe repair posture.",
+ "sourceRoots": [
+ ".bitcode/v42-reading-shortest-path-state-machine.json",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "requiredEvidence": [
+ "TerminalEnterpriseReadingRouteState",
+ "readingStage",
+ "request-read"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:73096691e098c30b1ca2fed9",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "reading:need-review-resynthesis",
+ "laneId": "local-and-staging-testnet",
+ "stageId": "review-synthesized-need",
+ "purpose": "Carry Gate 4 Need synthesis, review, feedback, resynthesis, accepted Need admission, and telemetry receipts through rehearsal.",
+ "sourceRoots": [
+ ".bitcode/v42-readneed-review-resynthesis-product-closure.json",
+ "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts"
+ ],
+ "requiredEvidence": [
+ "ReadNeedReviewResynthesisRuntime",
+ "accept_read_need",
+ "accepted Need"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:b0f29af092780b41177b96ef",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "fits:many-candidate-depository-search",
+ "laneId": "local-and-staging-testnet",
+ "stageId": "request-finding-fits",
+ "purpose": "Carry Gate 5 Finding Fits across many Depository candidates with query roots, ranking roots, and selected-fit provenance.",
+ "sourceRoots": [
+ ".bitcode/v42-readfitsfinding-preview-quote.json",
+ "packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts",
+ "packages/pipelines/asset-pack/src/depository-search.ts"
+ ],
+ "requiredEvidence": [
+ "ReadFitsFindingRuntime",
+ "many-channel Depository search",
+ "selected-fit provenance"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:a291daea0f2aecef13dc356f",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "assetpack:source-safe-preview-quote",
+ "laneId": "local-and-staging-testnet",
+ "stageId": "review-assetpack-preview",
+ "purpose": "Carry source-safe AssetPack preview, deterministic quote, disclosure review, and pre-settlement delivery lock through rehearsal.",
+ "sourceRoots": [
+ ".bitcode/v42-readfitsfinding-preview-quote.json",
+ "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts"
+ ],
+ "requiredEvidence": [
+ "AssetPackPreviewBoundary",
+ "deterministicQuote",
+ "sourceSafePreview"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:54ec6cef7444f2c078210abc",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "settlement:btd-rights-delivery",
+ "laneId": "local-and-staging-testnet",
+ "stageId": "buy-assetpack-settle",
+ "purpose": "Carry Gate 6 BTC/testnet finality, BTD read-right transfer, source-to-shares compensation, reconciliation, and pull-request delivery.",
+ "sourceRoots": [
+ ".bitcode/v42-settlement-rights-delivery.json",
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts"
+ ],
+ "requiredEvidence": [
+ "AssetPackSettlementRightsDeliveryBoundary",
+ "BtdRightsTransferReceipt",
+ "source_bearing_pull_request_ready"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:d2da21ce198743a2c0b5d731",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "demonstration:ai-reading-uplift",
+ "laneId": "local-and-staging-testnet",
+ "stageId": null,
+ "purpose": "Carry Gate 7 AI-reading value proof into the full MVP rehearsal as the product demonstration of why Reading buys an AssetPack.",
+ "sourceRoots": [
+ ".bitcode/v42-ai-reading-demonstration.json"
+ ],
+ "requiredEvidence": [
+ "public-data-only",
+ "assetpack-enhanced-after-rights",
+ "minimumUpliftBp"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:e0765d3511ad1a514a1dc888",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "telemetry:rich-stream-database-readback",
+ "laneId": "local-and-staging-testnet",
+ "stageId": null,
+ "purpose": "Prove rich pipeline stream rows, execution ids, phase/agent/step/generation metadata, and database readback remain available for debugging.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts",
+ "packages/pipelines/asset-pack/src/reading-operational-telemetry-repair-readback.ts",
+ "uapi/components/base/bitcode/execution/pipeline-execution-log.tsx"
+ ],
+ "requiredEvidence": [
+ "phase",
+ "ptrr-agent",
+ "thricified-generation",
+ "tool",
+ "databaseReadbackRequired"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:bf279f8690c1cb3bdf8db157",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "sync:ledger-database-storage-reconciliation",
+ "laneId": "local-and-staging-testnet",
+ "stageId": null,
+ "purpose": "Prove ledger, database, object storage, wallet, and repository delivery projections reconcile before source-bearing delivery.",
+ "sourceRoots": [
+ ".bitcode/v42-settlement-rights-delivery.json",
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts"
+ ],
+ "requiredEvidence": [
+ "ledgerDatabaseStorageSynchronized",
+ "reconciliationRoot",
+ "aligned"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:418bed502488469483d1b205",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "operator:source-safe-rehearsal-receipts",
+ "laneId": "local-and-staging-testnet",
+ "stageId": null,
+ "purpose": "Provide operator receipt generation for local and staging-testnet lanes without serializing env values, protected source, live logs, or settlement payloads.",
+ "sourceRoots": [
+ "scripts/rehearse-v42-local-staging-mvp.mjs",
+ "scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs"
+ ],
+ "requiredEvidence": [
+ "sourceSafety",
+ "secretValueSerialized: false",
+ "receiptRoot"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:d4eff04bce193f87d78efc1c",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "boundary:value-bearing-mainnet-blocked",
+ "laneId": "local-and-staging-testnet",
+ "stageId": null,
+ "purpose": "Keep the MVP rehearsal non-value-bearing and blocked from mainnet while proving the staged BTC/BTD protocol path.",
+ "sourceRoots": [
+ "scripts/rehearse-v42-local-staging-mvp.mjs",
+ "packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts"
+ ],
+ "requiredEvidence": [
+ "valueBearingMainnetAdmitted: false",
+ "serverCustody: false",
+ "production-mainnet blocked"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:4a21713c005233db5112b63c",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "proof:artifact-tests-workflows-docs",
+ "laneId": "local-and-staging-testnet",
+ "stageId": null,
+ "purpose": "Bind Gate 8 to deterministic artifact generation, protocol tests, package rehearsal tests, docs, workflows, and package scripts.",
+ "sourceRoots": [
+ "packages/protocol/test/v42-local-staging-mvp-rehearsal.test.js",
+ "package.json",
+ ".github/workflows/bitcode-gate-quality.yml",
+ ".github/workflows/bitcode-canon-quality.yml"
+ ],
+ "requiredEvidence": [
+ "v42-local-staging-mvp-rehearsal",
+ "check:v42-gate8",
+ "generate:v42-local-staging-mvp-rehearsal"
+ ],
+ "rowRoot": "v42-local-staging-mvp-rehearsal-row:4a15dcd2cf8ad6eab11edfe3",
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ }
+ ],
+ "predicateResults": [
+ {
+ "id": "gate2-artifact-passed",
+ "sourcePath": ".bitcode/v42-depositing-shortest-path.json",
+ "passed": true
+ },
+ {
+ "id": "gate3-artifact-passed",
+ "sourcePath": ".bitcode/v42-reading-shortest-path-state-machine.json",
+ "passed": true
+ },
+ {
+ "id": "gate4-artifact-passed",
+ "sourcePath": ".bitcode/v42-readneed-review-resynthesis-product-closure.json",
+ "passed": true
+ },
+ {
+ "id": "gate5-artifact-passed",
+ "sourcePath": ".bitcode/v42-readfitsfinding-preview-quote.json",
+ "passed": true
+ },
+ {
+ "id": "gate6-artifact-passed",
+ "sourcePath": ".bitcode/v42-settlement-rights-delivery.json",
+ "passed": true
+ },
+ {
+ "id": "gate7-artifact-passed",
+ "sourcePath": ".bitcode/v42-ai-reading-demonstration.json",
+ "passed": true
+ },
+ {
+ "id": "rehearsal-model-covers-lanes",
+ "sourcePath": "packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts",
+ "passed": true
+ },
+ {
+ "id": "rehearsal-model-covers-five-reading-stages",
+ "sourcePath": "packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts",
+ "passed": true
+ },
+ {
+ "id": "rehearsal-model-covers-source-safety",
+ "sourcePath": "packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts",
+ "passed": true
+ },
+ {
+ "id": "rehearsal-test-covers-settled-flow",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/reading-local-staging-rehearsal.test.ts",
+ "passed": true
+ },
+ {
+ "id": "postprocess-persists-rehearsal",
+ "sourcePath": "packages/pipelines/asset-pack/src/postprocess.ts",
+ "passed": true
+ },
+ {
+ "id": "operator-script-exists",
+ "sourcePath": "scripts/rehearse-v42-local-staging-mvp.mjs",
+ "passed": true
+ },
+ {
+ "id": "operator-script-binds-staging-env",
+ "sourcePath": "scripts/rehearse-v42-local-staging-mvp.mjs",
+ "passed": true
+ },
+ {
+ "id": "operator-script-source-safe",
+ "sourcePath": "scripts/rehearse-v42-local-staging-mvp.mjs",
+ "passed": true
+ },
+ {
+ "id": "harness-preflight-binds-staging",
+ "sourcePath": "uapi/app/api/pipeline-harness/asset-pack/preflight.ts",
+ "passed": true
+ },
+ {
+ "id": "harness-runner-covers-boundaries",
+ "sourcePath": "uapi/app/api/pipeline-harness/asset-pack/runner.ts",
+ "passed": true
+ },
+ {
+ "id": "terminal-renders-reading-rehearsal",
+ "sourcePath": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "passed": true
+ },
+ {
+ "id": "pipeline-log-supports-rich-telemetry",
+ "sourcePath": "uapi/components/base/bitcode/execution/pipeline-execution-log.tsx",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-wired",
+ "sourcePath": "packages/protocol/test/v42-local-staging-mvp-rehearsal.test.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-exports-wired",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "package-scripts-wired",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "workflows-run-gate8",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "v42-docs-expanded",
+ "sourcePath": "BITCODE_SPEC_V42.md",
+ "passed": true
+ },
+ {
+ "id": "v42-delta-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "v42-notes-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "v42-parity-implemented",
+ "sourcePath": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-advanced-to-gate8",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readmes-document-gate8",
+ "sourcePath": "README.md",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "rowCount": 14,
+ "laneCount": 2,
+ "stageCount": 7,
+ "gateArtifactCount": 6,
+ "lanes": [
+ "local",
+ "staging-testnet"
+ ],
+ "stages": [
+ "deposit-source",
+ "request-read",
+ "review-synthesized-need",
+ "request-finding-fits",
+ "review-assetpack-preview",
+ "buy-assetpack-settle",
+ "receive-repository-delivery"
+ ],
+ "stagingProjectRef": "tkpyosihuouusyaxtbau",
+ "stagingRestHost": "https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/",
+ "localLaneCovered": true,
+ "stagingTestnetLaneCovered": true,
+ "depositingCovered": true,
+ "readRequestCovered": true,
+ "readNeedReviewCovered": true,
+ "readFitsFindingCovered": true,
+ "manyCandidateDepositorySearchCovered": true,
+ "sourceSafePreviewQuoteCovered": true,
+ "settlementRightsDeliveryCovered": true,
+ "aiReadingDemonstrationCovered": true,
+ "richTelemetryReadbackCovered": true,
+ "databaseStreamReadbackCovered": true,
+ "ledgerDatabaseStorageSynchronized": true,
+ "postSettlementPullRequestDeliveryCovered": true,
+ "operatorReceiptScriptCovered": true,
+ "mainnetValueBearingBlocked": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "failedPredicateIds": []
+ },
+ "sourceSafety": {
+ "sourceSafetyClass": "source_safe_v42_local_staging_mvp_rehearsal_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ "passed": true,
+ "artifactRoot": "v42-local-staging-mvp-rehearsal:0683e1851bff1596228f582a"
+}
diff --git a/.bitcode/v42-promotion-readiness-report.json b/.bitcode/v42-promotion-readiness-report.json
new file mode 100644
index 00000000..5ee12a0b
--- /dev/null
+++ b/.bitcode/v42-promotion-readiness-report.json
@@ -0,0 +1,545 @@
+{
+ "reportId": "v42-promotion-readiness-report",
+ "artifactId": "v42-promotion-readiness-report",
+ "schemaId": "bitcode.v42.promotionReadinessReport.v1",
+ "version": "V42",
+ "currentTarget": "V41",
+ "generatedAt": "2026-05-28T21:36:43-03:00",
+ "sourceSafetyVerdict": "source-safe-v42-reliable-mvp-promotion-readiness-metadata",
+ "prePromotionPosture": "V41 active / V42 draft",
+ "postPromotionPosture": "V42 active / V43 draft",
+ "branchProtection": {
+ "directMainPushAdmitted": false,
+ "promotionPrRequired": true,
+ "versionBranch": "version/v42",
+ "versionPromotionPullRequestTitlePrefix": "V42 Canonical Promotion"
+ },
+ "generatedArtifactPolicy": {
+ "provenAppendixPath": "BITCODE_SPEC_V42_PROVEN.md",
+ "provenAppendixRequiredBeforePromotion": false,
+ "generatedArtifactPrefix": ".bitcode/v42-",
+ "promotionOverwritesPreviewArtifacts": true,
+ "secretValuesSerialized": false,
+ "protectedSourceSerialized": false,
+ "rawProtectedPromptSerialized": false,
+ "rawProviderResponseSerialized": false,
+ "unpaidAssetPackSourceSerialized": false
+ },
+ "validationCommands": [
+ "pnpm run check:v42-gate1",
+ "pnpm run check:v42-gate2",
+ "pnpm run check:v42-gate3",
+ "pnpm run check:v42-gate4",
+ "pnpm run check:v42-gate5",
+ "pnpm run check:v42-gate6",
+ "pnpm run check:v42-gate7",
+ "pnpm run check:v42-gate8",
+ "pnpm run check:v42-gate9",
+ "node scripts/promote-bitcode-canon.mjs --version V42 --commit HEAD --dry-run"
+ ],
+ "gateArtifactEvidence": [
+ {
+ "relativePath": ".bitcode/v42-depositing-shortest-path.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:47789f07f6d8e296d91894f15ce8141787af0502863136db843d0926be8e4208",
+ "byteLength": 18418,
+ "sourceSafe": true,
+ "artifactId": "v42-depositing-shortest-path",
+ "version": "V42",
+ "sourceSafetyVerdict": "source-safe-depositing-compensation-visibility-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v42-reading-shortest-path-state-machine.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:e28bdaf56522fc4fa94291aa244f5e1e0caea5b90292edff392d9973c68778f5",
+ "byteLength": 21834,
+ "sourceSafe": true,
+ "artifactId": "v42-reading-shortest-path-state-machine",
+ "version": "V42",
+ "sourceSafetyVerdict": "source-safe-reading-shortest-path-state-machine-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v42-readneed-review-resynthesis-product-closure.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:cac716231b2760c686a0f826157fad8aecf5c24f74b8c9dde18b1d8b3e86e44e",
+ "byteLength": 24945,
+ "sourceSafe": true,
+ "artifactId": "v42-readneed-review-resynthesis-product-closure",
+ "version": "V42",
+ "sourceSafetyVerdict": "source-safe-readneed-review-resynthesis-product-closure-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v42-readfitsfinding-preview-quote.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:fcd5e8576c4185cdc57566f096c3e05dc42689a8a509a9071704de1d03ee894a",
+ "byteLength": 26476,
+ "sourceSafe": true,
+ "artifactId": "v42-readfitsfinding-preview-quote",
+ "version": "V42",
+ "sourceSafetyVerdict": "source-safe-readfitsfinding-preview-quote-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v42-settlement-rights-delivery.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:a22f645d435af37bdfaac87ba890cc07cd1fd1e773d903ff20a21782ca437541",
+ "byteLength": 22514,
+ "sourceSafe": true,
+ "artifactId": "v42-settlement-rights-delivery",
+ "version": "V42",
+ "sourceSafetyVerdict": "source-safe-v42-settlement-rights-delivery-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v42-ai-reading-demonstration.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:1e1c69e6b7aa3ad2da7ff49595b228b33fab301c907cb75d43bbfe628735583c",
+ "byteLength": 14824,
+ "sourceSafe": true,
+ "artifactId": "v42-ai-reading-demonstration",
+ "version": "V42",
+ "sourceSafetyVerdict": "source-safe-v42-ai-reading-demonstration-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v42-local-staging-mvp-rehearsal.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:1a7fc667adfd6cc6035c1bcc317afdaeb29e7a97493cabc1ca8898f0b3f6fb0b",
+ "byteLength": 31120,
+ "sourceSafe": true,
+ "artifactId": "v42-local-staging-mvp-rehearsal",
+ "version": "V42",
+ "sourceSafetyVerdict": "source-safe-v42-local-staging-mvp-rehearsal-metadata"
+ }
+ ],
+ "sourceEvidence": [
+ {
+ "relativePath": "scripts/check-v42-gate9-promotion-readiness.mjs",
+ "present": true,
+ "digest": "sha256:7e4dfbd28742473fcc6dc84bb8c70f62be0eca1fea4461bf7064255ad56fb816",
+ "requiredTokens": [
+ {
+ "token": "V42 Gate 9 promotion readiness",
+ "present": true
+ },
+ {
+ "token": "--promotion-mode",
+ "present": true
+ },
+ {
+ "token": "promotedPointer",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v42-promotion-readiness-report.json",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "scripts/generate-v42-promotion-readiness-report.mjs",
+ "present": true,
+ "digest": "sha256:2b4d907e0a58c13a0c50e512948c13583150c6750c36640cdbfbfb2ead37c018",
+ "requiredTokens": [
+ {
+ "token": "buildV42PromotionReadinessReport",
+ "present": true
+ },
+ {
+ "token": "source-safe-v42-reliable-mvp-promotion-readiness-metadata",
+ "present": true
+ },
+ {
+ "token": "v42-promotion-readiness-report",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "scripts/promote-bitcode-canon.mjs",
+ "present": true,
+ "digest": "sha256:86b5710625636bea2490c8e695a51b65a8ba4e5b06f964afd89a32e6f4abaecc",
+ "requiredTokens": [
+ {
+ "token": "if (version === 'V42')",
+ "present": true
+ },
+ {
+ "token": "const v42Gate9Command",
+ "present": true
+ },
+ {
+ "token": "buildDerivedV42CommitMessageBody",
+ "present": true
+ },
+ {
+ "token": "scripts/check-v42-gate9-promotion-readiness.mjs",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "scripts/prepare-bitcode-spec-family-promotion.mjs",
+ "present": true,
+ "digest": "sha256:0833b887c37181f4ecf21e0dec32aaad7b2cb09632167ffe291581238d37e765",
+ "requiredTokens": [
+ {
+ "token": "if (version === 'V42')",
+ "present": true
+ },
+ {
+ "token": "V42 canonical system specification for reliable MVP experience",
+ "present": true
+ },
+ {
+ "token": "BITCODE_SPEC_V42_PROVEN.md",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v42-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/v42-canon-promotion.yml",
+ "present": true,
+ "digest": "sha256:767f7e79af9adea8daae75f5f6ba0b0cbda29c25783e56c92052dd4d70c14926",
+ "requiredTokens": [
+ {
+ "token": "head.ref == 'version/v42'",
+ "present": true
+ },
+ {
+ "token": "node scripts/prepare-bitcode-spec-family-promotion.mjs --version V42",
+ "present": true
+ },
+ {
+ "token": "node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V42 --next-draft V43",
+ "present": true
+ },
+ {
+ "token": "node scripts/generate-bitcode-proven.mjs --version V42",
+ "present": true
+ },
+ {
+ "token": "node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42",
+ "present": true
+ },
+ {
+ "token": "BITCODE_SPEC_V42_PROVEN.md",
+ "present": true
+ },
+ {
+ "token": "Promote V42 canon files",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": ".github/workflows/bitcode-gate-quality.yml",
+ "present": true,
+ "digest": "sha256:bf2198709924ac0106c5aa99657fb0ced79d251656fd4932643f1bc00c68d91a",
+ "requiredTokens": [
+ {
+ "token": "check-v42-gate9-promotion-readiness.mjs",
+ "present": true
+ },
+ {
+ "token": "elif [ \"$POINTER\" = \"V42\" ]",
+ "present": true
+ },
+ {
+ "token": "--active-canon V42 --draft-target V43",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": ".github/workflows/bitcode-canon-quality.yml",
+ "present": true,
+ "digest": "sha256:4106ffdf430eddd3724943e1f51a09ed8f449a728cf92c1705c489d83fd3c8f9",
+ "requiredTokens": [
+ {
+ "token": "check-v42-gate9-promotion-readiness.mjs",
+ "present": true
+ },
+ {
+ "token": "elif [ \"$POINTER\" = \"V42\" ]",
+ "present": true
+ },
+ {
+ "token": "--active-canon V42 --draft-target V43",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "packages/protocol/src/canonical/proven-generator.js",
+ "present": true,
+ "digest": "sha256:2f6b8aa94f03c2980338239e94311fe9c3cbbef4b973665298bae9a6185e694c",
+ "requiredTokens": [
+ {
+ "token": "buildV42ProvenPackage",
+ "present": true
+ },
+ {
+ "token": "buildV42PromotionReadinessReport",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v42-promotion-readiness-report.json",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "packages/protocol/test/v42-promotion-readiness.test.js",
+ "present": true,
+ "digest": "sha256:8fa01fe49ec144161f74a10279eb2df764f7a4f912c2491f40d68b8296fec59c",
+ "requiredTokens": [
+ {
+ "token": "builds source-safe V42 PromotionReadinessReport",
+ "present": true
+ },
+ {
+ "token": "v42-promotion-readiness-report",
+ "present": true
+ },
+ {
+ "token": "V42 Promotion Readiness",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "packages/protocol/src/canonical/v21-specifying.js",
+ "present": true,
+ "digest": "sha256:c906d3607592026d02af6774b9c0e43b3c83496aa7925153daaf9e78127f5cf3",
+ "requiredTokens": [
+ {
+ "token": ".bitcode/v42-promotion-readiness-report.json",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "package.json",
+ "present": true,
+ "digest": "sha256:e3c32fb568c706664d267eacd8d636685be5090f148b4318d3442f34225dc94a",
+ "requiredTokens": [
+ {
+ "token": "generate:v42-promotion-readiness",
+ "present": true
+ },
+ {
+ "token": "check:v42-promotion-readiness",
+ "present": true
+ },
+ {
+ "token": "check:v42-gate9",
+ "present": true
+ }
+ ]
+ }
+ ],
+ "documentationEvidence": [
+ {
+ "relativePath": "BITCODE_SPEC_V42.md",
+ "present": true,
+ "digest": "sha256:3b834727cd11f5f3ede0a510361ab8eb7c14d962c72d047414fcd748487f8587",
+ "requiredTokens": [
+ {
+ "token": "V42 promotion readiness canon",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v42-promotion-readiness-report.json",
+ "present": true
+ },
+ {
+ "token": "V42 active / draft V43",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "BITCODE_SPEC_V42_DELTA.md",
+ "present": true,
+ "digest": "sha256:4152d7d8ecb5797ee7934536388ea009b1acd07fcf8bb697e191999f616c200a",
+ "requiredTokens": [
+ {
+ "token": "Gate 9: V42 Promotion Readiness",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v42-promotion-readiness-report.json",
+ "present": true
+ },
+ {
+ "token": "promotion scripts support V42",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "BITCODE_SPEC_V42_NOTES.md",
+ "present": true,
+ "digest": "sha256:4a8a84fdd29e4a9c544c5343531af12883e281d4c8569373a635f4ed5edfb26d",
+ "requiredTokens": [
+ {
+ "token": "Gate 9: V42 Promotion Readiness",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v42-promotion-readiness-report.json",
+ "present": true
+ },
+ {
+ "token": "active V42 / draft V43",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "present": true,
+ "digest": "sha256:4b26e6e5e1c92e77d0d5208049627dad3cd981fb1cd36e13e4d40af25333ca2d",
+ "requiredTokens": [
+ {
+ "token": "## Gate 9 Promotion readiness parity",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v42-promotion-readiness-report.json",
+ "present": true
+ },
+ {
+ "token": "closed",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "SPECIFICATIONS_ROADMAP.md",
+ "present": true,
+ "digest": "sha256:fb1bf2e34a1a4b2ac522e2aab074523516bd1af5b76cf54685bc124d9c06044d",
+ "requiredTokens": [
+ {
+ "token": "V42 Gate 9 closure anchor",
+ "present": true
+ },
+ {
+ "token": "BITCODE_SPEC_V42_PROVEN.md",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "README.md",
+ "present": true,
+ "digest": "sha256:db680c49b739d5b9ae93e3552c9f6648d66409a9eccb7708a47efb2c0e7b18a3",
+ "requiredTokens": [
+ {
+ "token": "check:v42-gate9",
+ "present": true
+ },
+ {
+ "token": "v42-canon-promotion.yml",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "packages/protocol/README.md",
+ "present": true,
+ "digest": "sha256:a8518e8e923c7f3752c6d51193f5efa2adfcf225a2bccd0f4de8153351918723",
+ "requiredTokens": [
+ {
+ "token": "V42 Gate 9",
+ "present": true
+ },
+ {
+ "token": "V42` active, `V43` draft",
+ "present": true
+ }
+ ]
+ }
+ ],
+ "coverage": {
+ "requiredGateArtifactPaths": [
+ ".bitcode/v42-depositing-shortest-path.json",
+ ".bitcode/v42-reading-shortest-path-state-machine.json",
+ ".bitcode/v42-readneed-review-resynthesis-product-closure.json",
+ ".bitcode/v42-readfitsfinding-preview-quote.json",
+ ".bitcode/v42-settlement-rights-delivery.json",
+ ".bitcode/v42-ai-reading-demonstration.json",
+ ".bitcode/v42-local-staging-mvp-rehearsal.json"
+ ],
+ "generatedProofOutputs": [
+ "BITCODE_SPEC_V42_PROVEN.md",
+ ".bitcode/v42-spec-family-report.json",
+ ".bitcode/v42-canonical-input-report.json",
+ ".bitcode/v42-canon-posture-drift-report.json",
+ ".bitcode/v42-promotion-readiness-report.json"
+ ],
+ "gateArtifactCount": 7,
+ "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": "V41 active / V42 draft",
+ "postPromotionPosture": "V42 active / V43 draft",
+ "valueBearingMainnetAdmission": false,
+ "credentialsSerialized": false,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false
+ },
+ "failClosedResult": "promotion remains blocked when any V42 Depositing shortest path, Reading shortest path state machine, ReadNeed review/resynthesis closure, ReadFitsFinding preview and quote closure, settlement rights delivery boundary, AI-reading demonstration, local/staging-testnet rehearsal, workflow, promotion script, generated proof support, source-safety check, or value-bearing mainnet block is missing",
+ "artifactRoot": "reliable-mvp-promotion-readiness-report:7228ddb56b71d4e5bd710bfa",
+ "passed": true,
+ "failures": [],
+ "validationCommand": "pnpm run check:v42-gate9",
+ "proofSourceCommit": "5c9c0270b9d864fe13b7e0a429700e1c9a7689d9",
+ "generatorId": "bitcode.proven-generator.v1",
+ "worktreeState": "clean",
+ "sourceSafe": true
+}
diff --git a/.bitcode/v42-readfitsfinding-preview-quote.json b/.bitcode/v42-readfitsfinding-preview-quote.json
new file mode 100644
index 00000000..0c555920
--- /dev/null
+++ b/.bitcode/v42-readfitsfinding-preview-quote.json
@@ -0,0 +1,676 @@
+{
+ "artifactId": "v42-readfitsfinding-preview-quote",
+ "schemaId": "bitcode.v42.readFitsFindingPreviewQuote.v1",
+ "version": "V42",
+ "currentTarget": "V41",
+ "sourceSafetyVerdict": "source-safe-readfitsfinding-preview-quote-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v42-readfitsfinding-preview-quote:69267c22ee5a9efe19024b6d",
+ "passed": true,
+ "rows": [
+ {
+ "rowId": "admission:accepted-need-required",
+ "purpose": "Require an accepted ReadNeedComprehensionSynthesis Need before ReadFitsFindingSynthesis can search or preview an AssetPack.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "emittedTypes": [
+ "ReadFitsFindingAdmission",
+ "accepted_need_admission"
+ ],
+ "requiredEvidence": [
+ "accepted_read_need_missing",
+ "findingFitsAdmission",
+ "acceptedNeed"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:fbe895bf78a96e815c9be5d6",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "search:many-candidate-depository-discovery",
+ "purpose": "Search Depository AssetPack supply for many candidates above threshold before selecting the fit set.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/depository-search.ts",
+ "packages/pipelines/asset-pack/src/__tests__/depository-search.test.ts"
+ ],
+ "emittedTypes": [
+ "DepositorySearchResult",
+ "DepositoryCandidate"
+ ],
+ "requiredEvidence": [
+ "searchedAssetCount",
+ "candidateRanking",
+ "maxSelectedCandidates"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:a7549cf3806d92ce20f13fff",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "search:multi-channel-vector-provider-tooling",
+ "purpose": "Bind lexical, symbolic, path, metadata, measurement, embedding-vector, and provider-specific search channels to source-safe tool receipts.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/depository-search.ts",
+ "packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts"
+ ],
+ "emittedTypes": [
+ "ReadFitsFindingSynthesisSearchReceipt",
+ "DepositorySearchQueryPlan"
+ ],
+ "requiredEvidence": [
+ "lexical",
+ "symbolic",
+ "path",
+ "metadata",
+ "measurement",
+ "embedding-vector",
+ "provider-specific",
+ "ReadFitsFindingSynthesis.tool.vector-depository-search"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:26ef6786dfdec3d0571c9d19",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "ranking:candidate-ranking-and-thresholds",
+ "purpose": "Rank candidates with deterministic scores, thresholds, blockers, rejected counts, and proof/measurement requirements.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/depository-search.ts",
+ "packages/pipelines/asset-pack/src/__tests__/depository-search.test.ts"
+ ],
+ "emittedTypes": [
+ "DepositoryCandidateRanking",
+ "DepositoryCandidateFitEvidence"
+ ],
+ "requiredEvidence": [
+ "finalScore",
+ "semanticScore",
+ "proofScore",
+ "measurementScore",
+ "rejectedCandidateCount"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:aff87ef4ef37eaf19c22272c",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "provenance:selected-fit-provenance",
+ "purpose": "Persist selected fit provenance with selected candidate ids, fit deposit ids, proof roots, measurement roots, and reconciliation roots.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts",
+ "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts"
+ ],
+ "emittedTypes": [
+ "selected_fit_provenance",
+ "AssetPackPreviewSelectedFitProvenance"
+ ],
+ "requiredEvidence": [
+ "selectedFitProvenanceRoot",
+ "fitDepositAssetIds",
+ "reconciliationReadbackRoot"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:799590ec67d4c203c0d80ca9",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "preview:source-safe-assetpack-preview",
+ "purpose": "Create the source-safe AssetPack preview that exposes measurements, fit posture, roots, and delivery posture while source stays locked.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts"
+ ],
+ "emittedTypes": [
+ "AssetPackSourceSafePreview",
+ "AssetPackPreviewBoundary"
+ ],
+ "requiredEvidence": [
+ "sourceSafePreview",
+ "AssetPackPreviewBoundary",
+ "sourceBearingDeliveryVisible"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:6c78f5b53697900316d08828",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "quote:deterministic-share-to-fee-btc-quote",
+ "purpose": "Read back deterministic BTD/BTC quote calculation from measurement weight, measurement volume, admitted fit quality, dust floor, and minimum sats.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts"
+ ],
+ "emittedTypes": [
+ "ShareToFeeQuote",
+ "AssetPackPreviewQuoteReceipt"
+ ],
+ "requiredEvidence": [
+ "sum(measurement.weight * measurement.volume * admitted_fit_quality)",
+ "deterministic",
+ "quoteRoot"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:2cd3ae0f6b53015ff194183b",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "disclosure:no-pre-settlement-source",
+ "purpose": "Fail closed when preview, telemetry, route summary, or UI readback would expose protected source or unpaid AssetPack source before settlement.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "uapi/app/api/pipeline-harness/asset-pack/runner.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "emittedTypes": [
+ "AssetPackDisclosureReview",
+ "AssetPackPreviewBoundarySourceSafety"
+ ],
+ "requiredEvidence": [
+ "protectedSourceVisible: false",
+ "unpaidAssetPackSourceVisible: false",
+ "credentialsSerialized: false"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:6c6f576e66de92dfbfcb4b73",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "settlement:instructions-before-rights-transfer",
+ "purpose": "Expose source-safe settlement instructions and delivery lock before Gate 6 rights-transfer and repository delivery unlock.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts"
+ ],
+ "emittedTypes": [
+ "AssetPackPreviewSettlementInstructions",
+ "AssetPackPreviewDeliveryPosture"
+ ],
+ "requiredEvidence": [
+ "quote_ready_settlement_required",
+ "reader_wallet_authorized_before_broadcast",
+ "withheld_until_settlement"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:3072bb82f264a8795871106d",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "route:harness-preview-quote-summary",
+ "purpose": "Summarize preview boundary, quote receipt, selected-fit provenance, settlement instructions, delivery posture, and disclosure review through the pipeline harness route without source payloads.",
+ "sourceRoots": [
+ "uapi/app/api/pipeline-harness/asset-pack/runner.ts",
+ "uapi/tests/api/pipelineHarnessRoute.test.ts"
+ ],
+ "emittedTypes": [
+ "assetPackPreviewBoundary",
+ "assetPackQuoteReceipt",
+ "assetPackSettlementInstructions",
+ "assetPackDeliveryPosture"
+ ],
+ "requiredEvidence": [
+ "summarizeAssetPackPreviewBoundary",
+ "assetPackPreviewBoundary",
+ "storageRecordCount"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:0ffb7be9b16813de0ef71096",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "ui:terminal-preview-quote-provenance-readback",
+ "purpose": "Render Terminal Finding Fits preview, quote, provenance, settlement, delivery, and replay roots as expandable source-safe metadata.",
+ "sourceRoots": [
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "uapi/app/terminal/terminal-pipeline-harness-client.ts",
+ "uapi/tests/terminalPipelineHarnessClient.test.ts"
+ ],
+ "emittedTypes": [
+ "assetPackPreviewBoundaryRows",
+ "TerminalReadFitsFindingSynthesisHarnessStreamSnapshot"
+ ],
+ "requiredEvidence": [
+ "Finding Fits preview, quote, and provenance",
+ "quote_ready_settlement_required",
+ "withheld_until_settlement"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:0291291e16e03e2e74707398",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "proof:tests-artifact-workflow",
+ "purpose": "Bind V42 Gate 5 closure to package tests, UAPI tests, protocol artifact tests, docs, scripts, workflows, and generated source-safe proof.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/__tests__/depository-search.test.ts",
+ "packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts",
+ "packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts",
+ "uapi/tests/api/pipelineHarnessRoute.test.ts",
+ ".github/workflows/bitcode-gate-quality.yml",
+ ".github/workflows/bitcode-canon-quality.yml",
+ "BITCODE_SPEC_V42.md",
+ "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "SPECIFICATIONS_ROADMAP.md"
+ ],
+ "emittedTypes": [
+ "V42ReadFitsFindingPreviewQuote"
+ ],
+ "requiredEvidence": [
+ "check-v42-gate5-readfitsfinding-preview-quote.mjs",
+ "v42-readfitsfinding-preview-quote"
+ ],
+ "rowRoot": "v42-readfitsfinding-preview-quote-row:b09ae61cf4664f8a3914be8e",
+ "sourceSafetyClass": "source_safe_readfitsfinding_preview_quote_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ }
+ ],
+ "rowIds": [
+ "admission:accepted-need-required",
+ "search:many-candidate-depository-discovery",
+ "search:multi-channel-vector-provider-tooling",
+ "ranking:candidate-ranking-and-thresholds",
+ "provenance:selected-fit-provenance",
+ "preview:source-safe-assetpack-preview",
+ "quote:deterministic-share-to-fee-btc-quote",
+ "disclosure:no-pre-settlement-source",
+ "settlement:instructions-before-rights-transfer",
+ "route:harness-preview-quote-summary",
+ "ui:terminal-preview-quote-provenance-readback",
+ "proof:tests-artifact-workflow"
+ ],
+ "predicateResults": [
+ {
+ "id": "accepted-need-gates-finding-fits",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts",
+ "passed": true
+ },
+ {
+ "id": "search-defines-many-channel-ids",
+ "sourcePath": "packages/pipelines/asset-pack/src/depository-search.ts",
+ "passed": true
+ },
+ {
+ "id": "search-defines-tool-ids",
+ "sourcePath": "packages/pipelines/asset-pack/src/depository-search.ts",
+ "passed": true
+ },
+ {
+ "id": "search-covers-provider-embedding-policy",
+ "sourcePath": "packages/pipelines/asset-pack/src/depository-search.ts",
+ "passed": true
+ },
+ {
+ "id": "search-tests-many-candidates",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/depository-search.test.ts",
+ "passed": true
+ },
+ {
+ "id": "runtime-persists-selected-fit-provenance",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts",
+ "passed": true
+ },
+ {
+ "id": "runtime-telemetry-counts",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts",
+ "passed": true
+ },
+ {
+ "id": "runtime-tests-source-safe-counts",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts",
+ "passed": true
+ },
+ {
+ "id": "preview-boundary-defines-quote-provenance-settlement-delivery",
+ "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "passed": true
+ },
+ {
+ "id": "preview-boundary-source-safety",
+ "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "passed": true
+ },
+ {
+ "id": "quote-formula-implemented",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-need.ts",
+ "passed": true
+ },
+ {
+ "id": "preview-tests-cover-determinism-and-storage-safety",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts",
+ "passed": true
+ },
+ {
+ "id": "package-postprocess-surfaces-boundary",
+ "sourcePath": "packages/pipelines/asset-pack/src/postprocess.ts",
+ "passed": true
+ },
+ {
+ "id": "contract-keeps-readfitsfinding-topology",
+ "sourcePath": "packages/pipelines/asset-pack/src/reading-pipeline-contract.ts",
+ "passed": true
+ },
+ {
+ "id": "harness-route-summarizes-preview-boundary",
+ "sourcePath": "uapi/app/api/pipeline-harness/asset-pack/runner.ts",
+ "passed": true
+ },
+ {
+ "id": "harness-route-tests-preview-boundary-summary",
+ "sourcePath": "uapi/tests/api/pipelineHarnessRoute.test.ts",
+ "passed": true
+ },
+ {
+ "id": "terminal-ui-renders-preview-boundary-rows",
+ "sourcePath": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "passed": true
+ },
+ {
+ "id": "terminal-client-summarizes-boundary",
+ "sourcePath": "uapi/app/terminal/terminal-pipeline-harness-client.ts",
+ "passed": true
+ },
+ {
+ "id": "terminal-client-tests-boundary-summary",
+ "sourcePath": "uapi/tests/terminalPipelineHarnessClient.test.ts",
+ "passed": true
+ },
+ {
+ "id": "spec-gate5-expanded",
+ "sourcePath": "BITCODE_SPEC_V42.md",
+ "passed": true
+ },
+ {
+ "id": "delta-gate5-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "notes-gate5-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "parity-gate5-implemented",
+ "sourcePath": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-advanced-to-gate5",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readmes-document-gate5",
+ "sourcePath": "README.md",
+ "passed": true
+ },
+ {
+ "id": "workflows-run-gate5-check",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "rowCount": 12,
+ "requiredPredicateCount": 26,
+ "passedPredicateCount": 26,
+ "failedPredicateIds": [],
+ "pipelineName": "ReadFitsFindingSynthesis",
+ "requiredPriorPipelineName": "ReadNeedComprehensionSynthesis",
+ "phaseCount": 7,
+ "agentCount": 8,
+ "ptrrStepCount": 32,
+ "failsafeSequenceCount": 96,
+ "thricifiedGenerationCount": 96,
+ "searchChannelIds": [
+ "lexical",
+ "symbolic",
+ "path",
+ "metadata",
+ "measurement",
+ "embedding-vector",
+ "provider-specific"
+ ],
+ "selectedFitProvenanceRequired": true,
+ "sourceSafePreviewRequired": true,
+ "deterministicQuoteRequired": true,
+ "noProtectedSourceBeforeSettlement": true,
+ "settlementInstructionsRequired": true,
+ "terminalPreviewQuoteReadbackCovered": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "legacySourceRoots": false
+ },
+ "sourceRoots": {
+ "depositorySearch": "packages/pipelines/asset-pack/src/depository-search.ts",
+ "readFitsFindingRuntime": "packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts",
+ "assetPackPreviewBoundary": "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "readNeed": "packages/pipelines/asset-pack/src/read-need.ts",
+ "packageIndex": "packages/pipelines/asset-pack/src/index.ts",
+ "postprocess": "packages/pipelines/asset-pack/src/postprocess.ts",
+ "readingPipelineContract": "packages/pipelines/asset-pack/src/reading-pipeline-contract.ts",
+ "depositorySearchTest": "packages/pipelines/asset-pack/src/__tests__/depository-search.test.ts",
+ "runtimeTest": "packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts",
+ "previewBoundaryTest": "packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts",
+ "postprocessTest": "packages/pipelines/asset-pack/src/__tests__/postprocess.test.ts",
+ "harnessRunner": "uapi/app/api/pipeline-harness/asset-pack/runner.ts",
+ "harnessRouteTest": "uapi/tests/api/pipelineHarnessRoute.test.ts",
+ "terminalWorkbench": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "terminalHarnessClient": "uapi/app/terminal/terminal-pipeline-harness-client.ts",
+ "terminalHarnessClientTest": "uapi/tests/terminalPipelineHarnessClient.test.ts",
+ "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml",
+ "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml",
+ "v42Spec": "BITCODE_SPEC_V42.md",
+ "v42Delta": "BITCODE_SPEC_V42_DELTA.md",
+ "v42Notes": "BITCODE_SPEC_V42_NOTES.md",
+ "v42Parity": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "roadmap": "SPECIFICATIONS_ROADMAP.md",
+ "rootReadme": "README.md",
+ "terminalReadme": "uapi/app/terminal/README.md",
+ "assetPackReadme": "packages/pipelines/asset-pack/README.md",
+ "protocolReadme": "packages/protocol/README.md"
+ }
+}
diff --git a/.bitcode/v42-reading-shortest-path-state-machine.json b/.bitcode/v42-reading-shortest-path-state-machine.json
new file mode 100644
index 00000000..a5f4b88e
--- /dev/null
+++ b/.bitcode/v42-reading-shortest-path-state-machine.json
@@ -0,0 +1,575 @@
+{
+ "artifactId": "v42-reading-shortest-path-state-machine",
+ "schemaId": "bitcode.v42.readingShortestPathStateMachine.v1",
+ "version": "V42",
+ "currentTarget": "V41",
+ "sourceSafetyVerdict": "source-safe-reading-shortest-path-state-machine-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v42-reading-shortest-path-state-machine:c30584924864342dafe806b5",
+ "passed": true,
+ "rows": [
+ {
+ "rowId": "state:five-step-shortest-path",
+ "purpose": "Preserve exactly five enterprise Reading steps from Read Request through Need review, Finding Fits, AssetPack preview, and settlement delivery.",
+ "sourceRoots": [
+ "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "emittedTypes": [
+ "TerminalEnterpriseReadingUxState",
+ "TerminalEnterpriseReadingStepView"
+ ],
+ "requiredEvidence": [
+ "request-read",
+ "review-synthesized-need",
+ "request-fit",
+ "review-synthesized-asset-pack",
+ "buy-asset-pack-settle"
+ ],
+ "rowRoot": "v42-reading-shortest-path-state-machine-row:f5bccf679eaefd791e5f0c19",
+ "sourceSafetyClass": "source_safe_reading_shortest_path_state_machine_metadata",
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "ledger-write-authority",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "route:transaction-stage-persistence",
+ "purpose": "Bind Reading state to recoverable transaction ids and readingStage route state so refresh, restart, and route handoff preserve the active stage.",
+ "sourceRoots": [
+ "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "uapi/app/terminal/terminal-transaction-query.ts",
+ "uapi/app/terminal/TerminalPageClient.tsx",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "emittedTypes": [
+ "TerminalEnterpriseReadingRouteState",
+ "TerminalConversationHandoffContext.readingStage"
+ ],
+ "requiredEvidence": [
+ "transactionIdRequiredForRecovery",
+ "readingStageQueryParam",
+ "activeStageHydratedFromRoute"
+ ],
+ "rowRoot": "v42-reading-shortest-path-state-machine-row:8d27b75c5cb5dc6528241458",
+ "sourceSafetyClass": "source_safe_reading_shortest_path_state_machine_metadata",
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "ledger-write-authority",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "transition:accepted-need-before-finding-fits",
+ "purpose": "Make accepted Need the hard transition before Finding Fits, preview, settlement, or delivery can proceed.",
+ "sourceRoots": [
+ "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "uapi/app/conversations/conversation-terminal-handoff.ts"
+ ],
+ "emittedTypes": [
+ "acceptedNeedRequiredBeforeFindingFits",
+ "TerminalReadNeedState"
+ ],
+ "requiredEvidence": [
+ "accepted Need required",
+ "ReadNeedComprehensionSynthesis",
+ "ReadFitsFindingSynthesis"
+ ],
+ "rowRoot": "v42-reading-shortest-path-state-machine-row:f9d95c5e18d4566c693e32c1",
+ "sourceSafetyClass": "source_safe_reading_shortest_path_state_machine_metadata",
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "ledger-write-authority",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "retry:restart-and-failure-repair",
+ "purpose": "Represent retry, restart, and failure repair posture as source-safe state metadata without exposing protected source, prompts, provider responses, wallet material, or settlement payloads.",
+ "sourceRoots": [
+ "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "uapi/tests/terminalEnterpriseReadingUxState.test.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "emittedTypes": [
+ "TerminalEnterpriseReadingFailureKind",
+ "TerminalEnterpriseReadingRouteState.failureRepairActions"
+ ],
+ "requiredEvidence": [
+ "retryPreservesNeedLineage",
+ "restartRestoresActiveStage",
+ "failureRepairActions"
+ ],
+ "rowRoot": "v42-reading-shortest-path-state-machine-row:8255affa47cdbf93089ab9cc",
+ "sourceSafetyClass": "source_safe_reading_shortest_path_state_machine_metadata",
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "ledger-write-authority",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "ui:low-detail-proof-on-expand",
+ "purpose": "Keep the default Reading view guided and low-detail while details expand to source-safe proof roots, measurements, blockers, and visible field ids.",
+ "sourceRoots": [
+ "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "uapi/app/terminal/README.md"
+ ],
+ "emittedTypes": [
+ "TerminalEnterpriseReadingUxState.disclosure"
+ ],
+ "requiredEvidence": [
+ "lowDetailDefault",
+ "expandableSourceSafeDetail",
+ "Source-safe detail"
+ ],
+ "rowRoot": "v42-reading-shortest-path-state-machine-row:bc5d512f5a40eab14e0cc0a5",
+ "sourceSafetyClass": "source_safe_reading_shortest_path_state_machine_metadata",
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "ledger-write-authority",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "stream:rich-reading-pipeline-telemetry",
+ "purpose": "Keep Reading pipeline progress inspectable through rich execution stream rows for phase, PTRR step, ThricifiedGeneration, tool, prompt-template id, output schema, and parsed-result posture.",
+ "sourceRoots": [
+ "uapi/app/terminal/terminal-pipeline-harness-client.ts",
+ "uapi/tests/pipelineExecutionLogHeader.test.tsx",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "emittedTypes": [
+ "TerminalReadFitsFindingSynthesisHarnessEvent",
+ "ExecutionLogItem"
+ ],
+ "requiredEvidence": [
+ "pipelinePhaseId",
+ "ptrrStepId",
+ "thricifiedGenerationId",
+ "promptTemplateId",
+ "outputSchema"
+ ],
+ "rowRoot": "v42-reading-shortest-path-state-machine-row:f84a65471fa1a4ff2dc6a8be",
+ "sourceSafetyClass": "source_safe_reading_shortest_path_state_machine_metadata",
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "ledger-write-authority",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "activity:history-and-workbench-readback",
+ "purpose": "Project Reading state through activity history and workbench readback so transaction detail, proof roots, and compensation/settlement posture remain recoverable.",
+ "sourceRoots": [
+ "uapi/app/terminal/terminal-activity-history.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "uapi/app/terminal/terminal-deposit-read-workbench.ts"
+ ],
+ "emittedTypes": [
+ "WorkspaceRun",
+ "TerminalDepositReadWorkbench"
+ ],
+ "requiredEvidence": [
+ "assetPackCompletion",
+ "TerminalDepositedSourceRevision",
+ "sourceRevision"
+ ],
+ "rowRoot": "v42-reading-shortest-path-state-machine-row:96ceba0e8af3d5ad27fcab3c",
+ "sourceSafetyClass": "source_safe_reading_shortest_path_state_machine_metadata",
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "ledger-write-authority",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "tests:route-state-contracts",
+ "purpose": "Prove the state machine through route-state tests, component state tests, Conversation handoff tests, workbench tests, and stream-header tests.",
+ "sourceRoots": [
+ "uapi/tests/terminalEnterpriseReadingUxState.test.ts",
+ "uapi/tests/terminalDepositReadWorkbench.test.ts",
+ "uapi/tests/conversationTerminalHandoff.test.tsx",
+ "uapi/tests/terminalTransactionQuery.test.ts",
+ "uapi/tests/pipelineExecutionLogHeader.test.tsx",
+ ".github/workflows/bitcode-gate-quality.yml"
+ ],
+ "emittedTypes": [
+ "V42ReadingShortestPathStateMachineReport"
+ ],
+ "requiredEvidence": [
+ "terminal-enterprise-reading-ux-state",
+ "readingStage=request-fit",
+ "Browser proof Terminal cockpit"
+ ],
+ "rowRoot": "v42-reading-shortest-path-state-machine-row:e06bfe55a25e9021a4fb3780",
+ "sourceSafetyClass": "source_safe_reading_shortest_path_state_machine_metadata",
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "ledger-write-authority",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "spec:v42-gate3-closure",
+ "purpose": "Bind V42 Gate 3 to SPEC, DELTA, NOTES, PARITY, roadmap, README, workflow, generated artifact, and checker closure.",
+ "sourceRoots": [
+ "BITCODE_SPEC_V42.md",
+ "BITCODE_SPEC_V42_DELTA.md",
+ "BITCODE_SPEC_V42_NOTES.md",
+ "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "SPECIFICATIONS_ROADMAP.md",
+ "README.md",
+ "packages/protocol/README.md"
+ ],
+ "emittedTypes": [
+ "V42ReadingShortestPathStateMachineReport"
+ ],
+ "requiredEvidence": [
+ "V42 Gate 3",
+ "reading shortest path state machine",
+ "check:v42-gate3"
+ ],
+ "rowRoot": "v42-reading-shortest-path-state-machine-row:f0bc898ce7bb6757c5924aa9",
+ "sourceSafetyClass": "source_safe_reading_shortest_path_state_machine_metadata",
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "ledger-write-authority",
+ "secret-values"
+ ]
+ }
+ ],
+ "rowIds": [
+ "state:five-step-shortest-path",
+ "route:transaction-stage-persistence",
+ "transition:accepted-need-before-finding-fits",
+ "retry:restart-and-failure-repair",
+ "ui:low-detail-proof-on-expand",
+ "stream:rich-reading-pipeline-telemetry",
+ "activity:history-and-workbench-readback",
+ "tests:route-state-contracts",
+ "spec:v42-gate3-closure"
+ ],
+ "stepIds": [
+ "request-read",
+ "review-synthesized-need",
+ "request-fit",
+ "review-synthesized-asset-pack",
+ "buy-asset-pack-settle"
+ ],
+ "predicateResults": [
+ {
+ "id": "ux-state-keeps-five-step-path",
+ "sourcePath": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "passed": true
+ },
+ {
+ "id": "ux-state-defines-route-state",
+ "sourcePath": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "passed": true
+ },
+ {
+ "id": "ux-state-defines-retry-failure-source-safety",
+ "sourcePath": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "passed": true
+ },
+ {
+ "id": "ux-state-forbids-protected-payloads",
+ "sourcePath": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "passed": true
+ },
+ {
+ "id": "terminal-page-passes-reading-stage",
+ "sourcePath": "uapi/app/terminal/TerminalPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "workbench-projects-route-state",
+ "sourcePath": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "passed": true
+ },
+ {
+ "id": "workbench-keeps-low-detail-expandable-cards",
+ "sourcePath": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "passed": true
+ },
+ {
+ "id": "workbench-contract-reexports-stage-ids",
+ "sourcePath": "uapi/app/terminal/terminal-deposit-read-workbench.ts",
+ "passed": true
+ },
+ {
+ "id": "terminal-query-reads-reading-stage",
+ "sourcePath": "uapi/app/terminal/terminal-transaction-query.ts",
+ "passed": true
+ },
+ {
+ "id": "activity-history-keeps-reading-readback",
+ "sourcePath": "uapi/app/terminal/terminal-activity-history.ts",
+ "passed": true
+ },
+ {
+ "id": "harness-projects-rich-reading-telemetry",
+ "sourcePath": "uapi/app/terminal/terminal-pipeline-harness-client.ts",
+ "passed": true
+ },
+ {
+ "id": "conversation-handoff-preserves-reading-stage",
+ "sourcePath": "uapi/app/conversations/conversation-terminal-handoff.ts",
+ "passed": true
+ },
+ {
+ "id": "ux-state-tests-cover-route-retry-failure",
+ "sourcePath": "uapi/tests/terminalEnterpriseReadingUxState.test.ts",
+ "passed": true
+ },
+ {
+ "id": "workbench-tests-cover-five-stage-labels",
+ "sourcePath": "uapi/tests/terminalDepositReadWorkbench.test.ts",
+ "passed": true
+ },
+ {
+ "id": "handoff-tests-cover-reading-stage-route",
+ "sourcePath": "uapi/tests/conversationTerminalHandoff.test.tsx",
+ "passed": true
+ },
+ {
+ "id": "query-tests-cover-reading-stage-route",
+ "sourcePath": "uapi/tests/terminalTransactionQuery.test.ts",
+ "passed": true
+ },
+ {
+ "id": "stream-tests-cover-rich-header",
+ "sourcePath": "uapi/tests/pipelineExecutionLogHeader.test.tsx",
+ "passed": true
+ },
+ {
+ "id": "workflow-wires-gate3-check",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "v42-spec-gate3-expanded",
+ "sourcePath": "BITCODE_SPEC_V42.md",
+ "passed": true
+ },
+ {
+ "id": "v42-delta-gate3-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "v42-notes-gate3-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "v42-parity-gate3-implemented",
+ "sourcePath": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate3-closure",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readmes-document-gate3",
+ "sourcePath": "README.md",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "rowCount": 9,
+ "stepCount": 5,
+ "acceptedUserPath": [
+ "request-read",
+ "review-synthesized-need",
+ "request-finding-fits",
+ "review-source-safe-assetpack-preview",
+ "buy-settle-and-deliver-assetpack"
+ ],
+ "requiredPredicateCount": 24,
+ "passedPredicateCount": 24,
+ "failedPredicateIds": [],
+ "routePersistenceCovered": true,
+ "transactionIdRecoveryCovered": true,
+ "restartRetryFailureCovered": true,
+ "acceptedNeedGateCovered": true,
+ "streamLogIntegrationCovered": true,
+ "componentRouteTestsCovered": true,
+ "sourceSafeMetadataOnly": true,
+ "lowDetailDefault": true,
+ "expandableSourceSafeDetail": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "ledgerAuthorityClaimed": false,
+ "legacySourceRoots": false
+ },
+ "sourceRoots": {
+ "terminalUxState": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "terminalWorkbench": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "terminalPageClient": "uapi/app/terminal/TerminalPageClient.tsx",
+ "terminalWorkbenchContract": "uapi/app/terminal/terminal-deposit-read-workbench.ts",
+ "terminalRouteQuery": "uapi/app/terminal/terminal-transaction-query.ts",
+ "terminalActivityHistory": "uapi/app/terminal/terminal-activity-history.ts",
+ "terminalHarnessClient": "uapi/app/terminal/terminal-pipeline-harness-client.ts",
+ "conversationHandoff": "uapi/app/conversations/conversation-terminal-handoff.ts",
+ "uxStateTest": "uapi/tests/terminalEnterpriseReadingUxState.test.ts",
+ "workbenchTest": "uapi/tests/terminalDepositReadWorkbench.test.ts",
+ "handoffTest": "uapi/tests/conversationTerminalHandoff.test.tsx",
+ "queryTest": "uapi/tests/terminalTransactionQuery.test.ts",
+ "streamHeaderTest": "uapi/tests/pipelineExecutionLogHeader.test.tsx",
+ "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml",
+ "v42Spec": "BITCODE_SPEC_V42.md",
+ "v42Delta": "BITCODE_SPEC_V42_DELTA.md",
+ "v42Notes": "BITCODE_SPEC_V42_NOTES.md",
+ "v42Parity": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "roadmap": "SPECIFICATIONS_ROADMAP.md",
+ "rootReadme": "README.md",
+ "terminalReadme": "uapi/app/terminal/README.md",
+ "protocolReadme": "packages/protocol/README.md"
+ }
+}
diff --git a/.bitcode/v42-readneed-review-resynthesis-product-closure.json b/.bitcode/v42-readneed-review-resynthesis-product-closure.json
new file mode 100644
index 00000000..2ec7f691
--- /dev/null
+++ b/.bitcode/v42-readneed-review-resynthesis-product-closure.json
@@ -0,0 +1,644 @@
+{
+ "artifactId": "v42-readneed-review-resynthesis-product-closure",
+ "schemaId": "bitcode.v42.readNeedReviewResynthesisProductClosure.v1",
+ "version": "V42",
+ "currentTarget": "V41",
+ "sourceSafetyVerdict": "source-safe-readneed-review-resynthesis-product-closure-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v42-readneed-review-resynthesis-product-closure:932beb894b734ebe044125ae",
+ "passed": true,
+ "rows": [
+ {
+ "rowId": "request:read-request-persistence",
+ "purpose": "Persist source-safe Read Request data with repository, branch, commit, target artifact kinds, closure criteria, failure modes, feedback, and previous Need lineage.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "uapi/app/api/read-review/route.ts"
+ ],
+ "emittedTypes": [
+ "ReadNeedRequest",
+ "ReadNeedReviewStorageRecord"
+ ],
+ "requiredEvidence": [
+ "bitcode.read.request",
+ "read_request",
+ "previousNeedId"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:dd13403f50f233293a797b93",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "pipeline:ptrr-failsafe-thricified-need-synthesis",
+ "purpose": "Keep ReadNeedComprehensionSynthesis product-owned by PTRR agents whose steps carry FailsafeGenerationSequence over ThricifiedGeneration contracts and typed parser output.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/reading-pipeline-contract.ts",
+ "packages/pipelines/asset-pack/src/__tests__/read-need.test.ts"
+ ],
+ "emittedTypes": [
+ "ReadNeedComprehensionSynthesisInferenceReceipt",
+ "ReadingPipelineContract"
+ ],
+ "requiredEvidence": [
+ "ptrrStepIds",
+ "failsafeSequenceIds",
+ "thricifiedGenerationIds",
+ "ReadNeedComprehensionSynthesis.prompt.need-synthesis"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:2a7caa01828aa9e731d31be0",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "need:synthesized-need-storage",
+ "purpose": "Persist reviewable synthesized Need output before Finding Fits, including requirements, target artifacts, source constraints, proof expectations, and review state.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts"
+ ],
+ "emittedTypes": [
+ "ReadNeed",
+ "synthesized_need"
+ ],
+ "requiredEvidence": [
+ "bitcode.read.need",
+ "needs_acceptance",
+ "synthesized_need"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:9132dd0681fe996ad9af5add",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "feedback:review-resynthesis-lineage",
+ "purpose": "Preserve user feedback and resynthesis attempts so every new Need stays linked to the prior Need and reviewed feedback.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "uapi/tests/api/readReviewRoute.test.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "emittedTypes": [
+ "resynthesis_attempt",
+ "feedbackHistory"
+ ],
+ "requiredEvidence": [
+ "previousNeedId",
+ "resynthesize_read_need",
+ "resynthesis_attempt"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:16e048458da7e50ddd1b4f2f",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "measurement:need-measurement-storage",
+ "purpose": "Persist Need measurement roots and pricing measurement inputs that later drive deterministic preview quotes without exposing source.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "packages/pipelines/asset-pack/src/__tests__/read-need.test.ts"
+ ],
+ "emittedTypes": [
+ "ReadNeedMeasurementDimension",
+ "need_measurement"
+ ],
+ "requiredEvidence": [
+ "measurementRoot",
+ "pricingMeasurementInputs",
+ "shareToFeeFormula"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:49789e8b9beb3a2d19f60ad7",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "admission:accepted-need-gates-finding-fits",
+ "purpose": "Persist accepted-Need admission as the only source-safe handoff into ReadFitsFindingSynthesis and block Finding Fits without acceptance.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "uapi/tests/api/readReviewRoute.test.ts",
+ "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts"
+ ],
+ "emittedTypes": [
+ "ReadFitsFindingAdmission",
+ "accepted_need_admission"
+ ],
+ "requiredEvidence": [
+ "accept_read_need",
+ "accepted_need_admission",
+ "accepted_read_need_missing"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:db95df08a064d2644a6a86db",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "rejection:rejected-need-posture",
+ "purpose": "Persist rejected-Need posture with rejection root, feedback, blocked Finding Fits stage, and repair/resynthesis next action.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "uapi/tests/api/readReviewRoute.test.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "emittedTypes": [
+ "RejectedReadNeed",
+ "rejected_need_posture"
+ ],
+ "requiredEvidence": [
+ "rejectReadNeed",
+ "reject_read_need",
+ "read_need_rejected"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:5470af7414fae6fa252d6df8",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "telemetry:source-safe-runtime-receipts",
+ "purpose": "Emit source-safe telemetry receipts containing phase, PTRR step, Failsafe, ThricifiedGeneration, prompt-template, output-schema, and proof-root identities.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/read-need.ts",
+ "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "packages/pipelines/asset-pack/src/reading-pipeline-contract.ts",
+ "uapi/app/api/read-review/route.ts"
+ ],
+ "emittedTypes": [
+ "ReadNeedReviewTelemetryReceipt",
+ "ReadNeedComprehensionSynthesisInferenceReceipt"
+ ],
+ "requiredEvidence": [
+ "ptrrStepIds",
+ "failsafeSequenceIds",
+ "thricifiedGenerationIds",
+ "promptTemplateIds"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:b1707272fafd2df1da82287f",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "route:read-review-actions",
+ "purpose": "Expose synthesize, resynthesize, accept, and reject actions through the Read review route with storage projection, runtime summary, source-safe telemetry, and Finding Fits admission readback.",
+ "sourceRoots": [
+ "uapi/app/api/read-review/route.ts",
+ "uapi/tests/api/readReviewRoute.test.ts"
+ ],
+ "emittedTypes": [
+ "readNeedReviewRuntime",
+ "storageProjection",
+ "runtimeSummary"
+ ],
+ "requiredEvidence": [
+ "synthesize_read_need",
+ "resynthesize_read_need",
+ "accept_read_need",
+ "reject_read_need"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:6236882a7b982f2c79671dfc",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "ui:terminal-need-runtime-readback",
+ "purpose": "Expose the reviewed Need, feedback loop, rejection path, storage projection, runtime roots, telemetry return type, and Finding Fits blocker/admission state in Terminal without protected source.",
+ "sourceRoots": [
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "uapi/app/terminal/README.md"
+ ],
+ "emittedTypes": [
+ "TerminalReadNeedReviewRuntimeState",
+ "Need runtime, storage, and telemetry"
+ ],
+ "requiredEvidence": [
+ "Reject Read-Need",
+ "readNeedStorageProjection",
+ "readNeedTelemetry",
+ "Need runtime, storage, and telemetry"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:80bccaab5bdfa287e270838a",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "proof:tests-artifact-workflow",
+ "purpose": "Bind V42 Gate 4 closure to package tests, route tests, protocol artifact tests, docs, scripts, and gate/canon workflow checks.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts",
+ "uapi/tests/api/readReviewRoute.test.ts",
+ ".github/workflows/bitcode-gate-quality.yml",
+ ".github/workflows/bitcode-canon-quality.yml",
+ "BITCODE_SPEC_V42.md",
+ "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "SPECIFICATIONS_ROADMAP.md"
+ ],
+ "emittedTypes": [
+ "V42ReadNeedReviewResynthesisProductClosure"
+ ],
+ "requiredEvidence": [
+ "check-v42-gate4-readneed-review-resynthesis-product-closure.mjs",
+ "v42-readneed-review-resynthesis-product-closure"
+ ],
+ "rowRoot": "v42-readneed-review-resynthesis-product-closure-row:b09ae61cf4664f8a3914be8e",
+ "sourceSafetyClass": "source_safe_readneed_review_resynthesis_product_closure_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ }
+ ],
+ "rowIds": [
+ "request:read-request-persistence",
+ "pipeline:ptrr-failsafe-thricified-need-synthesis",
+ "need:synthesized-need-storage",
+ "feedback:review-resynthesis-lineage",
+ "measurement:need-measurement-storage",
+ "admission:accepted-need-gates-finding-fits",
+ "rejection:rejected-need-posture",
+ "telemetry:source-safe-runtime-receipts",
+ "route:read-review-actions",
+ "ui:terminal-need-runtime-readback",
+ "proof:tests-artifact-workflow"
+ ],
+ "predicateResults": [
+ {
+ "id": "read-need-defines-review-states",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-need.ts",
+ "passed": true
+ },
+ {
+ "id": "read-need-accept-and-reject-actions",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-need.ts",
+ "passed": true
+ },
+ {
+ "id": "inference-receipt-covers-ptrr-failsafe-thricified",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-need.ts",
+ "passed": true
+ },
+ {
+ "id": "contract-has-four-phases-and-sixteen-steps",
+ "sourcePath": "packages/pipelines/asset-pack/src/reading-pipeline-contract.ts",
+ "passed": true
+ },
+ {
+ "id": "runtime-defines-storage-records",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "passed": true
+ },
+ {
+ "id": "runtime-defines-resynthesis-admission-rejection",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "passed": true
+ },
+ {
+ "id": "runtime-source-safety",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "passed": true
+ },
+ {
+ "id": "runtime-persists-to-execution-store",
+ "sourcePath": "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "passed": true
+ },
+ {
+ "id": "package-exports-runtime",
+ "sourcePath": "packages/pipelines/asset-pack/src/index.ts",
+ "passed": true
+ },
+ {
+ "id": "package-tests-cover-runtime",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts",
+ "passed": true
+ },
+ {
+ "id": "read-need-tests-cover-real-inference-receipts",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/read-need.test.ts",
+ "passed": true
+ },
+ {
+ "id": "contract-tests-cover-review-output",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/reading-pipeline-contract.test.ts",
+ "passed": true
+ },
+ {
+ "id": "route-exposes-all-review-actions",
+ "sourcePath": "uapi/app/api/read-review/route.ts",
+ "passed": true
+ },
+ {
+ "id": "route-persists-all-runtime-actions",
+ "sourcePath": "uapi/app/api/read-review/route.ts",
+ "passed": true
+ },
+ {
+ "id": "route-returns-runtime-projection",
+ "sourcePath": "uapi/app/api/read-review/route.ts",
+ "passed": true
+ },
+ {
+ "id": "route-tests-cover-runtime-and-rejection",
+ "sourcePath": "uapi/tests/api/readReviewRoute.test.ts",
+ "passed": true
+ },
+ {
+ "id": "protocol-parity-keeps-finding-fits-blocked",
+ "sourcePath": "uapi/tests/api/readReviewProtocolParity.test.ts",
+ "passed": true
+ },
+ {
+ "id": "terminal-ui-exposes-runtime-readback",
+ "sourcePath": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "passed": true
+ },
+ {
+ "id": "terminal-ui-exposes-rejection",
+ "sourcePath": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "passed": true
+ },
+ {
+ "id": "terminal-ux-keeps-accepted-need-gate",
+ "sourcePath": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "passed": true
+ },
+ {
+ "id": "spec-gate4-expanded",
+ "sourcePath": "BITCODE_SPEC_V42.md",
+ "passed": true
+ },
+ {
+ "id": "delta-gate4-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "notes-gate4-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "parity-gate4-implemented",
+ "sourcePath": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-advanced-to-gate4",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readmes-document-gate4",
+ "sourcePath": "README.md",
+ "passed": true
+ },
+ {
+ "id": "workflows-run-gate4-check",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "rowCount": 11,
+ "requiredPredicateCount": 27,
+ "passedPredicateCount": 27,
+ "failedPredicateIds": [],
+ "pipelineName": "ReadNeedComprehensionSynthesis",
+ "nextPipelineName": "ReadFitsFindingSynthesis",
+ "actions": [
+ "synthesize_read_need",
+ "resynthesize_read_need",
+ "accept_read_need",
+ "reject_read_need"
+ ],
+ "persistedRecordKinds": [
+ "read_request",
+ "synthesized_need",
+ "feedback",
+ "resynthesis_attempt",
+ "need_measurement",
+ "accepted_need_admission",
+ "rejected_need_posture",
+ "telemetry_receipt"
+ ],
+ "phaseCount": 4,
+ "ptrrStepCount": 16,
+ "failsafeSequenceCount": 48,
+ "thricifiedGenerationCount": 48,
+ "acceptedNeedRequiredForFindingFits": true,
+ "rejectedNeedBlocksFindingFits": true,
+ "terminalRuntimeReadbackCovered": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "legacySourceRoots": false
+ },
+ "sourceRoots": {
+ "readNeed": "packages/pipelines/asset-pack/src/read-need.ts",
+ "readNeedRuntime": "packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts",
+ "readingPipelineContract": "packages/pipelines/asset-pack/src/reading-pipeline-contract.ts",
+ "packageIndex": "packages/pipelines/asset-pack/src/index.ts",
+ "packageJson": "packages/pipelines/asset-pack/package.json",
+ "readNeedTest": "packages/pipelines/asset-pack/src/__tests__/read-need.test.ts",
+ "runtimeTest": "packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts",
+ "readingContractTest": "packages/pipelines/asset-pack/src/__tests__/reading-pipeline-contract.test.ts",
+ "readReviewRoute": "uapi/app/api/read-review/route.ts",
+ "readReviewRouteTest": "uapi/tests/api/readReviewRoute.test.ts",
+ "readReviewProtocolParityTest": "uapi/tests/api/readReviewProtocolParity.test.ts",
+ "terminalWorkbench": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "terminalUxState": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "gateWorkflow": ".github/workflows/bitcode-gate-quality.yml",
+ "canonWorkflow": ".github/workflows/bitcode-canon-quality.yml",
+ "v42Spec": "BITCODE_SPEC_V42.md",
+ "v42Delta": "BITCODE_SPEC_V42_DELTA.md",
+ "v42Notes": "BITCODE_SPEC_V42_NOTES.md",
+ "v42Parity": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "roadmap": "SPECIFICATIONS_ROADMAP.md",
+ "rootReadme": "README.md",
+ "terminalReadme": "uapi/app/terminal/README.md",
+ "assetPackReadme": "packages/pipelines/asset-pack/README.md",
+ "protocolReadme": "packages/protocol/README.md"
+ }
+}
diff --git a/.bitcode/v42-settlement-rights-delivery.json b/.bitcode/v42-settlement-rights-delivery.json
new file mode 100644
index 00000000..2e3f4285
--- /dev/null
+++ b/.bitcode/v42-settlement-rights-delivery.json
@@ -0,0 +1,587 @@
+{
+ "artifactId": "v42-settlement-rights-delivery",
+ "schemaId": "bitcode.v42.settlementRightsDelivery.v1",
+ "version": "V42",
+ "currentTarget": "V41",
+ "sourceSafetyVerdict": "source-safe-v42-settlement-rights-delivery-metadata",
+ "rowIds": [
+ "purchase:quote-to-payment-observation",
+ "finality:btc-testnet-confirmation-gate",
+ "rights:btd-read-right-transfer",
+ "compensation:source-to-shares-conservation",
+ "delivery:source-bearing-pull-request-unlock",
+ "sync:ledger-database-object-storage-reconciliation",
+ "repair:fail-closed-settlement-posture",
+ "route:harness-settlement-summary",
+ "ui:terminal-settlement-readback",
+ "host:live-harness-boundary-materialization",
+ "proof:tests-artifact-workflow"
+ ],
+ "rows": [
+ {
+ "rowId": "purchase:quote-to-payment-observation",
+ "purpose": "Convert the Gate 5 deterministic quote into a reader BTC payment observation without server custody or private wallet material.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "uapi/app/api/pipeline-harness/asset-pack/runner.ts"
+ ],
+ "emittedTypes": [
+ "AssetPackSettlementPaymentObservation",
+ "AssetPackPreviewQuoteReceipt"
+ ],
+ "requiredEvidence": [
+ "expectedSats",
+ "observedDebitSats",
+ "observedCreditSats",
+ "serverCustody: false"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:6a9db7cbd29a673da5745714",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "finality:btc-testnet-confirmation-gate",
+ "purpose": "Require confirmed BTC/testnet finality before BTD rights transfer, source unlock, or source-bearing repository delivery.",
+ "sourceRoots": [
+ "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"
+ ],
+ "emittedTypes": [
+ "AssetPackSettlementFinalityReceipt",
+ "BtdRightsTransferReceipt"
+ ],
+ "requiredEvidence": [
+ "finalityState",
+ "confirmed",
+ "Rights transfer receipt requires confirmed BTC fee finality"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:48bb991b2af8b770ed85c7f6",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "rights:btd-read-right-transfer",
+ "purpose": "Transfer the BTD read right to the paying reader only after the quote, payment, finality, and conservation checks agree.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "packages/btd/src/receipts.ts",
+ "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts"
+ ],
+ "emittedTypes": [
+ "BtdRightsTransferReceipt",
+ "BtdReadReceipt"
+ ],
+ "requiredEvidence": [
+ "buildBtdRightsTransferReceipt",
+ "buildBtdReadReceipt",
+ "paid_unlocked",
+ "licensed_read"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:74d15d0a778a706f9859887e",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "compensation:source-to-shares-conservation",
+ "purpose": "Allocate BTC sats to selected fit deposits with deterministic source-to-shares conservation and proof roots.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "packages/btd/src/source-to-shares.ts",
+ "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts"
+ ],
+ "emittedTypes": [
+ "SourceToSharesProof",
+ "settlementConservation"
+ ],
+ "requiredEvidence": [
+ "buildSourceToSharesProof",
+ "settlementAllocations",
+ "balanced"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:8d69b6c060bb87916dd00328",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "delivery:source-bearing-pull-request-unlock",
+ "purpose": "Unlock the source-bearing pull request only after payment finality, BTD rights, compensation, and reconciliation readbacks pass.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "packages/btd/src/settlement.ts",
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx"
+ ],
+ "emittedTypes": [
+ "AssetPackDeliveryUnlockReceipt",
+ "AssetPackSettlementUnlock"
+ ],
+ "requiredEvidence": [
+ "source_bearing_pull_request_ready",
+ "pull_request_after_settlement",
+ "sourceBearingDeliveryVisibleToReader"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:9cbc9e6c25316593954f2c88",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "sync:ledger-database-object-storage-reconciliation",
+ "purpose": "Synchronize ledger facts, database projections, object storage roots, and staging-testnet readback before delivery is visible.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "packages/btd/src/reconciliation.ts",
+ "uapi/app/api/pipeline-harness/asset-pack/runner.ts"
+ ],
+ "emittedTypes": [
+ "LedgerDatabaseReconciliationReport"
+ ],
+ "requiredEvidence": [
+ "reconcileLedgerDatabaseProjection",
+ "buildSupabaseStagingTestnetProjectionReadback",
+ "tkpyosihuouusyaxtbau"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:51d4635144f588839effe4f4",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "repair:fail-closed-settlement-posture",
+ "purpose": "Represent underpayment, missing finality, projection drift, and missing delivery as repairable blockers without leaking source.",
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts"
+ ],
+ "emittedTypes": [
+ "AssetPackSettlementRightsDeliveryRepairPosture"
+ ],
+ "requiredEvidence": [
+ "blocked_until_payment_finality",
+ "blocked_until_compensation_conservation",
+ "blocked_until_projection_repair"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:b5698bf4f3b93121a624bd5f",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "route:harness-settlement-summary",
+ "purpose": "Summarize payment, finality, rights, source-to-shares, delivery, reconciliation, replay, and storage roots through the harness route.",
+ "sourceRoots": [
+ "uapi/app/api/pipeline-harness/asset-pack/runner.ts",
+ "uapi/tests/api/pipelineHarnessRoute.test.ts"
+ ],
+ "emittedTypes": [
+ "assetPackSettlementRightsDeliveryBoundary",
+ "assetPackDeliveryUnlock"
+ ],
+ "requiredEvidence": [
+ "summarizeAssetPackSettlementRightsDeliveryBoundary",
+ "assetPackLedgerDatabaseStorageReconciliation"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:7fffe81a5aff0562ee30737d",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "ui:terminal-settlement-readback",
+ "purpose": "Render settlement rights, compensation, delivery, replay, and reconciliation readback in Terminal expandable metadata.",
+ "sourceRoots": [
+ "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "uapi/app/terminal/terminal-pipeline-harness-client.ts",
+ "uapi/tests/terminalPipelineHarnessClient.test.ts"
+ ],
+ "emittedTypes": [
+ "assetPackSettlementBoundaryRows",
+ "TerminalReadFitsFindingSynthesisHarnessStreamSnapshot"
+ ],
+ "requiredEvidence": [
+ "Settlement rights, compensation, and delivery",
+ "settlement-boundary",
+ "delivery-unlock"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:4a0ae64335797f60b63c3742",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "host:live-harness-boundary-materialization",
+ "purpose": "Materialize AssetPackPreviewBoundary and AssetPackSettlementRightsDeliveryBoundary inside the live sandbox harness output.",
+ "sourceRoots": [
+ "packages/pipeline-hosts/src/asset-pack-harness.ts",
+ "packages/pipeline-hosts/src/__tests__/asset-pack-harness.test.ts"
+ ],
+ "emittedTypes": [
+ "assetPackPreviewBoundary",
+ "assetPackSettlementRightsDeliveryBoundary"
+ ],
+ "requiredEvidence": [
+ "buildAssetPackSettlementRightsDeliveryBoundary",
+ "persistAssetPackSettlementRightsDeliveryBoundary"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:e3999d37f9ba9d8d0c3fd9de",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ },
+ {
+ "rowId": "proof:tests-artifact-workflow",
+ "purpose": "Bind V42 Gate 6 closure to generated artifact, protocol test, package tests, harness route tests, docs, and workflow checks.",
+ "sourceRoots": [
+ ".github/workflows/bitcode-gate-quality.yml",
+ ".github/workflows/bitcode-canon-quality.yml",
+ "package.json"
+ ],
+ "emittedTypes": [
+ "V42SettlementRightsDelivery"
+ ],
+ "requiredEvidence": [
+ "check-v42-gate6-settlement-rights-delivery.mjs",
+ "v42-settlement-rights-delivery"
+ ],
+ "rowRoot": "v42-settlement-rights-delivery-row:b09ae61cf4664f8a3914be8e",
+ "sourceSafetyClass": "source_safe_v42_settlement_rights_delivery_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "wallet-private-material",
+ "settlement-private-payloads",
+ "secret-values"
+ ]
+ }
+ ],
+ "predicateResults": [
+ {
+ "id": "boundary-defines-core-types",
+ "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "passed": true
+ },
+ {
+ "id": "boundary-composes-btd-primitives",
+ "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "passed": true
+ },
+ {
+ "id": "boundary-builds-source-to-shares",
+ "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "passed": true
+ },
+ {
+ "id": "boundary-builds-reconciliation",
+ "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "passed": true
+ },
+ {
+ "id": "boundary-source-safety",
+ "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "passed": true
+ },
+ {
+ "id": "tests-cover-confirmed-delivery",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts",
+ "passed": true
+ },
+ {
+ "id": "tests-cover-underpayment",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts",
+ "passed": true
+ },
+ {
+ "id": "tests-cover-finality",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts",
+ "passed": true
+ },
+ {
+ "id": "tests-cover-reconciliation-drift",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts",
+ "passed": true
+ },
+ {
+ "id": "host-materializes-boundary",
+ "sourcePath": "packages/pipeline-hosts/src/asset-pack-harness.ts",
+ "passed": true
+ },
+ {
+ "id": "host-test-covers-boundary",
+ "sourcePath": "packages/pipeline-hosts/src/__tests__/asset-pack-harness.test.ts",
+ "passed": true
+ },
+ {
+ "id": "route-summarizes-boundary",
+ "sourcePath": "uapi/app/api/pipeline-harness/asset-pack/runner.ts",
+ "passed": true
+ },
+ {
+ "id": "route-test-covers-boundary",
+ "sourcePath": "uapi/tests/api/pipelineHarnessRoute.test.ts",
+ "passed": true
+ },
+ {
+ "id": "terminal-renders-boundary",
+ "sourcePath": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "passed": true
+ },
+ {
+ "id": "terminal-client-summarizes-boundary",
+ "sourcePath": "uapi/app/terminal/terminal-pipeline-harness-client.ts",
+ "passed": true
+ },
+ {
+ "id": "terminal-client-test-covers-boundary",
+ "sourcePath": "uapi/tests/terminalPipelineHarnessClient.test.ts",
+ "passed": true
+ },
+ {
+ "id": "v42-spec-expanded",
+ "sourcePath": "BITCODE_SPEC_V42.md",
+ "passed": true
+ },
+ {
+ "id": "v42-delta-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "v42-notes-expanded",
+ "sourcePath": "BITCODE_SPEC_V42_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "v42-parity-implemented",
+ "sourcePath": "BITCODE_SPEC_V42_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": "protocol-exports-gate6",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "package-scripts-wire-gate6",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "workflows-run-gate6-check",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "rowCount": 11,
+ "sourceSafetyVerdict": "source-safe-v42-settlement-rights-delivery-metadata",
+ "runtimeType": "AssetPackSettlementRightsDeliveryBoundary",
+ "paymentType": "AssetPackSettlementPaymentObservation",
+ "finalityType": "AssetPackSettlementFinalityReceipt",
+ "rightsTransferType": "BtdRightsTransferReceipt",
+ "readReceiptType": "BtdReadReceipt",
+ "sourceToSharesType": "SourceToSharesProof",
+ "reconciliationType": "LedgerDatabaseReconciliationReport",
+ "deliveryType": "AssetPackDeliveryUnlockReceipt",
+ "replayType": "AssetPackSettlementRightsDeliveryReplayReceipt",
+ "requiredReadbacksBeforeUnlock": [
+ "btc_payment_observation",
+ "settlement_finality",
+ "source_to_shares_compensation",
+ "btd_rights_transfer",
+ "ledger_database_storage_reconciliation"
+ ],
+ "stagingProjectRef": "tkpyosihuouusyaxtbau",
+ "stagingRestHost": "https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "credentialsSerialized": false,
+ "hostBoundaryMaterializationCovered": true,
+ "routeReadbackCovered": true,
+ "terminalReadbackCovered": true,
+ "confirmedPaymentCovered": true,
+ "underpaymentBlockedCovered": true,
+ "finalityBlockedCovered": true,
+ "reconciliationRepairCovered": true,
+ "failedPredicateIds": []
+ },
+ "passed": true,
+ "artifactRoot": "v42-settlement-rights-delivery:6866f71624c147178c383189"
+}
diff --git a/.bitcode/v42-spec-family-report.json b/.bitcode/v42-spec-family-report.json
new file mode 100644
index 00000000..d343c532
--- /dev/null
+++ b/.bitcode/v42-spec-family-report.json
@@ -0,0 +1,34 @@
+{
+ "reportId": "v42-spec-family-report",
+ "version": "V42",
+ "proofSourceCommit": "5c9c0270b9d864fe13b7e0a429700e1c9a7689d9",
+ "generatedAt": "2026-05-28T21:36:43-03:00",
+ "generatorId": "bitcode.proven-generator.v1",
+ "worktreeState": "clean",
+ "checkedVersion": "V42",
+ "mode": "promoted",
+ "currentTarget": "V42",
+ "pointerVersion": "V42",
+ "passed": true,
+ "failureCount": 0,
+ "failures": [],
+ "requiredFiles": [
+ "BITCODE_SPEC_V42.md",
+ "BITCODE_SPEC_V42_DELTA.md",
+ "BITCODE_SPEC_V42_NOTES.md",
+ "BITCODE_SPEC_V42_PARITY_MATRIX.md"
+ ],
+ "supportFiles": [
+ "BITCODE_SPECIFYING.md",
+ "BITCODE_SPEC_TEMPLATEGUIDE.md"
+ ],
+ "requiredStatusLabelCount": 4,
+ "requiredPromotedStatusLabelCount": 1,
+ "requiredSpecSectionCount": 18,
+ "requiredAppendixSectionCount": 14,
+ "requiredProofFamilyCount": 9,
+ "requiredGeneratedArtifactCatalogSectionCount": 9,
+ "requiredGeneratedArtifactPathCount": 10,
+ "requiredNotesSectionCount": 4,
+ "requiredSubsystemCoverageCount": 18
+}
diff --git a/.bitcode/v43-canon-posture-drift-report.json b/.bitcode/v43-canon-posture-drift-report.json
new file mode 100644
index 00000000..74bd7b29
--- /dev/null
+++ b/.bitcode/v43-canon-posture-drift-report.json
@@ -0,0 +1,77 @@
+{
+ "reportId": "v43-canon-posture-drift-report",
+ "version": "V43",
+ "checkedActiveCanonVersion": "V43",
+ "checkedDraftTargetVersion": "V44",
+ "pointerVersion": "V43",
+ "proofSourceCommit": "3c7a9f998656635cc28c8b4584ae964ac04154fa",
+ "generatedAt": "2026-05-29T15:19:41-03:00",
+ "generatorId": "bitcode.proven-generator.v1",
+ "worktreeState": "clean",
+ "passed": true,
+ "checkCount": 10,
+ "blockingFailureCount": 0,
+ "blockingFailures": [],
+ "runtimeSpecVersion": "Bitcode Spec V43 active canon / V44 system draft",
+ "publicSpecVersion": "Bitcode Spec V43 active canon / V44 system draft",
+ "activeProvenAppendixPath": "BITCODE_SPEC_V43_PROVEN.md",
+ "policyRef": "policy://bitcode/spec-v43-active-v44-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 V43 while runtime expects V43."
+ },
+ {
+ "checkId": "canon-posture-constant-alignment",
+ "passed": true,
+ "detail": "canon-posture constants resolve V43/V44 with operator label V43 active canon / V44 system draft."
+ },
+ {
+ "checkId": "proven-appendix-alignment",
+ "passed": true,
+ "detail": "active generated appendix path is BITCODE_SPEC_V43_PROVEN.md."
+ },
+ {
+ "checkId": "policy-ref-alignment",
+ "passed": true,
+ "detail": "policy reference is policy://bitcode/spec-v43-active-v44-system-draft/current."
+ },
+ {
+ "checkId": "runtime-state-alignment",
+ "passed": true,
+ "detail": "buildInitialState() reports Bitcode Spec V43 active canon / V44 system draft with canon posture V43/V44."
+ },
+ {
+ "checkId": "public-state-alignment",
+ "passed": true,
+ "detail": "publicState() reports Bitcode Spec V43 active canon / V44 system draft with canon posture V43/V44."
+ },
+ {
+ "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 V43 active canon and BITCODE_SPEC_V43_PROVEN.md as the current generated appendix."
+ }
+ ]
+}
diff --git a/.bitcode/v43-canonical-input-report.json b/.bitcode/v43-canonical-input-report.json
new file mode 100644
index 00000000..249ab2c2
--- /dev/null
+++ b/.bitcode/v43-canonical-input-report.json
@@ -0,0 +1,19 @@
+{
+ "reportId": "v43-canonical-input-report",
+ "version": "V43",
+ "proofSourceCommit": "3c7a9f998656635cc28c8b4584ae964ac04154fa",
+ "generatedAt": "2026-05-29T15:19:41-03:00",
+ "generatorId": "bitcode.proven-generator.v1",
+ "worktreeState": "clean",
+ "checkedTargetVersion": "V43",
+ "pointerVersion": "V43",
+ "passed": true,
+ "failureCount": 0,
+ "failures": [],
+ "specPath": "BITCODE_SPEC_V43.md",
+ "notesPath": "BITCODE_SPEC_V43_NOTES.md",
+ "provenPath": "BITCODE_SPEC_V43_PROVEN.md",
+ "parityPath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "requiredGeneratedArtifactPaths": [],
+ "requiredGeneratedArtifactCount": 0
+}
diff --git a/.bitcode/v43-cross-route-rehearsal-telemetry-repair.json b/.bitcode/v43-cross-route-rehearsal-telemetry-repair.json
new file mode 100644
index 00000000..524daf62
--- /dev/null
+++ b/.bitcode/v43-cross-route-rehearsal-telemetry-repair.json
@@ -0,0 +1,901 @@
+{
+ "artifactId": "v43-cross-route-rehearsal-telemetry-repair",
+ "schemaId": "bitcode.v43.crossRouteRehearsalTelemetryRepair.v1",
+ "version": "V43",
+ "currentTarget": "V42",
+ "sourceSafetyVerdict": "source-safe-cross-route-rehearsal-telemetry-repair-metadata",
+ "laneIds": [
+ "local",
+ "staging-testnet"
+ ],
+ "routeIds": [
+ "/deposit",
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack",
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request",
+ "packs:inspect-activity-repair"
+ ],
+ "rowIds": [
+ "lane:local-cross-route-rehearsal",
+ "lane:staging-testnet-cross-route-rehearsal",
+ "deposit:options-policy-admission",
+ "read:need-fits-preview",
+ "settlement:rights-delivery-compensation",
+ "packs:activity-master-detail-readback",
+ "telemetry:execution-stream-database-readback",
+ "sync:ledger-database-storage-reconciliation",
+ "repair:fail-closed-recovery-matrix",
+ "boundary:source-safe-disclosure",
+ "operator:source-safe-receipts",
+ "proof:artifacts-tests-workflows-docs"
+ ],
+ "rows": [
+ {
+ "rowId": "lane:local-cross-route-rehearsal",
+ "laneId": "local",
+ "routeIds": [
+ "/deposit",
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack",
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request",
+ "packs:inspect-activity-repair"
+ ],
+ "sourceRoots": [
+ "scripts/rehearse-v43-cross-route-product-flow.mjs",
+ ".bitcode/v43-packs-activity-master-detail.json",
+ ".bitcode/v43-route-ux-product-excellence.json"
+ ],
+ "requiredEvidence": [
+ "local",
+ "dryRun",
+ "source-safe receipt",
+ "no value-bearing mainnet"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:31c27d8184e54a6c4e697fe1",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "lane:staging-testnet-cross-route-rehearsal",
+ "laneId": "staging-testnet",
+ "routeIds": [
+ "/deposit",
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack",
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request",
+ "packs:inspect-activity-repair"
+ ],
+ "sourceRoots": [
+ "scripts/rehearse-v43-cross-route-product-flow.mjs",
+ ".bitcode/v43-deposit-option-admission.json",
+ ".bitcode/v43-route-ux-product-excellence.json"
+ ],
+ "requiredEvidence": [
+ "staging-testnet",
+ "tkpyosihuouusyaxtbau",
+ "real inference posture",
+ "database stream readback"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:6aa2640fbc2352bf06913970",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "deposit:options-policy-admission",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/deposit",
+ "/packs"
+ ],
+ "stageIds": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "packs:inspect-activity-repair"
+ ],
+ "sourceRoots": [
+ ".bitcode/v43-deposit-route-options.json",
+ ".bitcode/v43-deposit-policy-compensation.json",
+ ".bitcode/v43-deposit-option-admission.json"
+ ],
+ "requiredEvidence": [
+ "DepositAssetPackOptionSynthesis",
+ "DepositAssetPackOptionPolicy",
+ "DepositAssetPackOptionAdmissionReport"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:39fa8840a0f327f459b33efb",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "read:need-fits-preview",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack"
+ ],
+ "sourceRoots": [
+ ".bitcode/v43-read-route-five-step-ux.json",
+ "uapi/app/read/read-route-model.ts",
+ "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts"
+ ],
+ "requiredEvidence": [
+ "ReadNeedComprehensionSynthesis",
+ "ReadFitsFindingSynthesis",
+ "sourceSafePreview"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:2bd87a65e6c63f1b49376b96",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "settlement:rights-delivery-compensation",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request"
+ ],
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts"
+ ],
+ "requiredEvidence": [
+ "BTC",
+ "rights transfer",
+ "source-to-shares compensation",
+ "pull_request_after_settlement"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:bb40f5d2502047b86fcf46bc",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "packs:activity-master-detail-readback",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/packs"
+ ],
+ "stageIds": [
+ "packs:inspect-activity-repair"
+ ],
+ "sourceRoots": [
+ ".bitcode/v43-packs-activity-master-detail.json",
+ "uapi/app/packs/PacksPageClient.tsx",
+ "uapi/app/api/packs/activity/route.ts"
+ ],
+ "requiredEvidence": [
+ "PackActivity",
+ "settlementState",
+ "compensationState",
+ "deliveryState",
+ "repairState"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:cdd10f3cd5ebd958e0061cbd",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "telemetry:execution-stream-database-readback",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/deposit",
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack",
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request",
+ "packs:inspect-activity-repair"
+ ],
+ "sourceRoots": [
+ "uapi/components/base/bitcode/execution/pipeline-execution-log.tsx",
+ "packages/pipelines/asset-pack/src/reading-operational-telemetry-repair-readback.ts",
+ "scripts/rehearse-v43-cross-route-product-flow.mjs"
+ ],
+ "requiredEvidence": [
+ "pipeline-execution-log",
+ "metadata",
+ "database readback",
+ "repair"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:016831be1aba8884936bbf68",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "sync:ledger-database-storage-reconciliation",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/packs"
+ ],
+ "stageIds": [
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request"
+ ],
+ "sourceRoots": [
+ "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ ".bitcode/v43-deposit-option-admission.json"
+ ],
+ "requiredEvidence": [
+ "ledger",
+ "database",
+ "object storage",
+ "reconciliation"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:418bed502488469483d1b205",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "repair:fail-closed-recovery-matrix",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/deposit",
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack",
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request",
+ "packs:inspect-activity-repair"
+ ],
+ "sourceRoots": [
+ "uapi/app/deposit/deposit-route-model.ts",
+ "uapi/app/read/read-route-model.ts",
+ "uapi/app/packs/PacksPageClient.tsx"
+ ],
+ "requiredEvidence": [
+ "critical-source block",
+ "acceptedNeedRequiredBeforeFindingFits",
+ "repairState"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:71f62996fba13748388e10d5",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "boundary:source-safe-disclosure",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/deposit",
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack",
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request",
+ "packs:inspect-activity-repair"
+ ],
+ "sourceRoots": [
+ "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "uapi/app/deposit/DepositPageClient.tsx",
+ "uapi/app/read/ReadPageClient.tsx"
+ ],
+ "requiredEvidence": [
+ "Withheld",
+ "unpaid AssetPack source",
+ "settlement private payloads"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:572ec02b7d9a0521e7d27e9f",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "operator:source-safe-receipts",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/deposit",
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack",
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request",
+ "packs:inspect-activity-repair"
+ ],
+ "sourceRoots": [
+ "scripts/rehearse-v43-cross-route-product-flow.mjs",
+ "scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs"
+ ],
+ "requiredEvidence": [
+ "secretValueSerialized: false",
+ "receiptRoot",
+ "V43_CROSS_ROUTE_REHEARSAL_LANES"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:c57098c14acd29f34f2737b0",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ {
+ "rowId": "proof:artifacts-tests-workflows-docs",
+ "laneId": "local-and-staging-testnet",
+ "routeIds": [
+ "/deposit",
+ "/read",
+ "/packs"
+ ],
+ "stageIds": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack",
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request",
+ "packs:inspect-activity-repair"
+ ],
+ "sourceRoots": [
+ "packages/protocol/test/v43-cross-route-rehearsal-telemetry-repair.test.js",
+ "package.json",
+ ".github/workflows/bitcode-gate-quality.yml",
+ ".github/workflows/bitcode-canon-quality.yml"
+ ],
+ "requiredEvidence": [
+ "v43-cross-route-rehearsal-telemetry-repair",
+ "check:v43-gate9",
+ "generate:v43-cross-route-rehearsal"
+ ],
+ "rowRoot": "v43-cross-route-rehearsal-row:3d6605d3078e33b13b4f2abf",
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ }
+ ],
+ "predicateResults": [
+ {
+ "id": "gate3-artifact-passed",
+ "sourcePath": ".bitcode/v43-packs-activity-master-detail.json",
+ "passed": true
+ },
+ {
+ "id": "gate4-artifact-passed",
+ "sourcePath": ".bitcode/v43-read-route-five-step-ux.json",
+ "passed": true
+ },
+ {
+ "id": "gate5-artifact-passed",
+ "sourcePath": ".bitcode/v43-deposit-route-options.json",
+ "passed": true
+ },
+ {
+ "id": "gate6-artifact-passed",
+ "sourcePath": ".bitcode/v43-deposit-policy-compensation.json",
+ "passed": true
+ },
+ {
+ "id": "gate7-artifact-passed",
+ "sourcePath": ".bitcode/v43-deposit-option-admission.json",
+ "passed": true
+ },
+ {
+ "id": "gate8-artifact-passed",
+ "sourcePath": ".bitcode/v43-route-ux-product-excellence.json",
+ "passed": true
+ },
+ {
+ "id": "deposit-route-covers-admission",
+ "sourcePath": "uapi/app/deposit/DepositPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "deposit-model-covers-repair-boundaries",
+ "sourcePath": "uapi/app/deposit/deposit-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "read-route-covers-two-pipeline-path",
+ "sourcePath": "uapi/app/read/read-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "read-client-covers-preview-settlement-delivery",
+ "sourcePath": "uapi/app/read/ReadPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "packs-route-covers-activity-repair",
+ "sourcePath": "uapi/app/packs/PacksPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "packs-api-source-safe-readback",
+ "sourcePath": "uapi/app/api/packs/activity/route.ts",
+ "passed": true
+ },
+ {
+ "id": "pipeline-log-rich-metadata",
+ "sourcePath": "uapi/components/base/bitcode/execution/pipeline-execution-log.tsx",
+ "passed": true
+ },
+ {
+ "id": "settlement-boundary-syncs-delivery",
+ "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts",
+ "passed": true
+ },
+ {
+ "id": "preview-boundary-repairs-withheld-source",
+ "sourcePath": "packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts",
+ "passed": true
+ },
+ {
+ "id": "deposit-admission-syncs-storage-telemetry",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "passed": true
+ },
+ {
+ "id": "operator-script-exists",
+ "sourcePath": "scripts/rehearse-v43-cross-route-product-flow.mjs",
+ "passed": true
+ },
+ {
+ "id": "operator-script-binds-staging-testnet",
+ "sourcePath": "scripts/rehearse-v43-cross-route-product-flow.mjs",
+ "passed": true
+ },
+ {
+ "id": "operator-script-source-safe",
+ "sourcePath": "scripts/rehearse-v43-cross-route-product-flow.mjs",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-wired",
+ "sourcePath": "packages/protocol/test/v43-cross-route-rehearsal-telemetry-repair.test.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-exports-wired",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "package-scripts-wired",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "workflows-run-gate9",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "v43-docs-expanded",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "v43-delta-expanded",
+ "sourcePath": "BITCODE_SPEC_V43_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "v43-notes-expanded",
+ "sourcePath": "BITCODE_SPEC_V43_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "v43-parity-implemented",
+ "sourcePath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-advanced-to-gate9",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readmes-document-gate9",
+ "sourcePath": "README.md",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "rowCount": 12,
+ "laneCount": 2,
+ "routeCount": 3,
+ "stageCount": 9,
+ "gateArtifactCount": 6,
+ "lanes": [
+ "local",
+ "staging-testnet"
+ ],
+ "routes": [
+ "/deposit",
+ "/read",
+ "/packs"
+ ],
+ "stages": [
+ "deposit:synthesize-options",
+ "deposit:review-admit",
+ "read:request",
+ "read:review-need",
+ "read:request-finding-fits",
+ "read:preview-assetpack",
+ "settlement:pay-btc-transfer-rights",
+ "delivery:repository-pull-request",
+ "packs:inspect-activity-repair"
+ ],
+ "stagingProjectRef": "tkpyosihuouusyaxtbau",
+ "stagingRestHost": "https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/",
+ "localLaneCovered": true,
+ "stagingTestnetLaneCovered": true,
+ "depositRouteCovered": true,
+ "readRouteCovered": true,
+ "packsRouteCovered": true,
+ "depositOptionAdmissionCovered": true,
+ "readNeedAndFindingFitsCovered": true,
+ "sourceSafePreviewCovered": true,
+ "settlementRightsTransferCovered": true,
+ "compensationCovered": true,
+ "deliveryPullRequestCovered": true,
+ "packActivityRepairCovered": true,
+ "telemetryDatabaseReadbackCovered": true,
+ "ledgerDatabaseStorageSynchronized": true,
+ "repairMatrixCovered": true,
+ "mainnetValueBearingBlocked": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "failedPredicateIds": []
+ },
+ "sourceSafety": {
+ "sourceSafetyClass": "source_safe_cross_route_rehearsal_telemetry_repair_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourcePayloadSerialized": false,
+ "rawProtectedPromptVisible": false,
+ "rawInterpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "privateSettlementPayloadVisible": false,
+ "liveRehearsalLogPayloadSerialized": false,
+ "valueBearingMainnetAdmitted": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-interpolated-prompts",
+ "raw-provider-responses",
+ "unpaid-assetpack-source",
+ "live-rehearsal-log-payloads",
+ "value-bearing-mainnet-admission"
+ ]
+ },
+ "passed": true,
+ "artifactRoot": "v43-cross-route-rehearsal:2ecdcb2f448e780824c46407"
+}
diff --git a/.bitcode/v43-deposit-option-admission.json b/.bitcode/v43-deposit-option-admission.json
new file mode 100644
index 00000000..311a8cad
--- /dev/null
+++ b/.bitcode/v43-deposit-option-admission.json
@@ -0,0 +1,350 @@
+{
+ "artifactId": "v43-deposit-option-admission",
+ "schemaId": "bitcode.v43.depositOptionAdmission.v1",
+ "version": "V43",
+ "currentTarget": "V42",
+ "sourceSafetyVerdict": "source-safe-deposit-option-admission-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v43-deposit-option-admission:57ad99a6209685eb2961858b",
+ "passed": true,
+ "objectIds": [
+ "DepositAssetPackOptionAdmissionReport",
+ "DepositOptionAdmissionReceipt",
+ "DepositOptionReviewDecision",
+ "Depository index projection",
+ "object storage projection",
+ "pack activity synchronization",
+ "deposit option admission telemetry"
+ ],
+ "fieldIds": [
+ "reviewDecision",
+ "admission",
+ "depositoryIndexProjection",
+ "storageProjection",
+ "compensationPreview",
+ "packsActivitySync",
+ "telemetry",
+ "visibility"
+ ],
+ "forbiddenPayloadIds": [
+ "protected_source_payload",
+ "raw_source_text",
+ "unpaid_assetpack_source",
+ "raw_protected_prompt",
+ "interpolated_prompt",
+ "raw_provider_response",
+ "wallet_private_material",
+ "settlement_private_payload"
+ ],
+ "contractRows": [
+ {
+ "rowId": "depositor-review-decisions",
+ "owner": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "contract": "DepositOptionReviewDecision records approved, rejected, resynthesis-requested, and pending decisions before any source-safe option can enter the Depository.",
+ "requiredFields": [
+ "approved-for-admission",
+ "rejected-by-depositor",
+ "resynthesis-requested",
+ "pending-depositor-review"
+ ],
+ "rowRoot": "v43-deposit-option-admission-contract:01e2927f15d946408f8deb2a",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "admission-receipts",
+ "owner": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "contract": "DepositOptionAdmissionReceipt admits only approved, policy-eligible, source-safe options and emits deterministic blockers for pending, rejected, resynthesis, or policy-blocked options.",
+ "requiredFields": [
+ "admitted-to-depository",
+ "not-admitted-policy-blocked",
+ "DepositOptionAdmissionReceipt"
+ ],
+ "rowRoot": "v43-deposit-option-admission-contract:5c71a5d215fd4fc83a129b68",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "depository-index-storage",
+ "owner": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "contract": "Admitted deposit AssetPacks project only measurement and metadata search indexes plus object-storage metadata and external source pointer roots.",
+ "requiredFields": [
+ "depositoryIndexProjection",
+ "storageProjection",
+ "measurements-and-metadata-only"
+ ],
+ "rowRoot": "v43-deposit-option-admission-contract:e2eea037c5e42425792853b1",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "compensation-and-packs-sync",
+ "owner": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
+ "contract": "Admitted options preserve Gate 6 BTC source-to-shares compensation preview and synchronize to /packs as Depository AssetPack activity without minting BTD.",
+ "requiredFields": [
+ "compensationPreview",
+ "source-to-shares-largest-remainder",
+ "depository-assetpack"
+ ],
+ "rowRoot": "v43-deposit-option-admission-contract:82f4f8247db0fa99525046c4",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "telemetry-source-safety",
+ "owner": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "contract": "Admission telemetry emits execution-stream source-safe metadata while protected source, prompts, provider responses, wallet material, and settlement private payloads remain invisible.",
+ "requiredFields": [
+ "deposit-option-admission",
+ "execution-stream",
+ "sourceSafeMetadataOnly"
+ ],
+ "rowRoot": "v43-deposit-option-admission-contract:fb0ba95c7c2e2c2a368b87dc",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ }
+ ],
+ "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",
+ "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",
+ "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",
+ "sourcePath": "BITCODE_SPEC.txt",
+ "passed": true
+ },
+ {
+ "id": "spec-defines-gate7",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "spec-names-admission-report",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "delta-records-gate7",
+ "sourcePath": "BITCODE_SPEC_V43_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "notes-records-gate7",
+ "sourcePath": "BITCODE_SPEC_V43_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "parity-records-gate7",
+ "sourcePath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate7",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readme-records-gate7",
+ "sourcePath": "README.md",
+ "passed": true
+ },
+ {
+ "id": "protocol-readme-records-gate7",
+ "sourcePath": "packages/protocol/README.md",
+ "passed": true
+ },
+ {
+ "id": "admission-model-defines-report",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "passed": true
+ },
+ {
+ "id": "admission-model-defines-review-decisions",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "passed": true
+ },
+ {
+ "id": "admission-model-defines-admission-states",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "passed": true
+ },
+ {
+ "id": "admission-model-defines-index-storage",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "passed": true
+ },
+ {
+ "id": "admission-model-defines-packs-sync",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "passed": true
+ },
+ {
+ "id": "admission-model-defines-telemetry",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "passed": true
+ },
+ {
+ "id": "admission-model-forbids-source-leakage",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "passed": true
+ },
+ {
+ "id": "route-model-owns-admission",
+ "sourcePath": "uapi/app/deposit/deposit-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "deposit-client-renders-admission",
+ "sourcePath": "uapi/app/deposit/DepositPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "pack-activity-recognizes-admission",
+ "sourcePath": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
+ "passed": true
+ },
+ {
+ "id": "asset-pack-package-exports-admission",
+ "sourcePath": "packages/pipelines/asset-pack/src/index.ts",
+ "passed": true
+ },
+ {
+ "id": "asset-pack-manifest-exports-admission",
+ "sourcePath": "packages/pipelines/asset-pack/package.json",
+ "passed": true
+ },
+ {
+ "id": "uapi-jest-maps-admission",
+ "sourcePath": "uapi/jest.config.cjs",
+ "passed": true
+ },
+ {
+ "id": "admission-test-covers-report",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-admission.test.ts",
+ "passed": true
+ },
+ {
+ "id": "route-test-covers-admission",
+ "sourcePath": "uapi/tests/depositRouteModel.test.ts",
+ "passed": true
+ },
+ {
+ "id": "page-test-covers-admission",
+ "sourcePath": "uapi/tests/depositPageClient.test.tsx",
+ "passed": true
+ },
+ {
+ "id": "pack-activity-test-covers-admission",
+ "sourcePath": "uapi/tests/packActivityModel.test.ts",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-covers-artifact",
+ "sourcePath": "packages/protocol/test/v43-deposit-option-admission.test.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-package-exports-gate7",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-types-export-gate7",
+ "sourcePath": "packages/protocol/src/index.d.ts",
+ "passed": true
+ },
+ {
+ "id": "package-json-exposes-gate7",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "gate-workflow-runs-gate7",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "canon-workflow-runs-gate7",
+ "sourcePath": ".github/workflows/bitcode-canon-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "generator-exists",
+ "sourcePath": "scripts/generate-v43-deposit-option-admission.mjs",
+ "passed": true
+ },
+ {
+ "id": "checker-exists",
+ "sourcePath": "scripts/check-v43-gate7-deposit-option-admission.mjs",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "reviewDecisionsImplemented": true,
+ "approvalDecisionImplemented": true,
+ "rejectionDecisionImplemented": true,
+ "resynthesisDecisionImplemented": true,
+ "admissionReceiptsImplemented": true,
+ "approvedPolicyEligibleOptionsAdmittedOnly": true,
+ "depositoryIndexProjectionImplemented": true,
+ "vectorEmbeddingProjectionReadyForAdmittedOptions": true,
+ "storageProjectionImplemented": true,
+ "rawSourceStoredExternally": true,
+ "compensationPreviewContinued": true,
+ "compensationPriceAsset": "BTC",
+ "compensationAllocationMethod": "source-to-shares-largest-remainder",
+ "packsActivitySynchronizationImplemented": true,
+ "packsRoute": "/packs",
+ "packsActivityType": "depository-assetpack",
+ "telemetryImplemented": true,
+ "routeAdmissionReadbackImplemented": true,
+ "btdMintRequiresFutureNeedFitSettlement": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "rawPromptVisible": false,
+ "interpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "requiredPredicateCount": 34,
+ "passedPredicateCount": 34,
+ "failedPredicateIds": []
+ }
+}
diff --git a/.bitcode/v43-deposit-policy-compensation.json b/.bitcode/v43-deposit-policy-compensation.json
new file mode 100644
index 00000000..c4443dc6
--- /dev/null
+++ b/.bitcode/v43-deposit-policy-compensation.json
@@ -0,0 +1,307 @@
+{
+ "artifactId": "v43-deposit-policy-compensation",
+ "schemaId": "bitcode.v43.depositPolicyCompensation.v1",
+ "version": "V43",
+ "currentTarget": "V42",
+ "sourceSafetyVerdict": "source-safe-deposit-policy-compensation-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v43-deposit-policy-compensation:e9a1ba9d758dbfa92dc171d1",
+ "passed": true,
+ "objectIds": [
+ "DepositAssetPackOptionPolicy",
+ "DepositAssetPackOptionPolicyReport",
+ "DepositAssetPackOptionPolicyEvaluation",
+ "source criticality posture",
+ "likely demand posture",
+ "ROI posture",
+ "BTD potential estimate",
+ "BTC source-to-shares compensation route",
+ "future Gate 7 admission boundary"
+ ],
+ "fieldIds": [
+ "sourceCriticality",
+ "demand",
+ "roi",
+ "btdPotential",
+ "compensation",
+ "policyDecision",
+ "admissionBoundary",
+ "policy roots"
+ ],
+ "forbiddenPayloadIds": [
+ "protected_source_payload",
+ "raw_source_text",
+ "unpaid_assetpack_source",
+ "raw_protected_prompt",
+ "interpolated_prompt",
+ "raw_provider_response",
+ "wallet_private_material",
+ "settlement_private_payload"
+ ],
+ "contractRows": [
+ {
+ "rowId": "criticality-policy",
+ "owner": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "contract": "DepositAssetPackOptionPolicy evaluates source criticality from source-safe criticality signals and blocks critical IP before Gate 7 admission.",
+ "requiredFields": [
+ "sourceCriticality",
+ "blocked-critical-source",
+ "critical_source_policy_block"
+ ],
+ "rowRoot": "v43-deposit-policy-contract:e5411b4187a92443f8ac974f",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "demand-roi-policy",
+ "owner": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "contract": "Policy evaluates likely demand and ROI deterministically from source-safe option measurements, demand confidence, estimated settlement, and development cost.",
+ "requiredFields": [
+ "demand",
+ "roi",
+ "positive-expected-value",
+ "negative-expected-value"
+ ],
+ "rowRoot": "v43-deposit-policy-contract:b686a0c2af187d224c61c5f7",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "btd-compensation-policy",
+ "owner": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "contract": "Policy exposes BTD potential as estimate-only and previews future-reader BTC source-to-shares compensation without minting BTD or transferring rights.",
+ "requiredFields": [
+ "btdPotential",
+ "compensation",
+ "source-to-shares-largest-remainder",
+ "BTC"
+ ],
+ "rowRoot": "v43-deposit-policy-contract:00577909a54242c3c4cf17e3",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "route-policy-readback",
+ "owner": "uapi/app/deposit/DepositPageClient.tsx",
+ "contract": "/deposit renders policy readback for criticality, demand, ROI, BTD potential, and compensation while admission/indexing remain owned by Gate 7.",
+ "requiredFields": [
+ "DepositAssetPackOptionPolicy",
+ "BTC source-to-shares preview",
+ "future-gate7-deposit-option-review"
+ ],
+ "rowRoot": "v43-deposit-policy-contract:d04bd16cdda75bf1c0539c52",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ }
+ ],
+ "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",
+ "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",
+ "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",
+ "sourcePath": "BITCODE_SPEC.txt",
+ "passed": true
+ },
+ {
+ "id": "spec-defines-gate6",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "spec-names-policy-objects",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "delta-records-gate6",
+ "sourcePath": "BITCODE_SPEC_V43_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "notes-records-gate6",
+ "sourcePath": "BITCODE_SPEC_V43_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "parity-records-gate6",
+ "sourcePath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate6",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readme-records-gate6",
+ "sourcePath": "README.md",
+ "passed": true
+ },
+ {
+ "id": "protocol-readme-records-gate6",
+ "sourcePath": "packages/protocol/README.md",
+ "passed": true
+ },
+ {
+ "id": "policy-model-defines-report",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "passed": true
+ },
+ {
+ "id": "policy-model-defines-criticality",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "passed": true
+ },
+ {
+ "id": "policy-model-defines-demand-roi",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "passed": true
+ },
+ {
+ "id": "policy-model-defines-btd-compensation",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "passed": true
+ },
+ {
+ "id": "policy-model-defers-gate7-admission",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "passed": true
+ },
+ {
+ "id": "policy-model-forbids-source-leakage",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "passed": true
+ },
+ {
+ "id": "route-model-owns-policy",
+ "sourcePath": "uapi/app/deposit/deposit-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "deposit-client-renders-policy",
+ "sourcePath": "uapi/app/deposit/DepositPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "asset-pack-package-exports-policy",
+ "sourcePath": "packages/pipelines/asset-pack/src/index.ts",
+ "passed": true
+ },
+ {
+ "id": "asset-pack-manifest-exports-policy",
+ "sourcePath": "packages/pipelines/asset-pack/package.json",
+ "passed": true
+ },
+ {
+ "id": "policy-test-covers-report",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts",
+ "passed": true
+ },
+ {
+ "id": "route-test-covers-policy",
+ "sourcePath": "uapi/tests/depositRouteModel.test.ts",
+ "passed": true
+ },
+ {
+ "id": "page-test-covers-policy",
+ "sourcePath": "uapi/tests/depositPageClient.test.tsx",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-covers-artifact",
+ "sourcePath": "packages/protocol/test/v43-deposit-policy-compensation.test.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-package-exports-gate6",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-types-export-gate6",
+ "sourcePath": "packages/protocol/src/index.d.ts",
+ "passed": true
+ },
+ {
+ "id": "package-json-exposes-gate6",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "gate-workflow-runs-gate6",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "canon-workflow-runs-gate6",
+ "sourcePath": ".github/workflows/bitcode-canon-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "generator-exists",
+ "sourcePath": "scripts/generate-v43-deposit-policy-compensation.mjs",
+ "passed": true
+ },
+ {
+ "id": "checker-exists",
+ "sourcePath": "scripts/check-v43-gate6-deposit-policy-compensation.mjs",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "depositPolicyImplemented": true,
+ "criticalityPolicyImplemented": true,
+ "criticalSourceBlockedBeforeAdmission": true,
+ "demandPolicyImplemented": true,
+ "roiPolicyImplemented": true,
+ "btdPotentialEstimateOnly": true,
+ "compensationPolicyImplemented": true,
+ "compensationPriceAsset": "BTC",
+ "compensationAllocationMethod": "source-to-shares-largest-remainder",
+ "btdMintRequiresFutureNeedFitSettlement": true,
+ "admissionAndIndexingDeferredToGate7": true,
+ "routePolicyReadbackImplemented": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "rawPromptVisible": false,
+ "interpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "requiredPredicateCount": 30,
+ "passedPredicateCount": 30,
+ "failedPredicateIds": []
+ }
+}
diff --git a/.bitcode/v43-deposit-route-options.json b/.bitcode/v43-deposit-route-options.json
new file mode 100644
index 00000000..5fb931ff
--- /dev/null
+++ b/.bitcode/v43-deposit-route-options.json
@@ -0,0 +1,369 @@
+{
+ "artifactId": "v43-deposit-route-options",
+ "schemaId": "bitcode.v43.depositRouteOptions.v1",
+ "version": "V43",
+ "currentTarget": "V42",
+ "sourceSafetyVerdict": "source-safe-deposit-route-option-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v43-deposit-route-options:f065a83b632a3746d3e07733",
+ "passed": true,
+ "stepIds": [
+ "connect-source",
+ "synthesize-options",
+ "review-options",
+ "submit-deposit",
+ "read-depository-state"
+ ],
+ "objectIds": [
+ "DepositRouteSession",
+ "DepositOptionSynthesisRequest",
+ "DepositAssetPackOptionSynthesis",
+ "DepositAssetPackOption",
+ "source-safe measurements",
+ "depositor review boundary",
+ "future admission boundary"
+ ],
+ "pipelineIds": [
+ "DepositAssetPackOptionSynthesis"
+ ],
+ "sourceSafeFieldIds": [
+ "repositoryFullName",
+ "sourceBranch",
+ "sourceCommit",
+ "sourcePathRoots",
+ "depositorInstructionRoot",
+ "demandSignalRoots",
+ "optionMeasurements",
+ "optionRoots",
+ "reviewBoundary",
+ "policyBoundary"
+ ],
+ "forbiddenPayloadIds": [
+ "protected_source_payload",
+ "raw_source_text",
+ "raw_protected_prompt",
+ "interpolated_prompt",
+ "raw_provider_response",
+ "unpaid_assetpack_source",
+ "wallet_private_material"
+ ],
+ "contractRows": [
+ {
+ "rowId": "deposit-route-session",
+ "owner": "uapi/app/deposit/deposit-route-model.ts",
+ "contract": "DepositRouteSession owns the /deposit route state, five depositing steps, source-safe option synthesis, review boundary, and future Gate 6/7 policy/admission deferrals.",
+ "requiredFields": [
+ "schema",
+ "route",
+ "steps",
+ "pipelineOwnership",
+ "synthesis",
+ "disclosure",
+ "proofRoot"
+ ],
+ "rowRoot": "v43-deposit-route-option-contract:0f94e40e9a7847e940e26539",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "deposit-option-synthesis-model",
+ "owner": "packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts",
+ "contract": "DepositAssetPackOptionSynthesis proposes multiple source-safe AssetPack options from connected source, depositor instruction, Depository demand, Reading demand, and existing supply signals.",
+ "requiredFields": [
+ "DepositOptionSynthesisRequest",
+ "DepositAssetPackOption",
+ "buildDepositAssetPackOptionSynthesis"
+ ],
+ "rowRoot": "v43-deposit-route-option-contract:92311461f3946431eadd706c",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "deposit-route-client",
+ "owner": "uapi/app/deposit/DepositPageClient.tsx",
+ "contract": "/deposit reuses repository context, supply selection, and the existing deposit composer while rendering source-safe AssetPack option cards.",
+ "requiredFields": [
+ "TerminalRepositoryContextPanel",
+ "TerminalSupplySelectionPanel",
+ "TerminalDepositComposer"
+ ],
+ "rowRoot": "v43-deposit-route-option-contract:df890d7d4b064ad4453dc809",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "deposit-navigation",
+ "owner": "uapi/components/base/bitcode/layout/nav.tsx",
+ "contract": "Public navigation, footer, and public shell recognize /deposit as the default depositing path while /terminal remains available for cockpit detail.",
+ "requiredFields": [
+ "/deposit",
+ "Deposit",
+ "BITCODE_PUBLIC_EXPLAINERS.deposit"
+ ],
+ "rowRoot": "v43-deposit-route-option-contract:d84865ec4235c5bff6f6a6e4",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ }
+ ],
+ "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",
+ "terminalRoutes": "uapi/app/terminal/terminal-routes.ts:80f478da2673f1a64ada9bfb",
+ "routeModel": "uapi/app/deposit/deposit-route-model.ts:7354c10d543af2cb65ba0ade",
+ "page": "uapi/app/deposit/page.tsx:6bab6a9debab3f4350d0ddca",
+ "client": "uapi/app/deposit/DepositPageClient.tsx:ee78319e6a48ccf12e2eb925",
+ "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",
+ "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",
+ "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",
+ "sourcePath": "BITCODE_SPEC.txt",
+ "passed": true
+ },
+ {
+ "id": "spec-defines-gate5",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "spec-names-deposit-option-objects",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "delta-records-gate5",
+ "sourcePath": "BITCODE_SPEC_V43_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "notes-records-gate5",
+ "sourcePath": "BITCODE_SPEC_V43_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "parity-records-gate5",
+ "sourcePath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate5",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readme-records-gate5",
+ "sourcePath": "README.md",
+ "passed": true
+ },
+ {
+ "id": "protocol-readme-records-gate5",
+ "sourcePath": "packages/protocol/README.md",
+ "passed": true
+ },
+ {
+ "id": "terminal-routes-define-deposit",
+ "sourcePath": "uapi/app/terminal/terminal-routes.ts",
+ "passed": true
+ },
+ {
+ "id": "route-model-defines-deposit-session",
+ "sourcePath": "uapi/app/deposit/deposit-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "route-model-defines-pipeline-ownership",
+ "sourcePath": "uapi/app/deposit/deposit-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "route-model-forbids-source-leakage",
+ "sourcePath": "uapi/app/deposit/deposit-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "deposit-page-canonical-route",
+ "sourcePath": "uapi/app/deposit/page.tsx",
+ "passed": true
+ },
+ {
+ "id": "deposit-client-renders-five-step-route",
+ "sourcePath": "uapi/app/deposit/DepositPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "deposit-client-renders-options",
+ "sourcePath": "uapi/app/deposit/DepositPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "deposit-client-reuses-terminal-primitives",
+ "sourcePath": "uapi/app/deposit/DepositPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "option-model-defines-request",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts",
+ "passed": true
+ },
+ {
+ "id": "option-model-builds-multiple-options",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts",
+ "passed": true
+ },
+ {
+ "id": "option-model-defers-gate6-policy",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts",
+ "passed": true
+ },
+ {
+ "id": "option-model-forbids-source-leakage",
+ "sourcePath": "packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts",
+ "passed": true
+ },
+ {
+ "id": "asset-pack-package-exports-model",
+ "sourcePath": "packages/pipelines/asset-pack/src/index.ts",
+ "passed": true
+ },
+ {
+ "id": "asset-pack-manifest-exports-model",
+ "sourcePath": "packages/pipelines/asset-pack/package.json",
+ "passed": true
+ },
+ {
+ "id": "public-copy-links-deposit",
+ "sourcePath": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts",
+ "passed": true
+ },
+ {
+ "id": "public-explainers-define-deposit",
+ "sourcePath": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts",
+ "passed": true
+ },
+ {
+ "id": "public-shell-recognizes-deposit",
+ "sourcePath": "uapi/components/base/bitcode/layout/workspace-surface.ts",
+ "passed": true
+ },
+ {
+ "id": "nav-links-to-deposit",
+ "sourcePath": "uapi/components/base/bitcode/layout/nav.tsx",
+ "passed": true
+ },
+ {
+ "id": "footer-links-to-deposit",
+ "sourcePath": "uapi/components/base/bitcode/layout/footer.tsx",
+ "passed": true
+ },
+ {
+ "id": "uapi-route-model-test-covers-deposit",
+ "sourcePath": "uapi/tests/depositRouteModel.test.ts",
+ "passed": true
+ },
+ {
+ "id": "uapi-page-test-covers-deposit",
+ "sourcePath": "uapi/tests/depositPageClient.test.tsx",
+ "passed": true
+ },
+ {
+ "id": "asset-pack-test-covers-option-synthesis",
+ "sourcePath": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-covers-artifact",
+ "sourcePath": "packages/protocol/test/v43-deposit-route-options.test.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-package-exports-gate5",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-types-export-gate5",
+ "sourcePath": "packages/protocol/src/index.d.ts",
+ "passed": true
+ },
+ {
+ "id": "package-json-exposes-gate5",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "gate-workflow-runs-gate5",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "canon-workflow-runs-gate5",
+ "sourcePath": ".github/workflows/bitcode-canon-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "generator-exists",
+ "sourcePath": "scripts/generate-v43-deposit-route-options.mjs",
+ "passed": true
+ },
+ {
+ "id": "checker-exists",
+ "sourcePath": "scripts/check-v43-gate5-deposit-route-options.mjs",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "depositRouteImplemented": true,
+ "fiveStepDepositingUxImplemented": true,
+ "optionSynthesisImplemented": true,
+ "multipleOptionsSynthesized": true,
+ "connectedSourceUsed": true,
+ "depositoryDemandSignalsUsed": true,
+ "readingDemandSignalsUsed": true,
+ "existingDepositorySignalsUsed": true,
+ "terminalDepositComposerReused": true,
+ "sourceCriticalityDemandRoiPolicyDeferredToGate6": true,
+ "admissionAndIndexingDeferredToGate7": true,
+ "reviewRequiredBeforeDepositAdmission": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "rawPromptVisible": false,
+ "interpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "requiredPredicateCount": 39,
+ "passedPredicateCount": 39,
+ "failedPredicateIds": []
+ }
+}
diff --git a/.bitcode/v43-packs-activity-master-detail.json b/.bitcode/v43-packs-activity-master-detail.json
new file mode 100644
index 00000000..6029f8ff
--- /dev/null
+++ b/.bitcode/v43-packs-activity-master-detail.json
@@ -0,0 +1,364 @@
+{
+ "artifactId": "v43-packs-activity-master-detail",
+ "schemaId": "bitcode.v43.packsActivityMasterDetail.v1",
+ "version": "V43",
+ "currentTarget": "V42",
+ "sourceSafetyVerdict": "source-safe-packs-activity-master-detail-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v43-packs-activity-master-detail:c0086a738180a6f767377e43",
+ "passed": true,
+ "typeIds": [
+ "deposit-option",
+ "depository-assetpack",
+ "read-need-fit-preview",
+ "settled-assetpack",
+ "settlement",
+ "compensation",
+ "delivery",
+ "repair",
+ "execution",
+ "notification"
+ ],
+ "searchFieldIds": [
+ "title",
+ "description",
+ "assetPackTitle",
+ "measurements",
+ "values",
+ "activityType",
+ "transactionType",
+ "settlementState",
+ "compensationState",
+ "deliveryState",
+ "repairState",
+ "proofRoots",
+ "repository",
+ "timestamp"
+ ],
+ "sortIds": [
+ "timestamp",
+ "title",
+ "value",
+ "settlementState",
+ "compensationState",
+ "deliveryState",
+ "repairState"
+ ],
+ "filterIds": [
+ "activityType",
+ "scope",
+ "state",
+ "settlementState",
+ "compensationState",
+ "deliveryState",
+ "repairState",
+ "repository"
+ ],
+ "detailSectionIds": [
+ "overview",
+ "measurements",
+ "values",
+ "proofs",
+ "settlement",
+ "compensation",
+ "delivery",
+ "repair",
+ "telemetry",
+ "metadata"
+ ],
+ "contractRows": [
+ {
+ "rowId": "pack-activity-record",
+ "owner": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
+ "contract": "PackActivityRecord contains source-safe activity type, title, description, repository, measurements, values, proof roots, and state readback.",
+ "requiredFields": [
+ "type",
+ "title",
+ "description",
+ "repository",
+ "measurements",
+ "values",
+ "proofRoots",
+ "settlementState",
+ "compensationState",
+ "deliveryState",
+ "repairState",
+ "sourceSafety"
+ ],
+ "rowRoot": "v43-pack-activity-contract:e926866621fcbe78d9b74364",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "packs-activity-api",
+ "owner": "uapi/app/api/packs/activity/route.ts",
+ "contract": "/api/packs/activity returns queried PackActivity records, summary, detail projection, and explicit source-safety posture.",
+ "requiredFields": [
+ "records",
+ "summary",
+ "detail",
+ "query",
+ "sourceSafety"
+ ],
+ "rowRoot": "v43-pack-activity-contract:e4db1aab78785a05d8532363",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "packs-route-master-detail",
+ "owner": "uapi/app/packs/PacksPageClient.tsx",
+ "contract": "/packs renders searchable, sortable, filterable master-detail pack activity with proof roots and state readback.",
+ "requiredFields": [
+ "search",
+ "type",
+ "state",
+ "sort",
+ "detailId"
+ ],
+ "rowRoot": "v43-pack-activity-contract:944aa2ee719f63a979670461",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "exchange-compatibility-redirect",
+ "owner": "uapi/app/exchange/page.tsx",
+ "contract": "/exchange is retained only as compatibility redirect into /packs while preserving query parameters.",
+ "requiredFields": [
+ "/packs",
+ "searchParams"
+ ],
+ "rowRoot": "v43-pack-activity-contract:110b30f6fdfa36ccaa3daf6d",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ }
+ ],
+ "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",
+ "page": "uapi/app/packs/page.tsx:1b3d7a1cc00500a13042e8dd",
+ "client": "uapi/app/packs/PacksPageClient.tsx:9a225a3462967b4b8c2adc00",
+ "exchangeRedirect": "uapi/app/exchange/page.tsx:be7a744d1f9c9252d1b6eba9",
+ "nav": "uapi/components/base/bitcode/layout/nav.tsx:d7d1a8104e780bb7c25f1880",
+ "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",
+ "packageTest": "packages/protocol/test/v43-packs-activity-master-detail.test.js:baf3e44b2fbe4e62590c1824",
+ "uapiTest": "uapi/tests/packActivityModel.test.ts:7854762895ce63b0de8b6940",
+ "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",
+ "sourcePath": "BITCODE_SPEC.txt",
+ "passed": true
+ },
+ {
+ "id": "spec-defines-gate3",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "spec-names-packactivity-contracts",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "delta-records-gate3",
+ "sourcePath": "BITCODE_SPEC_V43_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "notes-records-gate3",
+ "sourcePath": "BITCODE_SPEC_V43_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "parity-records-gate3",
+ "sourcePath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate3",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readme-records-gate3",
+ "sourcePath": "README.md",
+ "passed": true
+ },
+ {
+ "id": "protocol-readme-records-gate3",
+ "sourcePath": "packages/protocol/README.md",
+ "passed": true
+ },
+ {
+ "id": "model-defines-packactivity-record",
+ "sourcePath": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
+ "passed": true
+ },
+ {
+ "id": "model-defines-search-filter-sort",
+ "sourcePath": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
+ "passed": true
+ },
+ {
+ "id": "model-defines-detail-projection",
+ "sourcePath": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
+ "passed": true
+ },
+ {
+ "id": "model-defines-source-safety-assertion",
+ "sourcePath": "uapi/components/base/bitcode/activity/pack-activity-model.ts",
+ "passed": true
+ },
+ {
+ "id": "api-route-exposes-packactivity-query",
+ "sourcePath": "uapi/app/api/packs/activity/route.ts",
+ "passed": true
+ },
+ {
+ "id": "packs-page-canonical-route",
+ "sourcePath": "uapi/app/packs/page.tsx",
+ "passed": true
+ },
+ {
+ "id": "packs-client-master-detail",
+ "sourcePath": "uapi/app/packs/PacksPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "packs-client-search-sort-filter",
+ "sourcePath": "uapi/app/packs/PacksPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "exchange-route-redirects-to-packs",
+ "sourcePath": "uapi/app/exchange/page.tsx",
+ "passed": true
+ },
+ {
+ "id": "nav-links-to-packs",
+ "sourcePath": "uapi/components/base/bitcode/layout/nav.tsx",
+ "passed": true
+ },
+ {
+ "id": "public-shell-recognizes-packs",
+ "sourcePath": "uapi/components/base/bitcode/layout/workspace-surface.ts",
+ "passed": true
+ },
+ {
+ "id": "public-copy-uses-packs-link",
+ "sourcePath": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts",
+ "passed": true
+ },
+ {
+ "id": "public-explainers-use-packs",
+ "sourcePath": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts",
+ "passed": true
+ },
+ {
+ "id": "uapi-test-covers-model",
+ "sourcePath": "uapi/tests/packActivityModel.test.ts",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-covers-artifact",
+ "sourcePath": "packages/protocol/test/v43-packs-activity-master-detail.test.js",
+ "passed": true
+ },
+ {
+ "id": "package-exports-gate3",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "package-types-export-gate3",
+ "sourcePath": "packages/protocol/src/index.d.ts",
+ "passed": true
+ },
+ {
+ "id": "package-json-exposes-gate3",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "gate-workflow-runs-gate3",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "canon-workflow-runs-gate3",
+ "sourcePath": ".github/workflows/bitcode-canon-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "generator-exists",
+ "sourcePath": "scripts/generate-v43-packs-activity-master-detail.mjs",
+ "passed": true
+ },
+ {
+ "id": "checker-exists",
+ "sourcePath": "scripts/check-v43-gate3-packs-activity-master-detail.mjs",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "packActivityContractsImplemented": true,
+ "packsRouteImplemented": true,
+ "packsActivityApiImplemented": true,
+ "exchangeRedirectCompatibilityImplemented": true,
+ "tableSearchImplemented": true,
+ "columnSortImplemented": true,
+ "filteringImplemented": true,
+ "detailProjectionImplemented": true,
+ "proofRootDisplayImplemented": true,
+ "settlementStateReadbackImplemented": true,
+ "compensationStateReadbackImplemented": true,
+ "deliveryStateReadbackImplemented": true,
+ "repairStateReadbackImplemented": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "rawPromptVisible": false,
+ "interpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "protected-source-payloads",
+ "unpaid-assetpack-source",
+ "source-snippets",
+ "raw-prompts",
+ "interpolated-prompts",
+ "raw-provider-responses",
+ "credentials",
+ "wallet-private-material",
+ "settlement-private-payloads"
+ ],
+ "requiredPredicateCount": 31,
+ "passedPredicateCount": 31,
+ "failedPredicateIds": []
+ }
+}
diff --git a/.bitcode/v43-promotion-readiness-report.json b/.bitcode/v43-promotion-readiness-report.json
new file mode 100644
index 00000000..d52ddf15
--- /dev/null
+++ b/.bitcode/v43-promotion-readiness-report.json
@@ -0,0 +1,558 @@
+{
+ "reportId": "v43-promotion-readiness-report",
+ "artifactId": "v43-promotion-readiness-report",
+ "schemaId": "bitcode.v43.promotionReadinessReport.v1",
+ "version": "V43",
+ "currentTarget": "V42",
+ "generatedAt": "2026-05-29T15:19:41-03:00",
+ "sourceSafetyVerdict": "source-safe-v43-product-routes-agentic-depositing-promotion-metadata",
+ "prePromotionPosture": "V42 active / V43 draft",
+ "postPromotionPosture": "V43 active / V44 draft",
+ "branchProtection": {
+ "directMainPushAdmitted": false,
+ "promotionPrRequired": true,
+ "versionBranch": "version/v43",
+ "versionPromotionPullRequestTitlePrefix": "V43 Canonical Promotion"
+ },
+ "generatedArtifactPolicy": {
+ "provenAppendixPath": "BITCODE_SPEC_V43_PROVEN.md",
+ "provenAppendixRequiredBeforePromotion": false,
+ "generatedArtifactPrefix": ".bitcode/v43-",
+ "promotionOverwritesPreviewArtifacts": true,
+ "secretValuesSerialized": false,
+ "protectedSourceSerialized": false,
+ "rawProtectedPromptSerialized": false,
+ "rawProviderResponseSerialized": false,
+ "unpaidAssetPackSourceSerialized": false
+ },
+ "validationCommands": [
+ "pnpm run check:v43-gate1",
+ "pnpm run check:v43-gate2",
+ "pnpm run check:v43-gate3",
+ "pnpm run check:v43-gate4",
+ "pnpm run check:v43-gate5",
+ "pnpm run check:v43-gate6",
+ "pnpm run check:v43-gate7",
+ "pnpm run check:v43-gate8",
+ "pnpm run check:v43-gate9",
+ "pnpm run check:v43-gate10",
+ "node scripts/promote-bitcode-canon.mjs --version V43 --commit HEAD --dry-run"
+ ],
+ "gateArtifactEvidence": [
+ {
+ "relativePath": ".bitcode/v43-route-vocabulary-inventory.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:3a253ce1809e55ec1fea1802b188fb487ae8723089ebb60337adbbbc82f73d4c",
+ "byteLength": 454761,
+ "sourceSafe": true,
+ "artifactId": "v43-route-vocabulary-inventory",
+ "version": "V43",
+ "sourceSafetyVerdict": "source-safe-route-vocabulary-inventory-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v43-packs-activity-master-detail.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:622db05cd196330c8bd468f1db55869fc2c0a4e8fda81160a866748f41ecbc45",
+ "byteLength": 11717,
+ "sourceSafe": true,
+ "artifactId": "v43-packs-activity-master-detail",
+ "version": "V43",
+ "sourceSafetyVerdict": "source-safe-packs-activity-master-detail-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v43-read-route-five-step-ux.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:9201b93d9a7660600414619333281b58d8f467bafbdd2865720e4d2c1af0ecc7",
+ "byteLength": 12152,
+ "sourceSafe": true,
+ "artifactId": "v43-read-route-five-step-ux",
+ "version": "V43",
+ "sourceSafetyVerdict": "source-safe-read-route-five-step-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v43-deposit-route-options.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:a56511336831517dcc4ad478d9392a1318ff6c53b87f11206ff379c718429b5a",
+ "byteLength": 13187,
+ "sourceSafe": true,
+ "artifactId": "v43-deposit-route-options",
+ "version": "V43",
+ "sourceSafetyVerdict": "source-safe-deposit-route-option-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v43-deposit-policy-compensation.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:4ae091eb995fedbcaab0d7e29eb588e1faa7372ff744059f6e989c476208455e",
+ "byteLength": 11319,
+ "sourceSafe": true,
+ "artifactId": "v43-deposit-policy-compensation",
+ "version": "V43",
+ "sourceSafetyVerdict": "source-safe-deposit-policy-compensation-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v43-deposit-option-admission.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:2352eb4a0515e5db7bf8869ff1fa3004875a022a4292b359265ae11eab9c2b85",
+ "byteLength": 13657,
+ "sourceSafe": true,
+ "artifactId": "v43-deposit-option-admission",
+ "version": "V43",
+ "sourceSafetyVerdict": "source-safe-deposit-option-admission-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v43-route-ux-product-excellence.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:0fc3c3981a72738a6eb662c8e515453e2fafbb46d3b8dc3600c9e11389bf38e4",
+ "byteLength": 11291,
+ "sourceSafe": true,
+ "artifactId": "v43-route-ux-product-excellence",
+ "version": "V43",
+ "sourceSafetyVerdict": "source-safe-product-route-ux-metadata"
+ },
+ {
+ "relativePath": ".bitcode/v43-cross-route-rehearsal-telemetry-repair.json",
+ "present": true,
+ "parseable": true,
+ "digest": "sha256:1445faccadb981abd5caf41c841cbfd2be926217004e5f54ca0c8c2ec5dafeff",
+ "byteLength": 30225,
+ "sourceSafe": true,
+ "artifactId": "v43-cross-route-rehearsal-telemetry-repair",
+ "version": "V43",
+ "sourceSafetyVerdict": "source-safe-cross-route-rehearsal-telemetry-repair-metadata"
+ }
+ ],
+ "sourceEvidence": [
+ {
+ "relativePath": "scripts/check-v43-gate10-promotion-readiness.mjs",
+ "present": true,
+ "digest": "sha256:512ab4ae762c2bddaf39e25e2d3487f9e51c99f4121523d13277cbacd8682a1f",
+ "requiredTokens": [
+ {
+ "token": "V43 Gate 10 promotion readiness",
+ "present": true
+ },
+ {
+ "token": "--promotion-mode",
+ "present": true
+ },
+ {
+ "token": "promotedPointer",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v43-promotion-readiness-report.json",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "scripts/generate-v43-promotion-readiness-report.mjs",
+ "present": true,
+ "digest": "sha256:60ba94139699fd89d4cb064608a8be4d099962cab54694f8151034063f4b7e40",
+ "requiredTokens": [
+ {
+ "token": "buildV43PromotionReadinessReport",
+ "present": true
+ },
+ {
+ "token": "source-safe-v43-product-routes-agentic-depositing-promotion-metadata",
+ "present": true
+ },
+ {
+ "token": "v43-promotion-readiness-report",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "scripts/promote-bitcode-canon.mjs",
+ "present": true,
+ "digest": "sha256:c249f126efde9b8d3ab5633f49be0f189dc6ad76a235035504bbead1282d2f16",
+ "requiredTokens": [
+ {
+ "token": "if (version === 'V43')",
+ "present": true
+ },
+ {
+ "token": "const v43Gate10Command",
+ "present": true
+ },
+ {
+ "token": "buildDerivedV43CommitMessageBody",
+ "present": true
+ },
+ {
+ "token": "scripts/check-v43-gate10-promotion-readiness.mjs",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "scripts/prepare-bitcode-spec-family-promotion.mjs",
+ "present": true,
+ "digest": "sha256:1568e8251d60b4e7bf408d02afb1fb6b257eef3288465c5e6c474c41dffb59c5",
+ "requiredTokens": [
+ {
+ "token": "if (version === 'V43')",
+ "present": true
+ },
+ {
+ "token": "V43 canonical system specification for product routes and agentic depositing",
+ "present": true
+ },
+ {
+ "token": "BITCODE_SPEC_V43_PROVEN.md",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v43-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/v43-canon-promotion.yml",
+ "present": true,
+ "digest": "sha256:b58071d9a8578a0ec4436152658b79cfd155022464dd01bf1f2360111d8d7988",
+ "requiredTokens": [
+ {
+ "token": "head.ref == 'version/v43'",
+ "present": true
+ },
+ {
+ "token": "node scripts/prepare-bitcode-spec-family-promotion.mjs --version V43",
+ "present": true
+ },
+ {
+ "token": "node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V43 --next-draft V44",
+ "present": true
+ },
+ {
+ "token": "node scripts/generate-bitcode-proven.mjs --version V43",
+ "present": true
+ },
+ {
+ "token": "node scripts/check-bitcode-spec-family.mjs --version V43 --mode promoted --current-target V43",
+ "present": true
+ },
+ {
+ "token": "BITCODE_SPEC_V43_PROVEN.md",
+ "present": true
+ },
+ {
+ "token": "Promote V43 canon files",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": ".github/workflows/bitcode-gate-quality.yml",
+ "present": true,
+ "digest": "sha256:a13e5ee752c88a9da7afa4a69ae7cfe2ec466016d3bbfb22fd913892381b0db6",
+ "requiredTokens": [
+ {
+ "token": "check-v43-gate10-promotion-readiness.mjs",
+ "present": true
+ },
+ {
+ "token": "elif [ \"$POINTER\" = \"V43\" ]",
+ "present": true
+ },
+ {
+ "token": "--active-canon V43 --draft-target V44",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": ".github/workflows/bitcode-canon-quality.yml",
+ "present": true,
+ "digest": "sha256:88bbe4ac9d23a6107216d9cc6347c3fc744a9a11f8f32667bd856ab3fa3c7054",
+ "requiredTokens": [
+ {
+ "token": "check-v43-gate10-promotion-readiness.mjs",
+ "present": true
+ },
+ {
+ "token": "elif [ \"$POINTER\" = \"V43\" ]",
+ "present": true
+ },
+ {
+ "token": "--active-canon V43 --draft-target V44",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "packages/protocol/src/canonical/proven-generator.js",
+ "present": true,
+ "digest": "sha256:3140ef2da603927ea9879ff7d7414597b16bfff1bf5b0a238e3d2ff1b44a9585",
+ "requiredTokens": [
+ {
+ "token": "buildV43ProvenPackage",
+ "present": true
+ },
+ {
+ "token": "buildV43PromotionReadinessReport",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v43-promotion-readiness-report.json",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "packages/protocol/test/v43-promotion-readiness.test.js",
+ "present": true,
+ "digest": "sha256:aaab14786a1b4d28c104b778ee1806dbb7fb9e86d445a73ce81b86112e8cc300",
+ "requiredTokens": [
+ {
+ "token": "builds source-safe V43 PromotionReadinessReport",
+ "present": true
+ },
+ {
+ "token": "v43-promotion-readiness-report",
+ "present": true
+ },
+ {
+ "token": "V43 Promotion Readiness",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "packages/protocol/src/canonical/v21-specifying.js",
+ "present": true,
+ "digest": "sha256:6c4c47b12cd095ab89f2578aa896d8932fc7451e23904d580c9f695240a103a0",
+ "requiredTokens": [
+ {
+ "token": ".bitcode/v43-promotion-readiness-report.json",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "package.json",
+ "present": true,
+ "digest": "sha256:a02cfbf6b200910870068e4c4c61ff0cd2be63909174243a5b66a2d4ff22013b",
+ "requiredTokens": [
+ {
+ "token": "generate:v43-promotion-readiness",
+ "present": true
+ },
+ {
+ "token": "check:v43-promotion-readiness",
+ "present": true
+ },
+ {
+ "token": "check:v43-gate10",
+ "present": true
+ }
+ ]
+ }
+ ],
+ "documentationEvidence": [
+ {
+ "relativePath": "BITCODE_SPEC_V43.md",
+ "present": true,
+ "digest": "sha256:28f17417fec136cec3a0864592132492676cd2321eb9a21fddf3f6cdce40c29f",
+ "requiredTokens": [
+ {
+ "token": "V43 promotion readiness canon",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v43-promotion-readiness-report.json",
+ "present": true
+ },
+ {
+ "token": "V43 active / draft V44",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "BITCODE_SPEC_V43_DELTA.md",
+ "present": true,
+ "digest": "sha256:360fe5346443a0bf0d44f8c706a3d1f191a48e856152fa54e24c72536433f93b",
+ "requiredTokens": [
+ {
+ "token": "Gate 10: V43 Promotion Readiness",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v43-promotion-readiness-report.json",
+ "present": true
+ },
+ {
+ "token": "promotion scripts support V43",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "BITCODE_SPEC_V43_NOTES.md",
+ "present": true,
+ "digest": "sha256:8c4b6932fea7cdfe81a8406cab89c5a41849266cf60f7f16939597589f6c3521",
+ "requiredTokens": [
+ {
+ "token": "Gate 10: V43 Promotion Readiness",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v43-promotion-readiness-report.json",
+ "present": true
+ },
+ {
+ "token": "active V43 / draft V44",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "present": true,
+ "digest": "sha256:450948415f13c6732f50eb6edae32a16ffefba1f754e9844fc89311f7dfb5b03",
+ "requiredTokens": [
+ {
+ "token": "## Gate 10 Promotion readiness parity",
+ "present": true
+ },
+ {
+ "token": ".bitcode/v43-promotion-readiness-report.json",
+ "present": true
+ },
+ {
+ "token": "closed",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "SPECIFICATIONS_ROADMAP.md",
+ "present": true,
+ "digest": "sha256:33994a7cf33bb6e3138b932ac582c4de6e2ec8dda24bdf4a7aa6b130bbfda2e4",
+ "requiredTokens": [
+ {
+ "token": "V43 Gate 10 closure anchor",
+ "present": true
+ },
+ {
+ "token": "BITCODE_SPEC_V43_PROVEN.md",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "README.md",
+ "present": true,
+ "digest": "sha256:e492ee74bfb581f11a6871481ed0067ecec0b9d29b47f53aa77b53ee96b44fa9",
+ "requiredTokens": [
+ {
+ "token": "check:v43-gate10",
+ "present": true
+ },
+ {
+ "token": "v43-canon-promotion.yml",
+ "present": true
+ }
+ ]
+ },
+ {
+ "relativePath": "packages/protocol/README.md",
+ "present": true,
+ "digest": "sha256:0ffe9fdce07c6ccf3e73f47a6da7c5a6e7f2299c4e1a200f79c2f3e009142136",
+ "requiredTokens": [
+ {
+ "token": "V43 Gate 10",
+ "present": true
+ },
+ {
+ "token": "V43` active, `V44` draft",
+ "present": true
+ }
+ ]
+ }
+ ],
+ "coverage": {
+ "requiredGateArtifactPaths": [
+ ".bitcode/v43-route-vocabulary-inventory.json",
+ ".bitcode/v43-packs-activity-master-detail.json",
+ ".bitcode/v43-read-route-five-step-ux.json",
+ ".bitcode/v43-deposit-route-options.json",
+ ".bitcode/v43-deposit-policy-compensation.json",
+ ".bitcode/v43-deposit-option-admission.json",
+ ".bitcode/v43-route-ux-product-excellence.json",
+ ".bitcode/v43-cross-route-rehearsal-telemetry-repair.json"
+ ],
+ "generatedProofOutputs": [
+ "BITCODE_SPEC_V43_PROVEN.md",
+ ".bitcode/v43-spec-family-report.json",
+ ".bitcode/v43-canonical-input-report.json",
+ ".bitcode/v43-canon-posture-drift-report.json",
+ ".bitcode/v43-promotion-readiness-report.json"
+ ],
+ "gateArtifactCount": 8,
+ "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": "V42 active / V43 draft",
+ "postPromotionPosture": "V43 active / V44 draft",
+ "valueBearingMainnetAdmission": false,
+ "credentialsSerialized": false,
+ "protectedSourceVisible": false,
+ "rawProtectedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "walletPrivateMaterialVisible": false
+ },
+ "failClosedResult": "promotion remains blocked when any V43 route vocabulary inventory, Packs activity master-detail proof, Read five-step UX proof, Deposit option synthesis proof, deposit policy/compensation proof, deposit option admission proof, route UX product proof, cross-route rehearsal, workflow, promotion script, generated proof support, source-safety check, or value-bearing mainnet block is missing",
+ "artifactRoot": "v43-product-route-promotion-readiness-report:3bef1fbfb307d4663b1c6c6f",
+ "passed": true,
+ "failures": [],
+ "validationCommand": "pnpm run check:v43-gate10",
+ "proofSourceCommit": "3c7a9f998656635cc28c8b4584ae964ac04154fa",
+ "generatorId": "bitcode.proven-generator.v1",
+ "worktreeState": "clean",
+ "sourceSafe": true
+}
diff --git a/.bitcode/v43-read-route-five-step-ux.json b/.bitcode/v43-read-route-five-step-ux.json
new file mode 100644
index 00000000..966377cb
--- /dev/null
+++ b/.bitcode/v43-read-route-five-step-ux.json
@@ -0,0 +1,353 @@
+{
+ "artifactId": "v43-read-route-five-step-ux",
+ "schemaId": "bitcode.v43.readRouteFiveStepUx.v1",
+ "version": "V43",
+ "currentTarget": "V42",
+ "sourceSafetyVerdict": "source-safe-read-route-five-step-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v43-read-route-five-step-ux:be32f7d049c3df0746f5c305",
+ "passed": true,
+ "stepIds": [
+ "request-read",
+ "review-synthesized-need",
+ "request-fit",
+ "review-synthesized-asset-pack",
+ "buy-asset-pack-settle"
+ ],
+ "objectIds": [
+ "ReadRouteSession",
+ "Read Request",
+ "synthesized Need",
+ "Need review decision",
+ "Finding Fits request",
+ "AssetPack preview",
+ "settlement quote",
+ "delivery receipt"
+ ],
+ "pipelineIds": [
+ "ReadNeedComprehensionSynthesis",
+ "ReadFitsFindingSynthesis"
+ ],
+ "sourceSafeFieldIds": [
+ "read_request_summary",
+ "read_need_measurements",
+ "need_feedback_history",
+ "depository_candidate_counts",
+ "selected_fit_ids",
+ "asset_pack_measurements",
+ "quality_posture",
+ "proof_roots",
+ "btc_fee_quote",
+ "settlement_state",
+ "delivery_posture"
+ ],
+ "forbiddenPayloadIds": [
+ "protected_source_payload",
+ "raw_protected_prompt",
+ "raw_provider_response",
+ "unpaid_assetpack_source",
+ "wallet_private_material",
+ "settlement_private_payload",
+ "ledger_write_authority"
+ ],
+ "contractRows": [
+ {
+ "rowId": "read-route-session",
+ "owner": "uapi/app/read/read-route-model.ts",
+ "contract": "ReadRouteSession owns the /read route state, five Reading steps, accepted-Need gate, source-safe preview boundary, settlement quote, and delivery unlock posture.",
+ "requiredFields": [
+ "schema",
+ "route",
+ "steps",
+ "readObjects",
+ "pipelineOwnership",
+ "disclosure",
+ "proofRoot"
+ ],
+ "rowRoot": "v43-read-route-contract:18db4bb5d567eb1410d0004f",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "read-route-page",
+ "owner": "uapi/app/read/page.tsx",
+ "contract": "/read is the default Reading route with metadata, public shell chrome, Suspense fallback, and ReadPageClient.",
+ "requiredFields": [
+ "canonical",
+ "ReadPageClient",
+ "PublicShellFrame"
+ ],
+ "rowRoot": "v43-read-route-contract:d522471362cb0cb56b9d4830",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "read-route-client",
+ "owner": "uapi/app/read/ReadPageClient.tsx",
+ "contract": "ReadPageClient renders request-read, Need review, Finding Fits request, source-safe preview, settlement/delivery posture, route-owned activity readback, and live workbench controls.",
+ "requiredFields": [
+ "TerminalDepositReadWorkbench",
+ "TerminalRepositoryContextPanel",
+ "TerminalReadScenarioPanel",
+ "buildReadRouteSession",
+ "ReadNeedComprehensionSynthesis",
+ "ReadFitsFindingSynthesis"
+ ],
+ "rowRoot": "v43-read-route-contract:00991d243b0eae226fc9379f",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "navigation-read-route",
+ "owner": "uapi/components/base/bitcode/layout/nav.tsx",
+ "contract": "Public navigation and footer expose /read as the primary Reading path while retained Terminal remains available for debug-compatible detail.",
+ "requiredFields": [
+ "/read",
+ "Read",
+ "BITCODE_PUBLIC_EXPLAINERS.read"
+ ],
+ "rowRoot": "v43-read-route-contract:32d0594ac70011fa3bd8adcb",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ }
+ ],
+ "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",
+ "page": "uapi/app/read/page.tsx:37a723ed87feac05c0504249",
+ "client": "uapi/app/read/ReadPageClient.tsx:8e75873706918b22d7ddf8ed",
+ "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",
+ "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",
+ "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",
+ "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",
+ "sourcePath": "BITCODE_SPEC.txt",
+ "passed": true
+ },
+ {
+ "id": "spec-defines-gate4",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "spec-names-read-route-objects",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "delta-records-gate4",
+ "sourcePath": "BITCODE_SPEC_V43_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "notes-records-gate4",
+ "sourcePath": "BITCODE_SPEC_V43_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "parity-records-gate4",
+ "sourcePath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate4",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readme-records-gate4",
+ "sourcePath": "README.md",
+ "passed": true
+ },
+ {
+ "id": "protocol-readme-records-gate4",
+ "sourcePath": "packages/protocol/README.md",
+ "passed": true
+ },
+ {
+ "id": "route-model-defines-read-route-session",
+ "sourcePath": "uapi/app/read/read-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "route-model-defines-pipeline-ownership",
+ "sourcePath": "uapi/app/read/read-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "route-model-forbids-source-leakage",
+ "sourcePath": "uapi/app/read/read-route-model.ts",
+ "passed": true
+ },
+ {
+ "id": "read-page-canonical-route",
+ "sourcePath": "uapi/app/read/page.tsx",
+ "passed": true
+ },
+ {
+ "id": "read-client-renders-five-step-route",
+ "sourcePath": "uapi/app/read/ReadPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "read-client-reuses-live-workbench",
+ "sourcePath": "uapi/app/read/ReadPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "read-client-renders-source-safe-session",
+ "sourcePath": "uapi/app/read/ReadPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "read-client-records-activity",
+ "sourcePath": "uapi/app/read/ReadPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "terminal-routes-define-read",
+ "sourcePath": "uapi/app/terminal/terminal-routes.ts",
+ "passed": true
+ },
+ {
+ "id": "workbench-preserves-execution-stream",
+ "sourcePath": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "passed": true
+ },
+ {
+ "id": "reading-state-preserves-five-steps",
+ "sourcePath": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "passed": true
+ },
+ {
+ "id": "nav-links-to-read",
+ "sourcePath": "uapi/components/base/bitcode/layout/nav.tsx",
+ "passed": true
+ },
+ {
+ "id": "public-shell-recognizes-read",
+ "sourcePath": "uapi/components/base/bitcode/layout/workspace-surface.ts",
+ "passed": true
+ },
+ {
+ "id": "public-copy-uses-read-link",
+ "sourcePath": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts",
+ "passed": true
+ },
+ {
+ "id": "public-explainers-define-read",
+ "sourcePath": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts",
+ "passed": true
+ },
+ {
+ "id": "footer-links-to-read",
+ "sourcePath": "uapi/components/base/bitcode/layout/footer.tsx",
+ "passed": true
+ },
+ {
+ "id": "uapi-route-model-test-covers-read",
+ "sourcePath": "uapi/tests/readRouteModel.test.ts",
+ "passed": true
+ },
+ {
+ "id": "uapi-page-test-covers-read",
+ "sourcePath": "uapi/tests/readPageClient.test.tsx",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-covers-artifact",
+ "sourcePath": "packages/protocol/test/v43-read-route-five-step-ux.test.js",
+ "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": "package-json-exposes-gate4",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "gate-workflow-runs-gate4",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "canon-workflow-runs-gate4",
+ "sourcePath": ".github/workflows/bitcode-canon-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "generator-exists",
+ "sourcePath": "scripts/generate-v43-read-route-five-step-ux.mjs",
+ "passed": true
+ },
+ {
+ "id": "checker-exists",
+ "sourcePath": "scripts/check-v43-gate4-read-route-five-step-ux.mjs",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "readRouteImplemented": true,
+ "fiveStepUxImplemented": true,
+ "readNeedReviewImplemented": true,
+ "findingFitsRequestImplemented": true,
+ "assetPackPreviewImplemented": true,
+ "settlementDeliveryBoundaryImplemented": true,
+ "executionStreamRetained": true,
+ "terminalDebugCompatibilityRetained": true,
+ "acceptedNeedRequiredBeforeFindingFits": true,
+ "sourceSafePreviewBeforeSettlement": true,
+ "deliveryRequiresPaidReadRights": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "rawPromptVisible": false,
+ "interpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "requiredPredicateCount": 35,
+ "passedPredicateCount": 35,
+ "failedPredicateIds": []
+ }
+}
diff --git a/.bitcode/v43-route-ux-product-excellence.json b/.bitcode/v43-route-ux-product-excellence.json
new file mode 100644
index 00000000..c8c81fae
--- /dev/null
+++ b/.bitcode/v43-route-ux-product-excellence.json
@@ -0,0 +1,318 @@
+{
+ "artifactId": "v43-route-ux-product-excellence",
+ "schemaId": "bitcode.v43.routeUxProductExcellence.v1",
+ "version": "V43",
+ "currentTarget": "V42",
+ "sourceSafetyVerdict": "source-safe-product-route-ux-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v43-route-ux-product-excellence:f10ceb81e4c398ed20d34b1c",
+ "passed": true,
+ "objectIds": [
+ "ProductRouteShell",
+ "ProductRouteStepGrid",
+ "ProductRouteStatePanel",
+ "ProductRouteDisclosure",
+ "/packs product route",
+ "/read product route",
+ "/deposit product route"
+ ],
+ "fieldIds": [
+ "routeLabel",
+ "routeTitle",
+ "routeSummary",
+ "metric",
+ "step",
+ "statePanel",
+ "progressiveDisclosure",
+ "sourceSafeBoundary"
+ ],
+ "forbiddenPayloadIds": [
+ "protected_source_payload",
+ "raw_source_text",
+ "unpaid_assetpack_source",
+ "raw_protected_prompt",
+ "interpolated_prompt",
+ "raw_provider_response",
+ "wallet_private_material",
+ "settlement_private_payload"
+ ],
+ "contractRows": [
+ {
+ "rowId": "shared-product-route-shell",
+ "owner": "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "contract": "Packs, Reading, and Depositing render through a shared themed product shell with route label, title, concise summary, and source-safe route metrics.",
+ "requiredFields": [
+ "ProductRouteShell",
+ "route-shell-packs",
+ "route-shell-read",
+ "route-shell-deposit"
+ ],
+ "rowRoot": "v43-route-ux-contract:952044a7fa7cefa2bd20ec0e",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "keyboard-five-step-navigation",
+ "owner": "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "contract": "Reading and Depositing use a shared button-based step grid with visible active state, aria-current step semantics, and stable data attributes for route state tests.",
+ "requiredFields": [
+ "ProductRouteStepGrid",
+ "aria-current",
+ "data-reading-step-state",
+ "data-deposit-step-state"
+ ],
+ "rowRoot": "v43-route-ux-contract:ccb4ddbe71913d5359dd86e7",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "state-panels-empty-error-loading",
+ "owner": "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "contract": "Packs, Reading, and Depositing share compact loading, empty, and error state panels without leaking source-bearing payloads.",
+ "requiredFields": [
+ "ProductRouteStatePanel",
+ "loading",
+ "empty",
+ "error"
+ ],
+ "rowRoot": "v43-route-ux-contract:3583e5c5a45c2edb116d7035",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "progressive-source-safe-detail",
+ "owner": "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "contract": "Read and Deposit route proof detail remains expandable by default, with visible metadata and withheld protected-source boundaries stated as route state.",
+ "requiredFields": [
+ "ProductRouteDisclosure",
+ "Disclosure boundary",
+ "Withheld"
+ ],
+ "rowRoot": "v43-route-ux-contract:8feb4861984ad0ded6b4641a",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ },
+ {
+ "rowId": "product-copy-reduced",
+ "owner": "BITCODE_SPEC_V43.md",
+ "contract": "In-app product copy is concise route/status vocabulary rather than self-referential instructions, while deeper protocol explanation stays in public documentation and proof artifacts.",
+ "requiredFields": [
+ "self-referential product copy",
+ "route structure",
+ "progressive proof detail"
+ ],
+ "rowRoot": "v43-route-ux-contract:928c56bbf864b4790c8f107b",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "unpaidAssetPackSourceVisible": false
+ }
+ ],
+ "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",
+ "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",
+ "sourcePath": "BITCODE_SPEC.txt",
+ "passed": true
+ },
+ {
+ "id": "spec-defines-gate8",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "spec-records-shared-route-shell",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "delta-records-gate8",
+ "sourcePath": "BITCODE_SPEC_V43_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "notes-records-gate8",
+ "sourcePath": "BITCODE_SPEC_V43_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "parity-records-gate8",
+ "sourcePath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate8",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readme-records-gate8",
+ "sourcePath": "README.md",
+ "passed": true
+ },
+ {
+ "id": "protocol-readme-records-gate8",
+ "sourcePath": "packages/protocol/README.md",
+ "passed": true
+ },
+ {
+ "id": "shared-shell-implements-route-shell",
+ "sourcePath": "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "passed": true
+ },
+ {
+ "id": "shared-shell-implements-step-grid",
+ "sourcePath": "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "passed": true
+ },
+ {
+ "id": "shared-shell-implements-state-panel",
+ "sourcePath": "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "passed": true
+ },
+ {
+ "id": "shared-shell-implements-disclosure",
+ "sourcePath": "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "passed": true
+ },
+ {
+ "id": "packs-route-uses-shell",
+ "sourcePath": "uapi/app/packs/PacksPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "read-route-uses-shell-step-grid",
+ "sourcePath": "uapi/app/read/ReadPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "deposit-route-uses-shell-step-grid",
+ "sourcePath": "uapi/app/deposit/DepositPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "read-route-uses-progressive-disclosure",
+ "sourcePath": "uapi/app/read/ReadPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "deposit-route-uses-progressive-disclosure",
+ "sourcePath": "uapi/app/deposit/DepositPageClient.tsx",
+ "passed": true
+ },
+ {
+ "id": "product-copy-removes-long-instructions",
+ "sourcePath": "uapi/components/base/bitcode/routes/product-route-shell.tsx",
+ "passed": true
+ },
+ {
+ "id": "read-test-covers-shell-and-active-step",
+ "sourcePath": "uapi/tests/readPageClient.test.tsx",
+ "passed": true
+ },
+ {
+ "id": "deposit-test-covers-shell-and-active-step",
+ "sourcePath": "uapi/tests/depositPageClient.test.tsx",
+ "passed": true
+ },
+ {
+ "id": "packs-test-covers-shell",
+ "sourcePath": "uapi/tests/packsPageClient.test.tsx",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-covers-artifact",
+ "sourcePath": "packages/protocol/test/v43-route-ux-product-excellence.test.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-package-exports-gate8",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-types-export-gate8",
+ "sourcePath": "packages/protocol/src/index.d.ts",
+ "passed": true
+ },
+ {
+ "id": "package-json-exposes-gate8",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "gate-workflow-runs-gate8",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "canon-workflow-runs-gate8",
+ "sourcePath": ".github/workflows/bitcode-canon-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "generator-exists",
+ "sourcePath": "scripts/generate-v43-route-ux-product-excellence.mjs",
+ "passed": true
+ },
+ {
+ "id": "checker-exists",
+ "sourcePath": "scripts/check-v43-gate8-route-ux-product-excellence.mjs",
+ "passed": true
+ }
+ ],
+ "coverage": {
+ "sharedRouteShellImplemented": true,
+ "sharedStepGridImplemented": true,
+ "keyboardCurrentStepImplemented": true,
+ "routeMetricsImplemented": true,
+ "productRouteStatePanelsImplemented": true,
+ "loadingEmptyErrorStatesImplemented": true,
+ "progressiveDisclosureImplemented": true,
+ "packsRouteUsesSharedShell": true,
+ "readRouteUsesSharedShell": true,
+ "depositRouteUsesSharedShell": true,
+ "selfReferentialProductCopyReduced": true,
+ "executionStreamReadbackRetained": true,
+ "responsiveGridPostureImplemented": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "rawPromptVisible": false,
+ "interpolatedPromptVisible": false,
+ "rawProviderResponseVisible": false,
+ "walletPrivateMaterialVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "requiredPredicateCount": 30,
+ "passedPredicateCount": 30,
+ "failedPredicateIds": []
+ }
+}
diff --git a/.bitcode/v43-route-vocabulary-inventory.json b/.bitcode/v43-route-vocabulary-inventory.json
new file mode 100644
index 00000000..94d38947
--- /dev/null
+++ b/.bitcode/v43-route-vocabulary-inventory.json
@@ -0,0 +1,15872 @@
+{
+ "artifactId": "v43-route-vocabulary-inventory",
+ "schemaId": "bitcode.v43.routeVocabularyInventory.v1",
+ "version": "V43",
+ "currentTarget": "V42",
+ "sourceSafetyVerdict": "source-safe-route-vocabulary-inventory-metadata",
+ "generatedAt": "deterministic",
+ "artifactRoot": "v43-route-vocabulary-inventory:dc2284aedb0486adb5dd171e",
+ "passed": true,
+ "tokenIds": [
+ "route:/exchange",
+ "route:/terminal",
+ "route:/packs",
+ "route:/read",
+ "route:/deposit",
+ "symbol:Exchange",
+ "symbol:Terminal",
+ "symbol:Packs",
+ "symbol:Reading",
+ "symbol:Depositing",
+ "symbol:PackActivity",
+ "symbol:DepositAssetPackOption",
+ "word:exchange",
+ "word:terminal",
+ "word:self-referential"
+ ],
+ "categoryIds": [
+ "route",
+ "component",
+ "test",
+ "doc",
+ "api",
+ "telemetry",
+ "workflow",
+ "script",
+ "package",
+ "spec"
+ ],
+ "migrationRowIds": [
+ "packs-route-master-detail",
+ "read-route-five-step-reading",
+ "deposit-route-agentic-options",
+ "retained-debug-cockpit",
+ "redirect-compatibility",
+ "self-referential-copy-removal"
+ ],
+ "migrationRows": [
+ {
+ "rowId": "packs-route-master-detail",
+ "fromVocabulary": [
+ "/exchange",
+ "Exchange",
+ "exchange"
+ ],
+ "toVocabulary": [
+ "/packs",
+ "Packs",
+ "PackActivity"
+ ],
+ "owningGate": "V43 Gate 3 Packs Activity Master-Detail Data Model",
+ "compatibilityBoundary": "Existing exchange activity history is projected as source-safe PackActivity metadata; no unpaid AssetPack source becomes visible.",
+ "requiredMigrationWork": [
+ "rename route path and app references to /packs",
+ "rename component prefixes to Packs where the user-facing activity surface is meant",
+ "preserve historical ledger and proof labels as metadata when old records already contain exchange wording",
+ "add /exchange to /packs redirect until external links can be retired"
+ ],
+ "rowRoot": "v43-route-vocabulary-migration-row:944aa2ee719f63a979670461",
+ "sourceSafetyClass": "source_safe_route_vocabulary_migration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "source-snippets"
+ ]
+ },
+ {
+ "rowId": "read-route-five-step-reading",
+ "fromVocabulary": [
+ "/terminal",
+ "Terminal Reading"
+ ],
+ "toVocabulary": [
+ "/read",
+ "ReadRouteSession",
+ "Reading"
+ ],
+ "owningGate": "V43 Gate 4 Read Route Extraction And Five-Step UX",
+ "compatibilityBoundary": "Reading remains accepted-Need gated; retained cockpit code cannot bypass Need review, Finding Fits, settlement, rights transfer, or delivery reconciliation.",
+ "requiredMigrationWork": [
+ "extract five-step Reading UX into /read",
+ "hydrate historical readingStage and transaction query state into /read",
+ "preserve rich execution log streaming and source-safe proof expansion",
+ "keep unpaid AssetPack source hidden before settlement"
+ ],
+ "rowRoot": "v43-route-vocabulary-migration-row:d0098f91f96559892c7257c6",
+ "sourceSafetyClass": "source_safe_route_vocabulary_migration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "source-snippets"
+ ]
+ },
+ {
+ "rowId": "deposit-route-agentic-options",
+ "fromVocabulary": [
+ "/terminal",
+ "Terminal Depositing"
+ ],
+ "toVocabulary": [
+ "/deposit",
+ "DepositAssetPackOption",
+ "Depositing"
+ ],
+ "owningGate": "V43 Gate 5 Deposit Route And Agentic AssetPack Option Synthesis",
+ "compatibilityBoundary": "Deposit options are unminted source-safe AssetPack proposals; approval admits supply to the Depository but does not mint BTD or expose source to readers.",
+ "requiredMigrationWork": [
+ "extract source connection, depositor instructions, option synthesis, review, and admission into /deposit",
+ "use Depository state and Reading demand as source-safe option-synthesis context",
+ "show source criticality, likely demand, ROI posture, BTD potential, and compensation route",
+ "synchronize admitted options into /packs activity"
+ ],
+ "rowRoot": "v43-route-vocabulary-migration-row:47d17b7e8f55f061c2bcaebc",
+ "sourceSafetyClass": "source_safe_route_vocabulary_migration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "source-snippets"
+ ]
+ },
+ {
+ "rowId": "retained-debug-cockpit",
+ "fromVocabulary": [
+ "/terminal",
+ "Terminal"
+ ],
+ "toVocabulary": [
+ "internal cockpit",
+ "operator/debug surface"
+ ],
+ "owningGate": "V43 Gate 8 UX/UI Product Excellence Pass",
+ "compatibilityBoundary": "If retained, cockpit surfaces are explicit internal/debug affordances and never the default product path for Depositing or Reading.",
+ "requiredMigrationWork": [
+ "separate operator cockpit naming from product navigation",
+ "remove default product links to /terminal",
+ "verify retained cockpit cannot create second authority paths"
+ ],
+ "rowRoot": "v43-route-vocabulary-migration-row:86da1f49cfe0a23643f2ef07",
+ "sourceSafetyClass": "source_safe_route_vocabulary_migration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "source-snippets"
+ ]
+ },
+ {
+ "rowId": "redirect-compatibility",
+ "fromVocabulary": [
+ "/exchange",
+ "/terminal"
+ ],
+ "toVocabulary": [
+ "/packs",
+ "/read",
+ "/deposit"
+ ],
+ "owningGate": "V43 Gate 9 Cross-Route Rehearsal, Telemetry, And Repair",
+ "compatibilityBoundary": "Redirects preserve transaction ids, reading stages, deposit anchors, and proof roots without changing protocol authority.",
+ "requiredMigrationWork": [
+ "redirect /exchange to /packs",
+ "route Reading terminal state to /read",
+ "route Depositing terminal state to /deposit",
+ "prove telemetry, database, ledger, and storage readback remain synchronized after redirects"
+ ],
+ "rowRoot": "v43-route-vocabulary-migration-row:cbcb6017d26efd0e0495b998",
+ "sourceSafetyClass": "source_safe_route_vocabulary_migration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "source-snippets"
+ ]
+ },
+ {
+ "rowId": "self-referential-copy-removal",
+ "fromVocabulary": [
+ "self-referential product explanation",
+ "instructional route copy"
+ ],
+ "toVocabulary": [
+ "concise labels",
+ "progressive detail",
+ "source-safe proof expansion"
+ ],
+ "owningGate": "V43 Gate 8 UX/UI Product Excellence Pass",
+ "compatibilityBoundary": "Public docs may explain the protocol; product UI should communicate through route structure, labels, state, and reusable components.",
+ "requiredMigrationWork": [
+ "audit in-app self-referential copy outside public docs",
+ "replace copy that describes the design with operational labels and state",
+ "keep advanced detail available through expandable metadata and proof rows"
+ ],
+ "rowRoot": "v43-route-vocabulary-migration-row:b4c9534a1ac677d9fba613ec",
+ "sourceSafetyClass": "source_safe_route_vocabulary_migration_metadata",
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "source-snippets"
+ ]
+ }
+ ],
+ "predicateResults": [
+ {
+ "id": "active-canon-pointer-remains-v42",
+ "sourcePath": "BITCODE_SPEC.txt",
+ "passed": true
+ },
+ {
+ "id": "spec-defines-gate2-inventory",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "spec-defines-migration-matrix",
+ "sourcePath": "BITCODE_SPEC_V43.md",
+ "passed": true
+ },
+ {
+ "id": "delta-records-gate2-artifact",
+ "sourcePath": "BITCODE_SPEC_V43_DELTA.md",
+ "passed": true
+ },
+ {
+ "id": "notes-record-gate2-artifact",
+ "sourcePath": "BITCODE_SPEC_V43_NOTES.md",
+ "passed": true
+ },
+ {
+ "id": "parity-records-gate2-artifact",
+ "sourcePath": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "passed": true
+ },
+ {
+ "id": "roadmap-records-gate2-closure",
+ "sourcePath": "SPECIFICATIONS_ROADMAP.md",
+ "passed": true
+ },
+ {
+ "id": "readme-records-gate2",
+ "sourcePath": "README.md",
+ "passed": true
+ },
+ {
+ "id": "protocol-readme-records-gate2",
+ "sourcePath": "packages/protocol/README.md",
+ "passed": true
+ },
+ {
+ "id": "package-exposes-gate2-scripts",
+ "sourcePath": "package.json",
+ "passed": true
+ },
+ {
+ "id": "gate-workflow-runs-gate2",
+ "sourcePath": ".github/workflows/bitcode-gate-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "canon-workflow-runs-gate2",
+ "sourcePath": ".github/workflows/bitcode-canon-quality.yml",
+ "passed": true
+ },
+ {
+ "id": "protocol-index-exports-gate2",
+ "sourcePath": "packages/protocol/src/index.js",
+ "passed": true
+ },
+ {
+ "id": "protocol-types-export-gate2",
+ "sourcePath": "packages/protocol/src/index.d.ts",
+ "passed": true
+ },
+ {
+ "id": "generator-exists",
+ "sourcePath": "scripts/generate-v43-route-vocabulary-inventory.mjs",
+ "passed": true
+ },
+ {
+ "id": "checker-exists",
+ "sourcePath": "scripts/check-v43-gate2-route-vocabulary-inventory.mjs",
+ "passed": true
+ },
+ {
+ "id": "protocol-test-exists",
+ "sourcePath": "packages/protocol/test/v43-route-vocabulary-inventory.test.js",
+ "passed": true
+ },
+ {
+ "id": "legacy-exchange-inventory-nonempty",
+ "sourcePath": "source scan",
+ "passed": true
+ },
+ {
+ "id": "legacy-terminal-inventory-nonempty",
+ "sourcePath": "source scan",
+ "passed": true
+ },
+ {
+ "id": "target-route-vocabulary-present",
+ "sourcePath": "source scan",
+ "passed": true
+ },
+ {
+ "id": "pack-activity-vocabulary-present",
+ "sourcePath": "source scan",
+ "passed": true
+ },
+ {
+ "id": "deposit-option-vocabulary-present",
+ "sourcePath": "source scan",
+ "passed": true
+ },
+ {
+ "id": "migration-rows-complete",
+ "sourcePath": "packages/protocol/src/canonical/v43-route-vocabulary-inventory.js",
+ "passed": true
+ },
+ {
+ "id": "required-categories-covered",
+ "sourcePath": "source scan",
+ "passed": true
+ }
+ ],
+ "sourceFiles": [
+ {
+ "path": ".ai/PRODUCT.md",
+ "pathRoot": "v43-route-vocabulary-file:d7d02ce6b8059c5fdff24d84",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 5,
+ "symbol:Terminal": 4
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/bitcode-canon-quality.yml",
+ "pathRoot": "v43-route-vocabulary-file:5db65bd13994bf3ed230d3cf",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:exchange": 17,
+ "word:terminal": 4
+ },
+ "totalMatches": 21,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/bitcode-gate-quality.yml",
+ "pathRoot": "v43-route-vocabulary-file:fe6c8605a71a40a70b2efd8f",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 4,
+ "symbol:Reading": 1,
+ "word:exchange": 25,
+ "word:terminal": 9
+ },
+ "totalMatches": 39,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v29-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:50f6ce9fa94bfbff9da2d9df",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v30-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:aa6e5647523994102a15c5a5",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v31-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:6a334b009687533f2c3427c0",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v32-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:6824f7456c44a557b45b5226",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v33-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:0b142fe3d45d3a697ef6c8de",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v34-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:5545858999aafa7e9da9ef6d",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v35-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:d5a4d87fc319cbfd4a3a6b27",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v36-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:9d6829a7c9d1c4c6fc3a39be",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:exchange": 9,
+ "word:terminal": 1
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v37-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:b5df90146c3a120fa3b5bdd1",
+ "categories": [
+ "telemetry",
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".github/workflows/v40-canon-promotion.yml",
+ "pathRoot": "v43-route-vocabulary-file:6dbcfeaf2f0af0ca5db94f66",
+ "categories": [
+ "workflow"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": ".sales/INTRO_PAMPHLET.md",
+ "pathRoot": "v43-route-vocabulary-file:c859c53537daa44e2d97a14b",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_LIGHTPAPER.md",
+ "pathRoot": "v43-route-vocabulary-file:5b0f3580913204e883c1738c",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 8,
+ "symbol:Terminal": 7,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 17,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPECIFYING.md",
+ "pathRoot": "v43-route-vocabulary-file:9c83b951526e77eada8f1ab3",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V26.md",
+ "pathRoot": "v43-route-vocabulary-file:0c26c136010a8742815e4035",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 15,
+ "route:/deposit": 2,
+ "symbol:Exchange": 34,
+ "symbol:Terminal": 43,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 100,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V26_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:0786fc9ce90cfb9a0779ba60",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 6,
+ "symbol:Exchange": 21,
+ "symbol:Terminal": 21,
+ "word:terminal": 3
+ },
+ "totalMatches": 51,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V26_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:58278e0e5049ed7552aceb92",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 12,
+ "route:/deposit": 4,
+ "symbol:Exchange": 41,
+ "symbol:Terminal": 63,
+ "word:terminal": 3,
+ "word:self-referential": 1
+ },
+ "totalMatches": 124,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V26_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:293fc94f019dc4abf6423b14",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 11,
+ "route:/deposit": 3,
+ "symbol:Exchange": 18,
+ "symbol:Terminal": 25,
+ "word:terminal": 4
+ },
+ "totalMatches": 61,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V26_PROVEN.md",
+ "pathRoot": "v43-route-vocabulary-file:837410c251beba05a7914e08",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 8,
+ "symbol:Terminal": 7,
+ "word:exchange": 2,
+ "word:terminal": 6
+ },
+ "totalMatches": 23,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V27.md",
+ "pathRoot": "v43-route-vocabulary-file:1d48feb2a065c7a9116e981e",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 43,
+ "symbol:Terminal": 23,
+ "word:exchange": 5,
+ "word:terminal": 3
+ },
+ "totalMatches": 74,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V27_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:5f7332e93b8d39a7ea5540d1",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 26,
+ "symbol:Terminal": 22,
+ "word:exchange": 5,
+ "word:terminal": 4
+ },
+ "totalMatches": 57,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V27_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:006954e7533c93ce456eb493",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 44,
+ "symbol:Terminal": 22,
+ "word:exchange": 2,
+ "word:terminal": 4
+ },
+ "totalMatches": 72,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V27_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:90a80d46e7dd2d80eedf2a35",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Exchange": 30,
+ "symbol:Terminal": 18,
+ "word:exchange": 7,
+ "word:terminal": 5
+ },
+ "totalMatches": 61,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V27_PROVEN.md",
+ "pathRoot": "v43-route-vocabulary-file:2c51d77f18344a5f253c06b7",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 3,
+ "word:exchange": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V28.md",
+ "pathRoot": "v43-route-vocabulary-file:45b6423f7051de672823c8db",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 13,
+ "route:/read": 2,
+ "symbol:Exchange": 19,
+ "symbol:Terminal": 148,
+ "symbol:Reading": 25,
+ "symbol:Depositing": 5,
+ "word:exchange": 1,
+ "word:terminal": 24
+ },
+ "totalMatches": 237,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V28_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:f3f62bbae7089f2535b022ed",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Exchange": 16,
+ "symbol:Terminal": 44,
+ "symbol:Reading": 6,
+ "symbol:Depositing": 4
+ },
+ "totalMatches": 71,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V28_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:360641ca896ad997abe1550f",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "route:/read": 3,
+ "symbol:Exchange": 30,
+ "symbol:Terminal": 96,
+ "symbol:Reading": 10,
+ "symbol:Depositing": 4,
+ "word:exchange": 7,
+ "word:terminal": 7
+ },
+ "totalMatches": 163,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V28_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:179eb228109e4e207879a48e",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "route:/terminal": 24,
+ "route:/read": 2,
+ "symbol:Exchange": 20,
+ "symbol:Terminal": 66,
+ "symbol:Reading": 14,
+ "symbol:Depositing": 4,
+ "word:exchange": 3,
+ "word:terminal": 41
+ },
+ "totalMatches": 176,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V29.md",
+ "pathRoot": "v43-route-vocabulary-file:f192506c6c27631ae3c9c8aa",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 65,
+ "symbol:Reading": 21,
+ "symbol:Depositing": 2,
+ "word:terminal": 6
+ },
+ "totalMatches": 100,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V29_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:63f342e4f829e35616c289ba",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 33,
+ "symbol:Reading": 7,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 43,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V29_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:bfa4f02f572eb9fb17991247",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 34,
+ "symbol:Reading": 9,
+ "symbol:Depositing": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 49,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V29_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:295222b7d752ad43baf91d9f",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "symbol:Terminal": 39,
+ "symbol:Reading": 11,
+ "word:terminal": 22
+ },
+ "totalMatches": 78,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V30.md",
+ "pathRoot": "v43-route-vocabulary-file:dc24e9d4bf137fed2128eceb",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "route:/read": 3,
+ "symbol:Exchange": 6,
+ "symbol:Terminal": 53,
+ "symbol:Reading": 20,
+ "symbol:Depositing": 1,
+ "word:terminal": 6
+ },
+ "totalMatches": 93,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V30_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:edaf9c0cdf7c9086bc8a9228",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 4,
+ "symbol:Exchange": 7,
+ "symbol:Terminal": 12,
+ "symbol:Reading": 2
+ },
+ "totalMatches": 25,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V30_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:3f0d9be54e0e21746f76de4a",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 2,
+ "symbol:Exchange": 6,
+ "symbol:Terminal": 12,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 21,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V30_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:2d53cf0c1a120e3a646d1bb0",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "route:/read": 3,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 13,
+ "symbol:Reading": 1,
+ "word:terminal": 9
+ },
+ "totalMatches": 32,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V31.md",
+ "pathRoot": "v43-route-vocabulary-file:75102f617a93a1924b41a2bd",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Exchange": 16,
+ "symbol:Terminal": 41,
+ "symbol:Reading": 18,
+ "symbol:Depositing": 1,
+ "word:exchange": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 83,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V31_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:1b2f359b95b51256923795e8",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 11,
+ "symbol:Terminal": 8,
+ "symbol:Reading": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 24,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V31_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:4d5e218cc6b89d83438070a7",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 6,
+ "symbol:Terminal": 4,
+ "symbol:Reading": 2
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V31_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:9267d2f914eec72d2d9bb50f",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 2,
+ "symbol:Reading": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V32.md",
+ "pathRoot": "v43-route-vocabulary-file:4e081339bfd7a77764e327ba",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "route:/read": 2,
+ "symbol:Exchange": 8,
+ "symbol:Terminal": 49,
+ "symbol:Reading": 30,
+ "symbol:Depositing": 1,
+ "word:terminal": 6
+ },
+ "totalMatches": 99,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V32_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:5961e95388b5d12410e06675",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "route:/read": 1,
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 9,
+ "symbol:Reading": 9,
+ "word:terminal": 3
+ },
+ "totalMatches": 27,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V32_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:41edfad5812a5b62e8a8212e",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 6,
+ "symbol:Reading": 7,
+ "word:terminal": 1
+ },
+ "totalMatches": 16,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V32_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:36ad2a4df098d79b37fcc1b1",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 2,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 7,
+ "symbol:Reading": 11,
+ "word:terminal": 2
+ },
+ "totalMatches": 23,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V33.md",
+ "pathRoot": "v43-route-vocabulary-file:0c0b7119c9c433002a795de2",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 23,
+ "symbol:Reading": 13,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 39,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V33_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:3f054bedf56af2ceb14c067a",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 14,
+ "symbol:Reading": 4
+ },
+ "totalMatches": 22,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V33_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:ebd5a58625b03dbaf555ece7",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 14,
+ "symbol:Reading": 6
+ },
+ "totalMatches": 22,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V33_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:5c45ec3be7517ff5bd899731",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 12,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V34.md",
+ "pathRoot": "v43-route-vocabulary-file:fe26e0381f4144161b455cad",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 5,
+ "symbol:Reading": 11,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 19,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V34_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:e7a9cd10a750efce5442e981",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 6,
+ "word:terminal": 1
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V34_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:89b3a49d356c8539f98776d0",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V34_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:6f44fe899cd7aded13d62889",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V35.md",
+ "pathRoot": "v43-route-vocabulary-file:fbf19b40e4757bfce28fe704",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 5,
+ "symbol:Terminal": 9,
+ "symbol:Reading": 9,
+ "symbol:Depositing": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 25,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V35_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:74fe1d056b2489aeb574107c",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V35_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:4156ee0b7ff5acc3ba4edaf6",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V35_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:773a6ac92df799d9e62ca955",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V36.md",
+ "pathRoot": "v43-route-vocabulary-file:cf6b806e53831f2fb3819474",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 3,
+ "route:/terminal": 1,
+ "symbol:Exchange": 89,
+ "symbol:Terminal": 9,
+ "symbol:Reading": 10,
+ "symbol:Depositing": 1,
+ "word:exchange": 96,
+ "word:terminal": 1
+ },
+ "totalMatches": 210,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V36_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:fe54cdc9dfdcc4f55cab7097",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 22,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 1,
+ "word:exchange": 25
+ },
+ "totalMatches": 52,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V36_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:0239e3f6dbad730ca02b5a18",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 22,
+ "symbol:Terminal": 2,
+ "symbol:Reading": 2,
+ "word:exchange": 23
+ },
+ "totalMatches": 49,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V36_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:e4958bce22c17745f4bed95b",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "symbol:Exchange": 23,
+ "symbol:Terminal": 5,
+ "symbol:Reading": 1,
+ "word:exchange": 76
+ },
+ "totalMatches": 107,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V37.md",
+ "pathRoot": "v43-route-vocabulary-file:e678039d4ba81552da8066c2",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 3,
+ "route:/terminal": 2,
+ "symbol:Exchange": 87,
+ "symbol:Terminal": 30,
+ "symbol:Reading": 13,
+ "symbol:Depositing": 3,
+ "word:exchange": 88,
+ "word:terminal": 7
+ },
+ "totalMatches": 233,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V37_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:f38b002b9da6d621ef8227a5",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 20,
+ "symbol:Terminal": 19,
+ "symbol:Reading": 5,
+ "symbol:Depositing": 2,
+ "word:exchange": 17,
+ "word:terminal": 3
+ },
+ "totalMatches": 67,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V37_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:3f9199afe01c2838ea0a0e9f",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 6,
+ "symbol:Terminal": 18,
+ "symbol:Reading": 2,
+ "symbol:Depositing": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 29,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V37_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:c480c707b266e65631f07353",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "route:/terminal": 4,
+ "symbol:Exchange": 21,
+ "symbol:Terminal": 28,
+ "symbol:Reading": 3,
+ "symbol:Depositing": 2,
+ "word:exchange": 68,
+ "word:terminal": 23
+ },
+ "totalMatches": 151,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V38.md",
+ "pathRoot": "v43-route-vocabulary-file:9109fd1963617b255ede6d9b",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "route:/deposit": 1,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 2,
+ "symbol:Reading": 15,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 23,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V38_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:e67ccddc7f1a2d7492c1d61b",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 8
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V38_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:140ae640139d96fb49af3aad",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 12,
+ "word:exchange": 1
+ },
+ "totalMatches": 15,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V38_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:1ba225b689681d955d4fabb7",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "symbol:Reading": 14
+ },
+ "totalMatches": 17,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V39.md",
+ "pathRoot": "v43-route-vocabulary-file:803c5e48fa6072fc216c695c",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "route:/deposit": 2,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 6,
+ "symbol:Reading": 31,
+ "symbol:Depositing": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 46,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V39_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:40de8a56b6012a7854d85126",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 7,
+ "symbol:Reading": 19,
+ "word:terminal": 1
+ },
+ "totalMatches": 29,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V39_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:fa18b10bc1e6af7c57245c06",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 5,
+ "symbol:Reading": 32
+ },
+ "totalMatches": 37,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V39_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:f9c81c9fcfd5946d722f9451",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 5,
+ "route:/read": 1,
+ "symbol:Terminal": 9,
+ "symbol:Reading": 30,
+ "word:terminal": 11
+ },
+ "totalMatches": 56,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V40.md",
+ "pathRoot": "v43-route-vocabulary-file:a962a6bf61f4613a3ce68be7",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 7,
+ "symbol:Terminal": 28,
+ "symbol:Reading": 25,
+ "symbol:Depositing": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 65,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V40_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:d9b333bb54c3a61864656fea",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 7,
+ "symbol:Reading": 8,
+ "word:terminal": 2
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V40_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:38d2eb089e32a1565a5bae37",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 14,
+ "symbol:Reading": 19,
+ "word:terminal": 2
+ },
+ "totalMatches": 37,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V40_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:6e4f7f17dabc0b6d8eab2425",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 4,
+ "symbol:Reading": 5,
+ "word:terminal": 4
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V41.md",
+ "pathRoot": "v43-route-vocabulary-file:50717f3700b1ffc589445e08",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 8,
+ "symbol:Reading": 19,
+ "symbol:Depositing": 2
+ },
+ "totalMatches": 29,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V41_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:73941b8ae4ac54682ca5182b",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/packs": 1,
+ "route:/read": 1,
+ "route:/deposit": 1,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 13,
+ "symbol:Depositing": 1,
+ "word:exchange": 1
+ },
+ "totalMatches": 22,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V41_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:a83b950b13285f0c94a5c31a",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "route:/packs": 1,
+ "route:/read": 1,
+ "route:/deposit": 1,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 13,
+ "symbol:Depositing": 2,
+ "word:exchange": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 24,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V41_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:461705e9834b4ec50db5db0e",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 9
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V42.md",
+ "pathRoot": "v43-route-vocabulary-file:77a681199956b85d67bbe36b",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 4,
+ "route:/terminal": 5,
+ "route:/packs": 4,
+ "route:/read": 4,
+ "route:/deposit": 4,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 6,
+ "symbol:Reading": 23,
+ "symbol:Depositing": 10,
+ "word:exchange": 5,
+ "word:terminal": 5,
+ "word:self-referential": 1
+ },
+ "totalMatches": 72,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V42_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:84ff0a28a94588261cfd8de6",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "route:/packs": 4,
+ "route:/read": 3,
+ "route:/deposit": 3,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 6,
+ "symbol:Reading": 11,
+ "symbol:Depositing": 4,
+ "word:exchange": 1,
+ "word:terminal": 1,
+ "word:self-referential": 1
+ },
+ "totalMatches": 37,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V42_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:8960c1230a8d55beab2231f4",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "route:/terminal": 2,
+ "route:/packs": 5,
+ "route:/read": 4,
+ "route:/deposit": 4,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 6,
+ "symbol:Packs": 1,
+ "symbol:Reading": 10,
+ "symbol:Depositing": 8,
+ "word:exchange": 2,
+ "word:terminal": 2,
+ "word:self-referential": 1
+ },
+ "totalMatches": 49,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V42_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:003c092ceff58759e20d9b54",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "route:/packs": 2,
+ "route:/read": 2,
+ "route:/deposit": 2,
+ "symbol:Terminal": 5,
+ "symbol:Reading": 6,
+ "symbol:Depositing": 4,
+ "word:exchange": 1,
+ "word:terminal": 1,
+ "word:self-referential": 1
+ },
+ "totalMatches": 26,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V43.md",
+ "pathRoot": "v43-route-vocabulary-file:f9489450daa7a81f17a4c59d",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 5,
+ "route:/terminal": 5,
+ "route:/packs": 23,
+ "route:/read": 20,
+ "route:/deposit": 17,
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 2,
+ "symbol:Packs": 5,
+ "symbol:Reading": 21,
+ "symbol:Depositing": 8,
+ "symbol:PackActivity": 8,
+ "symbol:DepositAssetPackOption": 4,
+ "word:exchange": 6,
+ "word:terminal": 5,
+ "word:self-referential": 4
+ },
+ "totalMatches": 137,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V43_DELTA.md",
+ "pathRoot": "v43-route-vocabulary-file:3136a57cc69e956e06226549",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 4,
+ "route:/terminal": 2,
+ "route:/packs": 16,
+ "route:/read": 11,
+ "route:/deposit": 13,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 4,
+ "symbol:Packs": 1,
+ "symbol:Reading": 7,
+ "symbol:Depositing": 3,
+ "symbol:PackActivity": 2,
+ "symbol:DepositAssetPackOption": 1,
+ "word:exchange": 4,
+ "word:terminal": 2,
+ "word:self-referential": 3
+ },
+ "totalMatches": 75,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V43_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:4e0daddae0cfaea87a010383",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "route:/terminal": 1,
+ "route:/packs": 11,
+ "route:/read": 7,
+ "route:/deposit": 6,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "symbol:Packs": 1,
+ "symbol:Reading": 7,
+ "symbol:Depositing": 3,
+ "symbol:PackActivity": 2,
+ "symbol:DepositAssetPackOption": 1,
+ "word:exchange": 2,
+ "word:terminal": 1,
+ "word:self-referential": 2
+ },
+ "totalMatches": 48,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_SPEC_V43_PARITY_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:36b3bb78ffad68c27098132f",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 3,
+ "route:/terminal": 1,
+ "route:/packs": 13,
+ "route:/read": 8,
+ "route:/deposit": 11,
+ "symbol:Packs": 1,
+ "symbol:Reading": 2,
+ "symbol:PackActivity": 5,
+ "symbol:DepositAssetPackOption": 1,
+ "word:exchange": 3,
+ "word:terminal": 1,
+ "word:self-referential": 2
+ },
+ "totalMatches": 51,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_V11_PREP_MEMO.md",
+ "pathRoot": "v43-route-vocabulary-file:b1e60bfa73f58e90c6ab4741",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_V26_QA.md",
+ "pathRoot": "v43-route-vocabulary-file:8054f5c070c3a0b1de6a376c",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 4,
+ "word:terminal": 6
+ },
+ "totalMatches": 19,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_V28_QA.md",
+ "pathRoot": "v43-route-vocabulary-file:a1cabc3a7f574827ab0d1e37",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 28,
+ "route:/read": 4,
+ "symbol:Exchange": 28,
+ "symbol:Terminal": 180,
+ "symbol:Reading": 8,
+ "symbol:Depositing": 1,
+ "word:exchange": 28,
+ "word:terminal": 32
+ },
+ "totalMatches": 309,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_V29_QA.md",
+ "pathRoot": "v43-route-vocabulary-file:fa928ebc8bae0db3b492550b",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 4,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "BITCODE_V30_QA.md",
+ "pathRoot": "v43-route-vocabulary-file:7e3e25631ad84f553e6a85db",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "INVESTOR_MEMO.md",
+ "pathRoot": "v43-route-vocabulary-file:6fb3d75b198afe8cc9258a9e",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "PRODUCT.md",
+ "pathRoot": "v43-route-vocabulary-file:06c0596810b8f44179257fac",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "README.md",
+ "pathRoot": "v43-route-vocabulary-file:f016567028f5d6070662695b",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 5,
+ "route:/terminal": 5,
+ "route:/packs": 13,
+ "route:/read": 10,
+ "route:/deposit": 9,
+ "symbol:Exchange": 16,
+ "symbol:Terminal": 31,
+ "symbol:Packs": 3,
+ "symbol:Reading": 32,
+ "symbol:Depositing": 6,
+ "symbol:PackActivity": 1,
+ "symbol:DepositAssetPackOption": 1,
+ "word:exchange": 17,
+ "word:terminal": 7,
+ "word:self-referential": 2
+ },
+ "totalMatches": 158,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "SPECIFICATIONS_ROADMAP.md",
+ "pathRoot": "v43-route-vocabulary-file:ce539868a759bd90522b0def",
+ "categories": [
+ "doc",
+ "spec",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 4,
+ "route:/terminal": 3,
+ "route:/packs": 12,
+ "route:/read": 12,
+ "route:/deposit": 10,
+ "symbol:Exchange": 25,
+ "symbol:Terminal": 42,
+ "symbol:Reading": 59,
+ "symbol:Depositing": 11,
+ "symbol:PackActivity": 1,
+ "symbol:DepositAssetPackOption": 1,
+ "word:exchange": 20,
+ "word:terminal": 6,
+ "word:self-referential": 3
+ },
+ "totalMatches": 209,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "docs/conversations.md",
+ "pathRoot": "v43-route-vocabulary-file:ceebcec7ea32633f37a6c692",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 9,
+ "symbol:Reading": 2,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/ASSETPACK_EXECUTION.md",
+ "pathRoot": "v43-route-vocabulary-file:83303a87f7546909f57cceff",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 4
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_AGENTIC_EXECUTION.md",
+ "pathRoot": "v43-route-vocabulary-file:677cb5ec9edf663619861e85",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_API.md",
+ "pathRoot": "v43-route-vocabulary-file:99f18a1fe95386ae51c67bda",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 3
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_ARCHITECTURE_PATTERNS.md",
+ "pathRoot": "v43-route-vocabulary-file:2ff3fa77822943c21b83b08d",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_CHATGPT_APP_INTERFACE.md",
+ "pathRoot": "v43-route-vocabulary-file:adbaabe00bb53288a52a357f",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_CONNECTED_SERVICES.md",
+ "pathRoot": "v43-route-vocabulary-file:9c1e53cf4fd69109e304c61f",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_CONVERSATIONS.md",
+ "pathRoot": "v43-route-vocabulary-file:9bb807134797d384238707ca",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 4
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_CONVERSATIONS_TELEMETRY_RUNBOOK.md",
+ "pathRoot": "v43-route-vocabulary-file:84e9e70bf32f367dba8e0361",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 7,
+ "word:terminal": 2
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_EXCHANGE_DATABASE.md",
+ "pathRoot": "v43-route-vocabulary-file:b5ea15f6827e74ccf972c950",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 10,
+ "symbol:Terminal": 4
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_EXECUTIONS.md",
+ "pathRoot": "v43-route-vocabulary-file:c2ce36ef00416e803b4aab09",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_EXECUTION_WORK_SUMMARIES.md",
+ "pathRoot": "v43-route-vocabulary-file:c10bf2fa20df773f683483cb",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_FRONTEND_ARCHITECTURE.md",
+ "pathRoot": "v43-route-vocabulary-file:22a5a65e323ccaba04186c65",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_INTERFACE_STYLE.md",
+ "pathRoot": "v43-route-vocabulary-file:8ac4fef9aaeb1e31e10afcf6",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_PROTOCOL_THESIS.md",
+ "pathRoot": "v43-route-vocabulary-file:e5027b1c45af14d2789ac192",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_SOURCE_EVIDENCE_DOCUMENTS.md",
+ "pathRoot": "v43-route-vocabulary-file:7c0256d29e2dbbecde837550",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_TERMINAL_OPERATOR_EXPERIENCE.md",
+ "pathRoot": "v43-route-vocabulary-file:9d1b321e1a2e389e27294fd8",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 6
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_V26_GATE_NOTES.md",
+ "pathRoot": "v43-route-vocabulary-file:829c95c83bbd424f9bce49ae",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_V27_CRYPTO_RESEARCH_REBINDING.md",
+ "pathRoot": "v43-route-vocabulary-file:0970b59ab53e324d171e049d",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/BITCODE_VERIFICATION.md",
+ "pathRoot": "v43-route-vocabulary-file:53e9901d14214ff511b2d748",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/INTEGRATIONS.md",
+ "pathRoot": "v43-route-vocabulary-file:30fb9eab40e7c9d74b14454f",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "internal-docs/README.md",
+ "pathRoot": "v43-route-vocabulary-file:4e051716427d106284dbba20",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 3
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "package.json",
+ "pathRoot": "v43-route-vocabulary-file:106e04cb6e6f253ed710df48",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 41,
+ "word:terminal": 12
+ },
+ "totalMatches": 53,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/agent-generics/src/__tests__/prepare-concise-context.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:08eca1e1af432f3bec964a55",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/README.md",
+ "pathRoot": "v43-route-vocabulary-file:9e09733e254658b60279dd5e",
+ "categories": [
+ "api",
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 4
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/conversations/__tests__/branch-conversation.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:be466fa4edd4d8c5889d3f62",
+ "categories": [
+ "api",
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/conversations/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:71db1180e6df7fc791ff50f1",
+ "categories": [
+ "api",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/__tests__/auxillaries-contract.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:d6359d5343f0976aa6f7e3b8",
+ "categories": [
+ "api",
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 5,
+ "word:terminal": 4
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/__tests__/btd-crypto.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:a35b8341c3fc4dca33ec2e88",
+ "categories": [
+ "api",
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 2,
+ "word:exchange": 5,
+ "word:terminal": 19
+ },
+ "totalMatches": 34,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/__tests__/user-btd-mutation.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:b90c163fc66d576ed51a80c2",
+ "categories": [
+ "api",
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/auth.ts",
+ "pathRoot": "v43-route-vocabulary-file:74152b7104ee14871348dc75",
+ "categories": [
+ "api",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/auxillaries-contract.ts",
+ "pathRoot": "v43-route-vocabulary-file:9c56cff7b7f2715704369fd2",
+ "categories": [
+ "api",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 7,
+ "word:exchange": 5,
+ "word:terminal": 12
+ },
+ "totalMatches": 24,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/auxillaries.ts",
+ "pathRoot": "v43-route-vocabulary-file:0d2591065e0039521ef4390c",
+ "categories": [
+ "api",
+ "package"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/btd-crypto.ts",
+ "pathRoot": "v43-route-vocabulary-file:a36d01f1f9968e17e622b009",
+ "categories": [
+ "api",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/conversations.ts",
+ "pathRoot": "v43-route-vocabulary-file:d621dd3b3188a67c58a37d43",
+ "categories": [
+ "api",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/shippables.ts",
+ "pathRoot": "v43-route-vocabulary-file:6298cda6a3f3e27dde6f2a73",
+ "categories": [
+ "api",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/api/src/routes/user.ts",
+ "pathRoot": "v43-route-vocabulary-file:8651de1bdf97ece165693be7",
+ "categories": [
+ "api",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/bitbucket/src/providers/bitbucket-provider.ts",
+ "pathRoot": "v43-route-vocabulary-file:cd28312b05857b9fd2d8a292",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/README.md",
+ "pathRoot": "v43-route-vocabulary-file:f45b2df2817a8b5e2c4fed10",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 7,
+ "word:terminal": 2
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/api-boundaries.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:af2f48551648c4814a2f5cad",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/api-schema-compatibility-matrix.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:e7b47da8b5a0ce9a76940d06",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/asset-pack-economic-traceability.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:27a58ce8df17e765e33f6f14",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/btc-fee-operation.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:1752cb1f3237ebb8f890f038",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/btd.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:9f7b25b03352fd5f731b94d6",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/chatgpt-app-action-contract.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:283a113c55fe95f2fc9236f7",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/deployment-readiness-rehearsal.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:f169a8ef11710cb88ce56b99",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/interface-authorization-policy.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:ae4a011489e994f21dd7d405",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/interface-consumer-ux-regression-proof.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:16b1f550a3853f2af9a42bd0",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/interface-contract-catalog.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:e9ce47a18e715acb5d6fb0ff",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/interface-integration.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:e62eddb4e8fa007a7d3e5aa5",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:exchange": 1,
+ "word:terminal": 14
+ },
+ "totalMatches": 21,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/interface-telemetry-proof-hook.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:69f4dbf040c11a0adeda0c6c",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/read-license-assetpack-rights-contract.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:da86263a97c7a89e3627d9eb",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/terminal-operational-health.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:2b6bae8c43702f96002ae4a3",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/v27-crypto-primitives.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:5ee1efe5104a3e5933089276",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 2,
+ "word:exchange": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/v32-interface-contract-regression.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:75d8d6d26d1eae4723d885de",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/__tests__/v32-ledger-btd-settlement-failure-states.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:8d33198519bf0a9be9280c19",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/package.json",
+ "pathRoot": "v43-route-vocabulary-file:824a3bd6eaf6d4bd529b9067",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/api-boundaries.ts",
+ "pathRoot": "v43-route-vocabulary-file:2c127909358882128f92701c",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "symbol:Exchange": 20,
+ "symbol:Terminal": 6,
+ "word:exchange": 5,
+ "word:terminal": 15
+ },
+ "totalMatches": 48,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/api-schema-compatibility-matrix.ts",
+ "pathRoot": "v43-route-vocabulary-file:54060d17f4f88205ae74b64d",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 4,
+ "word:terminal": 11
+ },
+ "totalMatches": 17,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/authority.ts",
+ "pathRoot": "v43-route-vocabulary-file:ca821ebe156500319f9b458a",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 5,
+ "word:terminal": 10
+ },
+ "totalMatches": 15,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/deployment-host-capability-catalog.ts",
+ "pathRoot": "v43-route-vocabulary-file:e4ff9fb16a0ece1a17dba275",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/deployment-readiness-rehearsal.ts",
+ "pathRoot": "v43-route-vocabulary-file:17951ca1a6064b0264b21d7b",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 8
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/exchange.ts",
+ "pathRoot": "v43-route-vocabulary-file:943fcbc854d64a95b11634fe",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 8
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:090d3af17446d33c9f16c25e",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/interface-authorization-policy.ts",
+ "pathRoot": "v43-route-vocabulary-file:5ee296050cd376460455fa01",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 23
+ },
+ "totalMatches": 23,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/interface-consumer-ux-regression-proof.ts",
+ "pathRoot": "v43-route-vocabulary-file:eba086e89c4228ac1e5cdd16",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/interface-contract-catalog.ts",
+ "pathRoot": "v43-route-vocabulary-file:23bdb8bcaa7435fac4c2d168",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "symbol:Exchange": 3,
+ "word:exchange": 6,
+ "word:terminal": 4
+ },
+ "totalMatches": 15,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/interface-contract-regression.ts",
+ "pathRoot": "v43-route-vocabulary-file:cb742cb39b454e72f8d749aa",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "symbol:Exchange": 3,
+ "word:exchange": 3,
+ "word:terminal": 3
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/interface-integration-contract.ts",
+ "pathRoot": "v43-route-vocabulary-file:e2386181830b07c299c25bb0",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/interface-telemetry-proof-hook.ts",
+ "pathRoot": "v43-route-vocabulary-file:c56c21a7f186607003e4aa3c",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 6
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/mcp-tool-contract.ts",
+ "pathRoot": "v43-route-vocabulary-file:5eb5807afc154c20bf83442a",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/migration-approval-gate.ts",
+ "pathRoot": "v43-route-vocabulary-file:eeb7a040cc286f6b5dfc31a1",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/plans.ts",
+ "pathRoot": "v43-route-vocabulary-file:1fb0bbd5b0b6ad0a41a47af6",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/read-license-assetpack-rights-contract.ts",
+ "pathRoot": "v43-route-vocabulary-file:3dec3b9a8b56c8b3cd88064a",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 13
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/secret-rotation-plan.ts",
+ "pathRoot": "v43-route-vocabulary-file:62c8ad25c501d1d20fa2d793",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/terminal-journal.ts",
+ "pathRoot": "v43-route-vocabulary-file:4c88096958226fbf4bed302f",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/btd/src/terminal-operational-health.ts",
+ "pathRoot": "v43-route-vocabulary-file:ef53b31ad93d683857d5dc61",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "symbol:Reading": 3,
+ "word:exchange": 1,
+ "word:terminal": 39
+ },
+ "totalMatches": 46,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/chatgptapp/README.md",
+ "pathRoot": "v43-route-vocabulary-file:39bb4ebc239735c289ec6187",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/chatgptapp/src/__tests__/chatgpt-action-contract.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:98198358bc21794cf9c4c29f",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/chatgptapp/src/__tests__/tools.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:65d3ce9e7cc49b97ed5c3826",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/chatgptapp/src/server.ts",
+ "pathRoot": "v43-route-vocabulary-file:6a0355ffc070645e25fb9dc0",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/conversations-generics/README.md",
+ "pathRoot": "v43-route-vocabulary-file:c00004c0dabcf3ca1e8f292a",
+ "categories": [
+ "doc",
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/conversations-generics/package.json",
+ "pathRoot": "v43-route-vocabulary-file:a7865185b24fef1d66c6556c",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/conversations-generics/src/agent/ConversationAgent.ts",
+ "pathRoot": "v43-route-vocabulary-file:d7f2228600f73a8e2cd8340e",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/conversations-generics/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:b1ccf1aff59d11556e7bd954",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/conversations-generics/src/prompts/BitcodeTerminalConversationSystemPrompt.ts",
+ "pathRoot": "v43-route-vocabulary-file:6a04a2f7e304363817c9f298",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/conversations-generics/src/types.ts",
+ "pathRoot": "v43-route-vocabulary-file:13365d91102a1534858f54e5",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/execution-generics/TLDR.md",
+ "pathRoot": "v43-route-vocabulary-file:432b57e8658692256ae84b40",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/README.md",
+ "pathRoot": "v43-route-vocabulary-file:d72bc470dfea42601fd8c97a",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 6,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/ARCHITECTURE.md",
+ "pathRoot": "v43-route-vocabulary-file:f699dc04a04602515679ea1a",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Packs": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/PRODUCTION_READINESS_ASSESSMENT.md",
+ "pathRoot": "v43-route-vocabulary-file:8085c594ab1dc9931aaf9fca",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/README.md",
+ "pathRoot": "v43-route-vocabulary-file:21df52fea7445d3b91b49a09",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 5,
+ "symbol:Terminal": 3
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/TESTING.md",
+ "pathRoot": "v43-route-vocabulary-file:44f07b988f1ebabd9f76f697",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-api-reference.md",
+ "pathRoot": "v43-route-vocabulary-file:f72e88966e4034d94f4e149a",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-openapi.json",
+ "pathRoot": "v43-route-vocabulary-file:c51b14175d6be7b8f1e14c00",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/docs/mcp/mcp-specification.json",
+ "pathRoot": "v43-route-vocabulary-file:3f9ab58b282b997bc46fa803",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/docs/openapi/bitcode-mcp-openapi.json",
+ "pathRoot": "v43-route-vocabulary-file:3e00aa2043213b1bc274b0af",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/docs/public/mcp-api-reference.md",
+ "pathRoot": "v43-route-vocabulary-file:3a1f2534397e3a0adfacbaf3",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/docs/public/mcp-overview.md",
+ "pathRoot": "v43-route-vocabulary-file:67042c9368ed8a0b78aaac2a",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 1,
+ "symbol:Exchange": 9,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/package.json",
+ "pathRoot": "v43-route-vocabulary-file:2e7fbaf76907dbbfb75eb115",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/src/__tests__/unit/mcp-tool-contract.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:3b1b0cd8e92d14d4f64c56b1",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/src/__tests__/unit/pipeline-ingress-contract.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:8f41c42a8b535d88094c8926",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Reading": 1,
+ "word:terminal": 19
+ },
+ "totalMatches": 24,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/src/__tests__/unit/prompt-asset-pack-canon.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:ddbf90075f17e6b5ed8c417f",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/src/docs/mcp-spec-generator.ts",
+ "pathRoot": "v43-route-vocabulary-file:5e9cbcfd948c4726223923ec",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/src/docs/openapi-generator.ts",
+ "pathRoot": "v43-route-vocabulary-file:708b93d6e75de030fc313576",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:fb2c6f22fe661e3d221bf771",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/src/server.ts",
+ "pathRoot": "v43-route-vocabulary-file:5875733ce14dab980cd147ab",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/executions-mcp/src/mcp-server/src/types/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:e1ad2a018d3a6f4af47323d3",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/figma/src/auth.ts",
+ "pathRoot": "v43-route-vocabulary-file:70db0bd80a9ec9b6dfad2dd3",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/figma/src/types.ts",
+ "pathRoot": "v43-route-vocabulary-file:6266e94f2e11c00e3a95e745",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/files/README.md",
+ "pathRoot": "v43-route-vocabulary-file:d558edb5d0d55fc7bc1c19a0",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-agents/vcs/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:cc03395a8331f655634911c7",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-agents/web-researcher/README.md",
+ "pathRoot": "v43-route-vocabulary-file:c14ec29f92c71f4fa8757f91",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-agents/web-search/README.md",
+ "pathRoot": "v43-route-vocabulary-file:da9b11d3d6c21de6536ee5f1",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-agents/web-search/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:f447bff8b8de4967b858e74f",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/git-interactor/README.md",
+ "pathRoot": "v43-route-vocabulary-file:446b97424ddf28949f1104db",
+ "categories": [
+ "doc",
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/git-interactor/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:b170068b833fb670c1954384",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/git-interactor/src/prompts/GitInteractorDocCodeToolPrompt.ts",
+ "pathRoot": "v43-route-vocabulary-file:d89b1719ab43d688ffe6be3e",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/mcps-tools/gitlab/README.md",
+ "pathRoot": "v43-route-vocabulary-file:f9ffb6e071f9daea88957d03",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/mcps-tools/jira/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:fa68dd3bf14985a5db7c01ed",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/read-comprehension/README.md",
+ "pathRoot": "v43-route-vocabulary-file:ffe431acbe4fc13227abdac7",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/read-comprehension/src/read-comprehension-primitives.ts",
+ "pathRoot": "v43-route-vocabulary-file:1dcea50c4730344a3e7fcb3d",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/use-computer/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:4d8d24f237293eb60abdb917",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/web-search/README.md",
+ "pathRoot": "v43-route-vocabulary-file:698eb41a3711064b40e7fd8d",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/generic-tools/web-search/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:5703784473235b59f48b39f0",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/git/README.md",
+ "pathRoot": "v43-route-vocabulary-file:7b0579c5019b04966fe67b18",
+ "categories": [
+ "doc",
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/github/src/providers/github-provider.ts",
+ "pathRoot": "v43-route-vocabulary-file:73afabf656230c5d866c236f",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/gitlab/src/auth.ts",
+ "pathRoot": "v43-route-vocabulary-file:e0d36ef094951e21b6f174a5",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/gitlab/src/providers/gitlab-provider.ts",
+ "pathRoot": "v43-route-vocabulary-file:c07bac1ee2c7cbd8f8424a72",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/gitlab/src/types.ts",
+ "pathRoot": "v43-route-vocabulary-file:f92e4a85bea108984fa34492",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/jira/src/auth.ts",
+ "pathRoot": "v43-route-vocabulary-file:d1c892b0b2defb66af206933",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/jira/src/types.ts",
+ "pathRoot": "v43-route-vocabulary-file:649d00127502865d5847906f",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/notifications/README.md",
+ "pathRoot": "v43-route-vocabulary-file:62de8a6e25626adc0663ed03",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/notifications/src/types.ts",
+ "pathRoot": "v43-route-vocabulary-file:9d7006516500fc0faadd346a",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/notion/README.md",
+ "pathRoot": "v43-route-vocabulary-file:7d11bcae487db604ec55982a",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/notion/src/auth.ts",
+ "pathRoot": "v43-route-vocabulary-file:d41fa7d9700b7511fb9417a4",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/orm/README.md",
+ "pathRoot": "v43-route-vocabulary-file:eb0bf75331b7d5b828af2fd7",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/orm/scripts/run-data-health.ts",
+ "pathRoot": "v43-route-vocabulary-file:b7e25d23efe6ef2155ec556d",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/orm/src/data-health/checks.ts",
+ "pathRoot": "v43-route-vocabulary-file:2767fcdfef1e90cb36df3276",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 8,
+ "word:exchange": 4,
+ "word:terminal": 11
+ },
+ "totalMatches": 23,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipeline-hosts/README.md",
+ "pathRoot": "v43-route-vocabulary-file:1f396e2e87d830be3cdfccc6",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 5,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipeline-hosts/src/__tests__/distributed-execution-runtime-receipt.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:e183346058d1a3c7861c0e6c",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipeline-hosts/src/asset-pack-harness.ts",
+ "pathRoot": "v43-route-vocabulary-file:eadea3b0c8d456c86ac40d56",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipeline-hosts/src/dev/run-asset-pack-sandbox-harness.ts",
+ "pathRoot": "v43-route-vocabulary-file:503c07dbeb68774d01209d88",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipeline-hosts/src/distributed-execution-runtime-receipt.ts",
+ "pathRoot": "v43-route-vocabulary-file:9790c018af92eb0fbdc71528",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines-generics/src/execution/PipelineExecutor.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:c2281804285cdd384aa84833",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines-generics/src/execution/PipelineExecutor.ts",
+ "pathRoot": "v43-route-vocabulary-file:34aea3fa8250f2b25476a903",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/README.md",
+ "pathRoot": "v43-route-vocabulary-file:43791b5b45d144c1a0433132",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 6,
+ "symbol:Reading": 5,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/TLDR.md",
+ "pathRoot": "v43-route-vocabulary-file:56d003fecd63d3c9907ee1ee",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/scripts/v32-reading-pipeline-proof-coverage.ts",
+ "pathRoot": "v43-route-vocabulary-file:947468ddcdbed6002035b230",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 8
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/asset-pack-disclosure.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:0f7b6701bccae99efd97d64a",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 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",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/packs": 1,
+ "route:/deposit": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:afe8e3fb4d29f1b988768184",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 2,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:96749aa8ed22eaa357174623",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "route:/deposit": 1,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/depository-search.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:6b61825a505385f68c841c3a",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 6,
+ "word:terminal": 4
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:c0e583218a482d0337a40e04",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 3,
+ "word:terminal": 9
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/postprocess.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:c6c5774751b10f12d46d2f29",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:5c819fc7aa870c9d9963158e",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 7,
+ "symbol:Reading": 3
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/read-fits-finding-synthesis-asset-pack-synthesis-agent.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:f3dc652661d3eb8e0f201e3d",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:13b52f90fee641016216b456",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/read-need.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:9c008d75a2b96314d137ec0c",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 6,
+ "symbol:Reading": 2
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/reading-interface-product-parity.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:ef1322191e9b93ba4eb1c37a",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "symbol:Reading": 5,
+ "word:terminal": 5
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/reading-local-staging-rehearsal.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:6fcf868f063bfb4ed8e0bd77",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/reading-operational-telemetry-repair-readback.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:5595dc0fed63c73b09880f22",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/reading-pipeline-contract.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:2efcc5170423ed6b4c775977",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/reading-pipeline-integration-coverage.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:27a1581ca2dde0365081270e",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 7
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/reading-pipeline-observability.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:85be3e029f21653cff93447d",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/semantic-resolution.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:64c97388c9fccc022d12b68a",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/setup-agents.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:d12cf4c1d5fa640da40c63d5",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Terminal": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/__tests__/v32-reading-pipeline-proof-coverage.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:06b937a59d2448cfb23c8488",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/agents/discovery/asset-pack-select-files-parallel-agent.ts",
+ "pathRoot": "v43-route-vocabulary-file:be73a7eb7d6df633e253fe81",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/agents/finish/asset-pack-finish-generate-final-response-agent.ts",
+ "pathRoot": "v43-route-vocabulary-file:c2436cb34f9003e8e12629a0",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/agents/finish/deliver-asset-pack-to-destination-agent.ts",
+ "pathRoot": "v43-route-vocabulary-file:ecb6e9be7f28074b8a1fc27a",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/agents/setup/asset-pack-danger-wall-agent.ts",
+ "pathRoot": "v43-route-vocabulary-file:fe6ff0b009fadc3d88ee229f",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/agents/setup/read-fits-finding-synthesis-read-comprehension-agent.ts",
+ "pathRoot": "v43-route-vocabulary-file:a68a8ffd78f542087b5f5317",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 5
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts",
+ "pathRoot": "v43-route-vocabulary-file:18ffce5cb1faa6fe1648d16e",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 5,
+ "route:/deposit": 3,
+ "symbol:DepositAssetPackOption": 4
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts",
+ "pathRoot": "v43-route-vocabulary-file:c16791dbd3acae9a9143790b",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 3,
+ "symbol:DepositAssetPackOption": 8
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts",
+ "pathRoot": "v43-route-vocabulary-file:f3d165e7891d499973f55f24",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 3,
+ "symbol:Reading": 1,
+ "symbol:DepositAssetPackOption": 3
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:6d4401bdde8d14a689e26e57",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/read-need.ts",
+ "pathRoot": "v43-route-vocabulary-file:4ba001592847e76420761c05",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/reading-interface-product-parity.ts",
+ "pathRoot": "v43-route-vocabulary-file:27ab0d4edc9a0db73186fd4d",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Reading": 1,
+ "word:terminal": 16
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts",
+ "pathRoot": "v43-route-vocabulary-file:3605472d687fd252d023f9e6",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 5
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/reading-operational-telemetry-repair-readback.ts",
+ "pathRoot": "v43-route-vocabulary-file:ffa04f235af58965e369c6ab",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/semantic-resolution.ts",
+ "pathRoot": "v43-route-vocabulary-file:fca0d1ae9c15aeb71d940515",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/tools/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:7dc6f6c3bb6ff5a2ffb5d87d",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/pipelines/asset-pack/src/tools/search.ts",
+ "pathRoot": "v43-route-vocabulary-file:57a8d9d62174e56ed2ecdcbb",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/README.md",
+ "pathRoot": "v43-route-vocabulary-file:4d982df17218a68a017e7d97",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/benchmarking/README.md",
+ "pathRoot": "v43-route-vocabulary-file:93e574376d1af1b0739e40e3",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_identity_definition.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:975cb8a0d69c59c6ec8a3708",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_identity_definition.ts",
+ "pathRoot": "v43-route-vocabulary-file:38886bde514e98b531d4dc1f",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_name.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:e578837888721724609b7ebc",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_name.ts",
+ "pathRoot": "v43-route-vocabulary-file:46653a1ec4d75ea3349712bf",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_ptrrplan_purpose.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:100c1472c8d065f5e42ddd92",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_ptrrplan_purpose.ts",
+ "pathRoot": "v43-route-vocabulary-file:c85faf9d1e5974234fa06a87",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_ptrrrefine_purpose.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:348d0af6b726a2191958f3f2",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_ptrrrefine_purpose.ts",
+ "pathRoot": "v43-route-vocabulary-file:b65c301341d406be755948cd",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_ptrrretry_purpose.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:2a472d6077474d20310db3fa",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_ptrrretry_purpose.ts",
+ "pathRoot": "v43-route-vocabulary-file:b699e9fe769a798468bad798",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_ptrrtry_purpose.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:0a2b7fe4c24d3832e4c5e714",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_conversationagent_ptrrtry_purpose.ts",
+ "pathRoot": "v43-route-vocabulary-file:da6d1baaf45025ede5cd0d6c",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_dangerwall_integration_detailcontent.ts",
+ "pathRoot": "v43-route-vocabulary-file:dab8f7bf3c11e6472920dc69",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_finalizeshipment_refine_assessment.ts",
+ "pathRoot": "v43-route-vocabulary-file:7c44f6a765892fca83acfd20",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_finalizeshipment_retry_strategy.ts",
+ "pathRoot": "v43-route-vocabulary-file:eaa4cf2ca3cd19467d3037d6",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_finalizeshipment_system_role.ts",
+ "pathRoot": "v43-route-vocabulary-file:3230fc256d8acb9ec58b90ee",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_mcpsinitializer_capabilities_list.ts",
+ "pathRoot": "v43-route-vocabulary-file:75743705e582d229decc58df",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_mcpsinitializer_system_instructions.ts",
+ "pathRoot": "v43-route-vocabulary-file:e76c113b9ad3c0e96d2fa9f2",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_textsearcher_integration_detailcontent.ts",
+ "pathRoot": "v43-route-vocabulary-file:45bf52046c1d331f1ee11a56",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_videoprocessor_integration_detailcontent.ts",
+ "pathRoot": "v43-route-vocabulary-file:0b3deaba0e1bb71760f2a1bf",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_web_search_system_role.ts",
+ "pathRoot": "v43-route-vocabulary-file:3f1804669628cb6ab5acf7bf",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_webresearcher_capabilities_list.ts",
+ "pathRoot": "v43-route-vocabulary-file:019cd412a33dd1ba8443d8ad",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_webresearcher_integration_detailcontent.ts",
+ "pathRoot": "v43-route-vocabulary-file:abfd295f3afd2b2dff417a76",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_websearch_capabilities_list.ts",
+ "pathRoot": "v43-route-vocabulary-file:dcbaa9e2356185c286bfce6b",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_websearch_integration_detailcontent.ts",
+ "pathRoot": "v43-route-vocabulary-file:c32cdff3a9ce27fe03ce0f34",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_websearch_system_role.ts",
+ "pathRoot": "v43-route-vocabulary-file:a599919d4966f0a1e46f4285",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_agent_websearch_tools_list.ts",
+ "pathRoot": "v43-route-vocabulary-file:361dff82274d731695cf884c",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_phase_assetpackfinish_purpose_corestatement.ts",
+ "pathRoot": "v43-route-vocabulary-file:02a6715f5de6dbeb7633c3f8",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_system_bitcodeterminalconversation_capabilities_list.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:b7eac7564a08cbd1f5b92868",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_system_bitcodeterminalconversation_capabilities_list.ts",
+ "pathRoot": "v43-route-vocabulary-file:91f885a252e7cdf4ffde2f94",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_system_bitcodeterminalconversation_identity_corestatement.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:36ae726f793225052f12c689",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_system_bitcodeterminalconversation_identity_corestatement.ts",
+ "pathRoot": "v43-route-vocabulary-file:137c53f616b89ae8908f9ae8",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_system_bitcodeterminalconversation_usage_guidance.d.ts",
+ "pathRoot": "v43-route-vocabulary-file:7f1fc660b73035d9f092562c",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_system_bitcodeterminalconversation_usage_guidance.ts",
+ "pathRoot": "v43-route-vocabulary-file:75db77b5c32f3f73190a53cb",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_tool_analyzereadsatisfactionimplementationcomplexity_doccodetoolexample2.ts",
+ "pathRoot": "v43-route-vocabulary-file:2c9c5a86abeae14467eb66ac",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_tool_analyzereadsemantics_doccodetoolexample3.ts",
+ "pathRoot": "v43-route-vocabulary-file:77b0f50fa6d86dbacb951f05",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_tool_gitinteractor_doccodetoolexample1.ts",
+ "pathRoot": "v43-route-vocabulary-file:69b4d68b2091550d875509d8",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/prompts/src/raw_promptparts/specific/promptpart_specific_tool_gitinteractor_doccodetoolpurpose.ts",
+ "pathRoot": "v43-route-vocabulary-file:3915fb34835387010910d297",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/README.md",
+ "pathRoot": "v43-route-vocabulary-file:713df219ad5a8084a950c07c",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 4,
+ "route:/terminal": 2,
+ "route:/packs": 10,
+ "route:/read": 7,
+ "route:/deposit": 5,
+ "symbol:Exchange": 17,
+ "symbol:Terminal": 29,
+ "symbol:Packs": 1,
+ "symbol:Reading": 35,
+ "symbol:Depositing": 7,
+ "symbol:PackActivity": 1,
+ "word:exchange": 16,
+ "word:terminal": 6,
+ "word:self-referential": 1
+ },
+ "totalMatches": 141,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/data/state.json",
+ "pathRoot": "v43-route-vocabulary-file:403a1ba72931e6c2d8d8209d",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "word:exchange": 36
+ },
+ "totalMatches": 37,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/public/app.js",
+ "pathRoot": "v43-route-vocabulary-file:a8be8606a025794d8481e459",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 3,
+ "symbol:Reading": 14,
+ "symbol:Depositing": 26,
+ "word:exchange": 1
+ },
+ "totalMatches": 44,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/server.js",
+ "pathRoot": "v43-route-vocabulary-file:ed2eceac0f75f18f3016b772",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/bitcode-demo.js",
+ "pathRoot": "v43-route-vocabulary-file:2baf6bbd82c8e0d31d77ada9",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/assetpack-synthesis-economic-traceability.js",
+ "pathRoot": "v43-route-vocabulary-file:c0316c6db172fa1eaf443dca",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/conversation-promotion-readiness-report.js",
+ "pathRoot": "v43-route-vocabulary-file:378e5ca608125939154b578c",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/conversation-rehearsal.js",
+ "pathRoot": "v43-route-vocabulary-file:e5f7405a0351946351af8fd7",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "word:terminal": 6
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/conversation-session-route-history.js",
+ "pathRoot": "v43-route-vocabulary-file:8639fd86e7faa2560b89a29f",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/conversation-telemetry-proof-hooks.js",
+ "pathRoot": "v43-route-vocabulary-file:a9fb91da8fe4cbeeb637a8ed",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 8
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/conversation-terminal-handoff.js",
+ "pathRoot": "v43-route-vocabulary-file:92169612b367eb4163ff9fa6",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1,
+ "word:exchange": 6,
+ "word:terminal": 27
+ },
+ "totalMatches": 40,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/conversation-writing-workspace.js",
+ "pathRoot": "v43-route-vocabulary-file:e7f7d03c4a570b680bb1e7a1",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/docs-qa-alignment-report.js",
+ "pathRoot": "v43-route-vocabulary-file:de5143cbafd7cd99364c6bdd",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/documentation-surface-catalog.js",
+ "pathRoot": "v43-route-vocabulary-file:61b839ff32faf78f84460ff3",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/exchange-activity-book.js",
+ "pathRoot": "v43-route-vocabulary-file:74a31cdcbcdb88c5da7dbe7f",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 10,
+ "word:exchange": 68
+ },
+ "totalMatches": 79,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/exchange-dispute-repair-revenue-route.js",
+ "pathRoot": "v43-route-vocabulary-file:7ca118da73b127f222edef1a",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 20,
+ "word:exchange": 101
+ },
+ "totalMatches": 122,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/exchange-intent-order-contracts.js",
+ "pathRoot": "v43-route-vocabulary-file:58f36672124f9629a5692710",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 17,
+ "word:exchange": 62
+ },
+ "totalMatches": 80,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/exchange-pricing-quote.js",
+ "pathRoot": "v43-route-vocabulary-file:d11f365f670e34836cd69dbb",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 21,
+ "word:exchange": 29
+ },
+ "totalMatches": 51,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/exchange-promotion-readiness-report.js",
+ "pathRoot": "v43-route-vocabulary-file:cd55db7a536e3cc544e1ad46",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "word:exchange": 9
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/exchange-rehearsal.js",
+ "pathRoot": "v43-route-vocabulary-file:390551b97ef8a452f1a6f199",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 7,
+ "route:/packs": 6,
+ "symbol:Exchange": 14,
+ "word:exchange": 48,
+ "word:terminal": 10
+ },
+ "totalMatches": 86,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/exchange-rights-transfer-review.js",
+ "pathRoot": "v43-route-vocabulary-file:6ce43a6fd37e16ac30e878cc",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 13,
+ "word:exchange": 24
+ },
+ "totalMatches": 38,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/exchange-settlement-reconciliation.js",
+ "pathRoot": "v43-route-vocabulary-file:e13e3ff529f3aef2bfe07931",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 18,
+ "word:exchange": 39
+ },
+ "totalMatches": 58,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/exchange-ux-proof.js",
+ "pathRoot": "v43-route-vocabulary-file:8cc55d0be5e3af770bac8956",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 14,
+ "route:/terminal": 36,
+ "route:/packs": 6,
+ "symbol:Exchange": 12,
+ "symbol:Terminal": 4,
+ "word:exchange": 43,
+ "word:terminal": 46
+ },
+ "totalMatches": 161,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/inference-implementation-records.js",
+ "pathRoot": "v43-route-vocabulary-file:f85565150712a27ee0a3aba1",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/inference-promotion-readiness-report.js",
+ "pathRoot": "v43-route-vocabulary-file:eb4349d4f7d3d731147af449",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/inference-surface-inventory.js",
+ "pathRoot": "v43-route-vocabulary-file:41ab63376b160d5569d3b8e3",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/inference-telemetry-disclosure-report.js",
+ "pathRoot": "v43-route-vocabulary-file:06edcc2a9c3645fc9e64f621",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/local-staging-inference-depository-search-rehearsal.js",
+ "pathRoot": "v43-route-vocabulary-file:dc32186e97155ea7131d7d88",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/local-staging-telemetry-documentation-rehearsal.js",
+ "pathRoot": "v43-route-vocabulary-file:5f4cc82491672aa5a0d64b1d",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 1,
+ "word:terminal": 10
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/prompt-benchmark-report.js",
+ "pathRoot": "v43-route-vocabulary-file:4f4b8758cea3152925a0457a",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/proven-generator.js",
+ "pathRoot": "v43-route-vocabulary-file:308ad78c3f925c20c2ff96da",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 53,
+ "route:/read": 1,
+ "symbol:Exchange": 29,
+ "symbol:Terminal": 55,
+ "word:exchange": 10,
+ "word:terminal": 142
+ },
+ "totalMatches": 290,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/ptrr-failsafe-thricified-stack.js",
+ "pathRoot": "v43-route-vocabulary-file:0e0346eab2b79f3e7fd39d17",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/public-docs-usage-guide-catalog.js",
+ "pathRoot": "v43-route-vocabulary-file:8b3949741b031ac3c85c68e7",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 4,
+ "route:/terminal": 3,
+ "symbol:Exchange": 7,
+ "symbol:Terminal": 6,
+ "word:exchange": 5,
+ "word:terminal": 7
+ },
+ "totalMatches": 32,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/read-fits-finding-search-embeddings.js",
+ "pathRoot": "v43-route-vocabulary-file:c768bbb2bd3a66cb43ca7be0",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/read-need-comprehension-inference-hardening.js",
+ "pathRoot": "v43-route-vocabulary-file:c9ab18ca06972682b7edf08a",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/surfaces.js",
+ "pathRoot": "v43-route-vocabulary-file:567c2f5547d9ff97099e421b",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/telemetry-documentation-interface-integration.js",
+ "pathRoot": "v43-route-vocabulary-file:1558281abad3469e194b639f",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 9
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/telemetry-taxonomy-catalog.js",
+ "pathRoot": "v43-route-vocabulary-file:d195d5fd7b14f2d09776c895",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/testnet-rollout-readiness-guide.js",
+ "pathRoot": "v43-route-vocabulary-file:34a03c373db860b4d0437557",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v20-quality.js",
+ "pathRoot": "v43-route-vocabulary-file:bd90da653d5300beeeebcab3",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v21-specifying.js",
+ "pathRoot": "v43-route-vocabulary-file:3d6aa9f3a69fa35bfcff306a",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1,
+ "word:exchange": 7,
+ "word:terminal": 3
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v26-product-readiness-audit.js",
+ "pathRoot": "v43-route-vocabulary-file:22efdddeb409ac70604f5ab7",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 22,
+ "symbol:Exchange": 12,
+ "symbol:Terminal": 15,
+ "word:exchange": 4,
+ "word:terminal": 34
+ },
+ "totalMatches": 87,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v39-assetpack-preview-quote-boundary.js",
+ "pathRoot": "v43-route-vocabulary-file:3b63b945dea3f55b29d5f6de",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v39-commercial-reading-promotion-readiness-report.js",
+ "pathRoot": "v43-route-vocabulary-file:61929ea0039424b43a5a49f4",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v39-depository-supply-indexing.js",
+ "pathRoot": "v43-route-vocabulary-file:50b9358c59c83e6688f39d11",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v39-enterprise-reading-ux-state.js",
+ "pathRoot": "v43-route-vocabulary-file:1c79c148b99a34be0c4ffd67",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "symbol:Terminal": 8,
+ "symbol:Reading": 5,
+ "word:terminal": 18
+ },
+ "totalMatches": 37,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v39-interface-conversation-product-parity.js",
+ "pathRoot": "v43-route-vocabulary-file:28f877037ece856ed418dc60",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "symbol:Reading": 6,
+ "word:terminal": 11
+ },
+ "totalMatches": 20,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v39-local-staging-reading-rehearsal.js",
+ "pathRoot": "v43-route-vocabulary-file:dae5c55f4c81efe454e0b7d9",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 5
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v39-operational-telemetry-repair-readback.js",
+ "pathRoot": "v43-route-vocabulary-file:c9b5f13e143c9ea4c3efaf74",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 5,
+ "word:terminal": 2
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v39-settlement-rights-delivery.js",
+ "pathRoot": "v43-route-vocabulary-file:e5655e8493e25314abbf8fc4",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-api-integration-contracts.js",
+ "pathRoot": "v43-route-vocabulary-file:83e4d4f8bd93f2cc400078ed",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-browser-e2e-visual-proof.js",
+ "pathRoot": "v43-route-vocabulary-file:d67bded8815e5dd890ab9cdc",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 4,
+ "route:/terminal": 10,
+ "route:/packs": 3,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 6,
+ "symbol:Packs": 2,
+ "symbol:Reading": 3,
+ "word:exchange": 8,
+ "word:terminal": 23
+ },
+ "totalMatches": 61,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-conversation-terminal-integration.js",
+ "pathRoot": "v43-route-vocabulary-file:cfc1de807a35917fcb43fbf5",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 10,
+ "symbol:Terminal": 10,
+ "symbol:Reading": 5,
+ "word:terminal": 49
+ },
+ "totalMatches": 74,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-ledger-storage-sync.js",
+ "pathRoot": "v43-route-vocabulary-file:807a8f56280b98c99edc89a6",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-local-staging-rehearsal-automation.js",
+ "pathRoot": "v43-route-vocabulary-file:70c8c5df847d9dd043359b4a",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-promotion-readiness-report.js",
+ "pathRoot": "v43-route-vocabulary-file:f3ff3bb740a01625233fa584",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-prompt-benchmark-smoke-v41-readiness.js",
+ "pathRoot": "v43-route-vocabulary-file:b63f4da345dadefd10688a79",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-reading-pipeline-integration-coverage.js",
+ "pathRoot": "v43-route-vocabulary-file:52e29d8c5a851c9ba5adbd7a",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "route:/read": 1,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 8,
+ "word:terminal": 7
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-test-inventory-coverage-matrix.js",
+ "pathRoot": "v43-route-vocabulary-file:8463a31c8a398e5851d979ed",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 7
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v40-unit-coverage-inventory.js",
+ "pathRoot": "v43-route-vocabulary-file:7796debfedbf9d08eb90827c",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v41-conversation-tool-interface-prompt-rewrite.js",
+ "pathRoot": "v43-route-vocabulary-file:e3bb5c8a33edb47c7d032476",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 6,
+ "symbol:Reading": 2,
+ "word:terminal": 27
+ },
+ "totalMatches": 37,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v41-promotion-readiness-report.js",
+ "pathRoot": "v43-route-vocabulary-file:e3c1d77c3a5227a1f42f5c7d",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v41-prompt-program-benchmark-report.js",
+ "pathRoot": "v43-route-vocabulary-file:1e593ee320b86cd55ded56ce",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v41-promptpart-prompt-inventory.js",
+ "pathRoot": "v43-route-vocabulary-file:9beed106b3eeaa9632ce533f",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v41-readfitsfinding-prompt-hardening.js",
+ "pathRoot": "v43-route-vocabulary-file:fd3ec6eade5c3c0f19a8a721",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v41-reading-prompt-benchmark-baselines.js",
+ "pathRoot": "v43-route-vocabulary-file:0cbaf49f9ca22461b669190c",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v42-depositing-shortest-path.js",
+ "pathRoot": "v43-route-vocabulary-file:b4568ed26ce67e4e35925d58",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 2,
+ "word:terminal": 12
+ },
+ "totalMatches": 20,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v42-local-staging-mvp-rehearsal.js",
+ "pathRoot": "v43-route-vocabulary-file:0bf1647f8dddbb227a8adcfc",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Reading": 3,
+ "symbol:Depositing": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v42-promotion-readiness-report.js",
+ "pathRoot": "v43-route-vocabulary-file:b6a11a02db0a6819ff697a8f",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v42-readfitsfinding-preview-quote.js",
+ "pathRoot": "v43-route-vocabulary-file:efd12aab652bd3ee6b3c606c",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 1,
+ "word:terminal": 9
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v42-reading-shortest-path-state-machine.js",
+ "pathRoot": "v43-route-vocabulary-file:759ab695c02190e23354c6f6",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 8,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 9,
+ "word:terminal": 18
+ },
+ "totalMatches": 36,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v42-readneed-review-resynthesis-product-closure.js",
+ "pathRoot": "v43-route-vocabulary-file:37ab8c24bffb7bbf9c8df7cc",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 1,
+ "word:terminal": 9
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v42-settlement-rights-delivery.js",
+ "pathRoot": "v43-route-vocabulary-file:f8de8495faa768e0fd6f2e39",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 1,
+ "word:terminal": 10
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v43-cross-route-rehearsal-telemetry-repair.js",
+ "pathRoot": "v43-route-vocabulary-file:4efbb1863e37137927cbbcf0",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 11,
+ "route:/read": 8,
+ "route:/deposit": 7,
+ "symbol:PackActivity": 2
+ },
+ "totalMatches": 28,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v43-deposit-option-admission.js",
+ "pathRoot": "v43-route-vocabulary-file:17feaaf05a6ad871b15a66f1",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 2,
+ "route:/deposit": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v43-deposit-policy-compensation.js",
+ "pathRoot": "v43-route-vocabulary-file:cd9271147b9b9528c7da1b1e",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v43-deposit-route-options.js",
+ "pathRoot": "v43-route-vocabulary-file:fd99b475c329e18fdeacc290",
+ "categories": [
+ "package"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "route:/deposit": 14,
+ "symbol:Reading": 1,
+ "symbol:DepositAssetPackOption": 4,
+ "word:terminal": 5
+ },
+ "totalMatches": 26,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v43-packs-activity-master-detail.js",
+ "pathRoot": "v43-route-vocabulary-file:92efd11de04f491032db608e",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "route:/packs": 15,
+ "symbol:Packs": 3,
+ "symbol:PackActivity": 2,
+ "word:exchange": 4
+ },
+ "totalMatches": 26,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v43-promotion-readiness-report.js",
+ "pathRoot": "v43-route-vocabulary-file:105f32b8b771896cc3a1a140",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Packs": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v43-read-route-five-step-ux.js",
+ "pathRoot": "v43-route-vocabulary-file:3ccff3998243a1b97320bb01",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "route:/read": 14,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 4,
+ "word:terminal": 6
+ },
+ "totalMatches": 28,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v43-route-ux-product-excellence.js",
+ "pathRoot": "v43-route-vocabulary-file:c7db7ddec38e961e1af89c0d",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 2,
+ "route:/read": 2,
+ "route:/deposit": 2,
+ "symbol:Packs": 2,
+ "symbol:Reading": 3,
+ "symbol:Depositing": 3,
+ "word:self-referential": 2
+ },
+ "totalMatches": 16,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/src/canonical/v43-route-vocabulary-inventory.js",
+ "pathRoot": "v43-route-vocabulary-file:157fd43a1b0d92c5e4c6d901",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 7,
+ "route:/terminal": 8,
+ "route:/packs": 9,
+ "route:/read": 8,
+ "route:/deposit": 7,
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 6,
+ "symbol:Packs": 5,
+ "symbol:Reading": 9,
+ "symbol:Depositing": 6,
+ "symbol:PackActivity": 5,
+ "symbol:DepositAssetPackOption": 4,
+ "word:exchange": 15,
+ "word:terminal": 15,
+ "word:self-referential": 6
+ },
+ "totalMatches": 114,
+ "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",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v35-telemetry-documentation-interface-integration.test.js",
+ "pathRoot": "v43-route-vocabulary-file:97103812754a2ad3da73d6c3",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v36-exchange-activity-book.test.js",
+ "pathRoot": "v43-route-vocabulary-file:9349558377d4db23c59f71cb",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 7
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v36-exchange-dispute-repair-revenue-route.test.js",
+ "pathRoot": "v43-route-vocabulary-file:cd28a59da01f68fcbc7d4a64",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 11
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v36-exchange-intent-order-contracts.test.js",
+ "pathRoot": "v43-route-vocabulary-file:5efcfcb15b06326705f1e975",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 8
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v36-exchange-pricing-quote.test.js",
+ "pathRoot": "v43-route-vocabulary-file:44945b7d97ca1f3f3c600863",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v36-exchange-rehearsal.test.js",
+ "pathRoot": "v43-route-vocabulary-file:20565e0b2d0e9b0e761fdd38",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 5
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v36-exchange-rights-transfer-review.test.js",
+ "pathRoot": "v43-route-vocabulary-file:581ccbeb37542d88a0480221",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 6
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v36-exchange-settlement-reconciliation.test.js",
+ "pathRoot": "v43-route-vocabulary-file:00b30f504e794b307da76dbb",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 10
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v36-exchange-ux-proof.test.js",
+ "pathRoot": "v43-route-vocabulary-file:6e7b46551abbde6e677fda03",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 1,
+ "word:exchange": 5
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v36-promotion-readiness.test.js",
+ "pathRoot": "v43-route-vocabulary-file:61c8015b769a83ed6e9523c6",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "word:exchange": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v38-inference-surface-inventory.test.js",
+ "pathRoot": "v43-route-vocabulary-file:587e5fc76bb0a1fde8415e9e",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v38-inference-telemetry-disclosure-report.test.js",
+ "pathRoot": "v43-route-vocabulary-file:1a0bb28c9d0cd074fb692a39",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v38-local-staging-inference-depository-search-rehearsal.test.js",
+ "pathRoot": "v43-route-vocabulary-file:80657bee12229f3c17dc4b3d",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v38-prompt-benchmark-report.test.js",
+ "pathRoot": "v43-route-vocabulary-file:c55f3b4677e91cf078fe3bf1",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v39-enterprise-reading-ux-state.test.js",
+ "pathRoot": "v43-route-vocabulary-file:fa196fe88b5defecafad488a",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v39-local-staging-reading-rehearsal.test.js",
+ "pathRoot": "v43-route-vocabulary-file:959dfbc75c6af5306e9d3606",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v39-promotion-readiness.test.js",
+ "pathRoot": "v43-route-vocabulary-file:3b57c94bd6e008db32062acf",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v40-conversation-terminal-integration.test.js",
+ "pathRoot": "v43-route-vocabulary-file:1e75df87772e0c43a73e9a77",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v40-reading-pipeline-integration-coverage.test.js",
+ "pathRoot": "v43-route-vocabulary-file:dd952f9cdbd14baba6100e85",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v41-conversation-tool-interface-prompt-rewrite.test.js",
+ "pathRoot": "v43-route-vocabulary-file:f4eea12eac9ec10070a287ba",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v41-reading-prompt-benchmark-baselines.test.js",
+ "pathRoot": "v43-route-vocabulary-file:93fdc41424c8d72af9c9679b",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v42-depositing-shortest-path.test.js",
+ "pathRoot": "v43-route-vocabulary-file:8ac67465b6341e4d2e45d4fe",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Depositing": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v42-reading-shortest-path-state-machine.test.js",
+ "pathRoot": "v43-route-vocabulary-file:a3d6da88567c2ef6b06ef1e9",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v42-settlement-rights-delivery.test.js",
+ "pathRoot": "v43-route-vocabulary-file:5ed019fc6a26143fa70b874f",
+ "categories": [
+ "package",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v43-deposit-option-admission.test.js",
+ "pathRoot": "v43-route-vocabulary-file:30ebfe4eeb3561b0ac714a1f",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/packs": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v43-read-route-five-step-ux.test.js",
+ "pathRoot": "v43-route-vocabulary-file:806897d387b0667a60afa16b",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/protocol/test/v43-route-vocabulary-inventory.test.js",
+ "pathRoot": "v43-route-vocabulary-file:eea96e35784ef80a95367858",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "route:/packs": 1,
+ "route:/read": 1,
+ "route:/deposit": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/registry/README.md",
+ "pathRoot": "v43-route-vocabulary-file:321d503d6c1faf1a2eda8073",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/registry/TLDR.md",
+ "pathRoot": "v43-route-vocabulary-file:a22966d63b0650cb311eb93a",
+ "categories": [
+ "doc",
+ "package"
+ ],
+ "tokenCounts": {
+ "word:terminal": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/repository-health/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:b1286fdde2f65d48037359b1",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/tech-types/README.md",
+ "pathRoot": "v43-route-vocabulary-file:ccc8972b4f59b8ed3836fd1c",
+ "categories": [
+ "doc",
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/templates-generics/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:eb3c65246bfdf95bcc047792",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/web-search/src/__tests__/multi-provider.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:5757254addd0d030b336b9c6",
+ "categories": [
+ "package",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/web-search/src/index.ts",
+ "pathRoot": "v43-route-vocabulary-file:dca5102d1caa9e2eeef8be18",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "packages/web-search/src/providers/stackoverflow.ts",
+ "pathRoot": "v43-route-vocabulary-file:4fb4ee8faf7c0e7ab9e22c82",
+ "categories": [
+ "package",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/.tmp-surface-extract.txt",
+ "pathRoot": "v43-route-vocabulary-file:aa18b6062520d94fe7f02ad9",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/BITCODE_DEMO_SPEC_V15.md",
+ "pathRoot": "v43-route-vocabulary-file:6f914b72c147ad771f502da3",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/HOST_CAPABILITIES.json",
+ "pathRoot": "v43-route-vocabulary-file:649fa3d67afbfe427b35eb8a",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/HOST_CAPABILITIES.md",
+ "pathRoot": "v43-route-vocabulary-file:c5cbbd65b217323447b19fa8",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "symbol:Terminal": 14,
+ "word:terminal": 8
+ },
+ "totalMatches": 28,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/README.md",
+ "pathRoot": "v43-route-vocabulary-file:615751d37450d2ee9b196e04",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "route:/terminal": 3,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 1,
+ "word:exchange": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/SPEC_V10_IMPLEMENTATION_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:bbd4edee0dbf273991db9051",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/SPEC_V11_IMPLEMENTATION_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:9c77da544bc299066cea4454",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/SPEC_V12_IMPLEMENTATION_MATRIX.md",
+ "pathRoot": "v43-route-vocabulary-file:5f90fa4a31bbb356225e7072",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 3,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/V26_DOC_COMMENT_REFORM.md",
+ "pathRoot": "v43-route-vocabulary-file:11b7a5d67f02abb586cbc4ba",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/V26_INFERENCE_SYSTEMS.md",
+ "pathRoot": "v43-route-vocabulary-file:80184a170392f55935f12541",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 2,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 4,
+ "word:terminal": 1
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/V26_PROMPT_SURFACES.md",
+ "pathRoot": "v43-route-vocabulary-file:cda118cb06d18900d1fdeebc",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 7,
+ "word:terminal": 1
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/V26_PROOF_SURFACES.md",
+ "pathRoot": "v43-route-vocabulary-file:74f99172701ab1731c0c1772",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 132,
+ "route:/read": 8,
+ "route:/deposit": 1,
+ "symbol:Exchange": 9,
+ "symbol:Terminal": 40,
+ "word:terminal": 255
+ },
+ "totalMatches": 445,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/V26_REFORM_STRATEGY.md",
+ "pathRoot": "v43-route-vocabulary-file:3325330cbaef22c3c57133b9",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/V26_SHIPPABLE_REFORM.md",
+ "pathRoot": "v43-route-vocabulary-file:064845ce3db03fe09b6c16fa",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/V26_TERMINAL_SYSTEMS.md",
+ "pathRoot": "v43-route-vocabulary-file:bf1f53ed9b261a7fbc4a27ac",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 145,
+ "route:/read": 6,
+ "symbol:Exchange": 7,
+ "symbol:Terminal": 14,
+ "word:terminal": 256
+ },
+ "totalMatches": 428,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/data/state.json",
+ "pathRoot": "v43-route-vocabulary-file:d08bcd2ba2bf8ec6152b5d80",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "word:exchange": 36
+ },
+ "totalMatches": 37,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/public/app.js",
+ "pathRoot": "v43-route-vocabulary-file:4ecf8204a0c1341ae81fb7b6",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 3,
+ "symbol:Reading": 14,
+ "symbol:Depositing": 26,
+ "word:exchange": 1
+ },
+ "totalMatches": 44,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/server.js",
+ "pathRoot": "v43-route-vocabulary-file:e2fb21932aae2a32da6c4143",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/bitcode-demo.js",
+ "pathRoot": "v43-route-vocabulary-file:82556a7bda767cd52aabd52f",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/canonical/inference-implementation-records.js",
+ "pathRoot": "v43-route-vocabulary-file:a9bf79072360ab52521c40ea",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/canonical/proven-generator.js",
+ "pathRoot": "v43-route-vocabulary-file:05f77b5845cc0a470eedbd42",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 52,
+ "route:/read": 1,
+ "symbol:Exchange": 29,
+ "symbol:Terminal": 55,
+ "word:exchange": 1,
+ "word:terminal": 139
+ },
+ "totalMatches": 277,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/canonical/surfaces.js",
+ "pathRoot": "v43-route-vocabulary-file:555a60c26032e51f79974c94",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/canonical/v20-quality.js",
+ "pathRoot": "v43-route-vocabulary-file:57b88eb355738903c64c92d3",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/canonical/v21-specifying.js",
+ "pathRoot": "v43-route-vocabulary-file:800e578403194853c234746b",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/canonical/v26-product-readiness-audit.js",
+ "pathRoot": "v43-route-vocabulary-file:d6770479e91363818082046d",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 22,
+ "symbol:Exchange": 12,
+ "symbol:Terminal": 15,
+ "word:exchange": 4,
+ "word:terminal": 34
+ },
+ "totalMatches": 87,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/demo-shell-state.js",
+ "pathRoot": "v43-route-vocabulary-file:d80470c5df50f1701570922a",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/local-fit-finding.js",
+ "pathRoot": "v43-route-vocabulary-file:76ee7d479485f06a62f78f15",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/src/receipt-schemas.js",
+ "pathRoot": "v43-route-vocabulary-file:d4ffd0d722e90e19478a8ae0",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/api.test.js",
+ "pathRoot": "v43-route-vocabulary-file:a27b363db355dcdb0878b541",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/local-fit-finding.test.js",
+ "pathRoot": "v43-route-vocabulary-file:8efa7a2e365f822b0e1fe08f",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:exchange": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/proven-generator.test.js",
+ "pathRoot": "v43-route-vocabulary-file:85f9f9b384891f25eaf42198",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v20-visual-regression.test.js",
+ "pathRoot": "v43-route-vocabulary-file:8b41f9ab9a9714541cafbe09",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v21-specifying.test.js",
+ "pathRoot": "v43-route-vocabulary-file:418ae24156694e2ca6b32bb0",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v26-active-product-naming.test.js",
+ "pathRoot": "v43-route-vocabulary-file:2414a7a4c76c989fcd53ddcc",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 28,
+ "route:/read": 5,
+ "symbol:Exchange": 11,
+ "symbol:Terminal": 20,
+ "word:exchange": 1,
+ "word:terminal": 40
+ },
+ "totalMatches": 105,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v26-gate-acceptance-criteria.test.js",
+ "pathRoot": "v43-route-vocabulary-file:4e3444fdcb99d5dd6fc2d9f5",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 3,
+ "word:terminal": 4
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v26-inference-implementation-records.test.js",
+ "pathRoot": "v43-route-vocabulary-file:2f543e6f5115b99b31fa31fe",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v26-product-readiness-audit.test.js",
+ "pathRoot": "v43-route-vocabulary-file:7b9300c29e86864a373f0415",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v26-prompt-surface-map.test.js",
+ "pathRoot": "v43-route-vocabulary-file:53320d04032994b7547d2812",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "route:/read": 1,
+ "symbol:Terminal": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v26-prompt-system-boundary.test.js",
+ "pathRoot": "v43-route-vocabulary-file:8a8ff4c4b24d978e8dc2e875",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "word:terminal": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v26-read-review-source-to-shares.test.js",
+ "pathRoot": "v43-route-vocabulary-file:727a06ce4ed8b1586c4149ba",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v26-shippable-reform.test.js",
+ "pathRoot": "v43-route-vocabulary-file:7a48bd70908727d52ca79806",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "route:/read": 4,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 2,
+ "word:terminal": 7
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v26-simple-system-text-search-compatibility.test.js",
+ "pathRoot": "v43-route-vocabulary-file:594dbbb510cbb9b6bacad221",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v27-crypto-primitives.test.js",
+ "pathRoot": "v43-route-vocabulary-file:e3b7b64d789d770f5bc11e30",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "protocol-demonstration/test/v28-mvp-qa.test.js",
+ "pathRoot": "v43-route-vocabulary-file:8a60f1f24664681a72f618c0",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 2,
+ "route:/packs": 1,
+ "symbol:Exchange": 2,
+ "word:exchange": 3,
+ "word:terminal": 3
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v28-gate10-read-need-comprehension.mjs",
+ "pathRoot": "v43-route-vocabulary-file:39328a0abc71a3e7b97c97f2",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v28-gate11-read-fits-finding-preview.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d33f5f3657fcfdda85c0df35",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v28-gate12-settlement-rights-delivery.mjs",
+ "pathRoot": "v43-route-vocabulary-file:484340e142a72e9bb9eb0473",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v28-gate9-depository-evidence.mjs",
+ "pathRoot": "v43-route-vocabulary-file:82c2737e6a09a64117f6331c",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Depositing": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v29-gate1-objectives-and-gating.mjs",
+ "pathRoot": "v43-route-vocabulary-file:3a236cbae37d0cea23f2be62",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v29-gate10-local-staging-promotion-readiness.mjs",
+ "pathRoot": "v43-route-vocabulary-file:71631de2bc39f89520b4b299",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v29-gate2-terminal-transaction-read-models.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d8115d61320d0a8bbdf47dad",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 14,
+ "symbol:Terminal": 9,
+ "word:terminal": 20
+ },
+ "totalMatches": 43,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v29-gate3-wallet-signer-btc-operations.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d389f571241e36b1d766f737",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 13,
+ "route:/read": 1,
+ "symbol:Terminal": 5,
+ "word:terminal": 19
+ },
+ "totalMatches": 38,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v29-gate4-reading-pipeline-observability.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a1723d70806fee5715e731df",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 14,
+ "word:terminal": 6
+ },
+ "totalMatches": 27,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v29-gate5-assetpack-disclosure-rights.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a3cc279a675c4da702109b6b",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 1,
+ "word:terminal": 11
+ },
+ "totalMatches": 16,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v29-gate6-settlement-reconciliation-repair.mjs",
+ "pathRoot": "v43-route-vocabulary-file:77bf590794c2f3764285d236",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 8,
+ "symbol:Terminal": 2,
+ "word:terminal": 12
+ },
+ "totalMatches": 22,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v29-gate7-organization-permission-authority.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d6a9e8436c96228228f310aa",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 12,
+ "symbol:Terminal": 1,
+ "word:terminal": 21
+ },
+ "totalMatches": 34,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v29-gate9-terminal-ux-browser-proof.mjs",
+ "pathRoot": "v43-route-vocabulary-file:32fdb75c131515c0ca41cdf7",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 17,
+ "symbol:Terminal": 15,
+ "word:terminal": 43
+ },
+ "totalMatches": 75,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v30-gate4-btd-assetpack-mint-read-receipts.mjs",
+ "pathRoot": "v43-route-vocabulary-file:0cfd022a3a7b4a85220ea248",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "route:/read": 3,
+ "symbol:Terminal": 5,
+ "word:terminal": 8
+ },
+ "totalMatches": 20,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v30-gate5-testnet-ledger-projection-hardening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:40911cd079cffd5de59f116c",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 8,
+ "symbol:Terminal": 3,
+ "word:terminal": 12
+ },
+ "totalMatches": 23,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v30-gate6-source-to-shares-proof-cleanup.mjs",
+ "pathRoot": "v43-route-vocabulary-file:70ae39e926cb08d49164fccf",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v30-gate7-bridge-readiness-research-boundaries.mjs",
+ "pathRoot": "v43-route-vocabulary-file:bb5345594662ee7ced585773",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v30-gate8-protocol-telemetry-proof-hooks.mjs",
+ "pathRoot": "v43-route-vocabulary-file:8a8474de545c355967123609",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v30-gate9-interface-integration-regression-proof.mjs",
+ "pathRoot": "v43-route-vocabulary-file:417fb0a1920c635c3cdc60ea",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "symbol:Terminal": 5,
+ "word:terminal": 12
+ },
+ "totalMatches": 23,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v31-gate4-connects-provider-readiness.mjs",
+ "pathRoot": "v43-route-vocabulary-file:ffa6941a5acb0e849aee54b1",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v31-gate5-wallet-btd-pane-readiness.mjs",
+ "pathRoot": "v43-route-vocabulary-file:49d000ff0049dbd33acf2d4b",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Exchange": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v31-gate6-organization-team-role-policy-authority.mjs",
+ "pathRoot": "v43-route-vocabulary-file:cdd7ffd7ca4d8f5288bd8464",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 5,
+ "route:/read": 1,
+ "symbol:Terminal": 3,
+ "word:terminal": 7
+ },
+ "totalMatches": 16,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v31-gate7-interfaces-pane-admission-cross-surface-contracts.mjs",
+ "pathRoot": "v43-route-vocabulary-file:c84775baa99a54fcd5ab8535",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:exchange": 5,
+ "word:terminal": 1
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v32-gate1-provation-roadmap-opening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:2f15502d4cd9b68ded29fb44",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v32-gate4-reading-pipeline-proof-coverage.mjs",
+ "pathRoot": "v43-route-vocabulary-file:56812603d51e70712f06cc63",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 21
+ },
+ "totalMatches": 21,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v32-gate5-ledger-btd-settlement-failure-states.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a2a75e1d6716edaa874c4246",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v32-gate6-interface-contract-regression-suites.mjs",
+ "pathRoot": "v43-route-vocabulary-file:9f44db62f81bf1c5c1a73e11",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v32-gate7-browser-accessibility-responsive-visual-proof.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a8f5ae602fb6e63348cbf6a7",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 2,
+ "word:terminal": 4
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v33-gate2-interface-contract-catalog.mjs",
+ "pathRoot": "v43-route-vocabulary-file:74810f024be5f9e55720dff6",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v33-gate4-chatgpt-app-action-contracts.mjs",
+ "pathRoot": "v43-route-vocabulary-file:3d82083d94ff3b6ac006047b",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v33-gate5-interface-authorization-policy.mjs",
+ "pathRoot": "v43-route-vocabulary-file:e03440b53324baf62fa3e958",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v33-gate6-read-license-assetpack-rights-contracts.mjs",
+ "pathRoot": "v43-route-vocabulary-file:bc62f16f98758f917962dfce",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v33-gate7-api-schema-compatibility-matrix.mjs",
+ "pathRoot": "v43-route-vocabulary-file:b779af8982cb06fe11178c66",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v33-gate8-interface-telemetry-proof-hooks.mjs",
+ "pathRoot": "v43-route-vocabulary-file:77a779855db7949a56d5d2b5",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v33-gate9-interface-consumer-ux-regression-proof.mjs",
+ "pathRoot": "v43-route-vocabulary-file:ecbb301569f83cc502fd94f5",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v34-gate9-local-staging-testnet-deployment-rehearsal.mjs",
+ "pathRoot": "v43-route-vocabulary-file:67bea68750d44b0e29b1f09a",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "symbol:Reading": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v35-gate4-public-docs-usage-guides.mjs",
+ "pathRoot": "v43-route-vocabulary-file:65ebb83577d1bcd254cc1977",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v35-gate8-telemetry-documentation-interface-integration.mjs",
+ "pathRoot": "v43-route-vocabulary-file:55dfc84042e50c5a799dab7d",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v35-gate9-local-staging-telemetry-documentation-rehearsal.mjs",
+ "pathRoot": "v43-route-vocabulary-file:ceb6065cd343b4e344a34ab5",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate1-exchange-roadmap-opening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:e7f3ff98d2cdf020f52e8346",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 11,
+ "symbol:Terminal": 1,
+ "word:exchange": 6
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate10-promotion-readiness.mjs",
+ "pathRoot": "v43-route-vocabulary-file:64f206d5136a43ab3f9630a9",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 9
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate2-exchange-activity-book-market-master-detail.mjs",
+ "pathRoot": "v43-route-vocabulary-file:8467e505e01b352b2cc409bd",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "symbol:Exchange": 42,
+ "word:exchange": 22
+ },
+ "totalMatches": 66,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate3-exchange-intent-order-contracts.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d4d25bc7addab3c4efb3a257",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "symbol:Exchange": 33,
+ "word:exchange": 31
+ },
+ "totalMatches": 66,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate4-exchange-rights-transfer-review.mjs",
+ "pathRoot": "v43-route-vocabulary-file:b7d230bfcf104e7c6da724f7",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "symbol:Exchange": 28,
+ "word:exchange": 21
+ },
+ "totalMatches": 51,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate5-exchange-pricing-quote.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a5f625eb595d9435291b4876",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "symbol:Exchange": 30,
+ "word:exchange": 20
+ },
+ "totalMatches": 52,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate6-exchange-settlement-reconciliation.mjs",
+ "pathRoot": "v43-route-vocabulary-file:60a187bacf1774d6e3326fec",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "symbol:Exchange": 24,
+ "word:exchange": 22
+ },
+ "totalMatches": 48,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate7-exchange-dispute-repair-revenue-route.mjs",
+ "pathRoot": "v43-route-vocabulary-file:5675a5dc004c6ee68d80d702",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "symbol:Exchange": 35,
+ "word:exchange": 24
+ },
+ "totalMatches": 61,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate8-exchange-ux-proof.mjs",
+ "pathRoot": "v43-route-vocabulary-file:ad96bfed8d039521da267833",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 4,
+ "route:/terminal": 5,
+ "symbol:Exchange": 50,
+ "symbol:Terminal": 7,
+ "word:exchange": 25,
+ "word:terminal": 7
+ },
+ "totalMatches": 98,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v36-gate9-exchange-rehearsal.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a5abde5876dbc1b3524a65df",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "symbol:Exchange": 39,
+ "word:exchange": 19
+ },
+ "totalMatches": 60,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v37-gate1-conversations-roadmap-opening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:3fb60d7753685b7ab4c78474",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v37-gate10-promotion-readiness.mjs",
+ "pathRoot": "v43-route-vocabulary-file:bc79f3c3466a5e18bd2ca2ac",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v37-gate4-conversation-writing-workspace.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d7b58ca22422b753a875b837",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v37-gate6-conversation-terminal-handoff.mjs",
+ "pathRoot": "v43-route-vocabulary-file:216e556bbfe7a979068c99f0",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 7,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1,
+ "word:exchange": 1,
+ "word:terminal": 49
+ },
+ "totalMatches": 64,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v37-gate8-conversation-telemetry-proof-hooks.mjs",
+ "pathRoot": "v43-route-vocabulary-file:7309999d921dce6b8d3b259a",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v37-gate9-conversation-rehearsal.mjs",
+ "pathRoot": "v43-route-vocabulary-file:1317cdcf2457868e091d3ab4",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v38-gate1-inference-stack-roadmap-opening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a6b3b4fb3c4ae758e3661645",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v38-gate10-local-staging-inference-depository-search-rehearsal.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d36da4fc7d85afde58210f5a",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v38-gate2-inference-surface-inventory.mjs",
+ "pathRoot": "v43-route-vocabulary-file:9964e4ba67d9c5d2afb55920",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v38-gate5-inference-telemetry-disclosure-report.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a2f72b88a4addf2e10557546",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v38-gate6-read-need-comprehension-inference-hardening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:be7d2a4a5ebc09871412a909",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v38-gate7-read-fits-finding-search-embeddings.mjs",
+ "pathRoot": "v43-route-vocabulary-file:55eca2c43244e1b7a4bffd4b",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v38-gate8-assetpack-synthesis-economic-traceability.mjs",
+ "pathRoot": "v43-route-vocabulary-file:34b6f9048cc4e3f3b77bacb5",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v39-gate1-commercial-reading-roadmap-opening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:65d79c1efb56132c2a403642",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 11
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v39-gate10-local-staging-reading-rehearsal.mjs",
+ "pathRoot": "v43-route-vocabulary-file:7d661c1b692a8cf9b5a86492",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 10
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v39-gate11-promotion-readiness.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d1312d43335f5b439add7653",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v39-gate3-enterprise-reading-ux-state.mjs",
+ "pathRoot": "v43-route-vocabulary-file:cb61c8dbf38710dd26386354",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 7,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 9,
+ "word:terminal": 13
+ },
+ "totalMatches": 30,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v40-gate1-testing-roadmap-opening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:5ac97d0d6b4a98877f6a1df3",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v40-gate11-promotion-readiness.mjs",
+ "pathRoot": "v43-route-vocabulary-file:8824bedd926738fbdc115c75",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v40-gate5-reading-pipeline-integration.mjs",
+ "pathRoot": "v43-route-vocabulary-file:5aa939b7241413169f51ae84",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 18
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v40-gate6-conversation-terminal-integration.mjs",
+ "pathRoot": "v43-route-vocabulary-file:146f5b6d830c1f72abdc54fa",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 16,
+ "symbol:Reading": 1,
+ "word:terminal": 12
+ },
+ "totalMatches": 29,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v41-gate1-prompt-program-roadmap-opening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:b62da419110f029e2abfb128",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v41-gate2-promptpart-prompt-inventory.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d6de95796b519f92310bba8f",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3,
+ "symbol:Depositing": 2
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v41-gate4-reading-prompt-benchmark-baselines.mjs",
+ "pathRoot": "v43-route-vocabulary-file:f0607b5174bf67d6dd0a86f3",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 41
+ },
+ "totalMatches": 41,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v41-gate7-conversation-tool-interface-prompt-rewrite.mjs",
+ "pathRoot": "v43-route-vocabulary-file:b91ed2407b187e4ad341bfc4",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v41-gate8-prompt-program-benchmark-report.mjs",
+ "pathRoot": "v43-route-vocabulary-file:755e89b1bbb2b5f68d13f1f6",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs",
+ "pathRoot": "v43-route-vocabulary-file:8291ad63a3cbec4f823ce3fb",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3,
+ "symbol:Depositing": 2
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v42-gate2-depositing-shortest-path.mjs",
+ "pathRoot": "v43-route-vocabulary-file:54a58b79d575baa429404386",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 1,
+ "symbol:Depositing": 6,
+ "word:terminal": 7
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a3da36629b9b2994332b4ba2",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 9,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 11,
+ "word:terminal": 15
+ },
+ "totalMatches": 36,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs",
+ "pathRoot": "v43-route-vocabulary-file:e1b127e88e45612ca58af988",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 3,
+ "word:terminal": 3
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs",
+ "pathRoot": "v43-route-vocabulary-file:284bfa757a9c1c3769a41bbd",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 3,
+ "word:terminal": 5
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v42-gate6-settlement-rights-delivery.mjs",
+ "pathRoot": "v43-route-vocabulary-file:665ad8528bac6493069d0fca",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs",
+ "pathRoot": "v43-route-vocabulary-file:0daa3e0349051104817a2c17",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Depositing": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs",
+ "pathRoot": "v43-route-vocabulary-file:061c1af18600325db56eefd5",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 2,
+ "route:/read": 4,
+ "route:/deposit": 4,
+ "symbol:Packs": 2,
+ "symbol:Reading": 1,
+ "symbol:PackActivity": 1,
+ "symbol:DepositAssetPackOption": 1,
+ "word:self-referential": 1
+ },
+ "totalMatches": 16,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v43-gate2-route-vocabulary-inventory.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a753afa463080d17811f1439",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "route:/packs": 1,
+ "route:/read": 1,
+ "route:/deposit": 1,
+ "word:exchange": 1,
+ "word:terminal": 1,
+ "word:self-referential": 1
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v43-gate3-packs-activity-master-detail.mjs",
+ "pathRoot": "v43-route-vocabulary-file:419a85d3baeb962776c7fd74",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/packs": 3,
+ "symbol:Exchange": 1,
+ "symbol:Packs": 2,
+ "symbol:PackActivity": 1,
+ "word:exchange": 1
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v43-gate4-read-route-five-step-ux.mjs",
+ "pathRoot": "v43-route-vocabulary-file:da4ac3fe0a23b346fb67f8ec",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "route:/read": 4,
+ "symbol:Reading": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v43-gate5-deposit-route-options.mjs",
+ "pathRoot": "v43-route-vocabulary-file:2751bb11f135d14aa9547682",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "route:/deposit": 4,
+ "word:terminal": 2
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v43-gate6-deposit-policy-compensation.mjs",
+ "pathRoot": "v43-route-vocabulary-file:e502f4561c7b1e9768555bc1",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v43-gate7-deposit-option-admission.mjs",
+ "pathRoot": "v43-route-vocabulary-file:e663063815fd17742daad76f",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 3,
+ "route:/deposit": 3
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v43-gate8-route-ux-product-excellence.mjs",
+ "pathRoot": "v43-route-vocabulary-file:bc39e71d297fd3dadcd02abc",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 2,
+ "route:/read": 2,
+ "route:/deposit": 2
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs",
+ "pathRoot": "v43-route-vocabulary-file:f1f86658165e1e26bc098b5c",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 3,
+ "route:/read": 3,
+ "route:/deposit": 3
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/code-review/README.md",
+ "pathRoot": "v43-route-vocabulary-file:fef2886ffeed000a3327379c",
+ "categories": [
+ "doc",
+ "script"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-massive-prompt-parts.ts",
+ "pathRoot": "v43-route-vocabulary-file:0e76c577369ae46f56a24261",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v32-browser-accessibility-responsive-visual-proof.mjs",
+ "pathRoot": "v43-route-vocabulary-file:1dda7e627a4f029259cca30a",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 3,
+ "word:terminal": 6
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v32-interface-contract-regression-suites.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d404700e1c5c2048de40db74",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Exchange": 3,
+ "word:exchange": 3,
+ "word:terminal": 7
+ },
+ "totalMatches": 15,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v32-ledger-btd-settlement-failure-states.mjs",
+ "pathRoot": "v43-route-vocabulary-file:63840f3a3c92cf6e7b183d26",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v33-api-schema-compatibility-matrix.mjs",
+ "pathRoot": "v43-route-vocabulary-file:9d486abe857ab8b9a74d332b",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:exchange": 3,
+ "word:terminal": 3
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v33-chatgpt-app-action-contracts.mjs",
+ "pathRoot": "v43-route-vocabulary-file:3bb33b6576f6b6b5b80a6570",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v33-interface-authorization-policy.mjs",
+ "pathRoot": "v43-route-vocabulary-file:03bd80fc14f8fa5037377a49",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "word:terminal": 5
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v33-interface-consumer-ux-regression-proof.mjs",
+ "pathRoot": "v43-route-vocabulary-file:bf359815d7b67862b3949271",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 7
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v33-interface-contract-catalog.mjs",
+ "pathRoot": "v43-route-vocabulary-file:b2b33bc376c90dda89df30f1",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:exchange": 6,
+ "word:terminal": 4
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v33-interface-telemetry-proof-hooks.mjs",
+ "pathRoot": "v43-route-vocabulary-file:3c9dc7f394e1e6daf0376e12",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 7
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v33-read-license-assetpack-rights-contracts.mjs",
+ "pathRoot": "v43-route-vocabulary-file:fb0a31c0d5c1190a0c9d4cf8",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v34-local-staging-testnet-deployment-rehearsal.mjs",
+ "pathRoot": "v43-route-vocabulary-file:7be7a596dbbbf26469c18d5d",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 8
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v34-migration-cicd-approval-gates.mjs",
+ "pathRoot": "v43-route-vocabulary-file:fabb927b9d7f9668f04826f6",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v34-secret-rotation-boundary-operations.mjs",
+ "pathRoot": "v43-route-vocabulary-file:d8a31d873b4c0e4515639e82",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v36-exchange-activity-book.mjs",
+ "pathRoot": "v43-route-vocabulary-file:a40fdd95d8ee194947c5763a",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v36-exchange-dispute-repair-revenue-route.mjs",
+ "pathRoot": "v43-route-vocabulary-file:1e9e0f261a6aa710009453fd",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v36-exchange-intent-order-contracts.mjs",
+ "pathRoot": "v43-route-vocabulary-file:c297a36ff95df7b6f7d719e6",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v36-exchange-pricing-quote.mjs",
+ "pathRoot": "v43-route-vocabulary-file:8ecba5f8a22f81ee02dca7d3",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v36-exchange-rehearsal.mjs",
+ "pathRoot": "v43-route-vocabulary-file:8f5ffe43cb9ec321a9fdacf2",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v36-exchange-rights-transfer-review.mjs",
+ "pathRoot": "v43-route-vocabulary-file:099e0aa81f7400231843807d",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v36-exchange-settlement-reconciliation.mjs",
+ "pathRoot": "v43-route-vocabulary-file:f1aa6ee3df8e0785416a647a",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v36-exchange-ux-proof.mjs",
+ "pathRoot": "v43-route-vocabulary-file:c32b67390d68dad1d2ff3637",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v36-promotion-readiness-report.mjs",
+ "pathRoot": "v43-route-vocabulary-file:4829560ffa86b898064feea6",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "word:exchange": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v37-conversation-terminal-handoff.mjs",
+ "pathRoot": "v43-route-vocabulary-file:c6909ca4e9109ae4da527c23",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "word:terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v39-promotion-readiness-report.mjs",
+ "pathRoot": "v43-route-vocabulary-file:77c5c743693d5dd93c642877",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v40-conversation-terminal-integration.mjs",
+ "pathRoot": "v43-route-vocabulary-file:28b8341e6ca99b34757cc32c",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/generate-v41-reading-prompt-benchmark-baselines.mjs",
+ "pathRoot": "v43-route-vocabulary-file:8d2dc88646b5b1e5d347ef3a",
+ "categories": [
+ "script"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/prepare-bitcode-spec-family-promotion.mjs",
+ "pathRoot": "v43-route-vocabulary-file:c0b948392af39c517d7016ef",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 1,
+ "route:/read": 3,
+ "route:/deposit": 1,
+ "symbol:Exchange": 12,
+ "symbol:Terminal": 24,
+ "symbol:Packs": 1,
+ "symbol:Reading": 37,
+ "symbol:Depositing": 4,
+ "symbol:PackActivity": 2,
+ "word:exchange": 7,
+ "word:terminal": 2
+ },
+ "totalMatches": 94,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/promote-bitcode-canon.mjs",
+ "pathRoot": "v43-route-vocabulary-file:e969a2b88ac6b4ead37871ba",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Exchange": 6,
+ "symbol:Terminal": 8,
+ "symbol:Packs": 1,
+ "symbol:Reading": 12,
+ "symbol:Depositing": 1,
+ "word:exchange": 9,
+ "word:terminal": 13
+ },
+ "totalMatches": 51,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/rehearse-v40-local-staging-testnet.mjs",
+ "pathRoot": "v43-route-vocabulary-file:88571c33341a30221f1f0fdd",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/rehearse-v43-cross-route-product-flow.mjs",
+ "pathRoot": "v43-route-vocabulary-file:68edbff3c2693954b7b9daa7",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 3,
+ "route:/read": 3,
+ "route:/deposit": 3
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "scripts/v32-proof-coverage-matrix.mjs",
+ "pathRoot": "v43-route-vocabulary-file:983a1efc0c552126afdf62db",
+ "categories": [
+ "script",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "route:/read": 1,
+ "symbol:Terminal": 2,
+ "symbol:Reading": 1,
+ "word:terminal": 6
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "supabase/DATA_HEALTH.md",
+ "pathRoot": "v43-route-vocabulary-file:9485f626d6acd179fd0cb0f1",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 11,
+ "word:terminal": 1
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/ARCHITECTURE.md",
+ "pathRoot": "v43-route-vocabulary-file:4a399ac908531801a7bb9de4",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/README.md",
+ "pathRoot": "v43-route-vocabulary-file:04541d06dd7be1db69b23d3a",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 4,
+ "route:/terminal": 10,
+ "route:/read": 1,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 4,
+ "word:exchange": 4,
+ "word:terminal": 13
+ },
+ "totalMatches": 39,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingBtdShareMetricsSection.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3834760d340a81561571f5f5",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingCompetitorTableSection.tsx",
+ "pathRoot": "v43-route-vocabulary-file:36c0167e5538431319e7e7a3",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingComputeSection.tsx",
+ "pathRoot": "v43-route-vocabulary-file:60d924923e14875345dbc70c",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingFaqSection.tsx",
+ "pathRoot": "v43-route-vocabulary-file:a3c15474b6e4feea10881b2b",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:exchange": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingFeaturesGrid.tsx",
+ "pathRoot": "v43-route-vocabulary-file:e84a316799c9fcebf95fbc15",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 6
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingMarketplaceSection.tsx",
+ "pathRoot": "v43-route-vocabulary-file:95424f08be42fae9c9f15917",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingOperatorGuideCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:87aa5c7e28ed2010735d1d8b",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingPricingSection.tsx",
+ "pathRoot": "v43-route-vocabulary-file:5b434a026a2b9827f7866ae2",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 2,
+ "symbol:Exchange": 5,
+ "symbol:Terminal": 5,
+ "word:exchange": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingSetupForm.tsx",
+ "pathRoot": "v43-route-vocabulary-file:547eec567816769b10bb0dcc",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/MarketingWalkthroughSection.tsx",
+ "pathRoot": "v43-route-vocabulary-file:d43d1432bc03acff97af51dd",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/PublicDocsPageContent.tsx",
+ "pathRoot": "v43-route-vocabulary-file:6229a7e91a89dc17a2c25a3c",
+ "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
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/(root)/components/landing/marketing-landing-shared.tsx",
+ "pathRoot": "v43-route-vocabulary-file:40bcdb22d0623beab92379ea",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/ClientLayoutInner.tsx",
+ "pathRoot": "v43-route-vocabulary-file:d396d12d3a69bf9680192db5",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/activity/route.ts",
+ "pathRoot": "v43-route-vocabulary-file:9f0207ff00bece42ab29fccb",
+ "categories": [
+ "api",
+ "route",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/conversations/_shared.ts",
+ "pathRoot": "v43-route-vocabulary-file:30f21445a1e7d6f2b3743644",
+ "categories": [
+ "api",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 9,
+ "word:terminal": 1
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/deposits/route.ts",
+ "pathRoot": "v43-route-vocabulary-file:3f98c52dfd6a33985eb46972",
+ "categories": [
+ "api",
+ "route"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/executions/stream/route.ts",
+ "pathRoot": "v43-route-vocabulary-file:3594de60719262299a58fa30",
+ "categories": [
+ "api",
+ "route",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/make-bitcode-branch/route.ts",
+ "pathRoot": "v43-route-vocabulary-file:2c93a63aab5b68948d55d7b8",
+ "categories": [
+ "api",
+ "route"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/pipeline-harness/asset-pack/preflight.ts",
+ "pathRoot": "v43-route-vocabulary-file:3a921e6cfdde7fd865f987d4",
+ "categories": [
+ "api",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/pipeline-harness/asset-pack/runner.ts",
+ "pathRoot": "v43-route-vocabulary-file:ba99c89ff13ff5fb19487e6b",
+ "categories": [
+ "api",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/vcs/[provider]/oauth/route.ts",
+ "pathRoot": "v43-route-vocabulary-file:ab71b46afded881643ec9892",
+ "categories": [
+ "api",
+ "route"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/webhook/route.ts",
+ "pathRoot": "v43-route-vocabulary-file:1bda46d1a21ba70ea4bd83e6",
+ "categories": [
+ "api",
+ "route",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/api/webhook/verify.ts",
+ "pathRoot": "v43-route-vocabulary-file:9f77a6aed28dd7c0c8909ea5",
+ "categories": [
+ "api"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/auxillaries/README.md",
+ "pathRoot": "v43-route-vocabulary-file:87ee04f69ed393a377605b4d",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 4,
+ "word:terminal": 6
+ },
+ "totalMatches": 19,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/auxillaries/components/AuxillariesExternalsPane.tsx",
+ "pathRoot": "v43-route-vocabulary-file:7a12ebc1cda49d540f111856",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/auxillaries/components/AuxillariesInterfacesPane.tsx",
+ "pathRoot": "v43-route-vocabulary-file:bc8a06436d9f32679d6f827d",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 10,
+ "symbol:Reading": 2,
+ "word:terminal": 4
+ },
+ "totalMatches": 17,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/auxillaries/components/AuxillariesLoginPane.tsx",
+ "pathRoot": "v43-route-vocabulary-file:e9d58a9b4b693e3e347648ec",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/auxillaries/components/AuxillariesSurface.tsx",
+ "pathRoot": "v43-route-vocabulary-file:18c558b0a19e3bc78bb3b0aa",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/auxillaries/components/AuxillariesWalletPane.tsx",
+ "pathRoot": "v43-route-vocabulary-file:d812180527af41d67090b7dd",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 2,
+ "word:exchange": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/auxillaries/components/auxillary-pane-explainers.ts",
+ "pathRoot": "v43-route-vocabulary-file:5ef24bcd0cb4d27e1832612d",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 6,
+ "symbol:Reading": 2
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/auxillaries/components/auxillary-pane-meta.ts",
+ "pathRoot": "v43-route-vocabulary-file:ce6e275527be20a07eb51553",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 3,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/auxillaries/components/headers/AuxillariesInterfacesPaneHeader.tsx",
+ "pathRoot": "v43-route-vocabulary-file:5fe257603311c34a49f6d726",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/bitcode-browser-accessibility-responsive-proof.ts",
+ "pathRoot": "v43-route-vocabulary-file:02d4ebe62d243e9c0dcb109e",
+ "categories": [],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "symbol:Terminal": 1,
+ "word:terminal": 10
+ },
+ "totalMatches": 17,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/bitcode-browser-proof.ts",
+ "pathRoot": "v43-route-vocabulary-file:da7d29c95f7e6c054e890aae",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 3,
+ "route:/terminal": 6,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 2,
+ "symbol:Reading": 1,
+ "word:exchange": 7,
+ "word:terminal": 16
+ },
+ "totalMatches": 38,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/bitcode-ledger-storage-sync.ts",
+ "pathRoot": "v43-route-vocabulary-file:7bed94b7aae0c00c1f038169",
+ "categories": [],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/btd/[assetPackId]/page.tsx",
+ "pathRoot": "v43-route-vocabulary-file:f1115ca3ecb7c5f9d0676577",
+ "categories": [
+ "component",
+ "route"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 1,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/ConversationsRouteClient.tsx",
+ "pathRoot": "v43-route-vocabulary-file:d62c96beb3ee560fcbb9b30c",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 4,
+ "word:terminal": 2
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/README.md",
+ "pathRoot": "v43-route-vocabulary-file:ad3c8e82c49aff836c2576bc",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 20,
+ "symbol:Reading": 4,
+ "symbol:Depositing": 2,
+ "word:terminal": 6
+ },
+ "totalMatches": 39,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/components/ConversationTerminalHandoff.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3c37d4df728191b86357f18d",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 16,
+ "word:terminal": 10
+ },
+ "totalMatches": 26,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/components/ConversationsEnhancedRichTextInput.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3e5b0fa50424c179636dd110",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/components/ConversationsOverlay.tsx",
+ "pathRoot": "v43-route-vocabulary-file:29948565cb03b0768bb99d1a",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/components/hooks/useChatState.ts",
+ "pathRoot": "v43-route-vocabulary-file:f8e64ebe34242dc6c95c5ef6",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/conversation-rehearsal.ts",
+ "pathRoot": "v43-route-vocabulary-file:bcf67b8a2b81d9dfdb13565a",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/conversation-telemetry-proof-hooks.ts",
+ "pathRoot": "v43-route-vocabulary-file:434dfdba21b7bc5272491d2a",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/conversation-terminal-handoff.ts",
+ "pathRoot": "v43-route-vocabulary-file:1e16e13a6527cdf99b1fb802",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1,
+ "word:exchange": 3,
+ "word:terminal": 7
+ },
+ "totalMatches": 19,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/conversation-writing-workspace.ts",
+ "pathRoot": "v43-route-vocabulary-file:33e203e630bcd5d7dd638808",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/conversations/page.tsx",
+ "pathRoot": "v43-route-vocabulary-file:03fe2c46a2173955e8f73899",
+ "categories": [
+ "component",
+ "route"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/deposit/DepositPageClient.tsx",
+ "pathRoot": "v43-route-vocabulary-file:ed94c3944988d6918c0e7480",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 12,
+ "route:/packs": 1,
+ "symbol:Reading": 2,
+ "symbol:Depositing": 1,
+ "word:terminal": 23
+ },
+ "totalMatches": 39,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/deposit/deposit-route-model.ts",
+ "pathRoot": "v43-route-vocabulary-file:d2f45e9ac13289222bb7dd8d",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/deposit/page.tsx",
+ "pathRoot": "v43-route-vocabulary-file:7dc4793bff35d63c33a6320f",
+ "categories": [
+ "component",
+ "route"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 1,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/docs/DocsArticlePage.tsx",
+ "pathRoot": "v43-route-vocabulary-file:bd4396603351d2adaf835dd2",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 6,
+ "word:terminal": 9
+ },
+ "totalMatches": 17,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/docs/bitcode-docs-content.ts",
+ "pathRoot": "v43-route-vocabulary-file:703e60c4d9564463a1ffa241",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 3,
+ "route:/read": 4,
+ "symbol:Exchange": 77,
+ "symbol:Terminal": 102,
+ "symbol:Reading": 1,
+ "word:exchange": 5,
+ "word:terminal": 10
+ },
+ "totalMatches": 203,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/docs/page.tsx",
+ "pathRoot": "v43-route-vocabulary-file:9e286f0dfe1d6eefc3ca1002",
+ "categories": [
+ "component",
+ "route"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/edgetimes/EdgetimesPageContent.tsx",
+ "pathRoot": "v43-route-vocabulary-file:f66c20e2a3b3d6d3bb32999b",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/edgetimes/edgetimes-topology.ts",
+ "pathRoot": "v43-route-vocabulary-file:d41b57815fe4520342c4a80a",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/exchange/README.md",
+ "pathRoot": "v43-route-vocabulary-file:8dbcab387ed6a42f37d791cd",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 11,
+ "symbol:Terminal": 3,
+ "word:exchange": 13
+ },
+ "totalMatches": 28,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/executions/README.md",
+ "pathRoot": "v43-route-vocabulary-file:11cd51c6bcd76549498c6cfc",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/executions/components/ExecutionsPageClient.tsx",
+ "pathRoot": "v43-route-vocabulary-file:026240a4424f65e5b2a7d980",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 3,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/fill-gaps.tsx",
+ "pathRoot": "v43-route-vocabulary-file:6a611a1d6aac1619f3a30c9a",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/hero-client.tsx",
+ "pathRoot": "v43-route-vocabulary-file:7016ec9aeec42be02a4118eb",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:exchange": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/orbitals/README.md",
+ "pathRoot": "v43-route-vocabulary-file:9274b41153e7b6ea539609fa",
+ "categories": [
+ "doc"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 7,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 4,
+ "word:terminal": 7
+ },
+ "totalMatches": 19,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/orbitals/components/OrbitalsConnectsOrbitalEmailConnection.tsx",
+ "pathRoot": "v43-route-vocabulary-file:e8538b307e5a67fc525d0f3a",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/orbitals/components/OrbitalsConnectsOrbitalPhoneConnection.tsx",
+ "pathRoot": "v43-route-vocabulary-file:c0827063f7ba7cf7a51be553",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/orbitals/components/OrbitalsPhoneConnectSmart.tsx",
+ "pathRoot": "v43-route-vocabulary-file:2510037f220e99c7cfddacf0",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/packs/PacksPageClient.tsx",
+ "pathRoot": "v43-route-vocabulary-file:302a64482199b93281b6bc2d",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/packs": 1,
+ "symbol:Packs": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/packs/page.tsx",
+ "pathRoot": "v43-route-vocabulary-file:640704e340fc2092705c5b9b",
+ "categories": [
+ "component",
+ "route"
+ ],
+ "tokenCounts": {
+ "route:/packs": 1,
+ "symbol:Packs": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/page.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3d10d6f576bdfd7770438741",
+ "categories": [
+ "component",
+ "route"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/read/ReadPageClient.tsx",
+ "pathRoot": "v43-route-vocabulary-file:1f818574d002de39986ecf9d",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 11,
+ "route:/packs": 1,
+ "route:/read": 1,
+ "symbol:Reading": 11,
+ "word:terminal": 24
+ },
+ "totalMatches": 48,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/read/page.tsx",
+ "pathRoot": "v43-route-vocabulary-file:f1683a164e5711d6c44ca7bb",
+ "categories": [
+ "component",
+ "route"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Reading": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/read/read-route-model.ts",
+ "pathRoot": "v43-route-vocabulary-file:7ed5cb28ad6ce5145fde430c",
+ "categories": [],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "route:/read": 3,
+ "word:terminal": 2
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/DemonstrationWitnessHost.tsx",
+ "pathRoot": "v43-route-vocabulary-file:f8afe98c7e64ad58029103f7",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/README.md",
+ "pathRoot": "v43-route-vocabulary-file:e4e31c52d53799c043ca166d",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "route:/read": 1,
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 44,
+ "symbol:Reading": 7,
+ "word:terminal": 14
+ },
+ "totalMatches": 74,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalActionWorkbenchCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:b692c16a873bdca457acce8e",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalClosureControlDeck.tsx",
+ "pathRoot": "v43-route-vocabulary-file:0aaefaec568e851426efc8ac",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "word:terminal": 8
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalClosureNativeSections.tsx",
+ "pathRoot": "v43-route-vocabulary-file:08dc7dc20aa31534776f6e68",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalCommandDeck.tsx",
+ "pathRoot": "v43-route-vocabulary-file:992dcf46df42ff9db093f877",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/read": 1,
+ "symbol:Terminal": 4,
+ "word:terminal": 9
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalCoreNativeSections.tsx",
+ "pathRoot": "v43-route-vocabulary-file:abc360f8ad044e607ee57dad",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Depositing": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalDepositComposer.tsx",
+ "pathRoot": "v43-route-vocabulary-file:f4bef39aa70cd164d97377ca",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "word:terminal": 6
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalDepositReadWorkbench.tsx",
+ "pathRoot": "v43-route-vocabulary-file:69b483abf7a72437d78aaad1",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3,
+ "word:terminal": 10
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalExperienceFrame.tsx",
+ "pathRoot": "v43-route-vocabulary-file:8fa8db42e7e1cb558eb3e16d",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalExternalInterfacingPanel.tsx",
+ "pathRoot": "v43-route-vocabulary-file:c2d0996c5ed522d40fde3357",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 6
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalFloatingDebugWidget.tsx",
+ "pathRoot": "v43-route-vocabulary-file:94b3ccae4bc83ef8b0e93e1f",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalFlowGuideCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:bc1e7274bbbc4869e660b1d3",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalLiveSummaryStrip.tsx",
+ "pathRoot": "v43-route-vocabulary-file:be6d0109cd926133de8d16db",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalMockTransactionDetails.tsx",
+ "pathRoot": "v43-route-vocabulary-file:438b3bb0e220f849ef671d41",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalMvpMap.tsx",
+ "pathRoot": "v43-route-vocabulary-file:cf3d2fb1d727d8810d63f862",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalOperationalHealthPanel.tsx",
+ "pathRoot": "v43-route-vocabulary-file:ccc83f24c8cebda6e48197ad",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalPageClient.tsx",
+ "pathRoot": "v43-route-vocabulary-file:a9c99f865a298ffb22056e24",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 6,
+ "word:terminal": 14
+ },
+ "totalMatches": 21,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalPreservedShellSurface.tsx",
+ "pathRoot": "v43-route-vocabulary-file:95483e0a2fb79f611e4d7bc4",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "word:terminal": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalReadScenarioPanel.tsx",
+ "pathRoot": "v43-route-vocabulary-file:4b0e11c22c9298c06e394c18",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 2,
+ "symbol:Reading": 2,
+ "word:terminal": 8
+ },
+ "totalMatches": 15,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalRepositoryContextPanel.tsx",
+ "pathRoot": "v43-route-vocabulary-file:eb47108132ca63fef878665b",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 3,
+ "word:terminal": 5
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalSectionAtlas.tsx",
+ "pathRoot": "v43-route-vocabulary-file:d3dc34707f3fde88fcd89208",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "word:terminal": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalSupplySelectionPanel.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3cf63c92f5359800166cbfeb",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Depositing": 1,
+ "word:terminal": 7
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionActivitySurface.tsx",
+ "pathRoot": "v43-route-vocabulary-file:e7497ac7d60a3685438f48d4",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 6
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionClosureCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:65fffe7778e3cef09a530d52",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionDetailActionBar.tsx",
+ "pathRoot": "v43-route-vocabulary-file:e33e3ceea31ec0a611353581",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 1,
+ "word:exchange": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionDetailHero.tsx",
+ "pathRoot": "v43-route-vocabulary-file:b07ab39e34b4506a18398757",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2,
+ "word:exchange": 3,
+ "word:terminal": 4
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionDetailSurface.tsx",
+ "pathRoot": "v43-route-vocabulary-file:ea819809a2aaa821ef417cd2",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:exchange": 3,
+ "word:terminal": 21
+ },
+ "totalMatches": 26,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionHistoryCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:e9dad45c598eb4f9f916bf55",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionJournalReconciliationCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3a8291acbd1677361d4891d2",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionOrganizationAuthorityCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:8de692a74745d93fc5c859f6",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionProofsCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:2ccd1e5c0d45471f28419c87",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionWalletBtcCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:8d5e0ec533f2e7f86849d979",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionWorkspace.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3d78fabb99011308353ee0d3",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 5,
+ "symbol:Terminal": 13,
+ "word:exchange": 2,
+ "word:terminal": 14
+ },
+ "totalMatches": 34,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalTransactionsTable.tsx",
+ "pathRoot": "v43-route-vocabulary-file:e71221cc2895a3dcc4c9c6b6",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/TerminalWorkspaceRail.tsx",
+ "pathRoot": "v43-route-vocabulary-file:d2117f168a5b76f54b3eb8d1",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/bitcode-transaction-readiness.ts",
+ "pathRoot": "v43-route-vocabulary-file:f48ca17bba07965fa18142e3",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Terminal": 5
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/demonstration-witness-runtime.ts",
+ "pathRoot": "v43-route-vocabulary-file:9656ae00c2f9b340c5f5c4b2",
+ "categories": [],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/page.tsx",
+ "pathRoot": "v43-route-vocabulary-file:70fd60e94565060fe3faaa03",
+ "categories": [
+ "component",
+ "route"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-activity-history.ts",
+ "pathRoot": "v43-route-vocabulary-file:ef13c3387cf3d95fa8690fc2",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 18
+ },
+ "totalMatches": 20,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-closure-controls.ts",
+ "pathRoot": "v43-route-vocabulary-file:5226a4ba3fa41bf1de6964df",
+ "categories": [],
+ "tokenCounts": {
+ "route:/read": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-closure-state.ts",
+ "pathRoot": "v43-route-vocabulary-file:a8cfa670779646311b7f6555",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-command-presentation.ts",
+ "pathRoot": "v43-route-vocabulary-file:0252fa6dd5d6d14c688c919e",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-commercial-launch-readiness.ts",
+ "pathRoot": "v43-route-vocabulary-file:fba14b826659de542a4abd05",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 9,
+ "symbol:Exchange": 6,
+ "symbol:Terminal": 5,
+ "word:exchange": 1,
+ "word:terminal": 15
+ },
+ "totalMatches": 36,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-core-surface.ts",
+ "pathRoot": "v43-route-vocabulary-file:85c8d45586c951ae16fa6090",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-deposit-read-workbench.ts",
+ "pathRoot": "v43-route-vocabulary-file:1ebd7ba42107e759c022f8f6",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-enterprise-reading-ux-state.ts",
+ "pathRoot": "v43-route-vocabulary-file:a378af5edaf9522d2acf8dd7",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Reading": 2,
+ "word:terminal": 4
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-experience-architecture.ts",
+ "pathRoot": "v43-route-vocabulary-file:4c08cbff68bf2c78e25ed573",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 12,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 5,
+ "word:terminal": 21
+ },
+ "totalMatches": 39,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-flow-guide.ts",
+ "pathRoot": "v43-route-vocabulary-file:42014dd64d46d31a0da32720",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Terminal": 3,
+ "symbol:Depositing": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-interface-integration-regression.ts",
+ "pathRoot": "v43-route-vocabulary-file:a39e8b7707eedd8320932cce",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 1,
+ "word:exchange": 2,
+ "word:terminal": 11
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-journal-reconciliation.ts",
+ "pathRoot": "v43-route-vocabulary-file:8c816706372944e70f71aeaa",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 6,
+ "word:terminal": 3
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-live-summary.ts",
+ "pathRoot": "v43-route-vocabulary-file:96e256d491c3209ae479df78",
+ "categories": [],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-operator-copy.ts",
+ "pathRoot": "v43-route-vocabulary-file:db3610260c4db3ae1c62f57c",
+ "categories": [],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-operator-explainers.ts",
+ "pathRoot": "v43-route-vocabulary-file:a3fcde8e431007c671847813",
+ "categories": [],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-organization-authority.ts",
+ "pathRoot": "v43-route-vocabulary-file:53305aa285004d337fbf7935",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-pipeline-harness-client.ts",
+ "pathRoot": "v43-route-vocabulary-file:333076183da421e7f6da8286",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-protocol-projection.ts",
+ "pathRoot": "v43-route-vocabulary-file:004c5bd6e5efcd9d1058c1a1",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 8
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-routes.ts",
+ "pathRoot": "v43-route-vocabulary-file:1d28f9d658ca0abc40e794f9",
+ "categories": [],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "route:/packs": 1,
+ "route:/read": 1,
+ "route:/deposit": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-run-data.ts",
+ "pathRoot": "v43-route-vocabulary-file:b50a3d9dc691f0ac2aa3c582",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 4,
+ "word:terminal": 4
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-section-atlas.ts",
+ "pathRoot": "v43-route-vocabulary-file:d8637478c8a2bf4ab3fd0cd1",
+ "categories": [],
+ "tokenCounts": {
+ "word:terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-shell-sections.ts",
+ "pathRoot": "v43-route-vocabulary-file:1f2dc0ca78f3b2f3c8dd53e3",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-supply-selection.ts",
+ "pathRoot": "v43-route-vocabulary-file:bb2826625cf06be33f7b066e",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-transaction-detail-snapshot.ts",
+ "pathRoot": "v43-route-vocabulary-file:4fd35e4dee6f91bf9dd9966d",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 4
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-transaction-detail.ts",
+ "pathRoot": "v43-route-vocabulary-file:006d0fbceb56f3b43262b077",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-transaction-query.ts",
+ "pathRoot": "v43-route-vocabulary-file:a7adf7c8bfe005a8ab716663",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:exchange": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-transaction-read-model.ts",
+ "pathRoot": "v43-route-vocabulary-file:c4fc536d9c62061bf1b8e18d",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-transaction-readiness-source.ts",
+ "pathRoot": "v43-route-vocabulary-file:f2d1df6f00601e46b9f8f952",
+ "categories": [],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-transaction-source.ts",
+ "pathRoot": "v43-route-vocabulary-file:415b5d00ca4901e7dd6ee08f",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-transactions.ts",
+ "pathRoot": "v43-route-vocabulary-file:2a28f508a2a4bd6f0665f1cc",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-ux-browser-proof.ts",
+ "pathRoot": "v43-route-vocabulary-file:cb821290b34b462e314976a6",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 2,
+ "word:terminal": 12
+ },
+ "totalMatches": 17,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-wallet-btc-operation.ts",
+ "pathRoot": "v43-route-vocabulary-file:05e5c8521c8144344b857f43",
+ "categories": [],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-workspace-copy.ts",
+ "pathRoot": "v43-route-vocabulary-file:b58de298aa32b62fe8bd475b",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 6
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/terminal-workspace-explainers.ts",
+ "pathRoot": "v43-route-vocabulary-file:ae563386dbd58c20f6711e99",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 69,
+ "symbol:Exchange": 7,
+ "symbol:Terminal": 29,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 11,
+ "word:terminal": 83
+ },
+ "totalMatches": 200,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/terminal/use-demonstration-witness-shell-mount.ts",
+ "pathRoot": "v43-route-vocabulary-file:f88020f9d47e50791f9fa697",
+ "categories": [],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/app/tps/README.md",
+ "pathRoot": "v43-route-vocabulary-file:1078aaf7d5752bc992e00d01",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/README.md",
+ "pathRoot": "v43-route-vocabulary-file:8b3d53f452922c8ea0b51129",
+ "categories": [
+ "component",
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "symbol:Exchange": 1,
+ "word:terminal": 6
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/auth/LoginForm.tsx",
+ "pathRoot": "v43-route-vocabulary-file:8116b21c7cc3da8a347799c1",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/btd/BTDPrices.tsx",
+ "pathRoot": "v43-route-vocabulary-file:c339f2d8dbaa2061e027c131",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 7,
+ "symbol:Terminal": 4,
+ "word:exchange": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/btd/FlexibleBtdSelector.tsx",
+ "pathRoot": "v43-route-vocabulary-file:35bc10c23c19a8c2369a2947",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/btd/btd-tracker.tsx",
+ "pathRoot": "v43-route-vocabulary-file:777ea2b7d57d2f94f878eeaf",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/execution/BitcodeTransactionsFilterBar.tsx",
+ "pathRoot": "v43-route-vocabulary-file:5f2190bf70110aead04f6c6d",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/execution/BitcodeTransactionsTable.tsx",
+ "pathRoot": "v43-route-vocabulary-file:6ae448961d1a0b820008159f",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 3,
+ "word:exchange": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/execution/README.md",
+ "pathRoot": "v43-route-vocabulary-file:b97af42ea0cbef4098b9bd72",
+ "categories": [
+ "component",
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 2,
+ "word:terminal": 4
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/execution/bitcode-transaction-explainers.ts",
+ "pathRoot": "v43-route-vocabulary-file:a24794c3346fb92b640498cc",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 2,
+ "word:terminal": 1
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/layout/NavBrand.tsx",
+ "pathRoot": "v43-route-vocabulary-file:25ec699ba9021ea6a6d5fe32",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/layout/bitcode-public-copy.ts",
+ "pathRoot": "v43-route-vocabulary-file:866d05977c5078e899818203",
+ "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
+ },
+ "totalMatches": 20,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/layout/bitcode-public-explainers.ts",
+ "pathRoot": "v43-route-vocabulary-file:7b442239cdecb11cef125c3d",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 6,
+ "symbol:Packs": 3,
+ "symbol:Reading": 3
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/layout/footer.tsx",
+ "pathRoot": "v43-route-vocabulary-file:32f0b2f78b5e5b781eda51cf",
+ "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
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/layout/nav.tsx",
+ "pathRoot": "v43-route-vocabulary-file:41d940b07baf6ac542ae7ab3",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "route:/terminal": 4,
+ "route:/packs": 3,
+ "route:/read": 1,
+ "route:/deposit": 1,
+ "symbol:Terminal": 1,
+ "symbol:Packs": 1,
+ "symbol:Reading": 1,
+ "word:exchange": 4,
+ "word:terminal": 8
+ },
+ "totalMatches": 26,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/layout/workspace-surface.ts",
+ "pathRoot": "v43-route-vocabulary-file:6bd2183c990da0605cd50970",
+ "categories": [
+ "component"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "route:/packs": 1,
+ "route:/read": 1,
+ "route:/deposit": 1,
+ "word:exchange": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/vcs/VCSConnectionCard.tsx",
+ "pathRoot": "v43-route-vocabulary-file:cac15bdd0da7457452cad2c7",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/components/base/bitcode/vcs/VCSIntegrationPanel.tsx",
+ "pathRoot": "v43-route-vocabulary-file:856da0b2b0fd48b52641e669",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/config/integrations.ts",
+ "pathRoot": "v43-route-vocabulary-file:b8a442cecc84883605b277ed",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/hooks/useVCSData.ts",
+ "pathRoot": "v43-route-vocabulary-file:e5c7e0e9c6e4637b94df20c6",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/jest.config.cjs",
+ "pathRoot": "v43-route-vocabulary-file:f8d0d39295ef748ac1cd8fe6",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/lib/mock-review-mode.ts",
+ "pathRoot": "v43-route-vocabulary-file:e68f9f5520a7eaf537f2f09a",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2,
+ "symbol:Terminal": 2,
+ "word:exchange": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/lib/search.ts",
+ "pathRoot": "v43-route-vocabulary-file:4f0dc05fd9f7f8079e92683d",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Exchange": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/middleware/authentication.ts",
+ "pathRoot": "v43-route-vocabulary-file:c0e8018ef3859e578484a8a3",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/middleware/security-headers.ts",
+ "pathRoot": "v43-route-vocabulary-file:c0d668512ff1e5c10f332890",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/mocking/README.md",
+ "pathRoot": "v43-route-vocabulary-file:33d5d24108d333960bd5c4bd",
+ "categories": [
+ "doc",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/mocking/generators/ComprehensiveMockDataGenerators.js",
+ "pathRoot": "v43-route-vocabulary-file:726be7bb75eeb39ec27a7563",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/mocking/generators/ComprehensiveMockDataGenerators.ts",
+ "pathRoot": "v43-route-vocabulary-file:d1ae7e0385f80a602d63f04c",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/mocking/scripts/setup-mock-system.js",
+ "pathRoot": "v43-route-vocabulary-file:7c01429b8188debf67f94cc9",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/package.json",
+ "pathRoot": "v43-route-vocabulary-file:e49ba9393ac580108a985277",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/playwright.config.ts",
+ "pathRoot": "v43-route-vocabulary-file:0bda103cbbf813dbfdce269c",
+ "categories": [],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/prompts/bitcode-terminal-system-prompt.ts",
+ "pathRoot": "v43-route-vocabulary-file:c092810057ef8b8158bd6ce5",
+ "categories": [],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/scripts/sync-asset-pack-evidence-embeddings.ts",
+ "pathRoot": "v43-route-vocabulary-file:da125648f59839a9a369d00a",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/stories/PatternMemory.stories.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3da040a1748f5e867a45639a",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/stories/conversations/ConversationInterface.stories.tsx",
+ "pathRoot": "v43-route-vocabulary-file:d2248a1dcac9fa0317b95cba",
+ "categories": [
+ "component",
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/styles/conversations-fullscreen.css",
+ "pathRoot": "v43-route-vocabulary-file:7ab43c18a129dff0d7ca87d0",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 36
+ },
+ "totalMatches": 36,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/activityRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:6a2ccd1c1872a3cc89b7c1ff",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/auxillariesGithubConnectionRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:05cb7d64d3a59a924860bca7",
+ "categories": [
+ "api",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/clientErrorRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:c3850d1732af797231fde3e9",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/conversationBranchRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:9c61c0da65db6a67e95c1821",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/conversationReadingInterfaceParity.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:35673f5b87dc34e12ed333ac",
+ "categories": [
+ "api",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/conversationTelemetryProofHooks.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:f169e547c12a11e4d56be6f9",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/conversationThreadStreamRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:fa91d047a6a604be7ecd1876",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/conversationsRouteRead.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:26ab1317e288876effca1119",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/executionsHistoryRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:5461aad5cca9f504afb9b1e0",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 5
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/executionsHistoryRunRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:81671ef0f7e4ae9097f60616",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/executionsHistoryWriteReadParity.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:48f1121ecb69310d712fb06b",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 8,
+ "route:/read": 1,
+ "word:terminal": 18
+ },
+ "totalMatches": 27,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/externalRealizationRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:19f454d6e05d4d485eaefd27",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/pipelineHarnessRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:19a9b8e2e12feffb31d2f2e0",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/readReviewProtocolParity.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:0cccd2ae625748ef474ae8ad",
+ "categories": [
+ "api",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "word:terminal": 4
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/readReviewRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:14655a1afb58a6c15097cb4a",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 7
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/userBtdRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:5fc09d50579c9cb326e112cd",
+ "categories": [
+ "api",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/vcsGithubCallbackRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:a9f8297b769f5bd770272ccd",
+ "categories": [
+ "api",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:exchange": 3,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/vcsRepositoriesInventoryParity.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:6ebcf5e8ce4e756239e3bc15",
+ "categories": [
+ "api",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/vcsRoutes.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:69646457864a2a01847fe490",
+ "categories": [
+ "api",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/api/walletOAuthRoutes.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:268bc274ee63c6b5c5432b97",
+ "categories": [
+ "api",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/auxillariesProvider.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:30b8feca3e164313cb4f24e5",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 3,
+ "word:terminal": 2
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/auxillariesWalletPane.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:cee3412312e89e6076455355",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/bitcodeBrowserAccessibilityResponsiveProof.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:52968c051c39418fe845ce4e",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/bitcodeBrowserProof.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:f6ebd3b586a3f466daf263c0",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "word:exchange": 5,
+ "word:terminal": 8
+ },
+ "totalMatches": 16,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/bitcodeDetailPanel.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:82c9498d87b2bac792c62271",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 6
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/bitcodeInlineExplainer.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:5f5c7d0fcb2ad2fa510f6d57",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/bitcodeTransactionReadiness.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:ed51b975e067ecabcd3605a0",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/bitcodeTransactionsFilterBar.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3a7a82f7fc7e01dde8a642a5",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/btdTrackerLoading.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:5d2b3e4df661c8ce4e0f1742",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/conversationMockShared.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:b2bb5abc18fae9904e0cec35",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/conversationRehearsalPanel.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:9ddfb04bf795a942e72c8190",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/conversationTerminalHandoff.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:7d5d7da044ca0fd2fcb2fbcf",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 6,
+ "symbol:Reading": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/conversationTerminalIntegrationCoverage.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:fd7a5fcb09ec04a1e598b9d3",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 3,
+ "symbol:Reading": 1,
+ "word:exchange": 1,
+ "word:terminal": 8
+ },
+ "totalMatches": 16,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/conversationWritingWorkspace.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:e58602b4a94874d48e9bea51",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/conversationsOverlayMapping.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:e185ce0f38c3113648d6e1c5",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/conversationsRouteClient.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:2e2bede7b3431d1986be8c61",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 3,
+ "word:terminal": 3
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/demonstrationWitnessMount.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:184b265e050b6a7ffbf5093b",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "word:terminal": 6
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/demonstrationWitnessScopedStylesRoute.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:ad0097bfcaac1afac2231822",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/depositPageClient.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:ee0f7a47ef58e682944fa540",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "route:/deposit": 3,
+ "symbol:Depositing": 1,
+ "word:terminal": 6
+ },
+ "totalMatches": 14,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/depositRouteModel.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:ac3d550f04ed47a3919ade98",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/deposit": 5
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/bitcode-browser-accessibility-responsive-proof.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:53de966306b0735788b596a0",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 5,
+ "symbol:Terminal": 4,
+ "word:terminal": 11
+ },
+ "totalMatches": 20,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/bitcode-browser-proof.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:500e247b45abac1e6b591ad7",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 3,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 6,
+ "symbol:Reading": 2,
+ "word:exchange": 1,
+ "word:terminal": 12
+ },
+ "totalMatches": 28,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/commercial-mvp.auxillaries.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:ff6ef1a5dddd3dd8b8b96210",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 5,
+ "word:terminal": 2
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/commercial-mvp.btd-exchange.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:4cbe968c93b7b6c903b13089",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 3,
+ "symbol:Exchange": 15,
+ "word:exchange": 5
+ },
+ "totalMatches": 23,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/commercial-mvp.conversations-docs.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:aed490453efda34eec5aa7e0",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "symbol:Exchange": 4,
+ "symbol:Terminal": 14,
+ "word:exchange": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 25,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/commercial-mvp.helpers.ts",
+ "pathRoot": "v43-route-vocabulary-file:66439c982a08af9e6bb03d70",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 4,
+ "symbol:Reading": 1,
+ "word:exchange": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/commercial-mvp.responsive.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:2e353d48faef12a79441dff0",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 3,
+ "word:terminal": 2
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/commercial-mvp.routes.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:a794400861365d54bb90bad3",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 9,
+ "word:terminal": 5
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/commercial-mvp.terminal-ux.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:9d9747349860f80279e843bb",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 8,
+ "word:terminal": 15
+ },
+ "totalMatches": 27,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/commercial-mvp.terminal.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:7b4c4225ae2c0d185d0b4e59",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 5,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 13,
+ "symbol:Reading": 1,
+ "symbol:Depositing": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 26,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/login.visual.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:d85ce985ca7571f544269ce5",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/sso.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:bd71336f9130afc33a024866",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "word:exchange": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/e2e/terminal.flow.spec.ts",
+ "pathRoot": "v43-route-vocabulary-file:e53c83b3760dc8d665fc69a6",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 7,
+ "symbol:Terminal": 5,
+ "word:exchange": 1,
+ "word:terminal": 16
+ },
+ "totalMatches": 29,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/edgetimesPageContent.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:bfdd95badf9b585567351dd0",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/exchangeTerminalHandoff.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:ee2ced671a4e48853e0551cd",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "route:/packs": 2,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "symbol:Packs": 3,
+ "word:exchange": 5,
+ "word:terminal": 10
+ },
+ "totalMatches": 28,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/features.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:8f00c84afd873e4169d85970",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/footerPublicShell.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:4bb01dec1d904968fa054772",
+ "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
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/marketingLandingPage.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:df81318f9d51cb8a9316408a",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "route:/read": 1,
+ "symbol:Exchange": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/marketingOperatorGuideCard.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:5d39a04d4ef1ff3819f7729a",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 3,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/navBrand.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:909e5a7aa8fcea65cf7d3436",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 3
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/navPublicShell.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:4ae37760fb6dd9e3479b1d29",
+ "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
+ },
+ "totalMatches": 25,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/navWorkspaceChrome.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:854d922b08790e576f3584c6",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "route:/packs": 2,
+ "symbol:Terminal": 4,
+ "symbol:Packs": 2,
+ "symbol:Reading": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 15,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/orbitalPaneMeta.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:fe890a947c11a8962e5e950a",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/orbitalsInterfacesPane.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:581540a53c6f859ee76e9ede",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 2,
+ "route:/terminal": 1,
+ "symbol:Terminal": 2,
+ "word:exchange": 6,
+ "word:terminal": 4
+ },
+ "totalMatches": 15,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/orbitalsLoginPane.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:63d4e9dc585da5ae99a3bd43",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "word:terminal": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/packActivityModel.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:500a56f182923cdbae356edb",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:PackActivity": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/packsPageClient.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:b94555d7fedae1f7b7efc193",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/packs": 4,
+ "symbol:Packs": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/pipelineExecutionLogHeader.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3ed6012c0c5224091ce533b6",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 1
+ },
+ "totalMatches": 1,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/profileStep.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:2ccfa52fe59d687e5823ef70",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "word:terminal": 4
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/publicDocsPageContent.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:04631a9a1ca9229166dea6e2",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/exchange": 1,
+ "route:/terminal": 1,
+ "symbol:Exchange": 3,
+ "symbol:Terminal": 4,
+ "word:exchange": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/readPageClient.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:fb00863fdbde452acfa6d023",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "route:/read": 2,
+ "symbol:Reading": 5,
+ "word:terminal": 7
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/readRouteModel.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:fb15e6d162f430fc0e8c9868",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/read": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/readingOperationalTelemetryPipelineLog.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:5e6e6c7c081645e43b0d5a4a",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Reading": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalActionWorkbenchCard.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:23ce45fae4dcaeef4b6babfc",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalActivityHistory.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:bd649f423b55bd1c285405e6",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 19,
+ "symbol:Terminal": 2,
+ "symbol:Reading": 1,
+ "word:terminal": 39
+ },
+ "totalMatches": 61,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalClosureControlDeck.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:a1b6049237666bca66570cf2",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 9,
+ "word:terminal": 16
+ },
+ "totalMatches": 25,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalClosureControls.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:19dd9ddb6f3665cceb758cd3",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "route:/read": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalClosureState.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:d7c4073e867b729120dde967",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalCommandDeck.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:dcc9dbc9d8210d6204b68128",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 11,
+ "word:terminal": 19
+ },
+ "totalMatches": 30,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalCommandPresentation.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:68dbfeeb20fbbe26bdc10b62",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 1,
+ "word:terminal": 4
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalCommandState.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:b83bab1a6d64bd830c8ee355",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalCommercialLaunchReadiness.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:bc161f68a853b8d378af2277",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:exchange": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalCoreNativeSections.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:95b5e84a08ce7b372c3fd240",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Depositing": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalCoreSurface.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:4e38b1aa4d894bc7cd9a44dc",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Reading": 2,
+ "symbol:Depositing": 4,
+ "word:terminal": 2
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalDepositComposer.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:59ad7a9268c62c7fcab24337",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalDepositComposerCard.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:e536abbdb3c4820e74d8ebd3",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 7,
+ "word:terminal": 12
+ },
+ "totalMatches": 19,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalDepositReadWorkbench.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:abacb113608e987f570e2505",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Terminal": 1,
+ "symbol:Reading": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalEnterpriseReadingUxState.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:3d0abd662cb0ef038d6dca88",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Reading": 2,
+ "word:terminal": 4
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalExperienceArchitecture.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:17eb74f8160952e62b2c7f00",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 2,
+ "word:terminal": 6
+ },
+ "totalMatches": 12,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalExternalInterfacingPanel.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:282333991ac2c45a925a581b",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "word:terminal": 6
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalExternalRuntime.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:84d3f60bf821535bed09e555",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalFloatingDebugWidget.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:32338b47920e449a7c340ac5",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalFlowGuide.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:3d3fd4f959e349c43f2b6a0e",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "word:terminal": 5
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalFlowGuideCard.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:0e2cc041f97fd6ce94e96882",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalInterfaceIntegrationRegression.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:ed1c88949ef2b07023288fa1",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalJournalReconciliation.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:1f7c91f8943b05c5fd64dd98",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 7
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalLiveSummary.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:84363e552bd994fc999cc9d8",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 4,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalLiveSummaryStrip.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:78f0ad0d9c319db29f2285a3",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 1,
+ "word:terminal": 6
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalOperationalHealthPanel.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:480a4c0e515bb90ed39f44a2",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 5
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalOperatorCard.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:ddf918a64085d1e173b6059d",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 1
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalOrganizationAuthority.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:cb4fefe6ea371b76dfe54d32",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 6,
+ "word:terminal": 27
+ },
+ "totalMatches": 36,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalPageShell.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:aaa1a26c75549108000d4d22",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalPipelineHarnessClient.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:28f59a166624ccebd5eac952",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 1,
+ "word:terminal": 9
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalPreservedShellSurface.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:de410c28d6d938aeb5451959",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "word:terminal": 4
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalProtocolProjection.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:224972944d9516d9504e24f6",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 16,
+ "word:terminal": 24
+ },
+ "totalMatches": 40,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalReadScenarios.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:c0904753c63bb1d5cd16dbca",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalRepositoryContext.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:98d6e3eca357b728e87c4c36",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 3,
+ "word:terminal": 2
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalRepositoryContextPanel.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:34e1c174beaf6f6c3a3ee899",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 5,
+ "symbol:Exchange": 2,
+ "word:terminal": 6
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalSectionAtlas.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:5cfabbd8f814fe634100ed55",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Reading": 2,
+ "symbol:Depositing": 4,
+ "word:terminal": 2
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalShellBridge.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:3cabf3268dfb9513f89b3c1b",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "word:terminal": 4
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalSupplySelection.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:bc3565fc610e9f44c7e4994c",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalSupplySelectionPanel.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:1738237f925689eca9c93383",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 5,
+ "word:terminal": 8
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalSurfaceCopy.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:69e196652119c62a253495aa",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Exchange": 1,
+ "symbol:Terminal": 9,
+ "word:terminal": 5
+ },
+ "totalMatches": 18,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalSurfaceSection.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:c1af33d0e93e8d1e6ef5ff89",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 3,
+ "word:terminal": 1
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactionActivity.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:6965444cc55ef395fdab391e",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 1,
+ "word:terminal": 3
+ },
+ "totalMatches": 5,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactionActivitySurface.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:2785a7066e4bbf3a1d8aaf7e",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "word:terminal": 5
+ },
+ "totalMatches": 8,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactionDetail.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:5cdfa63e14c7488f5b99df32",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "symbol:Terminal": 1,
+ "word:terminal": 10
+ },
+ "totalMatches": 15,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactionDetailCards.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:7169a020ba44d4e442401eec",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 6,
+ "symbol:Terminal": 1,
+ "word:terminal": 6
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactionDetailSnapshot.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:39737fcd04d500beba5089df",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "word:terminal": 12
+ },
+ "totalMatches": 15,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactionQuery.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:38a3343c4ebd5de2b2c2b616",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "symbol:Terminal": 2,
+ "symbol:Reading": 1,
+ "word:terminal": 7
+ },
+ "totalMatches": 11,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactionReadModel.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:685b8965132c3620372c151e",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "route:/packs": 1,
+ "word:terminal": 8
+ },
+ "totalMatches": 13,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactionReadinessSource.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:7aa20f49b09b360d142ad5a9",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 1,
+ "word:terminal": 2
+ },
+ "totalMatches": 3,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactionSource.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:772fc054a9e02798165ff5e9",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 7
+ },
+ "totalMatches": 9,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalTransactions.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:e66c84f907672fa1e2bd0bbd",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "word:terminal": 5
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalUxBrowserProof.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:6690572f654db7e7b7ebccbe",
+ "categories": [
+ "component",
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 5,
+ "symbol:Terminal": 6,
+ "word:terminal": 11
+ },
+ "totalMatches": 22,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalWalletBtcOperation.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:7420fd077a0d20fe651e9c3a",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "symbol:Terminal": 1,
+ "word:terminal": 6
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalWorkspaceRail.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:4fe66fdf754a661078663b1e",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 3,
+ "word:terminal": 3
+ },
+ "totalMatches": 6,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/terminalWorkspaceRailCard.test.tsx",
+ "pathRoot": "v43-route-vocabulary-file:815c064bf0b7177c7f5c4d48",
+ "categories": [
+ "component",
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 2,
+ "symbol:Reading": 2,
+ "word:terminal": 3
+ },
+ "totalMatches": 7,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/useConversationStream.firstWrite.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:a628eb899095011007fbe870",
+ "categories": [
+ "telemetry",
+ "test"
+ ],
+ "tokenCounts": {
+ "symbol:Terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tests/workspaceSurface.test.ts",
+ "pathRoot": "v43-route-vocabulary-file:49a536b2d6bfc1c3a848c7dc",
+ "categories": [
+ "test"
+ ],
+ "tokenCounts": {
+ "route:/terminal": 4,
+ "word:terminal": 6
+ },
+ "totalMatches": 10,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ },
+ {
+ "path": "uapi/tsconfig.json",
+ "pathRoot": "v43-route-vocabulary-file:727b9f9e8a1cb53c8c422d73",
+ "categories": [
+ "telemetry"
+ ],
+ "tokenCounts": {
+ "word:terminal": 2
+ },
+ "totalMatches": 2,
+ "sourceSafeMetadataOnly": true,
+ "rawSourceTextSerialized": false,
+ "sourceSnippetSerialized": false
+ }
+ ],
+ "coverage": {
+ "sourceFileCount": 929,
+ "tokenTotals": {
+ "route:/exchange": 147,
+ "route:/terminal": 1475,
+ "route:/packs": 220,
+ "route:/read": 328,
+ "route:/deposit": 199,
+ "symbol:Exchange": 1964,
+ "symbol:Terminal": 3091,
+ "symbol:Packs": 56,
+ "symbol:Reading": 1345,
+ "symbol:Depositing": 251,
+ "symbol:PackActivity": 34,
+ "symbol:DepositAssetPackOption": 33,
+ "word:exchange": 1708,
+ "word:terminal": 3735,
+ "word:self-referential": 32
+ },
+ "categoryTotals": {
+ "route": 14,
+ "component": 150,
+ "test": 224,
+ "doc": 169,
+ "api": 43,
+ "telemetry": 668,
+ "workflow": 12,
+ "script": 124,
+ "package": 324,
+ "spec": 76
+ },
+ "routeVocabularyInventoryComplete": true,
+ "migrationMatrixComplete": true,
+ "packsMigrationPlanned": true,
+ "readMigrationPlanned": true,
+ "depositMigrationPlanned": true,
+ "retainedDebugCockpitBoundaryPlanned": true,
+ "redirectCompatibilityPlanned": true,
+ "selfReferentialCopyRemovalPlanned": true,
+ "sourceSafeMetadataOnly": true,
+ "protectedSourceVisible": false,
+ "rawSourceTextVisible": false,
+ "sourceSnippetVisible": false,
+ "credentialsSerialized": false,
+ "walletPrivateMaterialVisible": false,
+ "unpaidAssetPackSourceVisible": false,
+ "settlementPrivatePayloadVisible": false,
+ "forbiddenPayloadClasses": [
+ "secret-values",
+ "provider-tokens",
+ "wallet-private-material",
+ "protected-source-payloads",
+ "raw-protected-prompts",
+ "raw-model-responses-with-protected-source",
+ "unpaid-assetpack-source",
+ "source-snippets"
+ ],
+ "requiredPredicateCount": 24,
+ "passedPredicateCount": 24,
+ "failedPredicateIds": []
+ }
+}
diff --git a/.bitcode/v43-spec-family-report.json b/.bitcode/v43-spec-family-report.json
new file mode 100644
index 00000000..ea8ebdda
--- /dev/null
+++ b/.bitcode/v43-spec-family-report.json
@@ -0,0 +1,34 @@
+{
+ "reportId": "v43-spec-family-report",
+ "version": "V43",
+ "proofSourceCommit": "3c7a9f998656635cc28c8b4584ae964ac04154fa",
+ "generatedAt": "2026-05-29T15:19:41-03:00",
+ "generatorId": "bitcode.proven-generator.v1",
+ "worktreeState": "clean",
+ "checkedVersion": "V43",
+ "mode": "promoted",
+ "currentTarget": "V43",
+ "pointerVersion": "V43",
+ "passed": true,
+ "failureCount": 0,
+ "failures": [],
+ "requiredFiles": [
+ "BITCODE_SPEC_V43.md",
+ "BITCODE_SPEC_V43_DELTA.md",
+ "BITCODE_SPEC_V43_NOTES.md",
+ "BITCODE_SPEC_V43_PARITY_MATRIX.md"
+ ],
+ "supportFiles": [
+ "BITCODE_SPECIFYING.md",
+ "BITCODE_SPEC_TEMPLATEGUIDE.md"
+ ],
+ "requiredStatusLabelCount": 4,
+ "requiredPromotedStatusLabelCount": 1,
+ "requiredSpecSectionCount": 18,
+ "requiredAppendixSectionCount": 14,
+ "requiredProofFamilyCount": 9,
+ "requiredGeneratedArtifactCatalogSectionCount": 9,
+ "requiredGeneratedArtifactPathCount": 11,
+ "requiredNotesSectionCount": 4,
+ "requiredSubsystemCoverageCount": 18
+}
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 79f3e0e9..21ac051c 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,7 +1,7 @@
## Title
-Use the version and gate prefix for gate PRs: `V41 Gate N: Concise Topical Title`.
-Use the version and promotion prefix for version promotion PRs: `V41 Canonical Promotion: Concise Topical Title`.
+Use the version and gate prefix for gate PRs: `V43 Gate N: Concise Topical Title`.
+Use the version and promotion prefix for version promotion PRs: `V43 Canonical Promotion: Concise Topical Title`.
## Closure
diff --git a/.github/workflows/bitcode-canon-quality.yml b/.github/workflows/bitcode-canon-quality.yml
index 4366e25b..60348a6e 100644
--- a/.github/workflows/bitcode-canon-quality.yml
+++ b/.github/workflows/bitcode-canon-quality.yml
@@ -292,6 +292,78 @@ jobs:
node scripts/check-bitcode-canonical-inputs.mjs --current-target V41
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V41 --draft-target V42
node scripts/check-v41-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ if [ -f BITCODE_SPEC_V42.md ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V42 --mode draft --current-target V41
+ node scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs --skip-branch-check
+ if [ -f scripts/check-v42-gate2-depositing-shortest-path.mjs ]; then
+ node scripts/check-v42-gate2-depositing-shortest-path.mjs --skip-branch-check --skip-package-tests
+ fi
+ if [ -f scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs ]; then
+ node scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs ]; then
+ node scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs ]; then
+ node scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate6-settlement-rights-delivery.mjs ]; then
+ node scripts/check-v42-gate6-settlement-rights-delivery.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate7-ai-reading-demonstration.mjs ]; then
+ node scripts/check-v42-gate7-ai-reading-demonstration.mjs --skip-branch-check --skip-package-tests --skip-demonstration-tests
+ fi
+ if [ -f scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs ]; then
+ node scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate9-promotion-readiness.mjs ]; then
+ node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ fi
+ fi
+ elif [ "$POINTER" = "V42" ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42
+ node scripts/check-bitcode-canonical-inputs.mjs --current-target V42
+ node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V42 --draft-target V43
+ node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ if [ -f BITCODE_SPEC_V43.md ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V43 --mode draft --current-target V42
+ node scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs --skip-branch-check
+ if [ -f scripts/check-v43-gate2-route-vocabulary-inventory.mjs ]; then
+ node scripts/check-v43-gate2-route-vocabulary-inventory.mjs --skip-branch-check
+ fi
+ if [ -f scripts/check-v43-gate3-packs-activity-master-detail.mjs ]; then
+ node scripts/check-v43-gate3-packs-activity-master-detail.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v43-gate4-read-route-five-step-ux.mjs ]; then
+ node scripts/check-v43-gate4-read-route-five-step-ux.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v43-gate5-deposit-route-options.mjs ]; then
+ node scripts/check-v43-gate5-deposit-route-options.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate6-deposit-policy-compensation.mjs ]; then
+ node scripts/check-v43-gate6-deposit-policy-compensation.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate7-deposit-option-admission.mjs ]; then
+ node scripts/check-v43-gate7-deposit-option-admission.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate8-route-ux-product-excellence.mjs ]; then
+ node scripts/check-v43-gate8-route-ux-product-excellence.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs ]; then
+ node scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate10-promotion-readiness.mjs ]; then
+ node scripts/check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ fi
+ fi
+ elif [ "$POINTER" = "V43" ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V43 --mode promoted --current-target V43
+ node scripts/check-bitcode-canonical-inputs.mjs --current-target V43
+ node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V43 --draft-target V44
+ node scripts/check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ if [ -f BITCODE_SPEC_V44.md ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V44 --mode draft --current-target V43
+ fi
else
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
exit 1
@@ -431,7 +503,23 @@ jobs:
node scripts/check-bitcode-spec-family.mjs --version V41 --mode draft --current-target V40
fi
;;
+ spec:\ V42*|spec:\ v42*)
+ POINTER="$(cat BITCODE_SPEC.txt)"
+ if [ "$POINTER" = "V42" ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42
+ else
+ node scripts/check-bitcode-spec-family.mjs --version V42 --mode draft --current-target V41
+ fi
+ ;;
+ spec:\ V43*|spec:\ v43*)
+ POINTER="$(cat BITCODE_SPEC.txt)"
+ if [ "$POINTER" = "V43" ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V43 --mode promoted --current-target V43
+ else
+ node scripts/check-bitcode-spec-family.mjs --version V43 --mode draft --current-target V42
+ fi
+ ;;
*)
- echo "Skipping strict spec-title conformance; title is not a V29/V30/V31/V32/V33/V34/V35/V36/V37/V38/V39/V40/V41 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 spec change."
;;
esac
diff --git a/.github/workflows/bitcode-gate-quality.yml b/.github/workflows/bitcode-gate-quality.yml
index 52ff9afb..0cf87076 100644
--- a/.github/workflows/bitcode-gate-quality.yml
+++ b/.github/workflows/bitcode-gate-quality.yml
@@ -421,6 +421,78 @@ jobs:
node scripts/check-bitcode-canonical-inputs.mjs --current-target V41
node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V41 --draft-target V42
node scripts/check-v41-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ if [ -f BITCODE_SPEC_V42.md ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V42 --mode draft --current-target V41
+ node scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs --skip-branch-check
+ if [ -f scripts/check-v42-gate2-depositing-shortest-path.mjs ]; then
+ node scripts/check-v42-gate2-depositing-shortest-path.mjs --skip-branch-check --skip-package-tests
+ fi
+ if [ -f scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs ]; then
+ node scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs ]; then
+ node scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs ]; then
+ node scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate6-settlement-rights-delivery.mjs ]; then
+ node scripts/check-v42-gate6-settlement-rights-delivery.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate7-ai-reading-demonstration.mjs ]; then
+ node scripts/check-v42-gate7-ai-reading-demonstration.mjs --skip-branch-check --skip-package-tests --skip-demonstration-tests
+ fi
+ if [ -f scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs ]; then
+ node scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v42-gate9-promotion-readiness.mjs ]; then
+ node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ fi
+ fi
+ elif [ "$POINTER" = "V42" ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42
+ node scripts/check-bitcode-canonical-inputs.mjs --current-target V42
+ node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V42 --draft-target V43
+ node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ if [ -f BITCODE_SPEC_V43.md ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V43 --mode draft --current-target V42
+ node scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs --skip-branch-check
+ if [ -f scripts/check-v43-gate2-route-vocabulary-inventory.mjs ]; then
+ node scripts/check-v43-gate2-route-vocabulary-inventory.mjs --skip-branch-check
+ fi
+ if [ -f scripts/check-v43-gate3-packs-activity-master-detail.mjs ]; then
+ node scripts/check-v43-gate3-packs-activity-master-detail.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v43-gate4-read-route-five-step-ux.mjs ]; then
+ node scripts/check-v43-gate4-read-route-five-step-ux.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v43-gate5-deposit-route-options.mjs ]; then
+ node scripts/check-v43-gate5-deposit-route-options.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate6-deposit-policy-compensation.mjs ]; then
+ node scripts/check-v43-gate6-deposit-policy-compensation.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate7-deposit-option-admission.mjs ]; then
+ node scripts/check-v43-gate7-deposit-option-admission.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate8-route-ux-product-excellence.mjs ]; then
+ node scripts/check-v43-gate8-route-ux-product-excellence.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs ]; then
+ node scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate10-promotion-readiness.mjs ]; then
+ node scripts/check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ fi
+ fi
+ elif [ "$POINTER" = "V43" ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V43 --mode promoted --current-target V43
+ node scripts/check-bitcode-canonical-inputs.mjs --current-target V43
+ node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V43 --draft-target V44
+ node scripts/check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ if [ -f BITCODE_SPEC_V44.md ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V44 --mode draft --current-target V43
+ fi
else
echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
exit 1
@@ -443,6 +515,54 @@ jobs:
- name: Test gate packages
run: |
+ POINTER="$(cat BITCODE_SPEC.txt)"
+ if [ "$POINTER" = "V41" ] || [ "$POINTER" = "V42" ] || [ "$POINTER" = "V43" ]; then
+ if [ "$POINTER" = "V41" ]; then
+ node scripts/check-v42-gate9-promotion-readiness.mjs --skip-branch-check
+ elif [ "$POINTER" = "V42" ]; then
+ node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check
+ else
+ node scripts/check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check
+ fi
+ if [ "$POINTER" != "V43" ]; then
+ if [ -f scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs ]; then
+ node scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs --skip-branch-check
+ fi
+ if [ -f scripts/check-v43-gate2-route-vocabulary-inventory.mjs ]; then
+ node scripts/check-v43-gate2-route-vocabulary-inventory.mjs --skip-branch-check
+ fi
+ if [ -f scripts/check-v43-gate3-packs-activity-master-detail.mjs ]; then
+ node scripts/check-v43-gate3-packs-activity-master-detail.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v43-gate4-read-route-five-step-ux.mjs ]; then
+ node scripts/check-v43-gate4-read-route-five-step-ux.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v43-gate5-deposit-route-options.mjs ]; then
+ node scripts/check-v43-gate5-deposit-route-options.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate6-deposit-policy-compensation.mjs ]; then
+ node scripts/check-v43-gate6-deposit-policy-compensation.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate7-deposit-option-admission.mjs ]; then
+ node scripts/check-v43-gate7-deposit-option-admission.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate8-route-ux-product-excellence.mjs ]; then
+ node scripts/check-v43-gate8-route-ux-product-excellence.mjs --skip-branch-check --skip-uapi-tests
+ fi
+ if [ -f scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs ]; then
+ node scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ fi
+ if [ -f scripts/check-v43-gate10-promotion-readiness.mjs ]; then
+ node scripts/check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ fi
+ fi
+ pnpm --filter @bitcode/protocol test
+ pnpm --filter @bitcode/btd exec jest --config jest.config.cjs --runInBand --forceExit
+ 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
+ exit 0
+ fi
+
pnpm --filter @bitcode/btd exec jest --config jest.config.cjs --runTestsByPath __tests__/btc-fee-operation.test.ts --runInBand --forceExit
pnpm --filter @bitcode/btd exec jest --config jest.config.cjs --runTestsByPath __tests__/btd.test.ts --runInBand --forceExit
if [ -f packages/btd/__tests__/asset-pack-economic-traceability.test.ts ]; then
diff --git a/.github/workflows/v42-canon-promotion.yml b/.github/workflows/v42-canon-promotion.yml
new file mode 100644
index 00000000..7072f0df
--- /dev/null
+++ b/.github/workflows/v42-canon-promotion.yml
@@ -0,0 +1,134 @@
+name: V42 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-v42:
+ name: V42 Promotion Validation
+ if: >-
+ ${{
+ github.event_name == 'workflow_dispatch' ||
+ (
+ github.event.pull_request.base.ref == 'main' &&
+ github.event.pull_request.head.ref == 'version/v42' &&
+ 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 V42 promotion readiness
+ run: |
+ POINTER="$(cat BITCODE_SPEC.txt)"
+ if [ "$POINTER" = "V41" ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V42 --mode draft --current-target V41
+ node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V41 --draft-target V42
+ node scripts/check-bitcode-canonical-inputs.mjs --current-target V41
+ node scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs --skip-branch-check
+ node scripts/check-v42-gate2-depositing-shortest-path.mjs --skip-branch-check --skip-package-tests
+ node scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs --skip-branch-check --skip-uapi-tests
+ node scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ node scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ node scripts/check-v42-gate6-settlement-rights-delivery.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ node scripts/check-v42-gate7-ai-reading-demonstration.mjs --skip-branch-check --skip-package-tests --skip-demonstration-tests
+ node scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs --skip-branch-check --skip-package-tests --skip-uapi-tests
+ node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ node scripts/promote-bitcode-canon.mjs --version V42 --commit HEAD --dry-run
+ elif [ "$POINTER" = "V42" ]; then
+ node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42
+ node scripts/check-bitcode-canonical-inputs.mjs --current-target V42
+ node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V42 --draft-target V43
+ node scripts/check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ else
+ echo "Unexpected BITCODE_SPEC.txt pointer: $POINTER" >&2
+ exit 1
+ fi
+ 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
+ git diff --check
+
+ - name: Promote V42 canon files
+ if: >-
+ ${{
+ github.event_name == 'pull_request' &&
+ github.event.pull_request.head.ref == 'version/v42'
+ }}
+ env:
+ HEAD_BRANCH: ${{ github.event.pull_request.head.ref }}
+ run: |
+ if [ "$(cat BITCODE_SPEC.txt)" = "V42" ]; then
+ echo "BITCODE_SPEC.txt already points to V42."
+ exit 0
+ fi
+ PROOF_SOURCE_COMMIT="$(git rev-parse HEAD)"
+ node scripts/prepare-bitcode-spec-family-promotion.mjs --version V42 --commit "$PROOF_SOURCE_COMMIT"
+ node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V42 --next-draft V43
+ printf "V42\n" > BITCODE_SPEC.txt
+ node scripts/generate-bitcode-proven.mjs --version V42 --commit "$PROOF_SOURCE_COMMIT" --worktree-state clean --output BITCODE_SPEC_V42_PROVEN.md --allow-dirty
+ node scripts/generate-bitcode-proven.mjs --version V42 --commit "$PROOF_SOURCE_COMMIT" --worktree-state clean --output BITCODE_SPEC_V42_PROVEN.md --check --allow-dirty
+ node scripts/check-bitcode-canonical-inputs.mjs --current-target V42
+ node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42
+ node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V42 --draft-target V43
+ 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_V42.md \
+ BITCODE_SPEC_V42_DELTA.md \
+ BITCODE_SPEC_V42_NOTES.md \
+ BITCODE_SPEC_V42_PARITY_MATRIX.md \
+ BITCODE_SPEC_V42_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 V42"
+ git push origin "HEAD:$HEAD_BRANCH"
diff --git a/.github/workflows/v43-canon-promotion.yml b/.github/workflows/v43-canon-promotion.yml
new file mode 100644
index 00000000..2e378eb7
--- /dev/null
+++ b/.github/workflows/v43-canon-promotion.yml
@@ -0,0 +1,151 @@
+name: V43 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-v43:
+ name: V43 Promotion Validation
+ if: >-
+ ${{
+ github.event_name == 'workflow_dispatch' ||
+ (
+ github.event.pull_request.base.ref == 'main' &&
+ github.event.pull_request.head.ref == 'version/v43' &&
+ 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 V43 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" = "V42" ]; then
+ run_checked node scripts/check-bitcode-spec-family.mjs --version V43 --mode draft --current-target V42
+ run_checked node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V42 --draft-target V43
+ run_checked node scripts/check-bitcode-canonical-inputs.mjs --current-target V42
+ run_checked node scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs --skip-branch-check
+ run_checked node scripts/check-v43-gate2-route-vocabulary-inventory.mjs --skip-branch-check
+ run_checked node scripts/check-v43-gate3-packs-activity-master-detail.mjs --skip-branch-check --skip-uapi-tests
+ run_checked node scripts/check-v43-gate4-read-route-five-step-ux.mjs --skip-branch-check --skip-uapi-tests
+ run_checked node scripts/check-v43-gate5-deposit-route-options.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ run_checked node scripts/check-v43-gate6-deposit-policy-compensation.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ run_checked node scripts/check-v43-gate7-deposit-option-admission.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ run_checked node scripts/check-v43-gate8-route-ux-product-excellence.mjs --skip-branch-check --skip-uapi-tests
+ run_checked node scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs --skip-branch-check --skip-uapi-tests --skip-package-tests
+ run_checked node scripts/check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check --skip-package-tests
+ run_checked node scripts/promote-bitcode-canon.mjs --version V43 --commit HEAD --dry-run
+ elif [ "$POINTER" = "V43" ]; then
+ run_checked node scripts/check-bitcode-spec-family.mjs --version V43 --mode promoted --current-target V43
+ run_checked node scripts/check-bitcode-canonical-inputs.mjs --current-target V43
+ run_checked node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V43 --draft-target V44
+ run_checked node scripts/check-v43-gate10-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 5m 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 V43 canon files
+ if: >-
+ ${{
+ github.event_name == 'pull_request' &&
+ github.event.pull_request.head.ref == 'version/v43'
+ }}
+ env:
+ HEAD_BRANCH: ${{ github.event.pull_request.head.ref }}
+ run: |
+ if [ "$(cat BITCODE_SPEC.txt)" = "V43" ]; then
+ echo "BITCODE_SPEC.txt already points to V43."
+ exit 0
+ fi
+ PROOF_SOURCE_COMMIT="$(git rev-parse HEAD)"
+ node scripts/prepare-bitcode-spec-family-promotion.mjs --version V43 --commit "$PROOF_SOURCE_COMMIT"
+ node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V43 --next-draft V44
+ printf "V43\n" > BITCODE_SPEC.txt
+ node scripts/generate-bitcode-proven.mjs --version V43 --commit "$PROOF_SOURCE_COMMIT" --worktree-state clean --output BITCODE_SPEC_V43_PROVEN.md --allow-dirty
+ node scripts/generate-bitcode-proven.mjs --version V43 --commit "$PROOF_SOURCE_COMMIT" --worktree-state clean --output BITCODE_SPEC_V43_PROVEN.md --check --allow-dirty
+ node scripts/check-bitcode-canonical-inputs.mjs --current-target V43
+ node scripts/check-bitcode-spec-family.mjs --version V43 --mode promoted --current-target V43
+ node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V43 --draft-target V44
+ 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_V43.md \
+ BITCODE_SPEC_V43_DELTA.md \
+ BITCODE_SPEC_V43_NOTES.md \
+ BITCODE_SPEC_V43_PARITY_MATRIX.md \
+ BITCODE_SPEC_V43_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 V43"
+ git push origin "HEAD:$HEAD_BRANCH"
diff --git a/BITCODE_SPEC.txt b/BITCODE_SPEC.txt
index f75f93a5..db18f769 100644
--- a/BITCODE_SPEC.txt
+++ b/BITCODE_SPEC.txt
@@ -1 +1 @@
-V41
+V43
diff --git a/BITCODE_SPEC_V42.md b/BITCODE_SPEC_V42.md
new file mode 100644
index 00000000..bcb03fd7
--- /dev/null
+++ b/BITCODE_SPEC_V42.md
@@ -0,0 +1,575 @@
+# Bitcode Spec V42
+
+## Status
+
+- Version: `V42`
+- V42 state: canonical promotion complete; V42 is the active reliable MVP experience canon and the V42 hand-authored plus generated canon are aligned
+- Current canonical/latest target: `V42`
+- Canonical proof-source commit: `5c9c0270b9d864fe13b7e0a429700e1c9a7689d9`
+- Prior canonical anchor: `BITCODE_SPEC_V41.md`
+- Prior generated proof appendix: `BITCODE_SPEC_V41_PROVEN.md`
+- Generated structured artifact inventory: active canonical `.bitcode/v42-spec-family-report.json`, `.bitcode/v42-canonical-input-report.json`, `.bitcode/v42-canon-posture-drift-report.json`, `.bitcode/v42-depositing-shortest-path.json`, `.bitcode/v42-reading-shortest-path-state-machine.json`, `.bitcode/v42-readneed-review-resynthesis-product-closure.json`, `.bitcode/v42-readfitsfinding-preview-quote.json`, `.bitcode/v42-settlement-rights-delivery.json`, `.bitcode/v42-ai-reading-demonstration.json`, `.bitcode/v42-local-staging-mvp-rehearsal.json`, `.bitcode/v42-promotion-readiness-report.json`, V42 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V42_PROVEN.md` as the generated proof appendix for V42 promotion
+- Source parity state: V42 source-side Depositing shortest path, Reading shortest path state machine, ReadNeed review/resynthesis closure, ReadFitsFinding preview and quote closure, settlement rights delivery, AI-reading demonstration, local/staging-testnet rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V42 file family
+- Notes companion: `BITCODE_SPEC_V42_NOTES.md`
+- Delta companion: `BITCODE_SPEC_V42_DELTA.md`
+- Parity companion: `BITCODE_SPEC_V42_PARITY_MATRIX.md`
+- Generated proof appendix: `BITCODE_SPEC_V42_PROVEN.md` only after V42 promotion
+- Scope: V42 canonical system specification for reliable MVP experience across shortest-path Depositing, shortest-path Reading, reviewed Need synthesis, Finding Fits preview and quote, settlement-gated rights delivery, depositor compensation visibility, AI-reading demonstration, local/staging-testnet rehearsal, and promotion readiness surfaces
+- Last fully realized canonical target preserved in source: `V42`
+
+## Version executive summary
+
+V42 exists because V39 made commercial Reading real, V40 made the application testable, and V41 made prompts and PromptParts reliable enough to drive a product experience.
+The version now turns that depth into the shortest believable enterprise MVP paths:
+
+- deposit any admissible source material into the Depository with clear proof that it can later earn BTC compensation when used in a synthesized AssetPack;
+- request a Read, review or resynthesize Bitcode's synthesized Need, request Finding Fits, inspect source-safe AssetPack measurements and preview metadata, settle the quoted BTD/BTC purchase, and receive the full source-bearing AssetPack as repository delivery after settlement;
+- demonstrate Bitcode as an AI-reading dominant system where proprietary or otherwise non-public deposited material measurably improves an AI system beyond a public-data-only baseline.
+
+## Canonical Bitcode executive summary
+
+Bitcode remains the protocol and commercial system for depositing technical knowledge, reading needs against the Depository, finding many fitting deposits, synthesizing source-safe AssetPack previews, settling BTC fees, transferring BTD rights, and delivering full source-bearing AssetPacks only after settlement.
+V42 changes the product experience and demonstration proof around that law.
+It must not weaken BTC settlement, BTD ownership, source-to-shares compensation, disclosure boundaries, prompt-program source-safety, or ledger/database/storage synchronization.
+
+## V42 source-of-truth hierarchy
+
+`BITCODE_SPEC.txt` points to `V41` while V42 is draft.
+`BITCODE_SPEC_V41.md` and `BITCODE_SPEC_V41_PROVEN.md` are active canon.
+`BITCODE_SPEC_V42.md`, `BITCODE_SPEC_V42_DELTA.md`, `BITCODE_SPEC_V42_NOTES.md`, and `BITCODE_SPEC_V42_PARITY_MATRIX.md` define the draft target only on `version/v42` and `v42/gate-*` branches.
+Implementation remains unversioned in source paths; routes, packages, tests, prompts, components, and scripts move in place as the single current Bitcode system.
+
+## V42 full-system, re-implementation, and audit rule
+
+Reliable MVP experience work must be reconstructable from code, specification, generated artifacts, tests, telemetry, and operator documentation.
+Each accepted gate must state the user path, protocol objects, route/API ownership, pipeline ownership, source-safe disclosure tier, storage projection, ledger boundary, telemetry rows, proof artifacts, and validating commands needed to rebuild the experience without conversation history.
+No gate may close with only UI copy, speculative product language, or unverified route behavior.
+
+## V42 totality and precision enforcement rule
+
+V42 must make the product shortest paths complete without hiding complexity.
+Default interfaces should be low-detail and guided, while expandable detail must preserve the rich proof, telemetry, ledger, pipeline, and storage readback required by Bitcode.
+No Read can advance to Finding Fits without a reviewed synthesized Need.
+No source-bearing AssetPack content can cross into reader visibility before BTC settlement, BTD rights transfer, and storage/delivery reconciliation.
+No generated report may serialize secrets, wallet private material, private settlement payloads, protected source, raw provider responses, protected prompt payloads, or unpaid AssetPack source.
+
+## V42 system goals, non-goals, and design principles
+
+Goals:
+
+- Make Depositing the shortest path from source material to Depository admission proof and later compensation visibility.
+- Make Reading the shortest path from Read Request to reviewed Need, Finding Fits, source-safe AssetPack preview, BTD/BTC settlement, rights transfer, and repository delivery.
+- Keep advanced proof and telemetry available through expandable detail instead of forcing enterprise users through raw protocol machinery.
+- Preserve `ReadNeedComprehensionSynthesis` and `ReadFitsFindingSynthesis` as the product-owned Reading pipeline names and runtime boundaries.
+- Produce a demonstration where an AssetPack improves an AI system beyond a public-data-only baseline using deposited technical intelligence.
+- Keep local and staging-testnet rehearsal realistic while value-bearing mainnet operations remain explicitly gated.
+
+Non-goals:
+
+- V42 does not introduce agentic enterprise deposit AssetPack option synthesis; that is V43+.
+- V42 does not split `/terminal` into `/read` and `/deposit`, and does not rename `/exchange` to `/packs`; those route changes are V43+ unless explicitly reopened.
+- V42 does not change BTD supply law, BTC fee conservation, source-to-shares accounting, or post-settlement delivery rights.
+- V42 does not expose protected source, protected prompts, raw provider responses, or unpaid AssetPack source for demonstration convenience.
+
+Design principles: shortest credible path, source-safe preview, proof-on-expand, purchase-before-source, depositor compensation visibility, AI-reading demonstration value, and production-hardening through tests.
+
+## V43+ route vocabulary and pack activity cleanup
+
+V42 proves the current MVP path before route vocabulary is renamed.
+The next product cleanup must remove the transitional Terminal/Exchange posture from the core experience.
+`/terminal` should split into `/deposit` and `/read`, and `/exchange` should become `/packs` across route names, component prefixes, tests, docs, and operator vocabulary.
+`/packs` is the searchable master-detail activity surface for all pack activity: deposited AssetPack options, admitted Depository AssetPacks, Finding Fits previews, settled Need-Fit AssetPacks, quotes, rights transfers, compensation posture, repository delivery, proofs, and repair states.
+Its master view must support column sorting, filtering, and search over measurements, synthesized AssetPack titles and descriptions, values, activity or transaction type, settlement state, compensation state, and proof roots.
+Its detail view exposes the selected activity's source-safe proof, telemetry, ledger/database/storage synchronization, and expandable metadata.
+`/deposit` should let enterprises connect source, instruct or accept Bitcode's proposed deposit AssetPack options, review source-safe measurements and likely demand/ROI posture, and approve or reject Depository admission.
+`/read` should own the shortest Reading path from Read Request through reviewed Need, Finding Fits, preview, settlement, and delivery.
+AssetPacks become the in/out simplification: Depositing creates AssetPacks for the Depository, and Reading buys synthesized Need-Fit AssetPacks.
+Outside public documentation, product UX must not rely on self-referential explanatory copy; route structure, progressive detail, labels, and reusable rich components must make core behavior self-explanatory while preserving power-user inspection depth.
+
+## V42 system architecture and layer boundaries
+
+V42 acts through existing layers:
+
+- website application routes and product state for Depositing, Reading, settlement, and delivery;
+- packages for protocol, BTD, pipeline hosts, pipeline asset packs, prompts, tools, telemetry, and storage;
+- `ReadNeedComprehensionSynthesis` and `ReadFitsFindingSynthesis` pipelines with PTRR agents, FailsafeGenerationSequence, ThricifiedGeneration, tool registries, and typed parser outputs;
+- Depository indexing, search documents, embeddings, candidate fit ranking, selected-fit provenance, AssetPack synthesis, quote calculation, settlement observation, BTD rights transfer, and repository delivery;
+- demonstration code inside `protocol-demonstration/` only, with no commercial imports from demonstration and no demonstration imports from commercial product code.
+
+## V42 canonical domain model
+
+V42 product-experience domain objects are Depositing session, source admission proof, Depository record, compensation route preview, Read Request, synthesized Need, Need review decision, Need resynthesis request, accepted Need admission, Finding Fits request, candidate fit deposit, selected fit set, AssetPack measurement preview, withheld source bundle, BTD/BTC quote, settlement instruction, settlement observation, BTD rights transfer receipt, repository delivery receipt, AI-reading baseline, AI-reading improved result, telemetry stream row, proof-root summary, and repair posture.
+These objects bind to existing Bitcode objects: deposits, BTD ranges, AssetPacks, BTC fee receipts, source-to-shares rows, ledger journals, database projections, object-storage locks, VCS pull requests, prompt-program receipts, pipeline executions, and source-safe generated artifacts.
+
+## V42 whole Bitcode operator chain
+
+The V42 operator chain is: admit source, prove Depository availability, expose compensation posture, accept a Read Request, synthesize a Need, review or resynthesize the Need, request Finding Fits, search many Depository candidates, rank and select fitting deposits, synthesize a source-safe AssetPack preview, quote BTD/BTC purchase terms, settle BTC, transfer BTD rights, unlock source-bearing delivery, create repository pull request, journal ledger/database/storage synchronization, and expose source-safe telemetry and proof readback.
+
+V42 Gate 8 must rehearse that whole chain locally and in staging-testnet before promotion.
+The local/staging full MVP rehearsal binds Gates 2 through 7 together as one operator-readable path: deposit source, request read, review synthesized Need, request Finding Fits, review source-safe AssetPack preview and quote, buy/settle, transfer BTD rights, receive repository delivery, and verify the AI-reading value demonstration remains valid.
+The rehearsal is source-safe metadata only: it may carry lane ids, stage ids, proof roots, staging-testnet project references, command ids, readiness families, database stream posture, telemetry roots, reconciliation roots, delivery roots, and blocker/repair summaries, but it may not serialize secrets, protected source, raw protected prompts, raw interpolated prompts, raw provider responses, unpaid AssetPack source, wallet private material, private settlement payloads, or live rehearsal logs.
+
+## V42 Gate 1 MVP Experience Roadmap And Spec Opening
+
+Gate 1 opens the V42 spec family, branch posture, workflow posture, checker, roadmap, docs, and reliable MVP experience vocabulary.
+It does not implement route, pipeline, settlement, or demonstration behavior beyond documentation and validation posture.
+It closes when active V41 / draft V42 truth is visible in the root docs, protocol docs, workflow checks, package scripts, and roadmap, and when V42 has a precise gate plan.
+
+## V42 Gate 2 Depositing Shortest Path And Compensation Visibility
+
+Gate 2 makes the shortest deposit path explicit and testable.
+The accepted user path is: provide source material, select repository/source anchor, admit deposit to the Depository, receive source-safe admission proof, and see how later BTC compensation will be attributed if the deposit participates in a synthesized AssetPack.
+The implemented path covers route/API contracts, source validation, storage projection, Depository search-document creation, BTD/source-to-shares compensation readback, telemetry, and local/staging rehearsal posture.
+
+Gate 2 introduces source-safe compensation visibility as a first-class Depository admission readback.
+`DepositorySupplyRecord.compensationPreview` and deposit route `depositoryEvidence.compensationPreview` expose only source-safe metadata: compensation state, depositor wallet id, BTC price asset, source-to-shares largest-remainder allocation method, compensation route root, source-to-shares preview root, ledger readback keys, database projection tables, and repair blockers.
+The compensation route preview is not a BTD mint and not a rights transfer.
+It states that source-to-shares proof, BTC allocation, BTD rights transfer, and source-bearing AssetPack delivery occur only after an accepted Need-Fit creates a paid AssetPack and settlement finality is observed.
+
+Gate 2 proof artifact: `.bitcode/v42-depositing-shortest-path.json`.
+The artifact must prove eight source-safe rows: source-to-admission path, deposit route readiness contract, Depository record compensation preview, source-safe search/vector projection, storage readback projection, source-to-shares compensation ledger readback, Terminal compensation visibility readback, and local/staging deposit readback posture.
+Validating command: `pnpm run check:v42-gate2`.
+
+## V42 Gate 3 Reading Shortest Path State Machine
+
+Gate 3 must make the five Reading steps a coherent product state machine: request read, review synthesized Need, request Finding Fits, review source-safe AssetPack preview, and buy/settle/deliver AssetPack.
+It must simplify default Terminal experience while preserving expandable proof, execution, telemetry, ledger, and storage detail.
+It must prove route persistence, transaction ids, stage transitions, restart/retry behavior, source-safe UI rendering, and failure states.
+
+Gate 3 implements that state machine through `TerminalEnterpriseReadingUxState` and `TerminalEnterpriseReadingRouteState`.
+The route-owned state carries a recoverable transaction id, `readingStage` stage intent, retry and restart posture, source-safe failure kind, and repair action metadata.
+Route state may hydrate the active stage on refresh or Conversation handoff, but it does not waive blockers: Finding Fits still requires accepted Need, source-safe AssetPack preview still gates settlement, and delivery still requires settlement readback.
+
+Gate 3 proof artifact: `.bitcode/v42-reading-shortest-path-state-machine.json`.
+This is the canonical V42 reading shortest path state machine artifact for the MVP Reading route contract.
+The artifact must prove nine source-safe rows: five-step Reading path, transaction/stage route persistence, accepted-Need transition, restart/retry/failure repair, low-detail proof-on-expand UI, rich Reading pipeline telemetry, activity/workbench readback, route/component/stream tests, and SPEC/DELTA/NOTES/PARITY/README/workflow closure.
+Validating command: `pnpm run check:v42-gate3`.
+
+## V42 Gate 4 ReadNeed Review And Resynthesis Product Closure
+
+Gate 4 must make `ReadNeedComprehensionSynthesis` product-ready in the MVP flow.
+The pipeline must synthesize exactly the user's Need from the Read Request, store source-safe Need data, allow user feedback and resynthesis, preserve lineage, and admit Finding Fits only after the Need is accepted.
+It must cover PTRR agents, FailsafeGenerationSequence, ThricifiedGeneration, prompts, parser return types, telemetry rows, database projection, tests, and UI readback.
+Gate 4 is implemented by `.bitcode/v42-readneed-review-resynthesis-product-closure.json`.
+The artifact binds `ReadNeedReviewResynthesisRuntime`, all four review actions, source-safe storage projection, rejection posture, accepted-Need admission into `ReadFitsFindingSynthesis`, Terminal runtime/storage/telemetry readback, and the package/API/protocol tests that prove the path.
+
+## V42 Gate 5 ReadFitsFinding AssetPack Preview And Quote Closure
+
+Gate 5 must make `ReadFitsFindingSynthesis` product-ready in the MVP flow.
+The pipeline must search the Depository for many candidates above threshold, rank candidates, select fits, synthesize source-safe AssetPack measurements and preview metadata, keep source-bearing content withheld, calculate deterministic BTD/BTC quote posture, and expose a reviewable preview.
+It must cover vector search and provider search tooling, selected-fit provenance, prompt/tool return types, telemetry, quote formula readback, source-safe UI, and failure/repair states.
+Gate 5 is implemented by `.bitcode/v42-readfitsfinding-preview-quote.json`.
+The artifact binds the accepted-Need gate, many-channel Depository search, candidate ranking, selected-fit provenance, `AssetPackPreviewBoundary`, deterministic share-to-fee quote receipt, disclosure review, settlement instructions, delivery lock, harness route summary, Terminal preview/quote/provenance readback, and the package/API/protocol tests that prove no protected source or unpaid AssetPack source crosses the pre-settlement boundary.
+
+## V42 Gate 6 Settlement Rights Transfer And Repository Delivery Closure
+
+Gate 6 must make purchase and delivery reliable.
+The accepted user path is: review the AssetPack preview, choose to buy, receive settlement instructions, observe BTC/testnet settlement in the admitted lane, transfer BTD rights to the Reader, unlock source-bearing AssetPack delivery, and create the repository pull request.
+It must prove ledger/database/object-storage synchronization, delivery locks, no pre-settlement source leakage, compensation accounting, repair actions, and operator readback.
+Gate 6 is implemented by `.bitcode/v42-settlement-rights-delivery.json`.
+The artifact binds `AssetPackSettlementRightsDeliveryBoundary`, `AssetPackSettlementPaymentObservation`, confirmed BTC/testnet finality, `BtdRightsTransferReceipt`, `BtdReadReceipt`, `SourceToSharesProof`, `AssetPackDeliveryUnlockReceipt`, ledger/database/object-storage reconciliation, live harness materialization, source-safe route summaries, and Terminal settlement rights readback.
+Source-bearing AssetPack delivery remains withheld until payment, finality, BTD rights transfer, source-to-shares compensation conservation, reconciliation readback, and pull-request delivery all agree.
+
+## V42 Gate 7 AI-Reading Dominant Demonstration MVP
+
+Gate 7 must update the standalone demonstration so it proves Bitcode's AI-reading value.
+The demonstration should show deposited non-public technical intelligence becoming an AssetPack that measurably improves an AI system's training, prompt/context, or evaluation performance beyond a public-data-only baseline.
+It must remain minimal, self-contained inside `protocol-demonstration/`, and independent from commercial product code.
+Gate 7 is implemented by `.bitcode/v42-ai-reading-demonstration.json`.
+The artifact binds the local public-data-only baseline, reviewed ReadNeed synthesis, local Depository Finding Fits, selected AssetPack preview, AssetPack-enhanced AI-reading answer, basis-point benchmark uplift, settlement-gated source-safety boundary, self-contained demonstration import boundary, demonstration tests, protocol tests, docs, package scripts, and workflow wiring.
+The accepted proof is an AI-reading AssetPack improvement: public-only assistance scores below the AssetPack-enhanced result, selected deposit provenance is explicit, protected source remains withheld before settlement, and the demonstration can run locally without product runtime imports.
+
+## V42 Gate 8 Local And Staging-Testnet Full MVP Rehearsal
+
+Gate 8 must rehearse the full MVP path locally and in staging-testnet without value-bearing mainnet behavior.
+It must exercise deposit, Read Request, Need synthesis/review/resynthesis, Finding Fits, AssetPack preview, quote, settlement simulation or testnet observation, BTD rights projection, repository delivery, telemetry, proof artifacts, and repair readback.
+Gate 8 implements the local/staging full MVP rehearsal proof.
+The generated artifact `.bitcode/v42-local-staging-mvp-rehearsal.json` binds the closed V42 product artifacts from Gates 2 through 7 to the package `ReadingLocalStagingRehearsal`, the Vercel Sandbox harness, staging-testnet Supabase project `tkpyosihuouusyaxtbau`, rich execution-log readback, ledger/database/object-storage reconciliation, post-settlement pull-request delivery, source-safe operator receipts, and blocked value-bearing mainnet posture.
+Gate 8 does not promote mainnet, does not split `/terminal`, and does not rename `/exchange`.
+It proves the current MVP path is rehearseable under local and staging-testnet lanes while preserving V43+ as the route-vocabulary cleanup and agentic deposit AssetPack option work.
+The validating command is `pnpm run check:v42-gate8`.
+
+## V42 Gate 9 V42 Promotion Readiness
+
+Gate 9 closes V42 promotion readiness.
+It must bind every V42 artifact, test, workflow, generated proof support, promotion command, active V42 / draft V43 runtime preparation, source-safe generated appendix output, and value-bearing mainnet blocking where relevant.
+It closes only when V42 can be promoted as the reliable MVP experience canon.
+The V42 promotion readiness canon is the generated artifact `.bitcode/v42-promotion-readiness-report.json`, the `BITCODE_SPEC_V42_PROVEN.md` generation path, `.github/workflows/v42-canon-promotion.yml`, package scripts, and promotion dry-run support.
+The accepted post-promotion posture is V42 active / draft V43, with value-bearing mainnet still blocked unless a later promoted canon admits it.
+
+## V42 canonical subsystem surfaces
+
+### Depositing and asset supply
+
+Current canonical objects and emitted artifacts: deposits, source admission proof, Depository records, search documents, embedding projections, source-to-shares contributor roots, compensation route previews, and admission telemetry.
+Current algorithms and derivation rules: deposit admission validates source authority, builds source-safe measurement/search documents, preserves ownership, and records future compensation posture without implying a BTD mint before a Need-Fit.
+Current invariants and fail-closed conditions: invalid deposit, missing source authority, storage mismatch, and protected-source projection fail closed.
+Current proof obligations: admission proof, Depository readback, compensation route readback, source-safe projection, and local/staging rehearsal.
+Current source-bearing implementation basis: `packages/protocol`, `packages/btd`, `packages/pipelines/asset-pack`, `packages/tools-generics`, `packages/prompts`, and `uapi`.
+Current validating commands and parity basis: V42 gate checks, V41 prompt-program checks, V40 integration coverage, V39 Reading readiness, and generated V42 artifacts.
+Current accepted boundaries: pre-fit deposits are Depository supply; BTD rights are minted/transferred only through accepted Need-Fit and settlement law.
+
+### Reading and prompt/inference ownership
+
+Current canonical objects and emitted artifacts: Read Request, synthesized Need, Need review decision, resynthesis lineage, accepted Need admission, prompt receipts, Failsafe receipts, ThricifiedGeneration receipts, parser envelopes, and telemetry stream rows.
+Current algorithms and derivation rules: `ReadNeedComprehensionSynthesis` maps Read Request to exactly scoped Need, then user acceptance admits `ReadFitsFindingSynthesis`.
+Current invariants and fail-closed conditions: prompt contract incompleteness, parsed-envelope inadmissibility, missing Need review, authorization denial, and source-context overreach fail closed.
+Current proof obligations: prompt registry coverage, typed output parsing, review/resynthesis lineage, source-safe telemetry, and UI state persistence.
+Current source-bearing implementation basis: `packages/agent-generics`, `packages/prompts`, `packages/pipelines/asset-pack`, `packages/tools-generics`, `packages/protocol`, and `uapi`.
+Current validating commands and parity basis: V41 prompt-program reports, V42 Reading product gates, and V40 application tests.
+Current accepted boundaries: Need data may be visible to the Reader; fit source and AssetPack source remain withheld until settlement unlock.
+
+### Fit, recall, ranking, and verification
+
+Current canonical objects and emitted artifacts: query plans, vector search receipts, provider search receipts, candidate fit deposits, ranking receipts, selected-fit provenance, verification verdicts, source-safe preview measurements, and replay roots.
+Current algorithms and derivation rules: `ReadFitsFindingSynthesis` searches many Depository candidates above threshold, ranks them with source-safe evidence, and feeds selected fits into AssetPack synthesis.
+Current invariants and fail-closed conditions: no-survivor asset pack, missing provenance, ranking drift, embedding mismatch, and verification failure block preview and settlement.
+Current proof obligations: query synthesis, vector/provider search breadth, threshold ranking, selected-fit provenance, and source-safe replay determinism.
+Current source-bearing implementation basis: depository search tools, embedding utilities, prompt registries, pipeline asset-pack packages, and benchmark fixtures.
+Current validating commands and parity basis: V38 search/embedding artifacts, V39 Finding Fits runtime, V41 prompt hardening, and V42 Gate 5.
+Current accepted boundaries: pre-settlement candidate and fit visibility is source-safe metadata only.
+
+### Selection and materialization
+
+Current canonical objects and emitted artifacts: selected fit set, AssetPack measurements, source-safe preview, withheld source bundle, quote, delivery lock, repository delivery plan, proof roots, and repair receipts.
+Current algorithms and derivation rules: AssetPack source can be synthesized and locked before settlement, but reader visibility is limited to source-safe preview and measurements until payment and rights transfer.
+Current invariants and fail-closed conditions: public projection overexposure, unpaid AssetPack source exposure, missing quote, and delivery-lock mismatch fail closed.
+Current proof obligations: preview source-safety, deterministic quote, locked source bundle, post-settlement delivery unlock, and repository pull-request proof.
+Current source-bearing implementation basis: `packages/pipelines/asset-pack`, `packages/btd`, `packages/vcs`, `packages/protocol`, and `uapi`.
+Current validating commands and parity basis: V39 preview/quote and settlement/delivery artifacts, V40 integration tests, and V42 Gates 5 and 6.
+Current accepted boundaries: full source-bearing delivery unlock remains payment, finality, rights-transfer, and reconciliation gated.
+
+### Identity, authorization, and sensitive flow
+
+Current canonical objects and emitted artifacts: account, organization, wallet, repository authority, source selector, policy decision, quote recipient, buyer, depositor, and disclosure receipt.
+Current algorithms and derivation rules: product paths must check authority before source admission, Need synthesis, fit search, preview, settlement, and repository delivery.
+Current invariants and fail-closed conditions: authorization denial, wallet authority mismatch, organization policy denial, and repository permission failure fail closed.
+Current proof obligations: policy readback, role checks, wallet boundary, repository delivery authority, and source-safe denial states.
+Current source-bearing implementation basis: `packages/auth`, `packages/btd`, `packages/github`, `packages/protocol`, and `uapi`.
+Current validating commands and parity basis: V31 Auxillaries authority, V39 Reading interface parity, V40 API/browser tests, and V42 route tests.
+Current accepted boundaries: private wallet material, private settlement payloads, secrets, and protected source never enter public or unpaid Reader projections.
+
+### Disclosure and projection
+
+Current canonical objects and emitted artifacts: visibility tier, source-safe preview, protected source lock, prompt/result disclosure posture, telemetry redaction receipt, and public/operator projection rows.
+Current algorithms and derivation rules: source-safe summaries may show measurements, ids, hashes, roots, scores, and verdicts; protected source, raw prompts, raw provider responses, and unpaid AssetPack source remain withheld.
+Current invariants and fail-closed conditions: public projection overexposure, prompt/result leakage, and storage projection mismatch fail closed.
+Current proof obligations: disclosure tier mapping, UI redaction, telemetry redaction, generated artifact redaction, and repair posture.
+Current source-bearing implementation basis: `packages/observability`, `packages/prompts`, `packages/protocol`, `packages/btd`, and `uapi`.
+Current validating commands and parity basis: V38/V41 source-safe telemetry and prompt-program checks, V39 preview boundaries, and V42 UI tests.
+Current accepted boundaries: proof-on-expand may be rich but must remain source-safe before settlement.
+
+### Settlement and exact accounting
+
+Current canonical objects and emitted artifacts: BTD/BTC quote, settlement instruction, BTC observation, finality state, BTD rights transfer receipt, source-to-shares allocation, ledger journal, database projection, and reconciliation receipt.
+Current algorithms and derivation rules: deterministic quote posture uses measurement weight, measurement volume, and protocol fee allocation; settlement observation gates rights transfer and delivery unlock; compensation routes deposit contributors according to source-to-shares law.
+Current invariants and fail-closed conditions: settlement conservation drift, missing finality, duplicate rights transfer, compensation mismatch, and stale projection fail closed.
+Current proof obligations: quote determinism, BTC/testnet observation, BTD rights transfer, source-to-shares conservation, ledger/database/object-storage synchronization, and repair replay.
+Current source-bearing implementation basis: `packages/btd`, `packages/protocol`, `packages/objects-arrays`, storage adapters, and `uapi`.
+Current validating commands and parity basis: V27/V30 BTD law, V39 settlement readiness, V40 ledger/storage sync, and V42 Gate 6.
+Current accepted boundaries: production-mainnet value-bearing operations remain blocked until explicitly admitted by later canon and operator approval.
+
+### Proof contract, witnesses, and replay
+
+Current canonical objects and emitted artifacts: proof family, member, theorem, replay step, witness artifact, generated report, run receipt, telemetry row, repair receipt, and promotion appendix.
+Current algorithms and derivation rules: every V42 gate emits or checks source-safe proof roots sufficient to replay the product path and detect stale promoted status truth.
+Current invariants and fail-closed conditions: stale promoted status truth, missing witness, failed replay, and source-safety violation fail closed.
+Current proof obligations: deterministic generated artifacts, workflow binding, local/staging rehearsal receipts, promotion dry-run, and generated `BITCODE_SPEC_V42_PROVEN.md`.
+Current source-bearing implementation basis: `packages/protocol`, `.bitcode/`, `.github/workflows`, `scripts/`, and `protocol-demonstration/`.
+Current validating commands and parity basis: V42 check scripts, V41 promotion readiness, V40 proof/test coverage, and canon-quality workflows.
+Current accepted boundaries: demonstration evidence stays within demonstration boundaries and does not become commercial runtime dependency.
+
+## V42 proof-family canon
+
+### Exact proof-family inventory matrix
+
+| proofFamily | proofArtifactPath | memberIds | theoremIds | replayStepIds | witnessArtifactPaths | Current source basis |
+| --- | --- | --- | --- | --- | --- | --- |
+| Inference-synthesis | `.bitcode/v42-inference-synthesis.json` | read-need, finding-fits, asset-pack-preview | need-exactness, many-fit-search, typed-output | synthesize-need, search-depository, preview-pack | pipeline receipts, prompt receipts | V41 prompt-program canon and V42 Reading gates |
+| Prompt-completeness | `.bitcode/v42-prompt-completeness.json` | prompt-registry, tool-prompts, parser-prompts | registry-totality, interpolation-totality | resolve-prompt, parse-output | prompt catalogue reports | V41 PromptPart and Prompt artifacts |
+| Static-code-analysis | `.bitcode/v42-static-code-analysis.json` | routes, packages, workflows | no-versioned-routes, no-demo-import, no-secret-values | lint, typecheck, import-scan | CI logs | scripts and workflows |
+| Verification-decisions | `.bitcode/v42-verification-decisions.json` | deposit-admission, need-review, fit-selection | authority-checked, source-safe, replayable | admit-deposit, accept-need, rank-fits | route/API receipts | V42 Gates 2 through 5 |
+| Selection-and-materialization | `.bitcode/v42-selection-materialization.json` | selected-fits, preview, withheld-source | no-source-before-settlement, delivery-lock | synthesize-preview, lock-source | storage and preview receipts | V39/V42 preview and delivery law |
+| Authorization-and-sensitive-flow | `.bitcode/v42-authorization-sensitive-flow.json` | account, org, wallet, repo | authority-preserved, policy-fail-closed | check-policy, check-wallet, check-repo | policy receipts | Auxillaries, auth, BTD packages |
+| Settlement-source-to-shares | `.bitcode/v42-settlement-source-to-shares.json` | quote, settlement, rights, compensation | conservation, finality, rights-transfer | quote, observe, transfer, allocate | ledger receipts | BTD and ledger packages |
+| Disclosure-boundary | `.bitcode/v42-disclosure-boundary.json` | source-safe-preview, telemetry-redaction, generated-artifacts | no-protected-payload, source-safe-public | render-preview, stream-telemetry, generate-report | redaction receipts | V38/V41/V42 source-safe rules |
+| Proof-contract | `.bitcode/v42-proof-contract.json` | generated-reports, workflows, promotion | deterministic, workflow-bound, promotion-ready | generate, check, promote-dry-run | `.bitcode/*`, CI logs | protocol package and workflows |
+
+### Inference-synthesis
+
+- proofArtifactPath: `.bitcode/v42-inference-synthesis.json`
+- members: read-need, finding-fits, asset-pack-preview
+- theoremIds: need-exactness, many-fit-search, typed-output
+- replayStepIds: synthesize-need, search-depository, preview-pack
+- witnessArtifactPaths: pipeline receipts, prompt receipts, parser receipts
+- current member closure criteria: each inference step is registry-bound, typed, source-safe, and attached to the product state machine.
+- current member verdict shape: pass, fail, blocked, or repair-required.
+- current theorem-by-theorem closure reading: Need exactness, many-fit search, and typed output must independently pass.
+- current theorem-to-replay grouping: replay follows Need synthesis, Finding Fits, and preview generation.
+- minimum artifact/replay binding set: prompt lineage, execution id, parsed output id, and telemetry row id.
+- current proof-object fields: id, stage, agent, step, parser, verdict, proofRoot.
+- generated-artifact and test bindings: V42 pipeline product checks and V41 prompt-program reports.
+- fail-closed conditions: prompt contract incompleteness, parsed-envelope inadmissibility, and no-survivor asset pack.
+
+### Prompt-completeness
+
+- proofArtifactPath: `.bitcode/v42-prompt-completeness.json`
+- members: prompt-registry, tool-prompts, parser-prompts
+- theoremIds: registry-totality, interpolation-totality
+- replayStepIds: resolve-prompt, parse-output
+- witnessArtifactPaths: V41 prompt inventory, registry interpolation reports
+- current member closure criteria: every prompt involved in the MVP path is catalogued and validated.
+- current member verdict shape: pass, fail, blocked, or repair-required.
+- current theorem-by-theorem closure reading: registry and interpolation totality are checked before inference.
+- current theorem-to-replay grouping: prompt resolution precedes parser validation.
+- minimum artifact/replay binding set: prompt id, part ids, interpolation keys, parser id.
+- current proof-object fields: promptId, registryId, interpolationKeys, parserId, verdict.
+- generated-artifact and test bindings: V41 prompt reports and V42 gate checks.
+- fail-closed conditions: prompt contract incompleteness and protected prompt disclosure.
+
+### Static-code-analysis
+
+- proofArtifactPath: `.bitcode/v42-static-code-analysis.json`
+- members: routes, packages, workflows
+- theoremIds: no-versioned-routes, no-demo-import, no-secret-values
+- replayStepIds: lint, typecheck, import-scan
+- witnessArtifactPaths: CI logs and local command output
+- current member closure criteria: changed code is typechecked, lintable, import-safe, and source-safe.
+- current member verdict shape: pass, fail, blocked, or repair-required.
+- current theorem-by-theorem closure reading: route naming, dependency direction, and secret safety must pass.
+- current theorem-to-replay grouping: static checks run before integration checks.
+- minimum artifact/replay binding set: command, branch, commit, output summary.
+- current proof-object fields: checkId, command, files, verdict, proofRoot.
+- generated-artifact and test bindings: gate-quality and canon-quality workflows.
+- fail-closed conditions: stale promoted status truth, source import violation, and secret exposure.
+
+### Verification-decisions
+
+- proofArtifactPath: `.bitcode/v42-verification-decisions.json`
+- members: deposit-admission, need-review, fit-selection
+- theoremIds: authority-checked, source-safe, replayable
+- replayStepIds: admit-deposit, accept-need, rank-fits
+- witnessArtifactPaths: route receipts, API receipts, pipeline receipts
+- current member closure criteria: each user-visible decision has source-safe reason, authority proof, and replay id.
+- current member verdict shape: accepted, rejected, blocked, or repair-required.
+- current theorem-by-theorem closure reading: authority, source safety, and replayability are independent gates.
+- current theorem-to-replay grouping: decision receipts replay in product order.
+- minimum artifact/replay binding set: transaction id, decision id, principal id, proofRoot.
+- current proof-object fields: decisionKind, actor, inputRoot, outputRoot, verdict.
+- generated-artifact and test bindings: V42 product state machine and API tests.
+- fail-closed conditions: invalid deposit, authorization denial, and missing Need acceptance.
+
+### Selection-and-materialization
+
+- proofArtifactPath: `.bitcode/v42-selection-materialization.json`
+- members: selected-fits, preview, withheld-source
+- theoremIds: no-source-before-settlement, delivery-lock
+- replayStepIds: synthesize-preview, lock-source
+- witnessArtifactPaths: preview receipts, storage lock receipts
+- current member closure criteria: selected fits produce preview metadata while source-bearing content is locked.
+- current member verdict shape: pass, fail, blocked, or repair-required.
+- current theorem-by-theorem closure reading: preview and source lock must both pass before quote settlement.
+- current theorem-to-replay grouping: selected fit replay precedes source lock replay.
+- minimum artifact/replay binding set: selectedFitIds, previewRoot, lockRoot, quoteRoot.
+- current proof-object fields: assetPackId, previewRoot, lockRoot, disclosureTier, verdict.
+- generated-artifact and test bindings: V39 preview law and V42 Gate 5/6 checks.
+- fail-closed conditions: public projection overexposure and unpaid AssetPack source exposure.
+
+### Authorization-and-sensitive-flow
+
+- proofArtifactPath: `.bitcode/v42-authorization-sensitive-flow.json`
+- members: account, org, wallet, repo
+- theoremIds: authority-preserved, policy-fail-closed
+- replayStepIds: check-policy, check-wallet, check-repo
+- witnessArtifactPaths: policy receipts and authorization logs
+- current member closure criteria: each sensitive action verifies the principal, organization, wallet, and repository boundary.
+- current member verdict shape: allowed, denied, blocked, or repair-required.
+- current theorem-by-theorem closure reading: policy and wallet/repository authority cannot be inferred from UI state alone.
+- current theorem-to-replay grouping: policy replay gates settlement and delivery replay.
+- minimum artifact/replay binding set: principal id, policy id, wallet id, repo id.
+- current proof-object fields: actor, policy, resource, decision, proofRoot.
+- generated-artifact and test bindings: Auxillaries, auth, BTD, route tests.
+- fail-closed conditions: authorization denial, wallet authority mismatch, and private payload leakage.
+
+### Settlement-source-to-shares
+
+- proofArtifactPath: `.bitcode/v42-settlement-source-to-shares.json`
+- members: quote, settlement, rights, compensation
+- theoremIds: conservation, finality, rights-transfer
+- replayStepIds: quote, observe, transfer, allocate
+- witnessArtifactPaths: ledger receipts, database projections, storage locks
+- current member closure criteria: quote, settlement, rights, and compensation rows reconcile exactly.
+- current member verdict shape: pass, fail, blocked, or repair-required.
+- current theorem-by-theorem closure reading: BTC finality, BTD rights transfer, and source-to-shares conservation must all pass.
+- current theorem-to-replay grouping: settlement observation gates transfer and allocation.
+- minimum artifact/replay binding set: quoteRoot, txid, rightsReceiptId, allocationRoot.
+- current proof-object fields: quote, settlement, finality, rights, allocation, verdict.
+- generated-artifact and test bindings: BTD tests, ledger/storage sync checks, V42 Gate 6.
+- fail-closed conditions: settlement conservation drift and stale promoted status truth.
+
+### Disclosure-boundary
+
+- proofArtifactPath: `.bitcode/v42-disclosure-boundary.json`
+- members: source-safe-preview, telemetry-redaction, generated-artifacts
+- theoremIds: no-protected-payload, source-safe-public
+- replayStepIds: render-preview, stream-telemetry, generate-report
+- witnessArtifactPaths: UI snapshots, telemetry rows, generated artifacts
+- current member closure criteria: collapsed and expanded UI states remain source-safe before settlement.
+- current member verdict shape: pass, fail, blocked, or repair-required.
+- current theorem-by-theorem closure reading: preview, telemetry, and generated proof disclosure are separately checked.
+- current theorem-to-replay grouping: UI replay and generated artifact replay share disclosure tiers.
+- minimum artifact/replay binding set: disclosureTier, redactionReceipt, component, artifactPath.
+- current proof-object fields: visibilityTier, payloadKind, redaction, verdict, proofRoot.
+- generated-artifact and test bindings: V38/V41 telemetry and V42 UI tests.
+- fail-closed conditions: public projection overexposure and protected prompt/source leakage.
+
+### Proof-contract
+
+- proofArtifactPath: `.bitcode/v42-proof-contract.json`
+- members: generated-reports, workflows, promotion
+- theoremIds: deterministic, workflow-bound, promotion-ready
+- replayStepIds: generate, check, promote-dry-run
+- witnessArtifactPaths: `.bitcode/*`, workflow logs, `BITCODE_SPEC_V42_PROVEN.md`
+- current member closure criteria: every V42 gate artifact is deterministic, checked, documented, and workflow-bound.
+- current member verdict shape: pass, fail, blocked, or repair-required.
+- current theorem-by-theorem closure reading: generated proof, workflow proof, and promotion proof must all pass.
+- current theorem-to-replay grouping: generation and checking precede promotion dry-run.
+- minimum artifact/replay binding set: artifact path, generator command, checker command, workflow job.
+- current proof-object fields: artifactPath, command, workflow, verdict, proofRoot.
+- generated-artifact and test bindings: V42 promotion readiness and canon promotion workflow.
+- fail-closed conditions: missing artifact, stale promoted status truth, and failed promotion dry-run.
+
+## V42 generated canon
+
+### Inherited V19 reproducible-canon artifacts
+
+V42 inherits byte-stable generated proof expectations, deterministic replay posture, and promotion artifact discipline from V19.
+
+### Inherited V20 operator-quality artifacts
+
+V42 inherits operator-quality expectations for browser proof, accessibility, visual checks, performance posture, and operator acceptance from V20.
+
+### Exact generated-artifact inventory matrix
+
+| Artifact path | Producer | Disclosure posture | V42 role |
+| --- | --- | --- | --- |
+| `.bitcode/v42-spec-family-report.json` | `check-bitcode-spec-family` | source-safe metadata | draft/promotion spec family proof |
+| `.bitcode/v42-canonical-input-report.json` | `check-bitcode-canonical-inputs` | source-safe metadata | canonical input proof |
+| `.bitcode/v42-canon-posture-drift-report.json` | `check-bitcode-canon-posture-drift` | source-safe metadata | active V41 / draft V42 posture proof |
+| `.bitcode/v42-depositing-shortest-path.json` | V42 Gate 2 | source-safe metadata | deposit MVP proof |
+| `.bitcode/v42-reading-shortest-path-state-machine.json` | V42 Gate 3 | source-safe metadata | Reading product state proof |
+| `.bitcode/v42-readneed-review-resynthesis-product-closure.json` | V42 Gate 4 | source-safe metadata | Need review proof |
+| `.bitcode/v42-readfitsfinding-preview-quote.json` | V42 Gate 5 | source-safe metadata | Finding Fits, preview, and quote proof |
+| `.bitcode/v42-settlement-rights-delivery.json` | V42 Gate 6 | source-safe metadata | settlement/delivery proof |
+| `.bitcode/v42-ai-reading-demonstration.json` | V42 Gate 7 | source-safe metadata | demonstration value proof |
+| `.bitcode/v42-local-staging-mvp-rehearsal.json` | V42 Gate 8 | source-safe metadata | local/staging rehearsal proof |
+| `.bitcode/v42-promotion-readiness-report.json` | V42 Gate 9 | source-safe metadata | promotion readiness proof |
+
+### V42 specifying generated artifacts
+
+V42 specifying artifacts must be generated from code or deterministic scripts, committed only when source-safe, and checked by gate-quality and canon-quality workflows.
+
+### Shared generated-artifact fields
+
+Shared fields are artifact id, schema id, version, current target, source roots, validation commands, proof roots, generated at policy, disclosure posture, and verdict.
+
+### Artifact-specific generated payload fields
+
+Artifact-specific fields include deposit ids, Reading stage ids, prompt/parser ids, selected fit roots, quote roots, settlement roots, delivery roots, AI baseline ids, benchmark ids, and rehearsal ids.
+
+### Artifact confidentiality and disclosability taxonomy
+
+Allowed public payloads are ids, hashes, counts, statuses, source-safe summaries, measurement scores, proof roots, and redaction verdicts.
+Forbidden payloads are secrets, wallet private material, private settlement payloads, protected source, raw provider responses, protected prompt payloads, and unpaid AssetPack source.
+
+### Minimum generated appendix rendered contents
+
+The generated `BITCODE_SPEC_V42_PROVEN.md` 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 any required proof is missing.
+
+### Canonical regeneration and fail-closed posture
+
+Promotion must fail closed when generated artifacts are missing, stale, non-deterministic, source-unsafe, disconnected from workflow checks, or inconsistent with `BITCODE_SPEC.txt`.
+
+## V42 validation canon
+
+Validation must include:
+
+- `node scripts/check-bitcode-spec-family.mjs --version V42 --mode draft --current-target V41`;
+- `node scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs`;
+- later V42 gate checks as each gate opens;
+- route/API/unit/integration/browser checks appropriate to each product behavior gate;
+- local and staging-testnet rehearsal checks before promotion.
+
+## V42 promotion canon
+
+V42 promotion requires all V42 gates closed, all generated artifacts deterministic and source-safe, gate-quality and canon-quality workflows green, `BITCODE_SPEC_V42_PROVEN.md` generated, active V42 / draft V43 runtime posture prepared, and value-bearing mainnet operations explicitly blocked unless later canon admits them.
+
+## V42 appendices and canonical supporting material
+
+Supporting material includes `BITCODE_SPEC_V42_DELTA.md`, `BITCODE_SPEC_V42_NOTES.md`, `BITCODE_SPEC_V42_PARITY_MATRIX.md`, package READMEs, root README, `SPECIFICATIONS_ROADMAP.md`, workflow files, generated `.bitcode/` artifacts, and protocol-demonstration documents.
+
+## V42 accepted boundaries and reopen conditions
+
+Accepted boundaries:
+
+- V42 Gate 1 is specification and validation posture only.
+- V42 may refine `/terminal` but does not split `/read` and `/deposit`.
+- V42 may improve exchange-to-pack language where user-facing clarity requires it, but full `/exchange` to `/packs` route rename is deferred to V43+.
+- V42 may update demonstration only inside `protocol-demonstration/`.
+
+Reopen conditions:
+
+- a route, pipeline, or generated artifact exposes protected source or unpaid AssetPack source;
+- Need review is bypassed before Finding Fits;
+- settlement or BTD rights transfer is claimed without ledger/database/storage reconciliation;
+- AI-reading demonstration cannot prove improvement beyond public-data-only baseline;
+- workflow posture allows stale V42 artifacts to pass.
+
+## V42 completion condition
+
+V42 closes when the reliable MVP product experience is fully specified, implemented, tested, source-safe, rehearsed locally and in staging-testnet, documented, generated, workflow-checked, and promotion-ready across Depositing, Reading, Finding Fits, AssetPack preview, BTD/BTC settlement, repository delivery, depositor compensation visibility, and the AI-reading dominant demonstration.
+
+## Appendix A. Canonical type and surface catalog
+
+Canonical types include Depositing session, source admission proof, Depository record, compensation route preview, Read Request, synthesized Need, Need review decision, accepted Need, Finding Fits request, candidate fit deposit, selected fit set, AssetPack preview, BTD/BTC quote, settlement receipt, BTD rights transfer, repository delivery receipt, AI-reading baseline, AI-reading improved result, telemetry row, proof root, and repair posture.
+
+## Appendix B. Proof family closure catalog
+
+V42 proof families close through the exact proof-family inventory matrix and per-family sections above.
+
+## Appendix C. Generated artifact contract catalog
+
+V42 generated artifacts are source-safe, deterministic, workflow-bound, and promotion-blocking when stale.
+
+## Appendix D. Validation and checking gate catalog
+
+V42 gate validation starts with `check:v42-gate1` and expands gate by gate into package tests, route tests, browser tests, rehearsal scripts, and promotion readiness checks.
+
+## Appendix E. Current canonical source map
+
+Current source roots are `packages/protocol`, `packages/btd`, `packages/pipelines/asset-pack`, `packages/pipeline-hosts`, `packages/prompts`, `packages/tools-generics`, `packages/observability`, `packages/github`, `uapi`, `.github/workflows`, `scripts`, and `protocol-demonstration`.
+
+## Appendix F. Subsystem totality and derivability matrix
+
+V42 must cover 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, and generated artifacts and canonical promotion.
+
+## Appendix G. Canonical file-family and promotion contract catalog
+
+V42 file-family contracts are `BITCODE_SPEC_V42.md`, `BITCODE_SPEC_V42_DELTA.md`, `BITCODE_SPEC_V42_NOTES.md`, `BITCODE_SPEC_V42_PARITY_MATRIX.md`, and eventual `BITCODE_SPEC_V42_PROVEN.md`.
+
+## Appendix H. Operator surface and quality contract catalog
+
+Operator surfaces include `/terminal`, depositing controls, Reading controls, execution stream rows, settlement panels, delivery receipts, Auxillaries wallet/organization surfaces, demonstration pages, and generated proof reports.
+
+## Appendix I. Scenario, workflow, and cross-product contract catalog
+
+V42 scenario coverage must include auth-issuer-rollback, privacy-boundary-proof-export, polyglot-gateway-benchmark-remediation, auth-many-asset-normalization, Targeted deposit, Normalization deposit, patch, context, public, buyer, reviewer, internal, Openly writable, Measurably readable, Provable, and Valuable workflows.
+
+## Appendix J. Fail-closed contract and error posture matrix
+
+V42 fails 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, source leakage, missing Need review, missing settlement finality, and repository delivery authorization failure.
+
+## Appendix K. Source-bearing AssetPack and artifact contract catalog
+
+Source-bearing contracts 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`, and `BITCODE_SPEC_V42_PROVEN.md`.
+These contracts keep full AssetPack source withheld until settlement, BTD rights transfer, and delivery unlock.
diff --git a/BITCODE_SPEC_V42_DELTA.md b/BITCODE_SPEC_V42_DELTA.md
new file mode 100644
index 00000000..788bb09c
--- /dev/null
+++ b/BITCODE_SPEC_V42_DELTA.md
@@ -0,0 +1,106 @@
+# Bitcode Spec V42 Delta
+
+## Status
+
+- Version: `V42`
+- V42 state: canonical promotion complete; this delta records the promoted V41-to-V42 reliable MVP experience closure set
+- Current canonical/latest target: `V42`
+- Canonical proof-source commit: `5c9c0270b9d864fe13b7e0a429700e1c9a7689d9`
+- Prior canonical anchor: `BITCODE_SPEC_V41.md`
+- Prior generated proof appendix: `BITCODE_SPEC_V41_PROVEN.md`
+- Generated structured artifact inventory: active canonical `.bitcode/v42-spec-family-report.json`, `.bitcode/v42-canonical-input-report.json`, `.bitcode/v42-canon-posture-drift-report.json`, `.bitcode/v42-depositing-shortest-path.json`, `.bitcode/v42-reading-shortest-path-state-machine.json`, `.bitcode/v42-readneed-review-resynthesis-product-closure.json`, `.bitcode/v42-readfitsfinding-preview-quote.json`, `.bitcode/v42-settlement-rights-delivery.json`, `.bitcode/v42-ai-reading-demonstration.json`, `.bitcode/v42-local-staging-mvp-rehearsal.json`, `.bitcode/v42-promotion-readiness-report.json`, V42 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V42_PROVEN.md` as the generated proof appendix for V42 promotion
+- Source parity state: V42 source-side Depositing shortest path, Reading shortest path state machine, ReadNeed review/resynthesis closure, ReadFitsFinding preview and quote closure, settlement rights delivery, AI-reading demonstration, local/staging-testnet rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V42 file family
+- Scope: V42 canonical delta for reliable MVP experience over promoted V41 prompt-program excellence canon
+
+## Why V42 exists
+
+V42 turns the promoted V39 Reading product, V40 testing depth, and V41 prompt-program excellence into a reliable MVP enterprise experience.
+The version focuses on shortest-path Depositing, shortest-path Reading, settlement-gated AssetPack delivery, depositor compensation visibility, and an AI-reading dominant demonstration that proves AssetPacks improve an AI system beyond public-data-only baseline performance.
+
+## Accepted V42 decisions
+
+- V42 starts from active `V41` canon and keeps `BITCODE_SPEC.txt` at `V41` until promotion.
+- V42 product work stays unversioned in source paths.
+- Depositing must minimize the path to Depository admission proof and future compensation visibility.
+- Reading must use five product steps: request read, review synthesized Need, request Finding Fits, review source-safe AssetPack preview, and buy/settle/deliver AssetPack.
+- `ReadNeedComprehensionSynthesis` and `ReadFitsFindingSynthesis` remain the formal Reading pipeline names.
+- Source-bearing AssetPack content remains withheld until BTC settlement, BTD rights transfer, and storage/delivery reconciliation.
+- The demonstration remains self-contained in `protocol-demonstration/` and must prove AI-reading value without importing commercial code.
+
+## V42 gate plan
+
+### Gate 1: MVP Experience Roadmap And Spec Opening
+
+Open the V42 full specification family, roadmap, package script, workflow posture, documentation posture, branch convention, and checker.
+
+### Gate 2: Depositing Shortest Path And Compensation Visibility
+
+Implement and prove the shortest path from source material to Depository admission proof and later compensation readback.
+Gate 2 now binds Depository admission proof to a source-safe compensation route preview, route/API readiness, Depository search documents, vector/storage projection, source-to-shares readback keys, Terminal activity/history/readback fields, and `.bitcode/v42-depositing-shortest-path.json`.
+The compensation preview is deliberately pre-mint: it records BTC/source-to-shares eligibility if the deposit is selected into a later paid AssetPack, but it does not mint BTD, transfer rights, expose source, or allocate BTC before accepted Need-Fit and settlement.
+
+### Gate 3: Reading Shortest Path State Machine
+
+Implement and prove the five-step Reading product state machine with low-detail defaults and expandable proof/telemetry detail.
+Gate 3 now binds route-owned Reading state to transaction recovery, `readingStage` route hydration, retry/restart posture, source-safe failure repair, accepted-Need blockers, source-safe preview blockers, rich execution stream readback, and `.bitcode/v42-reading-shortest-path-state-machine.json`.
+The state machine keeps Terminal guided by default while preserving proof-on-expand detail for operators.
+
+### Gate 4: ReadNeed Review And Resynthesis Product Closure
+
+Implement and prove reviewed synthesized Need flow, feedback/resynthesis, accepted-Need admission, storage projection, telemetry, and UI readback.
+Gate 4 now binds `ReadNeedReviewResynthesisRuntime` (`readNeedReviewRuntime` route payloads), all four ReadNeed actions, source-safe storage projection, accepted and rejected review states, PTRR/Failsafe/Thricified telemetry receipts, Terminal runtime/storage/telemetry readback, `.bitcode/v42-readneed-review-resynthesis-product-closure.json`, and `check:v42-gate4`.
+
+### Gate 5: ReadFitsFinding AssetPack Preview And Quote Closure
+
+Implement and prove many-candidate Depository search, selected-fit provenance, source-safe AssetPack preview, deterministic BTD/BTC quote, and no pre-settlement source leakage.
+Gate 5 now binds `ReadFitsFindingRuntime`, many-channel Depository search, `AssetPackPreviewBoundary`, quote receipt readback, selected-fit provenance, settlement instructions, delivery posture, harness evidence summaries, Terminal preview/quote/provenance rows, `.bitcode/v42-readfitsfinding-preview-quote.json`, and `check:v42-gate5`.
+
+### Gate 6: Settlement Rights Transfer And Repository Delivery Closure
+
+Implement and prove purchase, settlement observation, BTD rights transfer, source unlock, repository pull request delivery, compensation accounting, and repair posture.
+Gate 6 now binds settlement rights transfer through `AssetPackSettlementRightsDeliveryBoundary` to the live harness, route summary, Terminal readback, source-to-shares conservation, BTD read/right receipts, and ledger/database/object-storage reconciliation through `.bitcode/v42-settlement-rights-delivery.json`.
+
+### Gate 7: AI-Reading Dominant Demonstration MVP
+
+Implement and prove the standalone demonstration where deposited technical intelligence improves an AI system beyond a public-data-only baseline.
+Gate 7 now binds the local AI-reading demonstration runtime, public-data-only baseline, reviewed Need, local Depository fit selection, source-safe AssetPack preview, AssetPack-enhanced answer, deterministic basis-point uplift, settlement-gated source boundary, `.bitcode/v42-ai-reading-demonstration.json`, and `check:v42-gate7`.
+
+### Gate 8: Local And Staging-Testnet Full MVP Rehearsal
+
+Run and prove the complete MVP path locally and in staging-testnet with value-bearing mainnet blocked.
+Gate 8 now binds staging-testnet full MVP rehearsal to the local lane, Vercel Sandbox operator receipt posture, Supabase project `tkpyosihuouusyaxtbau`, Gates 2 through 7 generated artifacts, `ReadingLocalStagingRehearsal`, source-safe telemetry/database readback, ledger/database/storage reconciliation, post-settlement repository delivery, `.bitcode/v42-local-staging-mvp-rehearsal.json`, `rehearse:v42-local-staging`, and `check:v42-gate8`.
+The rehearsal artifact is metadata only and does not serialize secrets, protected source, raw prompts, raw provider responses, unpaid AssetPack source, wallet private material, private settlement payloads, or live rehearsal logs.
+
+### Gate 9: V42 Promotion Readiness
+
+Bind every V42 product artifact, workflow, generated proof, promotion command, source-safety result, and active V42 / draft V43 runtime posture.
+Gate 9 now closes through `.bitcode/v42-promotion-readiness-report.json`.
+The report proves all V42 gate artifacts are covered, parseable, source-safe, workflow-bound, generated-proof-bound, and blocked from value-bearing mainnet admission.
+The promotion scripts support V42 through `scripts/promote-bitcode-canon.mjs`, `scripts/prepare-bitcode-spec-family-promotion.mjs`, `scripts/prepare-bitcode-runtime-canon-promotion.mjs`, and `.github/workflows/v42-canon-promotion.yml`.
+After promotion, the maintained runtime posture is V42 active / draft V43.
+
+## Explicitly deferred
+
+- V43+ agentic deposit AssetPack option synthesis remains deferred.
+- `/terminal` is not split into `/read` and `/deposit` during V42.
+- `/exchange` is not renamed to `/packs` during V42.
+- V43+ must take the route-vocabulary cleanup seriously: `/packs` replaces Exchange as the searchable master-detail activity route, including route names, component prefixes, tests, docs, and product vocabulary, while `/read` and `/deposit` become the short core paths for buying and selling AssetPacks.
+- `/packs` must cover all pack activity, including deposited AssetPack options, Depository admission, Finding Fits previews, settled Need-Fit AssetPacks, quotes, rights transfers, compensation posture, delivery, proofs, and repair.
+- `/packs` master view must support column sorting, filtering, and search over measurements, synthesized AssetPack titles and descriptions, values, activity or transaction type, settlement posture, compensation state, and proof roots; the detail view must expose selected source-safe activity data with expandable telemetry, ledger, database, storage, and proof metadata.
+- `/deposit` must evolve beyond manual admission into an agentic connected-repository flow where Bitcode proposes source-safe deposit AssetPack options from enterprise code, depositor instructions, Depository state, and Reading demand; enterprises review measurements, likely demand, likely positive ROI, and sub-criticality before approval.
+- `/read` must own the shortest Reading path without requiring the old Terminal cockpit as the default experience.
+- Outside public documentation, product copy should not compensate for unclear flows with self-referential explanations; V43+ UX should use route structure, concise labels, progressive disclosure, and rich reusable themed components to make core behavior legible.
+- Production-mainnet value-bearing operation remains blocked unless a later promoted canon explicitly admits it.
+- V42 Gate 1 does not change route behavior, pipeline behavior, settlement behavior, or demonstration behavior.
+
+## Pre-Implementation Sequence
+
+1. Open `version/v42` and `v42/gate-1-mvp-experience-roadmap-opening`.
+2. Keep `BITCODE_SPEC.txt` at `V41`.
+3. Add the V42 spec family and Gate 1 checker.
+4. Update roadmap, docs, package scripts, and workflows for active V41 / draft V42.
+5. Validate V42 draft family and V41 active posture.
+
+## Commit-Body Direction
+
+V42 commits should name the product path, protocol object, pipeline or route ownership, source-safety boundary, generated artifact or checker, and tests run.
diff --git a/BITCODE_SPEC_V42_NOTES.md b/BITCODE_SPEC_V42_NOTES.md
new file mode 100644
index 00000000..25a3bcc9
--- /dev/null
+++ b/BITCODE_SPEC_V42_NOTES.md
@@ -0,0 +1,133 @@
+# Bitcode Spec V42 Notes
+
+## Status
+
+- Version: `V42`
+- V42 state: canonical promotion complete; V42 notes record accepted Depositing, Reading, Need review, Finding Fits, settlement, delivery, AI-reading demonstration, local/staging rehearsal, and promotion-readiness evidence
+- Current canonical/latest target: `V42`
+- Canonical proof-source commit: `5c9c0270b9d864fe13b7e0a429700e1c9a7689d9`
+- Prior canonical anchor: `BITCODE_SPEC_V41.md`
+- Prior generated proof appendix: `BITCODE_SPEC_V41_PROVEN.md`
+- Generated structured artifact inventory: active canonical `.bitcode/v42-spec-family-report.json`, `.bitcode/v42-canonical-input-report.json`, `.bitcode/v42-canon-posture-drift-report.json`, `.bitcode/v42-depositing-shortest-path.json`, `.bitcode/v42-reading-shortest-path-state-machine.json`, `.bitcode/v42-readneed-review-resynthesis-product-closure.json`, `.bitcode/v42-readfitsfinding-preview-quote.json`, `.bitcode/v42-settlement-rights-delivery.json`, `.bitcode/v42-ai-reading-demonstration.json`, `.bitcode/v42-local-staging-mvp-rehearsal.json`, `.bitcode/v42-promotion-readiness-report.json`, V42 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V42_PROVEN.md` as the generated proof appendix for V42 promotion
+- Source parity state: V42 source-side Depositing shortest path, Reading shortest path state machine, ReadNeed review/resynthesis closure, ReadFitsFinding preview and quote closure, settlement rights delivery, AI-reading demonstration, local/staging-testnet rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V42 file family
+- Scope: V42 canonical notes for reliable MVP experience over promoted V41 prompt-program excellence canon
+- Last fully realized canonical target preserved in source: `V42`
+
+## Notes companion rule
+
+This notes companion records the working V42 product plan and simplified reading.
+It does not override `BITCODE_SPEC_V42.md`.
+Product behavior changes remain blocked until the relevant V42 gate admits and verifies them.
+
+## V42 Gate 1 opening note
+
+Gate 1 is intentionally specification, documentation, workflow, and checker posture only.
+It opens the reliable MVP experience version after V41 prompt-program promotion and prepares later gates to implement Depositing, Reading, settlement, delivery, and demonstration behavior without ad hoc scope drift.
+
+## Depositing shortest-path note
+
+The V42 Depositing path should minimize the journey from source material to Depository admission proof.
+The user needs to know that the source is admitted, searchable for future Need-Fit work, and eligible for BTC compensation if it contributes to a synthesized AssetPack.
+The UX can stay simple, but expandable details must show source authority, admission proof, storage projection, search-document posture, compensation route, and repair state.
+Gate 2 implements that note through `DepositorySupplyCompensationPreview`, deposit route `depositoryEvidence.compensationPreview`, Terminal compensation readback rows, and `.bitcode/v42-depositing-shortest-path.json`.
+Local/staging rehearsal for this gate means the deposit route, source-safe evidence projection, generated artifact, package test, and protocol route test can run without value-bearing mainnet behavior.
+The staging-testnet lane may read the same source-safe roots and ledger keys, but secrets and private source remain outside generated artifacts.
+
+## Reading shortest-path note
+
+The V42 Reading path should be a five-step enterprise flow:
+
+1. request read;
+2. review synthesized Need;
+3. request Finding Fits;
+4. review source-safe AssetPack measurements and preview metadata;
+5. buy, settle, transfer rights, and receive repository delivery.
+
+The default UI should be guided and low-detail.
+The rich execution log, proof roots, telemetry rows, and ledger/storage details remain available on expansion.
+Gate 3 implements the current V42 state-machine layer with `TerminalEnterpriseReadingRouteState`.
+The recoverable route state includes transaction id presence, `readingStage`, active-stage hydration, retry and restart posture, source-safe failure kind, and repair actions.
+This makes refresh, route handoff, and recovery inspectable without disclosing protected source, protected prompts, raw provider responses, unpaid AssetPack source, wallet private material, private settlement payloads, or ledger authority.
+
+## Gate 4 implementation notes
+
+Gate 4 closes the ReadNeed product loop.
+`ReadNeedComprehensionSynthesis` now has a V42 proof target for source-safe Read Request persistence, synthesized Need storage, feedback and resynthesis lineage, Need measurement roots, accepted Need admission, rejected Need posture, runtime storage projection, and telemetry receipts.
+The Terminal readback must show the Need, review state, runtime root, storage root, telemetry root, blockers, PTRR step identity, and storage record roots without exposing protected source, raw protected prompts, raw provider responses, unpaid AssetPack source, wallet private material, or private settlement payloads.
+Finding Fits remains blocked until the Need is accepted.
+Rejecting a Need must preserve feedback and keep the user on the review/resynthesis step.
+
+## AssetPack source-safety note
+
+V42 must make the preview valuable without leaking the source-bearing AssetPack before settlement.
+Readers may see measurements, fit confidence, quote posture, selected-fit provenance summaries, proof roots, and source-safe explanations.
+They may not see protected source, raw provider responses, protected prompts, private settlement payloads, wallet private material, or unpaid AssetPack source before BTC settlement and BTD rights transfer.
+
+## Gate 5 implementation notes
+
+Gate 5 closes the source-safe Finding Fits preview boundary.
+`ReadFitsFindingSynthesis` must already have an accepted Need, then search many Depository candidates across lexical, symbolic, path, metadata, measurement, embedding-vector, and provider-specific channels.
+Selected-fit provenance carries selected candidate ids, fit deposit ids, query and ranking roots, proof roots, measurement roots, and reconciliation readback roots.
+`AssetPackPreviewBoundary` is the review object before payment: it contains the source-safe preview, deterministic quote receipt, disclosure review, settlement instructions, delivery lock, storage projection, replay receipt, and repair posture.
+The route and Terminal readback expose those fields as metadata only; protected source and unpaid AssetPack source remain absent until Gate 6 settlement, rights transfer, and delivery unlock.
+
+## Gate 6 implementation notes
+
+Gate 6 closes the paid settlement and source-bearing delivery boundary.
+`AssetPackSettlementRightsDeliveryBoundary` is the reviewable post-payment object: it records BTC payment observation, confirmed finality, source-to-shares compensation, BTD read and rights transfer receipts, settlement unlock, source-bearing pull-request delivery unlock, ledger/database/object-storage reconciliation, storage projection, replay receipt, and repair posture.
+The live Vercel Sandbox harness materializes this boundary after ledger readback, the route summarizes it as source-safe metadata, and Terminal renders settlement rights, source-to-shares compensation, delivery unlock, reconciliation, and replay roots.
+Protected source, private settlement payloads, wallet private material, raw protected prompts, raw provider responses, and credentials remain absent from the generated artifact, route summaries, and pre-delivery readback.
+
+## AI-reading demonstration note
+
+The standalone demonstration should prove why Bitcode matters for AI-dominant Reading.
+A deposited proprietary or otherwise non-public technical intelligence source should contribute to an AssetPack that measurably improves an AI system's training, prompt/context, or evaluation result beyond what a public-data-only baseline can do.
+The demonstration must remain minimal, local, deterministic where feasible, and self-contained inside `protocol-demonstration/`.
+Gate 7 records that proof as a public-data-only baseline, a reviewed local Need, a local Depository Finding Fits step, a selected AssetPack preview, an AssetPack-enhanced AI-reading answer, and deterministic benchmark uplift.
+The demonstration proves value without weakening the settlement-gated visibility boundary: protected source is still withheld until settlement, and the demonstration remains independent from product runtime imports.
+
+## Gate 8 local/staging rehearsal note
+
+Gate 8 records the source-safe full MVP rehearsal posture across local and staging-testnet lanes.
+It composes the already-closed V42 Depositing, Reading state, ReadNeed review/resynthesis, Finding Fits preview/quote, settlement rights delivery, and AI-reading demonstration proofs into one operator-readable rehearsal artifact.
+The rehearsal binds `ReadingLocalStagingRehearsal`, Vercel Sandbox operator receipts, staging-testnet Supabase project `tkpyosihuouusyaxtbau`, rich execution-log readback, database streaming, ledger/database/storage reconciliation, post-settlement pull-request delivery, and explicit value-bearing mainnet blocking.
+It is intentionally source-safe metadata only: secrets, protected source, raw protected prompts, raw interpolated prompts, raw provider responses, unpaid AssetPack source, wallet private material, private settlement payloads, and live rehearsal logs remain outside tracked artifacts.
+Gate 8 does not implement the V43+ route vocabulary, but it keeps the future product shape visible: `/read`, `/deposit`, and `/packs` remain the next route cleanup once V42 proves the current MVP path.
+
+## Gate 9: V42 Promotion Readiness
+
+Gate 9 records the V42 promotion-readiness closure state.
+The generated artifact `.bitcode/v42-promotion-readiness-report.json` binds every V42 product proof from Gates 2 through 8, the V42 promotion workflow, generated proof appendix support, promotion dry-run support, source-safety checks, and value-bearing mainnet blocking.
+The intended post-promotion runtime posture is active V42 / draft V43, so V43 can start from the reliable MVP experience canon and focus on the next product vocabulary and deposit-side evolution.
+
+## V43+ agentic depositing roadmap note
+
+V43 or a later explicitly opened version should evolve the deposit side into an agentic AssetPack option experience for enterprises.
+Repository-installed Bitcode Agents should compare a connected enterprise codebase, the current Bitcode Depository, and Reading activity to propose deposit AssetPack options.
+Those options should be source-safe, sub-critical, likely positive ROI, and approve/rejectable before Depository admission.
+That later version should split `/terminal` into `/read` and `/deposit`, and rename `/exchange` to `/packs` across routes, code naming, docs, and operator vocabulary.
+The route model should be AssetPacks in and AssetPacks out: `/deposit` creates reviewable deposit AssetPack options from connected source, depositor instructions, and Bitcode's observed Needs; `/read` creates reviewed Need-Fit AssetPack previews and only unlocks source-bearing delivery after settlement; `/packs` is the searchable master-detail activity route for deposited packs, settled read packs, compensation posture, quotes, rights transfer, delivery, and repair.
+The `/packs` master view should support column sorting, filtering, and search over measurements, synthesized AssetPack titles and descriptions, values, activity or transaction type, settlement posture, and compensation state.
+The detail view should expose the selected activity's source-safe data, proof roots, telemetry, ledger/database synchronization, and expandable payloads without replacing the short default path.
+Outside public documentation, product UX should avoid self-referential explanatory copy; route structure, concise labels, progressive detail, and proof-on-expand must make Depositing, Reading, and Pack activity self-explanatory.
+The current transitional Terminal/Exchange UX remains too dense for the final MVP posture.
+V43+ route vocabulary must remove Exchange naming from route and component prefixes in favor of Packs, split Terminal into `/read` and `/deposit`, keep `/packs` as searchable master-detail activity, and use rich themed reusable components without relying on in-product explanatory copy to compensate for unclear flows.
+
+## Concise current-system reading
+
+Bitcode is active at V41.
+V42 drafts the next canon: the reliable MVP experience for enterprise Depositing and Reading.
+The central product promise is that a user can deposit source, request a read, review a synthesized Need, find fitting Depository sources, preview a source-safe AssetPack, pay in BTC/BTD settlement terms, receive rights, and get repository delivery.
+
+## Simplified-spec reading rule
+
+Read V42 as shortest credible paths over existing protocol law.
+If a product step cannot be routed, stored, replayed, telemetered, proven, and source-safely explained, it is not V42-ready.
+
+## Non-goals during V42 opening
+
+- Do not implement product behavior in Gate 1.
+- Do not split `/terminal` or rename `/exchange`.
+- Do not expose protected source or unpaid AssetPack source.
+- Do not bypass Need review before Finding Fits.
+- Do not claim settlement, BTD rights transfer, or repository delivery without synchronized ledger/database/storage proof.
diff --git a/BITCODE_SPEC_V42_PARITY_MATRIX.md b/BITCODE_SPEC_V42_PARITY_MATRIX.md
new file mode 100644
index 00000000..34599e63
--- /dev/null
+++ b/BITCODE_SPEC_V42_PARITY_MATRIX.md
@@ -0,0 +1,83 @@
+# Bitcode Spec V42 Parity Matrix
+
+## Status
+
+- Version: `V42`
+- V42 state: canonical promotion complete; V42 parity truth, generated reliable MVP artifacts, gate closure, and promotion automation are aligned
+- Current canonical/latest target: `V42`
+- Canonical proof-source commit: `5c9c0270b9d864fe13b7e0a429700e1c9a7689d9`
+- Prior canonical anchor: `BITCODE_SPEC_V41.md`
+- Prior generated proof appendix: `BITCODE_SPEC_V41_PROVEN.md`
+- Generated structured artifact inventory: active canonical `.bitcode/v42-spec-family-report.json`, `.bitcode/v42-canonical-input-report.json`, `.bitcode/v42-canon-posture-drift-report.json`, `.bitcode/v42-depositing-shortest-path.json`, `.bitcode/v42-reading-shortest-path-state-machine.json`, `.bitcode/v42-readneed-review-resynthesis-product-closure.json`, `.bitcode/v42-readfitsfinding-preview-quote.json`, `.bitcode/v42-settlement-rights-delivery.json`, `.bitcode/v42-ai-reading-demonstration.json`, `.bitcode/v42-local-staging-mvp-rehearsal.json`, `.bitcode/v42-promotion-readiness-report.json`, V42 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V42_PROVEN.md` as the generated proof appendix for V42 promotion
+- Source parity state: V42 source-side Depositing shortest path, Reading shortest path state machine, ReadNeed review/resynthesis closure, ReadFitsFinding preview and quote closure, settlement rights delivery, AI-reading demonstration, local/staging-testnet rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V42 file family
+- Scope: V42 canonical parity ledger for reliable MVP experience over promoted V41 prompt-program excellence canon
+- Last fully realized canonical target preserved in source: `V42`
+
+## Purpose
+
+This matrix records the reliable MVP product surfaces that must become promotion-grade before V42 can replace V41 as active canon.
+
+## Audit basis
+
+- `BITCODE_SPEC.txt` -> `V41`
+- `BITCODE_SPEC_V41.md`
+- `BITCODE_SPEC_V41_PROVEN.md`
+- `BITCODE_SPEC_V42.md`
+- `BITCODE_SPEC_V42_DELTA.md`
+- `BITCODE_SPEC_V42_NOTES.md`
+- commercial product routes, packages, pipelines, BTD/ledger code, generated artifacts, workflows, and `protocol-demonstration/`
+
+## V42 implementation matrix
+
+| Area | Required V42 result | Source evidence | Judgment |
+| --- | --- | --- | --- |
+| Draft family | V42 SPEC, DELTA, NOTES, and PARITY files exist over active V41 | `BITCODE_SPEC_V42.md` family | closed |
+| Roadmap truth | Roadmap states V41 active and V42 draft reliable MVP experience | `SPECIFICATIONS_ROADMAP.md` | closed |
+| Gate workflow | Gate quality knows active V41 / draft V42 posture and V42 Gate 1 | `.github/workflows/bitcode-gate-quality.yml` | closed |
+| Canon workflow | Canon quality knows active V41 / draft V42 posture and V42 Gate 1 | `.github/workflows/bitcode-canon-quality.yml` | closed |
+| Depositing shortest path | Source material can be admitted with Depository proof and compensation visibility | `.bitcode/v42-depositing-shortest-path.json`, `DepositorySupplyCompensationPreview`, `/api/deposits`, Terminal deposit readback | implemented |
+| Reading state machine | Five-step Reading UX is route-owned, persistent, and source-safe | `.bitcode/v42-reading-shortest-path-state-machine.json`, `TerminalEnterpriseReadingRouteState`, `readingStage`, route/retry/failure tests | implemented |
+| ReadNeed product closure | Need synthesis, review, feedback, resynthesis, accepted-Need admission, rejected Need blockers, source-safe telemetry, and Terminal runtime readback are product-ready | `.bitcode/v42-readneed-review-resynthesis-product-closure.json`, `ReadNeedReviewResynthesisRuntime`, `/api/read-review`, Terminal Need runtime readback | implemented |
+| Finding Fits preview and quote | Many-candidate search, selected-fit provenance, source-safe preview, and quote are product-ready | `.bitcode/v42-readfitsfinding-preview-quote.json`, `ReadFitsFindingRuntime`, `AssetPackPreviewBoundary`, harness preview summary, Terminal preview/quote/provenance readback | implemented |
+| Settlement and delivery | BTC/BTD settlement, rights transfer, compensation, and repository PR delivery are synchronized | `.bitcode/v42-settlement-rights-delivery.json`, `AssetPackSettlementRightsDeliveryBoundary`, live harness settlement boundary, route summary, Terminal settlement readback | implemented |
+| AI-reading demonstration | Standalone demonstration proves AssetPack improves AI beyond public-data-only baseline | `.bitcode/v42-ai-reading-demonstration.json`, `protocol-demonstration/src/ai-reading-demonstration.js`, `test:v42-ai-reading-mvp` | implemented |
+| Local/staging rehearsal | Full MVP path rehearsed locally and in staging-testnet with mainnet blocked | `.bitcode/v42-local-staging-mvp-rehearsal.json`, `ReadingLocalStagingRehearsal`, `rehearse:v42-local-staging`, `check:v42-gate8` | implemented |
+| Promotion readiness | V42 proof and workflow promotion ready | `.bitcode/v42-promotion-readiness-report.json`, `BITCODE_SPEC_V42_PROVEN.md`, `.github/workflows/v42-canon-promotion.yml`, `check:v42-gate9` | closed |
+
+## V42 implementation checklist
+
+| Area | Closure requirement | Judgment |
+| --- | --- | --- |
+| Gate 1 | Open V42 family, roadmap, docs, workflow posture, package script, and checker | closed |
+| Gate 2 | Depositing shortest path and compensation visibility artifact | implemented |
+| Gate 3 | Reading shortest path state machine artifact | implemented |
+| Gate 4 | ReadNeed review and resynthesis product closure artifact | implemented |
+| Gate 5 | ReadFitsFinding AssetPack preview and quote closure artifact | implemented |
+| Gate 6 | Settlement rights transfer and repository delivery closure artifact | implemented |
+| Gate 7 | AI-reading dominant demonstration MVP artifact | implemented |
+| Gate 8 | Local and staging-testnet full MVP rehearsal artifact | implemented |
+| Gate 9 | Promotion readiness artifact and workflow | closed |
+
+## Gate 9 Promotion readiness parity
+
+| Area | Closure evidence | Judgment |
+| --- | --- | --- |
+| V42 gate artifacts | Gates 2 through 8 generated artifacts are covered, parseable, and source-safe | closed |
+| Promotion workflow | `.github/workflows/v42-canon-promotion.yml` validates V42 before canon promotion and prepares the V42 active / V43 draft posture | closed |
+| Promotion scripts | `scripts/promote-bitcode-canon.mjs`, `scripts/prepare-bitcode-spec-family-promotion.mjs`, and runtime canon promotion support V42 | closed |
+| Generated proof appendix | `BITCODE_SPEC_V42_PROVEN.md` generation includes `.bitcode/v42-promotion-readiness-report.json` | closed |
+| Value-bearing mainnet | V42 promotion readiness keeps value-bearing mainnet blocked | closed |
+
+## V42 accepted boundaries
+
+V42 Gate 1 may open specification, workflow, docs, and validation posture.
+It may not implement route, pipeline, settlement, or demonstration behavior.
+
+V42 later gates may implement product behavior only if source-safe disclosure, Need review, BTD/BTC settlement, depositor compensation, repository delivery, telemetry, and generated proof obligations are represented in tests and artifacts.
+
+V42 may not split `/terminal` into `/read` and `/deposit`, and may not rename `/exchange` to `/packs`; those are V43+ roadmap items unless explicitly reopened.
+The V43+ parity target is stricter than a route rename: `/packs` must become the searchable master-detail activity route for AssetPacks in and out, `/deposit` must propose and admit reviewable deposit AssetPack options from connected source and Bitcode demand, `/read` must own the Reading purchase path, and product UX outside public documentation must be self-explanatory without self-referential copy.
+
+## V42 completion condition
+
+V42 closes when reliable MVP Depositing, Reading, Finding Fits, AssetPack preview, BTD/BTC settlement, repository delivery, compensation visibility, AI-reading demonstration, local/staging rehearsal, and promotion readiness are all specified, implemented, tested, generated, workflow-bound, source-safe, and promotion-ready.
diff --git a/BITCODE_SPEC_V42_PROVEN.md b/BITCODE_SPEC_V42_PROVEN.md
new file mode 100644
index 00000000..23a67835
--- /dev/null
+++ b/BITCODE_SPEC_V42_PROVEN.md
@@ -0,0 +1,2648 @@
+# Bitcode Spec V42 Proven
+
+- canonicalVersion: `V42`
+- canonicalCommit: `5c9c0270b9d864fe13b7e0a429700e1c9a7689d9`
+- canonicalCommitRecordedAt: `2026-05-28T21:36:43-03:00`
+- worktreeState: `clean`
+- generatorId: `bitcode.proven-generator.v1`
+- generatedAt: `2026-05-28T21:36:43-03:00`
+- outputPath: `BITCODE_SPEC_V42_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:23dc2056bb17d5255bb51c140a1be9ce43abfe95eaaf6167b8695fd64d31accc` | 3311 |
+| `.bitcode/v19-deterministic-replay-report.json` | `sha256:5add6336bd625ef3061e7456becf44e93959d17e09349557ab718e4c9148f3f8` | 8459 |
+| `.bitcode/v19-negative-proof-mutation-matrix.json` | `sha256:7b22ec01e83d5bf05a18ec10f3b01198cc54f6248aed111c2c42d2e2dcf4f12a` | 8085 |
+| `.bitcode/v19-proof-member-semantic-matrix.json` | `sha256:e7f593d3d24c9934ea5c8775eb996b4800788a13809ad8451b1bfec5b037a77e` | 1815750 |
+| `.bitcode/v19-state-machine-matrix.json` | `sha256:6088810ad9020092a4cd1a2c5571827087a962de8b19b779389c4fba2652fbf2` | 154965 |
+| `.bitcode/v19-theorem-evidence-matrix.json` | `sha256:f749864cd8f29c71905a482fae3c6ccf24d3220aa4de8779dbea9edf715f4a0f` | 2405676 |
+| `.bitcode/v19-volatility-inventory.json` | `sha256:fc9cff43c715bbb4d0367724c87b280035faf520a10dd53fba07adad0864dd3a` | 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:23dc2056bb17d5255bb51c140a1be9ce43abfe95eaaf6167b8695fd64d31accc` | `sha256:23dc2056bb17d5255bb51c140a1be9ce43abfe95eaaf6167b8695fd64d31accc` | `true` |
+| `.bitcode/v19-negative-proof-mutation-matrix.json` | `sha256:7b22ec01e83d5bf05a18ec10f3b01198cc54f6248aed111c2c42d2e2dcf4f12a` | `sha256:7b22ec01e83d5bf05a18ec10f3b01198cc54f6248aed111c2c42d2e2dcf4f12a` | `true` |
+| `.bitcode/v19-proof-member-semantic-matrix.json` | `sha256:e7f593d3d24c9934ea5c8775eb996b4800788a13809ad8451b1bfec5b037a77e` | `sha256:e7f593d3d24c9934ea5c8775eb996b4800788a13809ad8451b1bfec5b037a77e` | `true` |
+| `.bitcode/v19-state-machine-matrix.json` | `sha256:6088810ad9020092a4cd1a2c5571827087a962de8b19b779389c4fba2652fbf2` | `sha256:6088810ad9020092a4cd1a2c5571827087a962de8b19b779389c4fba2652fbf2` | `true` |
+| `.bitcode/v19-theorem-evidence-matrix.json` | `sha256:f749864cd8f29c71905a482fae3c6ccf24d3220aa4de8779dbea9edf715f4a0f` | `sha256:f749864cd8f29c71905a482fae3c6ccf24d3220aa4de8779dbea9edf715f4a0f` | `true` |
+| `.bitcode/v19-volatility-inventory.json` | `sha256:fc9cff43c715bbb4d0367724c87b280035faf520a10dd53fba07adad0864dd3a` | `sha256:fc9cff43c715bbb4d0367724c87b280035faf520a10dd53fba07adad0864dd3a` | `true` |
+| `_legacy/ENGI_SPEC_V19_PROVEN.md` | `sha256:8fc30df67926a3012a79fac0f1962a80a0b7c04b1abb4b64a533b584b87afd57` | `sha256:8fc30df67926a3012a79fac0f1962a80a0b7c04b1abb4b64a533b584b87afd57` | `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 |
+
+## V42 Promotion Readiness
+
+- reportId: `v42-promotion-readiness-report`
+- sourceSafe: `true`
+- passed: `true`
+- failureCount: `0`
+- prePromotionPosture: `V41 active / V42 draft`
+- postPromotionPosture: `V42 active / V43 draft`
+
+| artifactPath | digest | byteLength |
+| --- | --- | --- |
+| `.bitcode/v42-canon-posture-drift-report.json` | `sha256:ea3b6413b4bf2acde33cbfc826ff991817dea6f323de51db97a974986283ca65` | 2809 |
+| `.bitcode/v42-canonical-input-report.json` | `sha256:db4f1ff8fba0febe53444f0de2d24a44732db66c26e7ecbb61e78cc18383a50d` | 1169 |
+| `.bitcode/v42-promotion-readiness-report.json` | `sha256:e2b1728c02bd16ff6e760ff15a098c4db09802d7521f04a114acfd01f30eb853` | 17569 |
+| `.bitcode/v42-spec-family-report.json` | `sha256:4bb5f3fd3abbb331d1917dcf13eea6b279b18c07bc316e1ce5da32b7821446cb` | 1010 |
+
+## V20 Operator Quality Reports
+
+### V20 Generated Quality Artifact Inventory
+
+| artifactPath | digest | byteLength |
+| --- | --- | --- |
+| `.bitcode/v20-accessibility-report.json` | `sha256:9e8065d6d588563000942250de32c90098140788c92295b831d2ddc49d4007e9` | 8210 |
+| `.bitcode/v20-operator-acceptance-transcript.json` | `sha256:3948e1d2d560d21aa5d61655aa81653f7db80910ab1819d5fc8dd214f023ad7f` | 10913 |
+| `.bitcode/v20-performance-budget-report.json` | `sha256:9c4283f2311ce66c4ec7e3c473f9693d428cb582e1214633bc0bf53df570dfcd` | 5038 |
+| `.bitcode/v20-projection-quality-smoke-matrix.json` | `sha256:3529215175fb012a196891e44b33d9b83ccd4b90e97845b9d06f52a282bd2401` | 4935 |
+| `.bitcode/v20-quality-summary.json` | `sha256:d5e861a3a7e78d4cec71a0bae3814adf467da10fc3741c38b740c0c3f4161a84` | 4464 |
+| `.bitcode/v20-visual-regression-report.json` | `sha256:f10590619fd321e2c60a4da9cc5ec035f219f8a571dadc64e21dcf799cb961c9` | 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:473acee8b82e68a14f05ffa5d34fa7a48cd627224c02b4998c7e4911dac7ad19` | `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:f992e70202f4924fb989b467b9cbf80846e69d4645f78abd8fb74d0e93d19731` | `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:55b7e3d3fbd650fb457cee100e1a12ed5b2e9dc258970ad603deb48d18905358` | `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:4c82aa38149b319b1df273c8a97732d80e327fdd436fb821e57501313b281cee` | `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:67d4adc73f181b06ba5a6521189f7c297e86a86d61979c9e0fe82edeeeccfca5` | `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:a7e3f4466375461711f14b05d00a7c464cc3ae5433cc1978e288ef616d521c1d` | `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:67d4adc73f181b06ba5a6521189f7c297e86a86d61979c9e0fe82edeeeccfca5` | `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:a7e3f4466375461711f14b05d00a7c464cc3ae5433cc1978e288ef616d521c1d` | `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:5981ab9ad1231577bdbd1f1a663f2a8d2f6e32c6e1144a5b7ecb362ff69bf7d0` | `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:7cdb6797681ba014ac95ccfa266175833b703261e5ce50025da32b624fefbaf0` | `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:5981ab9ad1231577bdbd1f1a663f2a8d2f6e32c6e1144a5b7ecb362ff69bf7d0` | `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:7cdb6797681ba014ac95ccfa266175833b703261e5ce50025da32b624fefbaf0` | `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:b4ec55ec4704f86d144b0a65fc340c3962bf240c67de08e2b3e37ad32c5399b0` | `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:7baff46f4ff2ed5d334a9182238932ac899589b1140ce312508235ca836987c3` | `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:b4ec55ec4704f86d144b0a65fc340c3962bf240c67de08e2b3e37ad32c5399b0` | `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:7baff46f4ff2ed5d334a9182238932ac899589b1140ce312508235ca836987c3` | `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:b7fda637e58e643038ee6ad4cc3e65610edff693a58024fe6c3f67fdfab5ec51` | `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:b4ecaeeea21c806acdb37bd049f3ac77f43295cb40ea16cbef318f9653b8d04b` | `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:b7fda637e58e643038ee6ad4cc3e65610edff693a58024fe6c3f67fdfab5ec51` | `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:b4ecaeeea21c806acdb37bd049f3ac77f43295cb40ea16cbef318f9653b8d04b` | `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:1950c57e90d537421100c03161ea871b2eaff1c9ecf686de6f12dbc1ee1e5e29` | `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:50c0606f2eef504fd10408472778299841a0991a72b0e0cbf89ed833f2aa1305` | `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:1950c57e90d537421100c03161ea871b2eaff1c9ecf686de6f12dbc1ee1e5e29` | `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:50c0606f2eef504fd10408472778299841a0991a72b0e0cbf89ed833f2aa1305` | `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:ebcd69e8f9966ed31ab1828cc97538ee1c6c5988343cdcd13e8af108f4731f00` | `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:4f29ea781a9be8daf5cf0f8592a05742897813fecfef00a1c8f8972d94885fae` | `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:ebcd69e8f9966ed31ab1828cc97538ee1c6c5988343cdcd13e8af108f4731f00` | `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:4f29ea781a9be8daf5cf0f8592a05742897813fecfef00a1c8f8972d94885fae` | `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:88acf01a8864b4133b71ae2fc5d68f8cf2d948eefe4e6fe6f8264b5538c56d8c` | `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:8c79d33ee947212465106af1ab849f1d4c1b3b97049e6abd6bf802b6c35e22f5` | `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:88acf01a8864b4133b71ae2fc5d68f8cf2d948eefe4e6fe6f8264b5538c56d8c` | `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:8c79d33ee947212465106af1ab849f1d4c1b3b97049e6abd6bf802b6c35e22f5` | `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_V43.md b/BITCODE_SPEC_V43.md
new file mode 100644
index 00000000..17fd087e
--- /dev/null
+++ b/BITCODE_SPEC_V43.md
@@ -0,0 +1,671 @@
+# Bitcode Spec V43
+
+## Status
+
+- Version: `V43`
+- V43 state: canonical promotion complete; V43 is the active product-route and agentic-depositing canon and the V43 hand-authored plus generated canon are aligned
+- Current canonical/latest target: `V43`
+- Canonical proof-source commit: `3c7a9f998656635cc28c8b4584ae964ac04154fa`
+- Prior canonical anchor: `BITCODE_SPEC_V42.md`
+- Prior generated proof appendix: `BITCODE_SPEC_V42_PROVEN.md`
+- Generated structured artifact inventory: active canonical `.bitcode/v43-spec-family-report.json`, `.bitcode/v43-canonical-input-report.json`, `.bitcode/v43-canon-posture-drift-report.json`, `.bitcode/v43-route-vocabulary-inventory.json`, `.bitcode/v43-packs-activity-master-detail.json`, `.bitcode/v43-read-route-five-step-ux.json`, `.bitcode/v43-deposit-route-options.json`, `.bitcode/v43-deposit-policy-compensation.json`, `.bitcode/v43-deposit-option-admission.json`, `.bitcode/v43-route-ux-product-excellence.json`, `.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`, `.bitcode/v43-promotion-readiness-report.json`, V43 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V43_PROVEN.md` as the generated proof appendix for V43 promotion
+- Source parity state: V43 source-side route vocabulary, Packs master-detail, Read five-step UX, deposit option synthesis, deposit policy/compensation, deposit option admission, route UX, cross-route rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V43 file family
+- Notes companion: `BITCODE_SPEC_V43_NOTES.md`
+- Delta companion: `BITCODE_SPEC_V43_DELTA.md`
+- Parity companion: `BITCODE_SPEC_V43_PARITY_MATRIX.md`
+- Scope: V43 canonical system specification for product routes and agentic depositing across `/packs`, `/read`, `/deposit`, PackActivity search/detail, Read five-step UX, deposit AssetPack option synthesis, deposit policy/compensation, option admission, route UX product excellence, cross-route rehearsal, and promotion readiness surfaces
+- Last fully realized canonical target preserved in source: `V43`
+
+## Version executive summary
+
+V43 turns the reliable V42 MVP path into the product shape Bitcode should expose to enterprise users. The transitional `/terminal` cockpit is split into `/read` and `/deposit`, and `/exchange` becomes `/packs`.
+
+The V43 product object is AssetPacks in and AssetPacks out:
+
+- `/deposit` helps an enterprise turn connected source into reviewable deposit AssetPack options before Depository admission.
+- `/read` lets an enterprise request a Read, review the synthesized Need, request Finding Fits, preview source-safe AssetPack measurements, settle in BTC/BTD, and receive repository delivery.
+- `/packs` is the searchable master-detail activity surface for all pack activity: deposit options, admitted Depository AssetPacks, Finding Fits previews, settled Need-Fit AssetPacks, quotes, rights transfers, compensation, delivery, proofs, and repair states.
+
+V43 is also a UX correction version. Outside public documentation, the product should not lean on self-referential explanatory copy to compensate for unclear flows. The core routes, names, layout, progressive detail, rich execution log rows, and reusable themed components must make Depositing, Reading, and pack activity legible by default and deeply inspectable on demand.
+
+## Canonical Bitcode executive summary
+
+Bitcode remains the knowledge commoditization protocol: deposits become source-safe Depository supply, Reading synthesizes a Need, Finding Fits searches many deposits, AssetPack synthesis creates a source-safe preview and withheld source bundle, BTC settlement transfers BTD read rights, and repository delivery unlocks only after paid settlement.
+
+V43 changes the product routes and deposit-side synthesis experience around that law. It does not weaken V42 source-safety, BTD ownership, BTC settlement, source-to-shares compensation, ledger/database/object-storage synchronization, prompt/inference redaction, or post-settlement delivery boundaries.
+
+## V43 source-of-truth hierarchy
+
+`BITCODE_SPEC.txt` points to `V42` while V43 is draft.
+`BITCODE_SPEC_V42.md` and `BITCODE_SPEC_V42_PROVEN.md` are active canon.
+`BITCODE_SPEC_V43.md`, `BITCODE_SPEC_V43_DELTA.md`, `BITCODE_SPEC_V43_NOTES.md`, and `BITCODE_SPEC_V43_PARITY_MATRIX.md` define the draft target only on `version/v43` and `v43/gate-*` branches.
+Implementation remains unversioned in source paths; route, package, component, test, prompt, and script names move in place as the single current Bitcode system.
+
+## V43 full-system, re-implementation, and audit rule
+
+Every V43 change must be reconstructable from specification, code, generated artifacts, tests, telemetry, and operator documentation. Route migration cannot be a cosmetic rename. Each gate must state product path, protocol object ownership, route/API/storage contracts, telemetry rows, proof roots, source-safe disclosure tier, and validation commands.
+
+The route split must preserve V42 behavior while making it easier to use:
+
+- `/read` owns Reading state and can still expose full proof detail.
+- `/deposit` owns depositor source connection, option synthesis, review, approval, and Depository admission.
+- `/packs` owns historical/current activity search and detailed inspection.
+
+## V43 totality and precision enforcement rule
+
+V43 must remove overlapping vocabulary. Exchange is not a current route name after V43 migration; the route and component prefix is Packs. Terminal is no longer the default product route for Reading or Depositing after V43 migration; it may remain only as an internal/debug cockpit if explicitly retained and renamed as such.
+
+No product UI may reveal protected source, unpaid AssetPack source, raw provider responses, protected prompt payloads, wallet private material, private settlement payloads, or credentials. No route rename may create a second authority path that bypasses Need review, Finding Fits, BTC settlement, BTD rights transfer, or repository delivery reconciliation.
+
+## V43 system goals, non-goals, and design principles
+
+Goals:
+
+- Rename `/exchange` to `/packs` across routes, component prefixes, docs, tests, telemetry labels, and operator vocabulary.
+- Split `/terminal` into `/read` and `/deposit` as the default enterprise paths.
+- Make `/packs` a dense, searchable, sortable, filterable master-detail activity surface for AssetPacks in and out.
+- Add an agentic deposit-side flow that synthesizes deposit AssetPack options from connected source, depositor instructions, Depository state, and Reading demand.
+- Let depositors review source-safe measurements, likely demand, sub-criticality, ROI posture, BTD potential, and compensation route before approving Depository admission.
+- Improve UX so default flows are simple, self-explanatory, and visually polished while expandable detail preserves all Bitcode proof power.
+
+Non-goals:
+
+- V43 does not make unpaid source visible to readers.
+- V43 does not mint BTD for speculative deposit options without a later paid Need-Fit.
+- V43 does not weaken V42 settlement, rights, delivery, or source-to-shares law.
+- V43 does not move advanced conversational overlays into the core default path unless a gate explicitly owns that work.
+
+Design principles: AssetPacks in and out, route names as protocol truth, source-safe preview, proof-on-expand, purchase-before-source, depositor ROI clarity, and excellent enterprise usability.
+
+## V43 system architecture and layer boundaries
+
+V43 acts through existing layers:
+
+- website routes and route-owned state for `/packs`, `/read`, and `/deposit`;
+- package-owned protocol, BTD, pipeline, prompt, tool, storage, telemetry, and proof primitives;
+- ReadNeedComprehensionSynthesis and ReadFitsFindingSynthesis for Reading;
+- a new deposit-side AssetPack option synthesis pipeline for connected-source supply creation;
+- Depository search, demand/read activity indexing, source criticality policy, ROI posture, compensation preview, and admission proof;
+- ledger/database/object-storage synchronization, source-safe telemetry rows, and generated artifacts.
+
+Demonstration code remains self-contained inside `protocol-demonstration/`.
+
+## V43 canonical domain model
+
+V43 adds or promotes these product objects: PackActivity, PacksMasterFilter, PacksActivityDetail, DepositAssetPackOption, DepositOptionSynthesisRequest, DepositorInstruction, SourceCriticalityDecision, DemandSignalSummary, PositiveRoiPosture, DepositOptionReviewDecision, DepositOptionAdmissionReceipt, ReadRouteSession, ReadNeedReviewState, PackSettlementSummary, PackCompensationSummary, and PackRepairState.
+
+These bind to existing Bitcode objects: Depository records, Read Requests, synthesized Needs, candidate fit deposits, selected fit sets, AssetPack previews, BTD/BTC quotes, settlement observations, rights receipts, source-to-shares rows, repository delivery receipts, execution telemetry, and proof artifacts.
+
+## V43 whole Bitcode operator chain
+
+The V43 operator chain is: connect source, synthesize deposit AssetPack options, review source-safe option measurements and demand posture, approve or reject Depository admission, request a Read, review or resynthesize Need, request Finding Fits, search many Depository AssetPacks, synthesize source-safe Need-Fit AssetPack preview, quote BTC/BTD purchase terms, settle BTC, transfer BTD rights, unlock full AssetPack delivery, create repository pull request, compensate contributors, synchronize ledger/database/storage, and inspect all activity through `/packs`.
+
+## V43 Gate 1 Packs, Read, Deposit Roadmap And Spec Opening
+
+Gate 1 opens the V43 specification family, branch posture, workflow posture, checker, roadmap, docs, and route vocabulary. It does not rename routes or implement pipelines. It closes when active V42 / draft V43 truth is visible in docs and workflows, V43 has a precise gate plan, and acceptance criteria explicitly include the latest UX/product instructions.
+
+## V43 Gate 2 Route Vocabulary Inventory And Migration Plan
+
+Gate 2 must inventory every `/exchange`, Exchange, `/terminal`, Terminal, Reading, Depositing, and pack-activity route/component/test/doc/API/telemetry reference. It must produce a migration matrix for Packs, Read, Deposit, retained debug cockpit surfaces, redirects, compatibility boundaries, and removal of self-referential product copy.
+
+Gate 2 closes with the package-backed route vocabulary inventory
+`V43RouteVocabularyInventory` and deterministic generated artifact
+`.bitcode/v43-route-vocabulary-inventory.json`. The artifact records only
+source-safe file/token counts, token totals, category totals, migration rows,
+and proof roots. It does not serialize source snippets, raw prompts, protected
+source, unpaid AssetPack source, provider responses, wallet private material,
+private settlement payloads, credentials, or secrets.
+
+The migration matrix is binding for later gates:
+
+- `/exchange`, Exchange, and exchange activity names migrate to `/packs`,
+ Packs, and PackActivity under Gate 3, with redirect compatibility until old
+ links are retired.
+- `/terminal` Reading state migrates to `/read` under Gate 4, preserving the
+ five-step Reading path and all Need review, Finding Fits, settlement, BTD
+ rights, delivery, and telemetry boundaries.
+- `/terminal` Depositing state migrates to `/deposit` under Gate 5, where
+ deposit AssetPack options remain unminted, source-safe proposals until
+ depositor approval and Depository admission.
+- Any retained debug cockpit is internal/operator-only and cannot be the
+ default product path or a parallel authority route.
+- Redirect compatibility preserves transaction ids, reading stages, deposit
+ anchors, and proof roots without changing protocol authority.
+- Self-referential product copy outside public docs must be removed during the
+ Gate 8 UX pass and replaced by route structure, labels, status, and
+ progressive proof detail.
+
+## V43 Gate 3 Packs Activity Master-Detail Data Model
+
+Gate 3 must implement PackActivity data contracts, route APIs, table search, column sort, filtering, detail projection, source-safe metadata expansion, proof-root display, settlement/compensation/delivery/repair state readback, and no-source leak tests.
+
+Gate 3 closes with the package-backed `V43PacksActivityMasterDetail`
+artifact and deterministic generated proof
+`.bitcode/v43-packs-activity-master-detail.json`. The implementation adds the
+`PackActivityRecord` and `PacksActivityDetail` data contracts,
+`/api/packs/activity`, the `/packs` master-detail route, and `/exchange` to
+`/packs` compatibility redirection. Pack activity search covers synthesized
+titles, descriptions, measurements, values, activity type, transaction type,
+settlement state, compensation state, delivery state, repair state, proof
+roots, repository, and timestamp. Detail projections show proof roots and
+state readback while marking protected source, unpaid AssetPack source, raw
+prompts, interpolated prompts, raw provider responses, source snippets,
+credentials, wallet private material, and private settlement payloads
+withheld.
+
+## V43 Gate 4 Read Route Extraction And Five-Step UX
+
+Gate 4 must move the Reading default experience into `/read`: request read, review synthesized Need, request Finding Fits, review source-safe AssetPack preview, and settle/buy/deliver. It must preserve V42 telemetry, execution log streaming, proof expansion, retry/restart, and failure repair.
+
+Gate 4 closes with `ReadRouteSession`, `/read`, and
+`V43ReadRouteFiveStepUx`. `/read` owns the route query state, five visible
+Reading stages, source-safe session readback, Need review posture,
+accepted-Need gating for the Finding Fits request, AssetPack preview disclosure, BTC quote
+and settlement posture, and delivery unlock posture. The retained debug
+cockpit remains compatible but cannot bypass `/read` invariants: no Finding
+Fits without an accepted Need, no source-bearing AssetPack preview before
+settlement, and no repository delivery before paid read rights are proven.
+
+## V43 Gate 5 Deposit Route And Agentic AssetPack Option Synthesis
+
+Gate 5 must move the Depositing default experience into `/deposit` and introduce the deposit AssetPack option synthesis pipeline. The pipeline must use connected source, depositor instructions, Depository state, and Reading demand to propose multiple source-safe AssetPack options for review.
+
+Gate 5 closes with `DepositRouteSession`, `/deposit`, `DepositAssetPackOption`,
+`DepositOptionSynthesisRequest`, `DepositAssetPackOptionSynthesis`, and
+`V43DepositRouteOptions`. `/deposit` owns the route query state, five visible
+Depositing stages, connected repository/source selection, depositor instruction
+capture, source-safe option cards, option measurement roots, demand signal
+roots, and reuse of the existing deposit composer. Gate 5 does not decide source
+criticality, positive ROI, compensation policy, deposit admission, or Depository
+indexing. Those boundaries are explicitly carried as deferred policy/admission
+state for Gates 6 and 7. No protected source, raw source text, unpaid AssetPack
+source, prompts, provider responses, credentials, or wallet private material may
+be serialized into route state or generated proof artifacts.
+
+## V43 Gate 6 Source Criticality, Demand, ROI, And Compensation Policy
+
+Gate 6 formalizes how Bitcode estimates sub-critical source posture, likely demand, positive ROI, BTD potential, compensation route, and admission blockers. The system helps depositors sell non-critical positive-ROI IP while refusing or warning on critical IP and negative expected value.
+
+Gate 6 closes with `DepositAssetPackOptionPolicy`,
+`DepositAssetPackOptionPolicyReport`, and the generated
+`.bitcode/v43-deposit-policy-compensation.json` proof. The policy consumes the
+source-safe `DepositAssetPackOptionSynthesis` output plus source-safe
+criticality signals, estimated development cost, expected future settlement,
+and depositor wallet posture. It emits per-option policy evaluations for source
+criticality, demand, ROI, BTD potential, and BTC source-to-shares compensation
+route. BTD potential remains estimate-only: no BTD mint, paid rights transfer,
+or source-bearing disclosure occurs until a future accepted Need-Fit settlement.
+Deposit option approval, Depository admission, indexing, storage projection,
+and `/packs` synchronization remain Gate 7 responsibilities.
+
+## V43 Gate 7 Deposit Option Review, Approval, And Admission
+
+Gate 7 must implement option accept/reject/resynthesize decisions, admission receipts, Depository indexing, storage projection, compensation preview, telemetry, and `/packs` activity synchronization for approved deposit AssetPacks.
+
+Gate 7 closes with `DepositAssetPackOptionAdmissionReport`,
+`DepositOptionAdmissionReceipt`, `DepositOptionReviewDecision`, and the
+generated `.bitcode/v43-deposit-option-admission.json` proof. The admission
+report consumes source-safe Gate 5 option synthesis plus Gate 6 policy scoring
+and emits per-option receipts for pending review, depositor approval, depositor
+rejection, depositor-requested resynthesis, and policy-blocked outcomes. Only
+approved, policy-eligible, source-safe options are admitted to the Depository.
+Admitted options receive source-safe semantic, lexical, and metadata index
+projection roots, object-storage metadata roots, external raw-source pointer
+roots, preserved BTC source-to-shares compensation preview, execution-stream
+telemetry roots, and `/packs` synchronization as `depository-assetpack`
+activity. Gate 7 does not mint BTD, transfer rights, broadcast settlement, or
+show unpaid AssetPack source; those remain gated by future accepted Need-Fit
+settlement.
+
+## V43 Gate 8 UX/UI Product Excellence Pass
+
+Gate 8 must improve route layout, visual hierarchy, copy, progressive disclosure, execution stream usage, empty/error/loading states, keyboard/responsive behavior, and reusable themed components across `/packs`, `/read`, and `/deposit`. It must remove in-app self-referential explanatory copy outside public docs.
+
+Gate 8 closes with `ProductRouteShell`, `ProductRouteStepGrid`,
+`ProductRouteStatePanel`, `ProductRouteDisclosure`, and the generated
+`.bitcode/v43-route-ux-product-excellence.json` proof. `/packs`, `/read`, and
+`/deposit` must share a consistent themed route frame, concise route summaries,
+source-safe metrics, keyboard-accessible step buttons, loading/empty/error
+states, and expandable proof/source-safety detail. Product copy must be route
+and status vocabulary, not explanations of the interface itself. Gate 8 must
+not change route state-machine authority, disclose protected source, disclose
+unpaid AssetPack source, serialize prompts/provider responses, or weaken the
+settlement-gated source boundary.
+
+## V43 Gate 9 Cross-Route Rehearsal, Telemetry, And Repair
+
+Gate 9 must rehearse the full path across `/deposit`, `/read`, and `/packs`: synthesize deposit options, admit a deposit AssetPack, request Reading, find fits, preview, settle, deliver, compensate, and inspect activity. It must cover local/staging-testnet lanes, telemetry, database/ledger/storage synchronization, and repair states.
+
+Gate 9 closes with `V43CrossRouteRehearsalTelemetryRepair`, the dry-run
+operator receipt script `rehearse:v43-cross-route`, and generated
+`.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`. The artifact binds
+local and staging-testnet lanes, `/deposit`, `/read`, and `/packs`, and the
+cross-route stages: deposit option synthesis, deposit option review/admission,
+Read request, Need review, Finding Fits request, source-safe AssetPack preview,
+BTC settlement/right transfer, repository pull-request delivery, and PackActivity
+repair inspection. Gate 9 also proves rich execution telemetry readback,
+staging-testnet database stream posture, ledger/database/object-storage
+reconciliation, source-to-shares compensation readback, and fail-closed repair
+states without serializing secrets, protected source, prompt payloads, provider
+responses, wallet private material, live rehearsal logs, or unpaid AssetPack
+source. Value-bearing mainnet remains blocked.
+
+## V43 Gate 10 Promotion Readiness
+
+Gate 10 must bind every V43 artifact, workflow, generated proof, docs update, route migration, source-safety proof, test suite, and active V43 / draft V44 runtime posture before canonical promotion.
+
+Gate 10 closes with `V43PromotionReadinessReport`, the deterministic
+`.bitcode/v43-promotion-readiness-report.json` artifact, `check:v43-gate10`,
+`generate:v43-promotion-readiness`, `v43-canon-promotion.yml`, V43 promotion
+support in `promote-bitcode-canon.mjs`, V43 hand-authored spec-family promotion
+rewriting, V43 generated PROVEN support, and post-promotion workflow posture for
+V43 active / draft V44. The artifact covers every V43 gate artifact from route
+vocabulary through cross-route rehearsal, the promotion workflow, gate/canon
+quality workflows, package exports/tests, documentation evidence, and generated
+proof outputs. Promotion remains blocked if any required artifact is missing,
+unparseable, source-unsafe, stale, missing workflow coverage, missing promotion
+script coverage, or admits value-bearing mainnet before a later canon. Gate 10
+does not promote `BITCODE_SPEC.txt` itself; it makes the `version/v43` to `main`
+promotion pull request mechanically ready to produce `BITCODE_SPEC_V43_PROVEN.md`
+and advance runtime posture to V43 active / draft V44.
+
+## V43 canonical subsystem surfaces
+
+### Depositing and asset supply
+
+- Current canonical objects and emitted artifacts: DepositRouteSession, DepositAssetPackOption, DepositOptionSynthesisRequest, DepositAssetPackOptionSynthesis, DepositAssetPackOptionPolicy, DepositAssetPackOptionPolicyReport, DepositAssetPackOptionAdmissionReport, DepositOptionAdmissionReceipt, DepositOptionReviewDecision, Depository record projection, source admission proof, compensation preview, `.bitcode/v43-deposit-route-options.json`, `.bitcode/v43-deposit-policy-compensation.json`, and `.bitcode/v43-deposit-option-admission.json`.
+- Current algorithms and derivation rules: connected-source selection, depositor instruction rooting, source path rooting, Depository demand signal roots, Reading demand signal roots, existing supply signal roots, option grouping, measurement projection, source-safe review posture, source criticality scoring, weighted demand scoring, deterministic gross-minus-cost ROI scoring, estimate-only BTD potential, future-reader BTC source-to-shares compensation route preview, depositor approve/reject/resynthesis decisions, approved-policy-eligible admission, Depository index projection, storage metadata projection, and `/packs` activity synchronization.
+- Current invariants and fail-closed conditions: invalid repository binding, missing source hints, critical-source block, negative expected value warning/block, missing wallet compensation repair posture, missing depositor review, rejected option, resynthesis request, policy-blocked option, and protected-source leak.
+- Current proof obligations: source-safe option synthesis, option policy report, option review boundary, admission receipts, compensation route preview, Depository index/storage projections, BTD mint boundary, telemetry, and activity synchronization.
+- Current source-bearing implementation basis: `/deposit` route, `DepositRouteSession`, asset-pack pipeline package option synthesis, asset-pack package policy report, asset-pack package admission report, existing deposit composer, `/packs` activity projection, source-safe route tests, package tests, and generated protocol artifacts.
+- Current validating commands and parity basis: `pnpm run check:v43-gate5`, `pnpm run check:v43-gate6`, `pnpm run check:v43-gate7`, package tests, API tests, and generated artifacts.
+- Current accepted boundaries: options are not BTD mints and do not expose source to readers before settlement; admitted deposit AssetPacks publish only source-safe metadata and external source pointer roots until a future paid Need-Fit settlement.
+
+### Reading and prompt/inference ownership
+
+- Current canonical objects and emitted artifacts: ReadRouteSession, Read Request, synthesized Need, Need review decision, Finding Fits request, AssetPack preview, quote, settlement, delivery.
+- Current algorithms and derivation rules: ReadNeedComprehensionSynthesis and ReadFitsFindingSynthesis remain the Reading pipelines, with Need review gating Finding Fits.
+- Current invariants and fail-closed conditions: no Finding Fits without accepted Need, no preview source leakage, no settlement without quote, no delivery without paid rights.
+- Current proof obligations: source-safe telemetry, prompt/program receipts, parser outputs, stage persistence, and repair states.
+- Current source-bearing implementation basis: `/read`, Reading APIs, pipeline host, prompt registries, execution stream, ledger/database/storage adapters.
+- Current validating commands and parity basis: `pnpm run check:v43-gate4`, uapi tests, pipeline tests, browser proof.
+- Current accepted boundaries: `/read` is the default user path; retained debug cockpit cannot bypass it.
+
+### Fit, recall, ranking, and verification
+
+- Current canonical objects and emitted artifacts: query plan, candidate fit deposits, ranking receipts, selected fit set, proof roots, search receipts.
+- Current algorithms and derivation rules: depository-wide many-fit search uses embeddings, metadata, measurements, provider search, and verifier ranking.
+- Current invariants and fail-closed conditions: no-survivor asset pack, stale embedding, insufficient fit confidence, and protected prompt/source disclosure.
+- Current proof obligations: candidate recall, ranking explainability, selected-fit provenance, and source-safe preview inputs.
+- Current source-bearing implementation basis: ReadFitsFindingSynthesis, Depository search tools, embedding utilities, provider adapters, and ranking tests.
+- Current validating commands and parity basis: `pnpm run check:v43-gate4`, `pnpm run check:v43-gate9`, pipeline integration.
+- Current accepted boundaries: fit deposits remain source-safe until settlement unlock.
+
+### Selection and materialization
+
+- Current canonical objects and emitted artifacts: AssetPack preview, withheld source bundle, delivery receipt, repository pull request, PackActivity.
+- Current algorithms and derivation rules: synthesis uses selected fit context and accepted Need, preview hides source, finishing writes repository changes after settlement.
+- Current invariants and fail-closed conditions: unpaid source hidden, delivery lock mismatch, PR creation failure, and storage reconciliation drift.
+- Current proof obligations: preview/delivery boundary, repository delivery receipt, storage lock, and PackActivity update.
+- Current source-bearing implementation basis: asset-pack pipeline, pipeline hosts, repository provider integration, object storage.
+- Current validating commands and parity basis: package tests, route tests, rehearsal artifacts.
+- Current accepted boundaries: full source-bearing AssetPack appears only after paid rights transfer.
+
+### Identity, authorization, and sensitive flow
+
+- Current canonical objects and emitted artifacts: account, organization, wallet, repository authority, policy decision, settlement signer, role decision.
+- Current algorithms and derivation rules: account/org/wallet/repository authorization governs deposit, read, settlement, delivery, and activity access.
+- Current invariants and fail-closed conditions: authorization denial, missing wallet authority, invalid repository authority, and private key leakage.
+- Current proof obligations: policy proof, wallet boundary, repository permission proof, and redaction proof.
+- Current source-bearing implementation basis: auth adapters, policy packages, wallet/BTD packages, API middleware.
+- Current validating commands and parity basis: unit/API tests, V40 integration tests, V43 route tests.
+- Current accepted boundaries: no route owns private key material or cross-org source visibility.
+
+### Disclosure and projection
+
+- Current canonical objects and emitted artifacts: source-safe projection, preview metadata, expanded proof metadata, redaction receipt, PackActivity detail.
+- Current algorithms and derivation rules: disclosure tiers separate public, user-visible, buyer-visible, reviewer-visible, and operator-only data.
+- Current invariants and fail-closed conditions: public projection overexposure, raw prompt leak, provider response leak, unpaid source leak, and credentials leak.
+- Current proof obligations: redaction tests, source-safe artifacts, UI collapsed/expanded disclosure contract.
+- Current source-bearing implementation basis: route serializers, UI components, telemetry redactors, proof generators.
+- Current validating commands and parity basis: leak scans, uapi tests, browser screenshots, generated reports.
+- Current accepted boundaries: public docs may explain; product UI must disclose only operationally necessary source-safe data.
+
+### Settlement and exact accounting
+
+- Current canonical objects and emitted artifacts: quote, BTC payment observation, finality, BTD rights transfer, source-to-shares allocation, compensation receipt.
+- Current algorithms and derivation rules: deterministic quote uses measurement weight, measurement volume, and protocol fee allocation; source-to-shares uses exact accounting.
+- Current invariants and fail-closed conditions: settlement conservation drift, underpayment, overpayment, double delivery, and stale finality.
+- Current proof obligations: BTC fee conservation, BTD rights receipt, compensation route, ledger/database/storage reconciliation.
+- Current source-bearing implementation basis: BTD package, ledger writers, settlement observers, repair jobs.
+- Current validating commands and parity basis: BTD tests, route tests, rehearsal artifacts.
+- Current accepted boundaries: speculative deposit options may estimate BTD potential but do not receive final BTD rights until Need-Fit settlement law applies.
+
+### Proof contract, witnesses, and replay
+
+- Current canonical objects and emitted artifacts: proof family, theorem, witness, replay step, generated artifact, workflow result.
+- Current algorithms and derivation rules: every gate creates deterministic proof roots and replayable source-safe evidence.
+- Current invariants and fail-closed conditions: stale promoted status truth, artifact drift, missing witness, and unverifiable workflow.
+- Current proof obligations: proof families, members, theorems, witnesses, and replay.
+- Current source-bearing implementation basis: scripts, protocol package generators, workflow checks, test suites.
+- Current validating commands and parity basis: `pnpm run check:v43-gate1`, later gate checks, promotion readiness.
+- Current accepted boundaries: proof artifacts never serialize secrets or protected source.
+
+## V43 proof-family canon
+
+### Inference-synthesis
+
+- proofArtifactPath: `.bitcode/v43-inference-synthesis.json`
+- members: deposit-option-synthesis, read-need, read-fits, pack-preview
+- theoremIds: source-safe-option-synthesis, accepted-need-gated-fits, no-unpaid-source
+- replayStepIds: synthesize-deposit-options, synthesize-need, search-depository, preview-pack
+- witnessArtifactPaths: V43 gate artifacts
+- current member closure criteria: typed outputs, source-safe projections, and route readback
+- current member verdict shape: pass/fail with proof roots
+- current theorem-by-theorem closure reading: every synthesis step preserves disclosure boundary
+- current theorem-to-replay grouping: each theorem maps to a replay step
+- minimum artifact/replay binding set: route state, execution id, parser id, proof root
+- current proof-object fields: artifact id, version, route, phase, verdict, evidence root
+- generated-artifact and test bindings: V43 check scripts and package tests
+- fail-closed conditions: invalid deposit, prompt contract incompleteness, parsed-envelope inadmissibility, no-survivor asset pack
+
+### Prompt-completeness
+
+- proofArtifactPath: `.bitcode/v43-prompt-completeness.json`
+- members: depositor instructions, source criticality, demand posture, Reading pipelines
+- theoremIds: no-missing-route-prompt, no-raw-prompt-ui-leak
+- replayStepIds: prepare-context, run-failsafe, run-thricified, parse-output
+- witnessArtifactPaths: V41 prompt artifacts and V43 route prompt artifacts
+- current member closure criteria: registry binding and interpolation coverage
+- current member verdict shape: prompt id, prompt part ids, parser, redaction verdict
+- current theorem-by-theorem closure reading: every inference point resolves through registry primitives
+- current theorem-to-replay grouping: prompt route to inference chain
+- minimum artifact/replay binding set: prompt ids and parser ids
+- current proof-object fields: prompt family, route, disclosure tier
+- generated-artifact and test bindings: prompt benchmark checks
+- fail-closed conditions: prompt contract incompleteness and protected prompt overexposure
+
+### Static-code-analysis
+
+- proofArtifactPath: `.bitcode/v43-static-code-analysis.json`
+- members: route rename, component prefix, import casing, dead Exchange references
+- theoremIds: packs-name-totality, read-deposit-route-totality
+- replayStepIds: scan-routes, scan-components, scan-docs, scan-tests
+- witnessArtifactPaths: route vocabulary inventory
+- current member closure criteria: no forbidden product route references
+- current member verdict shape: file, token, status
+- current theorem-by-theorem closure reading: old names are migrated or explicitly retained as historical docs
+- current theorem-to-replay grouping: scan family by source kind
+- minimum artifact/replay binding set: file path and token
+- current proof-object fields: path, matched token, migration status
+- generated-artifact and test bindings: Gate 2 checker
+- fail-closed conditions: stale promoted status truth and route alias ambiguity
+
+### Verification-decisions
+
+- proofArtifactPath: `.bitcode/v43-verification-decisions.json`
+- members: deposit option review, Need review, fit selection, settlement review
+- theoremIds: human-approval-boundary, no-source-leak-before-pay
+- replayStepIds: review-option, accept-need, select-fits, settle-pack
+- witnessArtifactPaths: review receipts
+- current member closure criteria: every decision stores reason, actor, timestamp, and proof root
+- current member verdict shape: accepted, rejected, resynthesize, blocked
+- current theorem-by-theorem closure reading: user approval gates value-bearing transitions
+- current theorem-to-replay grouping: decision event to state transition
+- minimum artifact/replay binding set: actor, decision, state before/after
+- current proof-object fields: decision id, actor, route, root
+- generated-artifact and test bindings: route/API tests
+- fail-closed conditions: authorization denial and invalid deposit
+
+### Selection-and-materialization
+
+- proofArtifactPath: `.bitcode/v43-selection-materialization.json`
+- members: deposit option groups, selected fit set, AssetPack preview, delivery PR
+- theoremIds: source-pack-boundary, paid-delivery-only
+- replayStepIds: group-source, rank-fits, generate-preview, deliver-pr
+- witnessArtifactPaths: pack activity artifacts
+- current member closure criteria: materialized outputs are source-safe before settlement and source-bearing after rights
+- current member verdict shape: preview, locked, delivered, repaired
+- current theorem-by-theorem closure reading: delivery follows settlement and rights receipt
+- current theorem-to-replay grouping: pack id to lifecycle events
+- minimum artifact/replay binding set: pack id, storage root, ledger root
+- current proof-object fields: pack id, state, proof root
+- generated-artifact and test bindings: pack route tests
+- fail-closed conditions: no-survivor asset pack and delivery lock mismatch
+
+### Authorization-and-sensitive-flow
+
+- proofArtifactPath: `.bitcode/v43-authorization-sensitive-flow.json`
+- members: account, organization, repository, wallet, source visibility
+- theoremIds: principal-boundary, no-private-key-route
+- replayStepIds: authorize-deposit, authorize-read, authorize-settlement, authorize-detail
+- witnessArtifactPaths: policy receipts
+- current member closure criteria: every sensitive action has policy and redaction proof
+- current member verdict shape: allowed, denied, retry-required
+- current theorem-by-theorem closure reading: route access is policy-bound
+- current theorem-to-replay grouping: action to policy event
+- minimum artifact/replay binding set: subject, resource, action
+- current proof-object fields: subject, resource, action, decision
+- generated-artifact and test bindings: auth tests
+- fail-closed conditions: authorization denial and wallet private material visible
+
+### Settlement-source-to-shares
+
+- proofArtifactPath: `.bitcode/v43-settlement-source-to-shares.json`
+- members: quote, finality, rights transfer, depositor compensation
+- theoremIds: btc-conservation, source-share-allocation
+- replayStepIds: quote, observe-payment, transfer-rights, allocate-compensation
+- witnessArtifactPaths: settlement receipts
+- current member closure criteria: paid readback agrees across ledger/database/storage
+- current member verdict shape: pending, paid, final, repaired
+- current theorem-by-theorem closure reading: exact accounting preserves source-to-shares
+- current theorem-to-replay grouping: settlement id to accounting rows
+- minimum artifact/replay binding set: quote root, tx root, allocation root
+- current proof-object fields: settlement id, btc amount, roots
+- generated-artifact and test bindings: BTD tests
+- fail-closed conditions: settlement conservation drift
+
+### Disclosure-boundary
+
+- proofArtifactPath: `.bitcode/v43-disclosure-boundary.json`
+- members: product copy, preview metadata, expanded proof, pack detail
+- theoremIds: self-explanatory-without-overdisclosure, unpaid-source-hidden
+- replayStepIds: render-collapsed, expand-detail, leak-scan, export-proof
+- witnessArtifactPaths: browser and route artifacts
+- current member closure criteria: no protected values in source-safe tiers
+- current member verdict shape: source-safe, blocked
+- current theorem-by-theorem closure reading: clarity cannot be purchased by leaking source
+- current theorem-to-replay grouping: route state to visible fields
+- minimum artifact/replay binding set: route, tier, field inventory
+- current proof-object fields: route, field, disclosure tier
+- generated-artifact and test bindings: visual/leak tests
+- fail-closed conditions: public projection overexposure
+
+### Proof-contract
+
+- proofArtifactPath: `.bitcode/v43-proof-contract.json`
+- members: generated artifacts, workflows, promotion readiness
+- theoremIds: deterministic-artifact, promotion-readiness
+- replayStepIds: generate, check, promote
+- witnessArtifactPaths: `.bitcode/v43-spec-family-report.json`, `.bitcode/v43-canonical-input-report.json`
+- current member closure criteria: deterministic source-safe artifact generation
+- current member verdict shape: passed, failed
+- current theorem-by-theorem closure reading: promotion is blocked until every gate is closed
+- current theorem-to-replay grouping: gate artifact to workflow proof
+- minimum artifact/replay binding set: artifact path and command
+- current proof-object fields: path, digest, verdict
+- generated-artifact and test bindings: V43 check scripts
+- fail-closed conditions: stale promoted status truth
+
+## V43 generated canon
+
+### Inherited V19 reproducible-canon artifacts
+
+Inherited reproducibility remains binding.
+
+### Inherited V20 operator-quality artifacts
+
+Inherited operator-quality truth remains binding.
+
+### Exact generated-artifact inventory matrix
+
+| artifact | owner | status |
+| --- | --- | --- |
+| `.bitcode/v43-spec-family-report.json` | spec family | draft-required |
+| `.bitcode/v43-canonical-input-report.json` | canonical inputs | draft-required |
+
+### V43 specifying generated artifacts
+
+V43 starts with `.bitcode/v43-spec-family-report.json` and `.bitcode/v43-canonical-input-report.json`; later gates add route, pack, deposit, read, UX, rehearsal, and promotion artifacts.
+
+### Shared generated-artifact fields
+
+All artifacts include version, schema id, generatedAt, sourceSafetyVerdict, evidence roots, validationCommands, and aggregate proof verdict.
+
+### Artifact-specific generated payload fields
+
+V43 artifacts add route ids, pack activity ids, deposit option ids, review decisions, measurement roots, quote roots, settlement roots, delivery roots, and repair roots.
+
+### Artifact confidentiality and disclosability taxonomy
+
+Artifacts classify fields as public, user-visible, buyer-visible, reviewer-visible, operator-only, and withheld. They fail closed when protected source, raw prompt, raw provider response, credentials, wallet private material, or unpaid AssetPack source appears in source-safe tiers.
+
+### Minimum generated appendix rendered contents
+
+The V43 generated appendix must render 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 stale or unsafe.
+
+### Canonical regeneration and fail-closed posture
+
+Generation and check commands must be deterministic. Any stale artifact, missing witness, stale promoted status truth, or leak-shaped value fails closed.
+
+## V43 validation canon
+
+Gate 1 validates with `pnpm run check:v43-gate1`, `node scripts/check-bitcode-spec-family.mjs --version V43 --mode draft --current-target V42`, `node scripts/check-bitcode-canonical-inputs.mjs --current-target V42`, `node scripts/check-bitcode-canon-posture-drift.mjs --active-canon V42 --draft-target V43`, and `git diff --check`.
+
+## V43 promotion canon
+
+V43 promotion readiness canon is represented by
+`.bitcode/v43-promotion-readiness-report.json`. It binds Gate 1 through Gate 10
+artifact coverage, source-safety coverage, workflow coverage, promotion-script
+coverage, generated proof support, documentation evidence, and post-promotion
+runtime posture. Its accepted post-promotion posture is V43 active / draft V44,
+and its report is source-safe metadata only.
+
+V43 promotion must occur only after every gate is implemented, specified, tested, documented, source-safe, rehearsed, and green through maintained workflows. Promotion must create `BITCODE_SPEC_V43_PROVEN.md` and advance `BITCODE_SPEC.txt` to `V43`.
+
+## V43 appendices and canonical supporting material
+
+The appendices below make V43 auditable before implementation.
+
+## Appendix A. Canonical type and surface catalog
+
+Canonical types include PackActivity, PacksActivityDetail, DepositAssetPackOption, DepositOptionSynthesisRequest, SourceCriticalityDecision, DemandSignalSummary, PositiveRoiPosture, DepositOptionReviewDecision, ReadRouteSession, PackSettlementSummary, PackCompensationSummary, and PackRepairState.
+
+## Appendix B. Proof family closure catalog
+
+The proof family closure catalog binds the families above to route, pipeline, storage, ledger, telemetry, and generated proof obligations.
+
+## Exact proof-family inventory matrix
+
+| proofFamily | proofArtifactPath | memberIds | theoremIds | replayStepIds | witnessArtifactPaths | Current source basis |
+| --- | --- | --- | --- | --- | --- | --- |
+| Inference-synthesis | `.bitcode/v43-inference-synthesis.json` | deposit-option-synthesis/read-need/read-fits | source-safe-option-synthesis | synthesize-deposit-options/search-depository | V43 gate artifacts | pipeline packages |
+| Prompt-completeness | `.bitcode/v43-prompt-completeness.json` | prompts | no-missing-route-prompt | prepare-context | V41 prompt artifacts | prompt registries |
+| Static-code-analysis | `.bitcode/v43-static-code-analysis.json` | route tokens | packs-name-totality | scan-routes | route inventory | source tree |
+| Verification-decisions | `.bitcode/v43-verification-decisions.json` | reviews | human-approval-boundary | review-option | decision receipts | route APIs |
+| Selection-and-materialization | `.bitcode/v43-selection-materialization.json` | pack lifecycle | paid-delivery-only | deliver-pr | pack activity | asset-pack pipeline |
+| Authorization-and-sensitive-flow | `.bitcode/v43-authorization-sensitive-flow.json` | principals | principal-boundary | authorize-read | policy receipts | auth packages |
+| Settlement-source-to-shares | `.bitcode/v43-settlement-source-to-shares.json` | settlement | btc-conservation | allocate-compensation | settlement receipts | BTD package |
+| Disclosure-boundary | `.bitcode/v43-disclosure-boundary.json` | disclosure | unpaid-source-hidden | leak-scan | browser artifacts | route serializers |
+| Proof-contract | `.bitcode/v43-proof-contract.json` | artifacts | deterministic-artifact | promote | spec reports | scripts |
+
+## Appendix C. Generated artifact contract catalog
+
+### Inherited V19 reproducible-canon artifacts
+
+Inherited.
+
+### Inherited V20 operator-quality artifacts
+
+Inherited.
+
+### Exact generated-artifact inventory matrix
+
+| artifact | field | verdict |
+| --- | --- | --- |
+| `.bitcode/v43-spec-family-report.json` | aggregate proof verdict | draft-required |
+| `.bitcode/v43-canonical-input-report.json` | generated artifact inventories | draft-required |
+| `.bitcode/v43-canon-posture-drift-report.json` | active/draft posture | draft-required |
+| `.bitcode/v43-route-vocabulary-inventory.json` | route vocabulary inventory | closed |
+| `.bitcode/v43-packs-activity-master-detail.json` | pack activity master-detail | closed |
+| `.bitcode/v43-read-route-five-step-ux.json` | Reading route UX | closed |
+| `.bitcode/v43-deposit-route-options.json` | deposit option synthesis route | closed |
+| `.bitcode/v43-deposit-policy-compensation.json` | deposit policy and compensation | closed |
+| `.bitcode/v43-deposit-option-admission.json` | deposit option admission | closed |
+| `.bitcode/v43-route-ux-product-excellence.json` | shared product route UX | closed |
+| `.bitcode/v43-cross-route-rehearsal-telemetry-repair.json` | cross-route rehearsal and repair | closed |
+| `.bitcode/v43-promotion-readiness-report.json` | promotion readiness | closed |
+
+### V43 specifying generated artifacts
+
+`.bitcode/v43-spec-family-report.json` and `.bitcode/v43-canonical-input-report.json` are the opening artifacts.
+
+### Shared generated-artifact fields
+
+Version, digest, sourceSafetyVerdict, validationCommands, proof-source commit, and fail closed when stale.
+
+### Artifact-specific generated payload fields
+
+Route, pack, deposit option, read, settlement, compensation, delivery, repair, and proof roots.
+
+### Artifact confidentiality and disclosability taxonomy
+
+Source-safe metadata only until settlement unlock.
+
+### Minimum generated appendix rendered contents
+
+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, fail closed when stale.
+
+### Canonical regeneration and fail-closed posture
+
+Regeneration commands must be deterministic.
+
+## Appendix D. Validation and checking gate catalog
+
+Gate checks are `check:v43-gate1` through later V43 gate checks.
+
+## Appendix E. Current canonical source map
+
+V43 source work starts from V42 active canon, package protocol state, website route implementations, pipeline packages, BTD packages, and generated proof scripts.
+
+## Appendix F. Subsystem totality and derivability matrix
+
+V43 must cover 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
+
+V43 files are `BITCODE_SPEC_V43.md`, `BITCODE_SPEC_V43_DELTA.md`, `BITCODE_SPEC_V43_NOTES.md`, `BITCODE_SPEC_V43_PARITY_MATRIX.md`, and later `BITCODE_SPEC_V43_PROVEN.md`.
+
+## Appendix H. Operator surface and quality contract catalog
+
+Operator surfaces are `/packs`, `/read`, `/deposit`, retained internal/debug cockpit if any, rich execution stream rows, settlement panels, compensation panels, proof expansion, and repair views.
+
+## Appendix I. Scenario, workflow, and cross-product contract catalog
+
+Scenarios include auth-issuer-rollback, privacy-boundary-proof-export, polyglot-gateway-benchmark-remediation, auth-many-asset-normalization, Targeted deposit, Normalization deposit, patch, context, public, buyer, reviewer, internal, Openly writable, Measurably readable, Provable, and Valuable.
+
+## Appendix J. Fail-closed contract and error posture matrix
+
+V43 fails closed on invalid deposit, prompt contract incompleteness, parsed-envelope inadmissibility, no-survivor asset pack, authorization denial, public projection overexposure, settlement conservation drift, and stale promoted status truth.
+
+## Appendix K. Source-bearing AssetPack and artifact contract catalog
+
+Source-bearing 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`, and `BITCODE_SPEC_V43_PROVEN.md`.
+
+## V43 accepted boundaries and reopen conditions
+
+V43 may reopen route names, product state, pack activity, deposit option synthesis, UX layout, and proof surfaces. It may not reopen BTD supply law, BTC settlement conservation, source-to-shares accounting, source-safe disclosure, or demonstration/commercial boundary rules without an explicit later canon.
+
+## V43 completion condition
+
+V43 completes when `/packs`, `/read`, and `/deposit` are the default product paths; agentic deposit AssetPack option synthesis is specified and implemented; pack activity is searchable and inspectable; Reading remains settlement-gated and source-safe; UX is self-explanatory and polished; local/staging rehearsal proves the full cross-route path; and promotion readiness advances Bitcode to active V43 / draft V44.
diff --git a/BITCODE_SPEC_V43_DELTA.md b/BITCODE_SPEC_V43_DELTA.md
new file mode 100644
index 00000000..352ef788
--- /dev/null
+++ b/BITCODE_SPEC_V43_DELTA.md
@@ -0,0 +1,189 @@
+# Bitcode Spec V43 Delta
+
+## Status
+
+- Version: `V43`
+- V43 state: canonical promotion complete; this delta records the promoted V42-to-V43 product-route and agentic-depositing closure set
+- Current canonical/latest target: `V43`
+- Canonical proof-source commit: `3c7a9f998656635cc28c8b4584ae964ac04154fa`
+- Prior canonical anchor: `BITCODE_SPEC_V42.md`
+- Prior generated proof appendix: `BITCODE_SPEC_V42_PROVEN.md`
+- Generated structured artifact inventory: active canonical `.bitcode/v43-spec-family-report.json`, `.bitcode/v43-canonical-input-report.json`, `.bitcode/v43-canon-posture-drift-report.json`, `.bitcode/v43-route-vocabulary-inventory.json`, `.bitcode/v43-packs-activity-master-detail.json`, `.bitcode/v43-read-route-five-step-ux.json`, `.bitcode/v43-deposit-route-options.json`, `.bitcode/v43-deposit-policy-compensation.json`, `.bitcode/v43-deposit-option-admission.json`, `.bitcode/v43-route-ux-product-excellence.json`, `.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`, `.bitcode/v43-promotion-readiness-report.json`, V43 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V43_PROVEN.md` as the generated proof appendix for V43 promotion
+- Source parity state: V43 source-side route vocabulary, Packs master-detail, Read five-step UX, deposit option synthesis, deposit policy/compensation, deposit option admission, route UX, cross-route rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V43 file family
+- Scope: V43 canonical delta for product routes and agentic depositing over promoted V42 reliable MVP canon
+
+## Why V43 exists
+
+V42 proved the reliable MVP path, but the product route vocabulary is still transitional. V43 exists to make the commercial website experience match Bitcode's actual protocol objects: AssetPacks in and AssetPacks out, Reading through a clear `/read` path, Depositing through a clear `/deposit` path, and all activity through a searchable `/packs` surface.
+
+## Accepted V43 decisions
+
+1. `/exchange` becomes `/packs` across route names, component prefixes, tests, docs, telemetry labels, and operator vocabulary.
+2. `/terminal` splits into `/read` and `/deposit` as the default product paths; retained cockpit/debug surfaces must not be the main experience.
+3. `/packs` becomes the master-detail table for all pack activity, with search, filtering, sorting, and source-safe detail expansion.
+4. `/deposit` gains agentic deposit AssetPack option synthesis from connected source, depositor instructions, Depository state, and Reading demand.
+5. Deposit options must expose source-safe measurements, sub-criticality, demand, likely ROI, BTD potential, compensation posture, and admission blockers before approval.
+6. `/read` remains the five-step Reading path: request read, review synthesized Need, request Finding Fits, review source-safe AssetPack preview, settle/buy/deliver.
+7. Product UX outside public documentation must be self-explanatory through structure, labels, progressive detail, rich components, and visual quality, not self-referential copy.
+8. Gate 2 records the route vocabulary inventory in `.bitcode/v43-route-vocabulary-inventory.json` as source-safe file/token counts and a migration matrix only; the actual route rename and split remain owned by later gates.
+9. Gate 3 implements the first route migration slice: `/packs` becomes the pack-activity master-detail surface, `/api/packs/activity` projects source-safe PackActivity records, and `/exchange` redirects to `/packs`.
+10. Gate 9 binds the local and staging-testnet route path across `/deposit`,
+ `/read`, and `/packs` with source-safe rehearsal receipts, telemetry
+ readback, ledger/database/storage synchronization checks, repair posture,
+ and no value-bearing mainnet admission.
+11. Gate 10 binds V43 promotion readiness through
+ `.bitcode/v43-promotion-readiness-report.json`, `v43-canon-promotion.yml`,
+ V43 PROVEN generation support, promotion scripts support V43, and the
+ V43 active / draft V44 post-promotion posture.
+
+## Explicitly deferred
+
+- Value-bearing mainnet admission remains gated by a later canon.
+- Advanced conversational overlays are not the default V43 route experience unless a gate explicitly scopes them.
+- BTD supply law, BTC settlement conservation, source-to-shares accounting, and unpaid source disclosure boundaries remain inherited from V42/V27.
+
+## Pre-Implementation Sequence
+
+1. Open V43 spec family, roadmap, checker, package script, and workflow posture.
+2. Inventory current Exchange/Terminal naming and define route migration.
+3. Implement `/packs` data contracts and searchable master-detail.
+4. Extract `/read` from Terminal into the default Reading path.
+5. Implement `/deposit` and agentic deposit AssetPack option synthesis.
+6. Add criticality, demand, ROI, BTD potential, and compensation policy.
+7. Close deposit option review/admission and pack activity synchronization.
+8. Run UX/UI excellence pass and remove self-referential product copy.
+9. Rehearse cross-route local/staging-testnet path.
+10. Close promotion readiness.
+
+## Gate 2 delta closure
+
+Gate 2 adds `V43RouteVocabularyInventory`, the generated
+`.bitcode/v43-route-vocabulary-inventory.json` artifact, package exports,
+protocol tests, workflow checks, and `check:v43-gate2`. The artifact inventories
+`/exchange`, Exchange, `/terminal`, Terminal, `/packs`, `/read`, `/deposit`,
+Reading, Depositing, PackActivity, DepositAssetPackOption, and self-referential
+copy references with source-safe file/token counts. It also formalizes migration
+rows for `/packs`, `/read`, `/deposit`, retained debug cockpit boundaries,
+redirect compatibility, and product-copy cleanup without serializing source
+snippets or source-bearing payloads.
+
+## Gate 3 delta closure
+
+Gate 3 adds `V43PacksActivityMasterDetail`, the generated
+`.bitcode/v43-packs-activity-master-detail.json` artifact, package exports,
+protocol tests, workflow checks, the `PackActivityRecord` source-safe model,
+`/api/packs/activity`, the `/packs` route, compatibility redirect from
+`/exchange`, and no-source leak tests. The route supports search, filtering,
+column sorting, detail projection, proof roots, settlement/compensation/
+delivery/repair readback, and explicit source-safety flags without serializing
+protected source, unpaid AssetPack source, raw prompts, provider responses,
+credentials, wallet private material, or private settlement payloads.
+
+## Gate 4 delta closure
+
+Gate 4 adds `V43ReadRouteFiveStepUx`, the generated
+`.bitcode/v43-read-route-five-step-ux.json` artifact, package exports,
+protocol tests, workflow checks, `ReadRouteSession`, `/read`, and focused route
+tests. `/read` is now the default Reading path: request Read, review
+synthesized Need, request Finding Fits, review source-safe AssetPack preview,
+and settle/buy/deliver. Finding Fits remains blocked until a Need is accepted,
+preview remains metadata-only before settlement, and delivery remains locked
+until paid read rights are proven. The retained Terminal workbench stays
+debug-compatible and continues to provide execution stream readback.
+
+## Gate 5 delta closure
+
+Gate 5 adds `V43DepositRouteOptions`, the generated
+`.bitcode/v43-deposit-route-options.json` artifact, package exports, protocol
+tests, workflow checks, `DepositRouteSession`, `/deposit`, and focused route
+and asset-pack package tests. `/deposit` is now the default Depositing path:
+connect source, synthesize source-safe AssetPack options, review measurements,
+submit supply through the retained deposit composer, and reread Depository
+state. Source criticality, demand/ROI, compensation policy, deposit admission,
+and indexing remain explicit Gate 6/Gate 7 boundaries. The route and artifact
+remain source-safe metadata only.
+
+## Gate 6 delta closure
+
+Gate 6 adds `DepositAssetPackOptionPolicy`,
+`DepositAssetPackOptionPolicyReport`, the generated
+`.bitcode/v43-deposit-policy-compensation.json` artifact, package exports,
+protocol tests, workflow checks, `/deposit` policy readback, and focused
+route/package tests. The policy scores each source-safe deposit option for
+criticality, likely demand, estimated gross BTC value, development-cost ROI,
+estimate-only BTD potential, and future-reader BTC source-to-shares
+compensation route. Critical IP is blocked before admission, negative expected
+value is not reviewable as positive-ROI supply, and missing wallet posture
+requires compensation repair. Admission, Depository indexing, storage
+projection, `/packs` synchronization, and final approve/reject/resynthesize
+decisions remain Gate 7 boundaries.
+
+## Gate 7 delta closure
+
+Gate 7 adds `DepositAssetPackOptionAdmissionReport`,
+`DepositOptionAdmissionReceipt`, `DepositOptionReviewDecision`, the generated
+`.bitcode/v43-deposit-option-admission.json` artifact, package exports,
+protocol tests, workflow checks, `/deposit` approve/reject/resynthesize controls,
+admission readback, and `/packs` activity synchronization. Admission consumes
+source-safe option synthesis and policy reports; only depositor-approved,
+policy-eligible options enter the Depository. Admitted options project
+measurement/metadata indexes, object-storage metadata records, external
+raw-source pointer roots, BTC source-to-shares compensation preview continuity,
+and execution-stream telemetry. Gate 7 still does not mint BTD, transfer rights,
+or disclose unpaid AssetPack source; those boundaries stay with future
+Need-Fit settlement.
+
+## Gate 8 delta closure
+
+Gate 8 adds `ProductRouteShell`, `ProductRouteStepGrid`,
+`ProductRouteStatePanel`, `ProductRouteDisclosure`, the generated
+`.bitcode/v43-route-ux-product-excellence.json` artifact, package exports,
+protocol tests, workflow checks, route shell assertions, and focused
+`/packs`/`/read`/`/deposit` tests. The route clients now share a themed product
+frame, source-safe metrics, concise route summaries, keyboard-accessible step
+buttons, compact loading/empty/error states, and expandable disclosure
+boundaries. In-app route copy is reduced to workflow/status vocabulary; deeper
+protocol explanation stays in docs and generated proofs. Gate 8 keeps every
+existing V43 state machine and source-safety boundary intact.
+
+## Gate 9 delta closure
+
+Gate 9 adds `V43CrossRouteRehearsalTelemetryRepair`, the generated
+`.bitcode/v43-cross-route-rehearsal-telemetry-repair.json` artifact, package
+exports, protocol tests, workflow checks,
+`scripts/rehearse-v43-cross-route-product-flow.mjs`, and `check:v43-gate9`.
+The cross-route rehearsal covers local and staging-testnet lanes for
+`/deposit`, `/read`, and `/packs`: synthesize deposit options, approve an
+eligible option, request Reading, review a synthesized Need, request Finding
+Fits, preview source-safe AssetPack measurements, settle BTC/BTD rights,
+deliver a repository pull request, compensate contributing deposited sources,
+and inspect pack activity/repair readback. Operator receipts are source-safe
+metadata only and bind staging-testnet to Supabase project
+`tkpyosihuouusyaxtbau`; they never serialize secrets, protected source, raw
+prompts, provider responses, unpaid AssetPack source, wallet private material,
+private settlement payloads, or live rehearsal logs.
+
+## Gate 10: V43 Promotion Readiness
+
+Gate 10 adds `V43PromotionReadinessReport`, the generated
+`.bitcode/v43-promotion-readiness-report.json` artifact, package exports,
+protocol tests, `generate:v43-promotion-readiness`,
+`check:v43-promotion-readiness`, `check:v43-gate10`, V43 support in
+`promote-bitcode-canon.mjs`, V43 support in
+`prepare-bitcode-spec-family-promotion.mjs`, V43 support in generated PROVEN
+packages, V43 Gate 10 gate/canon workflow posture, and
+`.github/workflows/v43-canon-promotion.yml`.
+
+The closure acceptance is source-safe metadata only: every V43 gate artifact
+must be present, parseable, source-safe, deterministic under check mode, and
+bound to active V42 / draft V43 before promotion. The promotion workflow must
+produce V43 active / draft V44 posture, create `BITCODE_SPEC_V43_PROVEN.md`,
+and refuse promotion when any artifact, workflow, promotion script, generated
+proof output, documentation evidence, source-safety boundary, or value-bearing
+mainnet block is missing. Its validation commands are grouped and package
+validation commands are bounded so the promotion pull request remains
+inspectable and greenable under GitHub Actions.
+
+## Commit-Body Direction
+
+V43 gate commits should state the route/product surface changed, the protocol objects preserved, the proof/test commands run, and the source-safety boundaries maintained. Gate PR titles must begin with `V43 Gate N:`.
diff --git a/BITCODE_SPEC_V43_NOTES.md b/BITCODE_SPEC_V43_NOTES.md
new file mode 100644
index 00000000..4392a2f4
--- /dev/null
+++ b/BITCODE_SPEC_V43_NOTES.md
@@ -0,0 +1,169 @@
+# Bitcode Spec V43 Notes
+
+## Status
+
+- Version: `V43`
+- V43 state: canonical promotion complete; V43 notes record accepted route vocabulary, PackActivity, Reading, Depositing, policy, admission, UX, rehearsal, and promotion-readiness evidence
+- Current canonical/latest target: `V43`
+- Canonical proof-source commit: `3c7a9f998656635cc28c8b4584ae964ac04154fa`
+- Prior canonical anchor: `BITCODE_SPEC_V42.md`
+- Prior generated proof appendix: `BITCODE_SPEC_V42_PROVEN.md`
+- Generated structured artifact inventory: active canonical `.bitcode/v43-spec-family-report.json`, `.bitcode/v43-canonical-input-report.json`, `.bitcode/v43-canon-posture-drift-report.json`, `.bitcode/v43-route-vocabulary-inventory.json`, `.bitcode/v43-packs-activity-master-detail.json`, `.bitcode/v43-read-route-five-step-ux.json`, `.bitcode/v43-deposit-route-options.json`, `.bitcode/v43-deposit-policy-compensation.json`, `.bitcode/v43-deposit-option-admission.json`, `.bitcode/v43-route-ux-product-excellence.json`, `.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`, `.bitcode/v43-promotion-readiness-report.json`, V43 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V43_PROVEN.md` as the generated proof appendix for V43 promotion
+- Source parity state: V43 source-side route vocabulary, Packs master-detail, Read five-step UX, deposit option synthesis, deposit policy/compensation, deposit option admission, route UX, cross-route rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V43 file family
+- Scope: V43 canonical notes for product routes and agentic depositing over promoted V42 reliable MVP canon
+- Last fully realized canonical target preserved in source: `V43`
+
+## Notes companion rule
+
+These notes clarify V43 only. The active canon remains V42 until V43 promotion.
+
+## Concise current-system reading
+
+V42 made the reliable MVP path real enough to refine product shape. V43 should now remove transitional vocabulary and make the primary enterprise experience:
+
+- `/deposit`: connect source, synthesize deposit AssetPack options, review source-safe measurements and demand/ROI posture, approve or reject Depository admission.
+- `/read`: request technical knowledge, review synthesized Need, request Finding Fits, preview source-safe AssetPack measurements, settle in BTC/BTD, receive repository delivery.
+- `/packs`: inspect and search all pack activity, including deposit options, Depository admission, previews, settlement, rights transfer, compensation, delivery, proof roots, and repair states.
+
+The strongest simplification is AssetPacks in and AssetPacks out. Depositing creates AssetPacks for the Depository; Reading buys synthesized Need-Fit AssetPacks.
+
+## Simplified-spec reading rule
+
+When V43 work feels broad, reduce it to the route law:
+
+1. Packs is activity and inspection.
+2. Read is buying source-bearing technical knowledge after Need review and settlement.
+3. Deposit is selling source-derived AssetPack options only after depositor review and approval.
+4. Source is never disclosed before settlement and rights transfer.
+5. The UI should explain itself through the workflow, not through in-app essays.
+
+## V43 UX/product note
+
+The current UX is not good enough. V43 should keep strong themed components where they work, especially execution-log rows and proof expansion, but replace confusing cockpit flow with direct route paths and dense, legible master-detail surfaces.
+
+The `/packs` master table must support search over measurements, synthesized titles and descriptions, values, activity/transaction type, settlement state, compensation posture, proof roots, and repair state.
+
+## V43 agentic deposit note
+
+The deposit-side pipeline should help an enterprise decide what IP to sell. It should compare connected source, Depository supply, and Reading demand. It should propose multiple deposit AssetPack options, reject or warn on critical IP, estimate positive ROI where possible, expose BTD potential as an estimate only, and preserve final BTD mint/right law for paid Need-Fit settlement.
+
+Gate 5 implements the source-safe route and option-synthesis foundation only:
+`/deposit`, `DepositRouteSession`, and `DepositAssetPackOptionSynthesis`.
+Criticality, demand/ROI policy, compensation policy, admission, and indexing are
+deliberately carried as deferred boundaries for Gates 6 and 7. Product route
+state may show option measurements, source path roots, demand signal roots,
+review posture, and proof roots; it may not serialize raw source, unpaid
+AssetPack source, prompts, provider responses, credentials, or wallet private
+material.
+
+Gate 6 closes the criticality, demand, ROI, BTD-potential, and compensation
+policy layer without admitting source into the Depository. `DepositAssetPackOptionPolicyReport`
+is source-safe metadata: it records signal roots, policy decisions, expected net
+sats, estimate-only BTD posture, and future BTC source-to-shares compensation
+route. It must not serialize raw source, unpaid AssetPack source, prompts,
+provider responses, wallet private material, or private settlement payloads.
+Gate 7 remains responsible for depositor approval, reject/resynthesize
+decisions, Depository admission receipts, indexing, storage projection,
+telemetry, and `/packs` activity synchronization.
+
+Gate 7 closes depositor approval and admission as source-safe metadata.
+`DepositAssetPackOptionAdmissionReport` records review decisions, admission
+receipts, Depository index projections, object-storage metadata projections,
+BTC source-to-shares compensation preview continuity, execution-stream
+telemetry roots, and `/packs` synchronization as `depository-assetpack`
+activity. Rejected, pending, resynthesis-requested, or policy-blocked options
+must not enter the Depository. Admitted options still do not mint BTD, transfer
+rights, reveal unpaid AssetPack source, or serialize prompts, provider
+responses, wallet material, or private settlement payloads.
+
+Gate 8 closes the shared product route shell polish layer. `ProductRouteShell` now frames
+`/packs`, `/read`, and `/deposit`; `ProductRouteStepGrid` owns the Reading and
+Depositing step controls with active `aria-current` semantics; `ProductRouteStatePanel`
+normalizes loading, empty, and error states; and `ProductRouteDisclosure`
+keeps proof/source-safety detail expandable. Product route copy should stay
+concise: route labels, status summaries, metrics, and visible/withheld
+boundaries. Longer explanation belongs in public documentation and generated
+proofs, not the core product flow.
+
+Gate 9 closes the first cross-route rehearsal layer. `V43CrossRouteRehearsalTelemetryRepair`
+binds local and staging-testnet operator receipts across `/deposit`, `/read`,
+and `/packs`: deposit option synthesis/admission, Reading Need review, Finding
+Fits request, source-safe preview, BTC/BTD settlement, repository delivery,
+contributor compensation readback, pack activity inspection, and repair
+posture. The staging-testnet lane is explicitly bound to Supabase project
+`tkpyosihuouusyaxtbau` and requires real-inference, pipeline database
+streaming, Vercel Sandbox harness, and Supabase credential families without
+serializing credential values. Gate 9 telemetry/database/ledger/storage proof
+is source-safe metadata only: no protected source, unpaid AssetPack source,
+raw prompts, interpolated prompts, raw provider responses, wallet private
+material, private settlement payloads, or live rehearsal logs may enter the
+generated artifact or operator receipts.
+
+## Gate 10: V43 Promotion Readiness
+
+Gate 10 closes the V43 draft branch as promotion-ready without itself advancing
+`BITCODE_SPEC.txt`. `V43PromotionReadinessReport` binds every V43 artifact,
+workflow, documentation update, package export, package test, promotion script,
+generated PROVEN hook, and source-safety boundary needed for the eventual
+`version/v43` to `main` promotion pull request.
+
+The expected post-promotion runtime posture is active V43 / draft V44. The
+promotion workflow must generate `BITCODE_SPEC_V43_PROVEN.md`, prepare the
+runtime canon files, advance `BITCODE_SPEC.txt` to `V43`, and then verify the
+posture drift and canonical inputs. The promotion validation shell groups every
+promotion command and bounds package validations so greenable promotion failures
+identify the failing proof surface instead of hanging opaquely. The readiness
+report remains source-safe
+metadata only; if a secret, protected source body, raw prompt/provider payload,
+unpaid AssetPack source, wallet private material, or value-bearing mainnet
+admission appears in the proof, promotion remains blocked.
+
+## V43 copy boundary
+
+Outside public docs, avoid self-referential copy such as text explaining that a component is powerful or that Bitcode is doing a thing. Use clear route names, labels, status rows, measurement summaries, empty states, and expandable proof metadata. Public docs may explain the protocol; product UI should operate it.
+
+## Gate 2 route vocabulary inventory note
+
+Gate 2 closes by proving the current vocabulary surface before renaming it. The
+source-safe `.bitcode/v43-route-vocabulary-inventory.json` artifact records
+file/token counts for `/exchange`, Exchange, `/terminal`, Terminal, `/packs`,
+`/read`, `/deposit`, Reading, Depositing, PackActivity,
+DepositAssetPackOption, and self-referential copy references. Its migration
+matrix prepares `/packs`, `/read`, `/deposit`, retained debug cockpit,
+redirect compatibility, and later copy-removal work. The artifact is metadata
+only; it intentionally excludes source snippets, raw prompts, provider
+responses, protected source, unpaid AssetPack source, credentials, and wallet
+or settlement private material.
+
+## Gate 3 packs activity master-detail note
+
+Gate 3 closes the first product-route implementation slice. `/packs` now owns
+the pack activity master-detail surface and `/api/packs/activity` exposes a
+source-safe PackActivity projection over current activity. `/exchange` is
+retained only as a compatibility redirect into `/packs`.
+
+The route defaults to low-friction search and table scanning: search,
+activity-type filtering, state filtering, sort-key selection, ascending/
+descending sort, and selected detail readback. The detail projection surfaces
+overview, measurements, value signals, proof roots, settlement state,
+compensation state, delivery state, repair state, and redacted metadata. It is
+explicitly source-safe: no protected source, unpaid AssetPack source, source
+snippets, raw prompts, interpolated prompts, raw provider responses,
+credentials, wallet private material, or private settlement payloads may cross
+this boundary.
+
+## Gate 4 read route extraction note
+
+Gate 4 makes `/read` the direct product path for enterprise Reading. The route
+owns `ReadRouteSession` and the five-stage user flow: request Read, review the
+synthesized Need, request Finding Fits, review the source-safe AssetPack
+preview, and settle for delivery. It reuses the current live Reading workbench
+and rich execution stream so runtime behavior stays connected to V42 pipeline
+reality while the route vocabulary becomes clearer.
+
+The source-safety law is unchanged: `/read` may show request summaries, Need
+measurements, fit ids, proof roots, quality posture, BTC fee quotes,
+settlement state, and delivery posture before settlement. It must not show
+protected source, unpaid AssetPack source, raw prompts, interpolated prompts,
+raw provider responses, wallet private material, private settlement payloads,
+or ledger write authority before paid read rights are proven.
diff --git a/BITCODE_SPEC_V43_PARITY_MATRIX.md b/BITCODE_SPEC_V43_PARITY_MATRIX.md
new file mode 100644
index 00000000..cbbec4c5
--- /dev/null
+++ b/BITCODE_SPEC_V43_PARITY_MATRIX.md
@@ -0,0 +1,93 @@
+# Bitcode Spec V43 Parity Matrix
+
+## Status
+
+- Version: `V43`
+- V43 state: canonical promotion complete; V43 parity truth, generated product-route artifacts, gate closure, and promotion automation are aligned
+- Current canonical/latest target: `V43`
+- Canonical proof-source commit: `3c7a9f998656635cc28c8b4584ae964ac04154fa`
+- Prior canonical anchor: `BITCODE_SPEC_V42.md`
+- Prior generated proof appendix: `BITCODE_SPEC_V42_PROVEN.md`
+- Generated structured artifact inventory: active canonical `.bitcode/v43-spec-family-report.json`, `.bitcode/v43-canonical-input-report.json`, `.bitcode/v43-canon-posture-drift-report.json`, `.bitcode/v43-route-vocabulary-inventory.json`, `.bitcode/v43-packs-activity-master-detail.json`, `.bitcode/v43-read-route-five-step-ux.json`, `.bitcode/v43-deposit-route-options.json`, `.bitcode/v43-deposit-policy-compensation.json`, `.bitcode/v43-deposit-option-admission.json`, `.bitcode/v43-route-ux-product-excellence.json`, `.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`, `.bitcode/v43-promotion-readiness-report.json`, V43 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V43_PROVEN.md` as the generated proof appendix for V43 promotion
+- Source parity state: V43 source-side route vocabulary, Packs master-detail, Read five-step UX, deposit option synthesis, deposit policy/compensation, deposit option admission, route UX, cross-route rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V43 file family
+- Scope: V43 canonical parity ledger for product routes and agentic depositing over promoted V42 reliable MVP canon
+- Last fully realized canonical target preserved in source: `V43`
+
+## Purpose
+
+This matrix tracks V43 parity from product-route specification through source implementation, tests, generated artifacts, and promotion readiness.
+
+## Audit basis
+
+Audit V43 against `BITCODE_SPEC_V43.md`, V42 active canon, route source, package source, generated artifacts, workflow checks, and local/staging rehearsal receipts.
+
+## V43 implementation matrix
+
+| Area | Required V43 result | Source evidence | Judgment |
+| --- | --- | --- | --- |
+| Gate 1 roadmap | Active V42 / draft V43 posture, route vocabulary, gate plan, docs, checker, workflows | `BITCODE_SPEC_V43.md`, `scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs` | implemented |
+| Route vocabulary | `/exchange` to `/packs` and `/terminal` to `/read`/`/deposit` are inventoried with route vocabulary inventory, migration matrix, retained debug cockpit boundary, redirect compatibility, self-referential copy audit, and source-safe file/token counts | `packages/protocol/src/canonical/v43-route-vocabulary-inventory.js`, `.bitcode/v43-route-vocabulary-inventory.json`, `scripts/check-v43-gate2-route-vocabulary-inventory.mjs` | implemented |
+| Packs master-detail | Searchable, sortable, filterable pack activity table, source-safe detail route, proof-root display, settlement/compensation/delivery/repair readback, and `/exchange` compatibility redirect | `packages/protocol/src/canonical/v43-packs-activity-master-detail.js`, `.bitcode/v43-packs-activity-master-detail.json`, `uapi/app/packs`, `uapi/app/api/packs/activity/route.ts`, `uapi/components/base/bitcode/activity/pack-activity-model.ts` | implemented |
+| Read route | `ReadRouteSession` and five-step Reading UX own Read Request, synthesized Need review, accepted-Need-gated Finding Fits, source-safe AssetPack preview, BTC settlement, and delivery posture | `packages/protocol/src/canonical/v43-read-route-five-step-ux.js`, `.bitcode/v43-read-route-five-step-ux.json`, `uapi/app/read`, `uapi/app/read/read-route-model.ts` | implemented |
+| Deposit route | `DepositRouteSession`, `/deposit`, source-safe connected-source option synthesis, source-safe option cards, route tests, package tests, generated proof, and retained deposit composer reuse | `packages/protocol/src/canonical/v43-deposit-route-options.js`, `.bitcode/v43-deposit-route-options.json`, `uapi/app/deposit`, `packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts` | implemented |
+| Criticality/ROI policy | Source criticality, demand, ROI, BTD potential, and BTC source-to-shares compensation posture | `packages/protocol/src/canonical/v43-deposit-policy-compensation.js`, `.bitcode/v43-deposit-policy-compensation.json`, `packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts`, `/deposit` policy readback | implemented |
+| Deposit option admission | Approved, policy-eligible deposit options enter source-safe Depository projections and `/packs` activity while rejected, resynthesis, pending, and policy-blocked options stay out | `packages/protocol/src/canonical/v43-deposit-option-admission.js`, `.bitcode/v43-deposit-option-admission.json`, `packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts`, `/deposit` admission readback, `/packs` activity model | implemented |
+| UX/UI product excellence | Self-explanatory, polished, progressive-detail UI without self-referential product copy | `packages/protocol/src/canonical/v43-route-ux-product-excellence.js`, `.bitcode/v43-route-ux-product-excellence.json`, `uapi/components/base/bitcode/routes/product-route-shell.tsx`, `/packs`, `/read`, `/deposit` route clients | implemented |
+| Cross-route rehearsal | Local/staging-testnet cross-route path verifies `/deposit`, `/read`, `/packs`, deposit admission, Reading Need review, Finding Fits, source-safe preview, settlement, compensation, delivery, telemetry/database readback, ledger/database/storage synchronization, and repair posture | `packages/protocol/src/canonical/v43-cross-route-rehearsal-telemetry-repair.js`, `.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`, `scripts/rehearse-v43-cross-route-product-flow.mjs` | implemented |
+| Promotion readiness | V43 generated proof and active V43 / draft V44 posture ready | `packages/protocol/src/canonical/v43-promotion-readiness-report.js`, `.bitcode/v43-promotion-readiness-report.json`, `.github/workflows/v43-canon-promotion.yml`, `scripts/check-v43-gate10-promotion-readiness.mjs` | closed |
+
+## V43 implementation checklist
+
+| Area | Closure requirement | Current judgment |
+| --- | --- | --- |
+| Specification family | V43 SPEC, DELTA, NOTES, PARITY files exist and pass spec-family check | closed |
+| Package script | `check:v43-gate1` through `check:v43-gate10` exist | closed |
+| Workflows | Gate/canon quality know active V42 / draft V43 and promoted V43 / draft V44 | closed |
+| Documentation | README and roadmap name V43 route/product scope and promotion readiness | closed |
+| Gate 2 package proof | `V43RouteVocabularyInventory` exports, generated artifact, package test, workflow checks, and `check:v43-gate2` exist | implemented |
+| Gate 3 PackActivity proof | `V43PacksActivityMasterDetail` exports, generated artifact, source-safe model/API/UI tests, workflow checks, and `check:v43-gate3` exist | implemented |
+| Gate 4 Read route proof | `V43ReadRouteFiveStepUx` exports, generated artifact, source-safe route model/UI tests, workflow checks, and `check:v43-gate4` exist | implemented |
+| Gate 5 Deposit route proof | `V43DepositRouteOptions` exports, generated artifact, source-safe route model/UI tests, asset-pack option synthesis tests, workflow checks, and `check:v43-gate5` exist | implemented |
+| Gate 6 Deposit policy proof | `DepositAssetPackOptionPolicyReport`, generated artifact, source-safe route model/UI tests, asset-pack policy tests, workflow checks, and `check:v43-gate6` exist | implemented |
+| Gate 7 Deposit option admission proof | `DepositAssetPackOptionAdmissionReport`, generated artifact, source-safe route model/UI tests, asset-pack admission tests, PackActivity sync tests, workflow checks, and `check:v43-gate7` exist | implemented |
+| Gate 8 route UX proof | `ProductRouteShell`, `ProductRouteStepGrid`, `ProductRouteStatePanel`, `ProductRouteDisclosure`, generated artifact, source-safe route shell tests, workflow checks, and `check:v43-gate8` exist | implemented |
+| Gate 9 rehearsal proof | `V43CrossRouteRehearsalTelemetryRepair`, generated artifact, source-safe operator script, focused checks, workflow checks, and `check:v43-gate9` exist | implemented |
+| Gate 10 promotion proof | `V43PromotionReadinessReport`, generated artifact, source-safe promotion workflow, promotion scripts, generated PROVEN support, workflow checks, and `check:v43-gate10` exist | closed |
+| Implementation | Route and pipeline source changes are not part of Gates 1 or 2; Gate 3 implements only `/packs` and PackActivity; Gate 4 implements `/read`; Gate 5 implements `/deposit` option synthesis; Gate 6 implements policy scoring; Gate 7 implements depositor decisions, admission receipts, index/storage projections, telemetry, and `/packs` synchronization; Gate 8 implements shared route UX only; Gate 9 implements source-safe cross-route proof/rehearsal only | accepted boundary |
+
+## Gate 10 Promotion readiness parity
+
+V43 Gate 10 is closed when `.bitcode/v43-promotion-readiness-report.json`
+covers every V43 gate artifact, generated proof output, workflow, promotion
+script, package export, protocol test, documentation evidence, source-safety
+boundary, and active V43 / draft V44 post-promotion posture. The readiness
+artifact is source-safe metadata only and keeps value-bearing mainnet blocked.
+
+## V43 accepted boundaries
+
+Gate 1 is allowed to specify and wire validation posture only. Gate 2 is allowed
+to inventory and plan migration only. Gate 3 may implement `/packs`,
+PackActivity, and `/exchange` compatibility redirect only. It must not extract
+`/read`, extract `/deposit`, or add deposit option synthesis behavior before
+their owning implementation gates. Gate 5 may implement `/deposit` and
+source-safe option synthesis. Gate 6 may decide source-safe criticality, demand,
+ROI, BTD potential, and compensation posture, but it must not approve, admit,
+index, store, or synchronize deposit AssetPacks into `/packs`; those remain Gate
+7 responsibilities. Gate 7 may approve, reject, request resynthesis, admit
+policy-eligible options, project source-safe index/storage metadata, and
+synchronize admitted options into `/packs`; it must not mint BTD, transfer
+rights, broadcast settlement, or disclose unpaid AssetPack source.
+Gate 8 may refine route layout, concise copy, shared components, accessible
+step controls, progressive detail, and loading/empty/error states, but it must
+not move state-machine authority, change settlement law, or disclose protected
+source.
+Gate 9 may bind the local/staging-testnet route path, source-safe operator
+receipts, telemetry/database readback, ledger/database/storage synchronization,
+and repair posture. It must not serialize live secrets, protected source,
+unpaid AssetPack source, raw prompts, provider responses, private wallet
+material, private settlement payloads, or live rehearsal logs, and it must not
+admit value-bearing mainnet execution.
+
+## V43 completion condition
+
+The matrix is complete when every V43 gate row is closed with source, tests, documentation, generated artifacts, and promotion proof.
diff --git a/BITCODE_SPEC_V43_PROVEN.md b/BITCODE_SPEC_V43_PROVEN.md
new file mode 100644
index 00000000..554b07b7
--- /dev/null
+++ b/BITCODE_SPEC_V43_PROVEN.md
@@ -0,0 +1,2648 @@
+# Bitcode Spec V43 Proven
+
+- canonicalVersion: `V43`
+- canonicalCommit: `3c7a9f998656635cc28c8b4584ae964ac04154fa`
+- canonicalCommitRecordedAt: `2026-05-29T15:19:41-03:00`
+- worktreeState: `clean`
+- generatorId: `bitcode.proven-generator.v1`
+- generatedAt: `2026-05-29T15:19:41-03:00`
+- outputPath: `BITCODE_SPEC_V43_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:8e1854b4887cd4e44ca89fea4f5b9653aaf8f998f06d59bedb7aa8992982b313` | 3311 |
+| `.bitcode/v19-deterministic-replay-report.json` | `sha256:cfaebb27ab7152d6752f77771de87373a1d03a2cb61aea48e043fda93d27a93f` | 8459 |
+| `.bitcode/v19-negative-proof-mutation-matrix.json` | `sha256:71a0866dd6a31f8ba8488c4ae634deed227e0dcefac111978115bf0626bb0266` | 8085 |
+| `.bitcode/v19-proof-member-semantic-matrix.json` | `sha256:5914a1a339178d1d4611279d96145c34a9fc65a16a3c2ca54fdbc9407fff589e` | 1815750 |
+| `.bitcode/v19-state-machine-matrix.json` | `sha256:d45bba02682d73301deec3c50b03028ed9f2c4d74b4b40bc40d36b2e71f806c7` | 154965 |
+| `.bitcode/v19-theorem-evidence-matrix.json` | `sha256:173f1da5d0ead6322a3fc7e88b6d16e060ee52c659552958c899b19d52db11e0` | 2405676 |
+| `.bitcode/v19-volatility-inventory.json` | `sha256:cd9a744d487e044cd04f7eaa3f0c36aed97cc1cc83680cf9eaa206584c59bc3c` | 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:8e1854b4887cd4e44ca89fea4f5b9653aaf8f998f06d59bedb7aa8992982b313` | `sha256:8e1854b4887cd4e44ca89fea4f5b9653aaf8f998f06d59bedb7aa8992982b313` | `true` |
+| `.bitcode/v19-negative-proof-mutation-matrix.json` | `sha256:71a0866dd6a31f8ba8488c4ae634deed227e0dcefac111978115bf0626bb0266` | `sha256:71a0866dd6a31f8ba8488c4ae634deed227e0dcefac111978115bf0626bb0266` | `true` |
+| `.bitcode/v19-proof-member-semantic-matrix.json` | `sha256:5914a1a339178d1d4611279d96145c34a9fc65a16a3c2ca54fdbc9407fff589e` | `sha256:5914a1a339178d1d4611279d96145c34a9fc65a16a3c2ca54fdbc9407fff589e` | `true` |
+| `.bitcode/v19-state-machine-matrix.json` | `sha256:d45bba02682d73301deec3c50b03028ed9f2c4d74b4b40bc40d36b2e71f806c7` | `sha256:d45bba02682d73301deec3c50b03028ed9f2c4d74b4b40bc40d36b2e71f806c7` | `true` |
+| `.bitcode/v19-theorem-evidence-matrix.json` | `sha256:173f1da5d0ead6322a3fc7e88b6d16e060ee52c659552958c899b19d52db11e0` | `sha256:173f1da5d0ead6322a3fc7e88b6d16e060ee52c659552958c899b19d52db11e0` | `true` |
+| `.bitcode/v19-volatility-inventory.json` | `sha256:cd9a744d487e044cd04f7eaa3f0c36aed97cc1cc83680cf9eaa206584c59bc3c` | `sha256:cd9a744d487e044cd04f7eaa3f0c36aed97cc1cc83680cf9eaa206584c59bc3c` | `true` |
+| `_legacy/ENGI_SPEC_V19_PROVEN.md` | `sha256:584dcab2c210d564b9e0ec887dad7a751f8bbaa214bff2ddb6858c60992e59d7` | `sha256:584dcab2c210d564b9e0ec887dad7a751f8bbaa214bff2ddb6858c60992e59d7` | `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 |
+
+## V43 Promotion Readiness
+
+- reportId: `v43-promotion-readiness-report`
+- sourceSafe: `true`
+- passed: `true`
+- failureCount: `0`
+- prePromotionPosture: `V42 active / V43 draft`
+- postPromotionPosture: `V43 active / V44 draft`
+
+| artifactPath | digest | byteLength |
+| --- | --- | --- |
+| `.bitcode/v43-canon-posture-drift-report.json` | `sha256:c477e68b55c8a6ba6a75bf31db9559b0cf156e4b54b80497279aeb04962007fe` | 2809 |
+| `.bitcode/v43-canonical-input-report.json` | `sha256:6eb795a19901060e09a9a35af9270252f15bf7ae66fbf5b2514ebedb59bb9da2` | 632 |
+| `.bitcode/v43-promotion-readiness-report.json` | `sha256:2dd174033874ab6b11291231d3f282e250fd07b76ea664409049051c9f96ff51` | 18023 |
+| `.bitcode/v43-spec-family-report.json` | `sha256:c6b43e987fe531db7da45d1c50a4d6f68dd5030e0f4d56db33911664bed0c179` | 1010 |
+
+## V20 Operator Quality Reports
+
+### V20 Generated Quality Artifact Inventory
+
+| artifactPath | digest | byteLength |
+| --- | --- | --- |
+| `.bitcode/v20-accessibility-report.json` | `sha256:e3715bc43f2387f1561ff733be58f72a4c8380a6bc636b6778d9ada2344245b0` | 8210 |
+| `.bitcode/v20-operator-acceptance-transcript.json` | `sha256:29eebe53d0235110855527c5cbd6aa9c8152692ac00b97ba036953ab9b91daad` | 10913 |
+| `.bitcode/v20-performance-budget-report.json` | `sha256:2023750243c186804191642e9afc4b66a54d295d6a47e1dbdd9d6266262f9119` | 5038 |
+| `.bitcode/v20-projection-quality-smoke-matrix.json` | `sha256:87ebe3e23c0b398050a80a37496ebc03763ae6eef7e7bf022eb44aabfc6fbab1` | 4935 |
+| `.bitcode/v20-quality-summary.json` | `sha256:76de10a9e0d8f633d0777c6e05389310f5a54238b8bedb353c625a0484c6967a` | 4464 |
+| `.bitcode/v20-visual-regression-report.json` | `sha256:5b990df2fc7f18f966d375d5ed5ca00758075dd2b997d59eaa7bc198be5c2a9d` | 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:7941d034b4e2be44f16bd59ee628e674d29854bddf91c50efb9845657a22ffa1` | `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:1648ca0c3664b182d69079c6dd9957b929fbdf7a15e9f828fd00b8cabc4c1070` | `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:e042cb5490fbb52da9986bedb6ac6bcf1954be1dcf9a11b64dfd896718838c2e` | `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:60a2779f7957b2c41e29e6fe308fe3ef7fc3513c54495e7fe5c01cadf4febe53` | `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:f1673f54bfc2ebb068f7fcd699eeab040c73cfcded7ffa1edab37e7a7b207538` | `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:ea73506167b12ee483f482b4acfccfd5cb37ca5b3b779055cc3afcc318421c0e` | `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:f1673f54bfc2ebb068f7fcd699eeab040c73cfcded7ffa1edab37e7a7b207538` | `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:ea73506167b12ee483f482b4acfccfd5cb37ca5b3b779055cc3afcc318421c0e` | `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:9a29c90f54bae45a7836217f59b4bdcc812d05bdaaac92bc6d919c5e2ff82ecb` | `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:100d283db30a0d95a9c297b0878425a1bb62fccdc50372c405de8778f9466f8d` | `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:9a29c90f54bae45a7836217f59b4bdcc812d05bdaaac92bc6d919c5e2ff82ecb` | `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:100d283db30a0d95a9c297b0878425a1bb62fccdc50372c405de8778f9466f8d` | `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:8def4952ba84a586ae145252da0f6326af7b413d5fe458ccde10b4787e5e724f` | `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:526b7afdd212d8ba03c4ffae8cd28590c54a59a7c1697ebcaa9e8534b1864bee` | `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:8def4952ba84a586ae145252da0f6326af7b413d5fe458ccde10b4787e5e724f` | `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:526b7afdd212d8ba03c4ffae8cd28590c54a59a7c1697ebcaa9e8534b1864bee` | `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:e5f761d06ddc597ef2d5ef2c2e41ba8942ea46e4b256cceac54d3395a3613dc3` | `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:846fde03492ab54eecae7aba39d56c1c3e68ea190fb573a200b59e13d3992189` | `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:e5f761d06ddc597ef2d5ef2c2e41ba8942ea46e4b256cceac54d3395a3613dc3` | `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:846fde03492ab54eecae7aba39d56c1c3e68ea190fb573a200b59e13d3992189` | `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:26f908cd36d867610beb2a2b84f84049457748dea868c9e742e0ca429f434072` | `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:f28e1535d63f2c2149428da826efe71f223c57c2f0d7092a03fc5aa196da38b8` | `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:26f908cd36d867610beb2a2b84f84049457748dea868c9e742e0ca429f434072` | `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:f28e1535d63f2c2149428da826efe71f223c57c2f0d7092a03fc5aa196da38b8` | `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:2bfd0d0be160c9822a9649e55c30cbb8d6863232ded49f75eccdd937bee809e4` | `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:3d50042bd48319fa84c9eca5976d2c33ed944aec74ccf23083fb8dc98112b98e` | `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:2bfd0d0be160c9822a9649e55c30cbb8d6863232ded49f75eccdd937bee809e4` | `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:3d50042bd48319fa84c9eca5976d2c33ed944aec74ccf23083fb8dc98112b98e` | `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:f3b6305c9acb49d8b248ea1e3746c8a7c923eedff25c94219fdfabaabaec57d1` | `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:eea877f5aaf78353eaee52f2a79c2b6a30b466feb48771848cc38f7c9fa2e6bc` | `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:f3b6305c9acb49d8b248ea1e3746c8a7c923eedff25c94219fdfabaabaec57d1` | `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:eea877f5aaf78353eaee52f2a79c2b6a30b466feb48771848cc38f7c9fa2e6bc` | `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/README.md b/README.md
index 1e31bd6a..12d5ed0a 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,24 @@
# Bitcode Repository
`BITCODE_SPEC.txt` is the canonical pointer for active-system work. It currently
-resolves to `V40`; V41 is the active draft target for Prompt and PromptPart
-excellence after the promoted exhaustive commercial application testing canon.
+resolves to `V42`; V43 is the active draft target for the Packs, Read, Deposit
+route model, agentic deposit AssetPack options, and product UX cleanup after the
+promoted reliable MVP experience canon.
## Current Product Posture
Bitcode is the protocol and the commercial source tree implements it in-place.
-The primary operator routes are:
+The promoted V42 operator route is still:
- `/terminal` for depositing, reading, transaction work, and protocol follow-through.
- `/auxillaries` for Wallet, Externals, Profile, and Interfaces support surfaces.
+The active V43 draft target moves the primary enterprise routes to:
+
+- `/packs` for searchable master-detail pack activity.
+- `/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.
+
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
Prompt, map registry composition and interpolation contracts, benchmark Reading
@@ -81,17 +88,197 @@ dry-run support, gate/canon workflow posture, active V41 / draft V42 runtime
preparation, and source-safe value-bearing mainnet blocking through
`generate:v41-promotion-readiness`, `check:v41-promotion-readiness`, and
`check:v41-gate9`.
-V42 is now roadmapped as the next MVP experience version: shortest-path
-Depositing with later BTC compensation, shortest-path Reading through
-Need review/resynthesis, Finding Fits, source-safe AssetPack preview,
-BTD/BTC settlement, repository delivery, and an AI-reading dominant
-demonstration whose AssetPack measurably improves an AI system beyond
-public-data-only performance.
-V43+ is roadmapped as the later agentic depositing evolution: repository
+V42 Gate 1 opens the reliable MVP experience specification family over active
+V41 with `check:v42-gate1`. V42 is scoped to shortest-path Depositing with
+later BTC compensation, shortest-path Reading through Need review/resynthesis,
+Finding Fits, source-safe AssetPack preview, BTD/BTC settlement, repository
+delivery, and an AI-reading dominant demonstration whose AssetPack measurably
+improves an AI system beyond public-data-only performance.
+V42 Gate 2 adds source-safe Depositing compensation visibility with
+`DepositorySupplyCompensationPreview`, deposit route compensation evidence,
+Terminal compensation roots, `.bitcode/v42-depositing-shortest-path.json`,
+and `check:v42-gate2`. Deposit admission remains pre-mint and pre-rights
+transfer; BTC source-to-shares allocation is only a later paid AssetPack
+settlement route.
+V42 Gate 3 adds the Reading shortest path state machine with
+`TerminalEnterpriseReadingRouteState`, recoverable transaction ids,
+`readingStage` hydration, retry/restart posture, source-safe failure repair,
+accepted-Need blockers, source-safe preview blockers,
+`.bitcode/v42-reading-shortest-path-state-machine.json`, and
+`check:v42-gate3`.
+V42 Gate 4 adds ReadNeed product closure with
+`ReadNeedReviewResynthesisRuntime`, source-safe storage projection,
+feedback/resynthesis lineage, accepted-Need Finding Fits admission,
+rejected Need blockers, PTRR/Failsafe/Thricified telemetry receipts,
+Terminal Need runtime readback,
+`.bitcode/v42-readneed-review-resynthesis-product-closure.json`, and
+`check:v42-gate4`.
+V42 Gate 5 adds Finding Fits preview and quote closure with
+accepted-Need-gated `ReadFitsFindingRuntime`, many-channel Depository search,
+selected-fit provenance, `AssetPackPreviewBoundary`, deterministic
+share-to-fee quote receipts, disclosure review, settlement instructions,
+delivery lock, harness evidence summaries, Terminal preview/quote/provenance
+readback, `.bitcode/v42-readfitsfinding-preview-quote.json`, and
+`check:v42-gate5`. The preview remains metadata-only before settlement:
+protected source, unpaid AssetPack source, wallet private material, private
+settlement payloads, credentials, raw protected prompts, and raw provider
+responses stay out of route and UI readback.
+V42 Gate 6 adds paid settlement, BTD rights transfer, source-to-shares
+compensation, and repository delivery closure with
+`AssetPackSettlementRightsDeliveryBoundary`,
+`.bitcode/v42-settlement-rights-delivery.json`, and `check:v42-gate6`.
+The boundary observes the quote payment, confirms BTC/testnet finality,
+allocates depositor compensation, records BTD read-right receipts, reconciles
+ledger/database/object-storage projections, and unlocks source-bearing
+pull-request delivery only after paid readback agrees. Route summaries and
+Terminal detail remain source-safe metadata: unpaid AssetPack source, wallet
+private material, private settlement payloads, credentials, raw protected
+prompts, and raw provider responses are withheld.
+V42 Gate 7 adds the AI-reading dominant demonstration MVP with
+`protocol-demonstration/src/ai-reading-demonstration.js`,
+`.bitcode/v42-ai-reading-demonstration.json`, and `check:v42-gate7`.
+It compares a public-data-only AI remediation answer against an
+AssetPack-enhanced answer after a reviewed local Need and local Finding Fits
+step select the deposited runbook AssetPack. The benchmark uplift is
+deterministic, the demonstration stays self-contained, and protected source
+remains withheld before settlement.
+V42 Gate 8 adds the local/staging-testnet full MVP rehearsal with
+`ReadingLocalStagingRehearsal`,
+`scripts/rehearse-v42-local-staging-mvp.mjs`,
+`.bitcode/v42-local-staging-mvp-rehearsal.json`, and `check:v42-gate8`.
+It binds Gates 2 through 7 into one source-safe operator path: deposit source,
+request read, review synthesized Need, request Finding Fits, review source-safe
+AssetPack preview and quote, buy/settle, receive repository delivery, and
+verify AI-reading uplift. The staging lane is bound to Supabase project
+`tkpyosihuouusyaxtbau`; operator receipts and generated artifacts never
+serialize secrets, protected source, raw prompts, provider responses, unpaid
+AssetPack source, wallet private material, private settlement payloads, or
+live rehearsal logs.
+V42 Gate 9 adds promotion readiness with `buildV42PromotionReadinessReport`,
+`.bitcode/v42-promotion-readiness-report.json`,
+`BITCODE_SPEC_V42_PROVEN.md`, `.github/workflows/v42-canon-promotion.yml`,
+`generate:v42-promotion-readiness`, `check:v42-promotion-readiness`, and
+`check:v42-gate9`.
+The report binds every V42 product artifact, workflow posture, promotion
+script, generated proof path, source-safety result, value-bearing mainnet
+block, and post-promotion V42 active / draft V43 runtime preparation.
+V43 Gate 1 opens the Packs, Read, Deposit roadmap over active V42 with
+`check:v43-gate1`. V43 owns the agentic depositing evolution: repository
agents synthesize deposit AssetPack options from connected enterprise code,
Depository state, and Reading demand; enterprises approve or reject
sub-critical positive-ROI options; `/terminal` separates into `/read` and
-`/deposit`; and `/exchange` is renamed to `/packs` across product naming.
+`/deposit`; and `/exchange` is renamed to `/packs` across routes, component
+prefixes, tests, docs, telemetry labels, and product naming.
+The V43 route model treats AssetPacks as the product object in and out:
+`/deposit` proposes deposit AssetPack options from source and Bitcode demand,
+`/read` buys synthesized Need-Fit AssetPacks, and `/packs` becomes the
+searchable master-detail activity surface for pack measurements, values,
+settlement posture, compensation, delivery, proofs, and repair.
+The `/packs` master view should sort, filter, and search over measurements,
+synthesized AssetPack titles and descriptions, values, activity or transaction
+type, settlement posture, compensation state, and proof roots, while its detail
+view exposes source-safe activity data, telemetry, ledger/database/storage
+synchronization, and expandable proof metadata.
+That later UX cleanup should remove self-referential product copy outside
+public docs and make Depositing, Reading, and Pack activity understandable
+through route structure, concise labels, progressive disclosure, and rich
+themed reusable components.
+V43 Gate 2 adds `V43RouteVocabularyInventory`,
+`.bitcode/v43-route-vocabulary-inventory.json`,
+`generate:v43-route-vocabulary-inventory`,
+`check:v43-route-vocabulary-inventory`, and `check:v43-gate2`. It inventories
+`/exchange`, Exchange, `/terminal`, Terminal, `/packs`, `/read`, `/deposit`,
+Reading, Depositing, PackActivity, DepositAssetPackOption, and
+self-referential copy references as source-safe file/token counts. It also
+records the migration matrix for `/packs`, `/read`, `/deposit`, retained debug
+cockpit boundaries, redirect compatibility, and later copy cleanup without
+renaming routes in Gate 2 or serializing source snippets, protected source, raw
+prompts, provider responses, unpaid AssetPack source, credentials, or wallet
+and settlement private material.
+V43 Gate 3 adds `V43PacksActivityMasterDetail`,
+`.bitcode/v43-packs-activity-master-detail.json`,
+`generate:v43-packs-activity-master-detail`,
+`check:v43-packs-activity-master-detail`, and `check:v43-gate3`. It implements
+`PackActivityRecord`, `/api/packs/activity`, `/packs`, `/exchange` to `/packs`
+compatibility redirection, search, type/state filtering, column sorting,
+detail projection, proof-root display, settlement/compensation/delivery/repair
+state readback, and no-source leak tests. The Packs projection remains
+source-safe metadata only and does not serialize protected source, unpaid
+AssetPack source, raw prompts, provider responses, credentials, wallet private
+material, or private settlement payloads.
+V43 Gate 4 adds `V43ReadRouteFiveStepUx`,
+`.bitcode/v43-read-route-five-step-ux.json`,
+`generate:v43-read-route-five-step-ux`,
+`check:v43-read-route-five-step-ux`, and `check:v43-gate4`. It implements
+`ReadRouteSession`, `/read`, source-safe route state, the five-step Reading UX,
+Need review, accepted-Need-gated Finding Fits, source-safe AssetPack preview,
+BTC settlement/delivery posture, retained execution stream readback, nav/footer
+route ownership, and focused tests. `/read` does not expose protected source,
+unpaid AssetPack source, raw prompts, interpolated prompts, raw provider
+responses, wallet private material, or private settlement payloads before paid
+read rights are proven.
+
+V43 Gate 5 adds `V43DepositRouteOptions`,
+`.bitcode/v43-deposit-route-options.json`,
+`generate:v43-deposit-route-options`,
+`check:v43-deposit-route-options`, and `check:v43-gate5`. It implements
+`DepositRouteSession`, `/deposit`, source-safe connected-source AssetPack option
+synthesis, option measurements, demand signal roots, retained deposit composer
+reuse, navigation/footer route ownership, and focused UAPI/package/protocol
+tests. `/deposit` does not decide source criticality, ROI, compensation policy,
+admission, or indexing; those stay deferred to V43 Gates 6 and 7.
+
+V43 Gate 6 adds `DepositAssetPackOptionPolicyReport`,
+`.bitcode/v43-deposit-policy-compensation.json`,
+`generate:v43-deposit-policy-compensation`,
+`check:v43-deposit-policy-compensation`, and `check:v43-gate6`. It implements
+source-safe policy scoring for source criticality, likely demand, estimated
+ROI, estimate-only BTD potential, and future-reader BTC source-to-shares
+compensation route. Critical source is blocked before admission, negative
+expected value is not treated as positive-ROI supply, and Gate 7 still owns
+approval, admission, indexing, storage projection, telemetry, and `/packs`
+activity synchronization.
+
+V43 Gate 7 adds `DepositAssetPackOptionAdmissionReport`,
+`.bitcode/v43-deposit-option-admission.json`,
+`generate:v43-deposit-option-admission`,
+`check:v43-deposit-option-admission`, and `check:v43-gate7`. It implements
+depositor approve/reject/resynthesis decisions, source-safe admission receipts,
+Depository index and storage projections, BTC source-to-shares compensation
+preview continuity, execution-stream telemetry, and `/packs`
+`depository-assetpack` synchronization for approved policy-eligible deposit
+options. It still does not mint BTD, transfer rights, or reveal unpaid
+AssetPack source.
+
+V43 Gate 8 adds `ProductRouteShell`, `ProductRouteStepGrid`,
+`ProductRouteStatePanel`, `ProductRouteDisclosure`,
+`.bitcode/v43-route-ux-product-excellence.json`,
+`generate:v43-route-ux-product-excellence`,
+`check:v43-route-ux-product-excellence`, and `check:v43-gate8`. It refines
+`/packs`, `/read`, and `/deposit` into a shared themed route frame with concise
+copy, source-safe route metrics, keyboard current-step semantics, loading/
+empty/error states, and progressive disclosure boundaries while keeping every
+Reading, Depositing, settlement, and source-safety invariant intact.
+
+V43 Gate 9 adds `V43CrossRouteRehearsalTelemetryRepair`,
+`.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`,
+`scripts/rehearse-v43-cross-route-product-flow.mjs`,
+`generate:v43-cross-route-rehearsal`, and `check:v43-gate9`. It binds the
+local and staging-testnet product route rehearsal across `/deposit`, `/read`,
+and `/packs`: deposit option synthesis/admission, Reading Need review, Finding
+Fits, source-safe AssetPack preview, BTC/BTD settlement, repository delivery,
+source-to-shares compensation readback, pack activity inspection, telemetry
+database readback, ledger/database/storage synchronization, and repair posture.
+The staging lane is bound to Supabase project `tkpyosihuouusyaxtbau`; receipts
+and generated artifacts remain source-safe metadata only.
+
+V43 Gate 10 adds `V43PromotionReadinessReport`,
+`.bitcode/v43-promotion-readiness-report.json`,
+`generate:v43-promotion-readiness`, `check:v43-promotion-readiness`,
+`check:v43-gate10`, and `v43-canon-promotion.yml`. It binds every V43 gate
+artifact, promotion script, generated PROVEN hook, workflow, source-safety
+boundary, documentation update, and post-promotion V43 active / draft V44
+runtime posture before the version branch can promote canon.
Exchange is inherited V36 canon: market-wide activity master-detail, buy/sell/
bid/ask/cancel/accept/settle/history flows, AssetPack range trading,
@@ -710,9 +897,9 @@ or promotion validation.
## Key Surfaces
- [BITCODE_SPEC.txt](BITCODE_SPEC.txt) is the canonical version pointer.
-- [BITCODE_SPEC_V39.md](BITCODE_SPEC_V39.md) is the active promoted spec family.
-- [BITCODE_SPEC_V40.md](BITCODE_SPEC_V40.md) is the active draft target.
-- [BITCODE_SPEC_V40_PARITY_MATRIX.md](BITCODE_SPEC_V40_PARITY_MATRIX.md) tracks V40 gate parity.
+- [BITCODE_SPEC_V41.md](BITCODE_SPEC_V41.md) is the active promoted spec family.
+- [BITCODE_SPEC_V42.md](BITCODE_SPEC_V42.md) is the active draft target.
+- [BITCODE_SPEC_V42_PARITY_MATRIX.md](BITCODE_SPEC_V42_PARITY_MATRIX.md) tracks V42 gate parity.
- [uapi/README.md](uapi/README.md) documents the commercial website/API surface.
- [uapi/app/terminal/README.md](uapi/app/terminal/README.md) documents Terminal.
- [uapi/app/exchange/README.md](uapi/app/exchange/README.md) documents Exchange.
@@ -760,4 +947,5 @@ Demonstration verification:
cd protocol-demonstration
pnpm test:integration
pnpm test:v28-mvp-qa
+pnpm test:v42-ai-reading-mvp
```
diff --git a/SPECIFICATIONS_ROADMAP.md b/SPECIFICATIONS_ROADMAP.md
index a47ba4f5..b727500c 100644
--- a/SPECIFICATIONS_ROADMAP.md
+++ b/SPECIFICATIONS_ROADMAP.md
@@ -2,12 +2,32 @@
## Status
-- Current active canonical pointer: `BITCODE_SPEC.txt` -> `V40`
-- Current active canon: `BITCODE_SPEC_V40.md`
-- Current draft target: `BITCODE_SPEC_V41.md`.
-- Current working gate: V41 Gate 9 Promotion Readiness.
-- Next queued gate after V41 Gate 9: V41 canonical promotion into `main`, then V42 MVP product experience opening.
-- Latest closed version: V40 Exhaustive Commercial Application Testing, which promoted test inventory, unit coverage, API integration contracts, Reading pipeline integration, Conversation/Terminal integration, browser E2E visual proof, ledger/database/storage/wallet/delivery synchronization, local/staging rehearsal automation, prompt benchmark smoke, and V40 promotion readiness.
+- Current active canonical pointer: `BITCODE_SPEC.txt` -> `V42`
+- Current active canon: `BITCODE_SPEC_V42.md`
+- Current draft target: `BITCODE_SPEC_V43.md`.
+- Current working gate: V43 Gate 10 Promotion Readiness.
+- Next queued work after V43 Gate 10: V43 canonical promotion PR into `main`, generated `BITCODE_SPEC_V43_PROVEN.md`, and active V43 / draft V44 preparation.
+- Latest closed version: V42 Reliable MVP Experience, which promoted shortest-path Depositing, five-step Reading, ReadNeed review/resynthesis, ReadFitsFinding source-safe preview and quote, settlement rights transfer, repository delivery, AI-reading demonstration, local/staging MVP rehearsal, and V42 promotion readiness.
+- Recent V42 canonical promotion anchor: V42 canonical promotion updated `BITCODE_SPEC.txt` to `V42`, generated `BITCODE_SPEC_V42_PROVEN.md`, preserved active V42 / draft V43 runtime posture, and closed reliable MVP experience canon.
+- Recent V42 opening anchor: reliable MVP experience opens over promoted V41 with V42 SPEC, DELTA, NOTES, and PARITY files, `check:v42-gate1`, active V41 / draft V42 posture, and a nine-gate plan for shortest-path Depositing, five-step Reading, ReadNeed product closure, ReadFitsFinding preview and quote closure, settlement and repository delivery, AI-reading demonstration, local/staging rehearsal, and promotion readiness.
+- V42 Gate 2 closure anchor: reliable MVP experience now owns source-safe Depositing compensation visibility through `DepositorySupplyCompensationPreview`, deposit route `depositoryEvidence.compensationPreview`, deterministic `.bitcode/v42-depositing-shortest-path.json`, route/API readiness checks, source validation, Depository search/vector/storage projection, source-to-shares compensation readback keys, Terminal compensation roots, focused package/protocol tests, workflow wiring, and `check:v42-gate2`.
+- V42 Gate 3 closure anchor: reliable MVP experience now owns the five-step Reading shortest path state machine through `TerminalEnterpriseReadingUxState`, `TerminalEnterpriseReadingRouteState`, recoverable transaction ids, `readingStage` route hydration, retry/restart posture, source-safe failure repair actions, accepted-Need blockers, source-safe preview blockers, rich Reading pipeline telemetry readback, deterministic `.bitcode/v42-reading-shortest-path-state-machine.json`, focused route/component/protocol tests, workflow wiring, and `check:v42-gate3`.
+- V42 Gate 4 closure anchor: reliable MVP experience now owns ReadNeed product closure through `ReadNeedReviewResynthesisRuntime`, source-safe storage projection, reviewed Need feedback/resynthesis lineage, accepted-Need Finding Fits admission, rejected Need blockers, PTRR/Failsafe/Thricified telemetry receipts, Terminal Need runtime/storage/telemetry readback, deterministic `.bitcode/v42-readneed-review-resynthesis-product-closure.json`, focused package/route/protocol tests, workflow wiring, and `check:v42-gate4`.
+- V42 Gate 5 closure anchor: reliable MVP experience now owns ReadFitsFinding preview and quote closure through accepted-Need-gated `ReadFitsFindingRuntime`, many-channel Depository search, selected-fit provenance, `AssetPackPreviewBoundary`, deterministic share-to-fee quote receipts, disclosure review, settlement instructions, delivery lock, harness evidence summaries, Terminal preview/quote/provenance readback, deterministic `.bitcode/v42-readfitsfinding-preview-quote.json`, focused package/route/protocol tests, workflow wiring, and `check:v42-gate5`.
+- V42 Gate 6 closure anchor: reliable MVP experience now owns settlement rights transfer and repository delivery closure through `AssetPackSettlementRightsDeliveryBoundary`, BTC payment observation/finality, BTD read and rights transfer receipts, source-to-shares compensation conservation, delivery unlock, ledger/database/object-storage reconciliation, live harness materialization, route settlement summaries, Terminal settlement rights readback, deterministic `.bitcode/v42-settlement-rights-delivery.json`, focused package/host/route/protocol tests, workflow wiring, and `check:v42-gate6`.
+- V42 Gate 7 closure anchor: reliable MVP experience now owns AI-reading demonstration proof through `protocol-demonstration/src/ai-reading-demonstration.js`, public-data-only baseline scoring, reviewed local ReadNeed synthesis, local Depository Finding Fits selection, source-safe AssetPack preview, AssetPack-enhanced AI-reading answer scoring, deterministic benchmark uplift, `.bitcode/v42-ai-reading-demonstration.json`, focused demonstration/protocol tests, workflow wiring, and `check:v42-gate7`.
+- V42 Gate 8 closure anchor: reliable MVP experience now owns local/staging-testnet full MVP rehearsal proof through `ReadingLocalStagingRehearsal`, source-safe V42 operator receipts, staging-testnet Supabase project `tkpyosihuouusyaxtbau`, Gates 2 through 7 generated artifact binding, deposit source, request read, review synthesized Need, request Finding Fits, review source-safe AssetPack preview and quote, buy/settle, receive repository delivery, rich telemetry/database readback, ledger/database/storage reconciliation, blocked value-bearing mainnet, deterministic `.bitcode/v42-local-staging-mvp-rehearsal.json`, focused package/protocol/UAPI checks, workflow wiring, and `check:v42-gate8`.
+- V42 Gate 9 closure anchor: reliable MVP experience now owns package-backed `V42PromotionReadinessReport`, deterministic `.bitcode/v42-promotion-readiness-report.json`, `BITCODE_SPEC_V42_PROVEN.md` generation support, `v42-canon-promotion.yml`, promotion command dry-run support, gate/canon workflow posture, active V42 / draft V43 runtime preparation, all V42 reliable MVP artifacts covered, source-safe, parseable, and workflow-bound, and value-bearing mainnet admission blocked through `check:v42-gate9`.
+- V43 Gate 2 closure anchor: route-product cleanup now owns package-backed `V43RouteVocabularyInventory`, deterministic `.bitcode/v43-route-vocabulary-inventory.json`, source-safe file/token counts across `/exchange`, Exchange, `/terminal`, Terminal, `/packs`, `/read`, `/deposit`, Reading, Depositing, PackActivity, DepositAssetPackOption, and self-referential copy references, a migration matrix for `/packs`, `/read`, `/deposit`, retained debug cockpit boundaries, redirect compatibility, and copy cleanup, package exports, protocol tests, workflow wiring, and `check:v43-gate2`.
+- V43 Gate 3 closure anchor: route-product cleanup now owns package-backed `V43PacksActivityMasterDetail`, deterministic `.bitcode/v43-packs-activity-master-detail.json`, `PackActivityRecord`, `PacksActivityDetail`, `/api/packs/activity`, `/packs` master-detail UI, `/exchange` compatibility redirect, search, type/state filtering, column sorting, proof-root display, settlement/compensation/delivery/repair readback, no-source leak tests, package exports, protocol tests, workflow wiring, and `check:v43-gate3`.
+- V43 Gate 4 closure anchor: route-product cleanup now owns package-backed `V43ReadRouteFiveStepUx`, deterministic `.bitcode/v43-read-route-five-step-ux.json`, `ReadRouteSession`, `/read`, five-step Reading UX, Read Request, synthesized Need review, accepted-Need-gated Finding Fits, source-safe AssetPack preview, BTC settlement/delivery posture, retained execution stream readback, route/nav/footer ownership, focused UAPI/protocol tests, workflow wiring, and `check:v43-gate4`.
+- V43 Gate 5 closure anchor: route-product cleanup now owns package-backed `V43DepositRouteOptions`, deterministic `.bitcode/v43-deposit-route-options.json`, `DepositRouteSession`, `/deposit`, five-step Depositing UX, connected-source option synthesis, `DepositAssetPackOptionSynthesis`, source-safe AssetPack option cards, option measurement roots, demand signal roots, retained deposit composer reuse, route/nav/footer ownership, focused UAPI/package/protocol tests, workflow wiring, and `check:v43-gate5`.
+- V43 Gate 6 closure anchor: route-product cleanup now owns package-backed `DepositAssetPackOptionPolicyReport`, deterministic `.bitcode/v43-deposit-policy-compensation.json`, source criticality scoring, likely demand scoring, deterministic estimated-gross-minus-development-cost ROI, estimate-only BTD potential, future-reader BTC source-to-shares compensation route preview, critical-source pre-admission blocking, `/deposit` policy readback, source-safe route/package/protocol tests, workflow wiring, and `check:v43-gate6`.
+- V43 Gate 7 closure anchor: route-product cleanup now owns package-backed `DepositAssetPackOptionAdmissionReport`, deterministic `.bitcode/v43-deposit-option-admission.json`, approve/reject/resynthesis review decisions, source-safe admission receipts, approved-policy-eligible Depository admission, semantic/lexical/metadata index projection, object-storage metadata and external source pointer projection, BTC source-to-shares compensation preview continuity, execution-stream telemetry, `/packs` `depository-assetpack` synchronization, focused route/package/activity/protocol tests, workflow wiring, and `check:v43-gate7`.
+- V43 Gate 8 closure anchor: route-product cleanup now owns shared `ProductRouteShell`, `ProductRouteStepGrid`, `ProductRouteStatePanel`, and `ProductRouteDisclosure` components, deterministic `.bitcode/v43-route-ux-product-excellence.json`, concise `/packs`, `/read`, and `/deposit` product route copy, keyboard current-step semantics, route loading/empty/error states, progressive source-safety disclosure, focused route/protocol tests, workflow wiring, and `check:v43-gate8`.
+- V43 Gate 9 closure anchor: route-product cleanup now owns package-backed `V43CrossRouteRehearsalTelemetryRepair`, deterministic `.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`, source-safe local/staging-testnet operator receipts, staging-testnet Supabase project `tkpyosihuouusyaxtbau`, `/deposit` option synthesis/admission, `/read` Need review and Finding Fits, source-safe AssetPack preview, BTC/BTD settlement rights transfer, repository delivery, source-to-shares compensation readback, `/packs` activity/repair inspection, telemetry/database readback, ledger/database/storage synchronization, workflow wiring, and `check:v43-gate9`.
+- V43 Gate 10 closure anchor: route-product cleanup now owns package-backed `V43PromotionReadinessReport`, deterministic `.bitcode/v43-promotion-readiness-report.json`, `BITCODE_SPEC_V43_PROVEN.md` generation support, `v43-canon-promotion.yml`, promotion command dry-run support, spec-family promotion support, gate/canon workflow posture, active V43 / draft V44 runtime preparation, all V43 product route artifacts covered, source-safe, parseable, and workflow-bound, and value-bearing mainnet admission blocked through `check:v43-gate10`.
+- Recent V41 closure anchor: V41 canonical promotion updated `BITCODE_SPEC.txt` to `V41`, generated `BITCODE_SPEC_V41_PROVEN.md`, preserved active V41 / draft V42 runtime posture, and closed prompt-program excellence canon.
- Recent V40 closure anchor: V40 canonical promotion updated `BITCODE_SPEC.txt` to `V40`, generated `BITCODE_SPEC_V40_PROVEN.md`, preserved active V40 / draft V41 runtime posture, and closed exhaustive commercial application testing canon.
- Recent V39 closure anchor: V39 canonical promotion updated `BITCODE_SPEC.txt` to `V39`, generated `BITCODE_SPEC_V39_PROVEN.md`, preserved active V39 / draft V40 runtime posture, and closed commercial Reading readiness canon.
- V39 Gate 9 closure anchor: commercial Reading readiness now owns package-backed `ReadingInterfaceProductParity`, deterministic `.bitcode/v39-interface-conversation-product-parity.json`, Terminal/Conversation/API/MCP/ChatGPT/package-consumer no-bypass rows, source-safe contract readback, BTD interface root composition, focused package/interface tests, and workflow wiring through `check:v39-gate9`.
@@ -33,9 +53,8 @@
- V41 Gate 7 closure anchor: prompt-program work now owns package-backed `V41ConversationToolInterfacePromptRewrite` source, deterministic `.bitcode/v41-conversation-tool-interface-prompt-rewrite.json`, 9 source-safe rewrite rows, 60 passing source predicates, Conversation PTRR PromptPart rewrites, Terminal conversation system prompt boundaries, rich execution-log prompt/result disclosure, DocCodeToolPrompt and ToolPromptRegistry hierarchy, MCP API/public API contract prompt posture, ChatGPT App action/tool prompt posture, Terminal/public summary source-safety, Gate 2 through Gate 6 dependency roots, V38 Conversation/tool parity binding, protocol tests, workflow wiring, and `check:v41-gate7`.
- V41 Gate 8 closure anchor: prompt-program work now owns package-backed `V41PromptProgramBenchmarkReport` source, deterministic `.bitcode/v41-prompt-program-benchmark-report.json`, 9 source-safe benchmark telemetry rows, post-rewrite PromptPart and Prompt deltas, benchmark fixture projections, prompt registry lineage, V38 PromptBenchmark/Failsafe/Thricified/inference telemetry roots, V39 operational repair readback roots, V40 prompt benchmark smoke roots, V41 Gate 2 through Gate 7 dependency roots, rich execution-log telemetry projections, repair hook and parsed-output redaction posture, protocol tests, workflow wiring, and `check:v41-gate8`.
- V41 Gate 9 closure anchor: prompt-program work now owns package-backed `V41PromotionReadinessReport` source, deterministic `.bitcode/v41-promotion-readiness-report.json`, `BITCODE_SPEC_V41_PROVEN.md` generation support, `v41-canon-promotion.yml`, promotion command dry-run support, gate/canon workflow posture, active V41 / draft V42 runtime preparation, all V41 prompt-program artifacts covered, source-safe, parseable, and workflow-bound, and value-bearing mainnet admission blocked through `check:v41-gate9`.
-- Forward planning note: V41 should focus singularly on Prompt and PromptPart implementation quality: prompts as programs. V38's inference correctness hardening and V40's testing/benchmark depth should empower V41 to examine every raw PromptPart, every composed Prompt, every benchmark, every meaningfully benchmarkable semantic part, title, template, interpolation contract, registry binding, inference callsite, and downstream parsed return type; then repartition, retitle, rewrite, catalogue, and validate them across Reading pipelines and conversational interactions. V41 should primarily harden `ReadNeedComprehensionSynthesis` and `ReadFitsFindingSynthesis` prompt surfaces while also covering conversational and other inference prompts with the same catalogue-and-benchmark discipline.
-- Forward planning note: V42 should focus on the reliable MVP product experience after V41's prompt-program hardening. Depositing should become the shortest path to adding any source material, proving its Depository admission, and later receiving BTC compensation when that deposit contributes to a synthesized AssetPack. Reading should become the shortest path to submitting a Read Request, reviewing or resynthesizing Bitcode's synthesized Need, requesting Finding Fits, reviewing source-safe AssetPack measurements and preview metadata, buying the AssetPack through BTD/BTC settlement semantics, and receiving post-settlement repository delivery. The demonstration should be AI-reading dominant: any deposit source can contribute proprietary or otherwise non-public training, prompt, context, or evaluation material to an AssetPack that measurably improves an AI system beyond a public-data-only baseline.
-- Forward planning note: V43+ should evolve the deposit side into an agentic AssetPack option experience for enterprises that own connected codebases. Bitcode Agents installed on an enterprise repository should compare the repository, the current Bitcode Depository, and current Reading activity to propose deposit AssetPack options: unminted AssetPacks in all but BTD that can later become BTD only when a Reader's industrial Need-Fit mints one. The deposit pipeline should optimize for enterprise IP governance by filtering out critical IP, estimating whether selling would be positive ROI against development cost and expected Read demand, and presenting everything else as approve/reject deposit options. The product route plan for that version is to split `/terminal` into `/read` for Reading and `/deposit` for agentic deposit AssetPack option review, and to rename `/exchange` to `/packs` across routes, code names, and docs.
+- Forward planning note: V43 is the active agentic deposit-side and route-product cleanup version after V42's reliable MVP promotion. Bitcode Agents installed on an enterprise repository should compare the repository, the current Bitcode Depository, and current Reading activity to propose deposit AssetPack options: unminted AssetPacks in all but BTD that can later become BTD only when a Reader's industrial Need-Fit mints one. The deposit pipeline should optimize for enterprise IP governance by filtering out critical IP, estimating whether selling would be positive ROI against development cost and expected Read demand, and presenting everything else as approve/reject deposit options.
+- Forward planning note: V43 treats AssetPacks as the in/out simplification for the product. Depositing turns connected source plus depositor instructions plus Bitcode's observed Needs into deposit AssetPack options for approval; Reading turns an accepted Need plus many fitted Depository AssetPacks into a source-safe preview, quote, settlement, rights transfer, and repository delivery. `/packs` replaces Exchange naming as the master-detail activity route: the master view is a searchable, sortable, filterable table over activity, synthesized AssetPack titles/descriptions, measurements, values, transaction types, settlement posture, and compensation state; the detail view shows the selected activity with expandable proof, ledger, telemetry, and payload readback. Product surfaces outside public documentation should avoid self-referential explanatory copy and instead make the core actions self-evident through route structure, labels, progressive detail, and proof-on-expand.
- V34 Gate 2 closure anchor: deployment-depth now owns package-backed `DeploymentHostCapabilityCatalog` and `EnvironmentLaneContract` source, deterministic `.bitcode/v34-deployment-host-capability-catalog.json` and `.bitcode/v34-environment-lane-contracts.json`, and visible `value-bearing-mainnet` blocking through `blocked_future_canon_required`.
- V34 Gate 3 closure anchor: deployment-depth now owns package-backed `DistributedExecutionRuntimeReceipt` source, deterministic `.bitcode/v34-distributed-execution-runtime-receipts.json`, `request_response_not_required` long-running work posture, and source-safe roots for pipeline, PTRR agent, ThricifiedGeneration, tool, ledger, wallet, proof, object-storage, and repair work.
- V34 Gate 4 closure anchor: deployment-depth now owns package-backed `DeploymentStoragePosture` source, deterministic `.bitcode/v34-deployment-storage-posture.json`, ledger/database/object-storage drift repair fixtures, retention/encryption/backup/rollback/audit posture, and source-bearing AssetPack storage remains locked before settlement.
@@ -106,9 +125,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_V40.md`, with companion `DELTA`, `NOTES`, `PARITY_MATRIX`, and `PROVEN` files.
-- Promoted Bitcode history: `BITCODE_SPEC_V26.md` through `BITCODE_SPEC_V39.md`, with companion `DELTA`, `NOTES`, `PARITY_MATRIX`, and `PROVEN` files.
-- Draft and future Bitcode specifications: `BITCODE_SPEC_V41.md`, with companion `DELTA`, `NOTES`, and `PARITY_MATRIX` files, as the active draft target over promoted V40; planned V42 follows V41 as the MVP Depositing, Reading, and AI-reading demonstration experience version.
+- Active Bitcode specifications: `BITCODE_SPEC_V42.md`, with companion `DELTA`, `NOTES`, `PARITY_MATRIX`, and `PROVEN` files.
+- Promoted Bitcode history: `BITCODE_SPEC_V26.md` through `BITCODE_SPEC_V41.md`, with companion `DELTA`, `NOTES`, `PARITY_MATRIX`, and `PROVEN` files.
+- Draft and future Bitcode specifications: `BITCODE_SPEC_V43.md`, with companion `DELTA`, `NOTES`, and `PARITY_MATRIX` files, as the active draft target over promoted V42; planned V44+ follows V43 after route cleanup, pack activity, and agentic deposit option synthesis.
- Specification discipline references: `BITCODE_SPECIFYING.md` and `BITCODE_SPEC_TEMPLATEGUIDE.md`.
## Roadmap
@@ -154,10 +173,10 @@ They are referenced here for specification history only; active implementation w
| V37 | `BITCODE_SPEC_V37.md` | promoted historical Bitcode canon | Website Conversations after V36: website conversation interface, stream UI/event contracts, fullscreen writing mode, conversation-to-Terminal handoff, source selectors, route-local chat history, persistence/privacy/redaction, telemetry/proof/docs, and any conversational UX not covered by the V28 ChatGPT App MVP. |
| V38 | `BITCODE_SPEC_V38.md` | promoted historical Bitcode canon | Inference correctness after V37: pipeline execution call stack, PTRR agents, FailsafeGenerationSequence over ThricifiedGeneration, prompt registry composition, PromptPart and Prompt benchmarking, Reading pipeline inference, ReadFitsFindingSynthesis depository search and embeddings, source-safe inference telemetry, local/staging rehearsal, and promotion readiness. |
| V39 | `BITCODE_SPEC_V39.md` | promoted historical Bitcode canon | Commercial Reading readiness after V38: Depository supply indexing, enterprise five-step Reading UX, ReadNeed review/resynthesis, ReadFitsFinding many-candidate runtime and replay, source-safe AssetPack preview and deterministic BTC quote, settlement, BTD rights transfer, post-settlement delivery, ledger/database/storage synchronization, operational telemetry/repair, interface parity, local/staging rehearsal, and promotion readiness. |
-| V40 | `BITCODE_SPEC_V40.md` | active canon | Exhaustive commercial application testing depth after V39: rich browser E2E for all website interactions and state possibilities, visual/screenshot comparison coverage, API and integration suites for pipelines, conversations, routes, ledger/database/storage synchronization, unit coverage for packages, primitives, isolated implementations, real commercial implementations, local/staging rehearsal automation, prompt benchmark smoke, and promotion readiness. |
-| V41 | `BITCODE_SPEC_V41.md` | active draft target | Prompt and PromptPart excellence, treating prompts as programs: audit every raw PromptPart and composed Prompt, run and harden benchmarks, repartition prompts into meaningfully benchmarkable semantic parts, retitle and rewrite PromptParts/Prompts where optimal, catalogue registry bindings, interpolation contracts, benchmark fixtures, benchmark outputs, inference callsites, and parsed return types, and elevate all Reading and Conversation inference points after V38 inference scaffolding and V40 testing depth make that work measurable. The primary surface is Reading, especially `ReadNeedComprehensionSynthesis` and `ReadFitsFindingSynthesis`; conversations and other inference prompts follow with the same benchmarkable catalogue discipline. |
-| V42 | `BITCODE_SPEC_V42.md` | planned future | 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+ | future specification family | planned future | Agentic enterprise deposit-side AssetPack option synthesis after the MVP paths are reliable: 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, and operator vocabulary. |
+| V40 | `BITCODE_SPEC_V40.md` | promoted historical Bitcode canon | Exhaustive commercial application testing depth after V39: rich browser E2E for all website interactions and state possibilities, visual/screenshot comparison coverage, API and integration suites for pipelines, conversations, routes, ledger/database/storage synchronization, unit coverage for packages, primitives, isolated implementations, real commercial implementations, local/staging rehearsal automation, prompt benchmark smoke, and promotion readiness. |
+| V41 | `BITCODE_SPEC_V41.md` | promoted historical Bitcode canon | Prompt and PromptPart excellence, treating prompts as programs: audit every raw PromptPart and composed Prompt, run and harden benchmarks, repartition prompts into meaningfully benchmarkable semantic parts, retitle and rewrite PromptParts/Prompts where optimal, catalogue registry bindings, interpolation contracts, benchmark fixtures, benchmark outputs, inference callsites, and parsed return types, and elevate all Reading and Conversation inference points after V38 inference scaffolding and V40 testing depth make that work measurable. The primary surface is Reading, especially `ReadNeedComprehensionSynthesis` and `ReadFitsFindingSynthesis`; conversations and other inference prompts follow with the same benchmarkable catalogue discipline. |
+| V42 | `BITCODE_SPEC_V42.md` | active 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` | active draft target | 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. |
## Current Planning Spine
@@ -176,16 +195,16 @@ They are referenced here for specification history only; active implementation w
13. V38 promoted inference correctness, Reading pipeline search, prompt benchmarking, source-safe inference telemetry, and the practical PTRR/Failsafe/Thricified call stack.
14. V39 promoted commercial Reading readiness: Depository supply indexing, enterprise Reading UX, accepted-Need-gated Finding Fits, AssetPack preview/quote, settlement, rights transfer, delivery, telemetry/repair, interface parity, local/staging rehearsal, and promotion readiness.
15. V40 promoted exhaustive testing for the rich commercial application: E2E, visual, screenshot comparison, interaction/state matrices, integration, unit coverage, ledger/storage synchronization, local/staging rehearsal automation, and prompt benchmark smoke across the website, APIs, pipelines, conversations, packages, primitives, and real implementations.
-16. V41 is the current prompts-as-programs draft target after V40: every PromptPart, Prompt composition, benchmark, meaningfully benchmarkable semantic division, title, template, interpolation contract, registry binding, inference callsite, benchmark result, and parsed return type should be examined and improved across Reading and Conversation inference, using V38's inference correctness scaffolding and V40's testing/benchmarking depth as the measurement base.
-17. V42 is planned as the reliable MVP experience version after V41: refine the shortest path to Depositing any source material and later receiving BTC compensation, refine the shortest path to Reading from request through synthesized Need review/resynthesis, Finding Fits, source-safe AssetPack preview, BTD/BTC purchase, settlement, and repository delivery, and ship a strong AI-reading dominant demonstration where Bitcode reads non-public technical intelligence into an AssetPack that measurably improves an AI system beyond a public-data-only baseline.
-18. V43+ is planned as the agentic deposit-side product evolution after the MVP paths are reliable: enterprises should get deposit AssetPack options synthesized from their connected repositories and Bitcode's observed Depository/Reading demand, then approve or reject source-safe, sub-critical, positive-ROI options for Depository admission.
+16. V41 promoted prompts-as-programs after V40: every PromptPart, Prompt composition, benchmark, meaningfully benchmarkable semantic division, title, template, interpolation contract, registry binding, inference callsite, benchmark result, and parsed return type was examined and improved across Reading and Conversation inference, using V38's inference correctness scaffolding and V40's testing/benchmarking depth as the measurement base.
+17. V42 promoted the reliable MVP experience after V41: shortest-path Depositing with later BTC compensation, five-step Reading from request through synthesized Need review/resynthesis, Finding Fits, source-safe AssetPack preview, BTD/BTC purchase, settlement, repository delivery, and a strong AI-reading dominant demonstration where Bitcode reads non-public technical intelligence into an AssetPack that measurably improves an AI system beyond a public-data-only baseline.
+18. V43 is the active agentic deposit-side and route-product cleanup draft after the MVP paths became reliable: enterprises should 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` splits into `/read` and `/deposit`, and `/exchange` becomes `/packs`.
## 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.
-- V41+ work must build on V40 active canon and V27 `$BTD` law unless a future promoted spec explicitly supersedes it.
-- V42 is roadmap/planning only until V41 promotion opens it as the active draft target; V41 remains singularly scoped to Prompt and PromptPart excellence.
-- V43+ agentic depositing, `/read` and `/deposit` route separation, and `/packs` renaming are roadmap/planning only until a later version explicitly opens them; V41 remains singularly scoped to Prompt and PromptPart excellence.
+- V43 work must build on V42 active canon and V27 `$BTD` law unless a future promoted spec explicitly supersedes it.
+- V43 is the active draft target for agentic deposit-side AssetPack option synthesis, `/read` and `/deposit` route separation, `/packs` renaming, searchable pack activity master-detail, and UX/product cleanup.
+- V43 Gate 1 is specification/documentation/workflow posture only; V43 Gate 2 inventories route vocabulary and migration plans only. Later V43 gates own route migration, data models, pipelines, UI implementation, rehearsal, and promotion.
- 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/package.json b/package.json
index f4d44d0d..f778baa0 100644
--- a/package.json
+++ b/package.json
@@ -303,6 +303,61 @@
"generate:v41-promotion-readiness": "node scripts/generate-v41-promotion-readiness-report.mjs",
"check:v41-promotion-readiness": "node scripts/generate-v41-promotion-readiness-report.mjs --check",
"check:v41-gate9": "node scripts/check-v41-gate9-promotion-readiness.mjs",
+ "check:v42-gate1": "node scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs",
+ "generate:v42-depositing-shortest-path": "node scripts/generate-v42-depositing-shortest-path.mjs",
+ "check:v42-depositing-shortest-path": "node scripts/generate-v42-depositing-shortest-path.mjs --check",
+ "check:v42-gate2": "node scripts/check-v42-gate2-depositing-shortest-path.mjs",
+ "generate:v42-reading-shortest-path-state-machine": "node scripts/generate-v42-reading-shortest-path-state-machine.mjs",
+ "check:v42-reading-shortest-path-state-machine": "node scripts/generate-v42-reading-shortest-path-state-machine.mjs --check",
+ "check:v42-gate3": "node scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs",
+ "generate:v42-readneed-review-resynthesis-product-closure": "node scripts/generate-v42-readneed-review-resynthesis-product-closure.mjs",
+ "check:v42-readneed-review-resynthesis-product-closure": "node scripts/generate-v42-readneed-review-resynthesis-product-closure.mjs --check",
+ "check:v42-gate4": "node scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs",
+ "generate:v42-readfitsfinding-preview-quote": "node scripts/generate-v42-readfitsfinding-preview-quote.mjs",
+ "check:v42-readfitsfinding-preview-quote": "node scripts/generate-v42-readfitsfinding-preview-quote.mjs --check",
+ "check:v42-gate5": "node scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs",
+ "generate:v42-settlement-rights-delivery": "node scripts/generate-v42-settlement-rights-delivery.mjs",
+ "check:v42-settlement-rights-delivery": "node scripts/generate-v42-settlement-rights-delivery.mjs --check",
+ "check:v42-gate6": "node scripts/check-v42-gate6-settlement-rights-delivery.mjs",
+ "generate:v42-ai-reading-demonstration": "node scripts/generate-v42-ai-reading-demonstration.mjs",
+ "check:v42-ai-reading-demonstration": "node scripts/generate-v42-ai-reading-demonstration.mjs --check",
+ "check:v42-gate7": "node scripts/check-v42-gate7-ai-reading-demonstration.mjs",
+ "rehearse:v42-local-staging": "node scripts/rehearse-v42-local-staging-mvp.mjs",
+ "generate:v42-local-staging-mvp-rehearsal": "node scripts/generate-v42-local-staging-mvp-rehearsal.mjs",
+ "check:v42-local-staging-mvp-rehearsal": "node scripts/generate-v42-local-staging-mvp-rehearsal.mjs --check",
+ "check:v42-gate8": "node scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs",
+ "generate:v42-promotion-readiness": "node scripts/generate-v42-promotion-readiness-report.mjs",
+ "check:v42-promotion-readiness": "node scripts/generate-v42-promotion-readiness-report.mjs --check",
+ "check:v42-gate9": "node scripts/check-v42-gate9-promotion-readiness.mjs",
+ "check:v43-gate1": "node scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs",
+ "generate:v43-route-vocabulary-inventory": "node scripts/generate-v43-route-vocabulary-inventory.mjs",
+ "check:v43-route-vocabulary-inventory": "node scripts/generate-v43-route-vocabulary-inventory.mjs --check",
+ "check:v43-gate2": "node scripts/check-v43-gate2-route-vocabulary-inventory.mjs",
+ "generate:v43-packs-activity-master-detail": "node scripts/generate-v43-packs-activity-master-detail.mjs",
+ "check:v43-packs-activity-master-detail": "node scripts/generate-v43-packs-activity-master-detail.mjs --check",
+ "check:v43-gate3": "node scripts/check-v43-gate3-packs-activity-master-detail.mjs",
+ "generate:v43-read-route-five-step-ux": "node scripts/generate-v43-read-route-five-step-ux.mjs",
+ "check:v43-read-route-five-step-ux": "node scripts/generate-v43-read-route-five-step-ux.mjs --check",
+ "check:v43-gate4": "node scripts/check-v43-gate4-read-route-five-step-ux.mjs",
+ "generate:v43-deposit-route-options": "node scripts/generate-v43-deposit-route-options.mjs",
+ "check:v43-deposit-route-options": "node scripts/generate-v43-deposit-route-options.mjs --check",
+ "check:v43-gate5": "node scripts/check-v43-gate5-deposit-route-options.mjs",
+ "generate:v43-deposit-policy-compensation": "node scripts/generate-v43-deposit-policy-compensation.mjs",
+ "check:v43-deposit-policy-compensation": "node scripts/generate-v43-deposit-policy-compensation.mjs --check",
+ "check:v43-gate6": "node scripts/check-v43-gate6-deposit-policy-compensation.mjs",
+ "generate:v43-deposit-option-admission": "node scripts/generate-v43-deposit-option-admission.mjs",
+ "check:v43-deposit-option-admission": "node scripts/generate-v43-deposit-option-admission.mjs --check",
+ "check:v43-gate7": "node scripts/check-v43-gate7-deposit-option-admission.mjs",
+ "generate:v43-route-ux-product-excellence": "node scripts/generate-v43-route-ux-product-excellence.mjs",
+ "check:v43-route-ux-product-excellence": "node scripts/generate-v43-route-ux-product-excellence.mjs --check",
+ "check:v43-gate8": "node scripts/check-v43-gate8-route-ux-product-excellence.mjs",
+ "rehearse:v43-cross-route": "node scripts/rehearse-v43-cross-route-product-flow.mjs",
+ "generate:v43-cross-route-rehearsal": "node scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs",
+ "check:v43-cross-route-rehearsal": "node scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs --check",
+ "check:v43-gate9": "node scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs",
+ "generate:v43-promotion-readiness": "node scripts/generate-v43-promotion-readiness-report.mjs",
+ "check:v43-promotion-readiness": "node scripts/generate-v43-promotion-readiness-report.mjs --check",
+ "check:v43-gate10": "node scripts/check-v43-gate10-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/pipeline-hosts/src/__tests__/asset-pack-harness.test.ts b/packages/pipeline-hosts/src/__tests__/asset-pack-harness.test.ts
index 29e84e66..10a43257 100644
--- a/packages/pipeline-hosts/src/__tests__/asset-pack-harness.test.ts
+++ b/packages/pipeline-hosts/src/__tests__/asset-pack-harness.test.ts
@@ -163,8 +163,12 @@ describe('asset-pack sandbox harness plan', () => {
expect(source).toContain('pipeline-stream-event');
expect(source).toContain('synthesizeReadNeedForPipelineInput');
expect(source).toContain('buildAssetPackSourceSafePreview');
+ expect(source).toContain('buildAssetPackPreviewBoundary');
+ expect(source).toContain('persistAssetPackPreviewBoundary');
expect(source).toContain('buildAssetPackDisclosureReview');
expect(source).toContain('assertAssetPackDisclosureSourceSafe');
+ expect(source).toContain('buildAssetPackSettlementRightsDeliveryBoundary');
+ expect(source).toContain('persistAssetPackSettlementRightsDeliveryBoundary');
expect(source).toContain('buildAssetPackSettlementUnlock');
expect(source).toContain('applyAssetPackSettlementUnlockToPreview');
expect(source).toContain('acceptedReadNeed: readNeed');
@@ -212,6 +216,9 @@ describe('asset-pack sandbox harness plan', () => {
expect(source).toContain('asset_pack_source_safe_preview');
expect(source).toContain('staging-testnet-readback-');
expect(source).toContain("execution.store('asset-pack/settlement', 'ledgerDatabaseReconciliation'");
+ expect(source).toContain('assetPackSettlementRightsDeliveryBoundary');
+ expect(source).toContain('assetPackSettlementReplayReceipt');
+ expect(source).toContain('assetPackDeliveryUnlock');
expect(source).toContain("execution.store('asset-pack/settlement', 'organizationAuthority'");
expect(source).toContain('organizationAuthorityDecision');
expect(source).toContain('organizationAuthorityRoot');
diff --git a/packages/pipeline-hosts/src/asset-pack-harness.ts b/packages/pipeline-hosts/src/asset-pack-harness.ts
index d1d943ef..d0a64084 100644
--- a/packages/pipeline-hosts/src/asset-pack-harness.ts
+++ b/packages/pipeline-hosts/src/asset-pack-harness.ts
@@ -1678,10 +1678,14 @@ try {
assetPackPipeline,
acceptReadNeed,
buildAssetPackDisclosureReview,
+ buildAssetPackPreviewBoundary,
+ buildAssetPackSettlementRightsDeliveryBoundary,
buildAssetPackSourceSafePreview,
buildReadingPipelineObservabilityInventory,
assertAssetPackDisclosureSourceSafe,
isAcceptedReadNeed,
+ persistAssetPackPreviewBoundary,
+ persistAssetPackSettlementRightsDeliveryBoundary,
resolveReadingPipelineTelemetryProjection,
summarizeReadingPipelineObservabilityCoverage,
synthesizeReadNeedForPipelineInput,
@@ -1824,6 +1828,16 @@ try {
const sourceSafeDisclosureReview = buildAssetPackDisclosureReview({ preview: sourceSafePreview });
assertAssetPackDisclosureSourceSafe(sourceSafeDisclosureReview);
execution.store('asset-pack/preview', 'disclosureReview', sourceSafeDisclosureReview);
+ let assetPackPreviewBoundary = output?.assetPackPreviewBoundary || null;
+ if (!assetPackPreviewBoundary || assetPackPreviewBoundary.schema !== 'bitcode.asset-pack.preview-boundary') {
+ assetPackPreviewBoundary = buildAssetPackPreviewBoundary({
+ need: readNeed,
+ fitResult,
+ sourceSafePreview,
+ pullRequestTarget: pullRequestUrl || null,
+ });
+ }
+ persistAssetPackPreviewBoundary(execution, assetPackPreviewBoundary);
const pipelineResultReasons = Array.isArray(fitResult?.resultReasons)
? fitResult.resultReasons
: Array.isArray(depositorySearch?.resultReasons)
@@ -2014,26 +2028,64 @@ try {
reason: settlementUnlock.reason,
});
assertAssetPackDisclosureSourceSafe(assetPackDisclosureReview);
- const organizationAuthority = [
- evaluateBtdOrganizationInterfaceAuthority({
- actorId: userId || readerWalletId,
- organizationId: manifest.organizationId || manifest.organization?.id || 'staging-testnet-organization',
- organizationRole: 'admin',
- organizationPermissionGrants: ['asset_pack:deliver'],
- interfaceSurface: 'terminal',
- action: 'deliver_asset_pack',
- walletId: readerWalletId,
- targetAnchor: pullRequestUrl || null,
- readAccessDecision: settlementUnlock.sourceAvailable
- ? {
- decision: 'licensed_read',
- accessPolicyHash: ledgerSettlement.accessPolicyHash || sourceSafePreview?.accessPolicy?.accessPolicyHash || 'policy-pending',
- reason: settlementUnlock.reason,
- }
- : null,
- settlementState: settlementUnlock.sourceAvailable ? 'settled' : 'pending',
- confirmed: ledgerSettlement.settlementAdmissible === true,
- repairApprovalState: 'not_required',
+ const settlementFinalityConfirmed =
+ ledgerSettlement?.status === 'settled' && ledgerSettlement?.settlementAdmissible === true;
+ const settlementObservedSats =
+ Number(ledgerSettlement?.btcFee?.satsPaid || assetPackPreviewBoundary?.quoteReceipt?.sats || 0) ||
+ Number(assetPackPreviewBoundary?.quoteReceipt?.sats || 0);
+ const assetPackSettlementRightsDeliveryBoundary = assetPackPreviewBoundary
+ ? buildAssetPackSettlementRightsDeliveryBoundary({
+ previewBoundary: assetPackPreviewBoundary,
+ paymentObservation: {
+ paymentReceiptId: ledgerSettlement?.btcFeeReceiptId || undefined,
+ payerWalletId: readerWalletId,
+ payeeWalletId: depositorWalletId,
+ btcNetwork: ledgerSettlement?.btcFee?.network || 'testnet',
+ expectedSats: assetPackPreviewBoundary.quoteReceipt.sats,
+ observedDebitSats: settlementObservedSats,
+ observedCreditSats: settlementObservedSats,
+ txid:
+ ledgerSettlement?.btcFee?.txid ||
+ ledgerSettlement?.btcFeeReceiptId ||
+ 'staging-testnet-' + runId,
+ },
+ finality: {
+ finalityState: settlementFinalityConfirmed ? 'confirmed' : 'prepared',
+ confirmations: settlementFinalityConfirmed ? 1 : 0,
+ blockHeight: null,
+ },
+ readerWalletId,
+ depositorWalletId,
+ orderId: ledgerSettlement?.ownershipEventId || undefined,
+ readId: manifest.read?.id || runId,
+ readLicenseId: ledgerSettlement?.readLicenseId || undefined,
+ ledgerAnchorId: ledgerSettlement?.ledgerAnchorId || undefined,
+ pullRequestTarget: pullRequestUrl || null,
+ })
+ : null;
+ if (assetPackSettlementRightsDeliveryBoundary) {
+ persistAssetPackSettlementRightsDeliveryBoundary(execution, assetPackSettlementRightsDeliveryBoundary);
+ }
+ const organizationAuthority = [
+ evaluateBtdOrganizationInterfaceAuthority({
+ actorId: userId || readerWalletId,
+ organizationId: manifest.organizationId || manifest.organization?.id || 'staging-testnet-organization',
+ organizationRole: 'admin',
+ organizationPermissionGrants: ['asset_pack:deliver'],
+ interfaceSurface: 'terminal',
+ action: 'deliver_asset_pack',
+ walletId: readerWalletId,
+ targetAnchor: pullRequestUrl || null,
+ readAccessDecision: settlementUnlock.sourceAvailable
+ ? {
+ decision: 'licensed_read',
+ accessPolicyHash: ledgerSettlement.accessPolicyHash || sourceSafePreview?.accessPolicy?.accessPolicyHash || 'policy-pending',
+ reason: settlementUnlock.reason,
+ }
+ : null,
+ settlementState: settlementUnlock.sourceAvailable ? 'settled' : 'pending',
+ confirmed: ledgerSettlement.settlementAdmissible === true,
+ repairApprovalState: 'not_required',
}),
];
execution.store('asset-pack/preview', 'sourceSafe', settledSourceSafePreview);
@@ -2044,7 +2096,13 @@ try {
output = {
...(output || {}),
sourceSafePreview: settledSourceSafePreview,
+ assetPackPreviewBoundary,
assetPackDisclosureReview,
+ assetPackSettlementRightsDeliveryBoundary,
+ assetPackSettlementReplayReceipt: assetPackSettlementRightsDeliveryBoundary?.replayReceipt || null,
+ assetPackDeliveryUnlock: assetPackSettlementRightsDeliveryBoundary?.deliveryUnlock || null,
+ assetPackLedgerDatabaseStorageReconciliation:
+ assetPackSettlementRightsDeliveryBoundary?.reconciliationReport || null,
organizationAuthority,
ledgerSettlement: {
...ledgerSettlement,
@@ -2090,6 +2148,8 @@ try {
fitResult,
depositorySearch,
sourceSafePreview: settledSourceSafePreview,
+ assetPackPreviewBoundary,
+ assetPackSettlementRightsDeliveryBoundary,
assetPackDisclosureReview,
assetPackSynthesisArtifacts: output?.assetPackSynthesisArtifacts || null,
writtenAssets: output?.writtenAssets || null,
diff --git a/packages/pipelines/asset-pack/README.md b/packages/pipelines/asset-pack/README.md
index 021c0971..047c0290 100644
--- a/packages/pipelines/asset-pack/README.md
+++ b/packages/pipelines/asset-pack/README.md
@@ -98,8 +98,8 @@ deposited repository/material supply into searchable Depository records before
Finding Fits runs. A `DepositorySupplyIndex` contains `DepositorySupplyRecord`
entries with repository, branch, commit, proof root, measurement root,
reconciliation readback root, BTD range, depositor wallet boundary, source-safe
-search documents, vector projection rows, storage readback posture, and repair
-actions.
+search documents, vector projection rows, storage readback posture, source-safe
+compensation preview, and repair actions.
The index deliberately keeps protected source outside the serialized record.
Lexical, metadata, measurement, and vector search documents use source-safe
@@ -108,6 +108,16 @@ Rows with missing or invalid embeddings remain visible as repair posture through
`sync-active-embedding-vector-rows`; they are not treated as a fully searchable
vector corpus.
+Each supply record also carries a `DepositorySupplyCompensationPreview`. That
+preview tells the depositor how BTC can later route back through
+source-to-shares if the deposit is selected into a paid AssetPack, while making
+the pre-fit boundary explicit: deposit admission does not mint BTD, does not
+transfer BTD rights, and does not expose protected source or unpaid
+source-bearing AssetPack content. The preview records compensation route roots,
+source-to-shares preview roots, ledger account keys such as pending claims and
+eligible compensation routes, and repair posture when a depositor wallet,
+proof, measurement, or searchability requirement is missing.
+
`depositorySupplyAssetsFromIndex` converts indexed records into source-safe
`DepositoryAsset` candidates for `ReadFitsFindingSynthesis`. This handoff lets
Finding Fits rank Depository supply without importing raw source text, unpaid
@@ -129,6 +139,14 @@ for resynthesis. The runtime never serializes protected source, raw protected
prompts, raw provider responses, unpaid AssetPack source, credentials, wallet
private material, or private settlement payloads.
+V42 Gate 4 binds this runtime into product closure through
+`.bitcode/v42-readneed-review-resynthesis-product-closure.json` and
+`check:v42-gate4`. That proof requires all four review actions
+(`synthesize_read_need`, `resynthesize_read_need`, `accept_read_need`,
+`reject_read_need`), PTRR/Failsafe/Thricified telemetry receipts, source-safe
+storage projection, accepted-Need admission, rejected Need blockers, and
+Terminal runtime readback before Finding Fits can run.
+
## ReadFitsFinding Runtime
`ReadFitsFindingRuntime` is the source-safe package primitive that turns
@@ -167,6 +185,14 @@ wallet private material, private settlement payloads, credentials, or unpaid
source-bearing AssetPack content. Pull-request delivery remains withheld until
BTC settlement, BTD rights transfer, and ledger/database/storage readback agree.
+V42 Gate 5 binds this boundary into product closure through
+`.bitcode/v42-readfitsfinding-preview-quote.json` and `check:v42-gate5`.
+That proof requires accepted-Need admission, many-channel Depository search,
+candidate ranking, selected-fit provenance, deterministic quote receipts,
+source-safe disclosure review, settlement instructions, delivery lock, harness
+route summaries, Terminal preview/quote/provenance readback, and focused
+package/API/protocol tests before the paid boundary can proceed to Gate 6.
+
## Settlement Rights Delivery
`AssetPackSettlementRightsDeliveryBoundary` is the paid-boundary package
@@ -186,6 +212,15 @@ source, raw protected prompts, raw provider responses, wallet private material,
private settlement payloads, credentials, or unpaid source-bearing AssetPack
content.
+V42 Gate 6 binds Settlement Rights Delivery into product closure through
+`.bitcode/v42-settlement-rights-delivery.json` and `check:v42-gate6`.
+That proof requires paid BTC observation, finality gating, BTD rights transfer,
+source-to-shares conservation, repository delivery unlock,
+ledger/database/object-storage reconciliation, live harness materialization,
+route readback, Terminal readback, focused package/API/protocol tests, and
+source-safe docs before the paid AssetPack can cross the Reader visibility
+boundary.
+
## Operational Telemetry Repair Readback
`ReadingOperationalTelemetryRepairReadback` is the source-safe package
@@ -249,6 +284,16 @@ payloads are not serialized. Value-bearing mainnet admission remains blocked.
The source-safe artifact is `.bitcode/v39-local-staging-reading-rehearsal.json`,
checked by `pnpm run check:v39-gate10`.
+V42 Gate 8 reuses `ReadingLocalStagingRehearsal` as the package proof body for
+the reliable MVP local/staging full rehearsal. The V42 artifact
+`.bitcode/v42-local-staging-mvp-rehearsal.json` binds that package model to
+the closed V42 Depositing, Reading state, ReadNeed review/resynthesis, Finding
+Fits preview/quote, settlement rights delivery, and AI-reading demonstration
+artifacts. Use `pnpm run rehearse:v42-local-staging` for source-safe operator
+receipts and `pnpm run check:v42-gate8` for the full proof. Staging-testnet is
+bound to Supabase project `tkpyosihuouusyaxtbau`; value-bearing mainnet stays
+blocked, and generated rehearsal material remains metadata-only.
+
### Vector Embedding Contract
Depository vector recall uses the shared AssetPack embedding contract:
diff --git a/packages/pipelines/asset-pack/package.json b/packages/pipelines/asset-pack/package.json
index a3ccee2f..1a20b60d 100644
--- a/packages/pipelines/asset-pack/package.json
+++ b/packages/pipelines/asset-pack/package.json
@@ -12,6 +12,9 @@
"./reading-operational-telemetry-repair-readback": "./src/reading-operational-telemetry-repair-readback.ts",
"./reading-interface-product-parity": "./src/reading-interface-product-parity.ts",
"./reading-local-staging-rehearsal": "./src/reading-local-staging-rehearsal.ts",
+ "./deposit-asset-pack-options": "./src/deposit-asset-pack-options.ts",
+ "./deposit-asset-pack-option-policy": "./src/deposit-asset-pack-option-policy.ts",
+ "./deposit-asset-pack-option-admission": "./src/deposit-asset-pack-option-admission.ts",
"./read-need": "./src/read-need.ts",
"./read-need-review-resynthesis": "./src/read-need-review-resynthesis.ts",
"./read-fits-finding-runtime": "./src/read-fits-finding-runtime.ts",
diff --git a/packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts b/packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts
index 03287d3c..a0a641e5 100644
--- a/packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts
+++ b/packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts
@@ -191,9 +191,15 @@ describe('AssetPack preview quote boundary', () => {
expect(boundary.quoteReceipt.quoteRoot).toBe(boundary.sourceSafePreview.feeQuote.quoteRoot);
expect(boundary.quoteReceipt.sats).toBeGreaterThanOrEqual(546);
expect(boundary.quoteReceipt.quoteRoot).toBe(repeated.quoteReceipt.quoteRoot);
+ expect(boundary.quoteReceipt.deterministic).toBe(true);
+ expect(boundary.quoteReceipt.weightedAdmittedVolume).toBe(boundary.sourceSafePreview.feeQuote.weightedAdmittedVolume);
+ expect(boundary.settlementInstructions.sats).toBe(boundary.quoteReceipt.sats);
+ expect(boundary.settlementInstructions.quoteRoot).toBe(boundary.quoteReceipt.quoteRoot);
expect(boundary.proofRoots.boundaryRoot).toBe(repeated.proofRoots.boundaryRoot);
expect(boundary.selectedFitProvenance.selectedCandidates).toHaveLength(2);
expect(boundary.selectedFitProvenance.selectedCandidates[0].proofRoot).toBe('sha256:proof-1');
+ expect(boundary.storageProjection.every((record) => record.sourceSafety.sourceSafeMetadataOnly)).toBe(true);
+ expect(boundary.storageProjection.every((record) => record.sourceSafety.unpaidAssetPackSourceVisible === false)).toBe(true);
expect(boundary.replayReceipt.verified).toEqual({
quoteRootMatchesPreview: true,
disclosureReviewRootMatchesReview: true,
diff --git a/packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-admission.test.ts b/packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-admission.test.ts
new file mode 100644
index 00000000..d1bc5e78
--- /dev/null
+++ b/packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-admission.test.ts
@@ -0,0 +1,112 @@
+import {
+ buildDepositAssetPackOptionAdmissionReport,
+ assertDepositAssetPackOptionAdmissionReportSourceSafe,
+} from '../deposit-asset-pack-option-admission';
+import { buildDepositAssetPackOptionPolicyReport } from '../deposit-asset-pack-option-policy';
+import { buildDepositAssetPackOptionSynthesis } from '../deposit-asset-pack-options';
+
+describe('deposit-asset-pack-option-admission', () => {
+ it('admits approved policy-eligible options with source-safe index, storage, telemetry, and packs activity receipts', () => {
+ const synthesis = buildDepositAssetPackOptionSynthesis({
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ sourcePathHints: ['uapi/app/deposit/DepositPageClient.tsx'],
+ depositoryDemandSignals: [{ id: 'depository-demand', weight: 0.8 }],
+ readingDemandSignals: [{ id: 'reading-demand', weight: 0.86 }],
+ });
+ const policy = buildDepositAssetPackOptionPolicyReport({
+ synthesis,
+ sourceCriticalitySignals: [{ id: 'sub-critical', severity: 'sub-critical', weight: 0.82 }],
+ developmentCostSats: 1200,
+ expectedSettlementSats: 6800,
+ depositorWalletId: 'wallet-1',
+ });
+
+ const report = buildDepositAssetPackOptionAdmissionReport({
+ synthesis,
+ policy,
+ reviewerId: 'depositor-1',
+ telemetryRunId: 'deposit-run-1',
+ decisions: [
+ {
+ optionId: synthesis.options[0].optionId,
+ decision: 'approved-for-admission',
+ feedback: 'Approve bounded route extraction option.',
+ },
+ ],
+ });
+ const admitted = report.receipts[0];
+
+ expect(report.schema).toBe('bitcode.deposit.asset-pack-option-admission-report');
+ expect(report.report).toBe('DepositAssetPackOptionAdmissionReport');
+ expect(report.approvedCount).toBe(1);
+ expect(report.admittedCount).toBe(1);
+ expect(admitted.admission.state).toBe('admitted-to-depository');
+ expect(admitted.admission.depositoryAssetPackId).toMatch(/^depository-assetpack-/u);
+ expect(admitted.depositoryIndexProjection).toMatchObject({
+ state: 'indexed-for-finding-fits',
+ vectorEmbeddingState: 'projection-ready',
+ searchDisclosure: 'measurements-and-metadata-only',
+ });
+ expect(admitted.storageProjection).toMatchObject({
+ state: 'projected-to-object-storage',
+ rawSourceStoredExternally: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ });
+ expect(admitted.compensationPreview).toMatchObject({
+ state: 'compensation-preview-ready',
+ priceAsset: 'BTC',
+ allocationMethod: 'source-to-shares-largest-remainder',
+ });
+ expect(admitted.packsActivitySync).toMatchObject({
+ state: 'synchronized-to-packs',
+ route: '/packs',
+ activityType: 'depository-assetpack',
+ });
+ expect(admitted.telemetry).toMatchObject({
+ eventType: 'deposit-option-admission',
+ channel: 'execution-stream',
+ sourceSafeMetadataOnly: true,
+ });
+ expect(assertDepositAssetPackOptionAdmissionReportSourceSafe(report)).toEqual({
+ admitted: true,
+ reason: 'source_safe_deposit_asset_pack_option_admission_report',
+ });
+ });
+
+ it('keeps rejected, resynthesis, pending, and policy-blocked options out of the Depository', () => {
+ const synthesis = buildDepositAssetPackOptionSynthesis({
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ sourcePathHints: ['packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts'],
+ });
+ const policy = buildDepositAssetPackOptionPolicyReport({
+ synthesis,
+ sourceCriticalitySignals: [{ id: 'critical', severity: 'critical', weight: 1 }],
+ developmentCostSats: 7000,
+ expectedSettlementSats: 1000,
+ });
+
+ const report = buildDepositAssetPackOptionAdmissionReport({
+ synthesis,
+ policy,
+ decisions: [
+ { optionId: synthesis.options[0].optionId, decision: 'approved-for-admission' },
+ { optionId: synthesis.options[1].optionId, decision: 'rejected-by-depositor' },
+ { optionId: synthesis.options[2].optionId, decision: 'resynthesis-requested' },
+ ],
+ });
+
+ expect(report.admittedCount).toBe(0);
+ expect(report.blockedCount).toBe(1);
+ expect(report.receipts[0].admission.state).toBe('not-admitted-policy-blocked');
+ expect(report.receipts[0].admission.blockers).toContain('policy-blocked-before-admission');
+ expect(report.receipts[1].admission.state).toBe('not-admitted-rejected');
+ expect(report.receipts[2].admission.state).toBe('not-admitted-resynthesis-requested');
+ expect(report.receipts.every((receipt) => receipt.packsActivitySync.state === 'not-synchronized')).toBe(true);
+ expect(assertDepositAssetPackOptionAdmissionReportSourceSafe(report).admitted).toBe(true);
+ });
+});
diff --git a/packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts b/packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts
new file mode 100644
index 00000000..690873fb
--- /dev/null
+++ b/packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts
@@ -0,0 +1,103 @@
+import {
+ buildDepositAssetPackOptionPolicyReport,
+ assertDepositAssetPackOptionPolicyReportSourceSafe,
+} from '../deposit-asset-pack-option-policy';
+import { buildDepositAssetPackOptionSynthesis } from '../deposit-asset-pack-options';
+
+function reviewableSynthesis() {
+ return buildDepositAssetPackOptionSynthesis({
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ depositorInstructions: 'Prepare source-safe deposit AssetPack options for non-critical reusable proof infrastructure.',
+ sourcePathHints: [
+ 'uapi/app/deposit/DepositPageClient.tsx',
+ 'packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts',
+ ],
+ depositoryDemandSignals: [{ id: 'depository-gap', label: 'Depository needs reviewable source supply', weight: 0.8 }],
+ readingDemandSignals: [{ id: 'reading-fit-demand', label: 'Reading demand needs proof-bearing source fits', weight: 0.84 }],
+ existingDepositorySignals: [{ id: 'supply-route', label: 'Existing supply uses compensation preview roots', weight: 0.62 }],
+ });
+}
+
+describe('Deposit AssetPack option policy', () => {
+ it('scores reviewable options for criticality, demand, ROI, BTD potential, and BTC compensation route', () => {
+ const report = buildDepositAssetPackOptionPolicyReport({
+ synthesis: reviewableSynthesis(),
+ sourceCriticalitySignals: [
+ {
+ id: 'sub-critical-proof-surface',
+ label: 'Reusable proof surface is sub-critical to expose after settlement.',
+ severity: 'sub-critical',
+ weight: 0.82,
+ },
+ ],
+ depositorWalletId: 'wallet-depositor-1',
+ developmentCostSats: 1500,
+ expectedSettlementSats: 5200,
+ });
+
+ expect(report.schema).toBe('bitcode.deposit.asset-pack-option-policy-report');
+ expect(report.policy).toBe('DepositAssetPackOptionPolicy');
+ expect(report.route).toBe('/deposit');
+ expect(report.optionCount).toBe(3);
+ expect(report.reviewablePositiveRoiCount).toBeGreaterThan(0);
+ expect(report.aggregatePolicy).toMatchObject({
+ criticalityPolicy: 'source-safe-criticality-signals-with-depositor-review',
+ demandPolicy: 'weighted-depository-reading-and-existing-supply-signals',
+ roiPolicy: 'deterministic-estimated-gross-minus-development-cost',
+ compensationPolicy: 'future-reader-btc-source-to-shares-route-preview',
+ admissionAndIndexingOwnedBy: 'future-gate7-deposit-option-review',
+ });
+ for (const evaluation of report.evaluations) {
+ expect(evaluation.sourceCriticality.state).not.toBe('blocked-critical-source');
+ expect(evaluation.demand.weightedDemand).toBeGreaterThan(0.5);
+ expect(evaluation.roi.estimatedGrossSats).toBeGreaterThan(0);
+ expect(evaluation.btdPotential.estimateOnly).toBe(true);
+ expect(evaluation.btdPotential.btdMintBoundary).toBe('not-minted-until-future-need-fit-settlement');
+ expect(evaluation.compensation).toMatchObject({
+ payer: 'future-reader-after-settlement',
+ payee: 'depositing-wallet',
+ priceAsset: 'BTC',
+ allocationMethod: 'source-to-shares-largest-remainder',
+ sourceToSharesProofState: 'not-created-until-accepted-need-fit-and-settlement',
+ });
+ expect(evaluation.admissionBoundary).toMatchObject({
+ depositApprovalRequired: true,
+ admissionAndIndexingOwnedBy: 'future-gate7-deposit-option-review',
+ sourceBearingDisclosureBeforeSettlementVisible: false,
+ });
+ expect(evaluation.visibility.rawSourceTextVisible).toBe(false);
+ expect(evaluation.roots.policyEvaluationRoot).toMatch(/^deposit-policy-evaluation:/);
+ }
+ expect(assertDepositAssetPackOptionPolicyReportSourceSafe(report)).toEqual({
+ admitted: true,
+ reason: 'source_safe_deposit_asset_pack_option_policy',
+ });
+ expect(JSON.stringify(report)).not.toContain('PRIVATE_SOURCE_DO_NOT_SERIALIZE');
+ });
+
+ it('blocks critical or negative-value options before Gate 7 admission without leaking source', () => {
+ const report = buildDepositAssetPackOptionPolicyReport({
+ synthesis: reviewableSynthesis(),
+ sourceCriticalitySignals: [
+ {
+ id: 'critical-core-warning',
+ label: 'Core IP would be critical to expose.',
+ severity: 'critical',
+ weight: 0.95,
+ },
+ ],
+ developmentCostSats: 9000,
+ expectedSettlementSats: 1800,
+ depositorWalletId: null,
+ });
+
+ expect(report.blockedCount).toBe(3);
+ expect(report.evaluations.every((evaluation) => evaluation.policyDecision === 'blocked-before-admission')).toBe(true);
+ expect(report.evaluations.every((evaluation) => evaluation.sourceCriticality.state === 'blocked-critical-source')).toBe(true);
+ expect(report.evaluations.every((evaluation) => evaluation.compensation.state === 'blocked-before-compensation')).toBe(true);
+ expect(assertDepositAssetPackOptionPolicyReportSourceSafe(report).admitted).toBe(true);
+ expect(JSON.stringify(report)).not.toContain('Core IP');
+ });
+});
diff --git a/packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts b/packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts
new file mode 100644
index 00000000..a45919f9
--- /dev/null
+++ b/packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts
@@ -0,0 +1,110 @@
+import {
+ assertDepositAssetPackOptionSynthesisSourceSafe,
+ buildDepositAssetPackOptionSynthesis,
+} from '../deposit-asset-pack-options';
+
+describe('Deposit AssetPack option synthesis', () => {
+ it('builds multiple source-safe AssetPack options from connected source and demand signals', () => {
+ const synthesis = buildDepositAssetPackOptionSynthesis({
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ depositorInstructions:
+ 'Prefer reusable source-bound AssetPacks that can satisfy Reading demand without exposing critical private implementation source before settlement.',
+ sourcePathHints: [
+ 'uapi/app/terminal/TerminalDepositComposer.tsx',
+ 'packages/pipelines/asset-pack/src/depository-supply-index.ts',
+ ],
+ depositoryDemandSignals: [
+ {
+ id: 'demand-depository-gap',
+ label: 'Depository needs source-safe deposit option proposals',
+ weight: 0.75,
+ },
+ ],
+ readingDemandSignals: [
+ {
+ id: 'demand-reading-fit',
+ label: 'Reading routes need fit-ready source supply',
+ weight: 0.82,
+ },
+ ],
+ existingDepositorySignals: [
+ {
+ id: 'existing-terminal-supply',
+ label: 'Terminal supply already has proof-root and compensation posture',
+ weight: 0.64,
+ },
+ ],
+ createdAt: '2026-05-29T00:00:00.000Z',
+ });
+
+ expect(synthesis.schema).toBe('bitcode.deposit.asset-pack-option-synthesis');
+ expect(synthesis.pipeline).toBe('DepositAssetPackOptionSynthesis');
+ expect(synthesis.reviewBoundary).toMatchObject({
+ route: '/deposit',
+ defaultDecisionState: 'pending-depositor-review',
+ approvedOptionsAdmittedBy: 'future-gate7-deposit-option-review',
+ sourceCriticalityDemandRoiPolicyOwnedBy: 'future-gate6-policy',
+ });
+ expect(synthesis.optionCount).toBeGreaterThanOrEqual(3);
+ expect(synthesis.options.map((option) => option.kind)).toEqual([
+ 'capability-slice',
+ 'implementation-pattern',
+ 'proof-operations-slice',
+ ]);
+ for (const option of synthesis.options) {
+ expect(option.schema).toBe('bitcode.deposit.asset-pack-option');
+ expect(option.sourceBinding).toMatchObject({
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ sourcePathCount: 2,
+ rawSourceStoredExternally: true,
+ protectedSourceVisibleInOption: false,
+ });
+ expect(option.demandAlignment.posture).toBe('source-safe-demand-signals-only');
+ expect(option.demandAlignment.confidence).toBeGreaterThan(0.6);
+ expect(option.measurements).toHaveLength(3);
+ expect(option.reviewBoundary).toMatchObject({
+ state: 'reviewable-source-safe-option',
+ decision: 'pending-depositor-review',
+ depositAdmissionBoundary: 'not-admitted-until-depositor-approval',
+ btdMintBoundary: 'not-minted-by-deposit-option',
+ });
+ expect(option.policyBoundary).toMatchObject({
+ sourceCriticalityPolicy: 'deferred-to-gate6',
+ demandRoiPolicy: 'deferred-to-gate6',
+ compensationPolicy: 'deferred-to-gate6',
+ });
+ expect(option.visibility).toMatchObject({
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ });
+ expect(option.roots.optionRoot).toMatch(/^deposit-asset-pack-option:/);
+ expect(option.roots.measurementRoot).toMatch(/^deposit-option-measurements:/);
+ }
+ expect(assertDepositAssetPackOptionSynthesisSourceSafe(synthesis)).toEqual({
+ admitted: true,
+ reason: 'source_safe_deposit_asset_pack_option_synthesis',
+ });
+ expect(JSON.stringify(synthesis)).not.toContain('PRIVATE_SOURCE_DO_NOT_SERIALIZE');
+ });
+
+ it('blocks review posture when source binding is missing without leaking source', () => {
+ const synthesis = buildDepositAssetPackOptionSynthesis({
+ depositorInstructions: 'PRIVATE_SOURCE_DO_NOT_SERIALIZE do not include this marker in synthesized output',
+ });
+
+ expect(synthesis.options.every((option) => option.reviewBoundary.state === 'blocked-source-binding')).toBe(true);
+ expect(synthesis.sourceSafety.protectedSourceVisible).toBe(false);
+ expect(assertDepositAssetPackOptionSynthesisSourceSafe(synthesis).admitted).toBe(true);
+ expect(JSON.stringify(synthesis)).not.toContain('PRIVATE_SOURCE_DO_NOT_SERIALIZE');
+ });
+});
diff --git a/packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts b/packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts
index 4828a8e4..43212eee 100644
--- a/packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts
+++ b/packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts
@@ -111,6 +111,46 @@ describe('Depository supply index', () => {
settlementRequiredForSourceBearingAssetPack: true,
btdOwnershipBoundary: 'depositor-retains-btd-until-settlement-transfer',
});
+ expect(record.compensationPreview).toMatchObject({
+ schema: 'bitcode.depository.supply-compensation-preview',
+ state: 'eligible-if-selected-for-assetpack',
+ depositorWalletId: 'wallet-depositor-1',
+ candidateBtdRange: 'btd:100:140',
+ compensationRoute: {
+ payer: 'future-reader-after-settlement',
+ payee: 'depositing-wallet',
+ priceAsset: 'BTC',
+ allocationMethod: 'source-to-shares-largest-remainder',
+ sourceToSharesProofState: 'not-created-until-accepted-need-fit-and-settlement',
+ btdMintBoundary: 'not-minted-by-deposit-admission',
+ btdRightsTransferBoundary: 'reader-receives-rights-only-after-btc-settlement',
+ },
+ readiness: {
+ proofReady: true,
+ measurementReady: true,
+ searchable: true,
+ depositorWalletReady: true,
+ eligibleForFindingFits: true,
+ eligibleForCompensationIfSelected: true,
+ blockers: [],
+ },
+ visibility: {
+ beforeSettlement: 'source-safe-compensation-route-metadata',
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ },
+ });
+ expect(record.compensationPreview.roots.compensationPreviewRoot).toMatch(/^sha256:/);
+ expect(record.compensationPreview.roots.sourceToSharesPreviewRoot).toMatch(/^sha256:/);
+ expect(record.compensationPreview.readback.ledgerAccountKeys).toEqual(
+ expect.arrayContaining([
+ 'supplier:asset-terminal-engi:pending_claims',
+ 'depositor:wallet-depositor-1:deposited_assets',
+ 'depositor:wallet-depositor-1:eligible_compensation_routes',
+ ]),
+ );
expect(record.vectorProjection.rows).toHaveLength(4);
expect(record.vectorProjection.rows.every((row) => row.embeddingState === 'ready')).toBe(true);
expect(record.storageProjection).toMatchObject({
@@ -163,9 +203,41 @@ describe('Depository supply index', () => {
expect(index.records[0].lifecycle.blockers).toEqual(
expect.arrayContaining(['repository_binding_missing', 'source_revision_binding_missing']),
);
+ expect(index.records[0].compensationPreview.state).toBe('blocked-before-compensation');
+ expect(index.records[0].compensationPreview.readiness.blockers).toEqual(
+ expect.arrayContaining([
+ 'repository_binding_missing',
+ 'source_revision_binding_missing',
+ 'depository_searchability_missing',
+ ]),
+ );
expect(depositorySupplyAssetsFromIndex(index)).toHaveLength(0);
});
+ it('surfaces repair posture when deposit compensation cannot route to a wallet', () => {
+ const index = buildDepositorySupplyIndex({
+ deposits: [deposit({ depositorWalletId: null })],
+ createdAt: '2026-05-25T00:00:00.000Z',
+ });
+
+ const record = index.records[0];
+ expect(record.lifecycle.state).toBe('indexed-repair-required');
+ expect(record.lifecycle.warnings).toEqual(expect.arrayContaining(['depositor_wallet_missing']));
+ expect(record.repairActions).toContain('bind-depositor-wallet-for-compensation');
+ expect(record.compensationPreview.state).toBe('repair-required-before-compensation');
+ expect(record.compensationPreview.readiness).toMatchObject({
+ searchable: true,
+ proofReady: true,
+ measurementReady: true,
+ depositorWalletReady: false,
+ eligibleForFindingFits: true,
+ eligibleForCompensationIfSelected: false,
+ });
+ expect(record.compensationPreview.readiness.blockers).toEqual(
+ expect.arrayContaining(['depositor_wallet_missing']),
+ );
+ });
+
it('hands source-safe supply records to Finding Fits search as candidate deposits', async () => {
const index = buildDepositorySupplyIndex({
deposits: [deposit()],
diff --git a/packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts b/packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts
index 9a2bcfcf..d68fbfce 100644
--- a/packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts
+++ b/packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts
@@ -181,6 +181,10 @@ describe('ReadFitsFinding runtime, ranking, and replay', () => {
'telemetry_receipt',
]),
);
+ expect(runtime.storageProjection.every((record) => record.sourceSafety.protectedSourceVisible === false)).toBe(true);
+ expect(runtime.storageProjection.every((record) => record.sourceSafety.rawProviderResponseVisible === false)).toBe(true);
+ expect(runtime.searchSummary.selectedCandidateCount).toBe(2);
+ expect(runtime.searchSummary.fitDepositAssetIds).toEqual(['fit-deposit-runtime-1', 'fit-deposit-runtime-2']);
expect(runtime.sourceSafety).toMatchObject({
sourceSafetyClass: 'source_safe_read_fits_finding_runtime_metadata',
protectedSourceVisible: false,
diff --git a/packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts b/packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts
index 9be22ad3..43ce606e 100644
--- a/packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts
+++ b/packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts
@@ -66,6 +66,9 @@ describe('ReadNeed review, resynthesis, and admission runtime', () => {
'need_measurement',
'telemetry_receipt',
]);
+ expect(runtime.storageProjection.every((record) => record.sourceSafety.protectedSourceVisible === false)).toBe(true);
+ expect(runtime.storageProjection.every((record) => record.sourceSafety.rawProviderResponseVisible === false)).toBe(true);
+ expect(runtime.storageProjection.every((record) => record.sourceSafety.unpaidAssetPackSourceVisible === false)).toBe(true);
expect(runtime.telemetryReceipts[0]).toMatchObject({
pipelineName: 'ReadNeedComprehensionSynthesis',
needId: readNeed.needId,
diff --git a/packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts b/packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts
new file mode 100644
index 00000000..8ee2e45e
--- /dev/null
+++ b/packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts
@@ -0,0 +1,572 @@
+import type {
+ DepositAssetPackOption,
+ DepositAssetPackOptionSynthesis,
+} from './deposit-asset-pack-options';
+import type {
+ DepositAssetPackOptionPolicyEvaluation,
+ DepositAssetPackOptionPolicyReport,
+} from './deposit-asset-pack-option-policy';
+
+export type DepositOptionReviewDecisionState =
+ | 'pending-depositor-review'
+ | 'approved-for-admission'
+ | 'rejected-by-depositor'
+ | 'resynthesis-requested';
+
+export type DepositOptionAdmissionState =
+ | 'admitted-to-depository'
+ | 'not-admitted-pending-review'
+ | 'not-admitted-rejected'
+ | 'not-admitted-resynthesis-requested'
+ | 'not-admitted-policy-blocked';
+
+export interface DepositOptionReviewDecision {
+ optionId: string;
+ decision: DepositOptionReviewDecisionState;
+ reviewerId?: string | null;
+ feedback?: string | null;
+ decidedAt?: string | null;
+}
+
+export interface DepositAssetPackOptionAdmissionInput {
+ synthesis: DepositAssetPackOptionSynthesis;
+ policy: DepositAssetPackOptionPolicyReport;
+ decisions?: DepositOptionReviewDecision[] | null;
+ reviewerId?: string | null;
+ storageNamespace?: string | null;
+ depositoryIndexNamespace?: string | null;
+ telemetryRunId?: string | null;
+ createdAt?: string | null;
+}
+
+export interface DepositOptionAdmissionReceipt {
+ schema: 'bitcode.deposit.asset-pack-option-admission-receipt';
+ optionId: string;
+ optionKind: DepositAssetPackOption['kind'];
+ title: string;
+ reviewDecision: {
+ state: DepositOptionReviewDecisionState;
+ reviewerRoot: string | null;
+ feedbackRoot: string | null;
+ decisionRoot: string;
+ };
+ admission: {
+ state: DepositOptionAdmissionState;
+ depositoryAssetPackId: string | null;
+ admittedAt: string | null;
+ blockers: string[];
+ warnings: string[];
+ admissionRoot: string;
+ };
+ depositoryIndexProjection: {
+ state: 'indexed-for-finding-fits' | 'not-indexed';
+ namespaceRoot: string;
+ semanticIndexRoot: string | null;
+ lexicalIndexRoot: string | null;
+ metadataIndexRoot: string | null;
+ vectorEmbeddingState: 'projection-ready' | 'not-projected';
+ searchDisclosure: 'measurements-and-metadata-only';
+ };
+ storageProjection: {
+ state: 'projected-to-object-storage' | 'not-projected';
+ namespaceRoot: string;
+ metadataRecordRoot: string | null;
+ rawSourcePointerRoot: string | null;
+ rawSourceStoredExternally: true;
+ protectedSourceVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ };
+ compensationPreview: {
+ state: 'compensation-preview-ready' | 'not-eligible-for-compensation';
+ priceAsset: 'BTC';
+ allocationMethod: 'source-to-shares-largest-remainder';
+ depositorShareBasisPoints: number;
+ protocolTreasuryBasisPoints: number;
+ compensationRouteRoot: string | null;
+ };
+ packsActivitySync: {
+ state: 'synchronized-to-packs' | 'not-synchronized';
+ route: '/packs';
+ activityType: 'depository-assetpack' | 'deposit-option';
+ activityId: string;
+ activityRoot: string;
+ };
+ telemetry: {
+ eventType: 'deposit-option-admission';
+ channel: 'execution-stream';
+ runRoot: string | null;
+ eventRoot: string;
+ sourceSafeMetadataOnly: true;
+ };
+ visibility: {
+ sourceSafeMetadataOnly: true;
+ protectedSourceVisible: false;
+ rawSourceTextVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ rawPromptVisible: false;
+ interpolatedPromptVisible: false;
+ rawProviderResponseVisible: false;
+ walletPrivateMaterialVisible: false;
+ settlementPrivatePayloadVisible: false;
+ };
+ roots: {
+ optionRoot: string;
+ policyEvaluationRoot: string | null;
+ admissionReceiptRoot: string;
+ depositoryIndexRoot: string | null;
+ storageProjectionRoot: string | null;
+ packsActivityRoot: string;
+ telemetryRoot: string;
+ };
+}
+
+export interface DepositAssetPackOptionAdmissionReport {
+ schema: 'bitcode.deposit.asset-pack-option-admission-report';
+ report: 'DepositAssetPackOptionAdmissionReport';
+ reportId: string;
+ route: '/deposit';
+ packsRoute: '/packs';
+ createdAt: string;
+ synthesisRequestId: string;
+ policyReportId: string;
+ optionCount: number;
+ approvedCount: number;
+ rejectedCount: number;
+ resynthesisRequestedCount: number;
+ admittedCount: number;
+ blockedCount: number;
+ receipts: DepositOptionAdmissionReceipt[];
+ aggregateAdmission: {
+ reviewPolicy: 'depositor-decision-required';
+ admissionPolicy: 'approved-policy-eligible-options-only';
+ indexingPolicy: 'source-safe-measurement-metadata-search-projection';
+ storagePolicy: 'metadata-and-external-source-pointer-only';
+ packsSynchronization: 'admitted-options-project-to-packs-activity';
+ };
+ sourceSafety: {
+ sourceSafeMetadataOnly: true;
+ protectedSourceVisible: false;
+ rawSourceTextVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ rawPromptVisible: false;
+ interpolatedPromptVisible: false;
+ rawProviderResponseVisible: false;
+ walletPrivateMaterialVisible: false;
+ settlementPrivatePayloadVisible: false;
+ };
+ roots: {
+ admissionReportRoot: string;
+ synthesisRoot: string;
+ policyReportRoot: string;
+ receiptRoots: string[];
+ packsActivityRoots: string[];
+ };
+}
+
+const FORBIDDEN_SOURCE_MARKERS = [
+ 'PRIVATE_SOURCE_DO_NOT_SERIALIZE',
+ `BEGIN_${'PRIVATE'}_KEY`,
+ 'wallet_private_material',
+ 'raw_provider_response',
+ 'unpaid_assetpack_source',
+ 'protected source body',
+];
+
+function stableStringify(value: unknown): string {
+ if (value === null || typeof value !== 'object') return JSON.stringify(value);
+ if (Array.isArray(value)) return `[${value.map((entry) => stableStringify(entry)).join(',')}]`;
+ return `{${Object.keys(value as Record)
+ .sort()
+ .map((key) => `${JSON.stringify(key)}:${stableStringify((value as Record)[key])}`)
+ .join(',')}}`;
+}
+
+function stableHash(value: unknown) {
+ const text = typeof value === 'string' ? value : stableStringify(value);
+ let hash = 2166136261;
+ for (let index = 0; index < text.length; index += 1) {
+ hash ^= text.charCodeAt(index);
+ hash = Math.imul(hash, 16777619);
+ }
+ return (hash >>> 0).toString(16).padStart(8, '0');
+}
+
+function root(prefix: string, value: unknown) {
+ return `${prefix}:${stableHash(value)}`;
+}
+
+function normalizedText(value: string | null | undefined) {
+ const normalized = value?.trim();
+ return normalized ? normalized : null;
+}
+
+function normalizeDecisions(decisions: DepositOptionReviewDecision[] | null | undefined) {
+ return new Map(
+ (decisions || [])
+ .filter((decision) => normalizedText(decision.optionId))
+ .map((decision) => [
+ normalizedText(decision.optionId) as string,
+ {
+ optionId: normalizedText(decision.optionId) as string,
+ decision: decision.decision || 'pending-depositor-review',
+ reviewerId: normalizedText(decision.reviewerId),
+ feedback: normalizedText(decision.feedback),
+ decidedAt: normalizedText(decision.decidedAt),
+ },
+ ]),
+ );
+}
+
+function policyByOption(policy: DepositAssetPackOptionPolicyReport) {
+ return new Map(policy.evaluations.map((evaluation) => [evaluation.optionId, evaluation]));
+}
+
+function blockerState(input: {
+ option: DepositAssetPackOption;
+ evaluation: DepositAssetPackOptionPolicyEvaluation | null;
+ decision: DepositOptionReviewDecisionState;
+}) {
+ const blockers: string[] = [];
+ const warnings: string[] = [];
+
+ if (input.option.reviewBoundary.state !== 'reviewable-source-safe-option') {
+ blockers.push(input.option.reviewBoundary.state);
+ }
+
+ if (!input.evaluation) {
+ blockers.push('missing-policy-evaluation');
+ } else {
+ blockers.push(...input.evaluation.sourceCriticality.blockers);
+ blockers.push(...input.evaluation.compensation.blockers);
+ warnings.push(...input.evaluation.sourceCriticality.warnings);
+ warnings.push(...input.evaluation.compensation.warnings);
+ if (input.evaluation.policyDecision === 'blocked-before-admission') {
+ blockers.push('policy-blocked-before-admission');
+ }
+ if (input.evaluation.compensation.state !== 'eligible-if-approved-and-selected') {
+ blockers.push('compensation-route-repair-required-before-admission');
+ }
+ }
+
+ if (input.decision === 'pending-depositor-review') blockers.push('depositor-review-required');
+ if (input.decision === 'rejected-by-depositor') blockers.push('depositor-rejected-option');
+ if (input.decision === 'resynthesis-requested') blockers.push('depositor-requested-resynthesis');
+
+ return { blockers: [...new Set(blockers)], warnings: [...new Set(warnings)] };
+}
+
+function admissionStateFor(input: {
+ decision: DepositOptionReviewDecisionState;
+ blockers: string[];
+}): DepositOptionAdmissionState {
+ if (input.blockers.length === 0 && input.decision === 'approved-for-admission') return 'admitted-to-depository';
+ if (input.decision === 'rejected-by-depositor') return 'not-admitted-rejected';
+ if (input.decision === 'resynthesis-requested') return 'not-admitted-resynthesis-requested';
+ if (input.decision === 'pending-depositor-review') return 'not-admitted-pending-review';
+ return 'not-admitted-policy-blocked';
+}
+
+function buildReceipt(input: {
+ option: DepositAssetPackOption;
+ evaluation: DepositAssetPackOptionPolicyEvaluation | null;
+ decision: DepositOptionReviewDecision | null;
+ createdAt: string;
+ reviewerId: string | null;
+ storageNamespace: string;
+ depositoryIndexNamespace: string;
+ telemetryRunId: string | null;
+}): DepositOptionAdmissionReceipt {
+ const decisionState = input.decision?.decision || 'pending-depositor-review';
+ const reviewerId = input.decision?.reviewerId || input.reviewerId;
+ const feedback = input.decision?.feedback || null;
+ const { blockers, warnings } = blockerState({
+ option: input.option,
+ evaluation: input.evaluation,
+ decision: decisionState,
+ });
+ const admissionState = admissionStateFor({ decision: decisionState, blockers });
+ const admitted = admissionState === 'admitted-to-depository';
+ const reviewerRoot = reviewerId ? root('deposit-option-reviewer', reviewerId) : null;
+ const feedbackRoot = feedback ? root('deposit-option-review-feedback', feedback) : null;
+ const decisionRoot = root('deposit-option-review-decision', {
+ optionId: input.option.optionId,
+ decisionState,
+ reviewerRoot,
+ feedbackRoot,
+ decidedAt: input.decision?.decidedAt || input.createdAt,
+ });
+ const depositoryAssetPackId = admitted
+ ? `depository-assetpack-${stableHash({
+ optionId: input.option.optionId,
+ optionRoot: input.option.roots.optionRoot,
+ decisionRoot,
+ })}`
+ : null;
+ const admissionRoot = root('deposit-option-admission', {
+ optionId: input.option.optionId,
+ depositoryAssetPackId,
+ admissionState,
+ blockers,
+ warnings,
+ decisionRoot,
+ });
+ const namespaceRoot = root('deposit-option-admission-namespace', {
+ storageNamespace: input.storageNamespace,
+ depositoryIndexNamespace: input.depositoryIndexNamespace,
+ });
+ const semanticIndexRoot = admitted
+ ? root('deposit-option-semantic-index', {
+ optionRoot: input.option.roots.optionRoot,
+ measurementRoot: input.option.roots.measurementRoot,
+ demandRoot: input.option.roots.demandAlignmentRoot,
+ })
+ : null;
+ const lexicalIndexRoot = admitted
+ ? root('deposit-option-lexical-index', {
+ title: input.option.title,
+ kind: input.option.kind,
+ sourceBindingRoot: input.option.roots.sourceBindingRoot,
+ })
+ : null;
+ const metadataIndexRoot = admitted
+ ? root('deposit-option-metadata-index', {
+ depositoryAssetPackId,
+ sourceBindingRoot: input.option.roots.sourceBindingRoot,
+ policyEvaluationRoot: input.evaluation?.roots.policyEvaluationRoot || null,
+ })
+ : null;
+ const metadataRecordRoot = admitted
+ ? root('deposit-option-storage-metadata-record', {
+ depositoryAssetPackId,
+ optionRoot: input.option.roots.optionRoot,
+ policyEvaluationRoot: input.evaluation?.roots.policyEvaluationRoot || null,
+ admissionRoot,
+ })
+ : null;
+ const rawSourcePointerRoot = admitted
+ ? root('deposit-option-external-source-pointer', {
+ depositoryAssetPackId,
+ sourceBindingRoot: input.option.roots.sourceBindingRoot,
+ sourcePathRoots: input.option.sourceBinding.sourcePathRoots,
+ })
+ : null;
+ const compensationRouteRoot =
+ admitted && input.evaluation?.compensation.state === 'eligible-if-approved-and-selected'
+ ? input.evaluation.compensation.compensationRouteRoot
+ : null;
+ const activityType = admitted ? 'depository-assetpack' : 'deposit-option';
+ const activityId = `${activityType}:${input.option.optionId}`;
+ const activityRoot = root('deposit-option-packs-activity', {
+ activityId,
+ activityType,
+ depositoryAssetPackId,
+ admissionRoot,
+ compensationRouteRoot,
+ });
+ const telemetryRoot = root('deposit-option-admission-telemetry', {
+ eventType: 'deposit-option-admission',
+ telemetryRunId: input.telemetryRunId,
+ optionId: input.option.optionId,
+ admissionState,
+ activityRoot,
+ });
+ const receiptRoot = root('deposit-option-admission-receipt', {
+ optionRoot: input.option.roots.optionRoot,
+ policyEvaluationRoot: input.evaluation?.roots.policyEvaluationRoot || null,
+ admissionRoot,
+ activityRoot,
+ telemetryRoot,
+ });
+
+ return {
+ schema: 'bitcode.deposit.asset-pack-option-admission-receipt',
+ optionId: input.option.optionId,
+ optionKind: input.option.kind,
+ title: input.option.title,
+ reviewDecision: {
+ state: decisionState,
+ reviewerRoot,
+ feedbackRoot,
+ decisionRoot,
+ },
+ admission: {
+ state: admissionState,
+ depositoryAssetPackId,
+ admittedAt: admitted ? input.createdAt : null,
+ blockers,
+ warnings,
+ admissionRoot,
+ },
+ depositoryIndexProjection: {
+ state: admitted ? 'indexed-for-finding-fits' : 'not-indexed',
+ namespaceRoot,
+ semanticIndexRoot,
+ lexicalIndexRoot,
+ metadataIndexRoot,
+ vectorEmbeddingState: admitted ? 'projection-ready' : 'not-projected',
+ searchDisclosure: 'measurements-and-metadata-only',
+ },
+ storageProjection: {
+ state: admitted ? 'projected-to-object-storage' : 'not-projected',
+ namespaceRoot,
+ metadataRecordRoot,
+ rawSourcePointerRoot,
+ rawSourceStoredExternally: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ },
+ compensationPreview: {
+ state: compensationRouteRoot ? 'compensation-preview-ready' : 'not-eligible-for-compensation',
+ priceAsset: 'BTC',
+ allocationMethod: 'source-to-shares-largest-remainder',
+ depositorShareBasisPoints: input.evaluation?.compensation.depositorShareBasisPoints ?? 0,
+ protocolTreasuryBasisPoints: input.evaluation?.compensation.protocolTreasuryBasisPoints ?? 0,
+ compensationRouteRoot,
+ },
+ packsActivitySync: {
+ state: admitted ? 'synchronized-to-packs' : 'not-synchronized',
+ route: '/packs',
+ activityType,
+ activityId,
+ activityRoot,
+ },
+ telemetry: {
+ eventType: 'deposit-option-admission',
+ channel: 'execution-stream',
+ runRoot: input.telemetryRunId ? root('deposit-option-admission-run', input.telemetryRunId) : null,
+ eventRoot: telemetryRoot,
+ sourceSafeMetadataOnly: true,
+ },
+ visibility: {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ },
+ roots: {
+ optionRoot: input.option.roots.optionRoot,
+ policyEvaluationRoot: input.evaluation?.roots.policyEvaluationRoot || null,
+ admissionReceiptRoot: receiptRoot,
+ depositoryIndexRoot: admitted ? root('deposit-option-depository-index', { semanticIndexRoot, lexicalIndexRoot, metadataIndexRoot }) : null,
+ storageProjectionRoot: admitted ? root('deposit-option-storage-projection', { metadataRecordRoot, rawSourcePointerRoot }) : null,
+ packsActivityRoot: activityRoot,
+ telemetryRoot,
+ },
+ };
+}
+
+export function buildDepositAssetPackOptionAdmissionReport(
+ input: DepositAssetPackOptionAdmissionInput,
+): DepositAssetPackOptionAdmissionReport {
+ const createdAt = normalizedText(input.createdAt) || 'deterministic';
+ const reviewerId = normalizedText(input.reviewerId);
+ const storageNamespace = normalizedText(input.storageNamespace) || 'deposit-asset-pack-options';
+ const depositoryIndexNamespace = normalizedText(input.depositoryIndexNamespace) || 'bitcode-depository';
+ const telemetryRunId = normalizedText(input.telemetryRunId);
+ const decisions = normalizeDecisions(input.decisions);
+ const evaluations = policyByOption(input.policy);
+ const receipts = input.synthesis.options.map((option) =>
+ buildReceipt({
+ option,
+ evaluation: evaluations.get(option.optionId) || null,
+ decision: decisions.get(option.optionId) || null,
+ createdAt,
+ reviewerId,
+ storageNamespace,
+ depositoryIndexNamespace,
+ telemetryRunId,
+ }),
+ );
+ const receiptRoots = receipts.map((receipt) => receipt.roots.admissionReceiptRoot);
+ const packsActivityRoots = receipts.map((receipt) => receipt.roots.packsActivityRoot);
+ const reportRoot = root('deposit-asset-pack-option-admission-report', {
+ synthesisRoot: input.synthesis.roots.synthesisRoot,
+ policyReportRoot: input.policy.roots.policyReportRoot,
+ receiptRoots,
+ createdAt,
+ });
+
+ return {
+ schema: 'bitcode.deposit.asset-pack-option-admission-report',
+ report: 'DepositAssetPackOptionAdmissionReport',
+ reportId: reportRoot,
+ route: '/deposit',
+ packsRoute: '/packs',
+ createdAt,
+ synthesisRequestId: input.synthesis.requestId,
+ policyReportId: input.policy.reportId,
+ optionCount: receipts.length,
+ approvedCount: receipts.filter((receipt) => receipt.reviewDecision.state === 'approved-for-admission').length,
+ rejectedCount: receipts.filter((receipt) => receipt.reviewDecision.state === 'rejected-by-depositor').length,
+ resynthesisRequestedCount: receipts.filter((receipt) => receipt.reviewDecision.state === 'resynthesis-requested').length,
+ admittedCount: receipts.filter((receipt) => receipt.admission.state === 'admitted-to-depository').length,
+ blockedCount: receipts.filter((receipt) => receipt.admission.state === 'not-admitted-policy-blocked').length,
+ receipts,
+ aggregateAdmission: {
+ reviewPolicy: 'depositor-decision-required',
+ admissionPolicy: 'approved-policy-eligible-options-only',
+ indexingPolicy: 'source-safe-measurement-metadata-search-projection',
+ storagePolicy: 'metadata-and-external-source-pointer-only',
+ packsSynchronization: 'admitted-options-project-to-packs-activity',
+ },
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ },
+ roots: {
+ admissionReportRoot: reportRoot,
+ synthesisRoot: input.synthesis.roots.synthesisRoot,
+ policyReportRoot: input.policy.roots.policyReportRoot,
+ receiptRoots,
+ packsActivityRoots,
+ },
+ };
+}
+
+export function assertDepositAssetPackOptionAdmissionReportSourceSafe(
+ report: DepositAssetPackOptionAdmissionReport,
+) {
+ const serialized = stableStringify(report);
+ const noForbiddenMarkers = FORBIDDEN_SOURCE_MARKERS.every((marker) => !serialized.includes(marker));
+ const sourceSafe =
+ report.schema === 'bitcode.deposit.asset-pack-option-admission-report' &&
+ report.route === '/deposit' &&
+ report.packsRoute === '/packs' &&
+ report.sourceSafety.sourceSafeMetadataOnly === true &&
+ report.sourceSafety.protectedSourceVisible === false &&
+ report.sourceSafety.rawSourceTextVisible === false &&
+ report.sourceSafety.unpaidAssetPackSourceVisible === false &&
+ report.sourceSafety.rawPromptVisible === false &&
+ report.sourceSafety.interpolatedPromptVisible === false &&
+ report.sourceSafety.rawProviderResponseVisible === false &&
+ report.sourceSafety.walletPrivateMaterialVisible === false &&
+ report.sourceSafety.settlementPrivatePayloadVisible === false &&
+ report.receipts.every(
+ (receipt) =>
+ receipt.visibility.sourceSafeMetadataOnly === true &&
+ receipt.storageProjection.rawSourceStoredExternally === true &&
+ receipt.storageProjection.protectedSourceVisible === false &&
+ receipt.storageProjection.unpaidAssetPackSourceVisible === false &&
+ receipt.telemetry.sourceSafeMetadataOnly === true,
+ ) &&
+ noForbiddenMarkers;
+
+ return {
+ admitted: sourceSafe,
+ reason: sourceSafe
+ ? 'source_safe_deposit_asset_pack_option_admission_report'
+ : 'deposit_option_admission_source_safety_boundary_violation',
+ };
+}
diff --git a/packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts b/packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts
new file mode 100644
index 00000000..b95b1b9d
--- /dev/null
+++ b/packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts
@@ -0,0 +1,628 @@
+import type {
+ DepositAssetPackOption,
+ DepositAssetPackOptionSynthesis,
+ DepositOptionDemandSignal,
+} from './deposit-asset-pack-options';
+
+export type DepositOptionCriticalityState =
+ | 'sub-critical'
+ | 'review-warning'
+ | 'blocked-critical-source';
+
+export type DepositOptionDemandState =
+ | 'strong-likely-demand'
+ | 'moderate-likely-demand'
+ | 'weak-likely-demand';
+
+export type DepositOptionRoiState =
+ | 'positive-expected-value'
+ | 'marginal-expected-value'
+ | 'negative-expected-value'
+ | 'blocked-criticality';
+
+export type DepositOptionBtdPotentialState =
+ | 'high-potential'
+ | 'moderate-potential'
+ | 'low-potential'
+ | 'blocked-until-policy-repair';
+
+export type DepositOptionCompensationState =
+ | 'eligible-if-approved-and-selected'
+ | 'repair-required-before-compensation'
+ | 'blocked-before-compensation';
+
+export interface DepositOptionCriticalitySignal {
+ id?: string | null;
+ label?: string | null;
+ severity?: 'sub-critical' | 'warning' | 'critical' | null;
+ weight?: number | null;
+}
+
+export interface DepositAssetPackOptionPolicyInput {
+ synthesis: DepositAssetPackOptionSynthesis;
+ sourceCriticalitySignals?: DepositOptionCriticalitySignal[] | null;
+ developmentCostSats?: number | null;
+ expectedSettlementSats?: number | null;
+ depositorWalletId?: string | null;
+ createdAt?: string | null;
+}
+
+export interface DepositAssetPackOptionPolicyEvaluation {
+ schema: 'bitcode.deposit.asset-pack-option-policy-evaluation';
+ optionId: string;
+ optionKind: DepositAssetPackOption['kind'];
+ title: string;
+ policyDecision:
+ | 'reviewable-positive-roi'
+ | 'review-warning-before-admission'
+ | 'blocked-before-admission';
+ sourceCriticality: {
+ state: DepositOptionCriticalityState;
+ score: number;
+ signalRoots: string[];
+ blockers: string[];
+ warnings: string[];
+ };
+ demand: {
+ state: DepositOptionDemandState;
+ confidence: number;
+ weightedDemand: number;
+ demandRoot: string;
+ };
+ roi: {
+ state: DepositOptionRoiState;
+ estimatedGrossSats: number;
+ estimatedDevelopmentCostSats: number;
+ expectedNetSats: number;
+ roiMultiple: number;
+ roiRoot: string;
+ };
+ btdPotential: {
+ state: DepositOptionBtdPotentialState;
+ estimatedKnowledgeVolume: number;
+ estimatedBtdCells: number;
+ estimateOnly: true;
+ btdMintBoundary: 'not-minted-until-future-need-fit-settlement';
+ rightsBoundary: 'depositor-retains-rights-until-paid-reader-settlement-transfer';
+ btdPotentialRoot: string;
+ };
+ compensation: {
+ state: DepositOptionCompensationState;
+ payer: 'future-reader-after-settlement';
+ payee: 'depositing-wallet';
+ priceAsset: 'BTC';
+ allocationMethod: 'source-to-shares-largest-remainder';
+ depositorShareBasisPoints: number;
+ protocolTreasuryBasisPoints: number;
+ sourceToSharesProofState: 'not-created-until-accepted-need-fit-and-settlement';
+ eligibleIfApprovedAndSelected: boolean;
+ blockers: string[];
+ warnings: string[];
+ compensationRouteRoot: string;
+ };
+ admissionBoundary: {
+ depositApprovalRequired: true;
+ admissionAndIndexingOwnedBy: 'future-gate7-deposit-option-review';
+ sourceBearingDisclosureBeforeSettlementVisible: false;
+ };
+ visibility: {
+ sourceSafeMetadataOnly: true;
+ protectedSourceVisible: false;
+ rawSourceTextVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ rawPromptVisible: false;
+ interpolatedPromptVisible: false;
+ rawProviderResponseVisible: false;
+ walletPrivateMaterialVisible: false;
+ settlementPrivatePayloadVisible: false;
+ };
+ roots: {
+ policyEvaluationRoot: string;
+ sourceCriticalityRoot: string;
+ demandRoot: string;
+ roiRoot: string;
+ btdPotentialRoot: string;
+ compensationRouteRoot: string;
+ };
+}
+
+export interface DepositAssetPackOptionPolicyReport {
+ schema: 'bitcode.deposit.asset-pack-option-policy-report';
+ policy: 'DepositAssetPackOptionPolicy';
+ reportId: string;
+ createdAt: string;
+ route: '/deposit';
+ synthesisRequestId: string;
+ optionCount: number;
+ reviewablePositiveRoiCount: number;
+ warningCount: number;
+ blockedCount: number;
+ evaluations: DepositAssetPackOptionPolicyEvaluation[];
+ aggregatePolicy: {
+ criticalityPolicy: 'source-safe-criticality-signals-with-depositor-review';
+ demandPolicy: 'weighted-depository-reading-and-existing-supply-signals';
+ roiPolicy: 'deterministic-estimated-gross-minus-development-cost';
+ compensationPolicy: 'future-reader-btc-source-to-shares-route-preview';
+ admissionAndIndexingOwnedBy: 'future-gate7-deposit-option-review';
+ };
+ sourceSafety: {
+ sourceSafeMetadataOnly: true;
+ protectedSourceVisible: false;
+ rawSourceTextVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ rawPromptVisible: false;
+ interpolatedPromptVisible: false;
+ rawProviderResponseVisible: false;
+ walletPrivateMaterialVisible: false;
+ settlementPrivatePayloadVisible: false;
+ };
+ roots: {
+ policyReportRoot: string;
+ synthesisRoot: string;
+ evaluationRoots: string[];
+ aggregatePolicyRoot: string;
+ };
+}
+
+const FORBIDDEN_SOURCE_MARKERS = [
+ 'PRIVATE_SOURCE_DO_NOT_SERIALIZE',
+ `BEGIN_${'PRIVATE'}_KEY`,
+ 'wallet_private_material',
+ 'raw_provider_response',
+ 'unpaid_assetpack_source',
+];
+
+function stableStringify(value: unknown): string {
+ if (value === null || typeof value !== 'object') return JSON.stringify(value);
+ if (Array.isArray(value)) return `[${value.map((entry) => stableStringify(entry)).join(',')}]`;
+ return `{${Object.keys(value as Record)
+ .sort()
+ .map((key) => `${JSON.stringify(key)}:${stableStringify((value as Record)[key])}`)
+ .join(',')}}`;
+}
+
+function stableHash(value: unknown) {
+ const text = typeof value === 'string' ? value : stableStringify(value);
+ let hash = 2166136261;
+ for (let index = 0; index < text.length; index += 1) {
+ hash ^= text.charCodeAt(index);
+ hash = Math.imul(hash, 16777619);
+ }
+ return (hash >>> 0).toString(16).padStart(8, '0');
+}
+
+function root(prefix: string, value: unknown) {
+ return `${prefix}:${stableHash(value)}`;
+}
+
+function normalizedText(value: string | null | undefined) {
+ const normalized = value?.trim();
+ return normalized ? normalized : null;
+}
+
+function boundedUnit(value: number | null | undefined, fallback: number) {
+ const numeric = Number(value ?? fallback);
+ if (!Number.isFinite(numeric)) return fallback;
+ return Math.max(0, Math.min(1, numeric));
+}
+
+function positiveInteger(value: number | null | undefined, fallback: number) {
+ const numeric = Number(value ?? fallback);
+ if (!Number.isFinite(numeric)) return fallback;
+ return Math.max(0, Math.round(numeric));
+}
+
+function normalizedCriticalitySignals(value: DepositOptionCriticalitySignal[] | null | undefined) {
+ return (value || [])
+ .map((signal, index) => ({
+ id: normalizedText(signal.id) || `criticality-signal-${index + 1}`,
+ label: normalizedText(signal.label) || `Criticality signal ${index + 1}`,
+ severity: signal.severity || 'warning',
+ weight: boundedUnit(signal.weight, 0.5),
+ }))
+ .sort((left, right) => left.id.localeCompare(right.id));
+}
+
+function sumSignalWeights(signals: DepositOptionDemandSignal[] | undefined) {
+ return (signals || []).reduce((sum, signal) => sum + boundedUnit(signal.weight, 0.5), 0);
+}
+
+function optionMeasurementVolume(option: DepositAssetPackOption) {
+ if (!option.measurements.length) return 0;
+ const weighted = option.measurements.reduce(
+ (sum, measurement) => sum + boundedUnit(measurement.volume, 0) * boundedUnit(measurement.weight, 0),
+ 0,
+ );
+ const weights = option.measurements.reduce((sum, measurement) => sum + boundedUnit(measurement.weight, 0), 0);
+ return Number((weights ? weighted / weights : 0).toFixed(4));
+}
+
+function sourceCriticalityFor(input: {
+ option: DepositAssetPackOption;
+ signals: ReturnType;
+}) {
+ const signalRoots = input.signals.map((signal) => root('deposit-policy-criticality-signal', signal));
+ const criticalWeight = input.signals
+ .filter((signal) => signal.severity === 'critical')
+ .reduce((sum, signal) => sum + signal.weight, 0);
+ const warningWeight = input.signals
+ .filter((signal) => signal.severity === 'warning')
+ .reduce((sum, signal) => sum + signal.weight, 0);
+ const subCriticalWeight = input.signals
+ .filter((signal) => signal.severity === 'sub-critical')
+ .reduce((sum, signal) => sum + signal.weight, 0);
+ const sourceBreadthRisk = Math.min(0.2, input.option.sourceBinding.sourcePathCount * 0.025);
+ const score = Number(Math.max(0, Math.min(1, 0.22 + criticalWeight * 0.55 + warningWeight * 0.22 - subCriticalWeight * 0.18 + sourceBreadthRisk)).toFixed(2));
+ const state: DepositOptionCriticalityState = criticalWeight >= 0.75 || score >= 0.78
+ ? 'blocked-critical-source'
+ : score >= 0.48 || warningWeight > subCriticalWeight
+ ? 'review-warning'
+ : 'sub-critical';
+ const blockers = state === 'blocked-critical-source' ? ['critical_source_policy_block'] : [];
+ const warnings = [
+ ...(state === 'review-warning' ? ['depositor_review_required_for_source_criticality'] : []),
+ ...(!input.signals.length ? ['source_criticality_signals_missing'] : []),
+ ];
+
+ return {
+ state,
+ score,
+ signalRoots,
+ blockers,
+ warnings,
+ };
+}
+
+function demandFor(option: DepositAssetPackOption) {
+ const weightedDemand = Number(Math.max(0, Math.min(1, option.demandAlignment.confidence)).toFixed(2));
+ const state: DepositOptionDemandState = weightedDemand >= 0.76
+ ? 'strong-likely-demand'
+ : weightedDemand >= 0.56
+ ? 'moderate-likely-demand'
+ : 'weak-likely-demand';
+
+ return {
+ state,
+ confidence: option.demandAlignment.confidence,
+ weightedDemand,
+ demandRoot: root('deposit-policy-demand', {
+ optionId: option.optionId,
+ confidence: option.demandAlignment.confidence,
+ depositorySignalRoots: option.demandAlignment.depositorySignalRoots,
+ readingSignalRoots: option.demandAlignment.readingSignalRoots,
+ existingDepositorySignalRoots: option.demandAlignment.existingDepositorySignalRoots,
+ }),
+ };
+}
+
+function roiFor(input: {
+ option: DepositAssetPackOption;
+ demand: ReturnType;
+ criticality: ReturnType;
+ developmentCostSats: number;
+ expectedSettlementSats: number;
+}) {
+ const measurementVolume = optionMeasurementVolume(input.option);
+ const kindMultiplier =
+ input.option.kind === 'capability-slice'
+ ? 1
+ : input.option.kind === 'implementation-pattern'
+ ? 0.92
+ : 0.84;
+ const criticalityDiscount = input.criticality.state === 'sub-critical'
+ ? 1
+ : input.criticality.state === 'review-warning'
+ ? 0.76
+ : 0;
+ const estimatedGrossSats = Math.round(
+ input.expectedSettlementSats * input.demand.weightedDemand * (0.62 + measurementVolume * 0.38) * kindMultiplier * criticalityDiscount,
+ );
+ const expectedNetSats = estimatedGrossSats - input.developmentCostSats;
+ const roiMultiple = Number((input.developmentCostSats > 0 ? estimatedGrossSats / input.developmentCostSats : 0).toFixed(2));
+ const state: DepositOptionRoiState = input.criticality.state === 'blocked-critical-source'
+ ? 'blocked-criticality'
+ : expectedNetSats < 0
+ ? 'negative-expected-value'
+ : roiMultiple < 1.25
+ ? 'marginal-expected-value'
+ : 'positive-expected-value';
+ const roiRoot = root('deposit-policy-roi', {
+ optionId: input.option.optionId,
+ state,
+ estimatedGrossSats,
+ estimatedDevelopmentCostSats: input.developmentCostSats,
+ expectedNetSats,
+ roiMultiple,
+ });
+
+ return {
+ state,
+ estimatedGrossSats,
+ estimatedDevelopmentCostSats: input.developmentCostSats,
+ expectedNetSats,
+ roiMultiple,
+ roiRoot,
+ };
+}
+
+function btdPotentialFor(input: {
+ option: DepositAssetPackOption;
+ demand: ReturnType;
+ roi: ReturnType;
+ criticality: ReturnType;
+}) {
+ const estimatedKnowledgeVolume = Number((optionMeasurementVolume(input.option) * input.demand.weightedDemand).toFixed(4));
+ const estimatedBtdCells = Math.max(0, Math.round(estimatedKnowledgeVolume * 1000));
+ const state: DepositOptionBtdPotentialState = input.criticality.state === 'blocked-critical-source' || input.roi.state === 'negative-expected-value'
+ ? 'blocked-until-policy-repair'
+ : estimatedKnowledgeVolume >= 0.64
+ ? 'high-potential'
+ : estimatedKnowledgeVolume >= 0.42
+ ? 'moderate-potential'
+ : 'low-potential';
+ const btdPotentialRoot = root('deposit-policy-btd-potential', {
+ optionId: input.option.optionId,
+ state,
+ estimatedKnowledgeVolume,
+ estimatedBtdCells,
+ });
+
+ return {
+ state,
+ estimatedKnowledgeVolume,
+ estimatedBtdCells,
+ estimateOnly: true as const,
+ btdMintBoundary: 'not-minted-until-future-need-fit-settlement' as const,
+ rightsBoundary: 'depositor-retains-rights-until-paid-reader-settlement-transfer' as const,
+ btdPotentialRoot,
+ };
+}
+
+function compensationFor(input: {
+ option: DepositAssetPackOption;
+ criticality: ReturnType;
+ roi: ReturnType;
+ depositorWalletId: string | null;
+}) {
+ const blockers = [
+ ...input.criticality.blockers,
+ ...(input.roi.state === 'negative-expected-value' ? ['negative_expected_value'] : []),
+ ...(input.roi.state === 'blocked-criticality' ? ['criticality_blocks_compensation'] : []),
+ ...(!input.depositorWalletId ? ['depositor_wallet_missing'] : []),
+ ...(input.option.reviewBoundary.state !== 'reviewable-source-safe-option' ? ['option_not_reviewable'] : []),
+ ];
+ const warnings = [
+ ...input.criticality.warnings,
+ ...(input.roi.state === 'marginal-expected-value' ? ['marginal_expected_value'] : []),
+ ];
+ const eligibleIfApprovedAndSelected = blockers.length === 0;
+ const state: DepositOptionCompensationState = eligibleIfApprovedAndSelected
+ ? 'eligible-if-approved-and-selected'
+ : input.criticality.state === 'blocked-critical-source' || input.roi.state === 'negative-expected-value'
+ ? 'blocked-before-compensation'
+ : 'repair-required-before-compensation';
+ const compensationRoute = {
+ optionId: input.option.optionId,
+ state,
+ payer: 'future-reader-after-settlement',
+ payee: 'depositing-wallet',
+ priceAsset: 'BTC',
+ allocationMethod: 'source-to-shares-largest-remainder',
+ depositorShareBasisPoints: 8000,
+ protocolTreasuryBasisPoints: 2000,
+ sourceToSharesProofState: 'not-created-until-accepted-need-fit-and-settlement',
+ depositorWalletRoot: input.depositorWalletId ? root('deposit-policy-wallet', input.depositorWalletId) : null,
+ blockers,
+ warnings,
+ };
+
+ return {
+ state,
+ payer: 'future-reader-after-settlement' as const,
+ payee: 'depositing-wallet' as const,
+ priceAsset: 'BTC' as const,
+ allocationMethod: 'source-to-shares-largest-remainder' as const,
+ depositorShareBasisPoints: 8000,
+ protocolTreasuryBasisPoints: 2000,
+ sourceToSharesProofState: 'not-created-until-accepted-need-fit-and-settlement' as const,
+ eligibleIfApprovedAndSelected,
+ blockers: [...new Set(blockers)].sort(),
+ warnings: [...new Set(warnings)].sort(),
+ compensationRouteRoot: root('deposit-policy-compensation-route', compensationRoute),
+ };
+}
+
+function policyDecisionFor(input: {
+ criticality: ReturnType;
+ roi: ReturnType;
+ compensation: ReturnType;
+}): DepositAssetPackOptionPolicyEvaluation['policyDecision'] {
+ if (
+ input.criticality.state === 'blocked-critical-source' ||
+ input.roi.state === 'negative-expected-value' ||
+ input.roi.state === 'blocked-criticality' ||
+ input.compensation.state === 'blocked-before-compensation'
+ ) {
+ return 'blocked-before-admission';
+ }
+ if (input.criticality.state === 'review-warning' || input.roi.state === 'marginal-expected-value' || input.compensation.warnings.length) {
+ return 'review-warning-before-admission';
+ }
+ return 'reviewable-positive-roi';
+}
+
+export function buildDepositAssetPackOptionPolicyReport(
+ input: DepositAssetPackOptionPolicyInput,
+): DepositAssetPackOptionPolicyReport {
+ const createdAt = normalizedText(input.createdAt) || 'deterministic';
+ const sourceCriticalitySignals = normalizedCriticalitySignals(input.sourceCriticalitySignals);
+ const demandSignalWeight =
+ input.synthesis.options.reduce((sum, option) => sum + option.demandAlignment.confidence, 0) +
+ sumSignalWeights(input.synthesis.options.flatMap((option) => option.measurements.map((measurement) => ({
+ id: measurement.id,
+ label: measurement.label,
+ weight: measurement.volume * measurement.weight,
+ }))));
+ const developmentCostSats = positiveInteger(
+ input.developmentCostSats,
+ Math.max(1200, Math.round(850 + input.synthesis.optionCount * 275 + input.synthesis.request.sourcePathRoots.length * 180)),
+ );
+ const expectedSettlementSats = positiveInteger(
+ input.expectedSettlementSats,
+ Math.max(2500, Math.round(2800 + demandSignalWeight * 450 + input.synthesis.request.sourcePathRoots.length * 220)),
+ );
+ const depositorWalletId = normalizedText(input.depositorWalletId);
+
+ const evaluations = input.synthesis.options.map((option): DepositAssetPackOptionPolicyEvaluation => {
+ const sourceCriticality = sourceCriticalityFor({ option, signals: sourceCriticalitySignals });
+ const demand = demandFor(option);
+ const roi = roiFor({
+ option,
+ demand,
+ criticality: sourceCriticality,
+ developmentCostSats,
+ expectedSettlementSats,
+ });
+ const btdPotential = btdPotentialFor({ option, demand, roi, criticality: sourceCriticality });
+ const compensation = compensationFor({ option, criticality: sourceCriticality, roi, depositorWalletId });
+ const policyDecision = policyDecisionFor({ criticality: sourceCriticality, roi, compensation });
+ const admissionBoundary = {
+ depositApprovalRequired: true as const,
+ admissionAndIndexingOwnedBy: 'future-gate7-deposit-option-review' as const,
+ sourceBearingDisclosureBeforeSettlementVisible: false as const,
+ };
+ const visibility = {
+ sourceSafeMetadataOnly: true as const,
+ protectedSourceVisible: false as const,
+ rawSourceTextVisible: false as const,
+ unpaidAssetPackSourceVisible: false as const,
+ rawPromptVisible: false as const,
+ interpolatedPromptVisible: false as const,
+ rawProviderResponseVisible: false as const,
+ walletPrivateMaterialVisible: false as const,
+ settlementPrivatePayloadVisible: false as const,
+ };
+ const policyEvaluationRoot = root('deposit-policy-evaluation', {
+ optionId: option.optionId,
+ policyDecision,
+ sourceCriticality,
+ demand,
+ roi,
+ btdPotential,
+ compensation,
+ admissionBoundary,
+ visibility,
+ });
+
+ return {
+ schema: 'bitcode.deposit.asset-pack-option-policy-evaluation',
+ optionId: option.optionId,
+ optionKind: option.kind,
+ title: option.title,
+ policyDecision,
+ sourceCriticality,
+ demand,
+ roi,
+ btdPotential,
+ compensation,
+ admissionBoundary,
+ visibility,
+ roots: {
+ policyEvaluationRoot,
+ sourceCriticalityRoot: root('deposit-policy-criticality', sourceCriticality),
+ demandRoot: demand.demandRoot,
+ roiRoot: roi.roiRoot,
+ btdPotentialRoot: btdPotential.btdPotentialRoot,
+ compensationRouteRoot: compensation.compensationRouteRoot,
+ },
+ };
+ });
+ const aggregatePolicy = {
+ criticalityPolicy: 'source-safe-criticality-signals-with-depositor-review' as const,
+ demandPolicy: 'weighted-depository-reading-and-existing-supply-signals' as const,
+ roiPolicy: 'deterministic-estimated-gross-minus-development-cost' as const,
+ compensationPolicy: 'future-reader-btc-source-to-shares-route-preview' as const,
+ admissionAndIndexingOwnedBy: 'future-gate7-deposit-option-review' as const,
+ };
+ const evaluationRoots = evaluations.map((evaluation) => evaluation.roots.policyEvaluationRoot);
+ const aggregatePolicyRoot = root('deposit-policy-aggregate', aggregatePolicy);
+ const policyReportRoot = root('deposit-policy-report', {
+ synthesisRequestId: input.synthesis.requestId,
+ evaluationRoots,
+ aggregatePolicyRoot,
+ createdAt,
+ });
+
+ return {
+ schema: 'bitcode.deposit.asset-pack-option-policy-report',
+ policy: 'DepositAssetPackOptionPolicy',
+ reportId: policyReportRoot,
+ createdAt,
+ route: '/deposit',
+ synthesisRequestId: input.synthesis.requestId,
+ optionCount: evaluations.length,
+ reviewablePositiveRoiCount: evaluations.filter((evaluation) => evaluation.policyDecision === 'reviewable-positive-roi').length,
+ warningCount: evaluations.filter((evaluation) => evaluation.policyDecision === 'review-warning-before-admission').length,
+ blockedCount: evaluations.filter((evaluation) => evaluation.policyDecision === 'blocked-before-admission').length,
+ evaluations,
+ aggregatePolicy,
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ },
+ roots: {
+ policyReportRoot,
+ synthesisRoot: input.synthesis.roots.synthesisRoot,
+ evaluationRoots,
+ aggregatePolicyRoot,
+ },
+ };
+}
+
+export function assertDepositAssetPackOptionPolicyReportSourceSafe(
+ report: DepositAssetPackOptionPolicyReport,
+) {
+ const serialized = stableStringify(report);
+ const noForbiddenMarkers = FORBIDDEN_SOURCE_MARKERS.every((marker) => !serialized.includes(marker));
+ const sourceSafe =
+ report.schema === 'bitcode.deposit.asset-pack-option-policy-report' &&
+ report.policy === 'DepositAssetPackOptionPolicy' &&
+ report.route === '/deposit' &&
+ report.aggregatePolicy.admissionAndIndexingOwnedBy === 'future-gate7-deposit-option-review' &&
+ report.sourceSafety.sourceSafeMetadataOnly === true &&
+ report.sourceSafety.protectedSourceVisible === false &&
+ report.sourceSafety.rawSourceTextVisible === false &&
+ report.sourceSafety.unpaidAssetPackSourceVisible === false &&
+ report.sourceSafety.rawPromptVisible === false &&
+ report.sourceSafety.interpolatedPromptVisible === false &&
+ report.sourceSafety.rawProviderResponseVisible === false &&
+ report.sourceSafety.walletPrivateMaterialVisible === false &&
+ report.sourceSafety.settlementPrivatePayloadVisible === false &&
+ report.evaluations.every(
+ (evaluation) =>
+ evaluation.admissionBoundary.admissionAndIndexingOwnedBy === 'future-gate7-deposit-option-review' &&
+ evaluation.admissionBoundary.sourceBearingDisclosureBeforeSettlementVisible === false &&
+ evaluation.btdPotential.estimateOnly === true &&
+ evaluation.btdPotential.btdMintBoundary === 'not-minted-until-future-need-fit-settlement' &&
+ evaluation.compensation.priceAsset === 'BTC' &&
+ evaluation.compensation.sourceToSharesProofState === 'not-created-until-accepted-need-fit-and-settlement' &&
+ evaluation.visibility.sourceSafeMetadataOnly === true &&
+ evaluation.visibility.protectedSourceVisible === false &&
+ evaluation.visibility.rawSourceTextVisible === false &&
+ evaluation.visibility.unpaidAssetPackSourceVisible === false &&
+ evaluation.visibility.walletPrivateMaterialVisible === false,
+ ) &&
+ noForbiddenMarkers;
+
+ return {
+ admitted: sourceSafe,
+ reason: sourceSafe ? 'source_safe_deposit_asset_pack_option_policy' : 'deposit_option_policy_source_safety_boundary_violation',
+ };
+}
diff --git a/packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts b/packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts
new file mode 100644
index 00000000..3bd24483
--- /dev/null
+++ b/packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts
@@ -0,0 +1,461 @@
+export type DepositAssetPackOptionKind =
+ | 'capability-slice'
+ | 'implementation-pattern'
+ | 'proof-operations-slice';
+
+export type DepositAssetPackOptionReviewState =
+ | 'reviewable-source-safe-option'
+ | 'blocked-source-binding'
+ | 'blocked-empty-source';
+
+export interface DepositOptionDemandSignal {
+ id?: string | null;
+ label?: string | null;
+ summary?: string | null;
+ weight?: number | null;
+}
+
+export interface DepositOptionSynthesisRequest {
+ repositoryFullName?: string | null;
+ sourceBranch?: string | null;
+ sourceCommit?: string | null;
+ depositorInstructions?: string | null;
+ sourcePathHints?: string[] | null;
+ depositoryDemandSignals?: DepositOptionDemandSignal[] | null;
+ readingDemandSignals?: DepositOptionDemandSignal[] | null;
+ existingDepositorySignals?: DepositOptionDemandSignal[] | null;
+ createdAt?: string | null;
+}
+
+export interface DepositAssetPackOptionMeasurement {
+ id: string;
+ label: string;
+ measurementKind: 'source-coverage' | 'demand-alignment' | 'reuse-likelihood';
+ weight: number;
+ volume: number;
+ evidenceRoot: string;
+}
+
+export interface DepositAssetPackOption {
+ schema: 'bitcode.deposit.asset-pack-option';
+ optionId: string;
+ kind: DepositAssetPackOptionKind;
+ title: string;
+ summary: string;
+ sourceBinding: {
+ repositoryFullName: string | null;
+ sourceBranch: string | null;
+ sourceCommit: string | null;
+ sourcePathRoots: string[];
+ sourcePathCount: number;
+ rawSourceStoredExternally: true;
+ protectedSourceVisibleInOption: false;
+ };
+ demandAlignment: {
+ posture: 'source-safe-demand-signals-only';
+ depositorySignalRoots: string[];
+ readingSignalRoots: string[];
+ existingDepositorySignalRoots: string[];
+ confidence: number;
+ };
+ measurements: DepositAssetPackOptionMeasurement[];
+ reviewBoundary: {
+ state: DepositAssetPackOptionReviewState;
+ decision: 'pending-depositor-review';
+ depositAdmissionBoundary: 'not-admitted-until-depositor-approval';
+ btdMintBoundary: 'not-minted-by-deposit-option';
+ settlementBoundary: 'future-reader-settlement-required-for-source-bearing-assetpack';
+ };
+ policyBoundary: {
+ sourceCriticalityPolicy: 'deferred-to-gate6';
+ demandRoiPolicy: 'deferred-to-gate6';
+ compensationPolicy: 'deferred-to-gate6';
+ };
+ visibility: {
+ sourceSafeMetadataOnly: true;
+ protectedSourceVisible: false;
+ rawSourceTextVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ rawPromptVisible: false;
+ interpolatedPromptVisible: false;
+ rawProviderResponseVisible: false;
+ walletPrivateMaterialVisible: false;
+ };
+ roots: {
+ optionRoot: string;
+ sourceBindingRoot: string;
+ demandAlignmentRoot: string;
+ measurementRoot: string;
+ reviewBoundaryRoot: string;
+ };
+}
+
+export interface DepositAssetPackOptionSynthesis {
+ schema: 'bitcode.deposit.asset-pack-option-synthesis';
+ pipeline: 'DepositAssetPackOptionSynthesis';
+ requestId: string;
+ createdAt: string;
+ request: {
+ repositoryFullName: string | null;
+ sourceBranch: string | null;
+ sourceCommit: string | null;
+ depositorInstructionRoot: string | null;
+ sourcePathRoots: string[];
+ };
+ options: DepositAssetPackOption[];
+ optionCount: number;
+ sourceSafety: {
+ sourceSafeMetadataOnly: true;
+ protectedSourceVisible: false;
+ rawSourceTextVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ rawPromptVisible: false;
+ interpolatedPromptVisible: false;
+ rawProviderResponseVisible: false;
+ walletPrivateMaterialVisible: false;
+ };
+ reviewBoundary: {
+ route: '/deposit';
+ defaultDecisionState: 'pending-depositor-review';
+ approvedOptionsAdmittedBy: 'future-gate7-deposit-option-review';
+ sourceCriticalityDemandRoiPolicyOwnedBy: 'future-gate6-policy';
+ };
+ roots: {
+ requestRoot: string;
+ synthesisRoot: string;
+ optionRoots: string[];
+ };
+}
+
+const OPTION_BLUEPRINTS: Array<{
+ kind: DepositAssetPackOptionKind;
+ title: string;
+ summary: string;
+ measurementBias: number;
+}> = [
+ {
+ kind: 'capability-slice',
+ title: 'Repository capability AssetPack option',
+ summary:
+ 'A source-safe option describing a bounded capability slice that may satisfy future Reading demand without exposing protected source before settlement.',
+ measurementBias: 0.72,
+ },
+ {
+ kind: 'implementation-pattern',
+ title: 'Implementation pattern AssetPack option',
+ summary:
+ 'A source-safe option describing reusable implementation patterns, integration constraints, and reviewable measurements for future Need-Fit use.',
+ measurementBias: 0.66,
+ },
+ {
+ kind: 'proof-operations-slice',
+ title: 'Proof and operations AssetPack option',
+ summary:
+ 'A source-safe option describing proof, telemetry, operational, or validation material that can improve future AssetPack synthesis quality.',
+ measurementBias: 0.61,
+ },
+];
+
+const FORBIDDEN_SOURCE_MARKERS = [
+ 'PRIVATE_SOURCE_DO_NOT_SERIALIZE',
+ 'BEGIN_PRIVATE_KEY',
+ 'wallet_private_material',
+ 'raw_provider_response',
+ 'unpaid_assetpack_source',
+];
+
+function stableStringify(value: unknown): string {
+ if (value === null || typeof value !== 'object') return JSON.stringify(value);
+ if (Array.isArray(value)) return `[${value.map((entry) => stableStringify(entry)).join(',')}]`;
+ return `{${Object.keys(value as Record)
+ .sort()
+ .map((key) => `${JSON.stringify(key)}:${stableStringify((value as Record)[key])}`)
+ .join(',')}}`;
+}
+
+function stableHash(value: unknown) {
+ const text = typeof value === 'string' ? value : stableStringify(value);
+ let hash = 2166136261;
+ for (let index = 0; index < text.length; index += 1) {
+ hash ^= text.charCodeAt(index);
+ hash = Math.imul(hash, 16777619);
+ }
+ return (hash >>> 0).toString(16).padStart(8, '0');
+}
+
+function root(prefix: string, value: unknown) {
+ return `${prefix}:${stableHash(value)}`;
+}
+
+function normalizedText(value: string | null | undefined) {
+ const normalized = value?.trim();
+ return normalized ? normalized : null;
+}
+
+function normalizedList(value: string[] | null | undefined) {
+ return [...new Set((value || []).map((entry) => entry.trim()).filter(Boolean))].sort();
+}
+
+function normalizedSignals(value: DepositOptionDemandSignal[] | null | undefined) {
+ return (value || [])
+ .map((signal, index) => ({
+ id: normalizedText(signal.id) || `signal-${index + 1}`,
+ label: normalizedText(signal.label) || normalizedText(signal.summary) || `Demand signal ${index + 1}`,
+ summary: normalizedText(signal.summary) || normalizedText(signal.label) || 'Source-safe demand signal',
+ weight: Math.max(0, Math.min(1, Number(signal.weight ?? 0.5))),
+ }))
+ .sort((left, right) => left.id.localeCompare(right.id));
+}
+
+function signalRoots(prefix: string, signals: ReturnType) {
+ return signals.map((signal) => root(prefix, signal));
+}
+
+function confidenceFor(input: {
+ blueprintBias: number;
+ hasRepository: boolean;
+ hasRevision: boolean;
+ sourcePathCount: number;
+ signalCount: number;
+}) {
+ const repositoryBoost = input.hasRepository ? 0.08 : -0.18;
+ const revisionBoost = input.hasRevision ? 0.08 : -0.12;
+ const sourceBoost = Math.min(0.08, input.sourcePathCount * 0.02);
+ const demandBoost = Math.min(0.08, input.signalCount * 0.015);
+ return Number(Math.max(0.1, Math.min(0.98, input.blueprintBias + repositoryBoost + revisionBoost + sourceBoost + demandBoost)).toFixed(2));
+}
+
+function measurementsFor(input: {
+ optionId: string;
+ confidence: number;
+ sourcePathCount: number;
+ signalCount: number;
+}): DepositAssetPackOptionMeasurement[] {
+ const sourceCoverage = Number(Math.min(1, 0.42 + input.sourcePathCount * 0.08).toFixed(2));
+ const demandAlignment = Number(Math.min(1, 0.38 + input.signalCount * 0.06 + input.confidence * 0.2).toFixed(2));
+ const reuseLikelihood = Number(Math.min(1, 0.36 + input.confidence * 0.45).toFixed(2));
+ const rows: Array> = [
+ {
+ id: `${input.optionId}:source-coverage`,
+ label: 'Source coverage',
+ measurementKind: 'source-coverage',
+ weight: 0.36,
+ volume: sourceCoverage,
+ },
+ {
+ id: `${input.optionId}:demand-alignment`,
+ label: 'Demand alignment',
+ measurementKind: 'demand-alignment',
+ weight: 0.4,
+ volume: demandAlignment,
+ },
+ {
+ id: `${input.optionId}:reuse-likelihood`,
+ label: 'Reuse likelihood',
+ measurementKind: 'reuse-likelihood',
+ weight: 0.24,
+ volume: reuseLikelihood,
+ },
+ ];
+
+ return rows.map((row) => ({
+ ...row,
+ evidenceRoot: root('deposit-option-measurement', row),
+ }));
+}
+
+export function buildDepositAssetPackOptionSynthesis(
+ request: DepositOptionSynthesisRequest = {},
+): DepositAssetPackOptionSynthesis {
+ const repositoryFullName = normalizedText(request.repositoryFullName);
+ const sourceBranch = normalizedText(request.sourceBranch);
+ const sourceCommit = normalizedText(request.sourceCommit);
+ const depositorInstructions = normalizedText(request.depositorInstructions);
+ const sourcePathHints = normalizedList(request.sourcePathHints);
+ const depositoryDemandSignals = normalizedSignals(request.depositoryDemandSignals);
+ const readingDemandSignals = normalizedSignals(request.readingDemandSignals);
+ const existingDepositorySignals = normalizedSignals(request.existingDepositorySignals);
+ const sourcePathRoots = sourcePathHints.map((path) => root('deposit-option-source-path', path));
+ const hasRepository = Boolean(repositoryFullName);
+ const hasRevision = Boolean(sourceBranch && sourceCommit);
+ const signalCount =
+ depositoryDemandSignals.length + readingDemandSignals.length + existingDepositorySignals.length;
+ const createdAt = normalizedText(request.createdAt) || 'deterministic';
+ const requestRoot = root('deposit-option-request', {
+ repositoryFullName,
+ sourceBranch,
+ sourceCommit,
+ depositorInstructionRoot: depositorInstructions ? root('deposit-option-instructions', depositorInstructions) : null,
+ sourcePathRoots,
+ depositoryDemandSignals,
+ readingDemandSignals,
+ existingDepositorySignals,
+ });
+
+ const options = OPTION_BLUEPRINTS.map((blueprint, index): DepositAssetPackOption => {
+ const optionId = `deposit-option-${index + 1}-${stableHash({
+ kind: blueprint.kind,
+ repositoryFullName,
+ sourceBranch,
+ sourceCommit,
+ sourcePathRoots,
+ })}`;
+ const confidence = confidenceFor({
+ blueprintBias: blueprint.measurementBias,
+ hasRepository,
+ hasRevision,
+ sourcePathCount: sourcePathRoots.length,
+ signalCount,
+ });
+ const measurements = measurementsFor({
+ optionId,
+ confidence,
+ sourcePathCount: sourcePathRoots.length,
+ signalCount,
+ });
+ const reviewState: DepositAssetPackOptionReviewState = !hasRepository
+ ? 'blocked-source-binding'
+ : sourcePathRoots.length === 0
+ ? 'blocked-empty-source'
+ : 'reviewable-source-safe-option';
+ const sourceBinding = {
+ repositoryFullName,
+ sourceBranch,
+ sourceCommit,
+ sourcePathRoots,
+ sourcePathCount: sourcePathRoots.length,
+ rawSourceStoredExternally: true as const,
+ protectedSourceVisibleInOption: false as const,
+ };
+ const demandAlignment = {
+ posture: 'source-safe-demand-signals-only' as const,
+ depositorySignalRoots: signalRoots('deposit-option-depository-demand-signal', depositoryDemandSignals),
+ readingSignalRoots: signalRoots('deposit-option-reading-demand-signal', readingDemandSignals),
+ existingDepositorySignalRoots: signalRoots('deposit-option-existing-supply-signal', existingDepositorySignals),
+ confidence,
+ };
+ const reviewBoundary = {
+ state: reviewState,
+ decision: 'pending-depositor-review' as const,
+ depositAdmissionBoundary: 'not-admitted-until-depositor-approval' as const,
+ btdMintBoundary: 'not-minted-by-deposit-option' as const,
+ settlementBoundary: 'future-reader-settlement-required-for-source-bearing-assetpack' as const,
+ };
+ const optionBase = {
+ optionId,
+ kind: blueprint.kind,
+ title: blueprint.title,
+ summary: blueprint.summary,
+ sourceBinding,
+ demandAlignment,
+ measurements,
+ reviewBoundary,
+ };
+
+ return {
+ schema: 'bitcode.deposit.asset-pack-option',
+ ...optionBase,
+ policyBoundary: {
+ sourceCriticalityPolicy: 'deferred-to-gate6',
+ demandRoiPolicy: 'deferred-to-gate6',
+ compensationPolicy: 'deferred-to-gate6',
+ },
+ visibility: {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ },
+ roots: {
+ optionRoot: root('deposit-asset-pack-option', optionBase),
+ sourceBindingRoot: root('deposit-option-source-binding', sourceBinding),
+ demandAlignmentRoot: root('deposit-option-demand-alignment', demandAlignment),
+ measurementRoot: root('deposit-option-measurements', measurements),
+ reviewBoundaryRoot: root('deposit-option-review-boundary', reviewBoundary),
+ },
+ };
+ });
+ const optionRoots = options.map((option) => option.roots.optionRoot);
+ const synthesisRoot = root('deposit-asset-pack-option-synthesis', {
+ requestRoot,
+ optionRoots,
+ createdAt,
+ });
+
+ return {
+ schema: 'bitcode.deposit.asset-pack-option-synthesis',
+ pipeline: 'DepositAssetPackOptionSynthesis',
+ requestId: requestRoot,
+ createdAt,
+ request: {
+ repositoryFullName,
+ sourceBranch,
+ sourceCommit,
+ depositorInstructionRoot: depositorInstructions ? root('deposit-option-instructions', depositorInstructions) : null,
+ sourcePathRoots,
+ },
+ options,
+ optionCount: options.length,
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ },
+ reviewBoundary: {
+ route: '/deposit',
+ defaultDecisionState: 'pending-depositor-review',
+ approvedOptionsAdmittedBy: 'future-gate7-deposit-option-review',
+ sourceCriticalityDemandRoiPolicyOwnedBy: 'future-gate6-policy',
+ },
+ roots: {
+ requestRoot,
+ synthesisRoot,
+ optionRoots,
+ },
+ };
+}
+
+export function assertDepositAssetPackOptionSynthesisSourceSafe(
+ synthesis: DepositAssetPackOptionSynthesis,
+) {
+ const serialized = stableStringify(synthesis);
+ const noForbiddenMarkers = FORBIDDEN_SOURCE_MARKERS.every((marker) => !serialized.includes(marker));
+ const sourceSafe =
+ synthesis.schema === 'bitcode.deposit.asset-pack-option-synthesis' &&
+ synthesis.pipeline === 'DepositAssetPackOptionSynthesis' &&
+ synthesis.reviewBoundary.route === '/deposit' &&
+ synthesis.sourceSafety.sourceSafeMetadataOnly === true &&
+ synthesis.sourceSafety.protectedSourceVisible === false &&
+ synthesis.sourceSafety.rawSourceTextVisible === false &&
+ synthesis.sourceSafety.unpaidAssetPackSourceVisible === false &&
+ synthesis.sourceSafety.rawPromptVisible === false &&
+ synthesis.sourceSafety.interpolatedPromptVisible === false &&
+ synthesis.sourceSafety.rawProviderResponseVisible === false &&
+ synthesis.sourceSafety.walletPrivateMaterialVisible === false &&
+ synthesis.options.every(
+ (option) =>
+ option.visibility.sourceSafeMetadataOnly === true &&
+ option.visibility.protectedSourceVisible === false &&
+ option.visibility.rawSourceTextVisible === false &&
+ option.visibility.unpaidAssetPackSourceVisible === false &&
+ option.sourceBinding.protectedSourceVisibleInOption === false &&
+ option.reviewBoundary.decision === 'pending-depositor-review' &&
+ option.reviewBoundary.depositAdmissionBoundary === 'not-admitted-until-depositor-approval' &&
+ option.reviewBoundary.btdMintBoundary === 'not-minted-by-deposit-option',
+ ) &&
+ noForbiddenMarkers;
+
+ return {
+ admitted: sourceSafe,
+ reason: sourceSafe ? 'source_safe_deposit_asset_pack_option_synthesis' : 'deposit_option_source_safety_boundary_violation',
+ };
+}
diff --git a/packages/pipelines/asset-pack/src/depository-supply-index.ts b/packages/pipelines/asset-pack/src/depository-supply-index.ts
index f83044db..79f0227e 100644
--- a/packages/pipelines/asset-pack/src/depository-supply-index.ts
+++ b/packages/pipelines/asset-pack/src/depository-supply-index.ts
@@ -11,6 +11,11 @@ export type DepositorySupplyLifecycleState =
| 'indexed-repair-required'
| 'blocked-readiness';
+export type DepositorySupplyCompensationState =
+ | 'eligible-if-selected-for-assetpack'
+ | 'repair-required-before-compensation'
+ | 'blocked-before-compensation';
+
export type DepositorySupplySearchDocumentKind =
| 'lexical'
| 'metadata'
@@ -64,6 +69,7 @@ export interface DepositorySupplyRecord {
settlementRequiredForSourceBearingAssetPack: true;
btdOwnershipBoundary: 'depositor-retains-btd-until-settlement-transfer';
};
+ compensationPreview: DepositorySupplyCompensationPreview;
proofEvidence: {
hasWalletOrAttestationProof: boolean;
proofRoot: string | null;
@@ -88,6 +94,54 @@ export interface DepositorySupplyRecord {
vectorProjectionRoot: string;
storageProjectionRoot: string;
rightsBoundaryRoot: string;
+ compensationPreviewRoot: string;
+ };
+}
+
+export interface DepositorySupplyCompensationPreview {
+ schema: 'bitcode.depository.supply-compensation-preview';
+ state: DepositorySupplyCompensationState;
+ assetId: string;
+ depositId: string;
+ depositorWalletId: string | null;
+ candidateBtdRange: string | null;
+ compensationRoute: {
+ payer: 'future-reader-after-settlement';
+ payee: 'depositing-wallet';
+ priceAsset: 'BTC';
+ allocationMethod: 'source-to-shares-largest-remainder';
+ sourceToSharesProofState: 'not-created-until-accepted-need-fit-and-settlement';
+ btdMintBoundary: 'not-minted-by-deposit-admission';
+ btdRightsTransferBoundary: 'reader-receives-rights-only-after-btc-settlement';
+ };
+ readiness: {
+ sourceBound: boolean;
+ proofReady: boolean;
+ measurementReady: boolean;
+ searchable: boolean;
+ depositorWalletReady: boolean;
+ eligibleForFindingFits: boolean;
+ eligibleForCompensationIfSelected: boolean;
+ blockers: string[];
+ warnings: string[];
+ };
+ visibility: {
+ beforeSettlement: 'source-safe-compensation-route-metadata';
+ protectedSourceVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ walletPrivateMaterialVisible: false;
+ settlementPrivatePayloadVisible: false;
+ };
+ readback: {
+ ledgerAccountKeys: string[];
+ databaseProjectionTables: string[];
+ objectStorageVisibility: 'source-safe-metadata-only-before-settlement';
+ };
+ roots: {
+ compensationRouteRoot: string;
+ sourceToSharesPreviewRoot: string;
+ readbackRoot: string;
+ compensationPreviewRoot: string;
};
}
@@ -401,6 +455,117 @@ function buildVectorProjection(input: {
};
}
+function buildCompensationPreview(input: {
+ assetId: string;
+ depositId: string;
+ depositorWalletId: string | null;
+ btdRange: string | null;
+ sourceBound: boolean;
+ proofReady: boolean;
+ measurementReady: boolean;
+ searchable: boolean;
+ blockers: string[];
+ warnings: string[];
+}): DepositorySupplyCompensationPreview {
+ const compensationBlockers = [
+ ...input.blockers,
+ ...(!input.depositorWalletId ? ['depositor_wallet_missing'] : []),
+ ...(!input.proofReady ? ['wallet_or_attestation_proof_missing'] : []),
+ ...(!input.measurementReady ? ['asset_measurement_evidence_missing'] : []),
+ ...(!input.searchable ? ['depository_searchability_missing'] : []),
+ ];
+ const eligibleForCompensationIfSelected = compensationBlockers.length === 0;
+ const state: DepositorySupplyCompensationState = eligibleForCompensationIfSelected
+ ? 'eligible-if-selected-for-assetpack'
+ : input.blockers.length
+ ? 'blocked-before-compensation'
+ : 'repair-required-before-compensation';
+ const compensationRoute = {
+ payer: 'future-reader-after-settlement' as const,
+ payee: 'depositing-wallet' as const,
+ priceAsset: 'BTC' as const,
+ allocationMethod: 'source-to-shares-largest-remainder' as const,
+ sourceToSharesProofState: 'not-created-until-accepted-need-fit-and-settlement' as const,
+ btdMintBoundary: 'not-minted-by-deposit-admission' as const,
+ btdRightsTransferBoundary: 'reader-receives-rights-only-after-btc-settlement' as const,
+ };
+ const readback = {
+ ledgerAccountKeys: [
+ `supplier:${input.assetId}:pending_claims`,
+ ...(input.depositorWalletId
+ ? [
+ `depositor:${input.depositorWalletId}:deposited_assets`,
+ `depositor:${input.depositorWalletId}:eligible_compensation_routes`,
+ ]
+ : []),
+ ],
+ databaseProjectionTables: [
+ 'deliverables',
+ 'deliverable_vectors',
+ 'ledger_entries',
+ 'source_to_shares_allocations',
+ ],
+ objectStorageVisibility: 'source-safe-metadata-only-before-settlement' as const,
+ };
+ const compensationRouteRoot = root('sha256', compensationRoute);
+ const sourceToSharesPreviewRoot = root('sha256', {
+ assetId: input.assetId,
+ depositId: input.depositId,
+ depositorWalletId: input.depositorWalletId,
+ candidateBtdRange: input.btdRange,
+ allocationMethod: compensationRoute.allocationMethod,
+ sourceToSharesProofState: compensationRoute.sourceToSharesProofState,
+ });
+ const readbackRoot = root('sha256', readback);
+ const readiness = {
+ sourceBound: input.sourceBound,
+ proofReady: input.proofReady,
+ measurementReady: input.measurementReady,
+ searchable: input.searchable,
+ depositorWalletReady: Boolean(input.depositorWalletId),
+ eligibleForFindingFits: input.searchable,
+ eligibleForCompensationIfSelected,
+ blockers: uniqueSorted(compensationBlockers),
+ warnings: uniqueSorted(input.warnings),
+ };
+ const visibility = {
+ beforeSettlement: 'source-safe-compensation-route-metadata' as const,
+ protectedSourceVisible: false as const,
+ unpaidAssetPackSourceVisible: false as const,
+ walletPrivateMaterialVisible: false as const,
+ settlementPrivatePayloadVisible: false as const,
+ };
+ const compensationPreviewRoot = root('sha256', {
+ assetId: input.assetId,
+ depositId: input.depositId,
+ state,
+ readiness,
+ compensationRouteRoot,
+ sourceToSharesPreviewRoot,
+ readbackRoot,
+ visibility,
+ });
+
+ return {
+ schema: 'bitcode.depository.supply-compensation-preview',
+ state,
+ assetId: input.assetId,
+ depositId: input.depositId,
+ depositorWalletId: input.depositorWalletId,
+ candidateBtdRange: input.btdRange,
+ compensationRoute,
+ readiness,
+ visibility,
+ readback,
+ roots: {
+ compensationRouteRoot,
+ sourceToSharesPreviewRoot,
+ readbackRoot,
+ compensationPreviewRoot,
+ },
+ };
+}
+
function recordEmbeddingInputs(record: Record): Record {
return (
recordValue(record.embeddings) ||
@@ -553,6 +718,8 @@ function buildSupplyRecord(input: {
embeddings: recordEmbeddingInputs(record),
});
const storageProjection = buildStorageProjection();
+ const depositorWalletId = firstString(record.depositorWalletId, metadata.depositorWalletId, getPath(record, ['depositorBoundary', 'walletId']));
+ const btdRange = firstString(record.btdRange, metadata.btdRange, getPath(record, ['btd', 'range']));
const blockers = [
...(!repositoryFullName ? ['repository_binding_missing'] : []),
...(!sourceBranch && !sourceCommit ? ['source_revision_binding_missing'] : []),
@@ -560,6 +727,7 @@ function buildSupplyRecord(input: {
const warnings = [
...(!hasWalletOrAttestationProof ? ['wallet_or_attestation_proof_missing'] : []),
...(!hasAssetMeasurementEvidence ? ['asset_measurement_evidence_missing'] : []),
+ ...(!depositorWalletId ? ['depositor_wallet_missing'] : []),
...(vectorProjection.rows.some((row) => row.embeddingState === 'pending-embedding')
? ['embedding_rows_pending']
: []),
@@ -584,11 +752,12 @@ function buildSupplyRecord(input: {
...(!sourceBranch && !sourceCommit ? ['bind-source-branch-or-commit'] : []),
...(!hasWalletOrAttestationProof ? ['collect-wallet-or-attestation-proof'] : []),
...(!hasAssetMeasurementEvidence ? ['compute-asset-measurement'] : []),
+ ...(!depositorWalletId ? ['bind-depositor-wallet-for-compensation'] : []),
...(!vectorProjectionReady ? ['sync-active-embedding-vector-rows'] : []),
]);
const rightsBoundary = {
- depositorWalletId: firstString(record.depositorWalletId, metadata.depositorWalletId, getPath(record, ['depositorBoundary', 'walletId'])),
- btdRange: firstString(record.btdRange, metadata.btdRange, getPath(record, ['btd', 'range'])),
+ depositorWalletId,
+ btdRange,
readerVisibilityBeforeSettlement: 'source-safe-metadata-only' as const,
protectedSourceBeforeSettlementVisible: false as const,
settlementRequiredForSourceBearingAssetPack: true as const,
@@ -625,12 +794,25 @@ function buildSupplyRecord(input: {
const vectorProjectionRoot = root('sha256', vectorProjection);
const storageProjectionRoot = root('sha256', storageProjection);
const rightsBoundaryRoot = root('sha256', rightsBoundary);
+ const compensationPreview = buildCompensationPreview({
+ assetId,
+ depositId,
+ depositorWalletId,
+ btdRange,
+ sourceBound: Boolean(repositoryFullName && (sourceBranch || sourceCommit)),
+ proofReady,
+ measurementReady,
+ searchable,
+ blockers,
+ warnings,
+ });
const supplyRoot = root('sha256', {
assetId,
depositId,
sourceBinding,
lifecycle: { state, searchable, blockers, warnings },
rightsBoundaryRoot,
+ compensationPreviewRoot: compensationPreview.roots.compensationPreviewRoot,
searchDocumentRoot,
vectorProjectionRoot,
storageProjectionRoot,
@@ -660,6 +842,7 @@ function buildSupplyRecord(input: {
warnings,
},
rightsBoundary,
+ compensationPreview,
proofEvidence,
measurementEvidence,
readbackEvidence,
@@ -674,6 +857,7 @@ function buildSupplyRecord(input: {
vectorProjectionRoot,
storageProjectionRoot,
rightsBoundaryRoot,
+ compensationPreviewRoot: compensationPreview.roots.compensationPreviewRoot,
},
};
}
diff --git a/packages/pipelines/asset-pack/src/index.ts b/packages/pipelines/asset-pack/src/index.ts
index 826ec427..2803567e 100644
--- a/packages/pipelines/asset-pack/src/index.ts
+++ b/packages/pipelines/asset-pack/src/index.ts
@@ -437,6 +437,9 @@ export * from './asset-pack-settlement-rights-delivery';
export * from './reading-operational-telemetry-repair-readback';
export * from './reading-interface-product-parity';
export * from './reading-local-staging-rehearsal';
+export * from './deposit-asset-pack-options';
+export * from './deposit-asset-pack-option-policy';
+export * from './deposit-asset-pack-option-admission';
export * from './embedding-config';
export * from './asset-pack-disclosure';
export * from './read-need-review-resynthesis';
diff --git a/packages/protocol/README.md b/packages/protocol/README.md
index 5ed392bb..8845487f 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 (`V41` active, `V42` draft after V41 promotion);
+- active/draft canon posture (`V43` active, `V44` draft after V43 promotion);
- spec-family and canonical-input validation helpers;
- canon-posture drift reporting;
- `DocumentationSurfaceCatalog` helpers for V35 documentation surface proof;
@@ -59,9 +59,124 @@ Current exported commercial helpers include:
- `V41RegistryInterpolationContracts` helpers for V41 source-safe registry composition, interpolation key, execution ancestry, tool prompt injection, context handling, and parser target contracts;
- `V41ReadingPromptBenchmarkBaselines` helpers for V41 source-safe Reading prompt baseline rows across `ReadNeedComprehensionSynthesis`, `ReadFitsFindingSynthesis`, all five Reading UX steps, V38 benchmark fixtures, Gate 2 inventory roots, Gate 3 registry/interpolation roots, parser targets, deterministic scores, and source-safe disclosure tiers;
- `V41PromotionReadinessReport` helpers for V41 source-safe prompt-program promotion readiness across all V41 prompt artifacts, generated proof support, workflow posture, promotion dry-run support, and active V41 / draft V42 runtime preparation;
+- `V42SettlementRightsDelivery` helpers for V42 source-safe BTC payment observation, finality gating, source-to-shares compensation, BTD read-right transfer, repository delivery unlock, ledger/database/object-storage reconciliation, Terminal readback, and source-safe paid-boundary proof;
+- `V42AiReadingDemonstration` helpers for V42 source-safe AI-reading demonstration proof: public-data-only baseline, reviewed local Need, local Finding Fits, source-safe AssetPack preview, AssetPack-enhanced AI answer, deterministic benchmark uplift, self-contained demonstration boundary, and workflow wiring;
+- `V42LocalStagingMvpRehearsal` helpers for V42 source-safe local/staging-testnet full MVP rehearsal proof across Depositing, Reading, Finding Fits, preview/quote, settlement, BTD rights transfer, repository delivery, AI-reading uplift, telemetry/database readback, operator receipts, and blocked value-bearing mainnet;
+- `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;
- canonical proven-generation helpers;
- the package app/server context used by commercial interfaces.
+V43 Gate 1 opens the Packs, Read, Deposit draft over `V42` active, `V43`
+draft posture. It specifies `/exchange` to `/packs`, `/terminal` separation
+into `/read` and `/deposit`, agentic deposit AssetPack option synthesis,
+searchable pack activity master-detail, source-safe option review, and product
+UX cleanup through `check:v43-gate1`.
+
+V43 Gate 2 adds `V43RouteVocabularyInventory` through
+`packages/protocol/src/canonical/v43-route-vocabulary-inventory.js`,
+`packages/protocol/test/v43-route-vocabulary-inventory.test.js`,
+`.bitcode/v43-route-vocabulary-inventory.json`,
+`generate:v43-route-vocabulary-inventory`,
+`check:v43-route-vocabulary-inventory`, and `check:v43-gate2`.
+The artifact is source-safe metadata only: it records file paths, token counts,
+category counts, migration rows, and proof roots, but never source snippets,
+protected source, raw prompts, provider responses, unpaid AssetPack source,
+credentials, wallet private material, or private settlement payloads.
+
+V43 Gate 3 adds `V43PacksActivityMasterDetail` through
+`packages/protocol/src/canonical/v43-packs-activity-master-detail.js`,
+`packages/protocol/test/v43-packs-activity-master-detail.test.js`,
+`.bitcode/v43-packs-activity-master-detail.json`,
+`generate:v43-packs-activity-master-detail`,
+`check:v43-packs-activity-master-detail`, and `check:v43-gate3`. It binds
+`PackActivityRecord`, `PacksActivityDetail`, `/api/packs/activity`, `/packs`,
+`/exchange` compatibility redirection, search, filtering, sorting, proof-root
+display, settlement/compensation/delivery/repair state readback, source-safe
+metadata expansion, and no-source leak tests.
+
+V43 Gate 4 adds `V43ReadRouteFiveStepUx` through
+`packages/protocol/src/canonical/v43-read-route-five-step-ux.js`,
+`packages/protocol/test/v43-read-route-five-step-ux.test.js`,
+`.bitcode/v43-read-route-five-step-ux.json`,
+`generate:v43-read-route-five-step-ux`,
+`check:v43-read-route-five-step-ux`, and `check:v43-gate4`. It binds
+`ReadRouteSession`, `/read`, five-step Reading UX, Need review,
+accepted-Need-gated Finding Fits, source-safe AssetPack preview, BTC
+settlement/delivery posture, retained execution stream readback, route
+navigation, and no-source leak tests.
+
+V43 Gate 5 adds `V43DepositRouteOptions` through
+`packages/protocol/src/canonical/v43-deposit-route-options.js`,
+`packages/protocol/test/v43-deposit-route-options.test.js`,
+`.bitcode/v43-deposit-route-options.json`,
+`generate:v43-deposit-route-options`,
+`check:v43-deposit-route-options`, and `check:v43-gate5`. It binds
+`DepositRouteSession`, `/deposit`, five-step Depositing UX,
+`DepositAssetPackOptionSynthesis`, multiple source-safe AssetPack options,
+demand signal roots, option measurement roots, retained deposit composer reuse,
+route navigation, and no-source leak tests while leaving Gate 6 policy and Gate
+7 admission/indexing deferred.
+
+V43 Gate 6 adds `DepositAssetPackOptionPolicyReport` through
+`packages/protocol/src/canonical/v43-deposit-policy-compensation.js`,
+`packages/protocol/test/v43-deposit-policy-compensation.test.js`,
+`.bitcode/v43-deposit-policy-compensation.json`,
+`generate:v43-deposit-policy-compensation`,
+`check:v43-deposit-policy-compensation`, and `check:v43-gate6`. It binds
+source criticality, likely demand, deterministic ROI, estimate-only BTD
+potential, critical-source pre-admission blocking, and BTC source-to-shares
+compensation route preview while keeping Gate 7 responsible for depositor
+approval, admission, indexing, storage projection, telemetry, and `/packs`
+activity synchronization.
+
+V43 Gate 7 adds `DepositAssetPackOptionAdmissionReport` through
+`packages/protocol/src/canonical/v43-deposit-option-admission.js`,
+`packages/protocol/test/v43-deposit-option-admission.test.js`,
+`.bitcode/v43-deposit-option-admission.json`,
+`generate:v43-deposit-option-admission`,
+`check:v43-deposit-option-admission`, and `check:v43-gate7`. It binds
+depositor approve/reject/resynthesis decisions, source-safe admission receipts,
+Depository index/storage projections, BTC source-to-shares compensation preview
+continuity, execution-stream telemetry, and `/packs` `depository-assetpack`
+synchronization while keeping BTD mint, rights transfer, settlement broadcast,
+and unpaid AssetPack source disclosure outside deposit-side admission.
+
+V43 Gate 8 adds `V43RouteUxProductExcellence` through
+`packages/protocol/src/canonical/v43-route-ux-product-excellence.js`,
+`packages/protocol/test/v43-route-ux-product-excellence.test.js`,
+`.bitcode/v43-route-ux-product-excellence.json`,
+`generate:v43-route-ux-product-excellence`,
+`check:v43-route-ux-product-excellence`, and `check:v43-gate8`. It binds the
+shared product route shell, Reading/Depositing step grid, loading/empty/error
+state panels, progressive disclosure, concise route copy, focused route tests,
+and workflow wiring for `/packs`, `/read`, and `/deposit` without exposing
+protected source, unpaid AssetPack source, prompts, provider responses, wallet
+private material, or private settlement payloads.
+
+V43 Gate 9 adds `V43CrossRouteRehearsalTelemetryRepair` through
+`packages/protocol/src/canonical/v43-cross-route-rehearsal-telemetry-repair.js`,
+`packages/protocol/test/v43-cross-route-rehearsal-telemetry-repair.test.js`,
+`.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`,
+`scripts/rehearse-v43-cross-route-product-flow.mjs`,
+`generate:v43-cross-route-rehearsal`, `check:v43-cross-route-rehearsal`, and
+`check:v43-gate9`. It binds local/staging-testnet rehearsal rows for
+`/deposit`, `/read`, `/packs`, telemetry/database readback,
+ledger/database/storage synchronization, repair posture, settlement delivery,
+and compensation readback while keeping receipts source-safe and value-bearing
+mainnet execution blocked.
+
+V43 Gate 10 adds `V43PromotionReadinessReport` through
+`packages/protocol/src/canonical/v43-promotion-readiness-report.js`,
+`packages/protocol/test/v43-promotion-readiness.test.js`,
+`.bitcode/v43-promotion-readiness-report.json`,
+`generate:v43-promotion-readiness`, `check:v43-promotion-readiness`,
+`check:v43-gate10`, and `v43-canon-promotion.yml`. It binds all V43 product
+route artifacts, workflows, generated PROVEN support, promotion scripts,
+source-safety checks, documentation evidence, and the `V43` active, `V44` draft
+posture needed before canonical promotion.
+
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.
@@ -176,6 +291,100 @@ runtime canon rewriting, dry-run promotion, source-safety, and value-bearing
mainnet blocking without serializing raw prompts, provider responses, protected
source, credentials, private settlement payloads, wallet material, or unpaid
AssetPack source.
+V42 Gate 1 is wired through `check:v42-gate1` and opens the reliable MVP
+experience specification family for the `V41` active, `V42` draft posture:
+shortest-path Depositing with Depository admission proof and later BTC
+compensation visibility; shortest-path Reading through Read Request, reviewed
+Need, Finding Fits, source-safe AssetPack preview, BTD/BTC settlement, rights
+transfer, and repository delivery; and an AI-reading dominant standalone
+demonstration that proves an AssetPack can improve an AI system beyond a
+public-data-only baseline.
+V42 Gate 2 adds `V42DepositingShortestPath` through
+`packages/protocol/src/canonical/v42-depositing-shortest-path.js`,
+`packages/protocol/test/v42-depositing-shortest-path.test.js`,
+`.bitcode/v42-depositing-shortest-path.json`, and `check:v42-gate2`.
+It proves deposit route readiness, Depository search/vector/storage projection,
+source-safe compensation preview roots, source-to-shares ledger readback keys,
+Terminal compensation visibility, and the pre-mint/no-pre-settlement-source
+boundary.
+V42 Gate 3 adds the V42 Reading shortest path state machine,
+`V42ReadingShortestPathStateMachine`, through
+`packages/protocol/src/canonical/v42-reading-shortest-path-state-machine.js`,
+`packages/protocol/test/v42-reading-shortest-path-state-machine.test.js`,
+`.bitcode/v42-reading-shortest-path-state-machine.json`, and
+`check:v42-gate3`. It proves the five-step Reading path, transaction/stage
+route persistence, accepted-Need gating, restart/retry/failure repair,
+low-detail proof-on-expand UI posture, rich Reading pipeline telemetry
+readback, activity/workbench readback, and source-safe disclosure boundaries.
+V42 Gate 4 adds `V42ReadNeedReviewResynthesisProductClosure` through
+`packages/protocol/src/canonical/v42-readneed-review-resynthesis-product-closure.js`,
+`packages/protocol/test/v42-readneed-review-resynthesis-product-closure.test.js`,
+`.bitcode/v42-readneed-review-resynthesis-product-closure.json`, and
+`check:v42-gate4`. It proves ReadNeed review/resynthesis product closure:
+source-safe Read Request and Need storage, feedback lineage, Need measurement,
+accepted-Need admission, rejected Need blockers, PTRR/Failsafe/Thricified
+telemetry receipts, `/api/read-review` action coverage, Terminal runtime
+readback, and source-safe disclosure boundaries.
+V42 Gate 5 adds `V42ReadFitsFindingPreviewQuote` through
+`packages/protocol/src/canonical/v42-readfitsfinding-preview-quote.js`,
+`packages/protocol/test/v42-readfitsfinding-preview-quote.test.js`,
+`.bitcode/v42-readfitsfinding-preview-quote.json`, and `check:v42-gate5`.
+It proves accepted-Need-gated Finding Fits, many-channel Depository search,
+candidate ranking, selected-fit provenance, source-safe AssetPack preview,
+deterministic share-to-fee quote receipts, disclosure review, settlement
+instructions, delivery lock, harness route summaries, Terminal
+preview/quote/provenance readback, and no pre-settlement protected source or
+unpaid AssetPack source exposure.
+V42 Gate 6 adds `V42SettlementRightsDelivery` through
+`packages/protocol/src/canonical/v42-settlement-rights-delivery.js`,
+`packages/protocol/test/v42-settlement-rights-delivery.test.js`,
+`.bitcode/v42-settlement-rights-delivery.json`,
+`generate:v42-settlement-rights-delivery`,
+`check:v42-settlement-rights-delivery`, and `check:v42-gate6`.
+The artifact is source-safe metadata only and covers paid quote observation,
+BTC/testnet finality, BTD rights transfer, paid read receipts,
+source-to-shares compensation conservation, repository pull-request delivery
+unlock, ledger/database/object-storage reconciliation, fail-closed repair
+posture, harness route summaries, Terminal settlement readback, and workflow
+proof wiring without serializing protected source, unpaid AssetPack source,
+wallet private material, private settlement payloads, credentials, raw
+protected prompts, or raw provider responses.
+V42 Gate 7 adds `V42AiReadingDemonstration` through
+`packages/protocol/src/canonical/v42-ai-reading-demonstration.js`,
+`packages/protocol/test/v42-ai-reading-demonstration.test.js`,
+`.bitcode/v42-ai-reading-demonstration.json`,
+`generate:v42-ai-reading-demonstration`,
+`check:v42-ai-reading-demonstration`, and `check:v42-gate7`.
+The artifact is source-safe metadata only and covers the self-contained
+`protocol-demonstration/` AI-reading loop: public-data-only baseline, reviewed
+local Need, local Depository fit selection, AssetPack preview, AssetPack-
+enhanced answer, deterministic benchmark uplift, settlement-gated source
+visibility, and workflow proof wiring.
+V42 Gate 8 adds `V42LocalStagingMvpRehearsal` through
+`packages/protocol/src/canonical/v42-local-staging-mvp-rehearsal.js`,
+`packages/protocol/test/v42-local-staging-mvp-rehearsal.test.js`,
+`.bitcode/v42-local-staging-mvp-rehearsal.json`,
+`rehearse:v42-local-staging`,
+`generate:v42-local-staging-mvp-rehearsal`,
+`check:v42-local-staging-mvp-rehearsal`, and `check:v42-gate8`.
+The artifact is source-safe metadata only and binds Gates 2 through 7 into the
+local/staging full MVP rehearsal: deposit source, request read, review
+synthesized Need, request Finding Fits, review source-safe AssetPack preview
+and quote, buy/settle, receive repository delivery, inspect telemetry/database
+readback, and keep value-bearing mainnet blocked.
+V42 Gate 9 adds `V42PromotionReadinessReport` through
+`packages/protocol/src/canonical/v42-promotion-readiness-report.js`,
+`packages/protocol/test/v42-promotion-readiness.test.js`,
+`.bitcode/v42-promotion-readiness-report.json`,
+`generate:v42-promotion-readiness`, `check:v42-promotion-readiness`, and
+`check:v42-gate9`.
+The report closes the reliable MVP promotion path by binding all V42 gate
+artifacts, `BITCODE_SPEC_V42_PROVEN.md`, `v42-canon-promotion.yml`,
+promotion scripts, runtime canon rewriting, dry-run promotion, source-safety,
+value-bearing mainnet blocking, and the `V42` active, `V43` draft posture
+without serializing protected source, credentials, private settlement payloads,
+wallet material, raw protected prompts, raw provider responses, or unpaid
+AssetPack source.
V40 Gate 2 adds `V40TestInventoryCoverageMatrix` through
`packages/protocol/src/canonical/v40-test-inventory-coverage-matrix.js`,
`packages/protocol/test/v40-test-inventory-coverage-matrix.test.js`,
diff --git a/packages/protocol/data/state.json b/packages/protocol/data/state.json
index 7394bf19..3b8632e7 100644
--- a/packages/protocol/data/state.json
+++ b/packages/protocol/data/state.json
@@ -1,18 +1,18 @@
{
"version": 3,
- "specVersion": "Bitcode Spec V41 active canon / V42 system draft",
+ "specVersion": "Bitcode Spec V43 active canon / V44 system draft",
"canonPosture": {
- "activeCanonVersion": "V41",
- "draftTargetVersion": "V42",
- "operatorLabel": "V41 active canon / V42 system draft",
- "specVersionLabel": "Bitcode Spec V41 active canon / V42 system draft",
+ "activeCanonVersion": "V43",
+ "draftTargetVersion": "V44",
+ "operatorLabel": "V43 active canon / V44 system draft",
+ "specVersionLabel": "Bitcode Spec V43 active canon / V44 system draft",
"documentTitle": "Bitcode Demonstration",
- "policyRef": "policy://bitcode/spec-v41-active-v42-system-draft/current",
- "activeProvenAppendixPath": "BITCODE_SPEC_V41_PROVEN.md",
- "draftSpecPath": "BITCODE_SPEC_V42.md",
- "draftDeltaPath": "BITCODE_SPEC_V42_DELTA.md",
- "draftParityPath": "BITCODE_SPEC_V42_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",
+ "policyRef": "policy://bitcode/spec-v43-active-v44-system-draft/current",
+ "activeProvenAppendixPath": "BITCODE_SPEC_V43_PROVEN.md",
+ "draftSpecPath": "BITCODE_SPEC_V44.md",
+ "draftDeltaPath": "BITCODE_SPEC_V44_DELTA.md",
+ "draftParityPath": "BITCODE_SPEC_V44_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",
"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/server.js b/packages/protocol/server.js
index 48dbbf05..d7045e4a 100644
--- a/packages/protocol/server.js
+++ b/packages/protocol/server.js
@@ -810,6 +810,13 @@ export function createAppContext({
state.ledger.accounts[depositorAssetsKey] = String(
Number.isFinite(priorDepositorAssetCount) ? priorDepositorAssetCount + 1 : 1
);
+ if (asset.depositoryEvidence?.compensationPreview?.state === 'eligible-if-selected-for-assetpack') {
+ const compensationRoutesKey = `depositor:${asset.depositoryEvidence.depositorBoundary.walletId}:eligible_compensation_routes`;
+ const priorRouteCount = Number(state.ledger.accounts[compensationRoutesKey] || '0');
+ state.ledger.accounts[compensationRoutesKey] = String(
+ Number.isFinite(priorRouteCount) ? priorRouteCount + 1 : 1
+ );
+ }
}
writeState(state);
return { ok: true, asset, depositoryEvidence: asset.depositoryEvidence || null };
diff --git a/packages/protocol/src/bitcode-demo.js b/packages/protocol/src/bitcode-demo.js
index 2f2c7ad0..7ac1b032 100644
--- a/packages/protocol/src/bitcode-demo.js
+++ b/packages/protocol/src/bitcode-demo.js
@@ -565,6 +565,90 @@ function buildDepositoryEvidence(input, inputState) {
measurementRoot,
reconciliationReadbackRoot
});
+ const compensationRoute = {
+ payer: 'future-reader-after-settlement',
+ payee: 'depositing-wallet',
+ priceAsset: 'BTC',
+ allocationMethod: 'source-to-shares-largest-remainder',
+ sourceToSharesProofState: 'not-created-until-accepted-need-fit-and-settlement',
+ btdMintBoundary: 'not-minted-by-deposit-admission',
+ btdRightsTransferBoundary: 'reader-receives-rights-only-after-btc-settlement'
+ };
+ const compensationRouteRoot = stableHashObject(compensationRoute);
+ const sourceToSharesPreviewRoot = stableHashObject({
+ schema: 'bitcode.depository.source-to-shares-preview',
+ assetId: inputState.assetId,
+ repositoryFullName,
+ sourceBranch,
+ sourceCommit,
+ depositorWalletId: walletId,
+ proofRoot,
+ measurementRoot,
+ reconciliationReadbackRoot,
+ allocationMethod: compensationRoute.allocationMethod,
+ sourceToSharesProofState: compensationRoute.sourceToSharesProofState
+ });
+ const compensationReadback = {
+ ledgerAccountKeys: [
+ `supplier:${inputState.assetId}:pending_claims`,
+ ...(walletId
+ ? [
+ `depositor:${walletId}:deposited_assets`,
+ `depositor:${walletId}:eligible_compensation_routes`
+ ]
+ : [])
+ ],
+ databaseProjectionTables: [
+ 'deliverables',
+ 'deliverable_vectors',
+ 'ledger_entries',
+ 'source_to_shares_allocations'
+ ],
+ objectStorageVisibility: 'source-safe-metadata-only-before-settlement'
+ };
+ const compensationReadbackRoot = stableHashObject(compensationReadback);
+ const compensationPreviewWithoutRoot = {
+ schema: 'bitcode.depository.supply-compensation-preview',
+ state: walletId
+ ? 'eligible-if-selected-for-assetpack'
+ : 'repair-required-before-compensation',
+ assetId: inputState.assetId,
+ depositorWalletId: walletId,
+ candidateBtdRange: null,
+ compensationRoute,
+ readiness: {
+ sourceBound: Boolean(repositoryFullName && (sourceBranch || sourceCommit)),
+ proofReady: true,
+ measurementReady: true,
+ searchable: true,
+ depositorWalletReady: Boolean(walletId),
+ eligibleForFindingFits: true,
+ eligibleForCompensationIfSelected: Boolean(walletId),
+ blockers: walletId ? [] : ['depositor_wallet_missing'],
+ warnings: []
+ },
+ visibility: {
+ beforeSettlement: 'source-safe-compensation-route-metadata',
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false
+ },
+ readback: compensationReadback,
+ roots: {
+ compensationRouteRoot,
+ sourceToSharesPreviewRoot,
+ readbackRoot: compensationReadbackRoot
+ }
+ };
+ const compensationPreviewRoot = stableHashObject(compensationPreviewWithoutRoot);
+ const compensationPreview = {
+ ...compensationPreviewWithoutRoot,
+ roots: {
+ ...compensationPreviewWithoutRoot.roots,
+ compensationPreviewRoot
+ }
+ };
return {
schema: 'bitcode.depository.deposit-evidence',
@@ -579,6 +663,9 @@ function buildDepositoryEvidence(input, inputState) {
depositorySearchDocumentRoot,
lexicalDocumentRoot,
vectorDocumentRoot,
+ compensationPreview,
+ compensationPreviewRoot,
+ sourceToSharesPreviewRoot,
searchDocuments: {
lexical: {
...lexicalDocument,
@@ -3207,7 +3294,10 @@ export function makeCandidateAsset(input) {
depositorySearchDocumentRoot: depositoryEvidence.depositorySearchDocumentRoot,
lexicalDocumentRoot: depositoryEvidence.lexicalDocumentRoot,
vectorDocumentRoot: depositoryEvidence.vectorDocumentRoot,
+ compensationPreviewRoot: depositoryEvidence.compensationPreviewRoot,
+ sourceToSharesPreviewRoot: depositoryEvidence.sourceToSharesPreviewRoot,
depositorWalletId: depositoryEvidence.depositorBoundary.walletId,
+ compensationPreview: depositoryEvidence.compensationPreview,
depositoryEvidence,
sourceMaterialBinding: {
mode: input.bindingMode || 'read-only-mounted-copy',
@@ -3284,7 +3374,9 @@ export function makeCandidateAsset(input) {
reconciliationReadbackRoot: depositoryEvidence.reconciliationReadbackRoot,
depositorySearchDocumentRoot: depositoryEvidence.depositorySearchDocumentRoot,
lexicalDocumentRoot: depositoryEvidence.lexicalDocumentRoot,
- vectorDocumentRoot: depositoryEvidence.vectorDocumentRoot
+ vectorDocumentRoot: depositoryEvidence.vectorDocumentRoot,
+ compensationPreviewRoot: depositoryEvidence.compensationPreviewRoot,
+ sourceToSharesPreviewRoot: depositoryEvidence.sourceToSharesPreviewRoot
},
metadata: {
author: input.author,
diff --git a/packages/protocol/src/canon-posture.js b/packages/protocol/src/canon-posture.js
index ba0d44e5..c6da6ac6 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 = 'V41';
-export const DRAFT_TARGET_VERSION = 'V42';
+export const ACTIVE_CANON_VERSION = 'V43';
+export const DRAFT_TARGET_VERSION = 'V44';
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',
+ 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',
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/exchange-rehearsal.js b/packages/protocol/src/canonical/exchange-rehearsal.js
index ed0f4f51..adc3685d 100644
--- a/packages/protocol/src/canonical/exchange-rehearsal.js
+++ b/packages/protocol/src/canonical/exchange-rehearsal.js
@@ -110,9 +110,12 @@ const rehearsalRows = Object.freeze([
phaseIds: EXCHANGE_REHEARSAL_PHASE_IDS,
flowIds: EXCHANGE_REHEARSAL_FLOW_IDS,
sourceRoots: [
- 'uapi/app/exchange/ExchangePageClient.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/app/packs/page.tsx',
+ 'uapi/app/api/packs/activity/route.ts',
'uapi/app/exchange/README.md',
- 'uapi/tests/exchangePageClient.test.tsx',
+ 'uapi/tests/packsPageClient.test.tsx',
+ 'uapi/tests/packActivityModel.test.ts',
'uapi/tests/exchangeTerminalHandoff.test.ts',
'.github/workflows/bitcode-gate-quality.yml',
],
@@ -128,7 +131,7 @@ const rehearsalRows = Object.freeze([
validationCommands: [
'pnpm run check:v36-gate2',
'pnpm run check:v36-gate8',
- 'pnpm --dir uapi exec jest --runTestsByPath tests/exchangePageClient.test.tsx tests/exchangeTerminalHandoff.test.ts --runInBand',
+ 'pnpm --dir uapi exec jest --runTestsByPath tests/packsPageClient.test.tsx tests/packActivityModel.test.ts tests/exchangeTerminalHandoff.test.ts --runInBand',
],
valueBearingMainnetAdmission: false,
}),
@@ -141,7 +144,8 @@ const rehearsalRows = Object.freeze([
phaseIds: EXCHANGE_REHEARSAL_PHASE_IDS,
flowIds: EXCHANGE_REHEARSAL_FLOW_IDS,
sourceRoots: [
- 'uapi/app/exchange/ExchangePageClient.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/app/api/packs/activity/route.ts',
'uapi/app/terminal/TerminalTransactionWorkspace.tsx',
'uapi/app/terminal/TerminalTransactionDetailSurface.tsx',
'uapi/app/terminal/terminal-transaction-read-model.ts',
@@ -195,7 +199,8 @@ const rehearsalRows = Object.freeze([
phaseIds: ['market_activity_listing', 'history_review', 'source_safe_evidence_review'],
flowIds: ['list', 'history'],
sourceRoots: [
- 'uapi/app/exchange/ExchangePageClient.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/components/base/bitcode/activity/pack-activity-model.ts',
'uapi/app/terminal/TerminalTransactionActivitySurface.tsx',
'uapi/tests/pipelineExecutionLogHeader.test.tsx',
'packages/protocol/src/canonical/exchange-ux-proof.js',
diff --git a/packages/protocol/src/canonical/exchange-ux-proof.js b/packages/protocol/src/canonical/exchange-ux-proof.js
index 132f7dad..937f91f7 100644
--- a/packages/protocol/src/canonical/exchange-ux-proof.js
+++ b/packages/protocol/src/canonical/exchange-ux-proof.js
@@ -98,7 +98,10 @@ const SHARED_FAIL_CLOSED_REASONS = Object.freeze([
]);
const sourceRoots = Object.freeze([
- 'uapi/app/exchange/ExchangePageClient.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/app/packs/page.tsx',
+ 'uapi/app/api/packs/activity/route.ts',
+ 'uapi/components/base/bitcode/activity/pack-activity-model.ts',
'uapi/app/exchange/page.tsx',
'uapi/app/exchange/README.md',
'uapi/app/terminal/TerminalPageClient.tsx',
@@ -112,7 +115,8 @@ const sourceRoots = Object.freeze([
'uapi/app/terminal/terminal-transaction-read-model.ts',
'uapi/components/base/bitcode/execution/BitcodeTransactionsTable.tsx',
'uapi/components/base/bitcode/execution/BitcodeTransactionsFilterBar.tsx',
- 'uapi/tests/exchangePageClient.test.tsx',
+ 'uapi/tests/packsPageClient.test.tsx',
+ 'uapi/tests/packActivityModel.test.ts',
'uapi/tests/exchangeTerminalHandoff.test.ts',
]);
@@ -258,7 +262,8 @@ export const EXCHANGE_UX_PROOF_ROWS = Object.freeze([
collapsedStatus: 'The Exchange header and table describe the selected activity and data mode.',
expandedDetail: 'The selected detail pane exposes activity identity, AssetPack evidence, proof posture, history, and journal sections.',
sourceRoots: [
- 'uapi/app/exchange/ExchangePageClient.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/app/api/packs/activity/route.ts',
'uapi/app/terminal/TerminalTransactionWorkspace.tsx',
'uapi/components/base/bitcode/execution/BitcodeTransactionsTable.tsx',
],
@@ -273,7 +278,8 @@ export const EXCHANGE_UX_PROOF_ROWS = Object.freeze([
collapsedStatus: 'Search, status, ownership, lens, repository, participant, proof, sort, and pagination remain route-owned.',
expandedDetail: 'Filter chips and pagination expose filter state without source-bearing payloads.',
sourceRoots: [
- 'uapi/app/exchange/ExchangePageClient.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/components/base/bitcode/activity/pack-activity-model.ts',
'uapi/app/terminal/terminal-transaction-query.ts',
'uapi/components/base/bitcode/execution/BitcodeTransactionsFilterBar.tsx',
],
diff --git a/packages/protocol/src/canonical/proven-generator.js b/packages/protocol/src/canonical/proven-generator.js
index a7d32db4..a1720056 100644
--- a/packages/protocol/src/canonical/proven-generator.js
+++ b/packages/protocol/src/canonical/proven-generator.js
@@ -45,6 +45,8 @@ import { buildV38InferencePromotionReadinessReport } from './inference-promotion
import { buildV39CommercialReadingPromotionReadinessReport } from './v39-commercial-reading-promotion-readiness-report.js';
import { buildV40PromotionReadinessReport as buildV40PromotionReadinessReportArtifact } from './v40-promotion-readiness-report.js';
import { buildV41PromotionReadinessReport as buildV41PromotionReadinessReportArtifact } from './v41-promotion-readiness-report.js';
+import { buildV42PromotionReadinessReport as buildV42PromotionReadinessReportArtifact } from './v42-promotion-readiness-report.js';
+import { buildV43PromotionReadinessReport as buildV43PromotionReadinessReportArtifact } from './v43-promotion-readiness-report.js';
export const DEFAULT_PROVEN_BRANCH_MODES = ['patch', 'context'];
export const DEFAULT_V23_PROVEN_PAYMENT_MODES = [...BITCOIN_PAYMENT_MODES];
@@ -66,6 +68,8 @@ const V38_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v38-promotion-readiness-
const V39_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v39-promotion-readiness-report.json';
const V40_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v40-promotion-readiness-report.json';
const V41_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v41-promotion-readiness-report.json';
+const V42_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v42-promotion-readiness-report.json';
+const V43_PROMOTION_READINESS_ARTIFACT_PATH = '.bitcode/v43-promotion-readiness-report.json';
/**
* @param {string} version
@@ -6234,6 +6238,48 @@ export function renderCanonicalProvenMarkdown(data) {
));
lines.push('');
}
+ if (data.v42) {
+ const { v42 } = data;
+ lines.push('## V42 Promotion Readiness');
+ lines.push('');
+ lines.push(`- reportId: ${markdownCode(v42.promotionReadinessReport.reportId || v42.promotionReadinessReport.artifactId)}`);
+ lines.push(`- sourceSafe: ${markdownCode(String(v42.promotionReadinessReport.sourceSafe === true))}`);
+ lines.push(`- passed: ${markdownCode(String(v42.promotionReadinessReport.passed === true))}`);
+ lines.push(`- failureCount: ${markdownCode(String(v42.promotionReadinessReport.failures.length))}`);
+ lines.push(`- prePromotionPosture: ${markdownCode(v42.promotionReadinessReport.prePromotionPosture)}`);
+ lines.push(`- postPromotionPosture: ${markdownCode(v42.promotionReadinessReport.postPromotionPosture)}`);
+ lines.push('');
+ lines.push(renderMarkdownTable(
+ ['artifactPath', 'digest', 'byteLength'],
+ (v42.artifactSummaries || []).map((/** @type {any} */ artifact) => [
+ markdownCode(artifact.artifactPath),
+ markdownCode(artifact.digest),
+ artifact.byteLength
+ ])
+ ));
+ lines.push('');
+ }
+ if (data.v43) {
+ const { v43 } = data;
+ lines.push('## V43 Promotion Readiness');
+ lines.push('');
+ lines.push(`- reportId: ${markdownCode(v43.promotionReadinessReport.reportId || v43.promotionReadinessReport.artifactId)}`);
+ lines.push(`- sourceSafe: ${markdownCode(String(v43.promotionReadinessReport.sourceSafe === true))}`);
+ lines.push(`- passed: ${markdownCode(String(v43.promotionReadinessReport.passed === true))}`);
+ lines.push(`- failureCount: ${markdownCode(String(v43.promotionReadinessReport.failures.length))}`);
+ lines.push(`- prePromotionPosture: ${markdownCode(v43.promotionReadinessReport.prePromotionPosture)}`);
+ lines.push(`- postPromotionPosture: ${markdownCode(v43.promotionReadinessReport.postPromotionPosture)}`);
+ lines.push('');
+ lines.push(renderMarkdownTable(
+ ['artifactPath', 'digest', 'byteLength'],
+ (v43.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('');
@@ -10706,6 +10752,263 @@ function buildV41ProvenPackage(baseData, {
};
}
+/**
+ * @param {{
+ * generatedAt: string,
+ * baseData: ReturnType
+ * }} input
+ */
+function buildV42PromotionReadinessReport({ generatedAt, baseData }) {
+ const report = buildV42PromotionReadinessReportArtifact({
+ generatedAt,
+ repoRoot: REPO_ROOT
+ });
+ return {
+ reportId: report.artifactId,
+ ...report,
+ proofSourceCommit: baseData.canonicalCommit,
+ generatorId: baseData.generatorId,
+ worktreeState: baseData.worktreeState,
+ sourceSafe: report.sourceSafetyVerdict === 'source-safe-v42-reliable-mvp-promotion-readiness-metadata'
+ };
+}
+
+/**
+ * @param {any} baseData
+ * @param {{
+ * generatedAt: string,
+ * inheritedV19: any,
+ * inheritedV20: any
+ * }} input
+ */
+function buildV42ProvenPackage(baseData, {
+ generatedAt,
+ inheritedV19,
+ inheritedV20
+}) {
+ const draftPreview = ACTIVE_CANON_VERSION !== 'V42';
+ const specFamilyReport = buildV21SpecFamilyReport({
+ version: 'V42',
+ mode: draftPreview ? 'draft' : 'promoted',
+ ...(draftPreview ? { currentTarget: ACTIVE_CANON_VERSION } : { currentTarget: 'V42' })
+ });
+ const assumedArtifactPaths = [
+ 'BITCODE_SPEC_V42_PROVEN.md',
+ '.bitcode/v42-spec-family-report.json',
+ '.bitcode/v42-canonical-input-report.json',
+ '.bitcode/v42-canon-posture-drift-report.json',
+ '.bitcode/v42-depositing-shortest-path.json',
+ '.bitcode/v42-reading-shortest-path-state-machine.json',
+ '.bitcode/v42-readneed-review-resynthesis-product-closure.json',
+ '.bitcode/v42-readfitsfinding-preview-quote.json',
+ '.bitcode/v42-settlement-rights-delivery.json',
+ '.bitcode/v42-ai-reading-demonstration.json',
+ '.bitcode/v42-local-staging-mvp-rehearsal.json',
+ V42_PROMOTION_READINESS_ARTIFACT_PATH
+ ];
+ const canonicalInputReport = buildV21CanonicalInputReport({
+ currentTarget: 'V42',
+ reportVersion: 'V42',
+ ...(draftPreview
+ ? {
+ skipPointerCheck: true,
+ assumeExistingRelativePaths: assumedArtifactPaths
+ }
+ : { assumeExistingRelativePaths: assumedArtifactPaths })
+ });
+ const canonPostureDriftReport = buildCanonPostureDriftReport({
+ version: 'V42',
+ activeCanonVersion: draftPreview ? ACTIVE_CANON_VERSION : 'V42',
+ draftTargetVersion: draftPreview ? 'V42' : 'V43',
+ proofSourceCommit: baseData.canonicalCommit,
+ generatedAt,
+ generatorId: baseData.generatorId,
+ worktreeState: baseData.worktreeState
+ });
+ const promotionReadinessReport = buildV42PromotionReadinessReport({
+ generatedAt,
+ baseData
+ });
+ const artifacts = {
+ ...buildCanonPostureGeneratedArtifactContents({
+ version: 'V42',
+ proofSourceCommit: baseData.canonicalCommit,
+ generatedAt,
+ generatorId: baseData.generatorId,
+ worktreeState: baseData.worktreeState,
+ specFamilyReport,
+ canonicalInputReport,
+ canonPostureDriftReport
+ }),
+ [V42_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,
+ v42: {
+ specFamilyReport,
+ canonicalInputReport,
+ canonPostureDriftReport,
+ promotionReadinessReport,
+ artifactSummaries,
+ draftPreview,
+ promotionReady,
+ activeCanonicalTarget: ACTIVE_CANON_VERSION,
+ nextDraftTarget: 'V43'
+ },
+ 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 {{
+ * generatedAt: string,
+ * baseData: ReturnType
+ * }} input
+ */
+function buildV43PromotionReadinessReport({ generatedAt, baseData }) {
+ const report = buildV43PromotionReadinessReportArtifact({
+ generatedAt,
+ repoRoot: REPO_ROOT
+ });
+ return {
+ reportId: report.artifactId,
+ ...report,
+ proofSourceCommit: baseData.canonicalCommit,
+ generatorId: baseData.generatorId,
+ worktreeState: baseData.worktreeState,
+ sourceSafe: report.sourceSafetyVerdict === 'source-safe-v43-product-routes-agentic-depositing-promotion-metadata'
+ };
+}
+
+/**
+ * @param {any} baseData
+ * @param {{
+ * generatedAt: string,
+ * inheritedV19: any,
+ * inheritedV20: any
+ * }} input
+ */
+function buildV43ProvenPackage(baseData, {
+ generatedAt,
+ inheritedV19,
+ inheritedV20
+}) {
+ const draftPreview = ACTIVE_CANON_VERSION !== 'V43';
+ const specFamilyReport = buildV21SpecFamilyReport({
+ version: 'V43',
+ mode: draftPreview ? 'draft' : 'promoted',
+ ...(draftPreview ? { currentTarget: ACTIVE_CANON_VERSION } : { currentTarget: 'V43' })
+ });
+ const assumedArtifactPaths = [
+ 'BITCODE_SPEC_V43_PROVEN.md',
+ '.bitcode/v43-spec-family-report.json',
+ '.bitcode/v43-canonical-input-report.json',
+ '.bitcode/v43-canon-posture-drift-report.json',
+ '.bitcode/v43-route-vocabulary-inventory.json',
+ '.bitcode/v43-packs-activity-master-detail.json',
+ '.bitcode/v43-read-route-five-step-ux.json',
+ '.bitcode/v43-deposit-route-options.json',
+ '.bitcode/v43-deposit-policy-compensation.json',
+ '.bitcode/v43-deposit-option-admission.json',
+ '.bitcode/v43-route-ux-product-excellence.json',
+ '.bitcode/v43-cross-route-rehearsal-telemetry-repair.json',
+ V43_PROMOTION_READINESS_ARTIFACT_PATH
+ ];
+ const canonicalInputReport = buildV21CanonicalInputReport({
+ currentTarget: 'V43',
+ reportVersion: 'V43',
+ ...(draftPreview
+ ? {
+ skipPointerCheck: true,
+ assumeExistingRelativePaths: assumedArtifactPaths
+ }
+ : { assumeExistingRelativePaths: assumedArtifactPaths })
+ });
+ const canonPostureDriftReport = buildCanonPostureDriftReport({
+ version: 'V43',
+ activeCanonVersion: draftPreview ? ACTIVE_CANON_VERSION : 'V43',
+ draftTargetVersion: draftPreview ? 'V43' : 'V44',
+ proofSourceCommit: baseData.canonicalCommit,
+ generatedAt,
+ generatorId: baseData.generatorId,
+ worktreeState: baseData.worktreeState
+ });
+ const promotionReadinessReport = buildV43PromotionReadinessReport({
+ generatedAt,
+ baseData
+ });
+ const artifacts = {
+ ...buildCanonPostureGeneratedArtifactContents({
+ version: 'V43',
+ proofSourceCommit: baseData.canonicalCommit,
+ generatedAt,
+ generatorId: baseData.generatorId,
+ worktreeState: baseData.worktreeState,
+ specFamilyReport,
+ canonicalInputReport,
+ canonPostureDriftReport
+ }),
+ [V43_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,
+ v43: {
+ specFamilyReport,
+ canonicalInputReport,
+ canonPostureDriftReport,
+ promotionReadinessReport,
+ artifactSummaries,
+ draftPreview,
+ promotionReady,
+ activeCanonicalTarget: ACTIVE_CANON_VERSION,
+ nextDraftTarget: 'V44'
+ },
+ 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,
@@ -11746,6 +12049,110 @@ export function generateCanonicalProvenMarkdown({
finishGenerateProfile();
return v41Package;
}
+ if (version === 'V42') {
+ 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 v42Package = buildV42ProvenPackage(baseData, {
+ generatedAt,
+ inheritedV19: inheritedV19Package.data.v19,
+ inheritedV20: inheritedV20Package.data.v20
+ });
+ finishGenerateProfile();
+ return v42Package;
+ }
+ if (version === 'V43') {
+ 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 v43Package = buildV43ProvenPackage(baseData, {
+ generatedAt,
+ inheritedV19: inheritedV19Package.data.v19,
+ inheritedV20: inheritedV20Package.data.v20
+ });
+ finishGenerateProfile();
+ return v43Package;
+ }
const v18Matrices = version === 'V18'
? buildV18Matrices(baseData, {
version,
diff --git a/packages/protocol/src/canonical/v21-specifying.js b/packages/protocol/src/canonical/v21-specifying.js
index 592a4259..de47871c 100644
--- a/packages/protocol/src/canonical/v21-specifying.js
+++ b/packages/protocol/src/canonical/v21-specifying.js
@@ -479,6 +479,31 @@ function buildV21LikeProfile(version) {
'.bitcode/v41-promotion-readiness-report.json'
]
: []),
+ ...(version === 'V42'
+ ? [
+ '.bitcode/v42-depositing-shortest-path.json',
+ '.bitcode/v42-reading-shortest-path-state-machine.json',
+ '.bitcode/v42-readneed-review-resynthesis-product-closure.json',
+ '.bitcode/v42-readfitsfinding-preview-quote.json',
+ '.bitcode/v42-settlement-rights-delivery.json',
+ '.bitcode/v42-ai-reading-demonstration.json',
+ '.bitcode/v42-local-staging-mvp-rehearsal.json',
+ '.bitcode/v42-promotion-readiness-report.json'
+ ]
+ : []),
+ ...(version === 'V43'
+ ? [
+ '.bitcode/v43-route-vocabulary-inventory.json',
+ '.bitcode/v43-packs-activity-master-detail.json',
+ '.bitcode/v43-read-route-five-step-ux.json',
+ '.bitcode/v43-deposit-route-options.json',
+ '.bitcode/v43-deposit-policy-compensation.json',
+ '.bitcode/v43-deposit-option-admission.json',
+ '.bitcode/v43-route-ux-product-excellence.json',
+ '.bitcode/v43-cross-route-rehearsal-telemetry-repair.json',
+ '.bitcode/v43-promotion-readiness-report.json'
+ ]
+ : []),
...(version === 'V26'
? [
'.bitcode/terminal-composition-proof.json',
@@ -1580,6 +1605,12 @@ function buildRequiredCanonicalArtifacts(repoRoot, currentTarget) {
if (currentTarget === 'V40') {
artifacts.push(...buildV21LikeProfile('V40').requiredGeneratedArtifactPaths);
}
+ if (currentTarget === 'V41') {
+ artifacts.push(...buildV21LikeProfile('V41').requiredGeneratedArtifactPaths);
+ }
+ if (currentTarget === 'V42') {
+ artifacts.push(...buildV21LikeProfile('V42').requiredGeneratedArtifactPaths);
+ }
return artifacts.map((relativePath) => path.join(repoRoot, relativePath));
}
diff --git a/packages/protocol/src/canonical/v40-api-integration-contracts.js b/packages/protocol/src/canonical/v40-api-integration-contracts.js
index d95610c9..d387118b 100644
--- a/packages/protocol/src/canonical/v40-api-integration-contracts.js
+++ b/packages/protocol/src/canonical/v40-api-integration-contracts.js
@@ -365,7 +365,13 @@ function buildPredicateResults(repoRoot) {
predicateResult('notes-document-gate4', 'BITCODE_SPEC_V40_NOTES.md', notes.includes('Gate 4 implementation notes') && notes.includes('API route integration contracts')),
predicateResult('parity-documents-gate4', 'BITCODE_SPEC_V40_PARITY_MATRIX.md', parity.includes('v40-api-integration-contracts') && parity.includes('| Gate 4 | API/route integration artifact | implemented |')),
predicateResult('roadmap-advanced-through-gate4', 'SPECIFICATIONS_ROADMAP.md', roadmap.includes('V40 Gate 4 closure anchor')),
- predicateResult('roadmap-documents-v41-prompt-programs', 'SPECIFICATIONS_ROADMAP.md', roadmap.includes('V41 should focus singularly on Prompt and PromptPart implementation') && roadmap.includes('meaningfully benchmarkable semantic parts')),
+ predicateResult(
+ 'roadmap-documents-v41-prompt-programs',
+ 'SPECIFICATIONS_ROADMAP.md',
+ roadmap.includes('| V41 | `BITCODE_SPEC_V41.md` |') &&
+ roadmap.includes('Prompt and PromptPart excellence') &&
+ roadmap.includes('meaningfully benchmarkable semantic parts'),
+ ),
...rowPredicates,
];
}
diff --git a/packages/protocol/src/canonical/v40-browser-e2e-visual-proof.js b/packages/protocol/src/canonical/v40-browser-e2e-visual-proof.js
index 11303fde..afd7f2a0 100644
--- a/packages/protocol/src/canonical/v40-browser-e2e-visual-proof.js
+++ b/packages/protocol/src/canonical/v40-browser-e2e-visual-proof.js
@@ -240,12 +240,17 @@ export const V40_BROWSER_E2E_VISUAL_ROWS = Object.freeze([
routeStates: ['/exchange', '/exchange?assetPack=asset-pack-run-branch-remediation&intent=buy-existing-btd'],
sourceRoots: [
'uapi/app/bitcode-browser-proof.ts',
- 'uapi/app/exchange/ExchangePageClient.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/app/packs/page.tsx',
+ 'uapi/app/api/packs/activity/route.ts',
+ 'uapi/app/exchange/page.tsx',
'uapi/app/terminal/terminal-routes.ts',
],
testPaths: [
'uapi/tests/e2e/bitcode-browser-proof.spec.ts',
'uapi/tests/e2e/commercial-mvp.btd-exchange.spec.ts',
+ 'uapi/tests/packsPageClient.test.tsx',
+ 'uapi/tests/packActivityModel.test.ts',
'uapi/tests/exchangeTerminalHandoff.test.ts',
],
commandIds: [
@@ -254,15 +259,15 @@ export const V40_BROWSER_E2E_VISUAL_ROWS = Object.freeze([
],
requiredSourceMarkers: [
'BITCODE_BROWSER_PROOF_CONTRACT',
- 'ExchangePageClient',
- 'Read market activity',
- 'buildExchangeHref',
+ 'PacksPageClient',
+ 'Search pack activity',
+ 'buildPacksHref',
],
requiredTestMarkers: [
- 'Exchange rights review',
- 'signed-in BTD widget',
- 'Exchange filters',
- 'source-safe preview',
+ 'renders searchable Packs activity',
+ 'Proof roots',
+ 'source-safe detail readback',
+ 'builds Packs links',
],
expectedCounts: {
routeStateCount: 2,
@@ -495,7 +500,14 @@ function buildPredicateResults(repoRoot) {
predicateResult('delta-documents-gate7', 'BITCODE_SPEC_V40_DELTA.md', delta.includes('Gate 7 closes with package-backed `V40BrowserE2eVisualProof`')),
predicateResult('notes-document-gate7', 'BITCODE_SPEC_V40_NOTES.md', notes.includes('Gate 7 implementation notes') && notes.includes('browser E2E, visual, accessibility, and responsive proof')),
predicateResult('parity-documents-gate7', 'BITCODE_SPEC_V40_PARITY_MATRIX.md', parity.includes('v40-browser-e2e-visual-proof') && parity.includes('| Gate 7 | Browser/visual/accessibility/responsive artifact | implemented |')),
- predicateResult('roadmap-advanced-through-gate7', 'SPECIFICATIONS_ROADMAP.md', (/Current working gate: V40 Gate (?:7|8|9|10|11)\b/u.test(roadmap) || roadmap.includes('Latest closed version: V40')) && roadmap.includes('V40 Gate 7 closure anchor')),
+ predicateResult(
+ 'roadmap-advanced-through-gate7',
+ 'SPECIFICATIONS_ROADMAP.md',
+ (/Current working gate: V40 Gate (?:7|8|9|10|11)\b/u.test(roadmap) ||
+ roadmap.includes('Latest closed version: V40') ||
+ roadmap.includes('Recent V40 closure anchor')) &&
+ roadmap.includes('V40 Gate 7 closure anchor'),
+ ),
predicateResult('readmes-document-gate7', 'README.md', rootReadme.includes('V40 Gate 7') && protocolReadme.includes('V40BrowserE2eVisualProof')),
...rowPredicates,
];
diff --git a/packages/protocol/src/canonical/v40-conversation-terminal-integration.js b/packages/protocol/src/canonical/v40-conversation-terminal-integration.js
index 86aa44c4..c24a261d 100644
--- a/packages/protocol/src/canonical/v40-conversation-terminal-integration.js
+++ b/packages/protocol/src/canonical/v40-conversation-terminal-integration.js
@@ -479,7 +479,13 @@ function buildPredicateResults(repoRoot) {
roadmap.includes('Recent V40 closure anchor')),
),
predicateResult('readmes-document-gate6', 'README.md', rootReadme.includes('V40 Gate 6') && protocolReadme.includes('V40ConversationTerminalIntegration')),
- predicateResult('roadmap-preserves-v41-prompt-programs', 'SPECIFICATIONS_ROADMAP.md', roadmap.includes('V41 should focus singularly on Prompt and PromptPart implementation') && roadmap.includes('prompts as programs')),
+ predicateResult(
+ 'roadmap-preserves-v41-prompt-programs',
+ 'SPECIFICATIONS_ROADMAP.md',
+ roadmap.includes('| V41 | `BITCODE_SPEC_V41.md` |') &&
+ roadmap.includes('Prompt and PromptPart excellence') &&
+ roadmap.includes('prompts as programs'),
+ ),
...rowPredicates,
];
}
diff --git a/packages/protocol/src/canonical/v40-reading-pipeline-integration-coverage.js b/packages/protocol/src/canonical/v40-reading-pipeline-integration-coverage.js
index aee23947..9ae471be 100644
--- a/packages/protocol/src/canonical/v40-reading-pipeline-integration-coverage.js
+++ b/packages/protocol/src/canonical/v40-reading-pipeline-integration-coverage.js
@@ -497,7 +497,13 @@ function buildPredicateResults(repoRoot) {
roadmap.includes('Latest closed version: V40 Exhaustive Commercial Application Testing') ||
roadmap.includes('Recent V40 closure anchor')),
),
- predicateResult('roadmap-preserves-v41-prompt-programs', 'SPECIFICATIONS_ROADMAP.md', roadmap.includes('V41 should focus singularly on Prompt and PromptPart implementation') && roadmap.includes('prompts as programs')),
+ predicateResult(
+ 'roadmap-preserves-v41-prompt-programs',
+ 'SPECIFICATIONS_ROADMAP.md',
+ roadmap.includes('| V41 | `BITCODE_SPEC_V41.md` |') &&
+ roadmap.includes('Prompt and PromptPart excellence') &&
+ roadmap.includes('prompts as programs'),
+ ),
...rowPredicates,
];
}
diff --git a/packages/protocol/src/canonical/v41-conversation-tool-interface-prompt-rewrite.js b/packages/protocol/src/canonical/v41-conversation-tool-interface-prompt-rewrite.js
index 2efed98b..7b79069c 100644
--- a/packages/protocol/src/canonical/v41-conversation-tool-interface-prompt-rewrite.js
+++ b/packages/protocol/src/canonical/v41-conversation-tool-interface-prompt-rewrite.js
@@ -866,9 +866,11 @@ function buildPredicateResults(repoRoot) {
'conversation-tool-interface-tests-docs-workflows',
SOURCE_ROOTS.roadmap,
roadmap.includes('V41 Gate 7 closure anchor') &&
- /Current working gate: V41 Gate (?:7|8|9)/u.test(roadmap) &&
- (/Next queued gate after V41 Gate (?:7|8): V41 (?:Prompt Benchmark Report And Telemetry Integration|Promotion Readiness)/u.test(roadmap) ||
- /V41 Gate 9 closure anchor/u.test(roadmap)),
+ ((/Current working gate: V41 Gate (?:7|8|9)/u.test(roadmap) &&
+ (/Next queued gate after V41 Gate (?:7|8): V41 (?:Prompt Benchmark Report And Telemetry Integration|Promotion Readiness)/u.test(roadmap) ||
+ /V41 Gate 9 closure anchor/u.test(roadmap))) ||
+ /Latest closed version: V41 Prompt And PromptPart Excellence/u.test(roadmap) ||
+ /Recent V41 closure anchor/u.test(roadmap)),
),
predicate(
'readmes-document-gate7-helpers',
diff --git a/packages/protocol/src/canonical/v41-prompt-program-benchmark-report.js b/packages/protocol/src/canonical/v41-prompt-program-benchmark-report.js
index f721f55c..e9bbf561 100644
--- a/packages/protocol/src/canonical/v41-prompt-program-benchmark-report.js
+++ b/packages/protocol/src/canonical/v41-prompt-program-benchmark-report.js
@@ -831,8 +831,10 @@ function buildPredicateResults(repoRoot, context) {
'gate8-tests-docs-workflows',
SOURCE_ROOTS.roadmap,
roadmap.includes('V41 Gate 8 closure anchor')
- && /Current working gate: V41 Gate (?:8|9)/u.test(roadmap)
- && (roadmap.includes('Next queued gate after V41 Gate 8') || roadmap.includes('V41 Gate 9 closure anchor')),
+ && ((/Current working gate: V41 Gate (?:8|9)/u.test(roadmap)
+ && (roadmap.includes('Next queued gate after V41 Gate 8') || roadmap.includes('V41 Gate 9 closure anchor')))
+ || /Latest closed version: V41 Prompt And PromptPart Excellence/u.test(roadmap)
+ || /Recent V41 closure anchor/u.test(roadmap)),
),
predicate(
'readmes-document-gate8-helpers',
diff --git a/packages/protocol/src/canonical/v41-readfitsfinding-prompt-hardening.js b/packages/protocol/src/canonical/v41-readfitsfinding-prompt-hardening.js
index 83bf7fde..39d1117e 100644
--- a/packages/protocol/src/canonical/v41-readfitsfinding-prompt-hardening.js
+++ b/packages/protocol/src/canonical/v41-readfitsfinding-prompt-hardening.js
@@ -578,7 +578,9 @@ function predicatesForRow(repoRoot, rowData) {
'docs.current-gate-6',
rowId,
SOURCE_ROOTS.roadmap,
- /Current working gate: V41 Gate (?:6|7|8|9)/u.test(source),
+ /Current working gate: V41 Gate (?:6|7|8|9)/u.test(source) ||
+ /Latest closed version: V41 Prompt And PromptPart Excellence/u.test(source) ||
+ /Recent V41 closure anchor/u.test(source),
),
predicate(
'docs.next-gate-7',
diff --git a/packages/protocol/src/canonical/v42-ai-reading-demonstration.js b/packages/protocol/src/canonical/v42-ai-reading-demonstration.js
new file mode 100644
index 00000000..8a8ba46c
--- /dev/null
+++ b/packages/protocol/src/canonical/v42-ai-reading-demonstration.js
@@ -0,0 +1,248 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH =
+ '.bitcode/v42-ai-reading-demonstration.json';
+export const V42_AI_READING_DEMONSTRATION_SCHEMA_ID =
+ 'bitcode.v42.aiReadingDemonstration.v1';
+export const V42_AI_READING_DEMONSTRATION_VERSION = 'V42';
+export const V42_AI_READING_DEMONSTRATION_CURRENT_TARGET = 'V41';
+export const V42_AI_READING_DEMONSTRATION_SOURCE_SAFETY_VERDICT =
+ 'source-safe-v42-ai-reading-demonstration-metadata';
+
+export const V42_AI_READING_DEMONSTRATION_ROW_IDS = Object.freeze([
+ 'baseline:public-data-only-ai-reading',
+ 'need:source-bound-read-comprehension',
+ 'fits:local-depository-assetpack-selection',
+ 'assetpack:enhanced-ai-reading',
+ 'measurement:benchmark-uplift',
+ 'source-safety:settlement-gated-disclosure',
+ 'boundary:self-contained-demonstration',
+ 'proof:artifact-tests-workflows',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ demoRuntime: 'protocol-demonstration/src/ai-reading-demonstration.js',
+ demoIndex: 'protocol-demonstration/src/index.js',
+ demoTypes: 'protocol-demonstration/src/index.d.ts',
+ demoTest: 'protocol-demonstration/test/v42-ai-reading-mvp.test.js',
+ demoPackage: 'protocol-demonstration/package.json',
+ demoReadme: 'protocol-demonstration/README.md',
+ localFitFinding: 'protocol-demonstration/src/local-fit-finding.js',
+ benchmarkModel: 'protocol-demonstration/src/benchmark-model.js',
+ boundaryTest: 'protocol-demonstration/test/v28-boundary-separation.test.js',
+ protocolCanonical: 'packages/protocol/src/canonical/v42-ai-reading-demonstration.js',
+ protocolTest: 'packages/protocol/test/v42-ai-reading-demonstration.test.js',
+ protocolIndex: 'packages/protocol/src/index.js',
+ protocolTypes: 'packages/protocol/src/index.d.ts',
+ protocolReadme: 'packages/protocol/README.md',
+ generateScript: 'scripts/generate-v42-ai-reading-demonstration.mjs',
+ checkScript: 'scripts/check-v42-gate7-ai-reading-demonstration.mjs',
+ packageJson: 'package.json',
+ gateWorkflow: '.github/workflows/bitcode-gate-quality.yml',
+ canonWorkflow: '.github/workflows/bitcode-canon-quality.yml',
+ rootReadme: 'README.md',
+ v42Spec: 'BITCODE_SPEC_V42.md',
+ v42Delta: 'BITCODE_SPEC_V42_DELTA.md',
+ v42Notes: 'BITCODE_SPEC_V42_NOTES.md',
+ v42Parity: 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ roadmap: 'SPECIFICATIONS_ROADMAP.md',
+});
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'protected-source-payloads',
+ 'raw-protected-prompts',
+ 'raw-provider-responses',
+ 'unpaid-assetpack-source',
+ 'secret-values',
+ 'outside-runtime-imports',
+]);
+
+function digest(value) {
+ return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24);
+}
+
+function rowRoot(id) {
+ return `v42-ai-reading-demonstration-row:${digest(id)}`;
+}
+
+function readSource(repoRoot, sourcePath) {
+ const absolutePath = path.join(repoRoot, sourcePath);
+ return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : '';
+}
+
+function predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+function row(input) {
+ return {
+ ...input,
+ rowRoot: rowRoot(input.rowId),
+ sourceSafetyClass: 'source_safe_v42_ai_reading_demonstration_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ outsideRuntimeImportRequired: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ };
+}
+
+export const V42_AI_READING_DEMONSTRATION_ROWS = Object.freeze([
+ row({
+ rowId: 'baseline:public-data-only-ai-reading',
+ purpose:
+ 'Represent the public-data-only AI answer as the baseline before any AssetPack knowledge is available.',
+ sourceRoots: [SOURCE_ROOTS.demoRuntime, SOURCE_ROOTS.demoTest],
+ emittedTypes: ['publicDataOnlyBaseline', 'scoreAssistantResponse'],
+ requiredEvidence: ['public-data-only', 'missingTerms', 'scoreBp'],
+ }),
+ row({
+ rowId: 'need:source-bound-read-comprehension',
+ purpose:
+ 'Reuse the local ReadNeed synthesis loop so the demonstration starts from a reviewed source-bound Need.',
+ sourceRoots: [SOURCE_ROOTS.demoRuntime, SOURCE_ROOTS.localFitFinding, SOURCE_ROOTS.demoTest],
+ emittedTypes: ['readNeed', 'synthesizeReadNeedLocally', 'acceptReadNeedLocally'],
+ requiredEvidence: ['Acquire an AssetPack', 'needs_acceptance', 'accepted'],
+ }),
+ row({
+ rowId: 'fits:local-depository-assetpack-selection',
+ purpose:
+ 'Find the deposited AssetPack candidate locally, rank it, and preserve proof roots without importing product code.',
+ sourceRoots: [SOURCE_ROOTS.demoRuntime, SOURCE_ROOTS.localFitFinding, SOURCE_ROOTS.demoTest],
+ emittedTypes: ['findNeedFitLocally', 'selectedDepositIds', 'rankingRoot'],
+ requiredEvidence: ['deposit-auth-migration-runbook', 'worthy_fit', 'queryRoot'],
+ }),
+ row({
+ rowId: 'assetpack:enhanced-ai-reading',
+ purpose:
+ 'Apply the selected AssetPack knowledge to the AI answer after rights are available, while pre-settlement source remains withheld.',
+ sourceRoots: [SOURCE_ROOTS.demoRuntime, SOURCE_ROOTS.demoTest],
+ emittedTypes: ['assetPackEnhancedReading', 'assetPackPreview', 'sourceSafety'],
+ requiredEvidence: ['assetpack-enhanced-after-rights', 'withheld_until_settlement', 'sourceBearingDeliveryRequiresSettlement'],
+ }),
+ row({
+ rowId: 'measurement:benchmark-uplift',
+ purpose:
+ 'Measure basis-point improvement between public baseline and AssetPack-enhanced reading.',
+ sourceRoots: [SOURCE_ROOTS.demoRuntime, SOURCE_ROOTS.benchmarkModel, SOURCE_ROOTS.demoTest],
+ emittedTypes: ['benchmark', 'improvement', 'buildBenchmarkComparison'],
+ requiredEvidence: ['minimumUpliftBp', 'upliftBp', 'treatmentBp'],
+ }),
+ row({
+ rowId: 'source-safety:settlement-gated-disclosure',
+ purpose:
+ 'Keep protected source and unpaid AssetPack source out of the demonstration result and preview.',
+ sourceRoots: [SOURCE_ROOTS.demoRuntime, SOURCE_ROOTS.demoTest, SOURCE_ROOTS.boundaryTest],
+ emittedTypes: ['sourceSafety', 'assetPackPreview'],
+ requiredEvidence: ['protectedSourceBeforeSettlement', 'publicBaselineUsesDepositorySource: false', 'v28-boundary-separation'],
+ }),
+ row({
+ rowId: 'boundary:self-contained-demonstration',
+ purpose:
+ 'Maintain the demonstration as self-contained code with no product runtime imports.',
+ sourceRoots: [SOURCE_ROOTS.demoRuntime, SOURCE_ROOTS.demoIndex, SOURCE_ROOTS.demoPackage, SOURCE_ROOTS.boundaryTest],
+ emittedTypes: ['runAiReadingDominantDemonstration', 'buildAiReadingDemonstrationInput'],
+ requiredEvidence: ['outsideSourceImportsAllowed: false', 'test:v42-ai-reading-mvp', 'does not import outside source'],
+ }),
+ row({
+ rowId: 'proof:artifact-tests-workflows',
+ purpose:
+ 'Bind V42 Gate 7 closure to generated artifact, protocol test, demonstration test, docs, package scripts, and workflows.',
+ sourceRoots: [SOURCE_ROOTS.protocolTest, SOURCE_ROOTS.packageJson, SOURCE_ROOTS.gateWorkflow, SOURCE_ROOTS.canonWorkflow],
+ emittedTypes: ['V42AiReadingDemonstration'],
+ requiredEvidence: ['v42-ai-reading-demonstration', 'check-v42-gate7-ai-reading-demonstration.mjs'],
+ }),
+]);
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+
+ return [
+ predicateResult('demo-runtime-builds-input', SOURCE_ROOTS.demoRuntime, sources.demoRuntime.includes('buildAiReadingDemonstrationInput') && sources.demoRuntime.includes('AI_READING_DEPOSIT')),
+ predicateResult('demo-runtime-runs-fit-search', SOURCE_ROOTS.demoRuntime, sources.demoRuntime.includes('synthesizeReadNeedLocally') && sources.demoRuntime.includes('findNeedFitLocally') && sources.demoRuntime.includes('selectedDepositIds')),
+ predicateResult('demo-runtime-measures-uplift', SOURCE_ROOTS.demoRuntime, sources.demoRuntime.includes('buildBenchmarkComparison') && sources.demoRuntime.includes('MINIMUM_UPLIFT_BP') && sources.demoRuntime.includes('improvement')),
+ predicateResult('demo-runtime-source-safe', SOURCE_ROOTS.demoRuntime, sources.demoRuntime.includes('withheld_until_settlement') && sources.demoRuntime.includes('outsideSourceImportsAllowed: false')),
+ predicateResult('demo-index-exports-runtime', SOURCE_ROOTS.demoIndex, sources.demoIndex.includes('runAiReadingDominantDemonstration') && sources.demoTypes.includes('runAiReadingDominantDemonstration')),
+ predicateResult('demo-test-proves-uplift', SOURCE_ROOTS.demoTest, sources.demoTest.includes('AssetPack lift over public data baseline') && sources.demoTest.includes('scoreBp, 10000') && sources.demoTest.includes('publicDataOnlyBaseline.score.scoreBp, 0')),
+ predicateResult('demo-test-proves-determinism', SOURCE_ROOTS.demoTest, sources.demoTest.includes('self-contained and deterministic') && sources.demoTest.includes('deepEqual(first.proof, second.proof)')),
+ predicateResult('demo-boundary-test-retained', SOURCE_ROOTS.boundaryTest, sources.boundaryTest.includes('does not import outside source') && sources.boundaryTest.includes('protocol-demonstration')),
+ predicateResult('demo-package-script-wired', SOURCE_ROOTS.demoPackage, sources.demoPackage.includes('test:v42-ai-reading-mvp') && sources.demoPackage.includes('v42-ai-reading-mvp.test.js')),
+ predicateResult('protocol-test-wired', SOURCE_ROOTS.protocolTest, sources.protocolTest.includes('buildV42AiReadingDemonstration') && sources.protocolTest.includes('rowCount, 8')),
+ predicateResult('protocol-export-wired', SOURCE_ROOTS.protocolIndex, sources.protocolIndex.includes('buildV42AiReadingDemonstration') && sources.protocolTypes.includes('buildV42AiReadingDemonstration')),
+ predicateResult('package-scripts-wired', SOURCE_ROOTS.packageJson, sources.packageJson.includes('generate:v42-ai-reading-demonstration') && sources.packageJson.includes('check:v42-gate7')),
+ predicateResult('workflows-run-gate7', SOURCE_ROOTS.gateWorkflow, sources.gateWorkflow.includes('check-v42-gate7-ai-reading-demonstration.mjs') && sources.canonWorkflow.includes('check-v42-gate7-ai-reading-demonstration.mjs')),
+ predicateResult('v42-docs-expanded', SOURCE_ROOTS.v42Spec, sources.v42Spec.includes('V42 Gate 7') && sources.v42Spec.includes('AI-reading AssetPack improvement')),
+ predicateResult('v42-delta-expanded', SOURCE_ROOTS.v42Delta, sources.v42Delta.includes('Gate 7 now binds') && sources.v42Delta.includes('public-data-only baseline')),
+ predicateResult('v42-notes-expanded', SOURCE_ROOTS.v42Notes, sources.v42Notes.includes('Gate 7 records') && sources.v42Notes.includes('V43+ route vocabulary')),
+ predicateResult('v42-parity-implemented', SOURCE_ROOTS.v42Parity, sources.v42Parity.includes('AI-reading demonstration') && sources.v42Parity.includes('implemented')),
+ predicateResult('roadmap-records-gate7-closure', SOURCE_ROOTS.roadmap, sources.roadmap.includes('V42 Gate 7 closure anchor') && sources.roadmap.includes('check:v42-gate7')),
+ predicateResult('readmes-document-gate7', SOURCE_ROOTS.rootReadme, sources.rootReadme.includes('V42 Gate 7') && sources.demoReadme.includes('V42 AI-reading demonstration') && sources.protocolReadme.includes('V42AiReadingDemonstration')),
+ ];
+}
+
+function buildCoverage(rows, predicateResults) {
+ const failedPredicateIds = predicateResults.filter((predicate) => !predicate.passed).map((predicate) => predicate.id);
+ return {
+ rowCount: rows.length,
+ sourceSafetyVerdict: V42_AI_READING_DEMONSTRATION_SOURCE_SAFETY_VERDICT,
+ demonstrationRuntime: 'protocol-demonstration/src/ai-reading-demonstration.js',
+ demonstrationTest: 'protocol-demonstration/test/v42-ai-reading-mvp.test.js',
+ baselineMode: 'public-data-only',
+ enhancedMode: 'assetpack-enhanced-after-rights',
+ minimumUpliftBp: 2400,
+ expectedBaselineBp: 0,
+ expectedTreatmentBp: 10000,
+ expectedSelectedDepositId: 'deposit-auth-migration-runbook',
+ expectedFitResultState: 'worthy_fit',
+ protectedSourceBeforeSettlement: 'withheld_until_settlement',
+ sourceBearingDeliveryRequiresSettlement: true,
+ deterministicLocalOnly: true,
+ selfContainedDemonstration: true,
+ outsideRuntimeImportRequired: false,
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ failedPredicateIds,
+ };
+}
+
+export function buildV42AiReadingDemonstration(input = {}) {
+ const repoRoot = input.repoRoot || DEFAULT_REPO_ROOT;
+ const predicateResults = buildPredicateResults(repoRoot);
+ const rows = [...V42_AI_READING_DEMONSTRATION_ROWS];
+ const coverage = buildCoverage(rows, predicateResults);
+ const artifactRoot = `v42-ai-reading-demonstration:${digest(JSON.stringify({
+ rowIds: V42_AI_READING_DEMONSTRATION_ROW_IDS,
+ predicateResults,
+ coverage,
+ }))}`;
+
+ return {
+ artifactId: 'v42-ai-reading-demonstration',
+ schemaId: V42_AI_READING_DEMONSTRATION_SCHEMA_ID,
+ version: V42_AI_READING_DEMONSTRATION_VERSION,
+ currentTarget: V42_AI_READING_DEMONSTRATION_CURRENT_TARGET,
+ sourceSafetyVerdict: V42_AI_READING_DEMONSTRATION_SOURCE_SAFETY_VERDICT,
+ rowIds: [...V42_AI_READING_DEMONSTRATION_ROW_IDS],
+ rows,
+ predicateResults,
+ coverage,
+ passed: coverage.failedPredicateIds.length === 0,
+ artifactRoot,
+ };
+}
diff --git a/packages/protocol/src/canonical/v42-depositing-shortest-path.js b/packages/protocol/src/canonical/v42-depositing-shortest-path.js
new file mode 100644
index 00000000..4720e5fb
--- /dev/null
+++ b/packages/protocol/src/canonical/v42-depositing-shortest-path.js
@@ -0,0 +1,290 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V42_DEPOSITING_SHORTEST_PATH_ARTIFACT_PATH =
+ '.bitcode/v42-depositing-shortest-path.json';
+export const V42_DEPOSITING_SHORTEST_PATH_SCHEMA_ID =
+ 'bitcode.v42.depositingShortestPath.v1';
+export const V42_DEPOSITING_SHORTEST_PATH_VERSION = 'V42';
+export const V42_DEPOSITING_SHORTEST_PATH_CURRENT_TARGET = 'V41';
+export const V42_DEPOSITING_SHORTEST_PATH_SOURCE_SAFETY_VERDICT =
+ 'source-safe-depositing-compensation-visibility-metadata';
+
+export const V42_DEPOSITING_SHORTEST_PATH_ROW_IDS = Object.freeze([
+ 'path:source-to-admission-proof',
+ 'api:deposit-route-readiness-contract',
+ 'supply:depository-record-compensation-preview',
+ 'documents:source-safe-search-and-vector-projection',
+ 'storage:depository-readback-projection',
+ 'ledger:source-to-shares-compensation-readback',
+ 'terminal:compensation-visibility-readback',
+ 'rehearsal:local-staging-deposit-readback',
+]);
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'secret-values',
+ 'provider-tokens',
+ 'wallet-private-material',
+ 'protected-source-payloads',
+ 'raw-protected-prompts',
+ 'raw-model-responses-with-protected-source',
+ 'unpaid-assetpack-source',
+ 'settlement-private-payloads',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ depositorySupplyIndex: 'packages/pipelines/asset-pack/src/depository-supply-index.ts',
+ depositorySupplyIndexTest: 'packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts',
+ embeddingConfig: 'packages/pipelines/asset-pack/src/embedding-config.ts',
+ assetPackReadme: 'packages/pipelines/asset-pack/README.md',
+ protocolServer: 'packages/protocol/server.js',
+ protocolRuntime: 'packages/protocol/src/bitcode-demo.js',
+ protocolBoundaryTest: 'packages/protocol/test/protocol-package-boundary.test.js',
+ uapiDepositRoute: 'uapi/app/api/deposits/route.ts',
+ terminalDepositComposer: 'uapi/app/terminal/TerminalDepositComposer.tsx',
+ terminalActivityHistory: 'uapi/app/terminal/terminal-activity-history.ts',
+ terminalWorkbench: 'uapi/app/terminal/terminal-deposit-read-workbench.ts',
+ terminalRunData: 'uapi/app/terminal/terminal-run-data.ts',
+ v42Spec: 'BITCODE_SPEC_V42.md',
+ v42Delta: 'BITCODE_SPEC_V42_DELTA.md',
+ v42Notes: 'BITCODE_SPEC_V42_NOTES.md',
+ v42Parity: 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ roadmap: 'SPECIFICATIONS_ROADMAP.md',
+});
+
+function digest(value) {
+ return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24);
+}
+
+function rowRoot(id) {
+ return `v42-depositing-shortest-path-row:${digest(id)}`;
+}
+
+function readSource(repoRoot, sourcePath) {
+ const absolutePath = path.join(repoRoot, sourcePath);
+ return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : '';
+}
+
+function predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+function row(input) {
+ return {
+ ...input,
+ rowRoot: rowRoot(input.rowId),
+ sourceSafetyClass: 'source_safe_depositing_compensation_visibility_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ settlementPrivatePayloadVisible: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ };
+}
+
+export const V42_DEPOSITING_SHORTEST_PATH_ROWS = Object.freeze([
+ row({
+ rowId: 'path:source-to-admission-proof',
+ purpose:
+ 'Make the shortest Depositing path explicit: source material, repository/source anchor, Depository admission, source-safe proof roots, and next Reading handoff.',
+ sourceRoots: [
+ SOURCE_ROOTS.protocolServer,
+ SOURCE_ROOTS.protocolRuntime,
+ SOURCE_ROOTS.uapiDepositRoute,
+ SOURCE_ROOTS.terminalDepositComposer,
+ ],
+ emittedTypes: ['createDeposit', 'buildDepositoryEvidence', 'TerminalDepositResponseEvidence'],
+ requiredEvidence: ['repositoryFullName', 'sourceBranch', 'sourceCommit', 'proofRoot', 'measurementRoot'],
+ }),
+ row({
+ rowId: 'api:deposit-route-readiness-contract',
+ purpose:
+ 'Keep POST /api/deposits admitted only after signed transaction and repository readiness checks, then project source-safe Depository evidence.',
+ sourceRoots: [SOURCE_ROOTS.uapiDepositRoute, SOURCE_ROOTS.protocolServer, SOURCE_ROOTS.protocolBoundaryTest],
+ emittedTypes: ['requireBitcodeSignedTransactionReadiness', 'BitcodeAppContext.createDeposit'],
+ requiredEvidence: ['requiresRepositoryAnchor', 'repositoryProvider', 'walletAuthorizationProof'],
+ }),
+ row({
+ rowId: 'supply:depository-record-compensation-preview',
+ purpose:
+ 'Attach a deterministic compensation preview to DepositorySupplyRecord without minting BTD or exposing source before an accepted Need-Fit and settlement.',
+ sourceRoots: [SOURCE_ROOTS.depositorySupplyIndex, SOURCE_ROOTS.depositorySupplyIndexTest, SOURCE_ROOTS.embeddingConfig],
+ emittedTypes: ['DepositorySupplyCompensationPreview', 'DepositorySupplyRecord.compensationPreview'],
+ requiredEvidence: ['source-to-shares-largest-remainder', 'not-minted-by-deposit-admission', 'compensationPreviewRoot'],
+ }),
+ row({
+ rowId: 'documents:source-safe-search-and-vector-projection',
+ purpose:
+ 'Preserve source-safe lexical, metadata, measurement, and vector search documents so deposits become searchable without protected source payloads.',
+ sourceRoots: [SOURCE_ROOTS.depositorySupplyIndex, SOURCE_ROOTS.depositorySupplyIndexTest],
+ emittedTypes: ['DepositorySupplySearchDocument', 'DepositorySupplyVectorProjection'],
+ requiredEvidence: ['text-embedding-3-small', '1536', 'match_deliverable_vectors'],
+ }),
+ row({
+ rowId: 'storage:depository-readback-projection',
+ purpose:
+ 'Bind Depository admission to durable source-safe storage readback through deliverables, vector rows, ledger rows, and source-to-shares allocation posture.',
+ sourceRoots: [SOURCE_ROOTS.depositorySupplyIndex, SOURCE_ROOTS.assetPackReadme, SOURCE_ROOTS.v42Spec],
+ emittedTypes: ['DepositorySupplyStorageProjection', 'compensationPreview.readback'],
+ requiredEvidence: ['deliverables', 'deliverable_vectors', 'ledger_entries', 'source_to_shares_allocations'],
+ }),
+ row({
+ rowId: 'ledger:source-to-shares-compensation-readback',
+ purpose:
+ 'Record depositor compensation visibility through pending-claim and eligible-route ledger keys while deferring actual BTC allocation until paid AssetPack settlement.',
+ sourceRoots: [SOURCE_ROOTS.protocolServer, SOURCE_ROOTS.protocolRuntime, SOURCE_ROOTS.protocolBoundaryTest],
+ emittedTypes: ['ledger.accounts', 'compensationPreview.readback.ledgerAccountKeys'],
+ requiredEvidence: ['pending_claims', 'eligible_compensation_routes', 'future-reader-after-settlement'],
+ }),
+ row({
+ rowId: 'terminal:compensation-visibility-readback',
+ purpose:
+ 'Show source-safe compensation posture in Terminal and carry compensation roots through activity history and the deposit-to-read workbench.',
+ sourceRoots: [
+ SOURCE_ROOTS.terminalDepositComposer,
+ SOURCE_ROOTS.terminalActivityHistory,
+ SOURCE_ROOTS.terminalWorkbench,
+ SOURCE_ROOTS.terminalRunData,
+ ],
+ emittedTypes: ['TerminalDepositResponseEvidence', 'WorkspaceRun', 'TerminalDepositedSourceRevision'],
+ requiredEvidence: ['compensationPreviewRoot', 'sourceToSharesPreviewRoot', 'Compensation route'],
+ }),
+ row({
+ rowId: 'rehearsal:local-staging-deposit-readback',
+ purpose:
+ 'Keep Gate 2 locally checkable and staging-testnet rehearsable through package tests, protocol route tests, generated artifact checks, and source-safe proof rows.',
+ sourceRoots: [SOURCE_ROOTS.v42Spec, SOURCE_ROOTS.v42Delta, SOURCE_ROOTS.v42Notes, SOURCE_ROOTS.v42Parity, SOURCE_ROOTS.roadmap],
+ emittedTypes: ['V42DepositingShortestPathReport'],
+ requiredEvidence: ['local/staging rehearsal', 'staging-testnet', 'check:v42-gate2'],
+ }),
+]);
+
+function buildPredicateResults(repoRoot) {
+ const supply = readSource(repoRoot, SOURCE_ROOTS.depositorySupplyIndex);
+ const supplyTest = readSource(repoRoot, SOURCE_ROOTS.depositorySupplyIndexTest);
+ const embeddingConfig = readSource(repoRoot, SOURCE_ROOTS.embeddingConfig);
+ const readme = readSource(repoRoot, SOURCE_ROOTS.assetPackReadme);
+ const server = readSource(repoRoot, SOURCE_ROOTS.protocolServer);
+ const runtime = readSource(repoRoot, SOURCE_ROOTS.protocolRuntime);
+ const boundaryTest = readSource(repoRoot, SOURCE_ROOTS.protocolBoundaryTest);
+ const route = readSource(repoRoot, SOURCE_ROOTS.uapiDepositRoute);
+ const composer = readSource(repoRoot, SOURCE_ROOTS.terminalDepositComposer);
+ const activity = readSource(repoRoot, SOURCE_ROOTS.terminalActivityHistory);
+ const workbench = readSource(repoRoot, SOURCE_ROOTS.terminalWorkbench);
+ const runData = readSource(repoRoot, SOURCE_ROOTS.terminalRunData);
+ const spec = readSource(repoRoot, SOURCE_ROOTS.v42Spec);
+ const delta = readSource(repoRoot, SOURCE_ROOTS.v42Delta);
+ const notes = readSource(repoRoot, SOURCE_ROOTS.v42Notes);
+ const parity = readSource(repoRoot, SOURCE_ROOTS.v42Parity);
+ const roadmap = readSource(repoRoot, SOURCE_ROOTS.roadmap);
+
+ return [
+ predicateResult('deposit-route-requires-readiness', SOURCE_ROOTS.uapiDepositRoute, route.includes('requireBitcodeSignedTransactionReadiness') && route.includes('requiresRepositoryAnchor: true')),
+ predicateResult('server-creates-deposit-and-ledger-readback', SOURCE_ROOTS.protocolServer, server.includes('createDeposit') && server.includes('pending_claims') && server.includes('eligible_compensation_routes')),
+ predicateResult('runtime-builds-compensation-preview', SOURCE_ROOTS.protocolRuntime, runtime.includes('compensationPreview') && runtime.includes('source-to-shares-largest-remainder') && runtime.includes('not-minted-by-deposit-admission')),
+ predicateResult('runtime-keeps-source-safe-visibility', SOURCE_ROOTS.protocolRuntime, runtime.includes('protectedSourceVisible: false') && runtime.includes('unpaidAssetPackSourceVisible: false')),
+ predicateResult('supply-index-defines-compensation-preview', SOURCE_ROOTS.depositorySupplyIndex, supply.includes('DepositorySupplyCompensationPreview') && supply.includes('buildCompensationPreview')),
+ predicateResult('supply-index-defers-btd-mint', SOURCE_ROOTS.depositorySupplyIndex, supply.includes('not-minted-by-deposit-admission') && supply.includes('reader-receives-rights-only-after-btc-settlement')),
+ predicateResult('supply-index-projects-source-to-shares-readback', SOURCE_ROOTS.depositorySupplyIndex, supply.includes('source_to_shares_allocations') && supply.includes('sourceToSharesPreviewRoot')),
+ predicateResult(
+ 'supply-index-preserves-search-documents',
+ SOURCE_ROOTS.depositorySupplyIndex,
+ supply.includes('DepositorySupplySearchDocument') &&
+ supply.includes('buildAssetPackEmbeddingPolicy') &&
+ embeddingConfig.includes('text-embedding-3-small') &&
+ embeddingConfig.includes('match_deliverable_vectors'),
+ ),
+ predicateResult('supply-tests-cover-compensation-preview', SOURCE_ROOTS.depositorySupplyIndexTest, supplyTest.includes('eligible-if-selected-for-assetpack') && supplyTest.includes('repair-required-before-compensation')),
+ predicateResult('supply-tests-cover-no-protected-source', SOURCE_ROOTS.depositorySupplyIndexTest, supplyTest.includes('PRIVATE_SOURCE_DO_NOT_SERIALIZE') && supplyTest.includes('assertDepositorySupplyIndexSourceSafe')),
+ predicateResult('protocol-test-covers-compensation-route', SOURCE_ROOTS.protocolBoundaryTest, boundaryTest.includes('eligible_compensation_routes') && boundaryTest.includes('source-to-shares-largest-remainder')),
+ predicateResult('terminal-composer-captures-compensation-roots', SOURCE_ROOTS.terminalDepositComposer, composer.includes('compensationPreviewRoot') && composer.includes('Compensation route')),
+ predicateResult('terminal-history-maps-compensation-roots', SOURCE_ROOTS.terminalActivityHistory, activity.includes('compensationPreviewRoot') && activity.includes('sourceToSharesPreviewRoot')),
+ predicateResult('terminal-workbench-shows-compensation-rows', SOURCE_ROOTS.terminalWorkbench, workbench.includes('Compensation state') && workbench.includes('Source-to-shares preview root')),
+ predicateResult('workspace-run-carries-compensation-fields', SOURCE_ROOTS.terminalRunData, runData.includes('compensationState') && runData.includes('compensationPriceAsset')),
+ predicateResult('asset-pack-readme-documents-compensation-preview', SOURCE_ROOTS.assetPackReadme, readme.includes('compensation preview') && readme.includes('source-to-shares')),
+ predicateResult('v42-spec-gate2-expanded', SOURCE_ROOTS.v42Spec, spec.includes('V42 Gate 2') && spec.includes('compensation route preview')),
+ predicateResult('v42-delta-gate2-implemented', SOURCE_ROOTS.v42Delta, delta.includes('Gate 2') && delta.includes('Depository admission proof')),
+ predicateResult('v42-notes-gate2-rehearsal', SOURCE_ROOTS.v42Notes, notes.includes('Gate 2') && notes.includes('staging-testnet')),
+ predicateResult('v42-parity-gate2-closed', SOURCE_ROOTS.v42Parity, parity.includes('Depositing shortest path') && parity.includes('implemented')),
+ predicateResult(
+ 'roadmap-records-gate2-closure',
+ SOURCE_ROOTS.roadmap,
+ roadmap.includes('V42 Gate 2 closure anchor') &&
+ (roadmap.includes('Current working gate: V42 Gate') ||
+ roadmap.includes('Latest closed version: V42 Reliable MVP Experience') ||
+ roadmap.includes('Recent V42 canonical promotion anchor') ||
+ roadmap.includes('Current working gate: V43 Gate')),
+ ),
+ ];
+}
+
+export function buildV42DepositingShortestPath(options = {}) {
+ const repoRoot = options.repoRoot || DEFAULT_REPO_ROOT;
+ const predicateResults = buildPredicateResults(repoRoot);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const rowRoots = V42_DEPOSITING_SHORTEST_PATH_ROWS.map((item) => item.rowRoot);
+ const artifactRoot = `v42-depositing-shortest-path:${digest(JSON.stringify({
+ rowRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v42-depositing-shortest-path',
+ schemaId: V42_DEPOSITING_SHORTEST_PATH_SCHEMA_ID,
+ version: V42_DEPOSITING_SHORTEST_PATH_VERSION,
+ currentTarget: V42_DEPOSITING_SHORTEST_PATH_CURRENT_TARGET,
+ sourceSafetyVerdict: V42_DEPOSITING_SHORTEST_PATH_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ rows: V42_DEPOSITING_SHORTEST_PATH_ROWS,
+ rowIds: [...V42_DEPOSITING_SHORTEST_PATH_ROW_IDS],
+ predicateResults,
+ coverage: {
+ rowCount: V42_DEPOSITING_SHORTEST_PATH_ROWS.length,
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ acceptedUserPath: [
+ 'provide-source-material',
+ 'select-repository-source-anchor',
+ 'admit-deposit-to-depository',
+ 'receive-source-safe-admission-proof',
+ 'view-later-btc-compensation-attribution',
+ ],
+ routeApiContractsCovered: true,
+ sourceValidationCovered: true,
+ storageProjectionCovered: true,
+ depositorySearchDocumentCovered: true,
+ sourceToSharesCompensationReadbackCovered: true,
+ terminalCompensationVisibilityCovered: true,
+ localStagingRehearsalCovered: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ settlementPrivatePayloadVisible: false,
+ btdMintedAtDepositAdmission: false,
+ btdRightsTransferredBeforeSettlement: false,
+ compensationAllocationMethod: 'source-to-shares-largest-remainder',
+ compensationPriceAsset: 'BTC',
+ legacySourceRoots: Object.values(SOURCE_ROOTS).some((sourcePath) => sourcePath.includes('_legacy/')),
+ },
+ sourceRoots: SOURCE_ROOTS,
+ };
+}
diff --git a/packages/protocol/src/canonical/v42-local-staging-mvp-rehearsal.js b/packages/protocol/src/canonical/v42-local-staging-mvp-rehearsal.js
new file mode 100644
index 00000000..ee98c41c
--- /dev/null
+++ b/packages/protocol/src/canonical/v42-local-staging-mvp-rehearsal.js
@@ -0,0 +1,426 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH =
+ '.bitcode/v42-local-staging-mvp-rehearsal.json';
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_SCHEMA_ID =
+ 'bitcode.v42.localStagingMvpRehearsal.v1';
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_VERSION = 'V42';
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_CURRENT_TARGET = 'V41';
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_SOURCE_SAFETY_VERDICT =
+ 'source-safe-v42-local-staging-mvp-rehearsal-metadata';
+
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_LANE_IDS = Object.freeze([
+ 'local',
+ 'staging-testnet',
+]);
+
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_STAGE_IDS = Object.freeze([
+ 'deposit-source',
+ 'request-read',
+ 'review-synthesized-need',
+ 'request-finding-fits',
+ 'review-assetpack-preview',
+ 'buy-assetpack-settle',
+ 'receive-repository-delivery',
+]);
+
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_ROW_IDS = Object.freeze([
+ 'lane:local-full-mvp-rehearsal',
+ 'lane:staging-testnet-full-mvp-rehearsal',
+ 'deposit:source-admission-compensation-readback',
+ 'reading:request-read-state',
+ 'reading:need-review-resynthesis',
+ 'fits:many-candidate-depository-search',
+ 'assetpack:source-safe-preview-quote',
+ 'settlement:btd-rights-delivery',
+ 'demonstration:ai-reading-uplift',
+ 'telemetry:rich-stream-database-readback',
+ 'sync:ledger-database-storage-reconciliation',
+ 'operator:source-safe-rehearsal-receipts',
+ 'boundary:value-bearing-mainnet-blocked',
+ 'proof:artifact-tests-workflows-docs',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ gate2Artifact: '.bitcode/v42-depositing-shortest-path.json',
+ gate3Artifact: '.bitcode/v42-reading-shortest-path-state-machine.json',
+ gate4Artifact: '.bitcode/v42-readneed-review-resynthesis-product-closure.json',
+ gate5Artifact: '.bitcode/v42-readfitsfinding-preview-quote.json',
+ gate6Artifact: '.bitcode/v42-settlement-rights-delivery.json',
+ gate7Artifact: '.bitcode/v42-ai-reading-demonstration.json',
+ rehearsalModel: 'packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts',
+ rehearsalTest: 'packages/pipelines/asset-pack/src/__tests__/reading-local-staging-rehearsal.test.ts',
+ postprocess: 'packages/pipelines/asset-pack/src/postprocess.ts',
+ pipelineIndex: 'packages/pipelines/asset-pack/src/index.ts',
+ depositorySearch: 'packages/pipelines/asset-pack/src/depository-search.ts',
+ readNeedRuntime: 'packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts',
+ readFitsRuntime: 'packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts',
+ previewBoundary: 'packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts',
+ settlementBoundary: 'packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts',
+ operationalReadback: 'packages/pipelines/asset-pack/src/reading-operational-telemetry-repair-readback.ts',
+ pipelineLogUi: 'uapi/components/base/bitcode/execution/pipeline-execution-log.tsx',
+ terminalWorkbench: 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ harnessRunner: 'uapi/app/api/pipeline-harness/asset-pack/runner.ts',
+ harnessPreflight: 'uapi/app/api/pipeline-harness/asset-pack/preflight.ts',
+ harnessRouteTest: 'uapi/tests/api/pipelineHarnessRoute.test.ts',
+ harnessPreflightTest: 'uapi/tests/api/pipelineHarnessPreflight.test.ts',
+ pipelineHostHarness: 'packages/pipeline-hosts/src/asset-pack-harness.ts',
+ operatorScript: 'scripts/rehearse-v42-local-staging-mvp.mjs',
+ generator: 'scripts/generate-v42-local-staging-mvp-rehearsal.mjs',
+ checkScript: 'scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs',
+ protocolCanonical: 'packages/protocol/src/canonical/v42-local-staging-mvp-rehearsal.js',
+ protocolTest: 'packages/protocol/test/v42-local-staging-mvp-rehearsal.test.js',
+ protocolIndex: 'packages/protocol/src/index.js',
+ protocolTypes: 'packages/protocol/src/index.d.ts',
+ rootReadme: 'README.md',
+ protocolReadme: 'packages/protocol/README.md',
+ assetPackReadme: 'packages/pipelines/asset-pack/README.md',
+ terminalReadme: 'uapi/app/terminal/README.md',
+ v42Spec: 'BITCODE_SPEC_V42.md',
+ v42Delta: 'BITCODE_SPEC_V42_DELTA.md',
+ v42Notes: 'BITCODE_SPEC_V42_NOTES.md',
+ v42Parity: 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ roadmap: 'SPECIFICATIONS_ROADMAP.md',
+ packageJson: 'package.json',
+ gateWorkflow: '.github/workflows/bitcode-gate-quality.yml',
+ canonWorkflow: '.github/workflows/bitcode-canon-quality.yml',
+});
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'secret-values',
+ 'provider-tokens',
+ 'wallet-private-material',
+ 'protected-source-payloads',
+ 'raw-protected-prompts',
+ 'raw-interpolated-prompts',
+ 'raw-provider-responses',
+ 'unpaid-assetpack-source',
+ 'live-rehearsal-log-payloads',
+ 'value-bearing-mainnet-admission',
+]);
+
+function digest(value) {
+ return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24);
+}
+
+function rowRoot(id) {
+ return `v42-local-staging-mvp-rehearsal-row:${digest(id)}`;
+}
+
+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 row(input) {
+ return {
+ ...input,
+ rowRoot: rowRoot(input.rowId),
+ sourceSafetyClass: 'source_safe_v42_local_staging_mvp_rehearsal_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawInterpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ privateSettlementPayloadVisible: false,
+ liveRehearsalLogPayloadSerialized: false,
+ valueBearingMainnetAdmitted: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ };
+}
+
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_ROWS = Object.freeze([
+ row({
+ rowId: 'lane:local-full-mvp-rehearsal',
+ laneId: 'local',
+ stageId: null,
+ purpose:
+ 'Bind the local MVP rehearsal to source-safe dry-run receipts, local package checks, and explicit sandbox execution opt-in.',
+ sourceRoots: [SOURCE_ROOTS.operatorScript, SOURCE_ROOTS.rehearsalModel, SOURCE_ROOTS.rehearsalTest],
+ requiredEvidence: ['local', 'dryRun', 'BITCODE_V42_REHEARSAL_EXECUTE'],
+ }),
+ row({
+ rowId: 'lane:staging-testnet-full-mvp-rehearsal',
+ laneId: 'staging-testnet',
+ stageId: null,
+ purpose:
+ 'Bind the staging-testnet MVP rehearsal to real-inference posture, Vercel Sandbox authorization, database streaming, and Supabase readback.',
+ sourceRoots: [SOURCE_ROOTS.operatorScript, SOURCE_ROOTS.harnessPreflight, SOURCE_ROOTS.harnessRunner],
+ requiredEvidence: ['staging-testnet', 'BITCODE_ASSET_PACK_REAL_INFERENCE', 'tkpyosihuouusyaxtbau'],
+ }),
+ row({
+ rowId: 'deposit:source-admission-compensation-readback',
+ laneId: 'local-and-staging-testnet',
+ stageId: 'deposit-source',
+ purpose:
+ 'Carry Gate 2 Depositing shortest path through rehearsal with source admission proof and later compensation readback.',
+ sourceRoots: [SOURCE_ROOTS.gate2Artifact, SOURCE_ROOTS.terminalWorkbench],
+ requiredEvidence: ['DepositorySupplyCompensationPreview', 'depositing-shortest-path', 'compensationPreview'],
+ }),
+ row({
+ rowId: 'reading:request-read-state',
+ laneId: 'local-and-staging-testnet',
+ stageId: 'request-read',
+ purpose:
+ 'Carry Gate 3 route-owned Reading state through transaction recovery, route hydration, and source-safe repair posture.',
+ sourceRoots: [SOURCE_ROOTS.gate3Artifact, SOURCE_ROOTS.terminalWorkbench],
+ requiredEvidence: ['TerminalEnterpriseReadingRouteState', 'readingStage', 'request-read'],
+ }),
+ row({
+ rowId: 'reading:need-review-resynthesis',
+ laneId: 'local-and-staging-testnet',
+ stageId: 'review-synthesized-need',
+ purpose:
+ 'Carry Gate 4 Need synthesis, review, feedback, resynthesis, accepted Need admission, and telemetry receipts through rehearsal.',
+ sourceRoots: [SOURCE_ROOTS.gate4Artifact, SOURCE_ROOTS.readNeedRuntime],
+ requiredEvidence: ['ReadNeedReviewResynthesisRuntime', 'accept_read_need', 'accepted Need'],
+ }),
+ row({
+ rowId: 'fits:many-candidate-depository-search',
+ laneId: 'local-and-staging-testnet',
+ stageId: 'request-finding-fits',
+ purpose:
+ 'Carry Gate 5 Finding Fits across many Depository candidates with query roots, ranking roots, and selected-fit provenance.',
+ sourceRoots: [SOURCE_ROOTS.gate5Artifact, SOURCE_ROOTS.readFitsRuntime, SOURCE_ROOTS.depositorySearch],
+ requiredEvidence: ['ReadFitsFindingRuntime', 'many-channel Depository search', 'selected-fit provenance'],
+ }),
+ row({
+ rowId: 'assetpack:source-safe-preview-quote',
+ laneId: 'local-and-staging-testnet',
+ stageId: 'review-assetpack-preview',
+ purpose:
+ 'Carry source-safe AssetPack preview, deterministic quote, disclosure review, and pre-settlement delivery lock through rehearsal.',
+ sourceRoots: [SOURCE_ROOTS.gate5Artifact, SOURCE_ROOTS.previewBoundary],
+ requiredEvidence: ['AssetPackPreviewBoundary', 'deterministicQuote', 'sourceSafePreview'],
+ }),
+ row({
+ rowId: 'settlement:btd-rights-delivery',
+ laneId: 'local-and-staging-testnet',
+ stageId: 'buy-assetpack-settle',
+ purpose:
+ 'Carry Gate 6 BTC/testnet finality, BTD read-right transfer, source-to-shares compensation, reconciliation, and pull-request delivery.',
+ sourceRoots: [SOURCE_ROOTS.gate6Artifact, SOURCE_ROOTS.settlementBoundary],
+ requiredEvidence: ['AssetPackSettlementRightsDeliveryBoundary', 'BtdRightsTransferReceipt', 'source_bearing_pull_request_ready'],
+ }),
+ row({
+ rowId: 'demonstration:ai-reading-uplift',
+ laneId: 'local-and-staging-testnet',
+ stageId: null,
+ purpose:
+ 'Carry Gate 7 AI-reading value proof into the full MVP rehearsal as the product demonstration of why Reading buys an AssetPack.',
+ sourceRoots: [SOURCE_ROOTS.gate7Artifact],
+ requiredEvidence: ['public-data-only', 'assetpack-enhanced-after-rights', 'minimumUpliftBp'],
+ }),
+ row({
+ rowId: 'telemetry:rich-stream-database-readback',
+ laneId: 'local-and-staging-testnet',
+ stageId: null,
+ purpose:
+ 'Prove rich pipeline stream rows, execution ids, phase/agent/step/generation metadata, and database readback remain available for debugging.',
+ sourceRoots: [SOURCE_ROOTS.rehearsalModel, SOURCE_ROOTS.operationalReadback, SOURCE_ROOTS.pipelineLogUi],
+ requiredEvidence: ['phase', 'ptrr-agent', 'thricified-generation', 'tool', 'databaseReadbackRequired'],
+ }),
+ row({
+ rowId: 'sync:ledger-database-storage-reconciliation',
+ laneId: 'local-and-staging-testnet',
+ stageId: null,
+ purpose:
+ 'Prove ledger, database, object storage, wallet, and repository delivery projections reconcile before source-bearing delivery.',
+ sourceRoots: [SOURCE_ROOTS.gate6Artifact, SOURCE_ROOTS.settlementBoundary, SOURCE_ROOTS.rehearsalModel],
+ requiredEvidence: ['ledgerDatabaseStorageSynchronized', 'reconciliationRoot', 'aligned'],
+ }),
+ row({
+ rowId: 'operator:source-safe-rehearsal-receipts',
+ laneId: 'local-and-staging-testnet',
+ stageId: null,
+ purpose:
+ 'Provide operator receipt generation for local and staging-testnet lanes without serializing env values, protected source, live logs, or settlement payloads.',
+ sourceRoots: [SOURCE_ROOTS.operatorScript, SOURCE_ROOTS.checkScript],
+ requiredEvidence: ['sourceSafety', 'secretValueSerialized: false', 'receiptRoot'],
+ }),
+ row({
+ rowId: 'boundary:value-bearing-mainnet-blocked',
+ laneId: 'local-and-staging-testnet',
+ stageId: null,
+ purpose:
+ 'Keep the MVP rehearsal non-value-bearing and blocked from mainnet while proving the staged BTC/BTD protocol path.',
+ sourceRoots: [SOURCE_ROOTS.operatorScript, SOURCE_ROOTS.rehearsalModel],
+ requiredEvidence: ['valueBearingMainnetAdmitted: false', 'serverCustody: false', 'production-mainnet blocked'],
+ }),
+ row({
+ rowId: 'proof:artifact-tests-workflows-docs',
+ laneId: 'local-and-staging-testnet',
+ stageId: null,
+ purpose:
+ 'Bind Gate 8 to deterministic artifact generation, protocol tests, package rehearsal tests, docs, workflows, and package scripts.',
+ sourceRoots: [SOURCE_ROOTS.protocolTest, SOURCE_ROOTS.packageJson, SOURCE_ROOTS.gateWorkflow, SOURCE_ROOTS.canonWorkflow],
+ requiredEvidence: ['v42-local-staging-mvp-rehearsal', 'check:v42-gate8', 'generate:v42-local-staging-mvp-rehearsal'],
+ }),
+]);
+
+function artifactText(repoRoot, sourcePath) {
+ return readSource(repoRoot, sourcePath);
+}
+
+function artifactPassed(repoRoot, sourcePath, artifactId) {
+ const text = artifactText(repoRoot, sourcePath);
+ if (!text) return false;
+ try {
+ const parsed = JSON.parse(text);
+ return parsed.artifactId === artifactId && parsed.passed === true;
+ } catch {
+ return false;
+ }
+}
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+
+ return [
+ predicateResult('gate2-artifact-passed', SOURCE_ROOTS.gate2Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate2Artifact, 'v42-depositing-shortest-path')),
+ predicateResult('gate3-artifact-passed', SOURCE_ROOTS.gate3Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate3Artifact, 'v42-reading-shortest-path-state-machine')),
+ predicateResult('gate4-artifact-passed', SOURCE_ROOTS.gate4Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate4Artifact, 'v42-readneed-review-resynthesis-product-closure')),
+ predicateResult('gate5-artifact-passed', SOURCE_ROOTS.gate5Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate5Artifact, 'v42-readfitsfinding-preview-quote')),
+ predicateResult('gate6-artifact-passed', SOURCE_ROOTS.gate6Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate6Artifact, 'v42-settlement-rights-delivery')),
+ predicateResult('gate7-artifact-passed', SOURCE_ROOTS.gate7Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate7Artifact, 'v42-ai-reading-demonstration')),
+ predicateResult('rehearsal-model-covers-lanes', SOURCE_ROOTS.rehearsalModel, sources.rehearsalModel.includes('READING_LOCAL_STAGING_REHEARSAL_LANES') && sources.rehearsalModel.includes('staging-testnet') && sources.rehearsalModel.includes('tkpyosihuouusyaxtbau')),
+ predicateResult('rehearsal-model-covers-five-reading-stages', SOURCE_ROOTS.rehearsalModel, sources.rehearsalModel.includes('request-read') && sources.rehearsalModel.includes('review-synthesized-need') && sources.rehearsalModel.includes('request-finding-fits') && sources.rehearsalModel.includes('review-assetpack-preview') && sources.rehearsalModel.includes('buy-assetpack-settle')),
+ predicateResult('rehearsal-model-covers-source-safety', SOURCE_ROOTS.rehearsalModel, sources.rehearsalModel.includes('sourceSafeMetadataOnly: true') && sources.rehearsalModel.includes('valueBearingMainnetAdmitted: false') && sources.rehearsalModel.includes('credentialsSerialized: false')),
+ predicateResult('rehearsal-test-covers-settled-flow', SOURCE_ROOTS.rehearsalTest, sources.rehearsalTest.includes('covers the five Reading stages') && sources.rehearsalTest.includes('ledgerDatabaseStorageSynchronized: true') && sources.rehearsalTest.includes('postSettlementPullRequestDeliveryCovered: true')),
+ predicateResult('postprocess-persists-rehearsal', SOURCE_ROOTS.postprocess, sources.postprocess.includes('persistReadingLocalStagingRehearsal') && sources.postprocess.includes('readingLocalStagingRehearsal')),
+ predicateResult('operator-script-exists', SOURCE_ROOTS.operatorScript, sourceExists(repoRoot, SOURCE_ROOTS.operatorScript) && sources.operatorScript.includes('V42_REHEARSAL_LANES') && sources.operatorScript.includes('BITCODE_V42_REHEARSAL_EXECUTE')),
+ predicateResult('operator-script-binds-staging-env', SOURCE_ROOTS.operatorScript, sources.operatorScript.includes('BITCODE_ASSET_PACK_REAL_INFERENCE') && sources.operatorScript.includes('BITCODE_PIPELINE_STREAM_TO_DATABASE') && sources.operatorScript.includes('BITCODE_ENABLE_PIPELINE_HARNESS_API') && sources.operatorScript.includes('tkpyosihuouusyaxtbau')),
+ predicateResult('operator-script-source-safe', SOURCE_ROOTS.operatorScript, sources.operatorScript.includes('secretValueSerialized: false') && sources.operatorScript.includes('valueBearingMainnetAdmitted: false')),
+ predicateResult('harness-preflight-binds-staging', SOURCE_ROOTS.harnessPreflight, sources.harnessPreflight.includes('tkpyosihuouusyaxtbau') && sources.harnessPreflight.includes('BITCODE_ASSET_PACK_REAL_INFERENCE')),
+ predicateResult('harness-runner-covers-boundaries', SOURCE_ROOTS.harnessRunner, sources.harnessRunner.includes('assetPackPreviewBoundary') && sources.harnessRunner.includes('assetPackSettlementRightsDeliveryBoundary')),
+ predicateResult('terminal-renders-reading-rehearsal', SOURCE_ROOTS.terminalWorkbench, sources.terminalWorkbench.includes('readingLocalStagingRehearsal') && sources.terminalWorkbench.includes('Settlement rights, compensation, and delivery')),
+ predicateResult('pipeline-log-supports-rich-telemetry', SOURCE_ROOTS.pipelineLogUi, sources.pipelineLogUi.includes('metadata') && sources.pipelineLogUi.includes('Accordion')),
+ predicateResult('protocol-test-wired', SOURCE_ROOTS.protocolTest, sources.protocolTest.includes('buildV42LocalStagingMvpRehearsal') && sources.protocolTest.includes('rowCount, 14')),
+ predicateResult('protocol-exports-wired', SOURCE_ROOTS.protocolIndex, sources.protocolIndex.includes('buildV42LocalStagingMvpRehearsal') && sources.protocolTypes.includes('buildV42LocalStagingMvpRehearsal')),
+ predicateResult('package-scripts-wired', SOURCE_ROOTS.packageJson, sources.packageJson.includes('generate:v42-local-staging-mvp-rehearsal') && sources.packageJson.includes('rehearse:v42-local-staging') && sources.packageJson.includes('check:v42-gate8')),
+ predicateResult('workflows-run-gate8', SOURCE_ROOTS.gateWorkflow, sources.gateWorkflow.includes('check-v42-gate8-local-staging-mvp-rehearsal.mjs') && sources.canonWorkflow.includes('check-v42-gate8-local-staging-mvp-rehearsal.mjs')),
+ predicateResult('v42-docs-expanded', SOURCE_ROOTS.v42Spec, sources.v42Spec.includes('V42 Gate 8') && sources.v42Spec.includes('local/staging full MVP rehearsal')),
+ predicateResult('v42-delta-expanded', SOURCE_ROOTS.v42Delta, sources.v42Delta.includes('Gate 8 now binds') && sources.v42Delta.includes('staging-testnet full MVP rehearsal')),
+ predicateResult('v42-notes-expanded', SOURCE_ROOTS.v42Notes, sources.v42Notes.includes('Gate 8 records') && sources.v42Notes.includes('V43+ route vocabulary')),
+ predicateResult('v42-parity-implemented', SOURCE_ROOTS.v42Parity, sources.v42Parity.includes('Local/staging rehearsal') && sources.v42Parity.includes('implemented')),
+ predicateResult(
+ 'roadmap-advanced-to-gate8',
+ SOURCE_ROOTS.roadmap,
+ sources.roadmap.includes('V42 Gate 8 closure anchor') &&
+ (sources.roadmap.includes('Current working gate: V42 Gate 8') ||
+ sources.roadmap.includes('Current working gate: V42 Gate 9') ||
+ sources.roadmap.includes('Latest closed version: V42 Reliable MVP Experience') ||
+ sources.roadmap.includes('Recent V42 canonical promotion anchor') ||
+ sources.roadmap.includes('Current working gate: V43 Gate')),
+ ),
+ predicateResult('readmes-document-gate8', SOURCE_ROOTS.rootReadme, sources.rootReadme.includes('V42 Gate 8') && sources.protocolReadme.includes('V42LocalStagingMvpRehearsal') && sources.assetPackReadme.includes('ReadingLocalStagingRehearsal') && sources.terminalReadme.includes('local/staging')),
+ ];
+}
+
+function buildCoverage(rows, predicateResults) {
+ const failedPredicateIds = predicateResults.filter((predicate) => !predicate.passed).map((predicate) => predicate.id);
+ return {
+ rowCount: rows.length,
+ laneCount: V42_LOCAL_STAGING_MVP_REHEARSAL_LANE_IDS.length,
+ stageCount: V42_LOCAL_STAGING_MVP_REHEARSAL_STAGE_IDS.length,
+ gateArtifactCount: 6,
+ lanes: [...V42_LOCAL_STAGING_MVP_REHEARSAL_LANE_IDS],
+ stages: [...V42_LOCAL_STAGING_MVP_REHEARSAL_STAGE_IDS],
+ stagingProjectRef: 'tkpyosihuouusyaxtbau',
+ stagingRestHost: 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/',
+ localLaneCovered: true,
+ stagingTestnetLaneCovered: true,
+ depositingCovered: true,
+ readRequestCovered: true,
+ readNeedReviewCovered: true,
+ readFitsFindingCovered: true,
+ manyCandidateDepositorySearchCovered: true,
+ sourceSafePreviewQuoteCovered: true,
+ settlementRightsDeliveryCovered: true,
+ aiReadingDemonstrationCovered: true,
+ richTelemetryReadbackCovered: true,
+ databaseStreamReadbackCovered: true,
+ ledgerDatabaseStorageSynchronized: true,
+ postSettlementPullRequestDeliveryCovered: true,
+ operatorReceiptScriptCovered: true,
+ mainnetValueBearingBlocked: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawInterpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ privateSettlementPayloadVisible: false,
+ liveRehearsalLogPayloadSerialized: false,
+ failedPredicateIds,
+ };
+}
+
+export function buildV42LocalStagingMvpRehearsal(input = {}) {
+ const repoRoot = input.repoRoot || DEFAULT_REPO_ROOT;
+ const predicateResults = buildPredicateResults(repoRoot);
+ const rows = [...V42_LOCAL_STAGING_MVP_REHEARSAL_ROWS];
+ const coverage = buildCoverage(rows, predicateResults);
+ const artifactRoot = `v42-local-staging-mvp-rehearsal:${digest(JSON.stringify({
+ rowIds: V42_LOCAL_STAGING_MVP_REHEARSAL_ROW_IDS,
+ laneIds: V42_LOCAL_STAGING_MVP_REHEARSAL_LANE_IDS,
+ stageIds: V42_LOCAL_STAGING_MVP_REHEARSAL_STAGE_IDS,
+ predicateResults,
+ coverage,
+ }))}`;
+
+ return {
+ artifactId: 'v42-local-staging-mvp-rehearsal',
+ schemaId: V42_LOCAL_STAGING_MVP_REHEARSAL_SCHEMA_ID,
+ version: V42_LOCAL_STAGING_MVP_REHEARSAL_VERSION,
+ currentTarget: V42_LOCAL_STAGING_MVP_REHEARSAL_CURRENT_TARGET,
+ sourceSafetyVerdict: V42_LOCAL_STAGING_MVP_REHEARSAL_SOURCE_SAFETY_VERDICT,
+ laneIds: [...V42_LOCAL_STAGING_MVP_REHEARSAL_LANE_IDS],
+ stageIds: [...V42_LOCAL_STAGING_MVP_REHEARSAL_STAGE_IDS],
+ rowIds: [...V42_LOCAL_STAGING_MVP_REHEARSAL_ROW_IDS],
+ rows,
+ predicateResults,
+ coverage,
+ sourceSafety: {
+ sourceSafetyClass: 'source_safe_v42_local_staging_mvp_rehearsal_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawInterpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ privateSettlementPayloadVisible: false,
+ liveRehearsalLogPayloadSerialized: false,
+ valueBearingMainnetAdmitted: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ },
+ passed: coverage.failedPredicateIds.length === 0,
+ artifactRoot,
+ };
+}
diff --git a/packages/protocol/src/canonical/v42-promotion-readiness-report.js b/packages/protocol/src/canonical/v42-promotion-readiness-report.js
new file mode 100644
index 00000000..fc31617b
--- /dev/null
+++ b/packages/protocol/src/canonical/v42-promotion-readiness-report.js
@@ -0,0 +1,428 @@
+// @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 V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH =
+ '.bitcode/v42-promotion-readiness-report.json';
+export const V42_PROMOTION_READINESS_REPORT_SCHEMA_ID =
+ 'bitcode.v42.promotionReadinessReport.v1';
+export const V42_PROMOTION_READINESS_REPORT_VERSION = 'V42';
+export const V42_PROMOTION_READINESS_REPORT_CURRENT_TARGET = 'V41';
+export const V42_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT =
+ 'source-safe-v42-reliable-mvp-promotion-readiness-metadata';
+
+export const V42_PROMOTION_READINESS_GATE_ARTIFACT_PATHS = Object.freeze([
+ '.bitcode/v42-depositing-shortest-path.json',
+ '.bitcode/v42-reading-shortest-path-state-machine.json',
+ '.bitcode/v42-readneed-review-resynthesis-product-closure.json',
+ '.bitcode/v42-readfitsfinding-preview-quote.json',
+ '.bitcode/v42-settlement-rights-delivery.json',
+ '.bitcode/v42-ai-reading-demonstration.json',
+ '.bitcode/v42-local-staging-mvp-rehearsal.json',
+]);
+
+export const V42_PROMOTION_READINESS_GENERATED_OUTPUTS = Object.freeze([
+ 'BITCODE_SPEC_V42_PROVEN.md',
+ '.bitcode/v42-spec-family-report.json',
+ '.bitcode/v42-canonical-input-report.json',
+ '.bitcode/v42-canon-posture-drift-report.json',
+ V42_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-v42-gate9-promotion-readiness.mjs', [
+ 'V42 Gate 9 promotion readiness',
+ '--promotion-mode',
+ 'promotedPointer',
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ ]),
+ source('scripts/generate-v42-promotion-readiness-report.mjs', [
+ 'buildV42PromotionReadinessReport',
+ V42_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ 'v42-promotion-readiness-report',
+ ]),
+ source('scripts/promote-bitcode-canon.mjs', [
+ "if (version === 'V42')",
+ 'const v42Gate9Command',
+ 'buildDerivedV42CommitMessageBody',
+ 'scripts/check-v42-gate9-promotion-readiness.mjs',
+ ]),
+ source('scripts/prepare-bitcode-spec-family-promotion.mjs', [
+ "if (version === 'V42')",
+ 'V42 canonical system specification for reliable MVP experience',
+ 'BITCODE_SPEC_V42_PROVEN.md',
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ ]),
+ source('scripts/prepare-bitcode-runtime-canon-promotion.mjs', [
+ '--next-draft',
+ 'rewritePackageReadme',
+ 'rewriteRuntimeDataState',
+ ]),
+ source('.github/workflows/v42-canon-promotion.yml', [
+ "head.ref == 'version/v42'",
+ 'node scripts/prepare-bitcode-spec-family-promotion.mjs --version V42',
+ 'node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V42 --next-draft V43',
+ 'node scripts/generate-bitcode-proven.mjs --version V42',
+ 'node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42',
+ 'BITCODE_SPEC_V42_PROVEN.md',
+ 'Promote V42 canon files',
+ ]),
+ source('.github/workflows/bitcode-gate-quality.yml', [
+ 'check-v42-gate9-promotion-readiness.mjs',
+ 'elif [ "$POINTER" = "V42" ]',
+ '--active-canon V42 --draft-target V43',
+ ]),
+ source('.github/workflows/bitcode-canon-quality.yml', [
+ 'check-v42-gate9-promotion-readiness.mjs',
+ 'elif [ "$POINTER" = "V42" ]',
+ '--active-canon V42 --draft-target V43',
+ ]),
+ source('packages/protocol/src/canonical/proven-generator.js', [
+ 'buildV42ProvenPackage',
+ 'buildV42PromotionReadinessReport',
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ ]),
+ source('packages/protocol/test/v42-promotion-readiness.test.js', [
+ 'builds source-safe V42 PromotionReadinessReport',
+ 'v42-promotion-readiness-report',
+ 'V42 Promotion Readiness',
+ ]),
+ source('packages/protocol/src/canonical/v21-specifying.js', [
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ ]),
+ source('package.json', [
+ 'generate:v42-promotion-readiness',
+ 'check:v42-promotion-readiness',
+ 'check:v42-gate9',
+ ]),
+]);
+
+const REQUIRED_DOCUMENTATION_EVIDENCE = Object.freeze([
+ source('BITCODE_SPEC_V42.md', [
+ 'V42 promotion readiness canon',
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ 'V42 active / draft V43',
+ ]),
+ source('BITCODE_SPEC_V42_DELTA.md', [
+ 'Gate 9: V42 Promotion Readiness',
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ 'promotion scripts support V42',
+ ]),
+ source('BITCODE_SPEC_V42_NOTES.md', [
+ 'Gate 9: V42 Promotion Readiness',
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ 'active V42 / draft V43',
+ ]),
+ source('BITCODE_SPEC_V42_PARITY_MATRIX.md', [
+ '## Gate 9 Promotion readiness parity',
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ 'closed',
+ ]),
+ source('SPECIFICATIONS_ROADMAP.md', [
+ 'V42 Gate 9 closure anchor',
+ 'BITCODE_SPEC_V42_PROVEN.md',
+ ]),
+ source('README.md', [
+ 'check:v42-gate9',
+ 'v42-canon-promotion.yml',
+ ]),
+ source('packages/protocol/README.md', [
+ 'V42 Gate 9',
+ 'V42` active, `V43` 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 buildV42PromotionReadinessReport(input = {}) {
+ const version = input.version || V42_PROMOTION_READINESS_REPORT_VERSION;
+ const currentTarget = input.currentTarget || V42_PROMOTION_READINESS_REPORT_CURRENT_TARGET;
+ const generatedAt = input.generatedAt || '2026-05-25T00: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 = V42_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:v42-gate1',
+ 'pnpm run check:v42-gate2',
+ 'pnpm run check:v42-gate3',
+ 'pnpm run check:v42-gate4',
+ 'pnpm run check:v42-gate5',
+ 'pnpm run check:v42-gate6',
+ 'pnpm run check:v42-gate7',
+ 'pnpm run check:v42-gate8',
+ 'pnpm run check:v42-gate9',
+ 'node scripts/promote-bitcode-canon.mjs --version V42 --commit HEAD --dry-run',
+ ];
+ const coverage = {
+ requiredGateArtifactPaths: [...V42_PROMOTION_READINESS_GATE_ARTIFACT_PATHS],
+ generatedProofOutputs: [...V42_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: V42_PROMOTION_READINESS_GENERATED_OUTPUTS.includes('BITCODE_SPEC_V42_PROVEN.md'),
+ promotionWorkflowCovered: sourceEvidence.some((entry) => entry.relativePath === '.github/workflows/v42-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: 'V41 active / V42 draft',
+ postPromotionPosture: 'V42 active / V43 draft',
+ valueBearingMainnetAdmission: false,
+ credentialsSerialized: forbiddenMarkerDetected,
+ protectedSourceVisible: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ };
+ const artifactSeed = {
+ version,
+ currentTarget,
+ validationCommands,
+ coverage,
+ sourceSafetyVerdict: V42_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ };
+
+ return {
+ artifactId: 'v42-promotion-readiness-report',
+ schemaId: V42_PROMOTION_READINESS_REPORT_SCHEMA_ID,
+ version,
+ currentTarget,
+ generatedAt,
+ sourceSafetyVerdict: V42_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ prePromotionPosture: 'V41 active / V42 draft',
+ postPromotionPosture: 'V42 active / V43 draft',
+ branchProtection: {
+ directMainPushAdmitted: false,
+ promotionPrRequired: true,
+ versionBranch: 'version/v42',
+ versionPromotionPullRequestTitlePrefix: 'V42 Canonical Promotion',
+ },
+ generatedArtifactPolicy: {
+ provenAppendixPath: 'BITCODE_SPEC_V42_PROVEN.md',
+ provenAppendixRequiredBeforePromotion: false,
+ generatedArtifactPrefix: '.bitcode/v42-',
+ promotionOverwritesPreviewArtifacts: true,
+ secretValuesSerialized: false,
+ protectedSourceSerialized: false,
+ rawProtectedPromptSerialized: false,
+ rawProviderResponseSerialized: false,
+ unpaidAssetPackSourceSerialized: false,
+ },
+ validationCommands,
+ gateArtifactEvidence,
+ sourceEvidence,
+ documentationEvidence,
+ coverage,
+ failClosedResult:
+ 'promotion remains blocked when any V42 Depositing shortest path, Reading shortest path state machine, ReadNeed review/resynthesis closure, ReadFitsFinding preview and quote closure, settlement rights delivery boundary, AI-reading demonstration, local/staging-testnet rehearsal, workflow, promotion script, generated proof support, source-safety check, or value-bearing mainnet block is missing',
+ artifactRoot: `reliable-mvp-promotion-readiness-report:${sha256(canonicalJson(artifactSeed)).slice(7, 31)}`,
+ passed: failures.length === 0,
+ failures,
+ validationCommand: 'pnpm run check:v42-gate9',
+ };
+}
+
+export function listMissingV42PromotionReadinessSources(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/v42-readfitsfinding-preview-quote.js b/packages/protocol/src/canonical/v42-readfitsfinding-preview-quote.js
new file mode 100644
index 00000000..577db1f0
--- /dev/null
+++ b/packages/protocol/src/canonical/v42-readfitsfinding-preview-quote.js
@@ -0,0 +1,343 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V42_READFITSFINDING_PREVIEW_QUOTE_ARTIFACT_PATH =
+ '.bitcode/v42-readfitsfinding-preview-quote.json';
+export const V42_READFITSFINDING_PREVIEW_QUOTE_SCHEMA_ID =
+ 'bitcode.v42.readFitsFindingPreviewQuote.v1';
+export const V42_READFITSFINDING_PREVIEW_QUOTE_VERSION = 'V42';
+export const V42_READFITSFINDING_PREVIEW_QUOTE_CURRENT_TARGET = 'V41';
+export const V42_READFITSFINDING_PREVIEW_QUOTE_SOURCE_SAFETY_VERDICT =
+ 'source-safe-readfitsfinding-preview-quote-metadata';
+
+export const V42_READFITSFINDING_PREVIEW_QUOTE_ROW_IDS = Object.freeze([
+ 'admission:accepted-need-required',
+ 'search:many-candidate-depository-discovery',
+ 'search:multi-channel-vector-provider-tooling',
+ 'ranking:candidate-ranking-and-thresholds',
+ 'provenance:selected-fit-provenance',
+ 'preview:source-safe-assetpack-preview',
+ 'quote:deterministic-share-to-fee-btc-quote',
+ 'disclosure:no-pre-settlement-source',
+ 'settlement:instructions-before-rights-transfer',
+ 'route:harness-preview-quote-summary',
+ 'ui:terminal-preview-quote-provenance-readback',
+ 'proof:tests-artifact-workflow',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ depositorySearch: 'packages/pipelines/asset-pack/src/depository-search.ts',
+ readFitsFindingRuntime: 'packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts',
+ assetPackPreviewBoundary: 'packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts',
+ readNeed: 'packages/pipelines/asset-pack/src/read-need.ts',
+ packageIndex: 'packages/pipelines/asset-pack/src/index.ts',
+ postprocess: 'packages/pipelines/asset-pack/src/postprocess.ts',
+ readingPipelineContract: 'packages/pipelines/asset-pack/src/reading-pipeline-contract.ts',
+ depositorySearchTest: 'packages/pipelines/asset-pack/src/__tests__/depository-search.test.ts',
+ runtimeTest: 'packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts',
+ previewBoundaryTest: 'packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts',
+ postprocessTest: 'packages/pipelines/asset-pack/src/__tests__/postprocess.test.ts',
+ harnessRunner: 'uapi/app/api/pipeline-harness/asset-pack/runner.ts',
+ harnessRouteTest: 'uapi/tests/api/pipelineHarnessRoute.test.ts',
+ terminalWorkbench: 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ terminalHarnessClient: 'uapi/app/terminal/terminal-pipeline-harness-client.ts',
+ terminalHarnessClientTest: 'uapi/tests/terminalPipelineHarnessClient.test.ts',
+ gateWorkflow: '.github/workflows/bitcode-gate-quality.yml',
+ canonWorkflow: '.github/workflows/bitcode-canon-quality.yml',
+ v42Spec: 'BITCODE_SPEC_V42.md',
+ v42Delta: 'BITCODE_SPEC_V42_DELTA.md',
+ v42Notes: 'BITCODE_SPEC_V42_NOTES.md',
+ v42Parity: 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ roadmap: 'SPECIFICATIONS_ROADMAP.md',
+ rootReadme: 'README.md',
+ terminalReadme: 'uapi/app/terminal/README.md',
+ assetPackReadme: 'packages/pipelines/asset-pack/README.md',
+ protocolReadme: 'packages/protocol/README.md',
+});
+
+const SEARCH_CHANNEL_IDS = Object.freeze([
+ 'lexical',
+ 'symbolic',
+ 'path',
+ 'metadata',
+ 'measurement',
+ 'embedding-vector',
+ 'provider-specific',
+]);
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'protected-source-payloads',
+ 'raw-protected-prompts',
+ 'raw-provider-responses',
+ 'unpaid-assetpack-source',
+ 'wallet-private-material',
+ 'settlement-private-payloads',
+ 'secret-values',
+]);
+
+function digest(value) {
+ return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24);
+}
+
+function rowRoot(id) {
+ return `v42-readfitsfinding-preview-quote-row:${digest(id)}`;
+}
+
+function readSource(repoRoot, sourcePath) {
+ const absolutePath = path.join(repoRoot, sourcePath);
+ return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : '';
+}
+
+function predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+function row(input) {
+ return {
+ ...input,
+ rowRoot: rowRoot(input.rowId),
+ sourceSafetyClass: 'source_safe_readfitsfinding_preview_quote_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ credentialsSerialized: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ };
+}
+
+export const V42_READFITSFINDING_PREVIEW_QUOTE_ROWS = Object.freeze([
+ row({
+ rowId: 'admission:accepted-need-required',
+ purpose:
+ 'Require an accepted ReadNeedComprehensionSynthesis Need before ReadFitsFindingSynthesis can search or preview an AssetPack.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.readFitsFindingRuntime, SOURCE_ROOTS.terminalWorkbench],
+ emittedTypes: ['ReadFitsFindingAdmission', 'accepted_need_admission'],
+ requiredEvidence: ['accepted_read_need_missing', 'findingFitsAdmission', 'acceptedNeed'],
+ }),
+ row({
+ rowId: 'search:many-candidate-depository-discovery',
+ purpose:
+ 'Search Depository AssetPack supply for many candidates above threshold before selecting the fit set.',
+ sourceRoots: [SOURCE_ROOTS.depositorySearch, SOURCE_ROOTS.depositorySearchTest],
+ emittedTypes: ['DepositorySearchResult', 'DepositoryCandidate'],
+ requiredEvidence: ['searchedAssetCount', 'candidateRanking', 'maxSelectedCandidates'],
+ }),
+ row({
+ rowId: 'search:multi-channel-vector-provider-tooling',
+ purpose:
+ 'Bind lexical, symbolic, path, metadata, measurement, embedding-vector, and provider-specific search channels to source-safe tool receipts.',
+ sourceRoots: [SOURCE_ROOTS.depositorySearch, SOURCE_ROOTS.readFitsFindingRuntime],
+ emittedTypes: ['ReadFitsFindingSynthesisSearchReceipt', 'DepositorySearchQueryPlan'],
+ requiredEvidence: [...SEARCH_CHANNEL_IDS, 'ReadFitsFindingSynthesis.tool.vector-depository-search'],
+ }),
+ row({
+ rowId: 'ranking:candidate-ranking-and-thresholds',
+ purpose:
+ 'Rank candidates with deterministic scores, thresholds, blockers, rejected counts, and proof/measurement requirements.',
+ sourceRoots: [SOURCE_ROOTS.depositorySearch, SOURCE_ROOTS.depositorySearchTest],
+ emittedTypes: ['DepositoryCandidateRanking', 'DepositoryCandidateFitEvidence'],
+ requiredEvidence: ['finalScore', 'semanticScore', 'proofScore', 'measurementScore', 'rejectedCandidateCount'],
+ }),
+ row({
+ rowId: 'provenance:selected-fit-provenance',
+ purpose:
+ 'Persist selected fit provenance with selected candidate ids, fit deposit ids, proof roots, measurement roots, and reconciliation roots.',
+ sourceRoots: [SOURCE_ROOTS.readFitsFindingRuntime, SOURCE_ROOTS.assetPackPreviewBoundary, SOURCE_ROOTS.runtimeTest],
+ emittedTypes: ['selected_fit_provenance', 'AssetPackPreviewSelectedFitProvenance'],
+ requiredEvidence: ['selectedFitProvenanceRoot', 'fitDepositAssetIds', 'reconciliationReadbackRoot'],
+ }),
+ row({
+ rowId: 'preview:source-safe-assetpack-preview',
+ purpose:
+ 'Create the source-safe AssetPack preview that exposes measurements, fit posture, roots, and delivery posture while source stays locked.',
+ sourceRoots: [SOURCE_ROOTS.assetPackPreviewBoundary, SOURCE_ROOTS.readNeed, SOURCE_ROOTS.previewBoundaryTest],
+ emittedTypes: ['AssetPackSourceSafePreview', 'AssetPackPreviewBoundary'],
+ requiredEvidence: ['sourceSafePreview', 'AssetPackPreviewBoundary', 'sourceBearingDeliveryVisible'],
+ }),
+ row({
+ rowId: 'quote:deterministic-share-to-fee-btc-quote',
+ purpose:
+ 'Read back deterministic BTD/BTC quote calculation from measurement weight, measurement volume, admitted fit quality, dust floor, and minimum sats.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.assetPackPreviewBoundary, SOURCE_ROOTS.previewBoundaryTest],
+ emittedTypes: ['ShareToFeeQuote', 'AssetPackPreviewQuoteReceipt'],
+ requiredEvidence: ['sum(measurement.weight * measurement.volume * admitted_fit_quality)', 'deterministic', 'quoteRoot'],
+ }),
+ row({
+ rowId: 'disclosure:no-pre-settlement-source',
+ purpose:
+ 'Fail closed when preview, telemetry, route summary, or UI readback would expose protected source or unpaid AssetPack source before settlement.',
+ sourceRoots: [SOURCE_ROOTS.assetPackPreviewBoundary, SOURCE_ROOTS.harnessRunner, SOURCE_ROOTS.terminalWorkbench],
+ emittedTypes: ['AssetPackDisclosureReview', 'AssetPackPreviewBoundarySourceSafety'],
+ requiredEvidence: ['protectedSourceVisible: false', 'unpaidAssetPackSourceVisible: false', 'credentialsSerialized: false'],
+ }),
+ row({
+ rowId: 'settlement:instructions-before-rights-transfer',
+ purpose:
+ 'Expose source-safe settlement instructions and delivery lock before Gate 6 rights-transfer and repository delivery unlock.',
+ sourceRoots: [SOURCE_ROOTS.assetPackPreviewBoundary, SOURCE_ROOTS.previewBoundaryTest],
+ emittedTypes: ['AssetPackPreviewSettlementInstructions', 'AssetPackPreviewDeliveryPosture'],
+ requiredEvidence: ['quote_ready_settlement_required', 'reader_wallet_authorized_before_broadcast', 'withheld_until_settlement'],
+ }),
+ row({
+ rowId: 'route:harness-preview-quote-summary',
+ purpose:
+ 'Summarize preview boundary, quote receipt, selected-fit provenance, settlement instructions, delivery posture, and disclosure review through the pipeline harness route without source payloads.',
+ sourceRoots: [SOURCE_ROOTS.harnessRunner, SOURCE_ROOTS.harnessRouteTest],
+ emittedTypes: ['assetPackPreviewBoundary', 'assetPackQuoteReceipt', 'assetPackSettlementInstructions', 'assetPackDeliveryPosture'],
+ requiredEvidence: ['summarizeAssetPackPreviewBoundary', 'assetPackPreviewBoundary', 'storageRecordCount'],
+ }),
+ row({
+ rowId: 'ui:terminal-preview-quote-provenance-readback',
+ purpose:
+ 'Render Terminal Finding Fits preview, quote, provenance, settlement, delivery, and replay roots as expandable source-safe metadata.',
+ sourceRoots: [SOURCE_ROOTS.terminalWorkbench, SOURCE_ROOTS.terminalHarnessClient, SOURCE_ROOTS.terminalHarnessClientTest],
+ emittedTypes: ['assetPackPreviewBoundaryRows', 'TerminalReadFitsFindingSynthesisHarnessStreamSnapshot'],
+ requiredEvidence: ['Finding Fits preview, quote, and provenance', 'quote_ready_settlement_required', 'withheld_until_settlement'],
+ }),
+ row({
+ rowId: 'proof:tests-artifact-workflow',
+ purpose:
+ 'Bind V42 Gate 5 closure to package tests, UAPI tests, protocol artifact tests, docs, scripts, workflows, and generated source-safe proof.',
+ sourceRoots: [
+ SOURCE_ROOTS.depositorySearchTest,
+ SOURCE_ROOTS.runtimeTest,
+ SOURCE_ROOTS.previewBoundaryTest,
+ SOURCE_ROOTS.harnessRouteTest,
+ SOURCE_ROOTS.gateWorkflow,
+ SOURCE_ROOTS.canonWorkflow,
+ SOURCE_ROOTS.v42Spec,
+ SOURCE_ROOTS.v42Parity,
+ SOURCE_ROOTS.roadmap,
+ ],
+ emittedTypes: ['V42ReadFitsFindingPreviewQuote'],
+ requiredEvidence: ['check-v42-gate5-readfitsfinding-preview-quote.mjs', 'v42-readfitsfinding-preview-quote'],
+ }),
+]);
+
+function buildPredicateResults(repoRoot) {
+ const depositorySearch = readSource(repoRoot, SOURCE_ROOTS.depositorySearch);
+ const runtime = readSource(repoRoot, SOURCE_ROOTS.readFitsFindingRuntime);
+ const previewBoundary = readSource(repoRoot, SOURCE_ROOTS.assetPackPreviewBoundary);
+ const readNeed = readSource(repoRoot, SOURCE_ROOTS.readNeed);
+ const packageIndex = readSource(repoRoot, SOURCE_ROOTS.packageIndex);
+ const postprocess = readSource(repoRoot, SOURCE_ROOTS.postprocess);
+ const contract = readSource(repoRoot, SOURCE_ROOTS.readingPipelineContract);
+ const depositorySearchTest = readSource(repoRoot, SOURCE_ROOTS.depositorySearchTest);
+ const runtimeTest = readSource(repoRoot, SOURCE_ROOTS.runtimeTest);
+ const previewBoundaryTest = readSource(repoRoot, SOURCE_ROOTS.previewBoundaryTest);
+ const postprocessTest = readSource(repoRoot, SOURCE_ROOTS.postprocessTest);
+ const harnessRunner = readSource(repoRoot, SOURCE_ROOTS.harnessRunner);
+ const harnessRouteTest = readSource(repoRoot, SOURCE_ROOTS.harnessRouteTest);
+ const terminalWorkbench = readSource(repoRoot, SOURCE_ROOTS.terminalWorkbench);
+ const terminalHarnessClient = readSource(repoRoot, SOURCE_ROOTS.terminalHarnessClient);
+ const terminalHarnessClientTest = readSource(repoRoot, SOURCE_ROOTS.terminalHarnessClientTest);
+ const gateWorkflow = readSource(repoRoot, SOURCE_ROOTS.gateWorkflow);
+ const canonWorkflow = readSource(repoRoot, SOURCE_ROOTS.canonWorkflow);
+ const spec = readSource(repoRoot, SOURCE_ROOTS.v42Spec);
+ const delta = readSource(repoRoot, SOURCE_ROOTS.v42Delta);
+ const notes = readSource(repoRoot, SOURCE_ROOTS.v42Notes);
+ const parity = readSource(repoRoot, SOURCE_ROOTS.v42Parity);
+ const roadmap = readSource(repoRoot, SOURCE_ROOTS.roadmap);
+ const rootReadme = readSource(repoRoot, SOURCE_ROOTS.rootReadme);
+ const terminalReadme = readSource(repoRoot, SOURCE_ROOTS.terminalReadme);
+ const assetPackReadme = readSource(repoRoot, SOURCE_ROOTS.assetPackReadme);
+ const protocolReadme = readSource(repoRoot, SOURCE_ROOTS.protocolReadme);
+
+ return [
+ predicateResult('accepted-need-gates-finding-fits', SOURCE_ROOTS.readFitsFindingRuntime, runtime.includes('admitReadFitsFinding') && runtime.includes('accepted_need_admission') && runtime.includes('accept_read_need')),
+ predicateResult('search-defines-many-channel-ids', SOURCE_ROOTS.depositorySearch, SEARCH_CHANNEL_IDS.every((id) => depositorySearch.includes(`'${id}'`))),
+ predicateResult('search-defines-tool-ids', SOURCE_ROOTS.depositorySearch, depositorySearch.includes('ReadFitsFindingSynthesis.tool.lexical-depository-search') && depositorySearch.includes('ReadFitsFindingSynthesis.tool.vector-depository-search')),
+ predicateResult('search-covers-provider-embedding-policy', SOURCE_ROOTS.depositorySearch, depositorySearch.includes('embeddingPolicy') && depositorySearch.includes('providerIds') && depositorySearch.includes('selectedFitProvenanceRoot')),
+ predicateResult('search-tests-many-candidates', SOURCE_ROOTS.depositorySearchTest, depositorySearchTest.includes('discovers every qualifying fit deposit') && depositorySearchTest.includes('selectedFitProvenanceRoot')),
+ predicateResult('runtime-persists-selected-fit-provenance', SOURCE_ROOTS.readFitsFindingRuntime, runtime.includes('selected_fit_provenance') && runtime.includes('ReadFitsFindingReplayReceipt') && runtime.includes('persistReadFitsFindingRuntime')),
+ predicateResult('runtime-telemetry-counts', SOURCE_ROOTS.readFitsFindingRuntime, runtime.includes('phaseIds') && runtime.includes('failsafeSequenceIds') && runtime.includes('thricifiedGenerationIds')),
+ predicateResult('runtime-tests-source-safe-counts', SOURCE_ROOTS.runtimeTest, runtimeTest.includes('source_safe_read_fits_finding_runtime_metadata') && runtimeTest.includes('thricifiedGenerationIds') && runtimeTest.includes('fitDepositAssetIds')),
+ predicateResult('preview-boundary-defines-quote-provenance-settlement-delivery', SOURCE_ROOTS.assetPackPreviewBoundary, previewBoundary.includes('AssetPackPreviewQuoteReceipt') && previewBoundary.includes('AssetPackPreviewSelectedFitProvenance') && previewBoundary.includes('AssetPackPreviewSettlementInstructions') && previewBoundary.includes('AssetPackPreviewDeliveryPosture')),
+ predicateResult('preview-boundary-source-safety', SOURCE_ROOTS.assetPackPreviewBoundary, previewBoundary.includes('source_safe_assetpack_preview_quote_boundary') && previewBoundary.includes('unpaidAssetPackSourceVisible: false') && previewBoundary.includes('walletPrivateMaterialVisible: false')),
+ predicateResult('quote-formula-implemented', SOURCE_ROOTS.readNeed, readNeed.includes('sum(measurement.weight * measurement.volume * admitted_fit_quality)') && readNeed.includes('weightedAdmittedVolume') && readNeed.includes('minimumSats')),
+ predicateResult('preview-tests-cover-determinism-and-storage-safety', SOURCE_ROOTS.previewBoundaryTest, previewBoundaryTest.includes('deterministic') && previewBoundaryTest.includes('quoteRoot') && previewBoundaryTest.includes('unpaidAssetPackSourceVisible')),
+ predicateResult('package-postprocess-surfaces-boundary', SOURCE_ROOTS.postprocess, packageIndex.includes('assetPackPreviewBoundary') && postprocess.includes('assetPackQuoteReceipt') && postprocessTest.includes('assetPackPreviewBoundary')),
+ predicateResult('contract-keeps-readfitsfinding-topology', SOURCE_ROOTS.readingPipelineContract, contract.includes('ReadFitsFindingSynthesis.discovery') && contract.includes('ptrrStepCount') && contract.includes('thricifiedGenerationCount')),
+ predicateResult('harness-route-summarizes-preview-boundary', SOURCE_ROOTS.harnessRunner, harnessRunner.includes('summarizeAssetPackPreviewBoundary') && harnessRunner.includes('assetPackQuoteReceipt') && harnessRunner.includes('assetPackSettlementInstructions') && harnessRunner.includes('assetPackDeliveryPosture')),
+ predicateResult('harness-route-tests-preview-boundary-summary', SOURCE_ROOTS.harnessRouteTest, harnessRouteTest.includes('asset-pack-preview-boundary-route-test') && harnessRouteTest.includes('quote_ready_settlement_required') && harnessRouteTest.includes('storageRecordCount')),
+ predicateResult('terminal-ui-renders-preview-boundary-rows', SOURCE_ROOTS.terminalWorkbench, terminalWorkbench.includes('assetPackPreviewBoundaryRows') && terminalWorkbench.includes('Finding Fits preview, quote, and provenance') && terminalWorkbench.includes('assetPackSettlementInstructions')),
+ predicateResult('terminal-client-summarizes-boundary', SOURCE_ROOTS.terminalHarnessClient, terminalHarnessClient.includes('boundaryQuoteReceipt') && terminalHarnessClient.includes('boundarySelectedFitProvenance') && terminalHarnessClient.includes('boundaryDeliveryPosture')),
+ predicateResult('terminal-client-tests-boundary-summary', SOURCE_ROOTS.terminalHarnessClientTest, terminalHarnessClientTest.includes('assetPackPreviewBoundary') && terminalHarnessClientTest.includes('delivery withheld_until_settlement')),
+ predicateResult('spec-gate5-expanded', SOURCE_ROOTS.v42Spec, spec.includes('V42 Gate 5') && spec.includes('v42-readfitsfinding-preview-quote')),
+ predicateResult('delta-gate5-expanded', SOURCE_ROOTS.v42Delta, delta.includes('Gate 5') && delta.includes('source-safe AssetPack preview')),
+ predicateResult('notes-gate5-expanded', SOURCE_ROOTS.v42Notes, notes.includes('Gate 5 implementation notes') && notes.includes('selected-fit provenance')),
+ predicateResult('parity-gate5-implemented', SOURCE_ROOTS.v42Parity, parity.includes('Finding Fits preview and quote') && parity.includes('implemented')),
+ predicateResult('roadmap-advanced-to-gate5', SOURCE_ROOTS.roadmap, roadmap.includes('V42 Gate 5 closure anchor') && roadmap.includes('AssetPackPreviewBoundary')),
+ predicateResult('readmes-document-gate5', SOURCE_ROOTS.rootReadme, rootReadme.includes('V42 Gate 5') && terminalReadme.includes('Finding Fits preview') && assetPackReadme.includes('V42 Gate 5') && protocolReadme.includes('V42ReadFitsFindingPreviewQuote')),
+ predicateResult('workflows-run-gate5-check', SOURCE_ROOTS.gateWorkflow, gateWorkflow.includes('check-v42-gate5-readfitsfinding-preview-quote.mjs') && canonWorkflow.includes('check-v42-gate5-readfitsfinding-preview-quote.mjs')),
+ ];
+}
+
+export function buildV42ReadFitsFindingPreviewQuote(options = {}) {
+ const repoRoot = options.repoRoot || DEFAULT_REPO_ROOT;
+ const predicateResults = buildPredicateResults(repoRoot);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const rowRoots = V42_READFITSFINDING_PREVIEW_QUOTE_ROWS.map((item) => item.rowRoot);
+ const artifactRoot = `v42-readfitsfinding-preview-quote:${digest(JSON.stringify({
+ rowRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v42-readfitsfinding-preview-quote',
+ schemaId: V42_READFITSFINDING_PREVIEW_QUOTE_SCHEMA_ID,
+ version: V42_READFITSFINDING_PREVIEW_QUOTE_VERSION,
+ currentTarget: V42_READFITSFINDING_PREVIEW_QUOTE_CURRENT_TARGET,
+ sourceSafetyVerdict: V42_READFITSFINDING_PREVIEW_QUOTE_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ rows: V42_READFITSFINDING_PREVIEW_QUOTE_ROWS,
+ rowIds: [...V42_READFITSFINDING_PREVIEW_QUOTE_ROW_IDS],
+ predicateResults,
+ coverage: {
+ rowCount: V42_READFITSFINDING_PREVIEW_QUOTE_ROWS.length,
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ pipelineName: 'ReadFitsFindingSynthesis',
+ requiredPriorPipelineName: 'ReadNeedComprehensionSynthesis',
+ phaseCount: 7,
+ agentCount: 8,
+ ptrrStepCount: 32,
+ failsafeSequenceCount: 96,
+ thricifiedGenerationCount: 96,
+ searchChannelIds: [...SEARCH_CHANNEL_IDS],
+ selectedFitProvenanceRequired: true,
+ sourceSafePreviewRequired: true,
+ deterministicQuoteRequired: true,
+ noProtectedSourceBeforeSettlement: true,
+ settlementInstructionsRequired: true,
+ terminalPreviewQuoteReadbackCovered: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ credentialsSerialized: false,
+ legacySourceRoots: Object.values(SOURCE_ROOTS).some((sourcePath) => sourcePath.includes('_legacy/')),
+ },
+ sourceRoots: SOURCE_ROOTS,
+ };
+}
diff --git a/packages/protocol/src/canonical/v42-reading-shortest-path-state-machine.js b/packages/protocol/src/canonical/v42-reading-shortest-path-state-machine.js
new file mode 100644
index 00000000..6aa0513a
--- /dev/null
+++ b/packages/protocol/src/canonical/v42-reading-shortest-path-state-machine.js
@@ -0,0 +1,328 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V42_READING_SHORTEST_PATH_STATE_MACHINE_ARTIFACT_PATH =
+ '.bitcode/v42-reading-shortest-path-state-machine.json';
+export const V42_READING_SHORTEST_PATH_STATE_MACHINE_SCHEMA_ID =
+ 'bitcode.v42.readingShortestPathStateMachine.v1';
+export const V42_READING_SHORTEST_PATH_SCHEMA_ID =
+ V42_READING_SHORTEST_PATH_STATE_MACHINE_SCHEMA_ID;
+export const V42_READING_SHORTEST_PATH_STATE_MACHINE_VERSION = 'V42';
+export const V42_READING_SHORTEST_PATH_STATE_MACHINE_CURRENT_TARGET = 'V41';
+export const V42_READING_SHORTEST_PATH_STATE_MACHINE_SOURCE_SAFETY_VERDICT =
+ 'source-safe-reading-shortest-path-state-machine-metadata';
+
+export const V42_READING_SHORTEST_PATH_STEP_IDS = Object.freeze([
+ 'request-read',
+ 'review-synthesized-need',
+ 'request-fit',
+ 'review-synthesized-asset-pack',
+ 'buy-asset-pack-settle',
+]);
+
+export const V42_READING_SHORTEST_PATH_ROW_IDS = Object.freeze([
+ 'state:five-step-shortest-path',
+ 'route:transaction-stage-persistence',
+ 'transition:accepted-need-before-finding-fits',
+ 'retry:restart-and-failure-repair',
+ 'ui:low-detail-proof-on-expand',
+ 'stream:rich-reading-pipeline-telemetry',
+ 'activity:history-and-workbench-readback',
+ 'tests:route-state-contracts',
+ 'spec:v42-gate3-closure',
+]);
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'protected-source-payloads',
+ 'raw-protected-prompts',
+ 'raw-provider-responses',
+ 'unpaid-assetpack-source',
+ 'wallet-private-material',
+ 'settlement-private-payloads',
+ 'ledger-write-authority',
+ 'secret-values',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ terminalUxState: 'uapi/app/terminal/terminal-enterprise-reading-ux-state.ts',
+ terminalWorkbench: 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ terminalPageClient: 'uapi/app/terminal/TerminalPageClient.tsx',
+ terminalWorkbenchContract: 'uapi/app/terminal/terminal-deposit-read-workbench.ts',
+ terminalRouteQuery: 'uapi/app/terminal/terminal-transaction-query.ts',
+ terminalActivityHistory: 'uapi/app/terminal/terminal-activity-history.ts',
+ terminalHarnessClient: 'uapi/app/terminal/terminal-pipeline-harness-client.ts',
+ conversationHandoff: 'uapi/app/conversations/conversation-terminal-handoff.ts',
+ uxStateTest: 'uapi/tests/terminalEnterpriseReadingUxState.test.ts',
+ workbenchTest: 'uapi/tests/terminalDepositReadWorkbench.test.ts',
+ handoffTest: 'uapi/tests/conversationTerminalHandoff.test.tsx',
+ queryTest: 'uapi/tests/terminalTransactionQuery.test.ts',
+ streamHeaderTest: 'uapi/tests/pipelineExecutionLogHeader.test.tsx',
+ gateWorkflow: '.github/workflows/bitcode-gate-quality.yml',
+ v42Spec: 'BITCODE_SPEC_V42.md',
+ v42Delta: 'BITCODE_SPEC_V42_DELTA.md',
+ v42Notes: 'BITCODE_SPEC_V42_NOTES.md',
+ v42Parity: 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ roadmap: 'SPECIFICATIONS_ROADMAP.md',
+ rootReadme: 'README.md',
+ terminalReadme: 'uapi/app/terminal/README.md',
+ protocolReadme: 'packages/protocol/README.md',
+});
+
+function digest(value) {
+ return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24);
+}
+
+function rowRoot(id) {
+ return `v42-reading-shortest-path-state-machine-row:${digest(id)}`;
+}
+
+function readSource(repoRoot, sourcePath) {
+ const absolutePath = path.join(repoRoot, sourcePath);
+ return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : '';
+}
+
+function predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+function row(input) {
+ return {
+ ...input,
+ rowRoot: rowRoot(input.rowId),
+ sourceSafetyClass: 'source_safe_reading_shortest_path_state_machine_metadata',
+ sourceSafeMetadataOnly: true,
+ lowDetailDefault: true,
+ expandableSourceSafeDetail: true,
+ protectedSourceVisible: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ ledgerAuthorityClaimed: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ };
+}
+
+export const V42_READING_SHORTEST_PATH_ROWS = Object.freeze([
+ row({
+ rowId: 'state:five-step-shortest-path',
+ purpose:
+ 'Preserve exactly five enterprise Reading steps from Read Request through Need review, Finding Fits, AssetPack preview, and settlement delivery.',
+ sourceRoots: [SOURCE_ROOTS.terminalUxState, SOURCE_ROOTS.terminalWorkbench],
+ emittedTypes: ['TerminalEnterpriseReadingUxState', 'TerminalEnterpriseReadingStepView'],
+ requiredEvidence: V42_READING_SHORTEST_PATH_STEP_IDS,
+ }),
+ row({
+ rowId: 'route:transaction-stage-persistence',
+ purpose:
+ 'Bind Reading state to recoverable transaction ids and readingStage route state so refresh, restart, and route handoff preserve the active stage.',
+ sourceRoots: [
+ SOURCE_ROOTS.terminalUxState,
+ SOURCE_ROOTS.terminalRouteQuery,
+ SOURCE_ROOTS.terminalPageClient,
+ SOURCE_ROOTS.terminalWorkbench,
+ ],
+ emittedTypes: ['TerminalEnterpriseReadingRouteState', 'TerminalConversationHandoffContext.readingStage'],
+ requiredEvidence: ['transactionIdRequiredForRecovery', 'readingStageQueryParam', 'activeStageHydratedFromRoute'],
+ }),
+ row({
+ rowId: 'transition:accepted-need-before-finding-fits',
+ purpose:
+ 'Make accepted Need the hard transition before Finding Fits, preview, settlement, or delivery can proceed.',
+ sourceRoots: [SOURCE_ROOTS.terminalUxState, SOURCE_ROOTS.terminalWorkbench, SOURCE_ROOTS.conversationHandoff],
+ emittedTypes: ['acceptedNeedRequiredBeforeFindingFits', 'TerminalReadNeedState'],
+ requiredEvidence: ['accepted Need required', 'ReadNeedComprehensionSynthesis', 'ReadFitsFindingSynthesis'],
+ }),
+ row({
+ rowId: 'retry:restart-and-failure-repair',
+ purpose:
+ 'Represent retry, restart, and failure repair posture as source-safe state metadata without exposing protected source, prompts, provider responses, wallet material, or settlement payloads.',
+ sourceRoots: [SOURCE_ROOTS.terminalUxState, SOURCE_ROOTS.uxStateTest, SOURCE_ROOTS.terminalWorkbench],
+ emittedTypes: ['TerminalEnterpriseReadingFailureKind', 'TerminalEnterpriseReadingRouteState.failureRepairActions'],
+ requiredEvidence: ['retryPreservesNeedLineage', 'restartRestoresActiveStage', 'failureRepairActions'],
+ }),
+ row({
+ rowId: 'ui:low-detail-proof-on-expand',
+ purpose:
+ 'Keep the default Reading view guided and low-detail while details expand to source-safe proof roots, measurements, blockers, and visible field ids.',
+ sourceRoots: [SOURCE_ROOTS.terminalUxState, SOURCE_ROOTS.terminalWorkbench, SOURCE_ROOTS.terminalReadme],
+ emittedTypes: ['TerminalEnterpriseReadingUxState.disclosure'],
+ requiredEvidence: ['lowDetailDefault', 'expandableSourceSafeDetail', 'Source-safe detail'],
+ }),
+ row({
+ rowId: 'stream:rich-reading-pipeline-telemetry',
+ purpose:
+ 'Keep Reading pipeline progress inspectable through rich execution stream rows for phase, PTRR step, ThricifiedGeneration, tool, prompt-template id, output schema, and parsed-result posture.',
+ sourceRoots: [SOURCE_ROOTS.terminalHarnessClient, SOURCE_ROOTS.streamHeaderTest, SOURCE_ROOTS.terminalWorkbench],
+ emittedTypes: ['TerminalReadFitsFindingSynthesisHarnessEvent', 'ExecutionLogItem'],
+ requiredEvidence: ['pipelinePhaseId', 'ptrrStepId', 'thricifiedGenerationId', 'promptTemplateId', 'outputSchema'],
+ }),
+ row({
+ rowId: 'activity:history-and-workbench-readback',
+ purpose:
+ 'Project Reading state through activity history and workbench readback so transaction detail, proof roots, and compensation/settlement posture remain recoverable.',
+ sourceRoots: [SOURCE_ROOTS.terminalActivityHistory, SOURCE_ROOTS.terminalWorkbench, SOURCE_ROOTS.terminalWorkbenchContract],
+ emittedTypes: ['WorkspaceRun', 'TerminalDepositReadWorkbench'],
+ requiredEvidence: ['assetPackCompletion', 'TerminalDepositedSourceRevision', 'sourceRevision'],
+ }),
+ row({
+ rowId: 'tests:route-state-contracts',
+ purpose:
+ 'Prove the state machine through route-state tests, component state tests, Conversation handoff tests, workbench tests, and stream-header tests.',
+ sourceRoots: [
+ SOURCE_ROOTS.uxStateTest,
+ SOURCE_ROOTS.workbenchTest,
+ SOURCE_ROOTS.handoffTest,
+ SOURCE_ROOTS.queryTest,
+ SOURCE_ROOTS.streamHeaderTest,
+ SOURCE_ROOTS.gateWorkflow,
+ ],
+ emittedTypes: ['V42ReadingShortestPathStateMachineReport'],
+ requiredEvidence: ['terminal-enterprise-reading-ux-state', 'readingStage=request-fit', 'Browser proof Terminal cockpit'],
+ }),
+ row({
+ rowId: 'spec:v42-gate3-closure',
+ purpose:
+ 'Bind V42 Gate 3 to SPEC, DELTA, NOTES, PARITY, roadmap, README, workflow, generated artifact, and checker closure.',
+ sourceRoots: [
+ SOURCE_ROOTS.v42Spec,
+ SOURCE_ROOTS.v42Delta,
+ SOURCE_ROOTS.v42Notes,
+ SOURCE_ROOTS.v42Parity,
+ SOURCE_ROOTS.roadmap,
+ SOURCE_ROOTS.rootReadme,
+ SOURCE_ROOTS.protocolReadme,
+ ],
+ emittedTypes: ['V42ReadingShortestPathStateMachineReport'],
+ requiredEvidence: ['V42 Gate 3', 'reading shortest path state machine', 'check:v42-gate3'],
+ }),
+]);
+
+function buildPredicateResults(repoRoot) {
+ const uxState = readSource(repoRoot, SOURCE_ROOTS.terminalUxState);
+ const pageClient = readSource(repoRoot, SOURCE_ROOTS.terminalPageClient);
+ const workbench = readSource(repoRoot, SOURCE_ROOTS.terminalWorkbench);
+ const workbenchContract = readSource(repoRoot, SOURCE_ROOTS.terminalWorkbenchContract);
+ const query = readSource(repoRoot, SOURCE_ROOTS.terminalRouteQuery);
+ const activity = readSource(repoRoot, SOURCE_ROOTS.terminalActivityHistory);
+ const harness = readSource(repoRoot, SOURCE_ROOTS.terminalHarnessClient);
+ const handoff = readSource(repoRoot, SOURCE_ROOTS.conversationHandoff);
+ const uxStateTest = readSource(repoRoot, SOURCE_ROOTS.uxStateTest);
+ const workbenchTest = readSource(repoRoot, SOURCE_ROOTS.workbenchTest);
+ const handoffTest = readSource(repoRoot, SOURCE_ROOTS.handoffTest);
+ const queryTest = readSource(repoRoot, SOURCE_ROOTS.queryTest);
+ const streamHeaderTest = readSource(repoRoot, SOURCE_ROOTS.streamHeaderTest);
+ const gateWorkflow = readSource(repoRoot, SOURCE_ROOTS.gateWorkflow);
+ const spec = readSource(repoRoot, SOURCE_ROOTS.v42Spec);
+ const delta = readSource(repoRoot, SOURCE_ROOTS.v42Delta);
+ const notes = readSource(repoRoot, SOURCE_ROOTS.v42Notes);
+ const parity = readSource(repoRoot, SOURCE_ROOTS.v42Parity);
+ const roadmap = readSource(repoRoot, SOURCE_ROOTS.roadmap);
+ const rootReadme = readSource(repoRoot, SOURCE_ROOTS.rootReadme);
+ const terminalReadme = readSource(repoRoot, SOURCE_ROOTS.terminalReadme);
+ const protocolReadme = readSource(repoRoot, SOURCE_ROOTS.protocolReadme);
+
+ return [
+ predicateResult('ux-state-keeps-five-step-path', SOURCE_ROOTS.terminalUxState, V42_READING_SHORTEST_PATH_STEP_IDS.every((id) => uxState.includes(id)) && uxState.includes('stageCount: 5')),
+ predicateResult('ux-state-defines-route-state', SOURCE_ROOTS.terminalUxState, uxState.includes('TerminalEnterpriseReadingRouteState') && uxState.includes('transactionIdRequiredForRecovery') && uxState.includes("readingStageQueryParam: 'readingStage'")),
+ predicateResult('ux-state-defines-retry-failure-source-safety', SOURCE_ROOTS.terminalUxState, uxState.includes('TerminalEnterpriseReadingFailureKind') && uxState.includes('retryPreservesNeedLineage') && uxState.includes('failureRepairActions') && uxState.includes('failureStateSourceSafe')),
+ predicateResult('ux-state-forbids-protected-payloads', SOURCE_ROOTS.terminalUxState, uxState.includes('protected_source_payload') && uxState.includes('raw_protected_prompt') && uxState.includes('raw_provider_response') && uxState.includes('unpaid_assetpack_source') && uxState.includes('wallet_private_material') && uxState.includes('settlement_private_payload')),
+ predicateResult('terminal-page-passes-reading-stage', SOURCE_ROOTS.terminalPageClient, pageClient.includes('routeReadingStage={conversationHandoffContext.readingStage}')),
+ predicateResult('workbench-projects-route-state', SOURCE_ROOTS.terminalWorkbench, workbench.includes('transactionId: recordedAdmittedReadActivityId') && workbench.includes('routeReadingStage') && workbench.includes('data-reading-transaction-present') && workbench.includes('data-reading-failure-kind')),
+ predicateResult('workbench-keeps-low-detail-expandable-cards', SOURCE_ROOTS.terminalWorkbench, workbench.includes('terminal-enterprise-reading-step-${stage.id}') && workbench.includes('data-reading-step-state') && workbench.includes('Source-safe detail')),
+ predicateResult('workbench-contract-reexports-stage-ids', SOURCE_ROOTS.terminalWorkbenchContract, workbenchContract.includes('TERMINAL_ENTERPRISE_READING_STEPS') && workbenchContract.includes('TerminalEnterpriseReadingStepId')),
+ predicateResult('terminal-query-reads-reading-stage', SOURCE_ROOTS.terminalRouteQuery, query.includes('readingStage') && query.includes('TERMINAL_ENTERPRISE_READING_STAGE_VALUES') && query.includes('readTerminalTransactionId')),
+ predicateResult('activity-history-keeps-reading-readback', SOURCE_ROOTS.terminalActivityHistory, activity.includes('assetPackCompletion') && activity.includes('sourceRevision')),
+ predicateResult('harness-projects-rich-reading-telemetry', SOURCE_ROOTS.terminalHarnessClient, harness.includes('ReadFitsFindingSynthesis') && harness.includes('ptrrStepId') && harness.includes('thricifiedGenerationId') && harness.includes('promptTemplateId') && harness.includes('outputSchema')),
+ predicateResult('conversation-handoff-preserves-reading-stage', SOURCE_ROOTS.conversationHandoff, handoff.includes('inferConversationTerminalReadingStage') && handoff.includes('terminalEnterpriseReadingStage') && handoff.includes("params.set('readingStage'")),
+ predicateResult('ux-state-tests-cover-route-retry-failure', SOURCE_ROOTS.uxStateTest, uxStateTest.includes('hydrates later route stages') && uxStateTest.includes('repair-settlement-readback')),
+ predicateResult('workbench-tests-cover-five-stage-labels', SOURCE_ROOTS.workbenchTest, workbenchTest.includes('3. Request Finding Fits') && workbenchTest.includes('buy-asset-pack-settle')),
+ predicateResult('handoff-tests-cover-reading-stage-route', SOURCE_ROOTS.handoffTest, handoffTest.includes('readingStage=request-fit') && handoffTest.includes('terminalEnterpriseReadingStage')),
+ predicateResult('query-tests-cover-reading-stage-route', SOURCE_ROOTS.queryTest, queryTest.includes('reads source-safe enterprise Reading stage') && queryTest.includes('request-fit')),
+ predicateResult('stream-tests-cover-rich-header', SOURCE_ROOTS.streamHeaderTest, streamHeaderTest.includes('ReadFitsFindingSynthesis') && streamHeaderTest.includes('outputSchema') && streamHeaderTest.includes('prompt_template_id_only')),
+ predicateResult('workflow-wires-gate3-check', SOURCE_ROOTS.gateWorkflow, gateWorkflow.includes('check-v42-gate3-reading-shortest-path-state-machine.mjs')),
+ predicateResult('v42-spec-gate3-expanded', SOURCE_ROOTS.v42Spec, spec.includes('V42 Gate 3') && spec.includes('reading shortest path state machine')),
+ predicateResult('v42-delta-gate3-expanded', SOURCE_ROOTS.v42Delta, delta.includes('Gate 3') && delta.includes('route-owned Reading state')),
+ predicateResult('v42-notes-gate3-expanded', SOURCE_ROOTS.v42Notes, notes.includes('Gate 3') && notes.includes('transaction id')),
+ predicateResult('v42-parity-gate3-implemented', SOURCE_ROOTS.v42Parity, parity.includes('Reading state machine') && parity.includes('implemented')),
+ predicateResult(
+ 'roadmap-records-gate3-closure',
+ SOURCE_ROOTS.roadmap,
+ roadmap.includes('V42 Gate 3 closure anchor') &&
+ (roadmap.includes('Current working gate: V42 Gate') ||
+ roadmap.includes('Latest closed version: V42 Reliable MVP Experience') ||
+ roadmap.includes('Recent V42 canonical promotion anchor') ||
+ roadmap.includes('Current working gate: V43 Gate')),
+ ),
+ predicateResult('readmes-document-gate3', SOURCE_ROOTS.rootReadme, rootReadme.includes('V42 Gate 3') && terminalReadme.includes('TerminalEnterpriseReadingUxState') && protocolReadme.includes('V42 Reading shortest path')),
+ ];
+}
+
+export function buildV42ReadingShortestPathStateMachine(options = {}) {
+ const repoRoot = options.repoRoot || DEFAULT_REPO_ROOT;
+ const predicateResults = buildPredicateResults(repoRoot);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const rowRoots = V42_READING_SHORTEST_PATH_ROWS.map((item) => item.rowRoot);
+ const artifactRoot = `v42-reading-shortest-path-state-machine:${digest(JSON.stringify({
+ rowRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v42-reading-shortest-path-state-machine',
+ schemaId: V42_READING_SHORTEST_PATH_STATE_MACHINE_SCHEMA_ID,
+ version: V42_READING_SHORTEST_PATH_STATE_MACHINE_VERSION,
+ currentTarget: V42_READING_SHORTEST_PATH_STATE_MACHINE_CURRENT_TARGET,
+ sourceSafetyVerdict: V42_READING_SHORTEST_PATH_STATE_MACHINE_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ rows: V42_READING_SHORTEST_PATH_ROWS,
+ rowIds: [...V42_READING_SHORTEST_PATH_ROW_IDS],
+ stepIds: [...V42_READING_SHORTEST_PATH_STEP_IDS],
+ predicateResults,
+ coverage: {
+ rowCount: V42_READING_SHORTEST_PATH_ROWS.length,
+ stepCount: V42_READING_SHORTEST_PATH_STEP_IDS.length,
+ acceptedUserPath: [
+ 'request-read',
+ 'review-synthesized-need',
+ 'request-finding-fits',
+ 'review-source-safe-assetpack-preview',
+ 'buy-settle-and-deliver-assetpack',
+ ],
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ routePersistenceCovered: true,
+ transactionIdRecoveryCovered: true,
+ restartRetryFailureCovered: true,
+ acceptedNeedGateCovered: true,
+ streamLogIntegrationCovered: true,
+ componentRouteTestsCovered: true,
+ sourceSafeMetadataOnly: true,
+ lowDetailDefault: true,
+ expandableSourceSafeDetail: true,
+ protectedSourceVisible: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ ledgerAuthorityClaimed: false,
+ legacySourceRoots: Object.values(SOURCE_ROOTS).some((sourcePath) => sourcePath.includes('_legacy/')),
+ },
+ sourceRoots: SOURCE_ROOTS,
+ };
+}
diff --git a/packages/protocol/src/canonical/v42-readneed-review-resynthesis-product-closure.js b/packages/protocol/src/canonical/v42-readneed-review-resynthesis-product-closure.js
new file mode 100644
index 00000000..895001af
--- /dev/null
+++ b/packages/protocol/src/canonical/v42-readneed-review-resynthesis-product-closure.js
@@ -0,0 +1,325 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ARTIFACT_PATH =
+ '.bitcode/v42-readneed-review-resynthesis-product-closure.json';
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SCHEMA_ID =
+ 'bitcode.v42.readNeedReviewResynthesisProductClosure.v1';
+export const V42_READNEED_REVIEW_RESYNTHESIS_SCHEMA_ID =
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SCHEMA_ID;
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_VERSION = 'V42';
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_CURRENT_TARGET = 'V41';
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SOURCE_SAFETY_VERDICT =
+ 'source-safe-readneed-review-resynthesis-product-closure-metadata';
+
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROW_IDS = Object.freeze([
+ 'request:read-request-persistence',
+ 'pipeline:ptrr-failsafe-thricified-need-synthesis',
+ 'need:synthesized-need-storage',
+ 'feedback:review-resynthesis-lineage',
+ 'measurement:need-measurement-storage',
+ 'admission:accepted-need-gates-finding-fits',
+ 'rejection:rejected-need-posture',
+ 'telemetry:source-safe-runtime-receipts',
+ 'route:read-review-actions',
+ 'ui:terminal-need-runtime-readback',
+ 'proof:tests-artifact-workflow',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ readNeed: 'packages/pipelines/asset-pack/src/read-need.ts',
+ readNeedRuntime: 'packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts',
+ readingPipelineContract: 'packages/pipelines/asset-pack/src/reading-pipeline-contract.ts',
+ packageIndex: 'packages/pipelines/asset-pack/src/index.ts',
+ packageJson: 'packages/pipelines/asset-pack/package.json',
+ readNeedTest: 'packages/pipelines/asset-pack/src/__tests__/read-need.test.ts',
+ runtimeTest: 'packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts',
+ readingContractTest: 'packages/pipelines/asset-pack/src/__tests__/reading-pipeline-contract.test.ts',
+ readReviewRoute: 'uapi/app/api/read-review/route.ts',
+ readReviewRouteTest: 'uapi/tests/api/readReviewRoute.test.ts',
+ readReviewProtocolParityTest: 'uapi/tests/api/readReviewProtocolParity.test.ts',
+ terminalWorkbench: 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ terminalUxState: 'uapi/app/terminal/terminal-enterprise-reading-ux-state.ts',
+ gateWorkflow: '.github/workflows/bitcode-gate-quality.yml',
+ canonWorkflow: '.github/workflows/bitcode-canon-quality.yml',
+ v42Spec: 'BITCODE_SPEC_V42.md',
+ v42Delta: 'BITCODE_SPEC_V42_DELTA.md',
+ v42Notes: 'BITCODE_SPEC_V42_NOTES.md',
+ v42Parity: 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ roadmap: 'SPECIFICATIONS_ROADMAP.md',
+ rootReadme: 'README.md',
+ terminalReadme: 'uapi/app/terminal/README.md',
+ assetPackReadme: 'packages/pipelines/asset-pack/README.md',
+ protocolReadme: 'packages/protocol/README.md',
+});
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'protected-source-payloads',
+ 'raw-protected-prompts',
+ 'raw-provider-responses',
+ 'unpaid-assetpack-source',
+ 'wallet-private-material',
+ 'settlement-private-payloads',
+ 'secret-values',
+]);
+
+function digest(value) {
+ return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24);
+}
+
+function rowRoot(id) {
+ return `v42-readneed-review-resynthesis-product-closure-row:${digest(id)}`;
+}
+
+function readSource(repoRoot, sourcePath) {
+ const absolutePath = path.join(repoRoot, sourcePath);
+ return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : '';
+}
+
+function predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+function row(input) {
+ return {
+ ...input,
+ rowRoot: rowRoot(input.rowId),
+ sourceSafetyClass: 'source_safe_readneed_review_resynthesis_product_closure_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ credentialsSerialized: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ };
+}
+
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROWS = Object.freeze([
+ row({
+ rowId: 'request:read-request-persistence',
+ purpose:
+ 'Persist source-safe Read Request data with repository, branch, commit, target artifact kinds, closure criteria, failure modes, feedback, and previous Need lineage.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.readNeedRuntime, SOURCE_ROOTS.readReviewRoute],
+ emittedTypes: ['ReadNeedRequest', 'ReadNeedReviewStorageRecord'],
+ requiredEvidence: ['bitcode.read.request', 'read_request', 'previousNeedId'],
+ }),
+ row({
+ rowId: 'pipeline:ptrr-failsafe-thricified-need-synthesis',
+ purpose:
+ 'Keep ReadNeedComprehensionSynthesis product-owned by PTRR agents whose steps carry FailsafeGenerationSequence over ThricifiedGeneration contracts and typed parser output.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.readingPipelineContract, SOURCE_ROOTS.readNeedTest],
+ emittedTypes: ['ReadNeedComprehensionSynthesisInferenceReceipt', 'ReadingPipelineContract'],
+ requiredEvidence: ['ptrrStepIds', 'failsafeSequenceIds', 'thricifiedGenerationIds', 'ReadNeedComprehensionSynthesis.prompt.need-synthesis'],
+ }),
+ row({
+ rowId: 'need:synthesized-need-storage',
+ purpose:
+ 'Persist reviewable synthesized Need output before Finding Fits, including requirements, target artifacts, source constraints, proof expectations, and review state.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.readNeedRuntime, SOURCE_ROOTS.runtimeTest],
+ emittedTypes: ['ReadNeed', 'synthesized_need'],
+ requiredEvidence: ['bitcode.read.need', 'needs_acceptance', 'synthesized_need'],
+ }),
+ row({
+ rowId: 'feedback:review-resynthesis-lineage',
+ purpose:
+ 'Preserve user feedback and resynthesis attempts so every new Need stays linked to the prior Need and reviewed feedback.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.readNeedRuntime, SOURCE_ROOTS.readReviewRouteTest, SOURCE_ROOTS.terminalWorkbench],
+ emittedTypes: ['resynthesis_attempt', 'feedbackHistory'],
+ requiredEvidence: ['previousNeedId', 'resynthesize_read_need', 'resynthesis_attempt'],
+ }),
+ row({
+ rowId: 'measurement:need-measurement-storage',
+ purpose:
+ 'Persist Need measurement roots and pricing measurement inputs that later drive deterministic preview quotes without exposing source.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.readNeedRuntime, SOURCE_ROOTS.readNeedTest],
+ emittedTypes: ['ReadNeedMeasurementDimension', 'need_measurement'],
+ requiredEvidence: ['measurementRoot', 'pricingMeasurementInputs', 'shareToFeeFormula'],
+ }),
+ row({
+ rowId: 'admission:accepted-need-gates-finding-fits',
+ purpose:
+ 'Persist accepted-Need admission as the only source-safe handoff into ReadFitsFindingSynthesis and block Finding Fits without acceptance.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.readNeedRuntime, SOURCE_ROOTS.readReviewRouteTest, SOURCE_ROOTS.terminalUxState],
+ emittedTypes: ['ReadFitsFindingAdmission', 'accepted_need_admission'],
+ requiredEvidence: ['accept_read_need', 'accepted_need_admission', 'accepted_read_need_missing'],
+ }),
+ row({
+ rowId: 'rejection:rejected-need-posture',
+ purpose:
+ 'Persist rejected-Need posture with rejection root, feedback, blocked Finding Fits stage, and repair/resynthesis next action.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.readNeedRuntime, SOURCE_ROOTS.readReviewRouteTest, SOURCE_ROOTS.terminalWorkbench],
+ emittedTypes: ['RejectedReadNeed', 'rejected_need_posture'],
+ requiredEvidence: ['rejectReadNeed', 'reject_read_need', 'read_need_rejected'],
+ }),
+ row({
+ rowId: 'telemetry:source-safe-runtime-receipts',
+ purpose:
+ 'Emit source-safe telemetry receipts containing phase, PTRR step, Failsafe, ThricifiedGeneration, prompt-template, output-schema, and proof-root identities.',
+ sourceRoots: [SOURCE_ROOTS.readNeed, SOURCE_ROOTS.readNeedRuntime, SOURCE_ROOTS.readingPipelineContract, SOURCE_ROOTS.readReviewRoute],
+ emittedTypes: ['ReadNeedReviewTelemetryReceipt', 'ReadNeedComprehensionSynthesisInferenceReceipt'],
+ requiredEvidence: ['ptrrStepIds', 'failsafeSequenceIds', 'thricifiedGenerationIds', 'promptTemplateIds'],
+ }),
+ row({
+ rowId: 'route:read-review-actions',
+ purpose:
+ 'Expose synthesize, resynthesize, accept, and reject actions through the Read review route with storage projection, runtime summary, source-safe telemetry, and Finding Fits admission readback.',
+ sourceRoots: [SOURCE_ROOTS.readReviewRoute, SOURCE_ROOTS.readReviewRouteTest],
+ emittedTypes: ['readNeedReviewRuntime', 'storageProjection', 'runtimeSummary'],
+ requiredEvidence: ['synthesize_read_need', 'resynthesize_read_need', 'accept_read_need', 'reject_read_need'],
+ }),
+ row({
+ rowId: 'ui:terminal-need-runtime-readback',
+ purpose:
+ 'Expose the reviewed Need, feedback loop, rejection path, storage projection, runtime roots, telemetry return type, and Finding Fits blocker/admission state in Terminal without protected source.',
+ sourceRoots: [SOURCE_ROOTS.terminalWorkbench, SOURCE_ROOTS.terminalReadme],
+ emittedTypes: ['TerminalReadNeedReviewRuntimeState', 'Need runtime, storage, and telemetry'],
+ requiredEvidence: ['Reject Read-Need', 'readNeedStorageProjection', 'readNeedTelemetry', 'Need runtime, storage, and telemetry'],
+ }),
+ row({
+ rowId: 'proof:tests-artifact-workflow',
+ purpose:
+ 'Bind V42 Gate 4 closure to package tests, route tests, protocol artifact tests, docs, scripts, and gate/canon workflow checks.',
+ sourceRoots: [
+ SOURCE_ROOTS.runtimeTest,
+ SOURCE_ROOTS.readReviewRouteTest,
+ SOURCE_ROOTS.gateWorkflow,
+ SOURCE_ROOTS.canonWorkflow,
+ SOURCE_ROOTS.v42Spec,
+ SOURCE_ROOTS.v42Parity,
+ SOURCE_ROOTS.roadmap,
+ ],
+ emittedTypes: ['V42ReadNeedReviewResynthesisProductClosure'],
+ requiredEvidence: ['check-v42-gate4-readneed-review-resynthesis-product-closure.mjs', 'v42-readneed-review-resynthesis-product-closure'],
+ }),
+]);
+
+function buildPredicateResults(repoRoot) {
+ const readNeed = readSource(repoRoot, SOURCE_ROOTS.readNeed);
+ const runtime = readSource(repoRoot, SOURCE_ROOTS.readNeedRuntime);
+ const contract = readSource(repoRoot, SOURCE_ROOTS.readingPipelineContract);
+ const packageIndex = readSource(repoRoot, SOURCE_ROOTS.packageIndex);
+ const packageJson = readSource(repoRoot, SOURCE_ROOTS.packageJson);
+ const readNeedTest = readSource(repoRoot, SOURCE_ROOTS.readNeedTest);
+ const runtimeTest = readSource(repoRoot, SOURCE_ROOTS.runtimeTest);
+ const contractTest = readSource(repoRoot, SOURCE_ROOTS.readingContractTest);
+ const route = readSource(repoRoot, SOURCE_ROOTS.readReviewRoute);
+ const routeTest = readSource(repoRoot, SOURCE_ROOTS.readReviewRouteTest);
+ const protocolParityTest = readSource(repoRoot, SOURCE_ROOTS.readReviewProtocolParityTest);
+ const terminalWorkbench = readSource(repoRoot, SOURCE_ROOTS.terminalWorkbench);
+ const terminalUxState = readSource(repoRoot, SOURCE_ROOTS.terminalUxState);
+ const gateWorkflow = readSource(repoRoot, SOURCE_ROOTS.gateWorkflow);
+ const canonWorkflow = readSource(repoRoot, SOURCE_ROOTS.canonWorkflow);
+ const spec = readSource(repoRoot, SOURCE_ROOTS.v42Spec);
+ const delta = readSource(repoRoot, SOURCE_ROOTS.v42Delta);
+ const notes = readSource(repoRoot, SOURCE_ROOTS.v42Notes);
+ const parity = readSource(repoRoot, SOURCE_ROOTS.v42Parity);
+ const roadmap = readSource(repoRoot, SOURCE_ROOTS.roadmap);
+ const rootReadme = readSource(repoRoot, SOURCE_ROOTS.rootReadme);
+ const terminalReadme = readSource(repoRoot, SOURCE_ROOTS.terminalReadme);
+ const assetPackReadme = readSource(repoRoot, SOURCE_ROOTS.assetPackReadme);
+ const protocolReadme = readSource(repoRoot, SOURCE_ROOTS.protocolReadme);
+
+ return [
+ predicateResult('read-need-defines-review-states', SOURCE_ROOTS.readNeed, readNeed.includes("'needs_acceptance'") && readNeed.includes("'accepted'") && readNeed.includes("'rejected'")),
+ predicateResult('read-need-accept-and-reject-actions', SOURCE_ROOTS.readNeed, readNeed.includes('acceptReadNeed') && readNeed.includes('rejectReadNeed') && readNeed.includes('read_need_rejected')),
+ predicateResult('inference-receipt-covers-ptrr-failsafe-thricified', SOURCE_ROOTS.readNeed, readNeed.includes('ReadNeedComprehensionSynthesisInferenceReceipt') && readNeed.includes('failsafeSequenceIds') && readNeed.includes('thricifiedGenerationIds') && readNeed.includes('promptTemplateIds')),
+ predicateResult('contract-has-four-phases-and-sixteen-steps', SOURCE_ROOTS.readingPipelineContract, contract.includes('ReadNeedComprehensionSynthesis.request') && contract.includes('ReadNeedComprehensionSynthesis.review') && contract.includes('ptrrStepCount') && contract.includes('thricifiedGenerationCount')),
+ predicateResult('runtime-defines-storage-records', SOURCE_ROOTS.readNeedRuntime, runtime.includes('ReadNeedReviewStorageRecord') && runtime.includes('read_request') && runtime.includes('synthesized_need') && runtime.includes('need_measurement')),
+ predicateResult('runtime-defines-resynthesis-admission-rejection', SOURCE_ROOTS.readNeedRuntime, runtime.includes('resynthesis_attempt') && runtime.includes('accepted_need_admission') && runtime.includes('rejected_need_posture')),
+ predicateResult('runtime-source-safety', SOURCE_ROOTS.readNeedRuntime, runtime.includes('source_safe_read_need_review_resynthesis_metadata') && runtime.includes('protectedSourceVisible: false') && runtime.includes('rawProviderResponseVisible: false') && runtime.includes('unpaidAssetPackSourceVisible: false')),
+ predicateResult('runtime-persists-to-execution-store', SOURCE_ROOTS.readNeedRuntime, runtime.includes('persistReadNeedReviewResynthesisRuntime') && runtime.includes("execution?.store?.('read-need-review'")),
+ predicateResult('package-exports-runtime', SOURCE_ROOTS.packageIndex, packageIndex.includes("export * from './read-need-review-resynthesis'") && packageJson.includes('./read-need-review-resynthesis')),
+ predicateResult('package-tests-cover-runtime', SOURCE_ROOTS.runtimeTest, runtimeTest.includes('ReadNeed review, resynthesis, and admission runtime') && runtimeTest.includes('rejected_need_posture')),
+ predicateResult('read-need-tests-cover-real-inference-receipts', SOURCE_ROOTS.readNeedTest, readNeedTest.includes('real-inference ReadNeedComprehension') && readNeedTest.includes('thricified-generation') && readNeedTest.includes('accepted_read_need_missing')),
+ predicateResult('contract-tests-cover-review-output', SOURCE_ROOTS.readingContractTest, contractTest.includes('ReadNeedComprehensionSynthesis') && contractTest.includes('ptrrStepCount: 16')),
+ predicateResult('route-exposes-all-review-actions', SOURCE_ROOTS.readReviewRoute, route.includes('synthesize_read_need') && route.includes('resynthesize_read_need') && route.includes('accept_read_need') && route.includes('reject_read_need')),
+ predicateResult('route-persists-all-runtime-actions', SOURCE_ROOTS.readReviewRoute, route.match(/persistReadNeedReviewResynthesisRuntime/g)?.length >= 3),
+ predicateResult('route-returns-runtime-projection', SOURCE_ROOTS.readReviewRoute, route.includes('readNeedReviewRuntime') && route.includes('storageProjection') && route.includes('runtimeSummary')),
+ predicateResult('route-tests-cover-runtime-and-rejection', SOURCE_ROOTS.readReviewRouteTest, routeTest.includes('readNeedReviewRuntime') && routeTest.includes('reject_read_need') && routeTest.includes('rejected_need_posture')),
+ predicateResult('protocol-parity-keeps-finding-fits-blocked', SOURCE_ROOTS.readReviewProtocolParityTest, protocolParityTest.includes('Finding Fits cannot proceed') && protocolParityTest.includes('fitSearchAdmission')),
+ predicateResult('terminal-ui-exposes-runtime-readback', SOURCE_ROOTS.terminalWorkbench, terminalWorkbench.includes('TerminalReadNeedReviewRuntimeState') && terminalWorkbench.includes('readNeedStorageProjection') && terminalWorkbench.includes('readNeedTelemetry') && terminalWorkbench.includes('Need runtime, storage, and telemetry')),
+ predicateResult('terminal-ui-exposes-rejection', SOURCE_ROOTS.terminalWorkbench, terminalWorkbench.includes('handleRejectReadNeed') && terminalWorkbench.includes('Reject Read-Need') && terminalWorkbench.includes('reject_read_need')),
+ predicateResult('terminal-ux-keeps-accepted-need-gate', SOURCE_ROOTS.terminalUxState, terminalUxState.includes('acceptedNeedRequiredBeforeFindingFits') && terminalUxState.includes('sourceSafePreviewBlocked')),
+ predicateResult('spec-gate4-expanded', SOURCE_ROOTS.v42Spec, spec.includes('V42 Gate 4') && spec.includes('v42-readneed-review-resynthesis-product-closure')),
+ predicateResult('delta-gate4-expanded', SOURCE_ROOTS.v42Delta, delta.includes('Gate 4') && delta.includes('readNeedReviewRuntime')),
+ predicateResult('notes-gate4-expanded', SOURCE_ROOTS.v42Notes, notes.includes('Gate 4 implementation notes') && notes.includes('rejected Need posture')),
+ predicateResult('parity-gate4-implemented', SOURCE_ROOTS.v42Parity, parity.includes('ReadNeed product closure') && parity.includes('implemented')),
+ predicateResult('roadmap-advanced-to-gate4', SOURCE_ROOTS.roadmap, roadmap.includes('V42 Gate 4 closure anchor') && roadmap.includes('ReadNeedReviewResynthesisRuntime')),
+ predicateResult('readmes-document-gate4', SOURCE_ROOTS.rootReadme, rootReadme.includes('V42 Gate 4') && terminalReadme.includes('ReadNeedReviewResynthesisRuntime') && assetPackReadme.includes('ReadNeed review') && protocolReadme.includes('V42ReadNeedReviewResynthesisProductClosure')),
+ predicateResult('workflows-run-gate4-check', SOURCE_ROOTS.gateWorkflow, gateWorkflow.includes('check-v42-gate4-readneed-review-resynthesis-product-closure.mjs') && canonWorkflow.includes('check-v42-gate4-readneed-review-resynthesis-product-closure.mjs')),
+ ];
+}
+
+export function buildV42ReadNeedReviewResynthesisProductClosure(options = {}) {
+ const repoRoot = options.repoRoot || DEFAULT_REPO_ROOT;
+ const predicateResults = buildPredicateResults(repoRoot);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const rowRoots = V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROWS.map((item) => item.rowRoot);
+ const artifactRoot = `v42-readneed-review-resynthesis-product-closure:${digest(JSON.stringify({
+ rowRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v42-readneed-review-resynthesis-product-closure',
+ schemaId: V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SCHEMA_ID,
+ version: V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_VERSION,
+ currentTarget: V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_CURRENT_TARGET,
+ sourceSafetyVerdict: V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ rows: V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROWS,
+ rowIds: [...V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROW_IDS],
+ predicateResults,
+ coverage: {
+ rowCount: V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROWS.length,
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ pipelineName: 'ReadNeedComprehensionSynthesis',
+ nextPipelineName: 'ReadFitsFindingSynthesis',
+ actions: ['synthesize_read_need', 'resynthesize_read_need', 'accept_read_need', 'reject_read_need'],
+ persistedRecordKinds: [
+ 'read_request',
+ 'synthesized_need',
+ 'feedback',
+ 'resynthesis_attempt',
+ 'need_measurement',
+ 'accepted_need_admission',
+ 'rejected_need_posture',
+ 'telemetry_receipt',
+ ],
+ phaseCount: 4,
+ ptrrStepCount: 16,
+ failsafeSequenceCount: 48,
+ thricifiedGenerationCount: 48,
+ acceptedNeedRequiredForFindingFits: true,
+ rejectedNeedBlocksFindingFits: true,
+ terminalRuntimeReadbackCovered: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ credentialsSerialized: false,
+ legacySourceRoots: Object.values(SOURCE_ROOTS).some((sourcePath) => sourcePath.includes('_legacy/')),
+ },
+ sourceRoots: SOURCE_ROOTS,
+ };
+}
diff --git a/packages/protocol/src/canonical/v42-settlement-rights-delivery.js b/packages/protocol/src/canonical/v42-settlement-rights-delivery.js
new file mode 100644
index 00000000..9e51c4c9
--- /dev/null
+++ b/packages/protocol/src/canonical/v42-settlement-rights-delivery.js
@@ -0,0 +1,301 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH =
+ '.bitcode/v42-settlement-rights-delivery.json';
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_SCHEMA_ID =
+ 'bitcode.v42.settlementRightsDelivery.v1';
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_VERSION = 'V42';
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_CURRENT_TARGET = 'V41';
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_SOURCE_SAFETY_VERDICT =
+ 'source-safe-v42-settlement-rights-delivery-metadata';
+
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_ROW_IDS = Object.freeze([
+ 'purchase:quote-to-payment-observation',
+ 'finality:btc-testnet-confirmation-gate',
+ 'rights:btd-read-right-transfer',
+ 'compensation:source-to-shares-conservation',
+ 'delivery:source-bearing-pull-request-unlock',
+ 'sync:ledger-database-object-storage-reconciliation',
+ 'repair:fail-closed-settlement-posture',
+ 'route:harness-settlement-summary',
+ 'ui:terminal-settlement-readback',
+ 'host:live-harness-boundary-materialization',
+ 'proof:tests-artifact-workflow',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ boundary: 'packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts',
+ boundaryTest: 'packages/pipelines/asset-pack/src/__tests__/asset-pack-settlement-rights-delivery.test.ts',
+ previewBoundary: 'packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts',
+ postprocess: 'packages/pipelines/asset-pack/src/postprocess.ts',
+ packageIndex: 'packages/pipelines/asset-pack/src/index.ts',
+ pipelineHostHarness: 'packages/pipeline-hosts/src/asset-pack-harness.ts',
+ pipelineHostHarnessTest: 'packages/pipeline-hosts/src/__tests__/asset-pack-harness.test.ts',
+ harnessRunner: 'uapi/app/api/pipeline-harness/asset-pack/runner.ts',
+ harnessRouteTest: 'uapi/tests/api/pipelineHarnessRoute.test.ts',
+ terminalWorkbench: 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ terminalHarnessClient: 'uapi/app/terminal/terminal-pipeline-harness-client.ts',
+ terminalHarnessClientTest: 'uapi/tests/terminalPipelineHarnessClient.test.ts',
+ btdReceipts: 'packages/btd/src/receipts.ts',
+ btdSourceToShares: 'packages/btd/src/source-to-shares.ts',
+ btdSettlement: 'packages/btd/src/settlement.ts',
+ btdReconciliation: 'packages/btd/src/reconciliation.ts',
+ protocolReadme: 'packages/protocol/README.md',
+ assetPackReadme: 'packages/pipelines/asset-pack/README.md',
+ terminalReadme: 'uapi/app/terminal/README.md',
+ rootReadme: 'README.md',
+ v42Spec: 'BITCODE_SPEC_V42.md',
+ v42Delta: 'BITCODE_SPEC_V42_DELTA.md',
+ v42Notes: 'BITCODE_SPEC_V42_NOTES.md',
+ v42Parity: 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ roadmap: 'SPECIFICATIONS_ROADMAP.md',
+ packageJson: 'package.json',
+ protocolIndex: 'packages/protocol/src/index.js',
+ protocolTypes: 'packages/protocol/src/index.d.ts',
+ gateWorkflow: '.github/workflows/bitcode-gate-quality.yml',
+ canonWorkflow: '.github/workflows/bitcode-canon-quality.yml',
+});
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'protected-source-payloads',
+ 'raw-protected-prompts',
+ 'raw-provider-responses',
+ 'unpaid-assetpack-source',
+ 'wallet-private-material',
+ 'settlement-private-payloads',
+ 'secret-values',
+]);
+
+function digest(value) {
+ return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24);
+}
+
+function rowRoot(id) {
+ return `v42-settlement-rights-delivery-row:${digest(id)}`;
+}
+
+function readSource(repoRoot, sourcePath) {
+ const absolutePath = path.join(repoRoot, sourcePath);
+ return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : '';
+}
+
+function predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+function row(input) {
+ return {
+ ...input,
+ rowRoot: rowRoot(input.rowId),
+ sourceSafetyClass: 'source_safe_v42_settlement_rights_delivery_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ credentialsSerialized: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ };
+}
+
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_ROWS = Object.freeze([
+ row({
+ rowId: 'purchase:quote-to-payment-observation',
+ purpose:
+ 'Convert the Gate 5 deterministic quote into a reader BTC payment observation without server custody or private wallet material.',
+ sourceRoots: [SOURCE_ROOTS.boundary, SOURCE_ROOTS.previewBoundary, SOURCE_ROOTS.harnessRunner],
+ emittedTypes: ['AssetPackSettlementPaymentObservation', 'AssetPackPreviewQuoteReceipt'],
+ requiredEvidence: ['expectedSats', 'observedDebitSats', 'observedCreditSats', 'serverCustody: false'],
+ }),
+ row({
+ rowId: 'finality:btc-testnet-confirmation-gate',
+ purpose:
+ 'Require confirmed BTC/testnet finality before BTD rights transfer, source unlock, or source-bearing repository delivery.',
+ sourceRoots: [SOURCE_ROOTS.boundary, SOURCE_ROOTS.boundaryTest, SOURCE_ROOTS.btdReceipts],
+ emittedTypes: ['AssetPackSettlementFinalityReceipt', 'BtdRightsTransferReceipt'],
+ requiredEvidence: ['finalityState', 'confirmed', 'Rights transfer receipt requires confirmed BTC fee finality'],
+ }),
+ row({
+ rowId: 'rights:btd-read-right-transfer',
+ purpose:
+ 'Transfer the BTD read right to the paying reader only after the quote, payment, finality, and conservation checks agree.',
+ sourceRoots: [SOURCE_ROOTS.boundary, SOURCE_ROOTS.btdReceipts, SOURCE_ROOTS.boundaryTest],
+ emittedTypes: ['BtdRightsTransferReceipt', 'BtdReadReceipt'],
+ requiredEvidence: ['buildBtdRightsTransferReceipt', 'buildBtdReadReceipt', 'paid_unlocked', 'licensed_read'],
+ }),
+ row({
+ rowId: 'compensation:source-to-shares-conservation',
+ purpose:
+ 'Allocate BTC sats to selected fit deposits with deterministic source-to-shares conservation and proof roots.',
+ sourceRoots: [SOURCE_ROOTS.boundary, SOURCE_ROOTS.btdSourceToShares, SOURCE_ROOTS.boundaryTest],
+ emittedTypes: ['SourceToSharesProof', 'settlementConservation'],
+ requiredEvidence: ['buildSourceToSharesProof', 'settlementAllocations', 'balanced'],
+ }),
+ row({
+ rowId: 'delivery:source-bearing-pull-request-unlock',
+ purpose:
+ 'Unlock the source-bearing pull request only after payment finality, BTD rights, compensation, and reconciliation readbacks pass.',
+ sourceRoots: [SOURCE_ROOTS.boundary, SOURCE_ROOTS.btdSettlement, SOURCE_ROOTS.terminalWorkbench],
+ emittedTypes: ['AssetPackDeliveryUnlockReceipt', 'AssetPackSettlementUnlock'],
+ requiredEvidence: ['source_bearing_pull_request_ready', 'pull_request_after_settlement', 'sourceBearingDeliveryVisibleToReader'],
+ }),
+ row({
+ rowId: 'sync:ledger-database-object-storage-reconciliation',
+ purpose:
+ 'Synchronize ledger facts, database projections, object storage roots, and staging-testnet readback before delivery is visible.',
+ sourceRoots: [SOURCE_ROOTS.boundary, SOURCE_ROOTS.btdReconciliation, SOURCE_ROOTS.harnessRunner],
+ emittedTypes: ['LedgerDatabaseReconciliationReport'],
+ requiredEvidence: ['reconcileLedgerDatabaseProjection', 'buildSupabaseStagingTestnetProjectionReadback', 'tkpyosihuouusyaxtbau'],
+ }),
+ row({
+ rowId: 'repair:fail-closed-settlement-posture',
+ purpose:
+ 'Represent underpayment, missing finality, projection drift, and missing delivery as repairable blockers without leaking source.',
+ sourceRoots: [SOURCE_ROOTS.boundary, SOURCE_ROOTS.boundaryTest],
+ emittedTypes: ['AssetPackSettlementRightsDeliveryRepairPosture'],
+ requiredEvidence: ['blocked_until_payment_finality', 'blocked_until_compensation_conservation', 'blocked_until_projection_repair'],
+ }),
+ row({
+ rowId: 'route:harness-settlement-summary',
+ purpose:
+ 'Summarize payment, finality, rights, source-to-shares, delivery, reconciliation, replay, and storage roots through the harness route.',
+ sourceRoots: [SOURCE_ROOTS.harnessRunner, SOURCE_ROOTS.harnessRouteTest],
+ emittedTypes: ['assetPackSettlementRightsDeliveryBoundary', 'assetPackDeliveryUnlock'],
+ requiredEvidence: ['summarizeAssetPackSettlementRightsDeliveryBoundary', 'assetPackLedgerDatabaseStorageReconciliation'],
+ }),
+ row({
+ rowId: 'ui:terminal-settlement-readback',
+ purpose:
+ 'Render settlement rights, compensation, delivery, replay, and reconciliation readback in Terminal expandable metadata.',
+ sourceRoots: [SOURCE_ROOTS.terminalWorkbench, SOURCE_ROOTS.terminalHarnessClient, SOURCE_ROOTS.terminalHarnessClientTest],
+ emittedTypes: ['assetPackSettlementBoundaryRows', 'TerminalReadFitsFindingSynthesisHarnessStreamSnapshot'],
+ requiredEvidence: ['Settlement rights, compensation, and delivery', 'settlement-boundary', 'delivery-unlock'],
+ }),
+ row({
+ rowId: 'host:live-harness-boundary-materialization',
+ purpose:
+ 'Materialize AssetPackPreviewBoundary and AssetPackSettlementRightsDeliveryBoundary inside the live sandbox harness output.',
+ sourceRoots: [SOURCE_ROOTS.pipelineHostHarness, SOURCE_ROOTS.pipelineHostHarnessTest],
+ emittedTypes: ['assetPackPreviewBoundary', 'assetPackSettlementRightsDeliveryBoundary'],
+ requiredEvidence: ['buildAssetPackSettlementRightsDeliveryBoundary', 'persistAssetPackSettlementRightsDeliveryBoundary'],
+ }),
+ row({
+ rowId: 'proof:tests-artifact-workflow',
+ purpose:
+ 'Bind V42 Gate 6 closure to generated artifact, protocol test, package tests, harness route tests, docs, and workflow checks.',
+ sourceRoots: [SOURCE_ROOTS.gateWorkflow, SOURCE_ROOTS.canonWorkflow, SOURCE_ROOTS.packageJson],
+ emittedTypes: ['V42SettlementRightsDelivery'],
+ requiredEvidence: ['check-v42-gate6-settlement-rights-delivery.mjs', 'v42-settlement-rights-delivery'],
+ }),
+]);
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+
+ return [
+ predicateResult('boundary-defines-core-types', SOURCE_ROOTS.boundary, sources.boundary.includes('AssetPackSettlementRightsDeliveryBoundary') && sources.boundary.includes('AssetPackSettlementPaymentObservation') && sources.boundary.includes('AssetPackDeliveryUnlockReceipt')),
+ predicateResult('boundary-composes-btd-primitives', SOURCE_ROOTS.boundary, sources.boundary.includes('buildBtdRightsTransferReceipt') && sources.boundary.includes('buildBtdReadReceipt') && sources.boundary.includes('buildAssetPackSettlementUnlock')),
+ predicateResult('boundary-builds-source-to-shares', SOURCE_ROOTS.boundary, sources.boundary.includes('buildSourceToSharesProof') && sources.btdSourceToShares.includes('settlementConservation')),
+ predicateResult('boundary-builds-reconciliation', SOURCE_ROOTS.boundary, sources.boundary.includes('reconcileLedgerDatabaseProjection') && sources.btdReconciliation.includes('objectStorageArtifacts')),
+ predicateResult('boundary-source-safety', SOURCE_ROOTS.boundary, sources.boundary.includes('source_safe_settlement_rights_delivery_boundary') && sources.boundary.includes('walletPrivateMaterialVisible: false')),
+ predicateResult('tests-cover-confirmed-delivery', SOURCE_ROOTS.boundaryTest, sources.boundaryTest.includes('unlocks BTD rights') && sources.boundaryTest.includes('settlement_delivered')),
+ predicateResult('tests-cover-underpayment', SOURCE_ROOTS.boundaryTest, sources.boundaryTest.includes('fails closed when BTC payment is underpaid') && sources.boundaryTest.includes('blocked_until_compensation_conservation')),
+ predicateResult('tests-cover-finality', SOURCE_ROOTS.boundaryTest, sources.boundaryTest.includes('fails closed until BTC finality is confirmed') && sources.boundaryTest.includes('blocked_until_payment_finality')),
+ predicateResult('tests-cover-reconciliation-drift', SOURCE_ROOTS.boundaryTest, sources.boundaryTest.includes('ledger, database, or object storage projections drift') && sources.boundaryTest.includes('blocked_until_projection_repair')),
+ predicateResult('host-materializes-boundary', SOURCE_ROOTS.pipelineHostHarness, sources.pipelineHostHarness.includes('buildAssetPackSettlementRightsDeliveryBoundary') && sources.pipelineHostHarness.includes('assetPackSettlementRightsDeliveryBoundary')),
+ predicateResult('host-test-covers-boundary', SOURCE_ROOTS.pipelineHostHarnessTest, sources.pipelineHostHarnessTest.includes('buildAssetPackSettlementRightsDeliveryBoundary') && sources.pipelineHostHarnessTest.includes('assetPackSettlementRightsDeliveryBoundary')),
+ predicateResult('route-summarizes-boundary', SOURCE_ROOTS.harnessRunner, sources.harnessRunner.includes('summarizeAssetPackSettlementRightsDeliveryBoundary') && sources.harnessRunner.includes('assetPackLedgerDatabaseStorageReconciliation')),
+ predicateResult('route-test-covers-boundary', SOURCE_ROOTS.harnessRouteTest, sources.harnessRouteTest.includes('assetPackSettlementRightsDeliveryBoundary') && sources.harnessRouteTest.includes('source_bearing_pull_request_ready')),
+ predicateResult('terminal-renders-boundary', SOURCE_ROOTS.terminalWorkbench, sources.terminalWorkbench.includes('Settlement rights, compensation, and delivery') && sources.terminalWorkbench.includes('assetPackSettlementBoundaryRows')),
+ predicateResult('terminal-client-summarizes-boundary', SOURCE_ROOTS.terminalHarnessClient, sources.terminalHarnessClient.includes('settlement-boundary') && sources.terminalHarnessClient.includes('delivery-unlock')),
+ predicateResult('terminal-client-test-covers-boundary', SOURCE_ROOTS.terminalHarnessClientTest, sources.terminalHarnessClientTest.includes('settlement-boundary settlement_delivered') && sources.terminalHarnessClientTest.includes('reconciliation aligned')),
+ predicateResult('v42-spec-expanded', SOURCE_ROOTS.v42Spec, sources.v42Spec.includes('V42 Gate 6') && sources.v42Spec.includes('AssetPackSettlementRightsDeliveryBoundary')),
+ predicateResult('v42-delta-expanded', SOURCE_ROOTS.v42Delta, sources.v42Delta.includes('Gate 6') && sources.v42Delta.includes('settlement rights transfer')),
+ predicateResult('v42-notes-expanded', SOURCE_ROOTS.v42Notes, sources.v42Notes.includes('Gate 6') && sources.v42Notes.includes('source-to-shares compensation')),
+ predicateResult('v42-parity-implemented', SOURCE_ROOTS.v42Parity, sources.v42Parity.includes('Settlement and delivery') && sources.v42Parity.includes('implemented')),
+ predicateResult('roadmap-records-gate6-closure', SOURCE_ROOTS.roadmap, sources.roadmap.includes('V42 Gate 6 closure anchor') && sources.roadmap.includes('check:v42-gate6')),
+ predicateResult('readmes-document-gate6', SOURCE_ROOTS.rootReadme, sources.rootReadme.includes('V42 Gate 6') && sources.assetPackReadme.includes('Settlement Rights Delivery') && sources.protocolReadme.includes('V42SettlementRightsDelivery') && sources.terminalReadme.includes('Settlement rights')),
+ predicateResult('protocol-exports-gate6', SOURCE_ROOTS.protocolIndex, sources.protocolIndex.includes('buildV42SettlementRightsDelivery') && sources.protocolTypes.includes('buildV42SettlementRightsDelivery')),
+ predicateResult('package-scripts-wire-gate6', SOURCE_ROOTS.packageJson, sources.packageJson.includes('generate:v42-settlement-rights-delivery') && sources.packageJson.includes('check:v42-gate6')),
+ predicateResult('workflows-run-gate6-check', SOURCE_ROOTS.gateWorkflow, sources.gateWorkflow.includes('check-v42-gate6-settlement-rights-delivery.mjs') && sources.canonWorkflow.includes('check-v42-gate6-settlement-rights-delivery.mjs')),
+ ];
+}
+
+function buildCoverage(rows, predicateResults) {
+ const failedPredicateIds = predicateResults.filter((predicate) => !predicate.passed).map((predicate) => predicate.id);
+ return {
+ rowCount: rows.length,
+ sourceSafetyVerdict: V42_SETTLEMENT_RIGHTS_DELIVERY_SOURCE_SAFETY_VERDICT,
+ runtimeType: 'AssetPackSettlementRightsDeliveryBoundary',
+ paymentType: 'AssetPackSettlementPaymentObservation',
+ finalityType: 'AssetPackSettlementFinalityReceipt',
+ rightsTransferType: 'BtdRightsTransferReceipt',
+ readReceiptType: 'BtdReadReceipt',
+ sourceToSharesType: 'SourceToSharesProof',
+ reconciliationType: 'LedgerDatabaseReconciliationReport',
+ deliveryType: 'AssetPackDeliveryUnlockReceipt',
+ replayType: 'AssetPackSettlementRightsDeliveryReplayReceipt',
+ requiredReadbacksBeforeUnlock: [
+ 'btc_payment_observation',
+ 'settlement_finality',
+ 'source_to_shares_compensation',
+ 'btd_rights_transfer',
+ 'ledger_database_storage_reconciliation',
+ ],
+ stagingProjectRef: 'tkpyosihuouusyaxtbau',
+ stagingRestHost: 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/',
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ credentialsSerialized: false,
+ hostBoundaryMaterializationCovered: predicateResults.some((predicate) => predicate.id === 'host-materializes-boundary' && predicate.passed),
+ routeReadbackCovered: predicateResults.some((predicate) => predicate.id === 'route-summarizes-boundary' && predicate.passed),
+ terminalReadbackCovered: predicateResults.some((predicate) => predicate.id === 'terminal-renders-boundary' && predicate.passed),
+ confirmedPaymentCovered: predicateResults.some((predicate) => predicate.id === 'tests-cover-confirmed-delivery' && predicate.passed),
+ underpaymentBlockedCovered: predicateResults.some((predicate) => predicate.id === 'tests-cover-underpayment' && predicate.passed),
+ finalityBlockedCovered: predicateResults.some((predicate) => predicate.id === 'tests-cover-finality' && predicate.passed),
+ reconciliationRepairCovered: predicateResults.some((predicate) => predicate.id === 'tests-cover-reconciliation-drift' && predicate.passed),
+ failedPredicateIds,
+ };
+}
+
+export function buildV42SettlementRightsDelivery(input = {}) {
+ const repoRoot = input.repoRoot || DEFAULT_REPO_ROOT;
+ const predicateResults = buildPredicateResults(repoRoot);
+ const rows = [...V42_SETTLEMENT_RIGHTS_DELIVERY_ROWS];
+ const coverage = buildCoverage(rows, predicateResults);
+ const artifactRoot = `v42-settlement-rights-delivery:${digest(JSON.stringify({
+ rowIds: V42_SETTLEMENT_RIGHTS_DELIVERY_ROW_IDS,
+ predicateResults,
+ coverage,
+ }))}`;
+
+ return {
+ artifactId: 'v42-settlement-rights-delivery',
+ schemaId: V42_SETTLEMENT_RIGHTS_DELIVERY_SCHEMA_ID,
+ version: V42_SETTLEMENT_RIGHTS_DELIVERY_VERSION,
+ currentTarget: V42_SETTLEMENT_RIGHTS_DELIVERY_CURRENT_TARGET,
+ sourceSafetyVerdict: V42_SETTLEMENT_RIGHTS_DELIVERY_SOURCE_SAFETY_VERDICT,
+ rowIds: [...V42_SETTLEMENT_RIGHTS_DELIVERY_ROW_IDS],
+ rows,
+ predicateResults,
+ coverage,
+ passed: coverage.failedPredicateIds.length === 0,
+ artifactRoot,
+ };
+}
diff --git a/packages/protocol/src/canonical/v43-cross-route-rehearsal-telemetry-repair.js b/packages/protocol/src/canonical/v43-cross-route-rehearsal-telemetry-repair.js
new file mode 100644
index 00000000..646d1525
--- /dev/null
+++ b/packages/protocol/src/canonical/v43-cross-route-rehearsal-telemetry-repair.js
@@ -0,0 +1,391 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH =
+ '.bitcode/v43-cross-route-rehearsal-telemetry-repair.json';
+export const V43_CROSS_ROUTE_REHEARSAL_SCHEMA_ID =
+ 'bitcode.v43.crossRouteRehearsalTelemetryRepair.v1';
+export const V43_CROSS_ROUTE_REHEARSAL_VERSION = 'V43';
+export const V43_CROSS_ROUTE_REHEARSAL_CURRENT_TARGET = 'V42';
+export const V43_CROSS_ROUTE_REHEARSAL_SOURCE_SAFETY_VERDICT =
+ 'source-safe-cross-route-rehearsal-telemetry-repair-metadata';
+
+export const V43_CROSS_ROUTE_REHEARSAL_LANE_IDS = Object.freeze([
+ 'local',
+ 'staging-testnet',
+]);
+
+export const V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS = Object.freeze([
+ '/deposit',
+ '/read',
+ '/packs',
+]);
+
+export const V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS = Object.freeze([
+ 'deposit:synthesize-options',
+ 'deposit:review-admit',
+ 'read:request',
+ 'read:review-need',
+ 'read:request-finding-fits',
+ 'read:preview-assetpack',
+ 'settlement:pay-btc-transfer-rights',
+ 'delivery:repository-pull-request',
+ 'packs:inspect-activity-repair',
+]);
+
+export const V43_CROSS_ROUTE_REHEARSAL_ROW_IDS = Object.freeze([
+ 'lane:local-cross-route-rehearsal',
+ 'lane:staging-testnet-cross-route-rehearsal',
+ 'deposit:options-policy-admission',
+ 'read:need-fits-preview',
+ 'settlement:rights-delivery-compensation',
+ 'packs:activity-master-detail-readback',
+ 'telemetry:execution-stream-database-readback',
+ 'sync:ledger-database-storage-reconciliation',
+ 'repair:fail-closed-recovery-matrix',
+ 'boundary:source-safe-disclosure',
+ 'operator:source-safe-receipts',
+ 'proof:artifacts-tests-workflows-docs',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ gate3Artifact: '.bitcode/v43-packs-activity-master-detail.json',
+ gate4Artifact: '.bitcode/v43-read-route-five-step-ux.json',
+ gate5Artifact: '.bitcode/v43-deposit-route-options.json',
+ gate6Artifact: '.bitcode/v43-deposit-policy-compensation.json',
+ gate7Artifact: '.bitcode/v43-deposit-option-admission.json',
+ gate8Artifact: '.bitcode/v43-route-ux-product-excellence.json',
+ depositClient: 'uapi/app/deposit/DepositPageClient.tsx',
+ depositModel: 'uapi/app/deposit/deposit-route-model.ts',
+ readClient: 'uapi/app/read/ReadPageClient.tsx',
+ readModel: 'uapi/app/read/read-route-model.ts',
+ packsClient: 'uapi/app/packs/PacksPageClient.tsx',
+ packsApi: 'uapi/app/api/packs/activity/route.ts',
+ pipelineLogUi: 'uapi/components/base/bitcode/execution/pipeline-execution-log.tsx',
+ productRouteShell: 'uapi/components/base/bitcode/routes/product-route-shell.tsx',
+ depositAdmission: 'packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts',
+ previewBoundary: 'packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts',
+ settlementBoundary: 'packages/pipelines/asset-pack/src/asset-pack-settlement-rights-delivery.ts',
+ operationalReadback: 'packages/pipelines/asset-pack/src/reading-operational-telemetry-repair-readback.ts',
+ operatorScript: 'scripts/rehearse-v43-cross-route-product-flow.mjs',
+ generator: 'scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs',
+ checker: 'scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs',
+ protocolCanonical: 'packages/protocol/src/canonical/v43-cross-route-rehearsal-telemetry-repair.js',
+ protocolTest: 'packages/protocol/test/v43-cross-route-rehearsal-telemetry-repair.test.js',
+ protocolIndex: 'packages/protocol/src/index.js',
+ protocolTypes: 'packages/protocol/src/index.d.ts',
+ packageJson: 'package.json',
+ gateWorkflow: '.github/workflows/bitcode-gate-quality.yml',
+ canonWorkflow: '.github/workflows/bitcode-canon-quality.yml',
+ spec: 'BITCODE_SPEC_V43.md',
+ delta: 'BITCODE_SPEC_V43_DELTA.md',
+ notes: 'BITCODE_SPEC_V43_NOTES.md',
+ parity: 'BITCODE_SPEC_V43_PARITY_MATRIX.md',
+ roadmap: 'SPECIFICATIONS_ROADMAP.md',
+ readme: 'README.md',
+ protocolReadme: 'packages/protocol/README.md',
+});
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'secret-values',
+ 'provider-tokens',
+ 'wallet-private-material',
+ 'protected-source-payloads',
+ 'raw-protected-prompts',
+ 'raw-interpolated-prompts',
+ 'raw-provider-responses',
+ 'unpaid-assetpack-source',
+ 'live-rehearsal-log-payloads',
+ 'value-bearing-mainnet-admission',
+]);
+
+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 includesText(sourceText, expectedText) {
+ return sourceText.toLowerCase().includes(expectedText.toLowerCase());
+}
+
+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 rowRoot(rowId) {
+ return `v43-cross-route-rehearsal-row:${digest(rowId)}`;
+}
+
+function row(input) {
+ return {
+ ...input,
+ rowRoot: rowRoot(input.rowId),
+ sourceSafetyClass: 'source_safe_cross_route_rehearsal_telemetry_repair_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawInterpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ privateSettlementPayloadVisible: false,
+ liveRehearsalLogPayloadSerialized: false,
+ valueBearingMainnetAdmitted: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ };
+}
+
+export const V43_CROSS_ROUTE_REHEARSAL_ROWS = Object.freeze([
+ row({
+ rowId: 'lane:local-cross-route-rehearsal',
+ laneId: 'local',
+ routeIds: [...V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS],
+ stageIds: [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS],
+ sourceRoots: [SOURCE_ROOTS.operatorScript, SOURCE_ROOTS.gate3Artifact, SOURCE_ROOTS.gate8Artifact],
+ requiredEvidence: ['local', 'dryRun', 'source-safe receipt', 'no value-bearing mainnet'],
+ }),
+ row({
+ rowId: 'lane:staging-testnet-cross-route-rehearsal',
+ laneId: 'staging-testnet',
+ routeIds: [...V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS],
+ stageIds: [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS],
+ sourceRoots: [SOURCE_ROOTS.operatorScript, SOURCE_ROOTS.gate7Artifact, SOURCE_ROOTS.gate8Artifact],
+ requiredEvidence: ['staging-testnet', 'tkpyosihuouusyaxtbau', 'real inference posture', 'database stream readback'],
+ }),
+ row({
+ rowId: 'deposit:options-policy-admission',
+ laneId: 'local-and-staging-testnet',
+ routeIds: ['/deposit', '/packs'],
+ stageIds: ['deposit:synthesize-options', 'deposit:review-admit', 'packs:inspect-activity-repair'],
+ sourceRoots: [SOURCE_ROOTS.gate5Artifact, SOURCE_ROOTS.gate6Artifact, SOURCE_ROOTS.gate7Artifact],
+ requiredEvidence: ['DepositAssetPackOptionSynthesis', 'DepositAssetPackOptionPolicy', 'DepositAssetPackOptionAdmissionReport'],
+ }),
+ row({
+ rowId: 'read:need-fits-preview',
+ laneId: 'local-and-staging-testnet',
+ routeIds: ['/read', '/packs'],
+ stageIds: ['read:request', 'read:review-need', 'read:request-finding-fits', 'read:preview-assetpack'],
+ sourceRoots: [SOURCE_ROOTS.gate4Artifact, SOURCE_ROOTS.readModel, SOURCE_ROOTS.previewBoundary],
+ requiredEvidence: ['ReadNeedComprehensionSynthesis', 'ReadFitsFindingSynthesis', 'sourceSafePreview'],
+ }),
+ row({
+ rowId: 'settlement:rights-delivery-compensation',
+ laneId: 'local-and-staging-testnet',
+ routeIds: ['/read', '/packs'],
+ stageIds: ['settlement:pay-btc-transfer-rights', 'delivery:repository-pull-request'],
+ sourceRoots: [SOURCE_ROOTS.previewBoundary, SOURCE_ROOTS.settlementBoundary, SOURCE_ROOTS.depositAdmission],
+ requiredEvidence: ['BTC', 'rights transfer', 'source-to-shares compensation', 'pull_request_after_settlement'],
+ }),
+ row({
+ rowId: 'packs:activity-master-detail-readback',
+ laneId: 'local-and-staging-testnet',
+ routeIds: ['/packs'],
+ stageIds: ['packs:inspect-activity-repair'],
+ sourceRoots: [SOURCE_ROOTS.gate3Artifact, SOURCE_ROOTS.packsClient, SOURCE_ROOTS.packsApi],
+ requiredEvidence: ['PackActivity', 'settlementState', 'compensationState', 'deliveryState', 'repairState'],
+ }),
+ row({
+ rowId: 'telemetry:execution-stream-database-readback',
+ laneId: 'local-and-staging-testnet',
+ routeIds: ['/deposit', '/read', '/packs'],
+ stageIds: [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS],
+ sourceRoots: [SOURCE_ROOTS.pipelineLogUi, SOURCE_ROOTS.operationalReadback, SOURCE_ROOTS.operatorScript],
+ requiredEvidence: ['pipeline-execution-log', 'metadata', 'database readback', 'repair'],
+ }),
+ row({
+ rowId: 'sync:ledger-database-storage-reconciliation',
+ laneId: 'local-and-staging-testnet',
+ routeIds: ['/packs'],
+ stageIds: ['settlement:pay-btc-transfer-rights', 'delivery:repository-pull-request'],
+ sourceRoots: [SOURCE_ROOTS.settlementBoundary, SOURCE_ROOTS.depositAdmission, SOURCE_ROOTS.gate7Artifact],
+ requiredEvidence: ['ledger', 'database', 'object storage', 'reconciliation'],
+ }),
+ row({
+ rowId: 'repair:fail-closed-recovery-matrix',
+ laneId: 'local-and-staging-testnet',
+ routeIds: ['/deposit', '/read', '/packs'],
+ stageIds: [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS],
+ sourceRoots: [SOURCE_ROOTS.depositModel, SOURCE_ROOTS.readModel, SOURCE_ROOTS.packsClient],
+ requiredEvidence: ['critical-source block', 'acceptedNeedRequiredBeforeFindingFits', 'repairState'],
+ }),
+ row({
+ rowId: 'boundary:source-safe-disclosure',
+ laneId: 'local-and-staging-testnet',
+ routeIds: ['/deposit', '/read', '/packs'],
+ stageIds: [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS],
+ sourceRoots: [SOURCE_ROOTS.productRouteShell, SOURCE_ROOTS.depositClient, SOURCE_ROOTS.readClient],
+ requiredEvidence: ['Withheld', 'unpaid AssetPack source', 'settlement private payloads'],
+ }),
+ row({
+ rowId: 'operator:source-safe-receipts',
+ laneId: 'local-and-staging-testnet',
+ routeIds: [...V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS],
+ stageIds: [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS],
+ sourceRoots: [SOURCE_ROOTS.operatorScript, SOURCE_ROOTS.checker],
+ requiredEvidence: ['secretValueSerialized: false', 'receiptRoot', 'V43_CROSS_ROUTE_REHEARSAL_LANES'],
+ }),
+ row({
+ rowId: 'proof:artifacts-tests-workflows-docs',
+ laneId: 'local-and-staging-testnet',
+ routeIds: [...V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS],
+ stageIds: [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS],
+ sourceRoots: [SOURCE_ROOTS.protocolTest, SOURCE_ROOTS.packageJson, SOURCE_ROOTS.gateWorkflow, SOURCE_ROOTS.canonWorkflow],
+ requiredEvidence: ['v43-cross-route-rehearsal-telemetry-repair', 'check:v43-gate9', 'generate:v43-cross-route-rehearsal'],
+ }),
+]);
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+
+ return [
+ predicateResult('gate3-artifact-passed', SOURCE_ROOTS.gate3Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate3Artifact, 'v43-packs-activity-master-detail')),
+ predicateResult('gate4-artifact-passed', SOURCE_ROOTS.gate4Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate4Artifact, 'v43-read-route-five-step-ux')),
+ predicateResult('gate5-artifact-passed', SOURCE_ROOTS.gate5Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate5Artifact, 'v43-deposit-route-options')),
+ predicateResult('gate6-artifact-passed', SOURCE_ROOTS.gate6Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate6Artifact, 'v43-deposit-policy-compensation')),
+ predicateResult('gate7-artifact-passed', SOURCE_ROOTS.gate7Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate7Artifact, 'v43-deposit-option-admission')),
+ predicateResult('gate8-artifact-passed', SOURCE_ROOTS.gate8Artifact, artifactPassed(repoRoot, SOURCE_ROOTS.gate8Artifact, 'v43-route-ux-product-excellence')),
+ predicateResult('deposit-route-covers-admission', SOURCE_ROOTS.depositClient, sources.depositClient.includes('pipeline:deposit-option-admission') && sources.depositClient.includes('DepositAssetPackOptionAdmissionReport')),
+ predicateResult('deposit-model-covers-repair-boundaries', SOURCE_ROOTS.depositModel, sources.depositModel.includes('sourceCriticalityDemandRoiPolicyOwnedByGate6') && sources.depositModel.includes('admissionAndIndexingOwnedByGate7')),
+ predicateResult('read-route-covers-two-pipeline-path', SOURCE_ROOTS.readModel, sources.readModel.includes('ReadNeedComprehensionSynthesis') && sources.readModel.includes('ReadFitsFindingSynthesis') && sources.readModel.includes('deliveryRequiresPaidReadRights')),
+ predicateResult('read-client-covers-preview-settlement-delivery', SOURCE_ROOTS.readClient, sources.readClient.includes('Finding Fits') && sources.readClient.includes('Withheld until paid') && sources.readClient.includes('settlement readback')),
+ predicateResult('packs-route-covers-activity-repair', SOURCE_ROOTS.packsClient, sources.packsClient.includes('PackActivity') && sources.packsClient.includes('repairState') && sources.packsClient.includes('compensationState')),
+ predicateResult('packs-api-source-safe-readback', SOURCE_ROOTS.packsApi, sources.packsApi.includes('assertPackActivitySourceSafe') && sources.packsApi.includes('summarizePackActivityRecords')),
+ predicateResult('pipeline-log-rich-metadata', SOURCE_ROOTS.pipelineLogUi, sources.pipelineLogUi.includes('metadata') && sources.pipelineLogUi.includes('Accordion')),
+ predicateResult('settlement-boundary-syncs-delivery', SOURCE_ROOTS.settlementBoundary, sources.settlementBoundary.includes('ledger') && sources.settlementBoundary.includes('objectStorage') && sources.settlementBoundary.includes('source_bearing_pull_request_ready')),
+ predicateResult('preview-boundary-repairs-withheld-source', SOURCE_ROOTS.previewBoundary, sources.previewBoundary.includes('repair_posture') && sources.previewBoundary.includes('withheld_until_settlement')),
+ predicateResult('deposit-admission-syncs-storage-telemetry', SOURCE_ROOTS.depositAdmission, sources.depositAdmission.includes('storageProjection') && sources.depositAdmission.includes('telemetryRoot') && sources.depositAdmission.includes('compensationRouteRoot')),
+ predicateResult('operator-script-exists', SOURCE_ROOTS.operatorScript, sourceExists(repoRoot, SOURCE_ROOTS.operatorScript) && sources.operatorScript.includes('V43_CROSS_ROUTE_REHEARSAL_LANES')),
+ predicateResult('operator-script-binds-staging-testnet', SOURCE_ROOTS.operatorScript, sources.operatorScript.includes('tkpyosihuouusyaxtbau') && sources.operatorScript.includes('BITCODE_ASSET_PACK_REAL_INFERENCE') && sources.operatorScript.includes('BITCODE_PIPELINE_STREAM_TO_DATABASE')),
+ predicateResult('operator-script-source-safe', SOURCE_ROOTS.operatorScript, sources.operatorScript.includes('secretValueSerialized: false') && sources.operatorScript.includes('valueBearingMainnetAdmitted: false')),
+ predicateResult('protocol-test-wired', SOURCE_ROOTS.protocolTest, sources.protocolTest.includes('buildV43CrossRouteRehearsalTelemetryRepair') && sources.protocolTest.includes('rowCount, 12')),
+ predicateResult('protocol-exports-wired', SOURCE_ROOTS.protocolIndex, sources.protocolIndex.includes('buildV43CrossRouteRehearsalTelemetryRepair') && sources.protocolTypes.includes('buildV43CrossRouteRehearsalTelemetryRepair')),
+ predicateResult('package-scripts-wired', SOURCE_ROOTS.packageJson, sources.packageJson.includes('generate:v43-cross-route-rehearsal') && sources.packageJson.includes('rehearse:v43-cross-route') && sources.packageJson.includes('check:v43-gate9')),
+ predicateResult('workflows-run-gate9', SOURCE_ROOTS.gateWorkflow, sources.gateWorkflow.includes('check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs') && sources.canonWorkflow.includes('check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs')),
+ predicateResult('v43-docs-expanded', SOURCE_ROOTS.spec, includesText(sources.spec, 'V43 Gate 9') && includesText(sources.spec, 'cross-route rehearsal')),
+ predicateResult('v43-delta-expanded', SOURCE_ROOTS.delta, includesText(sources.delta, 'Gate 9') && includesText(sources.delta, 'cross-route rehearsal')),
+ predicateResult('v43-notes-expanded', SOURCE_ROOTS.notes, sources.notes.includes('Gate 9') && sources.notes.includes('telemetry/database/ledger/storage')),
+ predicateResult('v43-parity-implemented', SOURCE_ROOTS.parity, sources.parity.includes('Cross-route rehearsal') && sources.parity.includes('implemented')),
+ predicateResult('roadmap-advanced-to-gate9', SOURCE_ROOTS.roadmap, (sources.roadmap.includes('Current working gate: V43 Gate 9') || sources.roadmap.includes('Current working gate: V43 Gate 10')) && sources.roadmap.includes('V43 Gate 9 closure anchor')),
+ predicateResult('readmes-document-gate9', SOURCE_ROOTS.readme, sources.readme.includes('V43 Gate 9') && sources.protocolReadme.includes('V43CrossRouteRehearsalTelemetryRepair')),
+ ];
+}
+
+function buildCoverage(rows, predicateResults) {
+ const failedPredicateIds = predicateResults.filter((predicate) => !predicate.passed).map((predicate) => predicate.id);
+ return {
+ rowCount: rows.length,
+ laneCount: V43_CROSS_ROUTE_REHEARSAL_LANE_IDS.length,
+ routeCount: V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS.length,
+ stageCount: V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS.length,
+ gateArtifactCount: 6,
+ lanes: [...V43_CROSS_ROUTE_REHEARSAL_LANE_IDS],
+ routes: [...V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS],
+ stages: [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS],
+ stagingProjectRef: 'tkpyosihuouusyaxtbau',
+ stagingRestHost: 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/',
+ localLaneCovered: true,
+ stagingTestnetLaneCovered: true,
+ depositRouteCovered: true,
+ readRouteCovered: true,
+ packsRouteCovered: true,
+ depositOptionAdmissionCovered: true,
+ readNeedAndFindingFitsCovered: true,
+ sourceSafePreviewCovered: true,
+ settlementRightsTransferCovered: true,
+ compensationCovered: true,
+ deliveryPullRequestCovered: true,
+ packActivityRepairCovered: true,
+ telemetryDatabaseReadbackCovered: true,
+ ledgerDatabaseStorageSynchronized: true,
+ repairMatrixCovered: true,
+ mainnetValueBearingBlocked: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawInterpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ privateSettlementPayloadVisible: false,
+ liveRehearsalLogPayloadSerialized: false,
+ failedPredicateIds,
+ };
+}
+
+export function buildV43CrossRouteRehearsalTelemetryRepair(input = {}) {
+ const repoRoot = input.repoRoot || DEFAULT_REPO_ROOT;
+ const predicateResults = buildPredicateResults(repoRoot);
+ const rows = [...V43_CROSS_ROUTE_REHEARSAL_ROWS];
+ const coverage = buildCoverage(rows, predicateResults);
+ const artifactRoot = `v43-cross-route-rehearsal:${digest(JSON.stringify({
+ rowIds: V43_CROSS_ROUTE_REHEARSAL_ROW_IDS,
+ laneIds: V43_CROSS_ROUTE_REHEARSAL_LANE_IDS,
+ routeIds: V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS,
+ stageIds: V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS,
+ predicateResults,
+ coverage,
+ }))}`;
+
+ return {
+ artifactId: 'v43-cross-route-rehearsal-telemetry-repair',
+ schemaId: V43_CROSS_ROUTE_REHEARSAL_SCHEMA_ID,
+ version: V43_CROSS_ROUTE_REHEARSAL_VERSION,
+ currentTarget: V43_CROSS_ROUTE_REHEARSAL_CURRENT_TARGET,
+ sourceSafetyVerdict: V43_CROSS_ROUTE_REHEARSAL_SOURCE_SAFETY_VERDICT,
+ laneIds: [...V43_CROSS_ROUTE_REHEARSAL_LANE_IDS],
+ routeIds: [...V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS],
+ stageIds: [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS],
+ rowIds: [...V43_CROSS_ROUTE_REHEARSAL_ROW_IDS],
+ rows,
+ predicateResults,
+ coverage,
+ sourceSafety: {
+ sourceSafetyClass: 'source_safe_cross_route_rehearsal_telemetry_repair_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawInterpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ privateSettlementPayloadVisible: false,
+ liveRehearsalLogPayloadSerialized: false,
+ valueBearingMainnetAdmitted: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ },
+ passed: coverage.failedPredicateIds.length === 0,
+ artifactRoot,
+ };
+}
diff --git a/packages/protocol/src/canonical/v43-deposit-option-admission.js b/packages/protocol/src/canonical/v43-deposit-option-admission.js
new file mode 100644
index 00000000..c9eed419
--- /dev/null
+++ b/packages/protocol/src/canonical/v43-deposit-option-admission.js
@@ -0,0 +1,255 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH = '.bitcode/v43-deposit-option-admission.json';
+export const V43_DEPOSIT_OPTION_ADMISSION_SCHEMA_ID = 'bitcode.v43.depositOptionAdmission.v1';
+export const V43_DEPOSIT_OPTION_ADMISSION_VERSION = 'V43';
+export const V43_DEPOSIT_OPTION_ADMISSION_CURRENT_TARGET = 'V42';
+export const V43_DEPOSIT_OPTION_ADMISSION_SOURCE_SAFETY_VERDICT =
+ 'source-safe-deposit-option-admission-metadata';
+
+export const V43_DEPOSIT_OPTION_ADMISSION_OBJECT_IDS = Object.freeze([
+ 'DepositAssetPackOptionAdmissionReport',
+ 'DepositOptionAdmissionReceipt',
+ 'DepositOptionReviewDecision',
+ 'Depository index projection',
+ 'object storage projection',
+ 'pack activity synchronization',
+ 'deposit option admission telemetry',
+]);
+
+export const V43_DEPOSIT_OPTION_ADMISSION_FIELD_IDS = Object.freeze([
+ 'reviewDecision',
+ 'admission',
+ 'depositoryIndexProjection',
+ 'storageProjection',
+ 'compensationPreview',
+ 'packsActivitySync',
+ 'telemetry',
+ 'visibility',
+]);
+
+export const V43_DEPOSIT_OPTION_ADMISSION_FORBIDDEN_PAYLOAD_IDS = Object.freeze([
+ 'protected_source_payload',
+ 'raw_source_text',
+ 'unpaid_assetpack_source',
+ 'raw_protected_prompt',
+ 'interpolated_prompt',
+ 'raw_provider_response',
+ 'wallet_private_material',
+ 'settlement_private_payload',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ activePointer: 'BITCODE_SPEC.txt',
+ spec: 'BITCODE_SPEC_V43.md',
+ delta: 'BITCODE_SPEC_V43_DELTA.md',
+ notes: 'BITCODE_SPEC_V43_NOTES.md',
+ parity: 'BITCODE_SPEC_V43_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',
+ optionModel: 'packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts',
+ policyModel: 'packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts',
+ admissionModel: 'packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts',
+ optionModelTest: 'packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts',
+ policyModelTest: 'packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts',
+ admissionModelTest: 'packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-admission.test.ts',
+ routeModel: 'uapi/app/deposit/deposit-route-model.ts',
+ client: 'uapi/app/deposit/DepositPageClient.tsx',
+ routeModelTest: 'uapi/tests/depositRouteModel.test.ts',
+ pageTest: 'uapi/tests/depositPageClient.test.tsx',
+ packActivityModel: 'uapi/components/base/bitcode/activity/pack-activity-model.ts',
+ packActivityModelTest: 'uapi/tests/packActivityModel.test.ts',
+ uapiJestConfig: 'uapi/jest.config.cjs',
+ packageIndex: 'packages/pipelines/asset-pack/src/index.ts',
+ packageManifest: 'packages/pipelines/asset-pack/package.json',
+ protocolIndex: 'packages/protocol/src/index.js',
+ protocolTypes: 'packages/protocol/src/index.d.ts',
+ protocolTest: 'packages/protocol/test/v43-deposit-option-admission.test.js',
+ generator: 'scripts/generate-v43-deposit-option-admission.mjs',
+ checker: 'scripts/check-v43-gate7-deposit-option-admission.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 predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+export const V43_DEPOSIT_OPTION_ADMISSION_CONTRACT_ROWS = Object.freeze([
+ {
+ rowId: 'depositor-review-decisions',
+ owner: SOURCE_ROOTS.admissionModel,
+ contract:
+ 'DepositOptionReviewDecision records approved, rejected, resynthesis-requested, and pending decisions before any source-safe option can enter the Depository.',
+ requiredFields: ['approved-for-admission', 'rejected-by-depositor', 'resynthesis-requested', 'pending-depositor-review'],
+ },
+ {
+ rowId: 'admission-receipts',
+ owner: SOURCE_ROOTS.admissionModel,
+ contract:
+ 'DepositOptionAdmissionReceipt admits only approved, policy-eligible, source-safe options and emits deterministic blockers for pending, rejected, resynthesis, or policy-blocked options.',
+ requiredFields: ['admitted-to-depository', 'not-admitted-policy-blocked', 'DepositOptionAdmissionReceipt'],
+ },
+ {
+ rowId: 'depository-index-storage',
+ owner: SOURCE_ROOTS.admissionModel,
+ contract:
+ 'Admitted deposit AssetPacks project only measurement and metadata search indexes plus object-storage metadata and external source pointer roots.',
+ requiredFields: ['depositoryIndexProjection', 'storageProjection', 'measurements-and-metadata-only'],
+ },
+ {
+ rowId: 'compensation-and-packs-sync',
+ owner: SOURCE_ROOTS.packActivityModel,
+ contract:
+ 'Admitted options preserve Gate 6 BTC source-to-shares compensation preview and synchronize to /packs as Depository AssetPack activity without minting BTD.',
+ requiredFields: ['compensationPreview', 'source-to-shares-largest-remainder', 'depository-assetpack'],
+ },
+ {
+ rowId: 'telemetry-source-safety',
+ owner: SOURCE_ROOTS.admissionModel,
+ contract:
+ 'Admission telemetry emits execution-stream source-safe metadata while protected source, prompts, provider responses, wallet material, and settlement private payloads remain invisible.',
+ requiredFields: ['deposit-option-admission', 'execution-stream', 'sourceSafeMetadataOnly'],
+ },
+]);
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+
+ return [
+ predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === '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')),
+ predicateResult('notes-records-gate7', SOURCE_ROOTS.notes, sources.notes.includes('Gate 7') && sources.notes.includes('admission receipts')),
+ predicateResult('parity-records-gate7', SOURCE_ROOTS.parity, sources.parity.includes('Deposit option admission') && sources.parity.includes('v43-deposit-option-admission')),
+ predicateResult('roadmap-records-gate7', SOURCE_ROOTS.roadmap, sources.roadmap.includes('V43 Gate 7 closure anchor')),
+ predicateResult('readme-records-gate7', SOURCE_ROOTS.readme, sources.readme.includes('V43 Gate 7')),
+ predicateResult('protocol-readme-records-gate7', SOURCE_ROOTS.protocolReadme, sources.protocolReadme.includes('V43 Gate 7')),
+ predicateResult('admission-model-defines-report', SOURCE_ROOTS.admissionModel, sources.admissionModel.includes('DepositAssetPackOptionAdmissionReport') && sources.admissionModel.includes('buildDepositAssetPackOptionAdmissionReport')),
+ predicateResult('admission-model-defines-review-decisions', SOURCE_ROOTS.admissionModel, sources.admissionModel.includes('approved-for-admission') && sources.admissionModel.includes('rejected-by-depositor') && sources.admissionModel.includes('resynthesis-requested')),
+ predicateResult('admission-model-defines-admission-states', SOURCE_ROOTS.admissionModel, sources.admissionModel.includes('admitted-to-depository') && sources.admissionModel.includes('not-admitted-policy-blocked')),
+ predicateResult('admission-model-defines-index-storage', SOURCE_ROOTS.admissionModel, sources.admissionModel.includes('depositoryIndexProjection') && sources.admissionModel.includes('storageProjection') && sources.admissionModel.includes('rawSourceStoredExternally: true')),
+ 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('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'")),
+ predicateResult('asset-pack-manifest-exports-admission', SOURCE_ROOTS.packageManifest, sources.packageManifest.includes('"./deposit-asset-pack-option-admission"')),
+ predicateResult('uapi-jest-maps-admission', SOURCE_ROOTS.uapiJestConfig, sources.uapiJestConfig.includes('@bitcode/pipeline-asset-pack/deposit-asset-pack-option-admission')),
+ predicateResult('admission-test-covers-report', SOURCE_ROOTS.admissionModelTest, sources.admissionModelTest.includes('buildDepositAssetPackOptionAdmissionReport') && sources.admissionModelTest.includes('synchronized-to-packs')),
+ predicateResult('route-test-covers-admission', SOURCE_ROOTS.routeModelTest, sources.routeModelTest.includes('DepositAssetPackOptionAdmissionReport') && sources.routeModelTest.includes('admitted-to-depository')),
+ predicateResult('page-test-covers-admission', SOURCE_ROOTS.pageTest, sources.pageTest.includes('DepositAssetPackOptionAdmissionReport') && sources.pageTest.includes('Approve for Depository')),
+ predicateResult('pack-activity-test-covers-admission', SOURCE_ROOTS.packActivityModelTest, sources.packActivityModelTest.includes('deposit-option-admission') && sources.packActivityModelTest.includes('depository-assetpack')),
+ predicateResult('protocol-test-covers-artifact', SOURCE_ROOTS.protocolTest, sources.protocolTest.includes('buildV43DepositOptionAdmission')),
+ predicateResult('protocol-package-exports-gate7', SOURCE_ROOTS.protocolIndex, sources.protocolIndex.includes('buildV43DepositOptionAdmission')),
+ predicateResult('protocol-types-export-gate7', SOURCE_ROOTS.protocolTypes, sources.protocolTypes.includes('buildV43DepositOptionAdmission')),
+ predicateResult('package-json-exposes-gate7', SOURCE_ROOTS.packageJson, sources.packageJson.includes('"generate:v43-deposit-option-admission"') && sources.packageJson.includes('"check:v43-gate7"')),
+ predicateResult('gate-workflow-runs-gate7', SOURCE_ROOTS.gateWorkflow, sources.gateWorkflow.includes('check-v43-gate7-deposit-option-admission.mjs')),
+ predicateResult('canon-workflow-runs-gate7', SOURCE_ROOTS.canonWorkflow, sources.canonWorkflow.includes('check-v43-gate7-deposit-option-admission.mjs')),
+ predicateResult('generator-exists', SOURCE_ROOTS.generator, sources.generator.includes('buildV43DepositOptionAdmission')),
+ predicateResult('checker-exists', SOURCE_ROOTS.checker, sources.checker.includes('V43 Gate 7 deposit option admission check')),
+ ];
+}
+
+export function buildV43DepositOptionAdmission({ repoRoot = DEFAULT_REPO_ROOT } = {}) {
+ const predicateResults = buildPredicateResults(repoRoot);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const sourceRoots = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`]),
+ );
+ const artifactRoot = `v43-deposit-option-admission:${digest(JSON.stringify({
+ objectIds: V43_DEPOSIT_OPTION_ADMISSION_OBJECT_IDS,
+ fieldIds: V43_DEPOSIT_OPTION_ADMISSION_FIELD_IDS,
+ forbiddenPayloadIds: V43_DEPOSIT_OPTION_ADMISSION_FORBIDDEN_PAYLOAD_IDS,
+ contractRows: V43_DEPOSIT_OPTION_ADMISSION_CONTRACT_ROWS.map((row) => row.rowId),
+ sourceRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v43-deposit-option-admission',
+ schemaId: V43_DEPOSIT_OPTION_ADMISSION_SCHEMA_ID,
+ version: V43_DEPOSIT_OPTION_ADMISSION_VERSION,
+ currentTarget: V43_DEPOSIT_OPTION_ADMISSION_CURRENT_TARGET,
+ sourceSafetyVerdict: V43_DEPOSIT_OPTION_ADMISSION_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ objectIds: [...V43_DEPOSIT_OPTION_ADMISSION_OBJECT_IDS],
+ fieldIds: [...V43_DEPOSIT_OPTION_ADMISSION_FIELD_IDS],
+ forbiddenPayloadIds: [...V43_DEPOSIT_OPTION_ADMISSION_FORBIDDEN_PAYLOAD_IDS],
+ contractRows: V43_DEPOSIT_OPTION_ADMISSION_CONTRACT_ROWS.map((row) => ({
+ ...row,
+ rowRoot: `v43-deposit-option-admission-contract:${digest(row.rowId)}`,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ })),
+ sourceRoots,
+ predicateResults,
+ coverage: {
+ reviewDecisionsImplemented: true,
+ approvalDecisionImplemented: true,
+ rejectionDecisionImplemented: true,
+ resynthesisDecisionImplemented: true,
+ admissionReceiptsImplemented: true,
+ approvedPolicyEligibleOptionsAdmittedOnly: true,
+ depositoryIndexProjectionImplemented: true,
+ vectorEmbeddingProjectionReadyForAdmittedOptions: true,
+ storageProjectionImplemented: true,
+ rawSourceStoredExternally: true,
+ compensationPreviewContinued: true,
+ compensationPriceAsset: 'BTC',
+ compensationAllocationMethod: 'source-to-shares-largest-remainder',
+ packsActivitySynchronizationImplemented: true,
+ packsRoute: '/packs',
+ packsActivityType: 'depository-assetpack',
+ telemetryImplemented: true,
+ routeAdmissionReadbackImplemented: true,
+ btdMintRequiresFutureNeedFitSettlement: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ },
+ };
+}
+
+export const V43_DEPOSIT_OPTION_ADMISSION_SOURCE_ROOTS = Object.freeze(
+ Object.fromEntries(Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, sourcePath])),
+);
diff --git a/packages/protocol/src/canonical/v43-deposit-policy-compensation.js b/packages/protocol/src/canonical/v43-deposit-policy-compensation.js
new file mode 100644
index 00000000..c6466d85
--- /dev/null
+++ b/packages/protocol/src/canonical/v43-deposit-policy-compensation.js
@@ -0,0 +1,243 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH = '.bitcode/v43-deposit-policy-compensation.json';
+export const V43_DEPOSIT_POLICY_COMPENSATION_SCHEMA_ID = 'bitcode.v43.depositPolicyCompensation.v1';
+export const V43_DEPOSIT_POLICY_COMPENSATION_VERSION = 'V43';
+export const V43_DEPOSIT_POLICY_COMPENSATION_CURRENT_TARGET = 'V42';
+export const V43_DEPOSIT_POLICY_COMPENSATION_SOURCE_SAFETY_VERDICT =
+ 'source-safe-deposit-policy-compensation-metadata';
+
+export const V43_DEPOSIT_POLICY_OBJECT_IDS = Object.freeze([
+ 'DepositAssetPackOptionPolicy',
+ 'DepositAssetPackOptionPolicyReport',
+ 'DepositAssetPackOptionPolicyEvaluation',
+ 'source criticality posture',
+ 'likely demand posture',
+ 'ROI posture',
+ 'BTD potential estimate',
+ 'BTC source-to-shares compensation route',
+ 'future Gate 7 admission boundary',
+]);
+
+export const V43_DEPOSIT_POLICY_FIELD_IDS = Object.freeze([
+ 'sourceCriticality',
+ 'demand',
+ 'roi',
+ 'btdPotential',
+ 'compensation',
+ 'policyDecision',
+ 'admissionBoundary',
+ 'policy roots',
+]);
+
+export const V43_DEPOSIT_POLICY_FORBIDDEN_PAYLOAD_IDS = Object.freeze([
+ 'protected_source_payload',
+ 'raw_source_text',
+ 'unpaid_assetpack_source',
+ 'raw_protected_prompt',
+ 'interpolated_prompt',
+ 'raw_provider_response',
+ 'wallet_private_material',
+ 'settlement_private_payload',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ activePointer: 'BITCODE_SPEC.txt',
+ spec: 'BITCODE_SPEC_V43.md',
+ delta: 'BITCODE_SPEC_V43_DELTA.md',
+ notes: 'BITCODE_SPEC_V43_NOTES.md',
+ parity: 'BITCODE_SPEC_V43_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',
+ optionModel: 'packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts',
+ policyModel: 'packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts',
+ optionModelTest: 'packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts',
+ policyModelTest: 'packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts',
+ routeModel: 'uapi/app/deposit/deposit-route-model.ts',
+ client: 'uapi/app/deposit/DepositPageClient.tsx',
+ routeModelTest: 'uapi/tests/depositRouteModel.test.ts',
+ pageTest: 'uapi/tests/depositPageClient.test.tsx',
+ packageIndex: 'packages/pipelines/asset-pack/src/index.ts',
+ packageManifest: 'packages/pipelines/asset-pack/package.json',
+ protocolIndex: 'packages/protocol/src/index.js',
+ protocolTypes: 'packages/protocol/src/index.d.ts',
+ protocolTest: 'packages/protocol/test/v43-deposit-policy-compensation.test.js',
+ generator: 'scripts/generate-v43-deposit-policy-compensation.mjs',
+ checker: 'scripts/check-v43-gate6-deposit-policy-compensation.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 predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+function includesWithWhitespace(source, phrase) {
+ const pattern = phrase
+ .trim()
+ .split(/\s+/u)
+ .map((part) => part.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&'))
+ .join('\\s+');
+ return new RegExp(pattern, 'u').test(source);
+}
+
+export const V43_DEPOSIT_POLICY_COMPENSATION_CONTRACT_ROWS = Object.freeze([
+ {
+ rowId: 'criticality-policy',
+ owner: SOURCE_ROOTS.policyModel,
+ contract:
+ 'DepositAssetPackOptionPolicy evaluates source criticality from source-safe criticality signals and blocks critical IP before Gate 7 admission.',
+ requiredFields: ['sourceCriticality', 'blocked-critical-source', 'critical_source_policy_block'],
+ },
+ {
+ rowId: 'demand-roi-policy',
+ owner: SOURCE_ROOTS.policyModel,
+ contract:
+ 'Policy evaluates likely demand and ROI deterministically from source-safe option measurements, demand confidence, estimated settlement, and development cost.',
+ requiredFields: ['demand', 'roi', 'positive-expected-value', 'negative-expected-value'],
+ },
+ {
+ rowId: 'btd-compensation-policy',
+ owner: SOURCE_ROOTS.policyModel,
+ contract:
+ 'Policy exposes BTD potential as estimate-only and previews future-reader BTC source-to-shares compensation without minting BTD or transferring rights.',
+ requiredFields: ['btdPotential', 'compensation', 'source-to-shares-largest-remainder', 'BTC'],
+ },
+ {
+ rowId: 'route-policy-readback',
+ owner: SOURCE_ROOTS.client,
+ contract:
+ '/deposit renders policy readback for criticality, demand, ROI, BTD potential, and compensation while admission/indexing remain owned by Gate 7.',
+ requiredFields: ['DepositAssetPackOptionPolicy', 'BTC source-to-shares preview', 'future-gate7-deposit-option-review'],
+ },
+]);
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+
+ return [
+ predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === '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')),
+ predicateResult('notes-records-gate6', SOURCE_ROOTS.notes, sources.notes.includes('Gate 6') && sources.notes.includes('criticality, demand, ROI')),
+ predicateResult('parity-records-gate6', SOURCE_ROOTS.parity, sources.parity.includes('Criticality/ROI policy') && sources.parity.includes('v43-deposit-policy-compensation')),
+ predicateResult('roadmap-records-gate6', SOURCE_ROOTS.roadmap, sources.roadmap.includes('V43 Gate 6 closure anchor')),
+ predicateResult('readme-records-gate6', SOURCE_ROOTS.readme, sources.readme.includes('V43 Gate 6')),
+ predicateResult('protocol-readme-records-gate6', SOURCE_ROOTS.protocolReadme, sources.protocolReadme.includes('V43 Gate 6')),
+ predicateResult('policy-model-defines-report', SOURCE_ROOTS.policyModel, sources.policyModel.includes('DepositAssetPackOptionPolicyReport') && sources.policyModel.includes('buildDepositAssetPackOptionPolicyReport')),
+ predicateResult('policy-model-defines-criticality', SOURCE_ROOTS.policyModel, sources.policyModel.includes('blocked-critical-source') && sources.policyModel.includes('sourceCriticality')),
+ predicateResult('policy-model-defines-demand-roi', SOURCE_ROOTS.policyModel, sources.policyModel.includes('weighted-depository-reading-and-existing-supply-signals') && sources.policyModel.includes('deterministic-estimated-gross-minus-development-cost')),
+ 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('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"')),
+ predicateResult('policy-test-covers-report', SOURCE_ROOTS.policyModelTest, sources.policyModelTest.includes('buildDepositAssetPackOptionPolicyReport') && sources.policyModelTest.includes('blocked-before-admission')),
+ predicateResult('route-test-covers-policy', SOURCE_ROOTS.routeModelTest, sources.routeModelTest.includes('DepositAssetPackOptionPolicy') && sources.routeModelTest.includes('blockedCount')),
+ predicateResult('page-test-covers-policy', SOURCE_ROOTS.pageTest, sources.pageTest.includes('DepositAssetPackOptionPolicy') && sources.pageTest.includes('BTC source-to-shares preview')),
+ predicateResult('protocol-test-covers-artifact', SOURCE_ROOTS.protocolTest, sources.protocolTest.includes('buildV43DepositPolicyCompensation')),
+ predicateResult('protocol-package-exports-gate6', SOURCE_ROOTS.protocolIndex, sources.protocolIndex.includes('buildV43DepositPolicyCompensation')),
+ predicateResult('protocol-types-export-gate6', SOURCE_ROOTS.protocolTypes, sources.protocolTypes.includes('buildV43DepositPolicyCompensation')),
+ predicateResult('package-json-exposes-gate6', SOURCE_ROOTS.packageJson, sources.packageJson.includes('"generate:v43-deposit-policy-compensation"') && sources.packageJson.includes('"check:v43-gate6"')),
+ predicateResult('gate-workflow-runs-gate6', SOURCE_ROOTS.gateWorkflow, sources.gateWorkflow.includes('check-v43-gate6-deposit-policy-compensation.mjs')),
+ predicateResult('canon-workflow-runs-gate6', SOURCE_ROOTS.canonWorkflow, sources.canonWorkflow.includes('check-v43-gate6-deposit-policy-compensation.mjs')),
+ predicateResult('generator-exists', SOURCE_ROOTS.generator, sources.generator.includes('buildV43DepositPolicyCompensation')),
+ predicateResult('checker-exists', SOURCE_ROOTS.checker, sources.checker.includes('V43 Gate 6 deposit policy compensation check')),
+ ];
+}
+
+export function buildV43DepositPolicyCompensation({ repoRoot = DEFAULT_REPO_ROOT } = {}) {
+ const predicateResults = buildPredicateResults(repoRoot);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const sourceRoots = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`]),
+ );
+ const artifactRoot = `v43-deposit-policy-compensation:${digest(JSON.stringify({
+ objectIds: V43_DEPOSIT_POLICY_OBJECT_IDS,
+ fieldIds: V43_DEPOSIT_POLICY_FIELD_IDS,
+ forbiddenPayloadIds: V43_DEPOSIT_POLICY_FORBIDDEN_PAYLOAD_IDS,
+ contractRows: V43_DEPOSIT_POLICY_COMPENSATION_CONTRACT_ROWS.map((row) => row.rowId),
+ sourceRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v43-deposit-policy-compensation',
+ schemaId: V43_DEPOSIT_POLICY_COMPENSATION_SCHEMA_ID,
+ version: V43_DEPOSIT_POLICY_COMPENSATION_VERSION,
+ currentTarget: V43_DEPOSIT_POLICY_COMPENSATION_CURRENT_TARGET,
+ sourceSafetyVerdict: V43_DEPOSIT_POLICY_COMPENSATION_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ objectIds: [...V43_DEPOSIT_POLICY_OBJECT_IDS],
+ fieldIds: [...V43_DEPOSIT_POLICY_FIELD_IDS],
+ forbiddenPayloadIds: [...V43_DEPOSIT_POLICY_FORBIDDEN_PAYLOAD_IDS],
+ contractRows: V43_DEPOSIT_POLICY_COMPENSATION_CONTRACT_ROWS.map((row) => ({
+ ...row,
+ rowRoot: `v43-deposit-policy-contract:${digest(row.rowId)}`,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ })),
+ sourceRoots,
+ predicateResults,
+ coverage: {
+ depositPolicyImplemented: true,
+ criticalityPolicyImplemented: true,
+ criticalSourceBlockedBeforeAdmission: true,
+ demandPolicyImplemented: true,
+ roiPolicyImplemented: true,
+ btdPotentialEstimateOnly: true,
+ compensationPolicyImplemented: true,
+ compensationPriceAsset: 'BTC',
+ compensationAllocationMethod: 'source-to-shares-largest-remainder',
+ btdMintRequiresFutureNeedFitSettlement: true,
+ admissionAndIndexingDeferredToGate7: true,
+ routePolicyReadbackImplemented: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ },
+ };
+}
+
+export const V43_DEPOSIT_POLICY_COMPENSATION_SOURCE_ROOTS = Object.freeze(
+ Object.fromEntries(Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, sourcePath])),
+);
diff --git a/packages/protocol/src/canonical/v43-deposit-route-options.js b/packages/protocol/src/canonical/v43-deposit-route-options.js
new file mode 100644
index 00000000..42b34944
--- /dev/null
+++ b/packages/protocol/src/canonical/v43-deposit-route-options.js
@@ -0,0 +1,273 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH = '.bitcode/v43-deposit-route-options.json';
+export const V43_DEPOSIT_ROUTE_OPTIONS_SCHEMA_ID = 'bitcode.v43.depositRouteOptions.v1';
+export const V43_DEPOSIT_ROUTE_OPTIONS_VERSION = 'V43';
+export const V43_DEPOSIT_ROUTE_OPTIONS_CURRENT_TARGET = 'V42';
+export const V43_DEPOSIT_ROUTE_OPTIONS_SOURCE_SAFETY_VERDICT = 'source-safe-deposit-route-option-metadata';
+
+export const V43_DEPOSIT_ROUTE_STEP_IDS = Object.freeze([
+ 'connect-source',
+ 'synthesize-options',
+ 'review-options',
+ 'submit-deposit',
+ 'read-depository-state',
+]);
+
+export const V43_DEPOSIT_OPTION_OBJECT_IDS = Object.freeze([
+ 'DepositRouteSession',
+ 'DepositOptionSynthesisRequest',
+ 'DepositAssetPackOptionSynthesis',
+ 'DepositAssetPackOption',
+ 'source-safe measurements',
+ 'depositor review boundary',
+ 'future admission boundary',
+]);
+
+export const V43_DEPOSIT_OPTION_PIPELINE_IDS = Object.freeze([
+ 'DepositAssetPackOptionSynthesis',
+]);
+
+export const V43_DEPOSIT_OPTION_SOURCE_SAFE_FIELD_IDS = Object.freeze([
+ 'repositoryFullName',
+ 'sourceBranch',
+ 'sourceCommit',
+ 'sourcePathRoots',
+ 'depositorInstructionRoot',
+ 'demandSignalRoots',
+ 'optionMeasurements',
+ 'optionRoots',
+ 'reviewBoundary',
+ 'policyBoundary',
+]);
+
+export const V43_DEPOSIT_OPTION_FORBIDDEN_PAYLOAD_IDS = Object.freeze([
+ 'protected_source_payload',
+ 'raw_source_text',
+ 'raw_protected_prompt',
+ 'interpolated_prompt',
+ 'raw_provider_response',
+ 'unpaid_assetpack_source',
+ 'wallet_private_material',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ activePointer: 'BITCODE_SPEC.txt',
+ spec: 'BITCODE_SPEC_V43.md',
+ delta: 'BITCODE_SPEC_V43_DELTA.md',
+ notes: 'BITCODE_SPEC_V43_NOTES.md',
+ parity: 'BITCODE_SPEC_V43_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',
+ terminalRoutes: 'uapi/app/terminal/terminal-routes.ts',
+ routeModel: 'uapi/app/deposit/deposit-route-model.ts',
+ page: 'uapi/app/deposit/page.tsx',
+ client: 'uapi/app/deposit/DepositPageClient.tsx',
+ optionModel: 'packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts',
+ optionModelTest: 'packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts',
+ packageIndex: 'packages/pipelines/asset-pack/src/index.ts',
+ packageManifest: 'packages/pipelines/asset-pack/package.json',
+ publicCopy: 'uapi/components/base/bitcode/layout/bitcode-public-copy.ts',
+ publicExplainers: 'uapi/components/base/bitcode/layout/bitcode-public-explainers.ts',
+ workspaceSurface: 'uapi/components/base/bitcode/layout/workspace-surface.ts',
+ nav: 'uapi/components/base/bitcode/layout/nav.tsx',
+ footer: 'uapi/components/base/bitcode/layout/footer.tsx',
+ routeModelTest: 'uapi/tests/depositRouteModel.test.ts',
+ pageTest: 'uapi/tests/depositPageClient.test.tsx',
+ protocolIndex: 'packages/protocol/src/index.js',
+ protocolTypes: 'packages/protocol/src/index.d.ts',
+ protocolTest: 'packages/protocol/test/v43-deposit-route-options.test.js',
+ generator: 'scripts/generate-v43-deposit-route-options.mjs',
+ checker: 'scripts/check-v43-gate5-deposit-route-options.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 sourceRoot(sourcePath) {
+ return `${sourcePath}:${digest(readSource(DEFAULT_REPO_ROOT, sourcePath))}`;
+}
+
+function predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+export const V43_DEPOSIT_ROUTE_OPTIONS_CONTRACT_ROWS = Object.freeze([
+ {
+ rowId: 'deposit-route-session',
+ owner: SOURCE_ROOTS.routeModel,
+ contract:
+ 'DepositRouteSession owns the /deposit route state, five depositing steps, source-safe option synthesis, review boundary, and future Gate 6/7 policy/admission deferrals.',
+ requiredFields: ['schema', 'route', 'steps', 'pipelineOwnership', 'synthesis', 'disclosure', 'proofRoot'],
+ },
+ {
+ rowId: 'deposit-option-synthesis-model',
+ owner: SOURCE_ROOTS.optionModel,
+ contract:
+ 'DepositAssetPackOptionSynthesis proposes multiple source-safe AssetPack options from connected source, depositor instruction, Depository demand, Reading demand, and existing supply signals.',
+ requiredFields: ['DepositOptionSynthesisRequest', 'DepositAssetPackOption', 'buildDepositAssetPackOptionSynthesis'],
+ },
+ {
+ rowId: 'deposit-route-client',
+ owner: SOURCE_ROOTS.client,
+ contract:
+ '/deposit reuses repository context, supply selection, and the existing deposit composer while rendering source-safe AssetPack option cards.',
+ requiredFields: ['TerminalRepositoryContextPanel', 'TerminalSupplySelectionPanel', 'TerminalDepositComposer'],
+ },
+ {
+ rowId: 'deposit-navigation',
+ owner: SOURCE_ROOTS.nav,
+ contract:
+ 'Public navigation, footer, and public shell recognize /deposit as the default depositing path while /terminal remains available for cockpit detail.',
+ requiredFields: ['/deposit', 'Deposit', 'BITCODE_PUBLIC_EXPLAINERS.deposit'],
+ },
+]);
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+
+ return [
+ predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === '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')),
+ predicateResult('notes-records-gate5', SOURCE_ROOTS.notes, sources.notes.includes('Gate 5') && sources.notes.includes('/deposit')),
+ predicateResult('parity-records-gate5', SOURCE_ROOTS.parity, sources.parity.includes('Gate 5') && sources.parity.includes('DepositAssetPackOption')),
+ predicateResult('roadmap-records-gate5', SOURCE_ROOTS.roadmap, sources.roadmap.includes('V43 Gate 5 closure anchor')),
+ predicateResult('readme-records-gate5', SOURCE_ROOTS.readme, sources.readme.includes('V43 Gate 5')),
+ 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-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(
+ 'deposit-client-renders-five-step-route',
+ SOURCE_ROOTS.client,
+ (sources.client.includes('data-testid={`deposit-route-step-${step.id}`}') ||
+ (sources.client.includes('ProductRouteStepGrid') && sources.client.includes('testIdPrefix="deposit-route-step"'))) &&
+ sources.client.includes('Deposit steps'),
+ ),
+ predicateResult('deposit-client-renders-options', SOURCE_ROOTS.client, sources.client.includes('DepositAssetPackOptionSynthesis') && sources.client.includes('Source-safe AssetPack proposals')),
+ predicateResult('deposit-client-reuses-terminal-primitives', SOURCE_ROOTS.client, sources.client.includes('TerminalRepositoryContextPanel') && sources.client.includes('TerminalSupplySelectionPanel') && sources.client.includes('TerminalDepositComposer')),
+ predicateResult('option-model-defines-request', SOURCE_ROOTS.optionModel, sources.optionModel.includes('DepositOptionSynthesisRequest') && sources.optionModel.includes('depositoryDemandSignals') && sources.optionModel.includes('readingDemandSignals')),
+ predicateResult('option-model-builds-multiple-options', SOURCE_ROOTS.optionModel, sources.optionModel.includes('capability-slice') && sources.optionModel.includes('implementation-pattern') && sources.optionModel.includes('proof-operations-slice')),
+ predicateResult('option-model-defers-gate6-policy', SOURCE_ROOTS.optionModel, sources.optionModel.includes('deferred-to-gate6') && sources.optionModel.includes('future-gate7-deposit-option-review')),
+ predicateResult('option-model-forbids-source-leakage', SOURCE_ROOTS.optionModel, sources.optionModel.includes('rawSourceTextVisible: false') && sources.optionModel.includes('rawPromptVisible: false') && sources.optionModel.includes('walletPrivateMaterialVisible: false')),
+ predicateResult('asset-pack-package-exports-model', SOURCE_ROOTS.packageIndex, sources.packageIndex.includes("export * from './deposit-asset-pack-options'")),
+ predicateResult('asset-pack-manifest-exports-model', SOURCE_ROOTS.packageManifest, sources.packageManifest.includes('"./deposit-asset-pack-options"')),
+ predicateResult('public-copy-links-deposit', SOURCE_ROOTS.publicCopy, sources.publicCopy.includes("{ href: '/deposit', label: 'Deposit' }") && sources.publicCopy.includes("deposit: 'Deposit'")),
+ predicateResult('public-explainers-define-deposit', SOURCE_ROOTS.publicExplainers, sources.publicExplainers.includes("title: 'Deposit'") && sources.publicExplainers.includes('AssetPack options')),
+ predicateResult('public-shell-recognizes-deposit', SOURCE_ROOTS.workspaceSurface, sources.workspaceSurface.includes("pathname.startsWith('/deposit')")),
+ predicateResult('nav-links-to-deposit', SOURCE_ROOTS.nav, sources.nav.includes("href === '/deposit'") && sources.nav.includes('BITCODE_PUBLIC_EXPLAINERS.deposit')),
+ predicateResult('footer-links-to-deposit', SOURCE_ROOTS.footer, sources.footer.includes("const DEPOSIT_URL = '/deposit'") && sources.footer.includes('BITCODE_PUBLIC_EXPLAINERS.deposit')),
+ predicateResult('uapi-route-model-test-covers-deposit', SOURCE_ROOTS.routeModelTest, sources.routeModelTest.includes('assertDepositRouteSessionSourceSafe')),
+ predicateResult('uapi-page-test-covers-deposit', SOURCE_ROOTS.pageTest, sources.pageTest.includes('DepositPageClient') && sources.pageTest.includes('deposit-route-step-connect-source')),
+ predicateResult('asset-pack-test-covers-option-synthesis', SOURCE_ROOTS.optionModelTest, sources.optionModelTest.includes('buildDepositAssetPackOptionSynthesis') && sources.optionModelTest.includes('PRIVATE_SOURCE_DO_NOT_SERIALIZE')),
+ predicateResult('protocol-test-covers-artifact', SOURCE_ROOTS.protocolTest, sources.protocolTest.includes('buildV43DepositRouteOptions')),
+ predicateResult('protocol-package-exports-gate5', SOURCE_ROOTS.protocolIndex, sources.protocolIndex.includes('buildV43DepositRouteOptions')),
+ predicateResult('protocol-types-export-gate5', SOURCE_ROOTS.protocolTypes, sources.protocolTypes.includes('buildV43DepositRouteOptions')),
+ predicateResult('package-json-exposes-gate5', SOURCE_ROOTS.packageJson, sources.packageJson.includes('"generate:v43-deposit-route-options"') && sources.packageJson.includes('"check:v43-gate5"')),
+ predicateResult('gate-workflow-runs-gate5', SOURCE_ROOTS.gateWorkflow, sources.gateWorkflow.includes('check-v43-gate5-deposit-route-options.mjs')),
+ predicateResult('canon-workflow-runs-gate5', SOURCE_ROOTS.canonWorkflow, sources.canonWorkflow.includes('check-v43-gate5-deposit-route-options.mjs')),
+ predicateResult('generator-exists', SOURCE_ROOTS.generator, sources.generator.includes('buildV43DepositRouteOptions')),
+ predicateResult('checker-exists', SOURCE_ROOTS.checker, sources.checker.includes('V43 Gate 5 deposit route options check')),
+ ];
+}
+
+export function buildV43DepositRouteOptions({ repoRoot = DEFAULT_REPO_ROOT } = {}) {
+ const predicateResults = buildPredicateResults(repoRoot);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const sourceRoots = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`]),
+ );
+ const artifactRoot = `v43-deposit-route-options:${digest(JSON.stringify({
+ stepIds: V43_DEPOSIT_ROUTE_STEP_IDS,
+ objectIds: V43_DEPOSIT_OPTION_OBJECT_IDS,
+ pipelineIds: V43_DEPOSIT_OPTION_PIPELINE_IDS,
+ sourceSafeFieldIds: V43_DEPOSIT_OPTION_SOURCE_SAFE_FIELD_IDS,
+ forbiddenPayloadIds: V43_DEPOSIT_OPTION_FORBIDDEN_PAYLOAD_IDS,
+ contractRows: V43_DEPOSIT_ROUTE_OPTIONS_CONTRACT_ROWS.map((row) => row.rowId),
+ sourceRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v43-deposit-route-options',
+ schemaId: V43_DEPOSIT_ROUTE_OPTIONS_SCHEMA_ID,
+ version: V43_DEPOSIT_ROUTE_OPTIONS_VERSION,
+ currentTarget: V43_DEPOSIT_ROUTE_OPTIONS_CURRENT_TARGET,
+ sourceSafetyVerdict: V43_DEPOSIT_ROUTE_OPTIONS_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ stepIds: [...V43_DEPOSIT_ROUTE_STEP_IDS],
+ objectIds: [...V43_DEPOSIT_OPTION_OBJECT_IDS],
+ pipelineIds: [...V43_DEPOSIT_OPTION_PIPELINE_IDS],
+ sourceSafeFieldIds: [...V43_DEPOSIT_OPTION_SOURCE_SAFE_FIELD_IDS],
+ forbiddenPayloadIds: [...V43_DEPOSIT_OPTION_FORBIDDEN_PAYLOAD_IDS],
+ contractRows: V43_DEPOSIT_ROUTE_OPTIONS_CONTRACT_ROWS.map((row) => ({
+ ...row,
+ rowRoot: `v43-deposit-route-option-contract:${digest(row.rowId)}`,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ })),
+ sourceRoots,
+ predicateResults,
+ coverage: {
+ depositRouteImplemented: true,
+ fiveStepDepositingUxImplemented: true,
+ optionSynthesisImplemented: true,
+ multipleOptionsSynthesized: true,
+ connectedSourceUsed: true,
+ depositoryDemandSignalsUsed: true,
+ readingDemandSignalsUsed: true,
+ existingDepositorySignalsUsed: true,
+ terminalDepositComposerReused: true,
+ sourceCriticalityDemandRoiPolicyDeferredToGate6: true,
+ admissionAndIndexingDeferredToGate7: true,
+ reviewRequiredBeforeDepositAdmission: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ sourceSnippetVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ },
+ };
+}
+
+export const V43_DEPOSIT_ROUTE_OPTIONS_SOURCE_ROOTS = Object.freeze(
+ Object.fromEntries(Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, sourceRoot(sourcePath)])),
+);
diff --git a/packages/protocol/src/canonical/v43-packs-activity-master-detail.js b/packages/protocol/src/canonical/v43-packs-activity-master-detail.js
new file mode 100644
index 00000000..3cddeed2
--- /dev/null
+++ b/packages/protocol/src/canonical/v43-packs-activity-master-detail.js
@@ -0,0 +1,305 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH =
+ '.bitcode/v43-packs-activity-master-detail.json';
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_SCHEMA_ID =
+ 'bitcode.v43.packsActivityMasterDetail.v1';
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_VERSION = 'V43';
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_CURRENT_TARGET = 'V42';
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_SOURCE_SAFETY_VERDICT =
+ 'source-safe-packs-activity-master-detail-metadata';
+
+export const V43_PACK_ACTIVITY_TYPE_IDS = Object.freeze([
+ 'deposit-option',
+ 'depository-assetpack',
+ 'read-need-fit-preview',
+ 'settled-assetpack',
+ 'settlement',
+ 'compensation',
+ 'delivery',
+ 'repair',
+ 'execution',
+ 'notification',
+]);
+
+export const V43_PACK_ACTIVITY_SEARCH_FIELD_IDS = Object.freeze([
+ 'title',
+ 'description',
+ 'assetPackTitle',
+ 'measurements',
+ 'values',
+ 'activityType',
+ 'transactionType',
+ 'settlementState',
+ 'compensationState',
+ 'deliveryState',
+ 'repairState',
+ 'proofRoots',
+ 'repository',
+ 'timestamp',
+]);
+
+export const V43_PACK_ACTIVITY_SORT_IDS = Object.freeze([
+ 'timestamp',
+ 'title',
+ 'value',
+ 'settlementState',
+ 'compensationState',
+ 'deliveryState',
+ 'repairState',
+]);
+
+export const V43_PACK_ACTIVITY_FILTER_IDS = Object.freeze([
+ 'activityType',
+ 'scope',
+ 'state',
+ 'settlementState',
+ 'compensationState',
+ 'deliveryState',
+ 'repairState',
+ 'repository',
+]);
+
+export const V43_PACK_ACTIVITY_DETAIL_SECTION_IDS = Object.freeze([
+ 'overview',
+ 'measurements',
+ 'values',
+ 'proofs',
+ 'settlement',
+ 'compensation',
+ 'delivery',
+ 'repair',
+ 'telemetry',
+ 'metadata',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ activePointer: 'BITCODE_SPEC.txt',
+ spec: 'BITCODE_SPEC_V43.md',
+ delta: 'BITCODE_SPEC_V43_DELTA.md',
+ notes: 'BITCODE_SPEC_V43_NOTES.md',
+ parity: 'BITCODE_SPEC_V43_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',
+ model: 'uapi/components/base/bitcode/activity/pack-activity-model.ts',
+ route: 'uapi/app/api/packs/activity/route.ts',
+ page: 'uapi/app/packs/page.tsx',
+ client: 'uapi/app/packs/PacksPageClient.tsx',
+ exchangeRedirect: 'uapi/app/exchange/page.tsx',
+ nav: 'uapi/components/base/bitcode/layout/nav.tsx',
+ workspaceSurface: 'uapi/components/base/bitcode/layout/workspace-surface.ts',
+ publicCopy: 'uapi/components/base/bitcode/layout/bitcode-public-copy.ts',
+ publicExplainers: 'uapi/components/base/bitcode/layout/bitcode-public-explainers.ts',
+ packageIndex: 'packages/protocol/src/index.js',
+ packageTypes: 'packages/protocol/src/index.d.ts',
+ packageTest: 'packages/protocol/test/v43-packs-activity-master-detail.test.js',
+ uapiTest: 'uapi/tests/packActivityModel.test.ts',
+ generator: 'scripts/generate-v43-packs-activity-master-detail.mjs',
+ checker: 'scripts/check-v43-gate3-packs-activity-master-detail.mjs',
+});
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'protected-source-payloads',
+ 'unpaid-assetpack-source',
+ 'source-snippets',
+ 'raw-prompts',
+ 'interpolated-prompts',
+ 'raw-provider-responses',
+ 'credentials',
+ 'wallet-private-material',
+ 'settlement-private-payloads',
+]);
+
+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 predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+function sourceRoot(sourcePath) {
+ return `${sourcePath}:${digest(readSource(DEFAULT_REPO_ROOT, sourcePath))}`;
+}
+
+export const V43_PACK_ACTIVITY_CONTRACT_ROWS = Object.freeze([
+ {
+ rowId: 'pack-activity-record',
+ owner: SOURCE_ROOTS.model,
+ contract:
+ 'PackActivityRecord contains source-safe activity type, title, description, repository, measurements, values, proof roots, and state readback.',
+ requiredFields: [
+ 'type',
+ 'title',
+ 'description',
+ 'repository',
+ 'measurements',
+ 'values',
+ 'proofRoots',
+ 'settlementState',
+ 'compensationState',
+ 'deliveryState',
+ 'repairState',
+ 'sourceSafety',
+ ],
+ },
+ {
+ rowId: 'packs-activity-api',
+ owner: SOURCE_ROOTS.route,
+ contract:
+ '/api/packs/activity returns queried PackActivity records, summary, detail projection, and explicit source-safety posture.',
+ requiredFields: ['records', 'summary', 'detail', 'query', 'sourceSafety'],
+ },
+ {
+ rowId: 'packs-route-master-detail',
+ owner: SOURCE_ROOTS.client,
+ contract:
+ '/packs renders searchable, sortable, filterable master-detail pack activity with proof roots and state readback.',
+ requiredFields: ['search', 'type', 'state', 'sort', 'detailId'],
+ },
+ {
+ rowId: 'exchange-compatibility-redirect',
+ owner: SOURCE_ROOTS.exchangeRedirect,
+ contract:
+ '/exchange is retained only as compatibility redirect into /packs while preserving query parameters.',
+ requiredFields: ['/packs', 'searchParams'],
+ },
+]);
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+
+ return [
+ predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === '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')),
+ predicateResult('notes-records-gate3', SOURCE_ROOTS.notes, sources.notes.includes('Gate 3') && sources.notes.includes('/api/packs/activity')),
+ predicateResult('parity-records-gate3', SOURCE_ROOTS.parity, sources.parity.includes('v43-packs-activity-master-detail')),
+ predicateResult('roadmap-records-gate3', SOURCE_ROOTS.roadmap, sources.roadmap.includes('V43 Gate 3 closure anchor')),
+ predicateResult('readme-records-gate3', SOURCE_ROOTS.readme, sources.readme.includes('V43 Gate 3')),
+ predicateResult('protocol-readme-records-gate3', SOURCE_ROOTS.protocolReadme, sources.protocolReadme.includes('V43 Gate 3')),
+ predicateResult('model-defines-packactivity-record', SOURCE_ROOTS.model, sources.model.includes('export interface PackActivityRecord')),
+ predicateResult('model-defines-search-filter-sort', SOURCE_ROOTS.model, sources.model.includes('filterPackActivityRecords') && sources.model.includes('sortPackActivityRecords') && sources.model.includes('queryPackActivityRecords')),
+ predicateResult('model-defines-detail-projection', SOURCE_ROOTS.model, sources.model.includes('buildPackActivityDetailProjection')),
+ predicateResult('model-defines-source-safety-assertion', SOURCE_ROOTS.model, sources.model.includes('assertPackActivitySourceSafe')),
+ predicateResult('api-route-exposes-packactivity-query', SOURCE_ROOTS.route, sources.route.includes('/api/activity') && sources.route.includes('queryPackActivityRecords') && sources.route.includes('sourceSafety')),
+ predicateResult('packs-page-canonical-route', SOURCE_ROOTS.page, sources.page.includes("canonical: '/packs'") && sources.page.includes('PacksPageClient')),
+ predicateResult('packs-client-master-detail', SOURCE_ROOTS.client, sources.client.includes('/api/packs/activity') && sources.client.includes('detailId') && sources.client.includes('Proof roots')),
+ predicateResult('packs-client-search-sort-filter', SOURCE_ROOTS.client, sources.client.includes('Search pack activity') && sources.client.includes('Sort:') && sources.client.includes('Activity type')),
+ predicateResult('exchange-route-redirects-to-packs', SOURCE_ROOTS.exchangeRedirect, sources.exchangeRedirect.includes('redirect(`/packs')),
+ predicateResult('nav-links-to-packs', SOURCE_ROOTS.nav, sources.nav.includes("href === '/packs'") && sources.nav.includes("startsWith('/packs")),
+ predicateResult('public-shell-recognizes-packs', SOURCE_ROOTS.workspaceSurface, sources.workspaceSurface.includes("pathname.startsWith('/packs')")),
+ predicateResult('public-copy-uses-packs-link', SOURCE_ROOTS.publicCopy, sources.publicCopy.includes("{ href: '/packs', label: 'Packs' }")),
+ predicateResult('public-explainers-use-packs', SOURCE_ROOTS.publicExplainers, sources.publicExplainers.includes("title: 'Packs'")),
+ predicateResult('uapi-test-covers-model', SOURCE_ROOTS.uapiTest, sources.uapiTest.includes('pack-activity-model') && sources.uapiTest.includes('assertPackActivitySourceSafe')),
+ predicateResult('protocol-test-covers-artifact', SOURCE_ROOTS.packageTest, sources.packageTest.includes('buildV43PacksActivityMasterDetail')),
+ predicateResult('package-exports-gate3', SOURCE_ROOTS.packageIndex, sources.packageIndex.includes('buildV43PacksActivityMasterDetail')),
+ predicateResult('package-types-export-gate3', SOURCE_ROOTS.packageTypes, sources.packageTypes.includes('buildV43PacksActivityMasterDetail')),
+ predicateResult('package-json-exposes-gate3', SOURCE_ROOTS.packageJson, sources.packageJson.includes('"generate:v43-packs-activity-master-detail"') && sources.packageJson.includes('"check:v43-gate3"')),
+ predicateResult('gate-workflow-runs-gate3', SOURCE_ROOTS.gateWorkflow, sources.gateWorkflow.includes('check-v43-gate3-packs-activity-master-detail.mjs')),
+ predicateResult('canon-workflow-runs-gate3', SOURCE_ROOTS.canonWorkflow, sources.canonWorkflow.includes('check-v43-gate3-packs-activity-master-detail.mjs')),
+ predicateResult('generator-exists', SOURCE_ROOTS.generator, sources.generator.includes('buildV43PacksActivityMasterDetail')),
+ predicateResult('checker-exists', SOURCE_ROOTS.checker, sources.checker.includes('V43 Gate 3 packs activity master-detail check')),
+ ];
+}
+
+export function buildV43PacksActivityMasterDetail(options = {}) {
+ const repoRoot = options.repoRoot || DEFAULT_REPO_ROOT;
+ const predicateResults = buildPredicateResults(repoRoot);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const sourceRoots = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`]),
+ );
+ const artifactRoot = `v43-packs-activity-master-detail:${digest(JSON.stringify({
+ typeIds: V43_PACK_ACTIVITY_TYPE_IDS,
+ searchFieldIds: V43_PACK_ACTIVITY_SEARCH_FIELD_IDS,
+ sortIds: V43_PACK_ACTIVITY_SORT_IDS,
+ filterIds: V43_PACK_ACTIVITY_FILTER_IDS,
+ detailSectionIds: V43_PACK_ACTIVITY_DETAIL_SECTION_IDS,
+ contractRows: V43_PACK_ACTIVITY_CONTRACT_ROWS.map((row) => row.rowId),
+ sourceRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v43-packs-activity-master-detail',
+ schemaId: V43_PACKS_ACTIVITY_MASTER_DETAIL_SCHEMA_ID,
+ version: V43_PACKS_ACTIVITY_MASTER_DETAIL_VERSION,
+ currentTarget: V43_PACKS_ACTIVITY_MASTER_DETAIL_CURRENT_TARGET,
+ sourceSafetyVerdict: V43_PACKS_ACTIVITY_MASTER_DETAIL_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ typeIds: [...V43_PACK_ACTIVITY_TYPE_IDS],
+ searchFieldIds: [...V43_PACK_ACTIVITY_SEARCH_FIELD_IDS],
+ sortIds: [...V43_PACK_ACTIVITY_SORT_IDS],
+ filterIds: [...V43_PACK_ACTIVITY_FILTER_IDS],
+ detailSectionIds: [...V43_PACK_ACTIVITY_DETAIL_SECTION_IDS],
+ contractRows: V43_PACK_ACTIVITY_CONTRACT_ROWS.map((row) => ({
+ ...row,
+ rowRoot: `v43-pack-activity-contract:${digest(row.rowId)}`,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ })),
+ sourceRoots,
+ predicateResults,
+ coverage: {
+ packActivityContractsImplemented: true,
+ packsRouteImplemented: true,
+ packsActivityApiImplemented: true,
+ exchangeRedirectCompatibilityImplemented: true,
+ tableSearchImplemented: true,
+ columnSortImplemented: true,
+ filteringImplemented: true,
+ detailProjectionImplemented: true,
+ proofRootDisplayImplemented: true,
+ settlementStateReadbackImplemented: true,
+ compensationStateReadbackImplemented: true,
+ deliveryStateReadbackImplemented: true,
+ repairStateReadbackImplemented: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ sourceSnippetVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ },
+ };
+}
+
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_SOURCE_ROOTS = Object.freeze(
+ Object.fromEntries(Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, sourceRoot(sourcePath)])),
+);
diff --git a/packages/protocol/src/canonical/v43-promotion-readiness-report.js b/packages/protocol/src/canonical/v43-promotion-readiness-report.js
new file mode 100644
index 00000000..54d6d22e
--- /dev/null
+++ b/packages/protocol/src/canonical/v43-promotion-readiness-report.js
@@ -0,0 +1,430 @@
+// @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 V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH =
+ '.bitcode/v43-promotion-readiness-report.json';
+export const V43_PROMOTION_READINESS_REPORT_SCHEMA_ID =
+ 'bitcode.v43.promotionReadinessReport.v1';
+export const V43_PROMOTION_READINESS_REPORT_VERSION = 'V43';
+export const V43_PROMOTION_READINESS_REPORT_CURRENT_TARGET = 'V42';
+export const V43_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT =
+ 'source-safe-v43-product-routes-agentic-depositing-promotion-metadata';
+
+export const V43_PROMOTION_READINESS_GATE_ARTIFACT_PATHS = Object.freeze([
+ '.bitcode/v43-route-vocabulary-inventory.json',
+ '.bitcode/v43-packs-activity-master-detail.json',
+ '.bitcode/v43-read-route-five-step-ux.json',
+ '.bitcode/v43-deposit-route-options.json',
+ '.bitcode/v43-deposit-policy-compensation.json',
+ '.bitcode/v43-deposit-option-admission.json',
+ '.bitcode/v43-route-ux-product-excellence.json',
+ '.bitcode/v43-cross-route-rehearsal-telemetry-repair.json',
+]);
+
+export const V43_PROMOTION_READINESS_GENERATED_OUTPUTS = Object.freeze([
+ 'BITCODE_SPEC_V43_PROVEN.md',
+ '.bitcode/v43-spec-family-report.json',
+ '.bitcode/v43-canonical-input-report.json',
+ '.bitcode/v43-canon-posture-drift-report.json',
+ V43_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-v43-gate10-promotion-readiness.mjs', [
+ 'V43 Gate 10 promotion readiness',
+ '--promotion-mode',
+ 'promotedPointer',
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ ]),
+ source('scripts/generate-v43-promotion-readiness-report.mjs', [
+ 'buildV43PromotionReadinessReport',
+ V43_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ 'v43-promotion-readiness-report',
+ ]),
+ source('scripts/promote-bitcode-canon.mjs', [
+ "if (version === 'V43')",
+ 'const v43Gate10Command',
+ 'buildDerivedV43CommitMessageBody',
+ 'scripts/check-v43-gate10-promotion-readiness.mjs',
+ ]),
+ source('scripts/prepare-bitcode-spec-family-promotion.mjs', [
+ "if (version === 'V43')",
+ 'V43 canonical system specification for product routes and agentic depositing',
+ 'BITCODE_SPEC_V43_PROVEN.md',
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ ]),
+ source('scripts/prepare-bitcode-runtime-canon-promotion.mjs', [
+ '--next-draft',
+ 'rewritePackageReadme',
+ 'rewriteRuntimeDataState',
+ ]),
+ source('.github/workflows/v43-canon-promotion.yml', [
+ "head.ref == 'version/v43'",
+ 'node scripts/prepare-bitcode-spec-family-promotion.mjs --version V43',
+ 'node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V43 --next-draft V44',
+ 'node scripts/generate-bitcode-proven.mjs --version V43',
+ 'node scripts/check-bitcode-spec-family.mjs --version V43 --mode promoted --current-target V43',
+ 'BITCODE_SPEC_V43_PROVEN.md',
+ 'Promote V43 canon files',
+ ]),
+ source('.github/workflows/bitcode-gate-quality.yml', [
+ 'check-v43-gate10-promotion-readiness.mjs',
+ 'elif [ "$POINTER" = "V43" ]',
+ '--active-canon V43 --draft-target V44',
+ ]),
+ source('.github/workflows/bitcode-canon-quality.yml', [
+ 'check-v43-gate10-promotion-readiness.mjs',
+ 'elif [ "$POINTER" = "V43" ]',
+ '--active-canon V43 --draft-target V44',
+ ]),
+ source('packages/protocol/src/canonical/proven-generator.js', [
+ 'buildV43ProvenPackage',
+ 'buildV43PromotionReadinessReport',
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ ]),
+ source('packages/protocol/test/v43-promotion-readiness.test.js', [
+ 'builds source-safe V43 PromotionReadinessReport',
+ 'v43-promotion-readiness-report',
+ 'V43 Promotion Readiness',
+ ]),
+ source('packages/protocol/src/canonical/v21-specifying.js', [
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ ]),
+ source('package.json', [
+ 'generate:v43-promotion-readiness',
+ 'check:v43-promotion-readiness',
+ 'check:v43-gate10',
+ ]),
+]);
+
+const REQUIRED_DOCUMENTATION_EVIDENCE = Object.freeze([
+ source('BITCODE_SPEC_V43.md', [
+ 'V43 promotion readiness canon',
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ 'V43 active / draft V44',
+ ]),
+ source('BITCODE_SPEC_V43_DELTA.md', [
+ 'Gate 10: V43 Promotion Readiness',
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ 'promotion scripts support V43',
+ ]),
+ source('BITCODE_SPEC_V43_NOTES.md', [
+ 'Gate 10: V43 Promotion Readiness',
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ 'active V43 / draft V44',
+ ]),
+ source('BITCODE_SPEC_V43_PARITY_MATRIX.md', [
+ '## Gate 10 Promotion readiness parity',
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ 'closed',
+ ]),
+ source('SPECIFICATIONS_ROADMAP.md', [
+ 'V43 Gate 10 closure anchor',
+ 'BITCODE_SPEC_V43_PROVEN.md',
+ ]),
+ source('README.md', [
+ 'check:v43-gate10',
+ 'v43-canon-promotion.yml',
+ ]),
+ source('packages/protocol/README.md', [
+ 'V43 Gate 10',
+ 'V43` active, `V44` 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 buildV43PromotionReadinessReport(input = {}) {
+ const version = input.version || V43_PROMOTION_READINESS_REPORT_VERSION;
+ const currentTarget = input.currentTarget || V43_PROMOTION_READINESS_REPORT_CURRENT_TARGET;
+ const generatedAt = input.generatedAt || '2026-05-29T00: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 = V43_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:v43-gate1',
+ 'pnpm run check:v43-gate2',
+ 'pnpm run check:v43-gate3',
+ 'pnpm run check:v43-gate4',
+ 'pnpm run check:v43-gate5',
+ 'pnpm run check:v43-gate6',
+ 'pnpm run check:v43-gate7',
+ 'pnpm run check:v43-gate8',
+ 'pnpm run check:v43-gate9',
+ 'pnpm run check:v43-gate10',
+ 'node scripts/promote-bitcode-canon.mjs --version V43 --commit HEAD --dry-run',
+ ];
+ const coverage = {
+ requiredGateArtifactPaths: [...V43_PROMOTION_READINESS_GATE_ARTIFACT_PATHS],
+ generatedProofOutputs: [...V43_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: V43_PROMOTION_READINESS_GENERATED_OUTPUTS.includes('BITCODE_SPEC_V43_PROVEN.md'),
+ promotionWorkflowCovered: sourceEvidence.some((entry) => entry.relativePath === '.github/workflows/v43-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: 'V42 active / V43 draft',
+ postPromotionPosture: 'V43 active / V44 draft',
+ valueBearingMainnetAdmission: false,
+ credentialsSerialized: forbiddenMarkerDetected,
+ protectedSourceVisible: false,
+ rawProtectedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ walletPrivateMaterialVisible: false,
+ };
+ const artifactSeed = {
+ version,
+ currentTarget,
+ validationCommands,
+ coverage,
+ sourceSafetyVerdict: V43_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ };
+
+ return {
+ artifactId: 'v43-promotion-readiness-report',
+ schemaId: V43_PROMOTION_READINESS_REPORT_SCHEMA_ID,
+ version,
+ currentTarget,
+ generatedAt,
+ sourceSafetyVerdict: V43_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ prePromotionPosture: 'V42 active / V43 draft',
+ postPromotionPosture: 'V43 active / V44 draft',
+ branchProtection: {
+ directMainPushAdmitted: false,
+ promotionPrRequired: true,
+ versionBranch: 'version/v43',
+ versionPromotionPullRequestTitlePrefix: 'V43 Canonical Promotion',
+ },
+ generatedArtifactPolicy: {
+ provenAppendixPath: 'BITCODE_SPEC_V43_PROVEN.md',
+ provenAppendixRequiredBeforePromotion: false,
+ generatedArtifactPrefix: '.bitcode/v43-',
+ promotionOverwritesPreviewArtifacts: true,
+ secretValuesSerialized: false,
+ protectedSourceSerialized: false,
+ rawProtectedPromptSerialized: false,
+ rawProviderResponseSerialized: false,
+ unpaidAssetPackSourceSerialized: false,
+ },
+ validationCommands,
+ gateArtifactEvidence,
+ sourceEvidence,
+ documentationEvidence,
+ coverage,
+ failClosedResult:
+ 'promotion remains blocked when any V43 route vocabulary inventory, Packs activity master-detail proof, Read five-step UX proof, Deposit option synthesis proof, deposit policy/compensation proof, deposit option admission proof, route UX product proof, cross-route rehearsal, workflow, promotion script, generated proof support, source-safety check, or value-bearing mainnet block is missing',
+ artifactRoot: `v43-product-route-promotion-readiness-report:${sha256(canonicalJson(artifactSeed)).slice(7, 31)}`,
+ passed: failures.length === 0,
+ failures,
+ validationCommand: 'pnpm run check:v43-gate10',
+ };
+}
+
+export function listMissingV43PromotionReadinessSources(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/v43-read-route-five-step-ux.js b/packages/protocol/src/canonical/v43-read-route-five-step-ux.js
new file mode 100644
index 00000000..cdd11005
--- /dev/null
+++ b/packages/protocol/src/canonical/v43-read-route-five-step-ux.js
@@ -0,0 +1,277 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH = '.bitcode/v43-read-route-five-step-ux.json';
+export const V43_READ_ROUTE_FIVE_STEP_UX_SCHEMA_ID = 'bitcode.v43.readRouteFiveStepUx.v1';
+export const V43_READ_ROUTE_FIVE_STEP_UX_VERSION = 'V43';
+export const V43_READ_ROUTE_FIVE_STEP_UX_CURRENT_TARGET = 'V42';
+export const V43_READ_ROUTE_FIVE_STEP_UX_SOURCE_SAFETY_VERDICT = 'source-safe-read-route-five-step-metadata';
+
+export const V43_READ_ROUTE_STEP_IDS = Object.freeze([
+ 'request-read',
+ 'review-synthesized-need',
+ 'request-fit',
+ 'review-synthesized-asset-pack',
+ 'buy-asset-pack-settle',
+]);
+
+export const V43_READ_ROUTE_OBJECT_IDS = Object.freeze([
+ 'ReadRouteSession',
+ 'Read Request',
+ 'synthesized Need',
+ 'Need review decision',
+ 'Finding Fits request',
+ 'AssetPack preview',
+ 'settlement quote',
+ 'delivery receipt',
+]);
+
+export const V43_READ_ROUTE_PIPELINE_IDS = Object.freeze([
+ 'ReadNeedComprehensionSynthesis',
+ 'ReadFitsFindingSynthesis',
+]);
+
+export const V43_READ_ROUTE_SOURCE_SAFE_FIELD_IDS = Object.freeze([
+ 'read_request_summary',
+ 'read_need_measurements',
+ 'need_feedback_history',
+ 'depository_candidate_counts',
+ 'selected_fit_ids',
+ 'asset_pack_measurements',
+ 'quality_posture',
+ 'proof_roots',
+ 'btc_fee_quote',
+ 'settlement_state',
+ 'delivery_posture',
+]);
+
+export const V43_READ_ROUTE_FORBIDDEN_PAYLOAD_IDS = Object.freeze([
+ 'protected_source_payload',
+ 'raw_protected_prompt',
+ 'raw_provider_response',
+ 'unpaid_assetpack_source',
+ 'wallet_private_material',
+ 'settlement_private_payload',
+ 'ledger_write_authority',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ activePointer: 'BITCODE_SPEC.txt',
+ spec: 'BITCODE_SPEC_V43.md',
+ delta: 'BITCODE_SPEC_V43_DELTA.md',
+ notes: 'BITCODE_SPEC_V43_NOTES.md',
+ parity: 'BITCODE_SPEC_V43_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',
+ routeModel: 'uapi/app/read/read-route-model.ts',
+ page: 'uapi/app/read/page.tsx',
+ client: 'uapi/app/read/ReadPageClient.tsx',
+ terminalRoutes: 'uapi/app/terminal/terminal-routes.ts',
+ terminalWorkbench: 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ terminalReadingState: 'uapi/app/terminal/terminal-enterprise-reading-ux-state.ts',
+ nav: 'uapi/components/base/bitcode/layout/nav.tsx',
+ workspaceSurface: 'uapi/components/base/bitcode/layout/workspace-surface.ts',
+ publicCopy: 'uapi/components/base/bitcode/layout/bitcode-public-copy.ts',
+ publicExplainers: 'uapi/components/base/bitcode/layout/bitcode-public-explainers.ts',
+ footer: 'uapi/components/base/bitcode/layout/footer.tsx',
+ packageIndex: 'packages/protocol/src/index.js',
+ packageTypes: 'packages/protocol/src/index.d.ts',
+ packageTest: 'packages/protocol/test/v43-read-route-five-step-ux.test.js',
+ routeModelTest: 'uapi/tests/readRouteModel.test.ts',
+ pageTest: 'uapi/tests/readPageClient.test.tsx',
+ generator: 'scripts/generate-v43-read-route-five-step-ux.mjs',
+ checker: 'scripts/check-v43-gate4-read-route-five-step-ux.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 sourceRoot(sourcePath) {
+ return `${sourcePath}:${digest(readSource(DEFAULT_REPO_ROOT, sourcePath))}`;
+}
+
+function predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+export const V43_READ_ROUTE_CONTRACT_ROWS = Object.freeze([
+ {
+ rowId: 'read-route-session',
+ owner: SOURCE_ROOTS.routeModel,
+ contract:
+ 'ReadRouteSession owns the /read route state, five Reading steps, accepted-Need gate, source-safe preview boundary, settlement quote, and delivery unlock posture.',
+ requiredFields: ['schema', 'route', 'steps', 'readObjects', 'pipelineOwnership', 'disclosure', 'proofRoot'],
+ },
+ {
+ rowId: 'read-route-page',
+ owner: SOURCE_ROOTS.page,
+ contract:
+ '/read is the default Reading route with metadata, public shell chrome, Suspense fallback, and ReadPageClient.',
+ requiredFields: ['canonical', 'ReadPageClient', 'PublicShellFrame'],
+ },
+ {
+ rowId: 'read-route-client',
+ owner: SOURCE_ROOTS.client,
+ contract:
+ 'ReadPageClient renders request-read, Need review, Finding Fits request, source-safe preview, settlement/delivery posture, route-owned activity readback, and live workbench controls.',
+ requiredFields: [
+ 'TerminalDepositReadWorkbench',
+ 'TerminalRepositoryContextPanel',
+ 'TerminalReadScenarioPanel',
+ 'buildReadRouteSession',
+ 'ReadNeedComprehensionSynthesis',
+ 'ReadFitsFindingSynthesis',
+ ],
+ },
+ {
+ rowId: 'navigation-read-route',
+ owner: SOURCE_ROOTS.nav,
+ contract:
+ 'Public navigation and footer expose /read as the primary Reading path while retained Terminal remains available for debug-compatible detail.',
+ requiredFields: ['/read', 'Read', 'BITCODE_PUBLIC_EXPLAINERS.read'],
+ },
+]);
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+
+ return [
+ predicateResult('active-canon-pointer-remains-v42', SOURCE_ROOTS.activePointer, sources.activePointer.trim() === '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')),
+ predicateResult('notes-records-gate4', SOURCE_ROOTS.notes, sources.notes.includes('Gate 4') && sources.notes.includes('/read')),
+ predicateResult('parity-records-gate4', SOURCE_ROOTS.parity, sources.parity.includes('Gate 4') && sources.parity.includes('ReadRouteSession')),
+ predicateResult('roadmap-records-gate4', SOURCE_ROOTS.roadmap, sources.roadmap.includes('V43 Gate 4 closure anchor')),
+ predicateResult('readme-records-gate4', SOURCE_ROOTS.readme, sources.readme.includes('V43 Gate 4')),
+ predicateResult('protocol-readme-records-gate4', SOURCE_ROOTS.protocolReadme, sources.protocolReadme.includes('V43 Gate 4')),
+ predicateResult('route-model-defines-read-route-session', SOURCE_ROOTS.routeModel, sources.routeModel.includes("schema: 'bitcode.read.route-session'") && sources.routeModel.includes('assertReadRouteSessionSourceSafe')),
+ predicateResult('route-model-defines-pipeline-ownership', SOURCE_ROOTS.routeModel, sources.routeModel.includes('ReadNeedComprehensionSynthesis') && sources.routeModel.includes('ReadFitsFindingSynthesis')),
+ predicateResult('route-model-forbids-source-leakage', SOURCE_ROOTS.routeModel, sources.routeModel.includes('protectedSourceVisible: false') && sources.routeModel.includes('unpaidAssetPackSourceVisible: false')),
+ predicateResult('read-page-canonical-route', SOURCE_ROOTS.page, sources.page.includes("canonical: '/read'") && sources.page.includes('ReadPageClient')),
+ predicateResult(
+ 'read-client-renders-five-step-route',
+ SOURCE_ROOTS.client,
+ (sources.client.includes('data-testid={`read-route-step-${step.id}`}') ||
+ (sources.client.includes('ProductRouteStepGrid') && sources.client.includes('testIdPrefix="read-route-step"'))) &&
+ sources.client.includes('Reading steps'),
+ ),
+ predicateResult('read-client-reuses-live-workbench', SOURCE_ROOTS.client, sources.client.includes('TerminalDepositReadWorkbench') && sources.client.includes('showDemonstrationWorkbench={false}')),
+ predicateResult('read-client-renders-source-safe-session', SOURCE_ROOTS.client, sources.client.includes('Source-safe read state') && sources.client.includes('Disclosure boundary')),
+ predicateResult('read-client-records-activity', SOURCE_ROOTS.client, sources.client.includes('/api/executions/history') && sources.client.includes('buildTerminalExecutionHistoryRequest')),
+ predicateResult('terminal-routes-define-read', SOURCE_ROOTS.terminalRoutes, sources.terminalRoutes.includes("READ_ROUTE = '/read'") && sources.terminalRoutes.includes('buildReadHref')),
+ predicateResult('workbench-preserves-execution-stream', SOURCE_ROOTS.terminalWorkbench, sources.terminalWorkbench.includes('BitcodeExecutionStreamPanel') && sources.terminalWorkbench.includes('Request Fit')),
+ predicateResult('reading-state-preserves-five-steps', SOURCE_ROOTS.terminalReadingState, V43_READ_ROUTE_STEP_IDS.every((id) => sources.terminalReadingState.includes(`'${id}'`))),
+ predicateResult('nav-links-to-read', SOURCE_ROOTS.nav, sources.nav.includes("href === '/read'") && sources.nav.includes('BITCODE_PUBLIC_EXPLAINERS.read')),
+ predicateResult('public-shell-recognizes-read', SOURCE_ROOTS.workspaceSurface, sources.workspaceSurface.includes("pathname.startsWith('/read')")),
+ predicateResult('public-copy-uses-read-link', SOURCE_ROOTS.publicCopy, sources.publicCopy.includes("{ href: '/read', label: 'Read' }")),
+ predicateResult('public-explainers-define-read', SOURCE_ROOTS.publicExplainers, sources.publicExplainers.includes("title: 'Read'") && sources.publicExplainers.includes('Finding Fits')),
+ predicateResult('footer-links-to-read', SOURCE_ROOTS.footer, sources.footer.includes("const READ_URL = '/read'") && sources.footer.includes('BITCODE_PUBLIC_EXPLAINERS.read')),
+ predicateResult('uapi-route-model-test-covers-read', SOURCE_ROOTS.routeModelTest, sources.routeModelTest.includes('assertReadRouteSessionSourceSafe')),
+ predicateResult('uapi-page-test-covers-read', SOURCE_ROOTS.pageTest, sources.pageTest.includes('ReadPageClient') && sources.pageTest.includes('read-route-step-request-read')),
+ predicateResult('protocol-test-covers-artifact', SOURCE_ROOTS.packageTest, sources.packageTest.includes('buildV43ReadRouteFiveStepUx')),
+ predicateResult('package-exports-gate4', SOURCE_ROOTS.packageIndex, sources.packageIndex.includes('buildV43ReadRouteFiveStepUx')),
+ predicateResult('package-types-export-gate4', SOURCE_ROOTS.packageTypes, sources.packageTypes.includes('buildV43ReadRouteFiveStepUx')),
+ predicateResult('package-json-exposes-gate4', SOURCE_ROOTS.packageJson, sources.packageJson.includes('"generate:v43-read-route-five-step-ux"') && sources.packageJson.includes('"check:v43-gate4"')),
+ predicateResult('gate-workflow-runs-gate4', SOURCE_ROOTS.gateWorkflow, sources.gateWorkflow.includes('check-v43-gate4-read-route-five-step-ux.mjs')),
+ predicateResult('canon-workflow-runs-gate4', SOURCE_ROOTS.canonWorkflow, sources.canonWorkflow.includes('check-v43-gate4-read-route-five-step-ux.mjs')),
+ predicateResult('generator-exists', SOURCE_ROOTS.generator, sources.generator.includes('buildV43ReadRouteFiveStepUx')),
+ predicateResult('checker-exists', SOURCE_ROOTS.checker, sources.checker.includes('V43 Gate 4 read route five-step UX check')),
+ ];
+}
+
+export function buildV43ReadRouteFiveStepUx({ repoRoot = DEFAULT_REPO_ROOT } = {}) {
+ const predicateResults = buildPredicateResults(repoRoot);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const sourceRoots = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`]),
+ );
+ const artifactRoot = `v43-read-route-five-step-ux:${digest(JSON.stringify({
+ stepIds: V43_READ_ROUTE_STEP_IDS,
+ objectIds: V43_READ_ROUTE_OBJECT_IDS,
+ pipelineIds: V43_READ_ROUTE_PIPELINE_IDS,
+ sourceSafeFieldIds: V43_READ_ROUTE_SOURCE_SAFE_FIELD_IDS,
+ forbiddenPayloadIds: V43_READ_ROUTE_FORBIDDEN_PAYLOAD_IDS,
+ contractRows: V43_READ_ROUTE_CONTRACT_ROWS.map((row) => row.rowId),
+ sourceRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v43-read-route-five-step-ux',
+ schemaId: V43_READ_ROUTE_FIVE_STEP_UX_SCHEMA_ID,
+ version: V43_READ_ROUTE_FIVE_STEP_UX_VERSION,
+ currentTarget: V43_READ_ROUTE_FIVE_STEP_UX_CURRENT_TARGET,
+ sourceSafetyVerdict: V43_READ_ROUTE_FIVE_STEP_UX_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ stepIds: [...V43_READ_ROUTE_STEP_IDS],
+ objectIds: [...V43_READ_ROUTE_OBJECT_IDS],
+ pipelineIds: [...V43_READ_ROUTE_PIPELINE_IDS],
+ sourceSafeFieldIds: [...V43_READ_ROUTE_SOURCE_SAFE_FIELD_IDS],
+ forbiddenPayloadIds: [...V43_READ_ROUTE_FORBIDDEN_PAYLOAD_IDS],
+ contractRows: V43_READ_ROUTE_CONTRACT_ROWS.map((row) => ({
+ ...row,
+ rowRoot: `v43-read-route-contract:${digest(row.rowId)}`,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ })),
+ sourceRoots,
+ predicateResults,
+ coverage: {
+ readRouteImplemented: true,
+ fiveStepUxImplemented: true,
+ readNeedReviewImplemented: true,
+ findingFitsRequestImplemented: true,
+ assetPackPreviewImplemented: true,
+ settlementDeliveryBoundaryImplemented: true,
+ executionStreamRetained: true,
+ terminalDebugCompatibilityRetained: true,
+ acceptedNeedRequiredBeforeFindingFits: true,
+ sourceSafePreviewBeforeSettlement: true,
+ deliveryRequiresPaidReadRights: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ sourceSnippetVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ },
+ };
+}
+
+export const V43_READ_ROUTE_FIVE_STEP_UX_SOURCE_ROOTS = Object.freeze(
+ Object.fromEntries(Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, sourceRoot(sourcePath)])),
+);
diff --git a/packages/protocol/src/canonical/v43-route-ux-product-excellence.js b/packages/protocol/src/canonical/v43-route-ux-product-excellence.js
new file mode 100644
index 00000000..2a79d850
--- /dev/null
+++ b/packages/protocol/src/canonical/v43-route-ux-product-excellence.js
@@ -0,0 +1,248 @@
+// @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);
+const DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH = '.bitcode/v43-route-ux-product-excellence.json';
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_SCHEMA_ID = 'bitcode.v43.routeUxProductExcellence.v1';
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_VERSION = 'V43';
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_CURRENT_TARGET = 'V42';
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_SOURCE_SAFETY_VERDICT =
+ 'source-safe-product-route-ux-metadata';
+
+export const V43_ROUTE_UX_OBJECT_IDS = Object.freeze([
+ 'ProductRouteShell',
+ 'ProductRouteStepGrid',
+ 'ProductRouteStatePanel',
+ 'ProductRouteDisclosure',
+ '/packs product route',
+ '/read product route',
+ '/deposit product route',
+]);
+
+export const V43_ROUTE_UX_FIELD_IDS = Object.freeze([
+ 'routeLabel',
+ 'routeTitle',
+ 'routeSummary',
+ 'metric',
+ 'step',
+ 'statePanel',
+ 'progressiveDisclosure',
+ 'sourceSafeBoundary',
+]);
+
+export const V43_ROUTE_UX_FORBIDDEN_PAYLOAD_IDS = Object.freeze([
+ 'protected_source_payload',
+ 'raw_source_text',
+ 'unpaid_assetpack_source',
+ 'raw_protected_prompt',
+ 'interpolated_prompt',
+ 'raw_provider_response',
+ 'wallet_private_material',
+ 'settlement_private_payload',
+]);
+
+const SOURCE_ROOTS = Object.freeze({
+ activePointer: 'BITCODE_SPEC.txt',
+ spec: 'BITCODE_SPEC_V43.md',
+ delta: 'BITCODE_SPEC_V43_DELTA.md',
+ notes: 'BITCODE_SPEC_V43_NOTES.md',
+ parity: 'BITCODE_SPEC_V43_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',
+ productRouteShell: 'uapi/components/base/bitcode/routes/product-route-shell.tsx',
+ packsClient: 'uapi/app/packs/PacksPageClient.tsx',
+ readClient: 'uapi/app/read/ReadPageClient.tsx',
+ depositClient: 'uapi/app/deposit/DepositPageClient.tsx',
+ packsTest: 'uapi/tests/packsPageClient.test.tsx',
+ readTest: 'uapi/tests/readPageClient.test.tsx',
+ depositTest: 'uapi/tests/depositPageClient.test.tsx',
+ protocolIndex: 'packages/protocol/src/index.js',
+ protocolTypes: 'packages/protocol/src/index.d.ts',
+ protocolTest: 'packages/protocol/test/v43-route-ux-product-excellence.test.js',
+ generator: 'scripts/generate-v43-route-ux-product-excellence.mjs',
+ checker: 'scripts/check-v43-gate8-route-ux-product-excellence.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 predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+export const V43_ROUTE_UX_CONTRACT_ROWS = Object.freeze([
+ {
+ rowId: 'shared-product-route-shell',
+ owner: SOURCE_ROOTS.productRouteShell,
+ contract:
+ 'Packs, Reading, and Depositing render through a shared themed product shell with route label, title, concise summary, and source-safe route metrics.',
+ requiredFields: ['ProductRouteShell', 'route-shell-packs', 'route-shell-read', 'route-shell-deposit'],
+ },
+ {
+ rowId: 'keyboard-five-step-navigation',
+ owner: SOURCE_ROOTS.productRouteShell,
+ contract:
+ 'Reading and Depositing use a shared button-based step grid with visible active state, aria-current step semantics, and stable data attributes for route state tests.',
+ requiredFields: ['ProductRouteStepGrid', 'aria-current', 'data-reading-step-state', 'data-deposit-step-state'],
+ },
+ {
+ rowId: 'state-panels-empty-error-loading',
+ owner: SOURCE_ROOTS.productRouteShell,
+ contract:
+ 'Packs, Reading, and Depositing share compact loading, empty, and error state panels without leaking source-bearing payloads.',
+ requiredFields: ['ProductRouteStatePanel', 'loading', 'empty', 'error'],
+ },
+ {
+ rowId: 'progressive-source-safe-detail',
+ owner: SOURCE_ROOTS.productRouteShell,
+ contract:
+ 'Read and Deposit route proof detail remains expandable by default, with visible metadata and withheld protected-source boundaries stated as route state.',
+ requiredFields: ['ProductRouteDisclosure', 'Disclosure boundary', 'Withheld'],
+ },
+ {
+ rowId: 'product-copy-reduced',
+ owner: SOURCE_ROOTS.spec,
+ contract:
+ 'In-app product copy is concise route/status vocabulary rather than self-referential instructions, while deeper protocol explanation stays in public documentation and proof artifacts.',
+ requiredFields: ['self-referential product copy', 'route structure', 'progressive proof detail'],
+ },
+]);
+
+function buildPredicateResults(repoRoot) {
+ const sources = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, readSource(repoRoot, sourcePath)]),
+ );
+ 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('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')),
+ predicateResult('notes-records-gate8', SOURCE_ROOTS.notes, sources.notes.includes('Gate 8') && sources.notes.includes('product route shell')),
+ predicateResult('parity-records-gate8', SOURCE_ROOTS.parity, sources.parity.includes('UX/UI product excellence') && sources.parity.includes('v43-route-ux-product-excellence')),
+ predicateResult('roadmap-records-gate8', SOURCE_ROOTS.roadmap, sources.roadmap.includes('V43 Gate 8 closure anchor')),
+ predicateResult('readme-records-gate8', SOURCE_ROOTS.readme, sources.readme.includes('V43 Gate 8')),
+ predicateResult('protocol-readme-records-gate8', SOURCE_ROOTS.protocolReadme, sources.protocolReadme.includes('V43 Gate 8')),
+ predicateResult('shared-shell-implements-route-shell', SOURCE_ROOTS.productRouteShell, sources.productRouteShell.includes('ProductRouteShell') && sources.productRouteShell.includes('ProductRouteMetric')),
+ predicateResult('shared-shell-implements-step-grid', SOURCE_ROOTS.productRouteShell, sources.productRouteShell.includes('ProductRouteStepGrid') && sources.productRouteShell.includes('aria-current')),
+ predicateResult(
+ 'shared-shell-implements-state-panel',
+ SOURCE_ROOTS.productRouteShell,
+ sources.productRouteShell.includes('ProductRouteStatePanel') &&
+ sources.productRouteShell.includes('variant:') &&
+ sources.productRouteShell.includes('"loading" | "empty" | "error"'),
+ ),
+ predicateResult('shared-shell-implements-disclosure', SOURCE_ROOTS.productRouteShell, sources.productRouteShell.includes('ProductRouteDisclosure') && sources.productRouteShell.includes(' !predicate.passed)
+ .map((predicate) => predicate.id);
+ const sourceRoots = Object.fromEntries(
+ Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, `${sourcePath}:${digest(readSource(repoRoot, sourcePath))}`]),
+ );
+ const artifactRoot = `v43-route-ux-product-excellence:${digest(JSON.stringify({
+ objectIds: V43_ROUTE_UX_OBJECT_IDS,
+ fieldIds: V43_ROUTE_UX_FIELD_IDS,
+ forbiddenPayloadIds: V43_ROUTE_UX_FORBIDDEN_PAYLOAD_IDS,
+ contractRows: V43_ROUTE_UX_CONTRACT_ROWS.map((row) => row.rowId),
+ sourceRoots,
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v43-route-ux-product-excellence',
+ schemaId: V43_ROUTE_UX_PRODUCT_EXCELLENCE_SCHEMA_ID,
+ version: V43_ROUTE_UX_PRODUCT_EXCELLENCE_VERSION,
+ currentTarget: V43_ROUTE_UX_PRODUCT_EXCELLENCE_CURRENT_TARGET,
+ sourceSafetyVerdict: V43_ROUTE_UX_PRODUCT_EXCELLENCE_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ objectIds: [...V43_ROUTE_UX_OBJECT_IDS],
+ fieldIds: [...V43_ROUTE_UX_FIELD_IDS],
+ forbiddenPayloadIds: [...V43_ROUTE_UX_FORBIDDEN_PAYLOAD_IDS],
+ contractRows: V43_ROUTE_UX_CONTRACT_ROWS.map((row) => ({
+ ...row,
+ rowRoot: `v43-route-ux-contract:${digest(row.rowId)}`,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ })),
+ sourceRoots,
+ predicateResults,
+ coverage: {
+ sharedRouteShellImplemented: true,
+ sharedStepGridImplemented: true,
+ keyboardCurrentStepImplemented: true,
+ routeMetricsImplemented: true,
+ productRouteStatePanelsImplemented: true,
+ loadingEmptyErrorStatesImplemented: true,
+ progressiveDisclosureImplemented: true,
+ packsRouteUsesSharedShell: true,
+ readRouteUsesSharedShell: true,
+ depositRouteUsesSharedShell: true,
+ selfReferentialProductCopyReduced: true,
+ executionStreamReadbackRetained: true,
+ responsiveGridPostureImplemented: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ },
+ };
+}
+
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_SOURCE_ROOTS = Object.freeze(
+ Object.fromEntries(Object.entries(SOURCE_ROOTS).map(([key, sourcePath]) => [key, sourcePath])),
+);
diff --git a/packages/protocol/src/canonical/v43-route-vocabulary-inventory.js b/packages/protocol/src/canonical/v43-route-vocabulary-inventory.js
new file mode 100644
index 00000000..04f2e877
--- /dev/null
+++ b/packages/protocol/src/canonical/v43-route-vocabulary-inventory.js
@@ -0,0 +1,486 @@
+// @ts-check
+
+import crypto from 'node:crypto';
+import { execFileSync } from 'node:child_process';
+import { existsSync, readdirSync, 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 DEFAULT_REPO_ROOT = path.resolve(__dirname, '..', '..', '..', '..');
+
+export const V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH =
+ '.bitcode/v43-route-vocabulary-inventory.json';
+export const V43_ROUTE_VOCABULARY_INVENTORY_SCHEMA_ID =
+ 'bitcode.v43.routeVocabularyInventory.v1';
+export const V43_ROUTE_VOCABULARY_INVENTORY_VERSION = 'V43';
+export const V43_ROUTE_VOCABULARY_INVENTORY_CURRENT_TARGET = 'V42';
+export const V43_ROUTE_VOCABULARY_INVENTORY_SOURCE_SAFETY_VERDICT =
+ 'source-safe-route-vocabulary-inventory-metadata';
+
+export const V43_ROUTE_VOCABULARY_TOKEN_IDS = Object.freeze([
+ 'route:/exchange',
+ 'route:/terminal',
+ 'route:/packs',
+ 'route:/read',
+ 'route:/deposit',
+ 'symbol:Exchange',
+ 'symbol:Terminal',
+ 'symbol:Packs',
+ 'symbol:Reading',
+ 'symbol:Depositing',
+ 'symbol:PackActivity',
+ 'symbol:DepositAssetPackOption',
+ 'word:exchange',
+ 'word:terminal',
+ 'word:self-referential',
+]);
+
+export const V43_ROUTE_VOCABULARY_CATEGORY_IDS = Object.freeze([
+ 'route',
+ 'component',
+ 'test',
+ 'doc',
+ 'api',
+ 'telemetry',
+ 'workflow',
+ 'script',
+ 'package',
+ 'spec',
+]);
+
+export const V43_ROUTE_VOCABULARY_MIGRATION_ROW_IDS = Object.freeze([
+ 'packs-route-master-detail',
+ 'read-route-five-step-reading',
+ 'deposit-route-agentic-options',
+ 'retained-debug-cockpit',
+ 'redirect-compatibility',
+ 'self-referential-copy-removal',
+]);
+
+const TOKEN_SPECS = Object.freeze([
+ ['route:/exchange', /\/exchange(?=$|[/?#"'`\s),\]}])/gu],
+ ['route:/terminal', /\/terminal(?=$|[/?#"'`\s),\]}])/gu],
+ ['route:/packs', /\/packs(?=$|[/?#"'`\s),\]}])/gu],
+ ['route:/read', /\/read(?=$|[/?#"'`\s),\]}])/gu],
+ ['route:/deposit', /\/deposit(?=$|[/?#"'`\s),\]}])/gu],
+ ['symbol:Exchange', /\bExchange\b/gu],
+ ['symbol:Terminal', /\bTerminal\b/gu],
+ ['symbol:Packs', /\bPacks\b/gu],
+ ['symbol:Reading', /\bReading\b/gu],
+ ['symbol:Depositing', /\bDepositing\b/gu],
+ ['symbol:PackActivity', /\bPackActivity\b/gu],
+ ['symbol:DepositAssetPackOption', /\bDepositAssetPackOption\b/gu],
+ ['word:exchange', /\bexchange\b/gu],
+ ['word:terminal', /\bterminal\b/gu],
+ ['word:self-referential', /\bself-referential\b/giu],
+]);
+
+const TEXT_FILE_EXTENSIONS = new Set([
+ '.cjs',
+ '.css',
+ '.d.ts',
+ '.js',
+ '.json',
+ '.jsx',
+ '.mjs',
+ '.md',
+ '.mdx',
+ '.ts',
+ '.tsx',
+ '.txt',
+ '.yaml',
+ '.yml',
+]);
+
+const EXCLUDED_DIRECTORIES = new Set([
+ '.git',
+ '.bitcode',
+ '.next',
+ '.pnpm-store',
+ '.supabase',
+ '.turbo',
+ '.vercel',
+ '.workbench',
+ '_legacy',
+ 'coverage',
+ 'dist',
+ 'node_modules',
+ 'out',
+]);
+
+const EXCLUDED_FILE_NAMES = new Set(['pnpm-lock.yaml']);
+
+const FORBIDDEN_PAYLOAD_CLASSES = Object.freeze([
+ 'secret-values',
+ 'provider-tokens',
+ 'wallet-private-material',
+ 'protected-source-payloads',
+ 'raw-protected-prompts',
+ 'raw-model-responses-with-protected-source',
+ 'unpaid-assetpack-source',
+ 'source-snippets',
+]);
+
+function digest(value) {
+ return crypto.createHash('sha256').update(value).digest('hex').slice(0, 24);
+}
+
+function rowRoot(id) {
+ return `v43-route-vocabulary-migration-row:${digest(id)}`;
+}
+
+function fileRoot(relativePath, tokenCounts) {
+ return `v43-route-vocabulary-file:${digest(JSON.stringify([relativePath, tokenCounts]))}`;
+}
+
+function readSource(repoRoot, sourcePath) {
+ const absolutePath = path.join(repoRoot, sourcePath);
+ return existsSync(absolutePath) ? readFileSync(absolutePath, 'utf8') : '';
+}
+
+function predicateResult(id, sourcePath, passed) {
+ return { id, sourcePath, passed: Boolean(passed) };
+}
+
+function lexicalCompare(left, right) {
+ if (left < right) return -1;
+ if (left > right) return 1;
+ return 0;
+}
+
+function countMatches(content, regex) {
+ regex.lastIndex = 0;
+ let count = 0;
+ while (regex.exec(content) !== null) count += 1;
+ return count;
+}
+
+function isTextFile(filePath) {
+ if (EXCLUDED_FILE_NAMES.has(path.basename(filePath))) return false;
+ return TEXT_FILE_EXTENSIONS.has(path.extname(filePath));
+}
+
+function isExcludedRelativePath(relativePath) {
+ return relativePath.split('/').some((part) => EXCLUDED_DIRECTORIES.has(part));
+}
+
+function listGitTrackedTextFiles(repoRoot) {
+ try {
+ return execFileSync('git', ['-c', `safe.directory=${repoRoot}`, 'ls-files'], { cwd: repoRoot, encoding: 'utf8' })
+ .split('\n')
+ .filter(Boolean)
+ .filter((relativePath) => !isExcludedRelativePath(relativePath))
+ .filter(isTextFile)
+ .sort(lexicalCompare);
+ } catch {
+ return null;
+ }
+}
+
+function listTextFiles(repoRoot, currentDirectory = repoRoot) {
+ if (currentDirectory === repoRoot) {
+ const gitTrackedFiles = listGitTrackedTextFiles(repoRoot);
+ if (gitTrackedFiles) return gitTrackedFiles;
+ }
+
+ const entries = readdirSync(currentDirectory, { withFileTypes: true });
+ const files = [];
+
+ for (const entry of entries) {
+ if (entry.isSymbolicLink()) continue;
+ const absolutePath = path.join(currentDirectory, entry.name);
+
+ if (entry.isDirectory()) {
+ if (EXCLUDED_DIRECTORIES.has(entry.name)) continue;
+ files.push(...listTextFiles(repoRoot, absolutePath));
+ continue;
+ }
+
+ if (!entry.isFile() || !isTextFile(absolutePath)) continue;
+ files.push(path.relative(repoRoot, absolutePath).split(path.sep).join('/'));
+ }
+
+ return files.sort(lexicalCompare);
+}
+
+function categorizeFile(relativePath, content) {
+ const categories = new Set();
+ const extension = path.extname(relativePath);
+
+ if (
+ relativePath.startsWith('uapi/app/') &&
+ (relativePath.endsWith('/page.tsx') ||
+ relativePath.endsWith('/layout.tsx') ||
+ relativePath.endsWith('/route.ts') ||
+ relativePath.endsWith('/route.tsx'))
+ ) {
+ categories.add('route');
+ }
+ if (relativePath.includes('/api/') || relativePath.endsWith('/route.ts')) categories.add('api');
+ if (relativePath.endsWith('.tsx') || relativePath.includes('/components/')) categories.add('component');
+ if (/(\btest\b|\.test\.|\.spec\.|__tests__)/u.test(relativePath)) categories.add('test');
+ if (extension === '.md' || extension === '.mdx' || path.basename(relativePath).startsWith('README')) {
+ categories.add('doc');
+ }
+ if (relativePath.startsWith('.github/workflows/')) categories.add('workflow');
+ if (relativePath.startsWith('scripts/')) categories.add('script');
+ if (relativePath.startsWith('packages/')) categories.add('package');
+ if (relativePath.startsWith('BITCODE_SPEC') || relativePath === 'SPECIFICATIONS_ROADMAP.md') {
+ categories.add('spec');
+ }
+ if (/(telemetry|stream|execution|log)/iu.test(relativePath) || /(telemetry|stream|execution|log)/iu.test(content)) {
+ categories.add('telemetry');
+ }
+
+ return [...categories].sort(lexicalCompare);
+}
+
+function scanRouteVocabulary(repoRoot) {
+ const files = [];
+ const tokenTotals = Object.fromEntries(V43_ROUTE_VOCABULARY_TOKEN_IDS.map((tokenId) => [tokenId, 0]));
+ const categoryTotals = Object.fromEntries(V43_ROUTE_VOCABULARY_CATEGORY_IDS.map((categoryId) => [categoryId, 0]));
+
+ for (const relativePath of listTextFiles(repoRoot)) {
+ const content = readSource(repoRoot, relativePath);
+ const tokenCounts = {};
+ let totalMatches = 0;
+
+ for (const [tokenId, regex] of TOKEN_SPECS) {
+ const count = countMatches(content, regex);
+ if (count > 0) {
+ tokenCounts[tokenId] = count;
+ tokenTotals[tokenId] += count;
+ totalMatches += count;
+ }
+ }
+
+ if (totalMatches === 0) continue;
+
+ const categories = categorizeFile(relativePath, content);
+ for (const category of categories) categoryTotals[category] += 1;
+
+ files.push({
+ path: relativePath,
+ pathRoot: fileRoot(relativePath, tokenCounts),
+ categories,
+ tokenCounts,
+ totalMatches,
+ sourceSafeMetadataOnly: true,
+ rawSourceTextSerialized: false,
+ sourceSnippetSerialized: false,
+ });
+ }
+
+ return {
+ tokenTotals,
+ categoryTotals,
+ files,
+ fileCount: files.length,
+ };
+}
+
+function migrationRow(input) {
+ return {
+ ...input,
+ rowRoot: rowRoot(input.rowId),
+ sourceSafetyClass: 'source_safe_route_vocabulary_migration_metadata',
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ sourceSnippetVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ settlementPrivatePayloadVisible: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ };
+}
+
+export const V43_ROUTE_VOCABULARY_MIGRATION_ROWS = Object.freeze([
+ migrationRow({
+ rowId: 'packs-route-master-detail',
+ fromVocabulary: ['/exchange', 'Exchange', 'exchange'],
+ toVocabulary: ['/packs', 'Packs', 'PackActivity'],
+ owningGate: 'V43 Gate 3 Packs Activity Master-Detail Data Model',
+ compatibilityBoundary:
+ 'Existing exchange activity history is projected as source-safe PackActivity metadata; no unpaid AssetPack source becomes visible.',
+ requiredMigrationWork: [
+ 'rename route path and app references to /packs',
+ 'rename component prefixes to Packs where the user-facing activity surface is meant',
+ 'preserve historical ledger and proof labels as metadata when old records already contain exchange wording',
+ 'add /exchange to /packs redirect until external links can be retired',
+ ],
+ }),
+ migrationRow({
+ rowId: 'read-route-five-step-reading',
+ fromVocabulary: ['/terminal', 'Terminal Reading'],
+ toVocabulary: ['/read', 'ReadRouteSession', 'Reading'],
+ owningGate: 'V43 Gate 4 Read Route Extraction And Five-Step UX',
+ compatibilityBoundary:
+ 'Reading remains accepted-Need gated; retained cockpit code cannot bypass Need review, Finding Fits, settlement, rights transfer, or delivery reconciliation.',
+ requiredMigrationWork: [
+ 'extract five-step Reading UX into /read',
+ 'hydrate historical readingStage and transaction query state into /read',
+ 'preserve rich execution log streaming and source-safe proof expansion',
+ 'keep unpaid AssetPack source hidden before settlement',
+ ],
+ }),
+ migrationRow({
+ rowId: 'deposit-route-agentic-options',
+ fromVocabulary: ['/terminal', 'Terminal Depositing'],
+ toVocabulary: ['/deposit', 'DepositAssetPackOption', 'Depositing'],
+ owningGate: 'V43 Gate 5 Deposit Route And Agentic AssetPack Option Synthesis',
+ compatibilityBoundary:
+ 'Deposit options are unminted source-safe AssetPack proposals; approval admits supply to the Depository but does not mint BTD or expose source to readers.',
+ requiredMigrationWork: [
+ 'extract source connection, depositor instructions, option synthesis, review, and admission into /deposit',
+ 'use Depository state and Reading demand as source-safe option-synthesis context',
+ 'show source criticality, likely demand, ROI posture, BTD potential, and compensation route',
+ 'synchronize admitted options into /packs activity',
+ ],
+ }),
+ migrationRow({
+ rowId: 'retained-debug-cockpit',
+ fromVocabulary: ['/terminal', 'Terminal'],
+ toVocabulary: ['internal cockpit', 'operator/debug surface'],
+ owningGate: 'V43 Gate 8 UX/UI Product Excellence Pass',
+ compatibilityBoundary:
+ 'If retained, cockpit surfaces are explicit internal/debug affordances and never the default product path for Depositing or Reading.',
+ requiredMigrationWork: [
+ 'separate operator cockpit naming from product navigation',
+ 'remove default product links to /terminal',
+ 'verify retained cockpit cannot create second authority paths',
+ ],
+ }),
+ migrationRow({
+ rowId: 'redirect-compatibility',
+ fromVocabulary: ['/exchange', '/terminal'],
+ toVocabulary: ['/packs', '/read', '/deposit'],
+ owningGate: 'V43 Gate 9 Cross-Route Rehearsal, Telemetry, And Repair',
+ compatibilityBoundary:
+ 'Redirects preserve transaction ids, reading stages, deposit anchors, and proof roots without changing protocol authority.',
+ requiredMigrationWork: [
+ 'redirect /exchange to /packs',
+ 'route Reading terminal state to /read',
+ 'route Depositing terminal state to /deposit',
+ 'prove telemetry, database, ledger, and storage readback remain synchronized after redirects',
+ ],
+ }),
+ migrationRow({
+ rowId: 'self-referential-copy-removal',
+ fromVocabulary: ['self-referential product explanation', 'instructional route copy'],
+ toVocabulary: ['concise labels', 'progressive detail', 'source-safe proof expansion'],
+ owningGate: 'V43 Gate 8 UX/UI Product Excellence Pass',
+ compatibilityBoundary:
+ 'Public docs may explain the protocol; product UI should communicate through route structure, labels, state, and reusable components.',
+ requiredMigrationWork: [
+ 'audit in-app self-referential copy outside public docs',
+ 'replace copy that describes the design with operational labels and state',
+ 'keep advanced detail available through expandable metadata and proof rows',
+ ],
+ }),
+]);
+
+function buildPredicateResults(repoRoot, scan) {
+ const spec = readSource(repoRoot, 'BITCODE_SPEC_V43.md');
+ const delta = readSource(repoRoot, 'BITCODE_SPEC_V43_DELTA.md');
+ const notes = readSource(repoRoot, 'BITCODE_SPEC_V43_NOTES.md');
+ const parity = readSource(repoRoot, 'BITCODE_SPEC_V43_PARITY_MATRIX.md');
+ const roadmap = readSource(repoRoot, 'SPECIFICATIONS_ROADMAP.md');
+ const readme = readSource(repoRoot, 'README.md');
+ const protocolReadme = readSource(repoRoot, 'packages/protocol/README.md');
+ const packageJson = readSource(repoRoot, 'package.json');
+ const gateWorkflow = readSource(repoRoot, '.github/workflows/bitcode-gate-quality.yml');
+ const canonWorkflow = readSource(repoRoot, '.github/workflows/bitcode-canon-quality.yml');
+ const index = readSource(repoRoot, 'packages/protocol/src/index.js');
+ const declarations = readSource(repoRoot, 'packages/protocol/src/index.d.ts');
+ const generator = readSource(repoRoot, 'scripts/generate-v43-route-vocabulary-inventory.mjs');
+ const checker = readSource(repoRoot, 'scripts/check-v43-gate2-route-vocabulary-inventory.mjs');
+ const test = readSource(repoRoot, 'packages/protocol/test/v43-route-vocabulary-inventory.test.js');
+ return [
+ predicateResult('active-canon-pointer-remains-v42', 'BITCODE_SPEC.txt', readSource(repoRoot, 'BITCODE_SPEC.txt').trim() === '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')),
+ predicateResult('delta-records-gate2-artifact', 'BITCODE_SPEC_V43_DELTA.md', delta.includes('v43-route-vocabulary-inventory')),
+ predicateResult('notes-record-gate2-artifact', 'BITCODE_SPEC_V43_NOTES.md', notes.includes('v43-route-vocabulary-inventory')),
+ predicateResult('parity-records-gate2-artifact', 'BITCODE_SPEC_V43_PARITY_MATRIX.md', parity.includes('v43-route-vocabulary-inventory')),
+ predicateResult('roadmap-records-gate2-closure', 'SPECIFICATIONS_ROADMAP.md', roadmap.includes('V43 Gate 2 closure anchor')),
+ predicateResult('readme-records-gate2', 'README.md', readme.includes('V43 Gate 2')),
+ predicateResult('protocol-readme-records-gate2', 'packages/protocol/README.md', protocolReadme.includes('V43 Gate 2')),
+ predicateResult('package-exposes-gate2-scripts', 'package.json', packageJson.includes('"generate:v43-route-vocabulary-inventory"') && packageJson.includes('"check:v43-gate2"')),
+ predicateResult('gate-workflow-runs-gate2', '.github/workflows/bitcode-gate-quality.yml', gateWorkflow.includes('check-v43-gate2-route-vocabulary-inventory.mjs')),
+ predicateResult('canon-workflow-runs-gate2', '.github/workflows/bitcode-canon-quality.yml', canonWorkflow.includes('check-v43-gate2-route-vocabulary-inventory.mjs')),
+ predicateResult('protocol-index-exports-gate2', 'packages/protocol/src/index.js', index.includes('buildV43RouteVocabularyInventory')),
+ predicateResult('protocol-types-export-gate2', 'packages/protocol/src/index.d.ts', declarations.includes('buildV43RouteVocabularyInventory')),
+ predicateResult('generator-exists', 'scripts/generate-v43-route-vocabulary-inventory.mjs', generator.includes('buildV43RouteVocabularyInventory')),
+ predicateResult('checker-exists', 'scripts/check-v43-gate2-route-vocabulary-inventory.mjs', checker.includes('V43 Gate 2 route vocabulary inventory check')),
+ predicateResult('protocol-test-exists', 'packages/protocol/test/v43-route-vocabulary-inventory.test.js', test.includes('buildV43RouteVocabularyInventory')),
+ predicateResult('legacy-exchange-inventory-nonempty', 'source scan', scan.tokenTotals['route:/exchange'] > 0 || scan.tokenTotals['symbol:Exchange'] > 0 || scan.tokenTotals['word:exchange'] > 0),
+ predicateResult('legacy-terminal-inventory-nonempty', 'source scan', scan.tokenTotals['route:/terminal'] > 0 || scan.tokenTotals['symbol:Terminal'] > 0 || scan.tokenTotals['word:terminal'] > 0),
+ predicateResult('target-route-vocabulary-present', 'source scan', scan.tokenTotals['route:/packs'] > 0 && scan.tokenTotals['route:/read'] > 0 && scan.tokenTotals['route:/deposit'] > 0),
+ predicateResult('pack-activity-vocabulary-present', 'source scan', scan.tokenTotals['symbol:PackActivity'] > 0),
+ predicateResult('deposit-option-vocabulary-present', 'source scan', scan.tokenTotals['symbol:DepositAssetPackOption'] > 0),
+ predicateResult('migration-rows-complete', 'packages/protocol/src/canonical/v43-route-vocabulary-inventory.js', V43_ROUTE_VOCABULARY_MIGRATION_ROWS.length === V43_ROUTE_VOCABULARY_MIGRATION_ROW_IDS.length),
+ predicateResult('required-categories-covered', 'source scan', V43_ROUTE_VOCABULARY_CATEGORY_IDS.every((categoryId) => scan.categoryTotals[categoryId] > 0)),
+ ];
+}
+
+export function buildV43RouteVocabularyInventory(options = {}) {
+ const repoRoot = options.repoRoot || DEFAULT_REPO_ROOT;
+ const scan = scanRouteVocabulary(repoRoot);
+ const predicateResults = buildPredicateResults(repoRoot, scan);
+ const failedPredicateIds = predicateResults
+ .filter((predicate) => !predicate.passed)
+ .map((predicate) => predicate.id);
+ const artifactRoot = `v43-route-vocabulary-inventory:${digest(JSON.stringify({
+ tokenTotals: scan.tokenTotals,
+ categoryTotals: scan.categoryTotals,
+ files: scan.files.map((file) => [file.path, file.pathRoot, file.totalMatches]),
+ migrationRows: V43_ROUTE_VOCABULARY_MIGRATION_ROWS.map((row) => row.rowRoot),
+ failedPredicateIds,
+ }))}`;
+
+ return {
+ artifactId: 'v43-route-vocabulary-inventory',
+ schemaId: V43_ROUTE_VOCABULARY_INVENTORY_SCHEMA_ID,
+ version: V43_ROUTE_VOCABULARY_INVENTORY_VERSION,
+ currentTarget: V43_ROUTE_VOCABULARY_INVENTORY_CURRENT_TARGET,
+ sourceSafetyVerdict: V43_ROUTE_VOCABULARY_INVENTORY_SOURCE_SAFETY_VERDICT,
+ generatedAt: 'deterministic',
+ artifactRoot,
+ passed: failedPredicateIds.length === 0,
+ tokenIds: [...V43_ROUTE_VOCABULARY_TOKEN_IDS],
+ categoryIds: [...V43_ROUTE_VOCABULARY_CATEGORY_IDS],
+ migrationRowIds: [...V43_ROUTE_VOCABULARY_MIGRATION_ROW_IDS],
+ migrationRows: V43_ROUTE_VOCABULARY_MIGRATION_ROWS,
+ predicateResults,
+ sourceFiles: scan.files,
+ coverage: {
+ sourceFileCount: scan.fileCount,
+ tokenTotals: scan.tokenTotals,
+ categoryTotals: scan.categoryTotals,
+ routeVocabularyInventoryComplete: true,
+ migrationMatrixComplete: true,
+ packsMigrationPlanned: true,
+ readMigrationPlanned: true,
+ depositMigrationPlanned: true,
+ retainedDebugCockpitBoundaryPlanned: true,
+ redirectCompatibilityPlanned: true,
+ selfReferentialCopyRemovalPlanned: true,
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ sourceSnippetVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ settlementPrivatePayloadVisible: false,
+ forbiddenPayloadClasses: [...FORBIDDEN_PAYLOAD_CLASSES],
+ requiredPredicateCount: predicateResults.length,
+ passedPredicateCount: predicateResults.length - failedPredicateIds.length,
+ failedPredicateIds,
+ },
+ };
+}
diff --git a/packages/protocol/src/index.d.ts b/packages/protocol/src/index.d.ts
index a92592d8..05accb7f 100644
--- a/packages/protocol/src/index.d.ts
+++ b/packages/protocol/src/index.d.ts
@@ -512,6 +512,176 @@ export const V41_PROMOTION_READINESS_GATE_ARTIFACT_PATHS: readonly string[];
export const V41_PROMOTION_READINESS_GENERATED_OUTPUTS: readonly string[];
export function buildV41PromotionReadinessReport(input?: Record): BitcodeProtocolReport;
export function listMissingV41PromotionReadinessSources(repoRoot?: string): string[];
+export const V42_DEPOSITING_SHORTEST_PATH_ARTIFACT_PATH: string;
+export const V42_DEPOSITING_SHORTEST_PATH_CURRENT_TARGET: string;
+export const V42_DEPOSITING_SHORTEST_PATH_SCHEMA_ID: string;
+export const V42_DEPOSITING_SHORTEST_PATH_VERSION: string;
+export const V42_DEPOSITING_SHORTEST_PATH_SOURCE_SAFETY_VERDICT: string;
+export const V42_DEPOSITING_SHORTEST_PATH_ROW_IDS: readonly string[];
+export const V42_DEPOSITING_SHORTEST_PATH_ROWS: readonly Record[];
+export function buildV42DepositingShortestPath(input?: Record): BitcodeProtocolReport;
+export const V42_READING_SHORTEST_PATH_STATE_MACHINE_ARTIFACT_PATH: string;
+export const V42_READING_SHORTEST_PATH_STATE_MACHINE_CURRENT_TARGET: string;
+export const V42_READING_SHORTEST_PATH_SCHEMA_ID: string;
+export const V42_READING_SHORTEST_PATH_STATE_MACHINE_VERSION: string;
+export const V42_READING_SHORTEST_PATH_STATE_MACHINE_SOURCE_SAFETY_VERDICT: string;
+export const V42_READING_SHORTEST_PATH_STEP_IDS: readonly string[];
+export const V42_READING_SHORTEST_PATH_ROW_IDS: readonly string[];
+export const V42_READING_SHORTEST_PATH_ROWS: readonly Record[];
+export function buildV42ReadingShortestPathStateMachine(input?: Record): BitcodeProtocolReport;
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ARTIFACT_PATH: string;
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_CURRENT_TARGET: string;
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SCHEMA_ID: string;
+export const V42_READNEED_REVIEW_RESYNTHESIS_SCHEMA_ID: string;
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_VERSION: string;
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SOURCE_SAFETY_VERDICT: string;
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROW_IDS: readonly string[];
+export const V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROWS: readonly Record[];
+export function buildV42ReadNeedReviewResynthesisProductClosure(input?: Record): BitcodeProtocolReport;
+export const V42_READFITSFINDING_PREVIEW_QUOTE_ARTIFACT_PATH: string;
+export const V42_READFITSFINDING_PREVIEW_QUOTE_CURRENT_TARGET: string;
+export const V42_READFITSFINDING_PREVIEW_QUOTE_SCHEMA_ID: string;
+export const V42_READFITSFINDING_PREVIEW_QUOTE_VERSION: string;
+export const V42_READFITSFINDING_PREVIEW_QUOTE_SOURCE_SAFETY_VERDICT: string;
+export const V42_READFITSFINDING_PREVIEW_QUOTE_ROW_IDS: readonly string[];
+export const V42_READFITSFINDING_PREVIEW_QUOTE_ROWS: readonly Record[];
+export function buildV42ReadFitsFindingPreviewQuote(input?: Record): BitcodeProtocolReport;
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH: string;
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_CURRENT_TARGET: string;
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_SCHEMA_ID: string;
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_VERSION: string;
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_SOURCE_SAFETY_VERDICT: string;
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_ROW_IDS: readonly string[];
+export const V42_SETTLEMENT_RIGHTS_DELIVERY_ROWS: readonly Record[];
+export function buildV42SettlementRightsDelivery(input?: Record): BitcodeProtocolReport;
+export const V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH: string;
+export const V42_AI_READING_DEMONSTRATION_CURRENT_TARGET: string;
+export const V42_AI_READING_DEMONSTRATION_SCHEMA_ID: string;
+export const V42_AI_READING_DEMONSTRATION_VERSION: string;
+export const V42_AI_READING_DEMONSTRATION_SOURCE_SAFETY_VERDICT: string;
+export const V42_AI_READING_DEMONSTRATION_ROW_IDS: readonly string[];
+export const V42_AI_READING_DEMONSTRATION_ROWS: readonly Record[];
+export function buildV42AiReadingDemonstration(input?: Record): BitcodeProtocolReport;
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH: string;
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_CURRENT_TARGET: string;
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_SCHEMA_ID: string;
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_VERSION: string;
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_SOURCE_SAFETY_VERDICT: string;
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_LANE_IDS: readonly string[];
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_STAGE_IDS: readonly string[];
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_ROW_IDS: readonly string[];
+export const V42_LOCAL_STAGING_MVP_REHEARSAL_ROWS: readonly Record[];
+export function buildV42LocalStagingMvpRehearsal(input?: Record): BitcodeProtocolReport;
+export const V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH: string;
+export const V42_PROMOTION_READINESS_REPORT_CURRENT_TARGET: string;
+export const V42_PROMOTION_READINESS_REPORT_SCHEMA_ID: string;
+export const V42_PROMOTION_READINESS_REPORT_VERSION: string;
+export const V42_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT: string;
+export const V42_PROMOTION_READINESS_GATE_ARTIFACT_PATHS: readonly string[];
+export const V42_PROMOTION_READINESS_GENERATED_OUTPUTS: readonly string[];
+export function buildV42PromotionReadinessReport(input?: Record): BitcodeProtocolReport;
+export function listMissingV42PromotionReadinessSources(repoRoot?: string): string[];
+export const V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH: string;
+export const V43_ROUTE_VOCABULARY_INVENTORY_CURRENT_TARGET: string;
+export const V43_ROUTE_VOCABULARY_INVENTORY_SCHEMA_ID: string;
+export const V43_ROUTE_VOCABULARY_INVENTORY_VERSION: string;
+export const V43_ROUTE_VOCABULARY_INVENTORY_SOURCE_SAFETY_VERDICT: string;
+export const V43_ROUTE_VOCABULARY_TOKEN_IDS: readonly string[];
+export const V43_ROUTE_VOCABULARY_CATEGORY_IDS: readonly string[];
+export const V43_ROUTE_VOCABULARY_MIGRATION_ROW_IDS: readonly string[];
+export const V43_ROUTE_VOCABULARY_MIGRATION_ROWS: readonly Record[];
+export function buildV43RouteVocabularyInventory(input?: Record): BitcodeProtocolReport;
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH: string;
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_CURRENT_TARGET: string;
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_SCHEMA_ID: string;
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_VERSION: string;
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_SOURCE_SAFETY_VERDICT: string;
+export const V43_PACKS_ACTIVITY_MASTER_DETAIL_SOURCE_ROOTS: Readonly>;
+export const V43_PACK_ACTIVITY_TYPE_IDS: readonly string[];
+export const V43_PACK_ACTIVITY_SEARCH_FIELD_IDS: readonly string[];
+export const V43_PACK_ACTIVITY_SORT_IDS: readonly string[];
+export const V43_PACK_ACTIVITY_FILTER_IDS: readonly string[];
+export const V43_PACK_ACTIVITY_DETAIL_SECTION_IDS: readonly string[];
+export const V43_PACK_ACTIVITY_CONTRACT_ROWS: readonly Record[];
+export function buildV43PacksActivityMasterDetail(input?: Record): BitcodeProtocolReport;
+export const V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH: string;
+export const V43_READ_ROUTE_FIVE_STEP_UX_CURRENT_TARGET: string;
+export const V43_READ_ROUTE_FIVE_STEP_UX_SCHEMA_ID: string;
+export const V43_READ_ROUTE_FIVE_STEP_UX_VERSION: string;
+export const V43_READ_ROUTE_FIVE_STEP_UX_SOURCE_SAFETY_VERDICT: string;
+export const V43_READ_ROUTE_FIVE_STEP_UX_SOURCE_ROOTS: Readonly>;
+export const V43_READ_ROUTE_STEP_IDS: readonly string[];
+export const V43_READ_ROUTE_OBJECT_IDS: readonly string[];
+export const V43_READ_ROUTE_PIPELINE_IDS: readonly string[];
+export const V43_READ_ROUTE_SOURCE_SAFE_FIELD_IDS: readonly string[];
+export const V43_READ_ROUTE_FORBIDDEN_PAYLOAD_IDS: readonly string[];
+export const V43_READ_ROUTE_CONTRACT_ROWS: readonly Record[];
+export function buildV43ReadRouteFiveStepUx(input?: Record): BitcodeProtocolReport;
+export const V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH: string;
+export const V43_DEPOSIT_ROUTE_OPTIONS_CURRENT_TARGET: string;
+export const V43_DEPOSIT_ROUTE_OPTIONS_SCHEMA_ID: string;
+export const V43_DEPOSIT_ROUTE_OPTIONS_VERSION: string;
+export const V43_DEPOSIT_ROUTE_OPTIONS_SOURCE_SAFETY_VERDICT: string;
+export const V43_DEPOSIT_ROUTE_OPTIONS_SOURCE_ROOTS: Readonly>;
+export const V43_DEPOSIT_ROUTE_STEP_IDS: readonly string[];
+export const V43_DEPOSIT_OPTION_OBJECT_IDS: readonly string[];
+export const V43_DEPOSIT_OPTION_PIPELINE_IDS: readonly string[];
+export const V43_DEPOSIT_OPTION_SOURCE_SAFE_FIELD_IDS: readonly string[];
+export const V43_DEPOSIT_OPTION_FORBIDDEN_PAYLOAD_IDS: readonly string[];
+export const V43_DEPOSIT_ROUTE_OPTIONS_CONTRACT_ROWS: readonly Record[];
+export function buildV43DepositRouteOptions(input?: Record): BitcodeProtocolReport;
+export const V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH: string;
+export const V43_DEPOSIT_POLICY_COMPENSATION_CURRENT_TARGET: string;
+export const V43_DEPOSIT_POLICY_COMPENSATION_SCHEMA_ID: string;
+export const V43_DEPOSIT_POLICY_COMPENSATION_VERSION: string;
+export const V43_DEPOSIT_POLICY_COMPENSATION_SOURCE_SAFETY_VERDICT: string;
+export const V43_DEPOSIT_POLICY_COMPENSATION_SOURCE_ROOTS: Readonly>;
+export const V43_DEPOSIT_POLICY_OBJECT_IDS: readonly string[];
+export const V43_DEPOSIT_POLICY_FIELD_IDS: readonly string[];
+export const V43_DEPOSIT_POLICY_FORBIDDEN_PAYLOAD_IDS: readonly string[];
+export const V43_DEPOSIT_POLICY_COMPENSATION_CONTRACT_ROWS: readonly Record[];
+export function buildV43DepositPolicyCompensation(input?: Record): BitcodeProtocolReport;
+export const V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH: string;
+export const V43_DEPOSIT_OPTION_ADMISSION_CURRENT_TARGET: string;
+export const V43_DEPOSIT_OPTION_ADMISSION_SCHEMA_ID: string;
+export const V43_DEPOSIT_OPTION_ADMISSION_VERSION: string;
+export const V43_DEPOSIT_OPTION_ADMISSION_SOURCE_SAFETY_VERDICT: string;
+export const V43_DEPOSIT_OPTION_ADMISSION_SOURCE_ROOTS: Readonly>;
+export const V43_DEPOSIT_OPTION_ADMISSION_OBJECT_IDS: readonly string[];
+export const V43_DEPOSIT_OPTION_ADMISSION_FIELD_IDS: readonly string[];
+export const V43_DEPOSIT_OPTION_ADMISSION_FORBIDDEN_PAYLOAD_IDS: readonly string[];
+export const V43_DEPOSIT_OPTION_ADMISSION_CONTRACT_ROWS: readonly Record[];
+export function buildV43DepositOptionAdmission(input?: Record): BitcodeProtocolReport;
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH: string;
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_CURRENT_TARGET: string;
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_SCHEMA_ID: string;
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_VERSION: string;
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_SOURCE_SAFETY_VERDICT: string;
+export const V43_ROUTE_UX_PRODUCT_EXCELLENCE_SOURCE_ROOTS: Readonly>;
+export const V43_ROUTE_UX_OBJECT_IDS: readonly string[];
+export const V43_ROUTE_UX_FIELD_IDS: readonly string[];
+export const V43_ROUTE_UX_FORBIDDEN_PAYLOAD_IDS: readonly string[];
+export const V43_ROUTE_UX_CONTRACT_ROWS: readonly Record[];
+export function buildV43RouteUxProductExcellence(input?: Record): BitcodeProtocolReport;
+export const V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH: string;
+export const V43_CROSS_ROUTE_REHEARSAL_CURRENT_TARGET: string;
+export const V43_CROSS_ROUTE_REHEARSAL_SCHEMA_ID: string;
+export const V43_CROSS_ROUTE_REHEARSAL_VERSION: string;
+export const V43_CROSS_ROUTE_REHEARSAL_SOURCE_SAFETY_VERDICT: string;
+export const V43_CROSS_ROUTE_REHEARSAL_LANE_IDS: readonly string[];
+export const V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS: readonly string[];
+export const V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS: readonly string[];
+export const V43_CROSS_ROUTE_REHEARSAL_ROW_IDS: readonly string[];
+export function buildV43CrossRouteRehearsalTelemetryRepair(input?: Record): BitcodeProtocolReport;
+export const V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH: string;
+export const V43_PROMOTION_READINESS_REPORT_CURRENT_TARGET: string;
+export const V43_PROMOTION_READINESS_REPORT_SCHEMA_ID: string;
+export const V43_PROMOTION_READINESS_REPORT_VERSION: string;
+export const V43_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT: string;
+export const V43_PROMOTION_READINESS_GATE_ARTIFACT_PATHS: readonly string[];
+export const V43_PROMOTION_READINESS_GENERATED_OUTPUTS: readonly string[];
+export function buildV43PromotionReadinessReport(input?: Record): BitcodeProtocolReport;
+export function listMissingV43PromotionReadinessSources(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 5f856b34..e6929c71 100644
--- a/packages/protocol/src/index.js
+++ b/packages/protocol/src/index.js
@@ -570,6 +570,210 @@ export {
buildV41PromotionReadinessReport,
listMissingV41PromotionReadinessSources
} from './canonical/v41-promotion-readiness-report.js';
+export {
+ V42_DEPOSITING_SHORTEST_PATH_ARTIFACT_PATH,
+ V42_DEPOSITING_SHORTEST_PATH_CURRENT_TARGET,
+ V42_DEPOSITING_SHORTEST_PATH_ROW_IDS,
+ V42_DEPOSITING_SHORTEST_PATH_ROWS,
+ V42_DEPOSITING_SHORTEST_PATH_SCHEMA_ID,
+ V42_DEPOSITING_SHORTEST_PATH_SOURCE_SAFETY_VERDICT,
+ V42_DEPOSITING_SHORTEST_PATH_VERSION,
+ buildV42DepositingShortestPath
+} from './canonical/v42-depositing-shortest-path.js';
+export {
+ V42_READING_SHORTEST_PATH_ROWS,
+ V42_READING_SHORTEST_PATH_ROW_IDS,
+ V42_READING_SHORTEST_PATH_SCHEMA_ID,
+ V42_READING_SHORTEST_PATH_STATE_MACHINE_ARTIFACT_PATH,
+ V42_READING_SHORTEST_PATH_STATE_MACHINE_CURRENT_TARGET,
+ V42_READING_SHORTEST_PATH_STATE_MACHINE_SOURCE_SAFETY_VERDICT,
+ V42_READING_SHORTEST_PATH_STATE_MACHINE_VERSION,
+ V42_READING_SHORTEST_PATH_STEP_IDS,
+ buildV42ReadingShortestPathStateMachine
+} from './canonical/v42-reading-shortest-path-state-machine.js';
+export {
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ARTIFACT_PATH,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_CURRENT_TARGET,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROW_IDS,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROWS,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SCHEMA_ID,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SOURCE_SAFETY_VERDICT,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_VERSION,
+ V42_READNEED_REVIEW_RESYNTHESIS_SCHEMA_ID,
+ buildV42ReadNeedReviewResynthesisProductClosure
+} from './canonical/v42-readneed-review-resynthesis-product-closure.js';
+export {
+ V42_READFITSFINDING_PREVIEW_QUOTE_ARTIFACT_PATH,
+ V42_READFITSFINDING_PREVIEW_QUOTE_CURRENT_TARGET,
+ V42_READFITSFINDING_PREVIEW_QUOTE_ROW_IDS,
+ V42_READFITSFINDING_PREVIEW_QUOTE_ROWS,
+ V42_READFITSFINDING_PREVIEW_QUOTE_SCHEMA_ID,
+ V42_READFITSFINDING_PREVIEW_QUOTE_SOURCE_SAFETY_VERDICT,
+ V42_READFITSFINDING_PREVIEW_QUOTE_VERSION,
+ buildV42ReadFitsFindingPreviewQuote
+} from './canonical/v42-readfitsfinding-preview-quote.js';
+export {
+ V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH,
+ V42_SETTLEMENT_RIGHTS_DELIVERY_CURRENT_TARGET,
+ V42_SETTLEMENT_RIGHTS_DELIVERY_ROW_IDS,
+ V42_SETTLEMENT_RIGHTS_DELIVERY_ROWS,
+ V42_SETTLEMENT_RIGHTS_DELIVERY_SCHEMA_ID,
+ V42_SETTLEMENT_RIGHTS_DELIVERY_SOURCE_SAFETY_VERDICT,
+ V42_SETTLEMENT_RIGHTS_DELIVERY_VERSION,
+ buildV42SettlementRightsDelivery
+} from './canonical/v42-settlement-rights-delivery.js';
+export {
+ V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH,
+ V42_AI_READING_DEMONSTRATION_CURRENT_TARGET,
+ V42_AI_READING_DEMONSTRATION_ROW_IDS,
+ V42_AI_READING_DEMONSTRATION_ROWS,
+ V42_AI_READING_DEMONSTRATION_SCHEMA_ID,
+ V42_AI_READING_DEMONSTRATION_SOURCE_SAFETY_VERDICT,
+ V42_AI_READING_DEMONSTRATION_VERSION,
+ buildV42AiReadingDemonstration
+} from './canonical/v42-ai-reading-demonstration.js';
+export {
+ V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_CURRENT_TARGET,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_LANE_IDS,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_ROW_IDS,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_ROWS,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_SCHEMA_ID,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_SOURCE_SAFETY_VERDICT,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_STAGE_IDS,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_VERSION,
+ buildV42LocalStagingMvpRehearsal
+} from './canonical/v42-local-staging-mvp-rehearsal.js';
+export {
+ V42_PROMOTION_READINESS_GATE_ARTIFACT_PATHS,
+ V42_PROMOTION_READINESS_GENERATED_OUTPUTS,
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ V42_PROMOTION_READINESS_REPORT_CURRENT_TARGET,
+ V42_PROMOTION_READINESS_REPORT_SCHEMA_ID,
+ V42_PROMOTION_READINESS_REPORT_VERSION,
+ V42_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ buildV42PromotionReadinessReport,
+ listMissingV42PromotionReadinessSources
+} from './canonical/v42-promotion-readiness-report.js';
+export {
+ V43_ROUTE_VOCABULARY_CATEGORY_IDS,
+ V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH,
+ V43_ROUTE_VOCABULARY_INVENTORY_CURRENT_TARGET,
+ V43_ROUTE_VOCABULARY_INVENTORY_SCHEMA_ID,
+ V43_ROUTE_VOCABULARY_INVENTORY_SOURCE_SAFETY_VERDICT,
+ V43_ROUTE_VOCABULARY_INVENTORY_VERSION,
+ V43_ROUTE_VOCABULARY_MIGRATION_ROW_IDS,
+ V43_ROUTE_VOCABULARY_MIGRATION_ROWS,
+ V43_ROUTE_VOCABULARY_TOKEN_IDS,
+ buildV43RouteVocabularyInventory
+} from './canonical/v43-route-vocabulary-inventory.js';
+export {
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH,
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_CURRENT_TARGET,
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_SCHEMA_ID,
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_SOURCE_SAFETY_VERDICT,
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_SOURCE_ROOTS,
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_VERSION,
+ V43_PACK_ACTIVITY_CONTRACT_ROWS,
+ V43_PACK_ACTIVITY_DETAIL_SECTION_IDS,
+ V43_PACK_ACTIVITY_FILTER_IDS,
+ V43_PACK_ACTIVITY_SEARCH_FIELD_IDS,
+ V43_PACK_ACTIVITY_SORT_IDS,
+ V43_PACK_ACTIVITY_TYPE_IDS,
+ buildV43PacksActivityMasterDetail
+} from './canonical/v43-packs-activity-master-detail.js';
+export {
+ V43_READ_ROUTE_CONTRACT_ROWS,
+ V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH,
+ V43_READ_ROUTE_FIVE_STEP_UX_CURRENT_TARGET,
+ V43_READ_ROUTE_FIVE_STEP_UX_SCHEMA_ID,
+ V43_READ_ROUTE_FIVE_STEP_UX_SOURCE_ROOTS,
+ V43_READ_ROUTE_FIVE_STEP_UX_SOURCE_SAFETY_VERDICT,
+ V43_READ_ROUTE_FIVE_STEP_UX_VERSION,
+ V43_READ_ROUTE_FORBIDDEN_PAYLOAD_IDS,
+ V43_READ_ROUTE_OBJECT_IDS,
+ V43_READ_ROUTE_PIPELINE_IDS,
+ V43_READ_ROUTE_SOURCE_SAFE_FIELD_IDS,
+ V43_READ_ROUTE_STEP_IDS,
+ buildV43ReadRouteFiveStepUx
+} from './canonical/v43-read-route-five-step-ux.js';
+export {
+ V43_DEPOSIT_OPTION_FORBIDDEN_PAYLOAD_IDS,
+ V43_DEPOSIT_OPTION_OBJECT_IDS,
+ V43_DEPOSIT_OPTION_PIPELINE_IDS,
+ V43_DEPOSIT_OPTION_SOURCE_SAFE_FIELD_IDS,
+ V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH,
+ V43_DEPOSIT_ROUTE_OPTIONS_CONTRACT_ROWS,
+ V43_DEPOSIT_ROUTE_OPTIONS_CURRENT_TARGET,
+ V43_DEPOSIT_ROUTE_OPTIONS_SCHEMA_ID,
+ V43_DEPOSIT_ROUTE_OPTIONS_SOURCE_ROOTS,
+ V43_DEPOSIT_ROUTE_OPTIONS_SOURCE_SAFETY_VERDICT,
+ V43_DEPOSIT_ROUTE_OPTIONS_VERSION,
+ V43_DEPOSIT_ROUTE_STEP_IDS,
+ buildV43DepositRouteOptions
+} from './canonical/v43-deposit-route-options.js';
+export {
+ V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH,
+ V43_DEPOSIT_POLICY_COMPENSATION_CONTRACT_ROWS,
+ V43_DEPOSIT_POLICY_COMPENSATION_CURRENT_TARGET,
+ V43_DEPOSIT_POLICY_COMPENSATION_SCHEMA_ID,
+ V43_DEPOSIT_POLICY_COMPENSATION_SOURCE_ROOTS,
+ V43_DEPOSIT_POLICY_COMPENSATION_SOURCE_SAFETY_VERDICT,
+ V43_DEPOSIT_POLICY_COMPENSATION_VERSION,
+ V43_DEPOSIT_POLICY_FIELD_IDS,
+ V43_DEPOSIT_POLICY_FORBIDDEN_PAYLOAD_IDS,
+ V43_DEPOSIT_POLICY_OBJECT_IDS,
+ buildV43DepositPolicyCompensation
+} from './canonical/v43-deposit-policy-compensation.js';
+export {
+ V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH,
+ V43_DEPOSIT_OPTION_ADMISSION_CONTRACT_ROWS,
+ V43_DEPOSIT_OPTION_ADMISSION_CURRENT_TARGET,
+ V43_DEPOSIT_OPTION_ADMISSION_FIELD_IDS,
+ V43_DEPOSIT_OPTION_ADMISSION_FORBIDDEN_PAYLOAD_IDS,
+ V43_DEPOSIT_OPTION_ADMISSION_OBJECT_IDS,
+ V43_DEPOSIT_OPTION_ADMISSION_SCHEMA_ID,
+ V43_DEPOSIT_OPTION_ADMISSION_SOURCE_ROOTS,
+ V43_DEPOSIT_OPTION_ADMISSION_SOURCE_SAFETY_VERDICT,
+ V43_DEPOSIT_OPTION_ADMISSION_VERSION,
+ buildV43DepositOptionAdmission
+} from './canonical/v43-deposit-option-admission.js';
+export {
+ V43_ROUTE_UX_CONTRACT_ROWS,
+ V43_ROUTE_UX_FIELD_IDS,
+ V43_ROUTE_UX_FORBIDDEN_PAYLOAD_IDS,
+ V43_ROUTE_UX_OBJECT_IDS,
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH,
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_CURRENT_TARGET,
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_SCHEMA_ID,
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_SOURCE_ROOTS,
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_SOURCE_SAFETY_VERDICT,
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_VERSION,
+ buildV43RouteUxProductExcellence
+} from './canonical/v43-route-ux-product-excellence.js';
+export {
+ V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH,
+ V43_CROSS_ROUTE_REHEARSAL_CURRENT_TARGET,
+ V43_CROSS_ROUTE_REHEARSAL_LANE_IDS,
+ V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS,
+ V43_CROSS_ROUTE_REHEARSAL_ROW_IDS,
+ V43_CROSS_ROUTE_REHEARSAL_SCHEMA_ID,
+ V43_CROSS_ROUTE_REHEARSAL_SOURCE_SAFETY_VERDICT,
+ V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS,
+ V43_CROSS_ROUTE_REHEARSAL_VERSION,
+ buildV43CrossRouteRehearsalTelemetryRepair
+} from './canonical/v43-cross-route-rehearsal-telemetry-repair.js';
+export {
+ V43_PROMOTION_READINESS_GATE_ARTIFACT_PATHS,
+ V43_PROMOTION_READINESS_GENERATED_OUTPUTS,
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ V43_PROMOTION_READINESS_REPORT_CURRENT_TARGET,
+ V43_PROMOTION_READINESS_REPORT_SCHEMA_ID,
+ V43_PROMOTION_READINESS_REPORT_VERSION,
+ V43_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ buildV43PromotionReadinessReport,
+ listMissingV43PromotionReadinessSources
+} from './canonical/v43-promotion-readiness-report.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 5d7f1b96..94980ca9 100644
--- a/packages/protocol/test/protocol-package-boundary.test.js
+++ b/packages/protocol/test/protocol-package-boundary.test.js
@@ -60,6 +60,8 @@ test('@bitcode/protocol commercial formalization exports package-native canon he
V38: { activeCanon: 'V38', draftTarget: 'V39' },
V39: { activeCanon: 'V39', draftTarget: 'V40' },
V40: { activeCanon: 'V40', draftTarget: 'V41' },
+ V41: { activeCanon: 'V41', draftTarget: 'V42' },
+ V42: { activeCanon: 'V42', draftTarget: 'V43' },
};
const expectedPosture = expectedPostureByPointer[pointer];
@@ -153,6 +155,31 @@ test('@bitcode/protocol accepts live repository revision deposits without demo i
assert.equal(result.depositoryEvidence.searchDocuments.vector.embeddingPolicy.model, 'text-embedding-3-small');
assert.equal(result.depositoryEvidence.searchDocuments.vector.embeddingPolicy.dimensions, 1536);
assert.equal(result.depositoryEvidence.searchDocuments.vector.embeddingPolicy.vectorStore.rpc, 'match_deliverable_vectors');
+ assert.equal(result.depositoryEvidence.compensationPreview.state, 'eligible-if-selected-for-assetpack');
+ assert.equal(result.depositoryEvidence.compensationPreview.compensationRoute.priceAsset, 'BTC');
+ assert.equal(
+ result.depositoryEvidence.compensationPreview.compensationRoute.allocationMethod,
+ 'source-to-shares-largest-remainder',
+ );
+ assert.equal(
+ result.depositoryEvidence.compensationPreview.compensationRoute.btdMintBoundary,
+ 'not-minted-by-deposit-admission',
+ );
+ assert.equal(result.depositoryEvidence.compensationPreview.visibility.protectedSourceVisible, false);
+ assert.equal(result.depositoryEvidence.compensationPreview.visibility.unpaidAssetPackSourceVisible, false);
+ assert.equal(result.depositoryEvidence.compensationPreview.readiness.eligibleForFindingFits, true);
+ assert.equal(result.depositoryEvidence.compensationPreview.readiness.eligibleForCompensationIfSelected, true);
+ assert.match(result.depositoryEvidence.compensationPreviewRoot, /^sha256:[a-f0-9]{64}$/);
+ assert.match(result.depositoryEvidence.sourceToSharesPreviewRoot, /^sha256:[a-f0-9]{64}$/);
+ assert.equal(
+ result.asset.compensationPreview.roots.compensationPreviewRoot,
+ result.depositoryEvidence.compensationPreviewRoot,
+ );
+ const state = app.getState('internal');
+ assert.equal(
+ state.ledger.accounts[`depositor:${result.depositoryEvidence.depositorBoundary.walletId}:eligible_compensation_routes`],
+ '1',
+ );
const depositedText = result.asset.contentUnits?.[0]?.text;
assert.match(depositedText, /Bitcode repository revision deposit/);
assert.match(depositedText, /Repository: engineeredsoftware\/ENGI/);
diff --git a/packages/protocol/test/v42-ai-reading-demonstration.test.js b/packages/protocol/test/v42-ai-reading-demonstration.test.js
new file mode 100644
index 00000000..aa7e0715
--- /dev/null
+++ b/packages/protocol/test/v42-ai-reading-demonstration.test.js
@@ -0,0 +1,42 @@
+import assert from 'node:assert/strict';
+import test from 'node:test';
+
+import {
+ V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH,
+ V42_AI_READING_DEMONSTRATION_ROW_IDS,
+ V42_AI_READING_DEMONSTRATION_SCHEMA_ID,
+ buildV42AiReadingDemonstration,
+} from '../src/canonical/v42-ai-reading-demonstration.js';
+
+test('V42 AI-reading demonstration artifact is source-safe and complete', () => {
+ const artifact = buildV42AiReadingDemonstration();
+
+ assert.equal(V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH, '.bitcode/v42-ai-reading-demonstration.json');
+ assert.equal(artifact.artifactId, 'v42-ai-reading-demonstration');
+ assert.equal(artifact.schemaId, V42_AI_READING_DEMONSTRATION_SCHEMA_ID);
+ assert.equal(artifact.version, 'V42');
+ assert.equal(artifact.currentTarget, 'V41');
+ assert.deepEqual(artifact.rowIds, [...V42_AI_READING_DEMONSTRATION_ROW_IDS]);
+ assert.equal(artifact.coverage.rowCount, 8);
+ assert.equal(artifact.coverage.baselineMode, 'public-data-only');
+ assert.equal(artifact.coverage.enhancedMode, 'assetpack-enhanced-after-rights');
+ assert.equal(artifact.coverage.expectedBaselineBp, 0);
+ assert.equal(artifact.coverage.expectedTreatmentBp, 10000);
+ assert.equal(artifact.coverage.minimumUpliftBp, 2400);
+ assert.equal(artifact.coverage.expectedSelectedDepositId, 'deposit-auth-migration-runbook');
+ assert.equal(artifact.coverage.expectedFitResultState, 'worthy_fit');
+ assert.equal(artifact.coverage.protectedSourceBeforeSettlement, 'withheld_until_settlement');
+ assert.equal(artifact.coverage.sourceBearingDeliveryRequiresSettlement, true);
+ assert.equal(artifact.coverage.deterministicLocalOnly, true);
+ assert.equal(artifact.coverage.selfContainedDemonstration, true);
+ assert.equal(artifact.coverage.outsideRuntimeImportRequired, false);
+ assert.equal(artifact.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(artifact.coverage.protectedSourcePayloadSerialized, false);
+ assert.equal(artifact.coverage.rawProtectedPromptVisible, false);
+ assert.equal(artifact.coverage.rawProviderResponseVisible, false);
+ assert.equal(artifact.coverage.unpaidAssetPackSourceVisible, false);
+ assert.deepEqual(artifact.coverage.failedPredicateIds, []);
+ assert.equal(artifact.passed, true);
+ assert.match(artifact.artifactRoot, /^v42-ai-reading-demonstration:/u);
+});
+
diff --git a/packages/protocol/test/v42-depositing-shortest-path.test.js b/packages/protocol/test/v42-depositing-shortest-path.test.js
new file mode 100644
index 00000000..cdc27eac
--- /dev/null
+++ b/packages/protocol/test/v42-depositing-shortest-path.test.js
@@ -0,0 +1,70 @@
+import assert from 'node:assert/strict';
+import test from 'node:test';
+
+import {
+ V42_DEPOSITING_SHORTEST_PATH_ARTIFACT_PATH,
+ V42_DEPOSITING_SHORTEST_PATH_ROW_IDS,
+ V42_DEPOSITING_SHORTEST_PATH_ROWS,
+ V42_DEPOSITING_SHORTEST_PATH_SCHEMA_ID,
+ V42_DEPOSITING_SHORTEST_PATH_SOURCE_SAFETY_VERDICT,
+ buildV42DepositingShortestPath,
+} from '../src/canonical/v42-depositing-shortest-path.js';
+
+test('V42 Depositing shortest path report binds admission proof and compensation visibility', () => {
+ const report = buildV42DepositingShortestPath();
+
+ assert.equal(V42_DEPOSITING_SHORTEST_PATH_ARTIFACT_PATH, '.bitcode/v42-depositing-shortest-path.json');
+ assert.equal(report.artifactId, 'v42-depositing-shortest-path');
+ assert.equal(report.schemaId, V42_DEPOSITING_SHORTEST_PATH_SCHEMA_ID);
+ assert.equal(report.version, 'V42');
+ assert.equal(report.currentTarget, 'V41');
+ assert.equal(report.sourceSafetyVerdict, V42_DEPOSITING_SHORTEST_PATH_SOURCE_SAFETY_VERDICT);
+ assert.equal(report.passed, true);
+ assert.deepEqual(report.rowIds, [...V42_DEPOSITING_SHORTEST_PATH_ROW_IDS]);
+ assert.equal(report.rows.length, V42_DEPOSITING_SHORTEST_PATH_ROWS.length);
+ assert.equal(report.coverage.rowCount, 8);
+ assert.deepEqual(report.coverage.acceptedUserPath, [
+ 'provide-source-material',
+ 'select-repository-source-anchor',
+ 'admit-deposit-to-depository',
+ 'receive-source-safe-admission-proof',
+ 'view-later-btc-compensation-attribution',
+ ]);
+ assert.equal(report.coverage.routeApiContractsCovered, true);
+ assert.equal(report.coverage.sourceValidationCovered, true);
+ assert.equal(report.coverage.storageProjectionCovered, true);
+ assert.equal(report.coverage.depositorySearchDocumentCovered, true);
+ assert.equal(report.coverage.sourceToSharesCompensationReadbackCovered, true);
+ assert.equal(report.coverage.terminalCompensationVisibilityCovered, true);
+ assert.equal(report.coverage.localStagingRehearsalCovered, true);
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(report.coverage.protectedSourceVisible, false);
+ assert.equal(report.coverage.rawSourceTextVisible, false);
+ assert.equal(report.coverage.credentialsSerialized, false);
+ assert.equal(report.coverage.walletPrivateMaterialVisible, false);
+ assert.equal(report.coverage.unpaidAssetPackSourceVisible, false);
+ assert.equal(report.coverage.settlementPrivatePayloadVisible, false);
+ assert.equal(report.coverage.btdMintedAtDepositAdmission, false);
+ assert.equal(report.coverage.btdRightsTransferredBeforeSettlement, false);
+ assert.equal(report.coverage.compensationAllocationMethod, 'source-to-shares-largest-remainder');
+ assert.equal(report.coverage.compensationPriceAsset, 'BTC');
+ assert.equal(report.coverage.legacySourceRoots, false);
+ assert.deepEqual(report.coverage.failedPredicateIds, []);
+ assert.ok(report.artifactRoot.startsWith('v42-depositing-shortest-path:'));
+});
+
+test('V42 Depositing shortest path rows remain source-safe metadata only', () => {
+ for (const row of V42_DEPOSITING_SHORTEST_PATH_ROWS) {
+ assert.ok(row.rowRoot.startsWith('v42-depositing-shortest-path-row:'));
+ assert.equal(row.sourceSafetyClass, 'source_safe_depositing_compensation_visibility_metadata');
+ assert.equal(row.sourceSafeMetadataOnly, true);
+ assert.equal(row.protectedSourceVisible, false);
+ assert.equal(row.rawSourceTextVisible, false);
+ assert.equal(row.credentialsSerialized, false);
+ assert.equal(row.walletPrivateMaterialVisible, false);
+ assert.equal(row.unpaidAssetPackSourceVisible, false);
+ assert.equal(row.settlementPrivatePayloadVisible, false);
+ assert.ok(row.forbiddenPayloadClasses.includes('protected-source-payloads'));
+ assert.ok(row.forbiddenPayloadClasses.includes('unpaid-assetpack-source'));
+ }
+});
diff --git a/packages/protocol/test/v42-local-staging-mvp-rehearsal.test.js b/packages/protocol/test/v42-local-staging-mvp-rehearsal.test.js
new file mode 100644
index 00000000..e0d739dd
--- /dev/null
+++ b/packages/protocol/test/v42-local-staging-mvp-rehearsal.test.js
@@ -0,0 +1,57 @@
+import assert from 'node:assert/strict';
+import test from 'node:test';
+
+import {
+ V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_LANE_IDS,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_ROW_IDS,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_SCHEMA_ID,
+ V42_LOCAL_STAGING_MVP_REHEARSAL_STAGE_IDS,
+ buildV42LocalStagingMvpRehearsal,
+} from '../src/canonical/v42-local-staging-mvp-rehearsal.js';
+
+test('V42 local/staging MVP rehearsal artifact is source-safe and complete', () => {
+ const artifact = buildV42LocalStagingMvpRehearsal();
+
+ assert.equal(V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH, '.bitcode/v42-local-staging-mvp-rehearsal.json');
+ assert.equal(artifact.artifactId, 'v42-local-staging-mvp-rehearsal');
+ assert.equal(artifact.schemaId, V42_LOCAL_STAGING_MVP_REHEARSAL_SCHEMA_ID);
+ assert.equal(artifact.version, 'V42');
+ assert.equal(artifact.currentTarget, 'V41');
+ assert.deepEqual(artifact.laneIds, [...V42_LOCAL_STAGING_MVP_REHEARSAL_LANE_IDS]);
+ assert.deepEqual(artifact.stageIds, [...V42_LOCAL_STAGING_MVP_REHEARSAL_STAGE_IDS]);
+ assert.deepEqual(artifact.rowIds, [...V42_LOCAL_STAGING_MVP_REHEARSAL_ROW_IDS]);
+ assert.equal(artifact.coverage.rowCount, 14);
+ assert.equal(artifact.coverage.laneCount, 2);
+ assert.equal(artifact.coverage.stageCount, 7);
+ assert.equal(artifact.coverage.gateArtifactCount, 6);
+ assert.equal(artifact.coverage.stagingProjectRef, 'tkpyosihuouusyaxtbau');
+ assert.equal(artifact.coverage.stagingRestHost, 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/');
+ assert.equal(artifact.coverage.depositingCovered, true);
+ assert.equal(artifact.coverage.readRequestCovered, true);
+ assert.equal(artifact.coverage.readNeedReviewCovered, true);
+ assert.equal(artifact.coverage.readFitsFindingCovered, true);
+ assert.equal(artifact.coverage.manyCandidateDepositorySearchCovered, true);
+ assert.equal(artifact.coverage.sourceSafePreviewQuoteCovered, true);
+ assert.equal(artifact.coverage.settlementRightsDeliveryCovered, true);
+ assert.equal(artifact.coverage.aiReadingDemonstrationCovered, true);
+ assert.equal(artifact.coverage.richTelemetryReadbackCovered, true);
+ assert.equal(artifact.coverage.databaseStreamReadbackCovered, true);
+ assert.equal(artifact.coverage.ledgerDatabaseStorageSynchronized, true);
+ assert.equal(artifact.coverage.postSettlementPullRequestDeliveryCovered, true);
+ assert.equal(artifact.coverage.operatorReceiptScriptCovered, true);
+ assert.equal(artifact.coverage.mainnetValueBearingBlocked, true);
+ assert.equal(artifact.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(artifact.coverage.protectedSourcePayloadSerialized, false);
+ assert.equal(artifact.coverage.rawProtectedPromptVisible, false);
+ assert.equal(artifact.coverage.rawInterpolatedPromptVisible, false);
+ assert.equal(artifact.coverage.rawProviderResponseVisible, false);
+ assert.equal(artifact.coverage.unpaidAssetPackSourceVisible, false);
+ assert.equal(artifact.coverage.credentialsSerialized, false);
+ assert.equal(artifact.coverage.walletPrivateMaterialVisible, false);
+ assert.equal(artifact.coverage.privateSettlementPayloadVisible, false);
+ assert.equal(artifact.coverage.liveRehearsalLogPayloadSerialized, false);
+ assert.deepEqual(artifact.coverage.failedPredicateIds, []);
+ assert.equal(artifact.passed, true);
+ assert.match(artifact.artifactRoot, /^v42-local-staging-mvp-rehearsal:/u);
+});
diff --git a/packages/protocol/test/v42-promotion-readiness.test.js b/packages/protocol/test/v42-promotion-readiness.test.js
new file mode 100644
index 00000000..5c5dc773
--- /dev/null
+++ b/packages/protocol/test/v42-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 {
+ V42_PROMOTION_READINESS_GATE_ARTIFACT_PATHS,
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ buildV42PromotionReadinessReport,
+ generateCanonicalProvenMarkdown,
+} from '../src/index.js';
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+const repoRoot = path.resolve(__dirname, '..', '..', '..');
+
+test('builds source-safe V42 PromotionReadinessReport', () => {
+ const report = buildV42PromotionReadinessReport({
+ generatedAt: '2026-05-25T00:00:00.000Z',
+ repoRoot,
+ });
+
+ assert.equal(report.artifactId, 'v42-promotion-readiness-report');
+ assert.equal(report.schemaId, 'bitcode.v42.promotionReadinessReport.v1');
+ assert.equal(report.version, 'V42');
+ assert.equal(report.currentTarget, 'V41');
+ assert.equal(report.passed, true);
+ assert.equal(report.sourceSafetyVerdict, 'source-safe-v42-reliable-mvp-promotion-readiness-metadata');
+ assert.equal(report.prePromotionPosture, 'V41 active / V42 draft');
+ assert.equal(report.postPromotionPosture, 'V42 active / V43 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, /^reliable-mvp-promotion-readiness-report:[a-f0-9]{24}$/u);
+ assert.equal(
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ '.bitcode/v42-promotion-readiness-report.json',
+ );
+
+ for (const artifactPath of V42_PROMOTION_READINESS_GATE_ARTIFACT_PATHS) {
+ assert.equal(report.gateArtifactEvidence.some((artifact) => artifact.relativePath === artifactPath), true, `missing ${artifactPath}`);
+ }
+});
+
+test('supports V42 promotion readiness with source-safe reliable MVP artifacts', () => {
+ const result = generateCanonicalProvenMarkdown({
+ version: 'V42',
+ canonicalCommit: '0'.repeat(40),
+ canonicalCommitRecordedAt: '2026-05-25T00:00:00.000Z',
+ generatedAt: '2026-05-25T00:00:00.000Z',
+ worktreeState: 'clean',
+ });
+
+ assert.equal(result.data.version, 'V42');
+ assert.equal(result.data.v42.promotionReadinessReport.artifactId, 'v42-promotion-readiness-report');
+ assert.equal(result.data.v42.promotionReadinessReport.prePromotionPosture, 'V41 active / V42 draft');
+ assert.equal(result.data.v42.promotionReadinessReport.postPromotionPosture, 'V42 active / V43 draft');
+ assert.equal(result.data.v42.promotionReadinessReport.passed, true);
+ assert.match(result.markdown, /V42 Promotion Readiness/);
+ assert.ok(result.artifacts['.bitcode/v42-promotion-readiness-report.json']);
+ assert.ok(result.artifacts['.bitcode/v42-canon-posture-drift-report.json']);
+});
diff --git a/packages/protocol/test/v42-readfitsfinding-preview-quote.test.js b/packages/protocol/test/v42-readfitsfinding-preview-quote.test.js
new file mode 100644
index 00000000..169a499c
--- /dev/null
+++ b/packages/protocol/test/v42-readfitsfinding-preview-quote.test.js
@@ -0,0 +1,80 @@
+import assert from 'node:assert/strict';
+import test from 'node:test';
+
+import {
+ V42_READFITSFINDING_PREVIEW_QUOTE_ARTIFACT_PATH,
+ V42_READFITSFINDING_PREVIEW_QUOTE_ROWS,
+ V42_READFITSFINDING_PREVIEW_QUOTE_ROW_IDS,
+ V42_READFITSFINDING_PREVIEW_QUOTE_SCHEMA_ID,
+ V42_READFITSFINDING_PREVIEW_QUOTE_SOURCE_SAFETY_VERDICT,
+ buildV42ReadFitsFindingPreviewQuote,
+} from '../src/canonical/v42-readfitsfinding-preview-quote.js';
+
+test('V42 ReadFitsFinding preview and quote closure binds search, provenance, preview, and quote', () => {
+ const report = buildV42ReadFitsFindingPreviewQuote();
+
+ assert.equal(
+ V42_READFITSFINDING_PREVIEW_QUOTE_ARTIFACT_PATH,
+ '.bitcode/v42-readfitsfinding-preview-quote.json',
+ );
+ assert.equal(report.artifactId, 'v42-readfitsfinding-preview-quote');
+ assert.equal(report.schemaId, V42_READFITSFINDING_PREVIEW_QUOTE_SCHEMA_ID);
+ assert.equal(report.version, 'V42');
+ assert.equal(report.currentTarget, 'V41');
+ assert.equal(report.sourceSafetyVerdict, V42_READFITSFINDING_PREVIEW_QUOTE_SOURCE_SAFETY_VERDICT);
+ assert.equal(report.passed, true);
+ assert.deepEqual(report.rowIds, [...V42_READFITSFINDING_PREVIEW_QUOTE_ROW_IDS]);
+ assert.equal(report.rows.length, V42_READFITSFINDING_PREVIEW_QUOTE_ROWS.length);
+ assert.equal(report.coverage.rowCount, 12);
+ assert.equal(report.coverage.pipelineName, 'ReadFitsFindingSynthesis');
+ assert.equal(report.coverage.requiredPriorPipelineName, 'ReadNeedComprehensionSynthesis');
+ assert.equal(report.coverage.phaseCount, 7);
+ assert.equal(report.coverage.agentCount, 8);
+ assert.equal(report.coverage.ptrrStepCount, 32);
+ assert.equal(report.coverage.failsafeSequenceCount, 96);
+ assert.equal(report.coverage.thricifiedGenerationCount, 96);
+ assert.deepEqual(report.coverage.searchChannelIds, [
+ 'lexical',
+ 'symbolic',
+ 'path',
+ 'metadata',
+ 'measurement',
+ 'embedding-vector',
+ 'provider-specific',
+ ]);
+ assert.equal(report.coverage.selectedFitProvenanceRequired, true);
+ assert.equal(report.coverage.sourceSafePreviewRequired, true);
+ assert.equal(report.coverage.deterministicQuoteRequired, true);
+ assert.equal(report.coverage.noProtectedSourceBeforeSettlement, true);
+ assert.equal(report.coverage.settlementInstructionsRequired, true);
+ assert.equal(report.coverage.terminalPreviewQuoteReadbackCovered, true);
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ 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.equal(report.coverage.settlementPrivatePayloadVisible, false);
+ assert.equal(report.coverage.credentialsSerialized, false);
+ assert.equal(report.coverage.legacySourceRoots, false);
+ assert.deepEqual(report.coverage.failedPredicateIds, []);
+ assert.ok(report.artifactRoot.startsWith('v42-readfitsfinding-preview-quote:'));
+});
+
+test('V42 ReadFitsFinding preview and quote rows remain source-safe metadata', () => {
+ for (const row of V42_READFITSFINDING_PREVIEW_QUOTE_ROWS) {
+ assert.ok(row.rowRoot.startsWith('v42-readfitsfinding-preview-quote-row:'));
+ assert.equal(row.sourceSafetyClass, 'source_safe_readfitsfinding_preview_quote_metadata');
+ assert.equal(row.sourceSafeMetadataOnly, true);
+ assert.equal(row.protectedSourceVisible, false);
+ assert.equal(row.rawProtectedPromptVisible, false);
+ assert.equal(row.rawProviderResponseVisible, false);
+ assert.equal(row.unpaidAssetPackSourceVisible, false);
+ assert.equal(row.walletPrivateMaterialVisible, false);
+ assert.equal(row.settlementPrivatePayloadVisible, false);
+ assert.equal(row.credentialsSerialized, false);
+ assert.ok(row.forbiddenPayloadClasses.includes('protected-source-payloads'));
+ assert.ok(row.forbiddenPayloadClasses.includes('raw-provider-responses'));
+ assert.ok(row.forbiddenPayloadClasses.includes('unpaid-assetpack-source'));
+ }
+});
diff --git a/packages/protocol/test/v42-reading-shortest-path-state-machine.test.js b/packages/protocol/test/v42-reading-shortest-path-state-machine.test.js
new file mode 100644
index 00000000..db12e040
--- /dev/null
+++ b/packages/protocol/test/v42-reading-shortest-path-state-machine.test.js
@@ -0,0 +1,77 @@
+import assert from 'node:assert/strict';
+import test from 'node:test';
+
+import {
+ V42_READING_SHORTEST_PATH_ROWS,
+ V42_READING_SHORTEST_PATH_ROW_IDS,
+ V42_READING_SHORTEST_PATH_SCHEMA_ID,
+ V42_READING_SHORTEST_PATH_STATE_MACHINE_ARTIFACT_PATH,
+ V42_READING_SHORTEST_PATH_STATE_MACHINE_SOURCE_SAFETY_VERDICT,
+ V42_READING_SHORTEST_PATH_STEP_IDS,
+ buildV42ReadingShortestPathStateMachine,
+} from '../src/canonical/v42-reading-shortest-path-state-machine.js';
+
+test('V42 Reading shortest path state machine binds five route-recoverable steps', () => {
+ const report = buildV42ReadingShortestPathStateMachine();
+
+ assert.equal(
+ V42_READING_SHORTEST_PATH_STATE_MACHINE_ARTIFACT_PATH,
+ '.bitcode/v42-reading-shortest-path-state-machine.json',
+ );
+ assert.equal(report.artifactId, 'v42-reading-shortest-path-state-machine');
+ assert.equal(report.schemaId, V42_READING_SHORTEST_PATH_SCHEMA_ID);
+ assert.equal(report.version, 'V42');
+ assert.equal(report.currentTarget, 'V41');
+ assert.equal(report.sourceSafetyVerdict, V42_READING_SHORTEST_PATH_STATE_MACHINE_SOURCE_SAFETY_VERDICT);
+ assert.equal(report.passed, true);
+ assert.deepEqual(report.rowIds, [...V42_READING_SHORTEST_PATH_ROW_IDS]);
+ assert.deepEqual(report.stepIds, [...V42_READING_SHORTEST_PATH_STEP_IDS]);
+ assert.equal(report.rows.length, V42_READING_SHORTEST_PATH_ROWS.length);
+ assert.equal(report.coverage.rowCount, 9);
+ assert.equal(report.coverage.stepCount, 5);
+ assert.deepEqual(report.coverage.acceptedUserPath, [
+ 'request-read',
+ 'review-synthesized-need',
+ 'request-finding-fits',
+ 'review-source-safe-assetpack-preview',
+ 'buy-settle-and-deliver-assetpack',
+ ]);
+ assert.equal(report.coverage.routePersistenceCovered, true);
+ assert.equal(report.coverage.transactionIdRecoveryCovered, true);
+ assert.equal(report.coverage.restartRetryFailureCovered, true);
+ assert.equal(report.coverage.acceptedNeedGateCovered, true);
+ assert.equal(report.coverage.streamLogIntegrationCovered, true);
+ assert.equal(report.coverage.componentRouteTestsCovered, true);
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(report.coverage.lowDetailDefault, true);
+ assert.equal(report.coverage.expandableSourceSafeDetail, true);
+ 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.equal(report.coverage.settlementPrivatePayloadVisible, false);
+ assert.equal(report.coverage.ledgerAuthorityClaimed, false);
+ assert.equal(report.coverage.legacySourceRoots, false);
+ assert.deepEqual(report.coverage.failedPredicateIds, []);
+ assert.ok(report.artifactRoot.startsWith('v42-reading-shortest-path-state-machine:'));
+});
+
+test('V42 Reading shortest path rows remain expandable source-safe metadata', () => {
+ for (const row of V42_READING_SHORTEST_PATH_ROWS) {
+ assert.ok(row.rowRoot.startsWith('v42-reading-shortest-path-state-machine-row:'));
+ assert.equal(row.sourceSafetyClass, 'source_safe_reading_shortest_path_state_machine_metadata');
+ assert.equal(row.sourceSafeMetadataOnly, true);
+ assert.equal(row.lowDetailDefault, true);
+ assert.equal(row.expandableSourceSafeDetail, true);
+ assert.equal(row.protectedSourceVisible, false);
+ assert.equal(row.rawProtectedPromptVisible, false);
+ assert.equal(row.rawProviderResponseVisible, false);
+ assert.equal(row.unpaidAssetPackSourceVisible, false);
+ assert.equal(row.walletPrivateMaterialVisible, false);
+ assert.equal(row.settlementPrivatePayloadVisible, false);
+ assert.equal(row.ledgerAuthorityClaimed, false);
+ assert.ok(row.forbiddenPayloadClasses.includes('protected-source-payloads'));
+ assert.ok(row.forbiddenPayloadClasses.includes('unpaid-assetpack-source'));
+ }
+});
diff --git a/packages/protocol/test/v42-readneed-review-resynthesis-product-closure.test.js b/packages/protocol/test/v42-readneed-review-resynthesis-product-closure.test.js
new file mode 100644
index 00000000..277ee41c
--- /dev/null
+++ b/packages/protocol/test/v42-readneed-review-resynthesis-product-closure.test.js
@@ -0,0 +1,73 @@
+import assert from 'node:assert/strict';
+import test from 'node:test';
+
+import {
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ARTIFACT_PATH,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROWS,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROW_IDS,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SCHEMA_ID,
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SOURCE_SAFETY_VERDICT,
+ V42_READNEED_REVIEW_RESYNTHESIS_SCHEMA_ID,
+ buildV42ReadNeedReviewResynthesisProductClosure,
+} from '../src/canonical/v42-readneed-review-resynthesis-product-closure.js';
+
+test('V42 ReadNeed review and resynthesis product closure binds the accepted Need gate', () => {
+ const report = buildV42ReadNeedReviewResynthesisProductClosure();
+
+ assert.equal(
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ARTIFACT_PATH,
+ '.bitcode/v42-readneed-review-resynthesis-product-closure.json',
+ );
+ assert.equal(report.artifactId, 'v42-readneed-review-resynthesis-product-closure');
+ assert.equal(report.schemaId, V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SCHEMA_ID);
+ assert.equal(report.schemaId, V42_READNEED_REVIEW_RESYNTHESIS_SCHEMA_ID);
+ assert.equal(report.version, 'V42');
+ assert.equal(report.currentTarget, 'V41');
+ assert.equal(report.sourceSafetyVerdict, V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_SOURCE_SAFETY_VERDICT);
+ assert.equal(report.passed, true);
+ assert.deepEqual(report.rowIds, [...V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROW_IDS]);
+ assert.equal(report.rows.length, V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROWS.length);
+ assert.equal(report.coverage.rowCount, 11);
+ assert.equal(report.coverage.phaseCount, 4);
+ assert.equal(report.coverage.ptrrStepCount, 16);
+ assert.equal(report.coverage.failsafeSequenceCount, 48);
+ assert.equal(report.coverage.thricifiedGenerationCount, 48);
+ assert.deepEqual(report.coverage.actions, [
+ 'synthesize_read_need',
+ 'resynthesize_read_need',
+ 'accept_read_need',
+ 'reject_read_need',
+ ]);
+ assert.equal(report.coverage.acceptedNeedRequiredForFindingFits, true);
+ assert.equal(report.coverage.rejectedNeedBlocksFindingFits, true);
+ assert.equal(report.coverage.terminalRuntimeReadbackCovered, true);
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ 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.equal(report.coverage.settlementPrivatePayloadVisible, false);
+ assert.equal(report.coverage.credentialsSerialized, false);
+ assert.equal(report.coverage.legacySourceRoots, false);
+ assert.deepEqual(report.coverage.failedPredicateIds, []);
+ assert.ok(report.artifactRoot.startsWith('v42-readneed-review-resynthesis-product-closure:'));
+});
+
+test('V42 ReadNeed review rows remain source-safe metadata', () => {
+ for (const row of V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ROWS) {
+ assert.ok(row.rowRoot.startsWith('v42-readneed-review-resynthesis-product-closure-row:'));
+ assert.equal(row.sourceSafetyClass, 'source_safe_readneed_review_resynthesis_product_closure_metadata');
+ assert.equal(row.sourceSafeMetadataOnly, true);
+ assert.equal(row.protectedSourceVisible, false);
+ assert.equal(row.rawProtectedPromptVisible, false);
+ assert.equal(row.rawProviderResponseVisible, false);
+ assert.equal(row.unpaidAssetPackSourceVisible, false);
+ assert.equal(row.walletPrivateMaterialVisible, false);
+ assert.equal(row.settlementPrivatePayloadVisible, false);
+ assert.equal(row.credentialsSerialized, false);
+ assert.ok(row.forbiddenPayloadClasses.includes('protected-source-payloads'));
+ assert.ok(row.forbiddenPayloadClasses.includes('raw-provider-responses'));
+ assert.ok(row.forbiddenPayloadClasses.includes('unpaid-assetpack-source'));
+ }
+});
diff --git a/packages/protocol/test/v42-settlement-rights-delivery.test.js b/packages/protocol/test/v42-settlement-rights-delivery.test.js
new file mode 100644
index 00000000..3bc42a16
--- /dev/null
+++ b/packages/protocol/test/v42-settlement-rights-delivery.test.js
@@ -0,0 +1,68 @@
+import test from 'node:test';
+import assert from 'node:assert/strict';
+import {
+ V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH,
+ V42_SETTLEMENT_RIGHTS_DELIVERY_ROW_IDS,
+ V42_SETTLEMENT_RIGHTS_DELIVERY_SCHEMA_ID,
+ V42_SETTLEMENT_RIGHTS_DELIVERY_SOURCE_SAFETY_VERDICT,
+ buildV42SettlementRightsDelivery,
+} from '../src/canonical/v42-settlement-rights-delivery.js';
+
+test('V42 settlement rights delivery proof is source-safe and complete', () => {
+ const report = buildV42SettlementRightsDelivery();
+
+ assert.equal(V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH, '.bitcode/v42-settlement-rights-delivery.json');
+ assert.equal(report.artifactId, 'v42-settlement-rights-delivery');
+ assert.equal(report.schemaId, V42_SETTLEMENT_RIGHTS_DELIVERY_SCHEMA_ID);
+ assert.equal(report.version, 'V42');
+ assert.equal(report.currentTarget, 'V41');
+ assert.equal(report.sourceSafetyVerdict, V42_SETTLEMENT_RIGHTS_DELIVERY_SOURCE_SAFETY_VERDICT);
+ assert.deepEqual(report.rowIds, [...V42_SETTLEMENT_RIGHTS_DELIVERY_ROW_IDS]);
+ assert.equal(report.coverage.rowCount, 11);
+ assert.equal(report.coverage.runtimeType, 'AssetPackSettlementRightsDeliveryBoundary');
+ assert.equal(report.coverage.paymentType, 'AssetPackSettlementPaymentObservation');
+ assert.equal(report.coverage.finalityType, 'AssetPackSettlementFinalityReceipt');
+ assert.equal(report.coverage.rightsTransferType, 'BtdRightsTransferReceipt');
+ assert.equal(report.coverage.sourceToSharesType, 'SourceToSharesProof');
+ assert.equal(report.coverage.reconciliationType, 'LedgerDatabaseReconciliationReport');
+ assert.equal(report.coverage.deliveryType, 'AssetPackDeliveryUnlockReceipt');
+ assert.equal(report.coverage.stagingProjectRef, 'tkpyosihuouusyaxtbau');
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(report.coverage.protectedSourcePayloadSerialized, false);
+ assert.equal(report.coverage.unpaidAssetPackSourceVisible, false);
+ assert.equal(report.coverage.walletPrivateMaterialVisible, false);
+ assert.equal(report.coverage.settlementPrivatePayloadVisible, false);
+ assert.equal(report.coverage.credentialsSerialized, false);
+ assert.equal(report.coverage.hostBoundaryMaterializationCovered, true);
+ assert.equal(report.coverage.routeReadbackCovered, true);
+ assert.equal(report.coverage.terminalReadbackCovered, true);
+ assert.equal(report.coverage.confirmedPaymentCovered, true);
+ assert.equal(report.coverage.underpaymentBlockedCovered, true);
+ assert.equal(report.coverage.finalityBlockedCovered, true);
+ assert.equal(report.coverage.reconciliationRepairCovered, true);
+ assert.deepEqual(report.coverage.failedPredicateIds, []);
+ assert.equal(report.passed, true);
+ assert.match(report.artifactRoot, /^v42-settlement-rights-delivery:/);
+});
+
+test('V42 settlement rights delivery rows cover purchase through post-settlement delivery', () => {
+ const report = buildV42SettlementRightsDelivery();
+ const rowIds = report.rows.map((row) => row.rowId);
+
+ assert.deepEqual(rowIds, [...V42_SETTLEMENT_RIGHTS_DELIVERY_ROW_IDS]);
+ assert.ok(rowIds.includes('purchase:quote-to-payment-observation'));
+ assert.ok(rowIds.includes('rights:btd-read-right-transfer'));
+ assert.ok(rowIds.includes('compensation:source-to-shares-conservation'));
+ assert.ok(rowIds.includes('delivery:source-bearing-pull-request-unlock'));
+ assert.ok(rowIds.includes('sync:ledger-database-object-storage-reconciliation'));
+ assert.ok(rowIds.includes('route:harness-settlement-summary'));
+ assert.ok(rowIds.includes('ui:terminal-settlement-readback'));
+ for (const row of report.rows) {
+ assert.equal(row.sourceSafeMetadataOnly, true);
+ assert.equal(row.protectedSourcePayloadSerialized, false);
+ assert.equal(row.walletPrivateMaterialVisible, false);
+ assert.equal(row.credentialsSerialized, false);
+ assert.ok(Array.isArray(row.requiredEvidence));
+ assert.ok(row.requiredEvidence.length >= 2);
+ }
+});
diff --git a/packages/protocol/test/v43-cross-route-rehearsal-telemetry-repair.test.js b/packages/protocol/test/v43-cross-route-rehearsal-telemetry-repair.test.js
new file mode 100644
index 00000000..3844dab9
--- /dev/null
+++ b/packages/protocol/test/v43-cross-route-rehearsal-telemetry-repair.test.js
@@ -0,0 +1,63 @@
+import assert from 'node:assert/strict';
+import test from 'node:test';
+
+import {
+ V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH,
+ V43_CROSS_ROUTE_REHEARSAL_LANE_IDS,
+ V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS,
+ V43_CROSS_ROUTE_REHEARSAL_ROW_IDS,
+ V43_CROSS_ROUTE_REHEARSAL_SCHEMA_ID,
+ V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS,
+ buildV43CrossRouteRehearsalTelemetryRepair,
+} from '../src/canonical/v43-cross-route-rehearsal-telemetry-repair.js';
+
+test('V43 cross-route rehearsal telemetry repair artifact is source-safe and complete', () => {
+ const artifact = buildV43CrossRouteRehearsalTelemetryRepair();
+
+ assert.equal(
+ V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH,
+ '.bitcode/v43-cross-route-rehearsal-telemetry-repair.json',
+ );
+ assert.equal(artifact.artifactId, 'v43-cross-route-rehearsal-telemetry-repair');
+ assert.equal(artifact.schemaId, V43_CROSS_ROUTE_REHEARSAL_SCHEMA_ID);
+ assert.equal(artifact.version, 'V43');
+ assert.equal(artifact.currentTarget, 'V42');
+ assert.deepEqual(artifact.laneIds, [...V43_CROSS_ROUTE_REHEARSAL_LANE_IDS]);
+ assert.deepEqual(artifact.routeIds, [...V43_CROSS_ROUTE_REHEARSAL_ROUTE_IDS]);
+ assert.deepEqual(artifact.stageIds, [...V43_CROSS_ROUTE_REHEARSAL_STAGE_IDS]);
+ assert.deepEqual(artifact.rowIds, [...V43_CROSS_ROUTE_REHEARSAL_ROW_IDS]);
+ assert.equal(artifact.coverage.rowCount, 12);
+ assert.equal(artifact.coverage.laneCount, 2);
+ assert.equal(artifact.coverage.routeCount, 3);
+ assert.equal(artifact.coverage.stageCount, 9);
+ assert.equal(artifact.coverage.gateArtifactCount, 6);
+ assert.equal(artifact.coverage.stagingProjectRef, 'tkpyosihuouusyaxtbau');
+ assert.equal(artifact.coverage.stagingRestHost, 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/');
+ assert.equal(artifact.coverage.depositRouteCovered, true);
+ assert.equal(artifact.coverage.readRouteCovered, true);
+ assert.equal(artifact.coverage.packsRouteCovered, true);
+ assert.equal(artifact.coverage.depositOptionAdmissionCovered, true);
+ assert.equal(artifact.coverage.readNeedAndFindingFitsCovered, true);
+ assert.equal(artifact.coverage.sourceSafePreviewCovered, true);
+ assert.equal(artifact.coverage.settlementRightsTransferCovered, true);
+ assert.equal(artifact.coverage.compensationCovered, true);
+ assert.equal(artifact.coverage.deliveryPullRequestCovered, true);
+ assert.equal(artifact.coverage.packActivityRepairCovered, true);
+ assert.equal(artifact.coverage.telemetryDatabaseReadbackCovered, true);
+ assert.equal(artifact.coverage.ledgerDatabaseStorageSynchronized, true);
+ assert.equal(artifact.coverage.repairMatrixCovered, true);
+ assert.equal(artifact.coverage.mainnetValueBearingBlocked, true);
+ assert.equal(artifact.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(artifact.coverage.protectedSourcePayloadSerialized, false);
+ assert.equal(artifact.coverage.rawProtectedPromptVisible, false);
+ assert.equal(artifact.coverage.rawInterpolatedPromptVisible, false);
+ assert.equal(artifact.coverage.rawProviderResponseVisible, false);
+ assert.equal(artifact.coverage.unpaidAssetPackSourceVisible, false);
+ assert.equal(artifact.coverage.credentialsSerialized, false);
+ assert.equal(artifact.coverage.walletPrivateMaterialVisible, false);
+ assert.equal(artifact.coverage.privateSettlementPayloadVisible, false);
+ assert.equal(artifact.coverage.liveRehearsalLogPayloadSerialized, false);
+ assert.deepEqual(artifact.coverage.failedPredicateIds, []);
+ assert.equal(artifact.passed, true);
+ assert.match(artifact.artifactRoot, /^v43-cross-route-rehearsal:/u);
+});
diff --git a/packages/protocol/test/v43-deposit-option-admission.test.js b/packages/protocol/test/v43-deposit-option-admission.test.js
new file mode 100644
index 00000000..2c35c25f
--- /dev/null
+++ b/packages/protocol/test/v43-deposit-option-admission.test.js
@@ -0,0 +1,51 @@
+import assert from 'node:assert/strict';
+import { test } from 'node:test';
+import {
+ V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH,
+ V43_DEPOSIT_OPTION_ADMISSION_FIELD_IDS,
+ V43_DEPOSIT_OPTION_ADMISSION_FORBIDDEN_PAYLOAD_IDS,
+ V43_DEPOSIT_OPTION_ADMISSION_OBJECT_IDS,
+ V43_DEPOSIT_OPTION_ADMISSION_SCHEMA_ID,
+ V43_DEPOSIT_OPTION_ADMISSION_SOURCE_SAFETY_VERDICT,
+ buildV43DepositOptionAdmission,
+} from '../src/canonical/v43-deposit-option-admission.js';
+
+test('V43 deposit option admission artifact binds source-safe admission contracts', () => {
+ const report = buildV43DepositOptionAdmission();
+
+ assert.equal(V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH, '.bitcode/v43-deposit-option-admission.json');
+ assert.equal(report.artifactId, 'v43-deposit-option-admission');
+ assert.equal(report.schemaId, V43_DEPOSIT_OPTION_ADMISSION_SCHEMA_ID);
+ assert.equal(report.version, 'V43');
+ assert.equal(report.currentTarget, 'V42');
+ assert.equal(report.sourceSafetyVerdict, V43_DEPOSIT_OPTION_ADMISSION_SOURCE_SAFETY_VERDICT);
+ assert.ok(report.artifactRoot.startsWith('v43-deposit-option-admission:'));
+ assert.deepEqual(report.objectIds, [...V43_DEPOSIT_OPTION_ADMISSION_OBJECT_IDS]);
+ assert.deepEqual(report.fieldIds, [...V43_DEPOSIT_OPTION_ADMISSION_FIELD_IDS]);
+ assert.deepEqual(report.forbiddenPayloadIds, [...V43_DEPOSIT_OPTION_ADMISSION_FORBIDDEN_PAYLOAD_IDS]);
+ assert.equal(report.contractRows.length, 5);
+ assert.equal(report.coverage.reviewDecisionsImplemented, true);
+ assert.equal(report.coverage.approvalDecisionImplemented, true);
+ assert.equal(report.coverage.rejectionDecisionImplemented, true);
+ assert.equal(report.coverage.resynthesisDecisionImplemented, true);
+ assert.equal(report.coverage.admissionReceiptsImplemented, true);
+ assert.equal(report.coverage.approvedPolicyEligibleOptionsAdmittedOnly, true);
+ assert.equal(report.coverage.depositoryIndexProjectionImplemented, true);
+ assert.equal(report.coverage.storageProjectionImplemented, true);
+ assert.equal(report.coverage.compensationPreviewContinued, true);
+ assert.equal(report.coverage.compensationPriceAsset, 'BTC');
+ assert.equal(report.coverage.compensationAllocationMethod, 'source-to-shares-largest-remainder');
+ assert.equal(report.coverage.packsActivitySynchronizationImplemented, true);
+ assert.equal(report.coverage.packsRoute, '/packs');
+ assert.equal(report.coverage.packsActivityType, 'depository-assetpack');
+ assert.equal(report.coverage.telemetryImplemented, true);
+ assert.equal(report.coverage.routeAdmissionReadbackImplemented, true);
+ assert.equal(report.coverage.btdMintRequiresFutureNeedFitSettlement, true);
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(report.coverage.protectedSourceVisible, false);
+ assert.equal(report.coverage.rawSourceTextVisible, false);
+ assert.equal(report.coverage.unpaidAssetPackSourceVisible, false);
+ assert.equal(report.coverage.rawProviderResponseVisible, false);
+ assert.equal(report.coverage.walletPrivateMaterialVisible, false);
+ assert.equal(report.coverage.settlementPrivatePayloadVisible, false);
+});
diff --git a/packages/protocol/test/v43-deposit-policy-compensation.test.js b/packages/protocol/test/v43-deposit-policy-compensation.test.js
new file mode 100644
index 00000000..2ff5506c
--- /dev/null
+++ b/packages/protocol/test/v43-deposit-policy-compensation.test.js
@@ -0,0 +1,44 @@
+import assert from 'node:assert/strict';
+import { test } from 'node:test';
+import {
+ V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH,
+ V43_DEPOSIT_POLICY_COMPENSATION_SCHEMA_ID,
+ V43_DEPOSIT_POLICY_COMPENSATION_SOURCE_SAFETY_VERDICT,
+ V43_DEPOSIT_POLICY_FIELD_IDS,
+ V43_DEPOSIT_POLICY_FORBIDDEN_PAYLOAD_IDS,
+ V43_DEPOSIT_POLICY_OBJECT_IDS,
+ buildV43DepositPolicyCompensation,
+} from '../src/canonical/v43-deposit-policy-compensation.js';
+
+test('V43 deposit policy compensation artifact binds source-safe policy contracts', () => {
+ const report = buildV43DepositPolicyCompensation();
+
+ assert.equal(V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH, '.bitcode/v43-deposit-policy-compensation.json');
+ assert.equal(report.artifactId, 'v43-deposit-policy-compensation');
+ assert.equal(report.schemaId, V43_DEPOSIT_POLICY_COMPENSATION_SCHEMA_ID);
+ assert.equal(report.version, 'V43');
+ assert.equal(report.currentTarget, 'V42');
+ assert.equal(report.sourceSafetyVerdict, V43_DEPOSIT_POLICY_COMPENSATION_SOURCE_SAFETY_VERDICT);
+ assert.ok(report.artifactRoot.startsWith('v43-deposit-policy-compensation:'));
+ assert.deepEqual(report.objectIds, [...V43_DEPOSIT_POLICY_OBJECT_IDS]);
+ assert.deepEqual(report.fieldIds, [...V43_DEPOSIT_POLICY_FIELD_IDS]);
+ assert.deepEqual(report.forbiddenPayloadIds, [...V43_DEPOSIT_POLICY_FORBIDDEN_PAYLOAD_IDS]);
+ assert.equal(report.contractRows.length, 4);
+ assert.equal(report.coverage.depositPolicyImplemented, true);
+ assert.equal(report.coverage.criticalityPolicyImplemented, true);
+ assert.equal(report.coverage.criticalSourceBlockedBeforeAdmission, true);
+ assert.equal(report.coverage.demandPolicyImplemented, true);
+ assert.equal(report.coverage.roiPolicyImplemented, true);
+ assert.equal(report.coverage.btdPotentialEstimateOnly, true);
+ assert.equal(report.coverage.compensationPolicyImplemented, true);
+ assert.equal(report.coverage.compensationPriceAsset, 'BTC');
+ assert.equal(report.coverage.compensationAllocationMethod, 'source-to-shares-largest-remainder');
+ assert.equal(report.coverage.btdMintRequiresFutureNeedFitSettlement, true);
+ assert.equal(report.coverage.admissionAndIndexingDeferredToGate7, true);
+ assert.equal(report.coverage.routePolicyReadbackImplemented, true);
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(report.coverage.protectedSourceVisible, false);
+ assert.equal(report.coverage.unpaidAssetPackSourceVisible, false);
+ assert.equal(report.coverage.walletPrivateMaterialVisible, false);
+ assert.equal(report.coverage.settlementPrivatePayloadVisible, false);
+});
diff --git a/packages/protocol/test/v43-deposit-route-options.test.js b/packages/protocol/test/v43-deposit-route-options.test.js
new file mode 100644
index 00000000..f4b2ca50
--- /dev/null
+++ b/packages/protocol/test/v43-deposit-route-options.test.js
@@ -0,0 +1,50 @@
+import assert from 'node:assert/strict';
+import { test } from 'node:test';
+import {
+ V43_DEPOSIT_OPTION_FORBIDDEN_PAYLOAD_IDS,
+ V43_DEPOSIT_OPTION_OBJECT_IDS,
+ V43_DEPOSIT_OPTION_PIPELINE_IDS,
+ V43_DEPOSIT_OPTION_SOURCE_SAFE_FIELD_IDS,
+ V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH,
+ V43_DEPOSIT_ROUTE_OPTIONS_SCHEMA_ID,
+ V43_DEPOSIT_ROUTE_OPTIONS_SOURCE_SAFETY_VERDICT,
+ V43_DEPOSIT_ROUTE_STEP_IDS,
+ buildV43DepositRouteOptions,
+} from '../src/canonical/v43-deposit-route-options.js';
+
+test('V43 deposit route options artifact binds source-safe Deposit route contracts', () => {
+ const report = buildV43DepositRouteOptions();
+
+ assert.equal(V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH, '.bitcode/v43-deposit-route-options.json');
+ assert.equal(report.artifactId, 'v43-deposit-route-options');
+ assert.equal(report.schemaId, V43_DEPOSIT_ROUTE_OPTIONS_SCHEMA_ID);
+ assert.equal(report.version, 'V43');
+ assert.equal(report.currentTarget, 'V42');
+ assert.equal(report.sourceSafetyVerdict, V43_DEPOSIT_ROUTE_OPTIONS_SOURCE_SAFETY_VERDICT);
+ assert.ok(report.artifactRoot.startsWith('v43-deposit-route-options:'));
+ assert.deepEqual(report.stepIds, [...V43_DEPOSIT_ROUTE_STEP_IDS]);
+ assert.deepEqual(report.objectIds, [...V43_DEPOSIT_OPTION_OBJECT_IDS]);
+ assert.deepEqual(report.pipelineIds, [...V43_DEPOSIT_OPTION_PIPELINE_IDS]);
+ assert.deepEqual(report.sourceSafeFieldIds, [...V43_DEPOSIT_OPTION_SOURCE_SAFE_FIELD_IDS]);
+ assert.deepEqual(report.forbiddenPayloadIds, [...V43_DEPOSIT_OPTION_FORBIDDEN_PAYLOAD_IDS]);
+ assert.equal(report.contractRows.length, 4);
+ assert.equal(report.coverage.depositRouteImplemented, true);
+ assert.equal(report.coverage.fiveStepDepositingUxImplemented, true);
+ assert.equal(report.coverage.optionSynthesisImplemented, true);
+ assert.equal(report.coverage.multipleOptionsSynthesized, true);
+ assert.equal(report.coverage.connectedSourceUsed, true);
+ assert.equal(report.coverage.depositoryDemandSignalsUsed, true);
+ assert.equal(report.coverage.readingDemandSignalsUsed, true);
+ assert.equal(report.coverage.existingDepositorySignalsUsed, true);
+ assert.equal(report.coverage.terminalDepositComposerReused, true);
+ assert.equal(report.coverage.sourceCriticalityDemandRoiPolicyDeferredToGate6, true);
+ assert.equal(report.coverage.admissionAndIndexingDeferredToGate7, true);
+ assert.equal(report.coverage.reviewRequiredBeforeDepositAdmission, true);
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(report.coverage.protectedSourceVisible, false);
+ assert.equal(report.coverage.rawSourceTextVisible, 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);
+});
diff --git a/packages/protocol/test/v43-packs-activity-master-detail.test.js b/packages/protocol/test/v43-packs-activity-master-detail.test.js
new file mode 100644
index 00000000..9516056a
--- /dev/null
+++ b/packages/protocol/test/v43-packs-activity-master-detail.test.js
@@ -0,0 +1,39 @@
+import assert from 'node:assert/strict';
+import { test } from 'node:test';
+import {
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH,
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_SCHEMA_ID,
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_SOURCE_SAFETY_VERDICT,
+ V43_PACK_ACTIVITY_DETAIL_SECTION_IDS,
+ V43_PACK_ACTIVITY_FILTER_IDS,
+ V43_PACK_ACTIVITY_SEARCH_FIELD_IDS,
+ V43_PACK_ACTIVITY_SORT_IDS,
+ V43_PACK_ACTIVITY_TYPE_IDS,
+ buildV43PacksActivityMasterDetail,
+} from '../src/canonical/v43-packs-activity-master-detail.js';
+
+test('V43 packs activity master-detail artifact binds source-safe route/API/UI contracts', () => {
+ const report = buildV43PacksActivityMasterDetail();
+
+ assert.equal(V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH, '.bitcode/v43-packs-activity-master-detail.json');
+ assert.equal(report.artifactId, 'v43-packs-activity-master-detail');
+ assert.equal(report.schemaId, V43_PACKS_ACTIVITY_MASTER_DETAIL_SCHEMA_ID);
+ assert.equal(report.version, 'V43');
+ assert.equal(report.currentTarget, 'V42');
+ assert.equal(report.sourceSafetyVerdict, V43_PACKS_ACTIVITY_MASTER_DETAIL_SOURCE_SAFETY_VERDICT);
+ assert.ok(report.artifactRoot.startsWith('v43-packs-activity-master-detail:'));
+ assert.deepEqual(report.typeIds, [...V43_PACK_ACTIVITY_TYPE_IDS]);
+ assert.deepEqual(report.searchFieldIds, [...V43_PACK_ACTIVITY_SEARCH_FIELD_IDS]);
+ assert.deepEqual(report.sortIds, [...V43_PACK_ACTIVITY_SORT_IDS]);
+ assert.deepEqual(report.filterIds, [...V43_PACK_ACTIVITY_FILTER_IDS]);
+ assert.deepEqual(report.detailSectionIds, [...V43_PACK_ACTIVITY_DETAIL_SECTION_IDS]);
+ assert.equal(report.contractRows.length, 4);
+ 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.packActivityContractsImplemented, true);
+ assert.equal(report.coverage.packsActivityApiImplemented, true);
+});
diff --git a/packages/protocol/test/v43-promotion-readiness.test.js b/packages/protocol/test/v43-promotion-readiness.test.js
new file mode 100644
index 00000000..9fba3dd8
--- /dev/null
+++ b/packages/protocol/test/v43-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 {
+ V43_PROMOTION_READINESS_GATE_ARTIFACT_PATHS,
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ buildV43PromotionReadinessReport,
+ generateCanonicalProvenMarkdown,
+} from '../src/index.js';
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+const repoRoot = path.resolve(__dirname, '..', '..', '..');
+
+test('builds source-safe V43 PromotionReadinessReport', () => {
+ const report = buildV43PromotionReadinessReport({
+ generatedAt: '2026-05-29T00:00:00.000Z',
+ repoRoot,
+ });
+
+ assert.equal(report.artifactId, 'v43-promotion-readiness-report');
+ assert.equal(report.schemaId, 'bitcode.v43.promotionReadinessReport.v1');
+ assert.equal(report.version, 'V43');
+ assert.equal(report.currentTarget, 'V42');
+ assert.equal(report.passed, true);
+ assert.equal(report.sourceSafetyVerdict, 'source-safe-v43-product-routes-agentic-depositing-promotion-metadata');
+ assert.equal(report.prePromotionPosture, 'V42 active / V43 draft');
+ assert.equal(report.postPromotionPosture, 'V43 active / V44 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, /^v43-product-route-promotion-readiness-report:[a-f0-9]{24}$/u);
+ assert.equal(
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ '.bitcode/v43-promotion-readiness-report.json',
+ );
+
+ for (const artifactPath of V43_PROMOTION_READINESS_GATE_ARTIFACT_PATHS) {
+ assert.equal(report.gateArtifactEvidence.some((artifact) => artifact.relativePath === artifactPath), true, `missing ${artifactPath}`);
+ }
+});
+
+test('supports V43 promotion readiness with source-safe product routes and agentic depositing artifacts', () => {
+ const result = generateCanonicalProvenMarkdown({
+ version: 'V43',
+ canonicalCommit: '0'.repeat(40),
+ canonicalCommitRecordedAt: '2026-05-29T00:00:00.000Z',
+ generatedAt: '2026-05-29T00:00:00.000Z',
+ worktreeState: 'clean',
+ });
+
+ assert.equal(result.data.version, 'V43');
+ assert.equal(result.data.v43.promotionReadinessReport.artifactId, 'v43-promotion-readiness-report');
+ assert.equal(result.data.v43.promotionReadinessReport.prePromotionPosture, 'V42 active / V43 draft');
+ assert.equal(result.data.v43.promotionReadinessReport.postPromotionPosture, 'V43 active / V44 draft');
+ assert.equal(result.data.v43.promotionReadinessReport.passed, true);
+ assert.match(result.markdown, /V43 Promotion Readiness/);
+ assert.ok(result.artifacts['.bitcode/v43-promotion-readiness-report.json']);
+ assert.ok(result.artifacts['.bitcode/v43-canon-posture-drift-report.json']);
+});
diff --git a/packages/protocol/test/v43-read-route-five-step-ux.test.js b/packages/protocol/test/v43-read-route-five-step-ux.test.js
new file mode 100644
index 00000000..fb82e6b7
--- /dev/null
+++ b/packages/protocol/test/v43-read-route-five-step-ux.test.js
@@ -0,0 +1,43 @@
+import assert from 'node:assert/strict';
+import { test } from 'node:test';
+import {
+ V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH,
+ V43_READ_ROUTE_FIVE_STEP_UX_SCHEMA_ID,
+ V43_READ_ROUTE_FIVE_STEP_UX_SOURCE_SAFETY_VERDICT,
+ V43_READ_ROUTE_FORBIDDEN_PAYLOAD_IDS,
+ V43_READ_ROUTE_OBJECT_IDS,
+ V43_READ_ROUTE_PIPELINE_IDS,
+ V43_READ_ROUTE_SOURCE_SAFE_FIELD_IDS,
+ V43_READ_ROUTE_STEP_IDS,
+ buildV43ReadRouteFiveStepUx,
+} from '../src/canonical/v43-read-route-five-step-ux.js';
+
+test('V43 read route five-step UX artifact binds source-safe Reading route contracts', () => {
+ const report = buildV43ReadRouteFiveStepUx();
+
+ assert.equal(V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH, '.bitcode/v43-read-route-five-step-ux.json');
+ assert.equal(report.artifactId, 'v43-read-route-five-step-ux');
+ assert.equal(report.schemaId, V43_READ_ROUTE_FIVE_STEP_UX_SCHEMA_ID);
+ assert.equal(report.version, 'V43');
+ assert.equal(report.currentTarget, 'V42');
+ assert.equal(report.sourceSafetyVerdict, V43_READ_ROUTE_FIVE_STEP_UX_SOURCE_SAFETY_VERDICT);
+ assert.ok(report.artifactRoot.startsWith('v43-read-route-five-step-ux:'));
+ assert.deepEqual(report.stepIds, [...V43_READ_ROUTE_STEP_IDS]);
+ assert.deepEqual(report.objectIds, [...V43_READ_ROUTE_OBJECT_IDS]);
+ assert.deepEqual(report.pipelineIds, [...V43_READ_ROUTE_PIPELINE_IDS]);
+ assert.deepEqual(report.sourceSafeFieldIds, [...V43_READ_ROUTE_SOURCE_SAFE_FIELD_IDS]);
+ assert.deepEqual(report.forbiddenPayloadIds, [...V43_READ_ROUTE_FORBIDDEN_PAYLOAD_IDS]);
+ assert.equal(report.contractRows.length, 4);
+ assert.equal(report.coverage.readRouteImplemented, true);
+ assert.equal(report.coverage.fiveStepUxImplemented, true);
+ assert.equal(report.coverage.acceptedNeedRequiredBeforeFindingFits, true);
+ assert.equal(report.coverage.sourceSafePreviewBeforeSettlement, true);
+ assert.equal(report.coverage.deliveryRequiresPaidReadRights, true);
+ assert.equal(report.coverage.executionStreamRetained, 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);
+});
diff --git a/packages/protocol/test/v43-route-ux-product-excellence.test.js b/packages/protocol/test/v43-route-ux-product-excellence.test.js
new file mode 100644
index 00000000..f554f5a1
--- /dev/null
+++ b/packages/protocol/test/v43-route-ux-product-excellence.test.js
@@ -0,0 +1,44 @@
+import assert from 'node:assert/strict';
+import { test } from 'node:test';
+import {
+ V43_ROUTE_UX_FIELD_IDS,
+ V43_ROUTE_UX_FORBIDDEN_PAYLOAD_IDS,
+ V43_ROUTE_UX_OBJECT_IDS,
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH,
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_SCHEMA_ID,
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_SOURCE_SAFETY_VERDICT,
+ buildV43RouteUxProductExcellence,
+} from '../src/canonical/v43-route-ux-product-excellence.js';
+
+test('V43 route UX product excellence artifact binds shared route polish contracts', () => {
+ const report = buildV43RouteUxProductExcellence();
+
+ assert.equal(V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH, '.bitcode/v43-route-ux-product-excellence.json');
+ assert.equal(report.artifactId, 'v43-route-ux-product-excellence');
+ assert.equal(report.schemaId, V43_ROUTE_UX_PRODUCT_EXCELLENCE_SCHEMA_ID);
+ assert.equal(report.version, 'V43');
+ assert.equal(report.currentTarget, 'V42');
+ assert.equal(report.sourceSafetyVerdict, V43_ROUTE_UX_PRODUCT_EXCELLENCE_SOURCE_SAFETY_VERDICT);
+ assert.ok(report.artifactRoot.startsWith('v43-route-ux-product-excellence:'));
+ assert.deepEqual(report.objectIds, [...V43_ROUTE_UX_OBJECT_IDS]);
+ assert.deepEqual(report.fieldIds, [...V43_ROUTE_UX_FIELD_IDS]);
+ assert.deepEqual(report.forbiddenPayloadIds, [...V43_ROUTE_UX_FORBIDDEN_PAYLOAD_IDS]);
+ assert.equal(report.contractRows.length, 5);
+ assert.equal(report.coverage.sharedRouteShellImplemented, true);
+ assert.equal(report.coverage.sharedStepGridImplemented, true);
+ assert.equal(report.coverage.keyboardCurrentStepImplemented, true);
+ assert.equal(report.coverage.productRouteStatePanelsImplemented, true);
+ assert.equal(report.coverage.loadingEmptyErrorStatesImplemented, true);
+ assert.equal(report.coverage.progressiveDisclosureImplemented, true);
+ assert.equal(report.coverage.packsRouteUsesSharedShell, true);
+ assert.equal(report.coverage.readRouteUsesSharedShell, true);
+ assert.equal(report.coverage.depositRouteUsesSharedShell, true);
+ assert.equal(report.coverage.selfReferentialProductCopyReduced, true);
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(report.coverage.protectedSourceVisible, false);
+ assert.equal(report.coverage.rawSourceTextVisible, false);
+ assert.equal(report.coverage.unpaidAssetPackSourceVisible, false);
+ assert.equal(report.coverage.rawProviderResponseVisible, false);
+ assert.equal(report.coverage.walletPrivateMaterialVisible, false);
+ assert.equal(report.coverage.settlementPrivatePayloadVisible, false);
+});
diff --git a/packages/protocol/test/v43-route-vocabulary-inventory.test.js b/packages/protocol/test/v43-route-vocabulary-inventory.test.js
new file mode 100644
index 00000000..bec3b2c9
--- /dev/null
+++ b/packages/protocol/test/v43-route-vocabulary-inventory.test.js
@@ -0,0 +1,84 @@
+import assert from 'node:assert/strict';
+import test from 'node:test';
+
+import {
+ V43_ROUTE_VOCABULARY_CATEGORY_IDS,
+ V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH,
+ V43_ROUTE_VOCABULARY_INVENTORY_SCHEMA_ID,
+ V43_ROUTE_VOCABULARY_INVENTORY_SOURCE_SAFETY_VERDICT,
+ V43_ROUTE_VOCABULARY_MIGRATION_ROW_IDS,
+ V43_ROUTE_VOCABULARY_MIGRATION_ROWS,
+ V43_ROUTE_VOCABULARY_TOKEN_IDS,
+ buildV43RouteVocabularyInventory,
+} from '../src/canonical/v43-route-vocabulary-inventory.js';
+
+test('V43 route vocabulary inventory binds source-safe route migration metadata', () => {
+ const report = buildV43RouteVocabularyInventory();
+
+ assert.equal(V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH, '.bitcode/v43-route-vocabulary-inventory.json');
+ assert.equal(report.artifactId, 'v43-route-vocabulary-inventory');
+ assert.equal(report.schemaId, V43_ROUTE_VOCABULARY_INVENTORY_SCHEMA_ID);
+ assert.equal(report.version, 'V43');
+ assert.equal(report.currentTarget, 'V42');
+ assert.equal(report.sourceSafetyVerdict, V43_ROUTE_VOCABULARY_INVENTORY_SOURCE_SAFETY_VERDICT);
+ assert.equal(report.passed, true);
+ assert.ok(report.artifactRoot.startsWith('v43-route-vocabulary-inventory:'));
+ assert.deepEqual(report.tokenIds, [...V43_ROUTE_VOCABULARY_TOKEN_IDS]);
+ assert.deepEqual(report.categoryIds, [...V43_ROUTE_VOCABULARY_CATEGORY_IDS]);
+ assert.deepEqual(report.migrationRowIds, [...V43_ROUTE_VOCABULARY_MIGRATION_ROW_IDS]);
+ assert.equal(report.migrationRows.length, V43_ROUTE_VOCABULARY_MIGRATION_ROWS.length);
+ assert.equal(report.coverage.routeVocabularyInventoryComplete, true);
+ assert.equal(report.coverage.migrationMatrixComplete, true);
+ assert.equal(report.coverage.packsMigrationPlanned, true);
+ assert.equal(report.coverage.readMigrationPlanned, true);
+ assert.equal(report.coverage.depositMigrationPlanned, true);
+ assert.equal(report.coverage.retainedDebugCockpitBoundaryPlanned, true);
+ assert.equal(report.coverage.redirectCompatibilityPlanned, true);
+ assert.equal(report.coverage.selfReferentialCopyRemovalPlanned, true);
+ assert.equal(report.coverage.tokenTotals['route:/exchange'] > 0 || report.coverage.tokenTotals['symbol:Exchange'] > 0, true);
+ assert.equal(report.coverage.tokenTotals['route:/terminal'] > 0 || report.coverage.tokenTotals['symbol:Terminal'] > 0, true);
+ assert.equal(report.coverage.tokenTotals['route:/packs'] > 0, true);
+ assert.equal(report.coverage.tokenTotals['route:/read'] > 0, true);
+ assert.equal(report.coverage.tokenTotals['route:/deposit'] > 0, true);
+ assert.equal(report.coverage.categoryTotals.route > 0, true);
+ assert.equal(report.coverage.categoryTotals.component > 0, true);
+ assert.equal(report.coverage.categoryTotals.test > 0, true);
+ assert.equal(report.coverage.categoryTotals.doc > 0, true);
+ assert.equal(report.coverage.categoryTotals.api > 0, true);
+ assert.equal(report.coverage.categoryTotals.telemetry > 0, true);
+ assert.deepEqual(report.coverage.failedPredicateIds, []);
+});
+
+test('V43 route vocabulary migration rows and inventory files remain source-safe metadata only', () => {
+ const report = buildV43RouteVocabularyInventory();
+
+ assert.equal(report.coverage.sourceSafeMetadataOnly, true);
+ assert.equal(report.coverage.protectedSourceVisible, false);
+ assert.equal(report.coverage.rawSourceTextVisible, false);
+ assert.equal(report.coverage.sourceSnippetVisible, false);
+ assert.equal(report.coverage.credentialsSerialized, false);
+ assert.equal(report.coverage.walletPrivateMaterialVisible, false);
+ assert.equal(report.coverage.unpaidAssetPackSourceVisible, false);
+ assert.equal(report.coverage.settlementPrivatePayloadVisible, false);
+ assert.ok(report.coverage.forbiddenPayloadClasses.includes('source-snippets'));
+ assert.ok(report.coverage.forbiddenPayloadClasses.includes('unpaid-assetpack-source'));
+
+ for (const row of report.migrationRows) {
+ assert.ok(row.rowRoot.startsWith('v43-route-vocabulary-migration-row:'));
+ assert.equal(row.sourceSafetyClass, 'source_safe_route_vocabulary_migration_metadata');
+ assert.equal(row.sourceSafeMetadataOnly, true);
+ assert.equal(row.rawSourceTextVisible, false);
+ assert.equal(row.sourceSnippetVisible, false);
+ assert.equal(row.unpaidAssetPackSourceVisible, false);
+ }
+
+ for (const sourceFile of report.sourceFiles) {
+ assert.ok(sourceFile.pathRoot.startsWith('v43-route-vocabulary-file:'));
+ assert.equal(sourceFile.sourceSafeMetadataOnly, true);
+ assert.equal(sourceFile.rawSourceTextSerialized, false);
+ assert.equal(sourceFile.sourceSnippetSerialized, false);
+ assert.equal(typeof sourceFile.path, 'string');
+ assert.equal(typeof sourceFile.totalMatches, 'number');
+ assert.ok(!Object.values(sourceFile.tokenCounts).some((value) => typeof value !== 'number'));
+ }
+});
diff --git a/protocol-demonstration/README.md b/protocol-demonstration/README.md
index 87fa3456..07b09c84 100644
--- a/protocol-demonstration/README.md
+++ b/protocol-demonstration/README.md
@@ -1,12 +1,12 @@
-# Bitcode Protocol Demonstration - V41 canonical deterministic local prototype
+# Bitcode Protocol Demonstration - V43 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 `V41`; V42 is the next draft target after this promotion. This demo is governed by the active V41 canonical
-spec and `BITCODE_SPEC_V41_PROVEN.md` as the current generated appendix.
-`BITCODE_SPEC.txt -> V41`.
+resolves to `V43`; V44 is the next draft target after this promotion. This demo is governed by the active V43 canonical
+spec and `BITCODE_SPEC_V43_PROVEN.md` as the current generated appendix.
+`BITCODE_SPEC.txt -> V43`.
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.
@@ -32,6 +32,10 @@ those surfaces own their own implementations outside this package.
- `src/local-fit-finding.js`: standalone local Need/Need-Fit witness. It
deliberately avoids pipeline, registry, prompt, agent, Vercel, Supabase, and
UAPI imports.
+- `src/ai-reading-demonstration.js`: V42 AI-reading demonstration MVP. It
+ compares a public-data-only AI answer with an AssetPack-enhanced answer after
+ local Need synthesis and local Finding Fits, then emits deterministic
+ benchmark uplift and source-safe proof roots.
- `src/canonical/proven-generator.js`: generated proof and checkpoint appendix builder.
- `public/app.js`: standalone demonstration behavior.
- `public/index.html`: direct demonstration shell for local validation and parity checks.
@@ -71,8 +75,27 @@ npm test
pnpm test:fit-finding
pnpm test:integration
pnpm test:v28-mvp-qa
+pnpm test:v42-ai-reading-mvp
```
+## V42 AI-reading demonstration
+
+The V42 AI-reading demonstration proves the shortest local reason Bitcode
+matters for AI-dominant Reading: a deposited runbook AssetPack improves an AI
+incident assistant beyond a public-data-only baseline.
+
+The loop is intentionally minimal and local:
+
+1. synthesize and accept a ReadNeed from a source-bound Read;
+2. rank the local Depository and select `deposit-auth-migration-runbook`;
+3. expose only source-safe AssetPack preview metadata before settlement;
+4. compare the public-data-only answer with the AssetPack-enhanced answer;
+5. record deterministic basis-point uplift, query root, ranking root, and
+ AssetPack proof root.
+
+The demonstration remains self-contained and does not import product runtime
+code.
+
## Required Doc Companions
- [../README.md](../README.md)
diff --git a/protocol-demonstration/package.json b/protocol-demonstration/package.json
index 02a66180..744a2502 100644
--- a/protocol-demonstration/package.json
+++ b/protocol-demonstration/package.json
@@ -32,7 +32,8 @@
"test:v22-canon-drift": "node --test --test-force-exit test/v22-canon-drift.test.js",
"test:v27-crypto": "node --test --test-force-exit test/v27-crypto-primitives.test.js",
"test:fit-finding": "node --test --test-force-exit test/local-fit-finding.test.js",
- "test:v28-mvp-qa": "node --test --test-force-exit test/v28-mvp-qa.test.js test/v28-boundary-separation.test.js test/local-fit-finding.test.js",
+ "test:v28-mvp-qa": "node --test --test-force-exit test/v28-mvp-qa.test.js test/v28-boundary-separation.test.js test/local-fit-finding.test.js test/v42-ai-reading-mvp.test.js",
+ "test:v42-ai-reading-mvp": "node --test --test-force-exit test/v42-ai-reading-mvp.test.js",
"typecheck": "tsc -p tsconfig.typecheck.json"
},
"devDependencies": {
diff --git a/protocol-demonstration/src/ai-reading-demonstration.js b/protocol-demonstration/src/ai-reading-demonstration.js
new file mode 100644
index 00000000..6601597b
--- /dev/null
+++ b/protocol-demonstration/src/ai-reading-demonstration.js
@@ -0,0 +1,176 @@
+// @ts-check
+
+import { createHash } from 'node:crypto';
+
+import { buildBenchmarkComparison } from './benchmark-model.js';
+import {
+ acceptReadNeedLocally,
+ findNeedFitLocally,
+ synthesizeReadNeedLocally,
+} from './local-fit-finding.js';
+
+const DEMONSTRATION_ID = 'v42-ai-reading-assetpack-improvement';
+const MINIMUM_UPLIFT_BP = 2400;
+
+const REQUIRED_REMEDIATION_TERMS = Object.freeze([
+ 'issuer-mismatch',
+ 'jwks-cache',
+ 'session-invariant',
+ 'rollback-window',
+ 'audit-receipt',
+]);
+
+const AI_READING_READ = Object.freeze({
+ prompt:
+ 'Acquire an AssetPack that improves an AI incident assistant remediating an auth migration issuer mismatch while preserving sessions, rollback safety, and audit proof.',
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: 'ai-reading-source-commit',
+ targetArtifactKinds: [
+ 'incident-remediation-runbook',
+ 'auth-migration-guardrail',
+ 'benchmark-improvement-evidence',
+ 'audit-proof-receipt',
+ ],
+ closureCriteria: [
+ 'assistant identifies issuer mismatch before rollback',
+ 'assistant preserves session invariants while rotating JWKS cache',
+ 'assistant emits audit receipt steps before source-bearing delivery',
+ ],
+});
+
+const AI_READING_DEPOSIT = Object.freeze({
+ depositId: 'deposit-auth-migration-runbook',
+ title: 'Auth migration incident runbook AssetPack deposit',
+ summary:
+ 'Non-public auth migration remediation knowledge for issuer mismatch, JWKS cache rotation, session invariants, rollback windows, and audit receipts.',
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: 'ai-reading-source-commit',
+ artifactKinds: [
+ 'incident-remediation-runbook',
+ 'auth-migration-guardrail',
+ 'benchmark-improvement-evidence',
+ 'audit-proof-receipt',
+ ],
+ contentUnits: [
+ {
+ path: 'runbooks/auth-migration-issuer-mismatch.md',
+ text:
+ 'Private remediation notes: detect issuer-mismatch first, freeze rollback-window, rotate jwks-cache only after verifier compatibility, preserve session-invariant, then write audit-receipt.',
+ },
+ ],
+ hasWalletOrAttestationProof: true,
+ hasAssetMeasurementEvidence: true,
+});
+
+function sha256(value) {
+ return createHash('sha256').update(String(value)).digest('hex');
+}
+
+function scoreAssistantResponse(response) {
+ const normalized = String(response || '').toLowerCase();
+ const presentTerms = REQUIRED_REMEDIATION_TERMS.filter((term) => normalized.includes(term));
+ const missingTerms = REQUIRED_REMEDIATION_TERMS.filter((term) => !normalized.includes(term));
+ return {
+ scoreBp: Math.round((presentTerms.length / REQUIRED_REMEDIATION_TERMS.length) * 10000),
+ presentTerms,
+ missingTerms,
+ requiredTermCount: REQUIRED_REMEDIATION_TERMS.length,
+ };
+}
+
+function buildPublicDataOnlyResponse() {
+ return [
+ 'Rollback the auth migration if login errors spike.',
+ 'Check token verifier settings and notify the incident channel.',
+ 'Retest login after the rollback completes.',
+ ].join(' ');
+}
+
+function buildAssetPackEnhancedResponse(assetPack) {
+ const selectedDepositId = assetPack?.selectedDepositIds?.[0] || AI_READING_DEPOSIT.depositId;
+ return [
+ `Use ${selectedDepositId} to diagnose issuer-mismatch before rollback.`,
+ 'Preserve the session-invariant by keeping the previous verifier active through the rollback-window.',
+ 'Rotate jwks-cache only after compatibility has been confirmed.',
+ 'Emit an audit-receipt with proof roots before any source-bearing delivery is unlocked.',
+ ].join(' ');
+}
+
+export function buildAiReadingDemonstrationInput() {
+ return {
+ demonstrationId: DEMONSTRATION_ID,
+ read: { ...AI_READING_READ },
+ deposits: [{ ...AI_READING_DEPOSIT, contentUnits: [...AI_READING_DEPOSIT.contentUnits] }],
+ minimumUpliftBp: MINIMUM_UPLIFT_BP,
+ requiredRemediationTerms: [...REQUIRED_REMEDIATION_TERMS],
+ };
+}
+
+export function runAiReadingDominantDemonstration(input = buildAiReadingDemonstrationInput()) {
+ const readNeed = acceptReadNeedLocally(synthesizeReadNeedLocally({ read: input.read }));
+ const fitResult = findNeedFitLocally({ need: readNeed, deposits: input.deposits });
+ const publicResponse = buildPublicDataOnlyResponse();
+ const enhancedResponse = buildAssetPackEnhancedResponse(fitResult.assetPack);
+ const publicScore = scoreAssistantResponse(publicResponse);
+ const enhancedScore = scoreAssistantResponse(enhancedResponse);
+ const benchmark = buildBenchmarkComparison({
+ bundleId: fitResult.assetPack?.assetPackId || 'asset-pack-not-synthesized',
+ benchmark: 'ai-reading-auth-migration-remediation',
+ baselineBp: publicScore.scoreBp,
+ treatmentBp: enhancedScore.scoreBp,
+ });
+ const upliftBp = enhancedScore.scoreBp - publicScore.scoreBp;
+ const evidenceRoot = `sha256:${sha256(JSON.stringify({
+ demonstrationId: input.demonstrationId,
+ needId: readNeed.needId,
+ resultState: fitResult.resultState,
+ selectedDepositIds: fitResult.selectedCandidates.map((candidate) => candidate.depositId),
+ publicScore,
+ enhancedScore,
+ upliftBp,
+ }))}`;
+
+ return {
+ demonstrationId: input.demonstrationId,
+ scenario: 'ai-reading-assetpack-improves-remediation-assistant',
+ deterministicLocalOnly: true,
+ outsideSourceImportsAllowed: false,
+ readNeed,
+ fitResultState: fitResult.resultState,
+ selectedDepositIds: fitResult.selectedCandidates.map((candidate) => candidate.depositId),
+ assetPackPreview: fitResult.assetPack?.sourceSafePreview || null,
+ sourceSafety: {
+ protectedSourceBeforeSettlement: 'withheld_until_settlement',
+ publicBaselineUsesDepositorySource: false,
+ enhancedReaderUsesPurchasedAssetPack: fitResult.resultState === 'worthy_fit',
+ sourceBearingDeliveryRequiresSettlement: true,
+ },
+ publicDataOnlyBaseline: {
+ mode: 'public-data-only',
+ answer: publicResponse,
+ score: publicScore,
+ },
+ assetPackEnhancedReading: {
+ mode: 'assetpack-enhanced-after-rights',
+ answer: enhancedResponse,
+ score: enhancedScore,
+ selectedDepositIds: fitResult.selectedCandidates.map((candidate) => candidate.depositId),
+ },
+ benchmark,
+ improvement: {
+ improved: upliftBp >= input.minimumUpliftBp,
+ upliftBp,
+ minimumUpliftBp: input.minimumUpliftBp,
+ },
+ proof: {
+ evidenceRoot,
+ queryRoot: fitResult.queryRoot,
+ rankingRoot: fitResult.rankingRoot,
+ assetPackProofRoot: fitResult.assetPack?.proofRoot || null,
+ sourceSafePreviewStatus: fitResult.assetPack?.sourceSafePreview?.status || null,
+ },
+ };
+}
+
diff --git a/protocol-demonstration/src/canon-posture.js b/protocol-demonstration/src/canon-posture.js
index ba0d44e5..c6da6ac6 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 = 'V41';
-export const DRAFT_TARGET_VERSION = 'V42';
+export const ACTIVE_CANON_VERSION = 'V43';
+export const DRAFT_TARGET_VERSION = 'V44';
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',
+ 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',
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/src/index.d.ts b/protocol-demonstration/src/index.d.ts
index 7a78d4b0..5911e97d 100644
--- a/protocol-demonstration/src/index.d.ts
+++ b/protocol-demonstration/src/index.d.ts
@@ -31,3 +31,6 @@ export function startServer(
export const ACTIVE_CANON_VERSION: string;
export const DRAFT_TARGET_VERSION: string;
+
+export function buildAiReadingDemonstrationInput(): Record;
+export function runAiReadingDominantDemonstration(input?: Record): Record;
diff --git a/protocol-demonstration/src/index.js b/protocol-demonstration/src/index.js
index 79f8ffbe..d83366a7 100644
--- a/protocol-demonstration/src/index.js
+++ b/protocol-demonstration/src/index.js
@@ -6,3 +6,7 @@ export {
DEFAULT_BITCODE_PUBLIC_DIR
} from '../server.js';
export { ACTIVE_CANON_VERSION, DRAFT_TARGET_VERSION } from './canon-posture.js';
+export {
+ buildAiReadingDemonstrationInput,
+ runAiReadingDominantDemonstration
+} from './ai-reading-demonstration.js';
diff --git a/protocol-demonstration/test/v21-specifying.test.js b/protocol-demonstration/test/v21-specifying.test.js
index 0afcba8f..d9cdd7c3 100644
--- a/protocol-demonstration/test/v21-specifying.test.js
+++ b/protocol-demonstration/test/v21-specifying.test.js
@@ -28,6 +28,8 @@ function expectedActiveCanonicalInputArtifactCount(version) {
V38: 12,
V39: 12,
V40: 12,
+ V41: 10,
+ V42: 10,
};
if (Object.hasOwn(expectedCountsByVersion, version)) {
return expectedCountsByVersion[version];
diff --git a/protocol-demonstration/test/v28-mvp-qa.test.js b/protocol-demonstration/test/v28-mvp-qa.test.js
index b81d53ff..0e44e85a 100644
--- a/protocol-demonstration/test/v28-mvp-qa.test.js
+++ b/protocol-demonstration/test/v28-mvp-qa.test.js
@@ -22,8 +22,8 @@ const mockReviewModeSource = readFileSync(
new URL('../../uapi/lib/mock-review-mode.ts', import.meta.url),
'utf8',
);
-const exchangePageClientSource = readFileSync(
- new URL('../../uapi/app/exchange/ExchangePageClient.tsx', import.meta.url),
+const packsPageClientSource = readFileSync(
+ new URL('../../uapi/app/packs/PacksPageClient.tsx', import.meta.url),
'utf8',
);
const terminalTransactionDetailSurfaceSource = readFileSync(
@@ -79,7 +79,7 @@ test('V28 BTD tracker opens wallet-owned BTD auxillary posture', () => {
test('V28 generic Exchange intent entry does not auto-focus the first activity route', () => {
assert.doesNotMatch(
- exchangePageClientSource,
+ packsPageClientSource,
/replaceExchangeSearchParams\(writeTerminalTransactionId\(routeSearchParams, runs\[0\]\.id\)\)/u,
);
assert.match(shippablesCardsPanelSource, /autoScrollOnAnimation = true/u);
diff --git a/protocol-demonstration/test/v42-ai-reading-mvp.test.js b/protocol-demonstration/test/v42-ai-reading-mvp.test.js
new file mode 100644
index 00000000..ed9173be
--- /dev/null
+++ b/protocol-demonstration/test/v42-ai-reading-mvp.test.js
@@ -0,0 +1,44 @@
+import assert from 'node:assert/strict';
+import test from 'node:test';
+
+import {
+ buildAiReadingDemonstrationInput,
+ runAiReadingDominantDemonstration,
+} from '../src/ai-reading-demonstration.js';
+
+test('V42 AI-reading demonstration proves AssetPack lift over public data baseline', () => {
+ const result = runAiReadingDominantDemonstration();
+
+ assert.equal(result.demonstrationId, 'v42-ai-reading-assetpack-improvement');
+ assert.equal(result.deterministicLocalOnly, true);
+ assert.equal(result.outsideSourceImportsAllowed, false);
+ assert.equal(result.fitResultState, 'worthy_fit');
+ assert.deepEqual(result.selectedDepositIds, ['deposit-auth-migration-runbook']);
+ assert.equal(result.assetPackPreview.status, 'preview_only');
+ assert.equal(result.assetPackPreview.protectedSource, 'withheld_until_settlement');
+ assert.equal(result.sourceSafety.protectedSourceBeforeSettlement, 'withheld_until_settlement');
+ assert.equal(result.sourceSafety.sourceBearingDeliveryRequiresSettlement, true);
+ assert.equal(result.publicDataOnlyBaseline.score.scoreBp, 0);
+ assert.equal(result.assetPackEnhancedReading.score.scoreBp, 10000);
+ assert.ok(result.improvement.upliftBp >= result.improvement.minimumUpliftBp);
+ assert.equal(result.improvement.improved, true);
+ assert.match(result.proof.evidenceRoot, /^sha256:/u);
+ assert.match(result.proof.queryRoot, /^sha256:/u);
+ assert.match(result.proof.rankingRoot, /^sha256:/u);
+ assert.match(result.proof.assetPackProofRoot, /^sha256:/u);
+});
+
+test('V42 AI-reading demonstration input is self-contained and deterministic', () => {
+ const input = buildAiReadingDemonstrationInput();
+ const first = runAiReadingDominantDemonstration(input);
+ const second = runAiReadingDominantDemonstration(input);
+
+ assert.equal(input.deposits.length, 1);
+ assert.equal(input.deposits[0].depositId, 'deposit-auth-migration-runbook');
+ assert.equal(input.deposits[0].hasWalletOrAttestationProof, true);
+ assert.equal(input.deposits[0].hasAssetMeasurementEvidence, true);
+ assert.deepEqual(first.selectedDepositIds, second.selectedDepositIds);
+ assert.deepEqual(first.improvement, second.improvement);
+ assert.deepEqual(first.proof, second.proof);
+});
+
diff --git a/scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs b/scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs
new file mode 100644
index 00000000..b6cdea90
--- /dev/null
+++ b/scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs
@@ -0,0 +1,176 @@
+#!/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 assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function parseArgs(argv) {
+ const args = { repoRoot: defaultRepoRoot, skipBranchCheck: 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-v42-gate1-mvp-experience-roadmap-opening.mjs [--skip-branch-check] [--repo-root ]',
+ '',
+ 'Checks V42 Gate 1 spec family, roadmap, branch, workflow, docs, and active V41 / draft V42 reliable MVP experience posture.'
+ ].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 === 'V41', `BITCODE_SPEC.txt must remain V41 during V42 gate work. Observed ${pointer || 'empty'}.`);
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v42' || /^v42\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V42 work must occur on version/v42 or v42/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`
+ );
+ }
+
+ for (const relativePath of [
+ 'BITCODE_SPEC_V42.md',
+ 'BITCODE_SPEC_V42_DELTA.md',
+ 'BITCODE_SPEC_V42_NOTES.md',
+ 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'packages/protocol/README.md',
+ 'protocol-demonstration/README.md',
+ '.github/pull_request_template.md',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ 'package.json'
+ ]) {
+ assertCheck(failures, exists(root, relativePath), `Missing required V42 Gate 1 file: ${relativePath}`);
+ }
+
+ const spec = read(root, 'BITCODE_SPEC_V42.md');
+ const delta = read(root, 'BITCODE_SPEC_V42_DELTA.md');
+ const notes = read(root, 'BITCODE_SPEC_V42_NOTES.md');
+ const parity = read(root, 'BITCODE_SPEC_V42_PARITY_MATRIX.md');
+ const roadmap = read(root, 'SPECIFICATIONS_ROADMAP.md');
+ const readme = read(root, 'README.md');
+ const protocolReadme = read(root, 'packages/protocol/README.md');
+ const demoReadme = read(root, 'protocol-demonstration/README.md');
+ const prTemplate = read(root, '.github/pull_request_template.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] of [
+ ['V42 SPEC', spec],
+ ['V42 DELTA', delta],
+ ['V42 NOTES', notes],
+ ['V42 PARITY', parity]
+ ]) {
+ assertCheck(failures, content.includes('Current canonical/latest target: `V41`'), `${label} must declare V41 as current canonical/latest target.`);
+ }
+
+ for (const phrase of [
+ 'reliable MVP',
+ 'shortest-path Depositing',
+ 'shortest-path Reading',
+ 'ReadNeedComprehensionSynthesis',
+ 'ReadFitsFindingSynthesis',
+ 'source-safe AssetPack preview',
+ 'BTD/BTC settlement',
+ 'BTD rights transfer',
+ 'repository delivery',
+ 'depositor compensation',
+ 'AI-reading dominant demonstration',
+ 'public-data-only baseline',
+ 'Need review',
+ 'Finding Fits'
+ ]) {
+ assertCheck(
+ failures,
+ spec.includes(phrase) || delta.includes(phrase) || notes.includes(phrase) || roadmap.includes(phrase),
+ `V42 opening must name ${phrase}.`
+ );
+ }
+
+ for (const gate of [
+ 'Gate 1: MVP Experience Roadmap And Spec Opening',
+ 'Gate 2: Depositing Shortest Path And Compensation Visibility',
+ 'Gate 3: Reading Shortest Path State Machine',
+ 'Gate 4: ReadNeed Review And Resynthesis Product Closure',
+ 'Gate 5: ReadFitsFinding AssetPack Preview And Quote Closure',
+ 'Gate 6: Settlement Rights Transfer And Repository Delivery Closure',
+ 'Gate 7: AI-Reading Dominant Demonstration MVP',
+ 'Gate 8: Local And Staging-Testnet Full MVP Rehearsal',
+ 'Gate 9: V42 Promotion Readiness'
+ ]) {
+ assertCheck(failures, spec.includes(gate) || delta.includes(gate), `V42 gate plan is missing ${gate}.`);
+ }
+
+ assertCheck(failures, roadmap.includes('Current active canonical pointer: `BITCODE_SPEC.txt` -> `V41`'), 'Roadmap must state V41 active pointer.');
+ assertCheck(failures, /Current working gate: V42 Gate (?:1|2|3|4|5|6|7|8|9)\b/u.test(roadmap), 'Roadmap must state active V42 gate progression.');
+ assertCheck(failures, roadmap.includes('| V42 | `BITCODE_SPEC_V42.md` | active draft target |'), 'Roadmap must list V42 as active draft target.');
+ assertCheck(failures, readme.includes('resolves to `V41`; V42 is the active draft target'), 'README must state V41 active / V42 draft posture.');
+ assertCheck(failures, protocolReadme.includes('V42 Gate 1') && protocolReadme.includes('V41` active, `V42` draft'), 'Protocol README must document V42 Gate 1 active/draft posture.');
+ assertCheck(failures, demoReadme.includes('`BITCODE_SPEC.txt -> V41`'), 'Demonstration README must keep V41 pointer truth.');
+ assertCheck(failures, prTemplate.includes('V42 Gate N:'), 'PR template must use V42 gate title examples.');
+ assertCheck(failures, packageJson.includes('"check:v42-gate1"'), 'package.json must expose check:v42-gate1.');
+ assertCheck(failures, gateWorkflow.includes('check-v42-gate1-mvp-experience-roadmap-opening.mjs'), 'Gate workflow must run V42 Gate 1 checker.');
+ assertCheck(failures, canonWorkflow.includes('check-v42-gate1-mvp-experience-roadmap-opening.mjs'), 'Canon workflow must run V42 Gate 1 checker.');
+
+ if (failures.length > 0) {
+ process.stderr.write('V42 Gate 1 MVP experience roadmap opening check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V42 Gate 1 MVP experience roadmap opening 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-v42-gate2-depositing-shortest-path.mjs b/scripts/check-v42-gate2-depositing-shortest-path.mjs
new file mode 100644
index 00000000..12313083
--- /dev/null
+++ b/scripts/check-v42-gate2-depositing-shortest-path.mjs
@@ -0,0 +1,230 @@
+#!/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/v42-depositing-shortest-path.json';
+
+const SECRET_MARKERS = [
+ `${['sk', 'proj'].join('-')}-`,
+ `${['sb', 'secret'].join('_')}__`,
+ ['service', 'role'].join('_'),
+ Buffer.from('{"alg":"HS256","typ":"JWT"}').toString('base64url').slice(0, 18),
+ ['OPENAI', 'API', 'KEY'].join('_'),
+ ['SUPABASE', 'SERVICE', 'ROLE'].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 = {
+ skipBranchCheck: false,
+ skipPackageTests: false,
+ skipUapiTests: false,
+ repoRoot: defaultRepoRoot,
+ };
+
+ for (let index = 0; index < argv.length; index += 1) {
+ const arg = argv[index];
+ if (arg === '--skip-branch-check') args.skipBranchCheck = true;
+ else if (arg === '--skip-package-tests') args.skipPackageTests = true;
+ else if (arg === '--skip-uapi-tests') args.skipUapiTests = 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-v42-gate2-depositing-shortest-path.mjs [--skip-branch-check] [--skip-package-tests] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V42 Gate 2 Depositing shortest path, source-safe admission proof, compensation visibility, generated artifact, docs, and focused 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 === 'V41',
+ `BITCODE_SPEC.txt must remain V41 during V42 gate work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v42' || /^v42\/gate-(?:2|[3-9]|10)-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V42 Gate 2+ work must occur on version/v42 or v42/gate-2..10-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ ARTIFACT_PATH,
+ 'packages/pipelines/asset-pack/src/depository-supply-index.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/depository-supply-index.test.ts',
+ 'packages/pipelines/asset-pack/README.md',
+ 'packages/protocol/src/canonical/v42-depositing-shortest-path.js',
+ 'packages/protocol/test/v42-depositing-shortest-path.test.js',
+ 'packages/protocol/test/protocol-package-boundary.test.js',
+ 'packages/protocol/server.js',
+ 'packages/protocol/src/bitcode-demo.js',
+ 'uapi/app/api/deposits/route.ts',
+ 'uapi/app/terminal/TerminalDepositComposer.tsx',
+ 'uapi/app/terminal/terminal-activity-history.ts',
+ 'uapi/app/terminal/terminal-deposit-read-workbench.ts',
+ 'uapi/app/terminal/terminal-run-data.ts',
+ 'scripts/generate-v42-depositing-shortest-path.mjs',
+ 'scripts/check-v42-gate2-depositing-shortest-path.mjs',
+ 'BITCODE_SPEC_V42.md',
+ 'BITCODE_SPEC_V42_DELTA.md',
+ 'BITCODE_SPEC_V42_NOTES.md',
+ 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'packages/protocol/README.md',
+ 'package.json',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V42 Gate 2 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', ['scripts/generate-v42-depositing-shortest-path.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V42 Depositing shortest path artifact check failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', [
+ '--test',
+ '--test-force-exit',
+ 'packages/protocol/test/v42-depositing-shortest-path.test.js',
+ 'packages/protocol/test/protocol-package-boundary.test.js',
+ ]);
+ } catch (error) {
+ failures.push(`V42 Depositing shortest path protocol tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipPackageTests) {
+ try {
+ run(root, 'pnpm', [
+ '--filter',
+ '@bitcode/pipeline-asset-pack',
+ 'exec',
+ 'jest',
+ '--config',
+ 'jest.config.cjs',
+ '--runTestsByPath',
+ 'src/__tests__/depository-supply-index.test.ts',
+ '--runInBand',
+ '--forceExit',
+ ]);
+ } catch (error) {
+ failures.push(`Depository supply package tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ const serializedArtifact = fileExists(root, ARTIFACT_PATH) ? read(root, ARTIFACT_PATH) : '';
+ for (const marker of SECRET_MARKERS) {
+ assertCheck(failures, !serializedArtifact.includes(marker), `V42 Gate 2 artifact must not contain secret marker ${marker}.`);
+ }
+
+ const artifact = serializedArtifact ? JSON.parse(serializedArtifact) : null;
+ if (artifact) {
+ assertCheck(failures, artifact.artifactId === 'v42-depositing-shortest-path', 'Gate 2 artifactId must match.');
+ assertCheck(failures, artifact.schemaId === 'bitcode.v42.depositingShortestPath.v1', 'Gate 2 schemaId must match.');
+ assertCheck(failures, artifact.version === 'V42' && artifact.currentTarget === 'V41', 'Gate 2 artifact must bind V42 over active V41.');
+ assertCheck(failures, artifact.passed === true, 'Gate 2 artifact must pass.');
+ assertCheck(
+ failures,
+ artifact.sourceSafetyVerdict === 'source-safe-depositing-compensation-visibility-metadata',
+ 'Gate 2 artifact must declare source-safe compensation visibility metadata.',
+ );
+ assertCheck(failures, artifact.coverage.rowCount === 8, 'Gate 2 must cover eight Depositing rows.');
+ assertCheck(failures, artifact.coverage.routeApiContractsCovered === true, 'Gate 2 must cover route/API contracts.');
+ assertCheck(failures, artifact.coverage.sourceValidationCovered === true, 'Gate 2 must cover source validation.');
+ assertCheck(failures, artifact.coverage.storageProjectionCovered === true, 'Gate 2 must cover storage projection.');
+ assertCheck(failures, artifact.coverage.depositorySearchDocumentCovered === true, 'Gate 2 must cover Depository search documents.');
+ assertCheck(failures, artifact.coverage.sourceToSharesCompensationReadbackCovered === true, 'Gate 2 must cover source-to-shares compensation readback.');
+ assertCheck(failures, artifact.coverage.terminalCompensationVisibilityCovered === true, 'Gate 2 must cover Terminal compensation visibility.');
+ assertCheck(failures, artifact.coverage.localStagingRehearsalCovered === true, 'Gate 2 must cover local/staging rehearsal posture.');
+ assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Gate 2 must remain source-safe metadata only.');
+ assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Gate 2 artifact must not expose protected source.');
+ assertCheck(failures, artifact.coverage.btdMintedAtDepositAdmission === false, 'Gate 2 must not mint BTD at deposit admission.');
+ assertCheck(failures, artifact.coverage.btdRightsTransferredBeforeSettlement === false, 'Gate 2 must not transfer BTD rights before settlement.');
+ assertCheck(failures, artifact.coverage.compensationAllocationMethod === 'source-to-shares-largest-remainder', 'Gate 2 must bind source-to-shares allocation.');
+ assertCheck(failures, artifact.coverage.compensationPriceAsset === 'BTC', 'Gate 2 must bind BTC compensation visibility.');
+ assertCheck(failures, artifact.coverage.legacySourceRoots === false, 'Gate 2 must not rely on legacy source roots.');
+ assertCheck(failures, Array.isArray(artifact.coverage.failedPredicateIds) && artifact.coverage.failedPredicateIds.length === 0, 'Gate 2 predicates must all pass.');
+ }
+
+ const spec = read(root, 'BITCODE_SPEC_V42.md');
+ const parity = read(root, 'BITCODE_SPEC_V42_PARITY_MATRIX.md');
+ const readme = read(root, 'packages/pipelines/asset-pack/README.md');
+ assertCheck(failures, spec.includes('V42 Gate 2') && spec.includes('compensation route preview'), 'V42 spec must expand Gate 2 compensation route preview.');
+ assertCheck(failures, parity.includes('Gate 2') && parity.includes('implemented'), 'V42 parity matrix must mark Gate 2 implemented.');
+ assertCheck(failures, readme.includes('compensation preview') && readme.includes('source-to-shares'), 'AssetPack README must document compensation preview.');
+
+ if (failures.length > 0) {
+ process.stderr.write(`V42 Gate 2 Depositing shortest path check failed:\n- ${failures.join('\n- ')}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write(`V42 Gate 2 Depositing shortest path ok artifact=${artifact.artifactRoot}\n`);
+}
+
+main();
diff --git a/scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs b/scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs
new file mode 100644
index 00000000..0376ffc5
--- /dev/null
+++ b/scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs
@@ -0,0 +1,240 @@
+#!/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/v42-reading-shortest-path-state-machine.json';
+
+const SECRET_MARKERS = [
+ `${['sk', 'proj'].join('-')}-`,
+ `${['sb', 'secret'].join('_')}__`,
+ ['service', 'role'].join('_'),
+ Buffer.from('{"alg":"HS256","typ":"JWT"}').toString('base64url').slice(0, 18),
+ ['OPENAI', 'API', 'KEY'].join('_'),
+ ['SUPABASE', 'SERVICE', 'ROLE'].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 = {
+ skipBranchCheck: false,
+ skipUapiTests: false,
+ repoRoot: defaultRepoRoot,
+ };
+
+ for (let index = 0; index < argv.length; index += 1) {
+ const arg = argv[index];
+ if (arg === '--skip-branch-check') args.skipBranchCheck = true;
+ else if (arg === '--skip-uapi-tests') args.skipUapiTests = 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-v42-gate3-reading-shortest-path-state-machine.mjs [--skip-branch-check] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V42 Gate 3 Reading shortest path state machine, route recovery, retry/failure posture, source-safe disclosure, workflow wiring, docs, tests, and generated artifact.',
+ ].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 === 'V41',
+ `BITCODE_SPEC.txt must remain V41 during V42 gate work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v42' || /^v42\/gate-(?:3|[4-9]|10)-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V42 Gate 3+ work must occur on version/v42 or v42/gate-3..10-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ ARTIFACT_PATH,
+ 'uapi/app/terminal/TerminalPageClient.tsx',
+ 'uapi/app/terminal/terminal-enterprise-reading-ux-state.ts',
+ 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ 'uapi/app/terminal/terminal-deposit-read-workbench.ts',
+ 'uapi/app/terminal/terminal-pipeline-harness-client.ts',
+ 'uapi/app/conversations/conversation-terminal-handoff.ts',
+ 'uapi/app/terminal/terminal-transaction-query.ts',
+ 'uapi/app/terminal/terminal-activity-history.ts',
+ 'uapi/tests/terminalEnterpriseReadingUxState.test.ts',
+ 'uapi/tests/terminalDepositReadWorkbench.test.ts',
+ 'uapi/tests/conversationTerminalHandoff.test.tsx',
+ 'uapi/tests/terminalTransactionQuery.test.ts',
+ 'uapi/tests/terminalPipelineHarnessClient.test.ts',
+ 'uapi/tests/pipelineExecutionLogHeader.test.tsx',
+ 'packages/protocol/src/canonical/v42-reading-shortest-path-state-machine.js',
+ 'packages/protocol/test/v42-reading-shortest-path-state-machine.test.js',
+ 'scripts/generate-v42-reading-shortest-path-state-machine.mjs',
+ 'scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs',
+ 'BITCODE_SPEC_V42.md',
+ 'BITCODE_SPEC_V42_DELTA.md',
+ 'BITCODE_SPEC_V42_NOTES.md',
+ 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'uapi/app/terminal/README.md',
+ 'packages/protocol/README.md',
+ 'package.json',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V42 Gate 3 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', ['scripts/generate-v42-reading-shortest-path-state-machine.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V42 Reading shortest path state machine artifact check failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', [
+ '--test',
+ '--test-force-exit',
+ 'packages/protocol/test/v42-reading-shortest-path-state-machine.test.js',
+ ]);
+ } catch (error) {
+ failures.push(`V42 Reading shortest path state machine protocol test failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', [
+ '--dir',
+ 'uapi',
+ 'exec',
+ 'jest',
+ '--runTestsByPath',
+ 'tests/terminalEnterpriseReadingUxState.test.ts',
+ 'tests/terminalDepositReadWorkbench.test.ts',
+ 'tests/conversationTerminalHandoff.test.tsx',
+ 'tests/terminalTransactionQuery.test.ts',
+ 'tests/terminalPipelineHarnessClient.test.ts',
+ 'tests/pipelineExecutionLogHeader.test.tsx',
+ '--runInBand',
+ ]);
+ } catch (error) {
+ failures.push(`V42 Reading shortest path state machine uapi tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ const serializedArtifact = fileExists(root, ARTIFACT_PATH) ? read(root, ARTIFACT_PATH) : '';
+ for (const marker of SECRET_MARKERS) {
+ assertCheck(failures, !serializedArtifact.includes(marker), `V42 Gate 3 artifact must not contain secret marker ${marker}.`);
+ }
+
+ const artifact = serializedArtifact ? JSON.parse(serializedArtifact) : null;
+ if (artifact) {
+ assertCheck(failures, artifact.artifactId === 'v42-reading-shortest-path-state-machine', 'Gate 3 artifactId must match.');
+ assertCheck(
+ failures,
+ artifact.schemaId === 'bitcode.v42.readingShortestPathStateMachine.v1',
+ 'Gate 3 schemaId must match.',
+ );
+ assertCheck(failures, artifact.version === 'V42' && artifact.currentTarget === 'V41', 'Gate 3 artifact must bind V42 over active V41.');
+ assertCheck(failures, artifact.passed === true, 'Gate 3 artifact must pass.');
+ assertCheck(
+ failures,
+ artifact.sourceSafetyVerdict === 'source-safe-reading-shortest-path-state-machine-metadata',
+ 'Gate 3 artifact must declare source-safe Reading state-machine metadata.',
+ );
+ assertCheck(failures, artifact.coverage.rowCount === 9, 'Gate 3 must cover nine Reading state-machine rows.');
+ assertCheck(failures, artifact.coverage.stepCount === 5, 'Gate 3 must cover five Reading steps.');
+ assertCheck(failures, artifact.coverage.routePersistenceCovered === true, 'Gate 3 must cover route persistence.');
+ assertCheck(failures, artifact.coverage.transactionIdRecoveryCovered === true, 'Gate 3 must cover transaction id recovery.');
+ assertCheck(failures, artifact.coverage.restartRetryFailureCovered === true, 'Gate 3 must cover restart, retry, and failure repair.');
+ assertCheck(failures, artifact.coverage.acceptedNeedGateCovered === true, 'Gate 3 must cover accepted-Need gating.');
+ assertCheck(failures, artifact.coverage.streamLogIntegrationCovered === true, 'Gate 3 must cover stream log integration.');
+ assertCheck(failures, artifact.coverage.componentRouteTestsCovered === true, 'Gate 3 must cover component and route tests.');
+ assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Gate 3 must remain source-safe metadata only.');
+ assertCheck(failures, artifact.coverage.lowDetailDefault === true, 'Gate 3 must preserve low-detail defaults.');
+ assertCheck(failures, artifact.coverage.expandableSourceSafeDetail === true, 'Gate 3 must preserve expandable source-safe detail.');
+ assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Gate 3 artifact must not expose protected source.');
+ assertCheck(failures, artifact.coverage.rawProtectedPromptVisible === false, 'Gate 3 artifact must not expose protected prompts.');
+ assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Gate 3 artifact must not expose raw provider responses.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Gate 3 artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Gate 3 artifact must not expose wallet private material.');
+ assertCheck(failures, artifact.coverage.ledgerAuthorityClaimed === false, 'Gate 3 artifact must not claim ledger authority.');
+ assertCheck(failures, artifact.coverage.legacySourceRoots === false, 'Gate 3 must not rely on legacy source roots.');
+ assertCheck(failures, Array.isArray(artifact.coverage.failedPredicateIds) && artifact.coverage.failedPredicateIds.length === 0, 'Gate 3 predicates must all pass.');
+ }
+
+ const spec = read(root, 'BITCODE_SPEC_V42.md');
+ const parity = read(root, 'BITCODE_SPEC_V42_PARITY_MATRIX.md');
+ const terminalReadme = read(root, 'uapi/app/terminal/README.md');
+ assertCheck(failures, spec.includes('V42 Gate 3') && spec.includes('reading shortest path state machine'), 'V42 spec must expand Gate 3 state machine.');
+ assertCheck(failures, parity.includes('Reading state machine') && parity.includes('implemented'), 'V42 parity matrix must mark Reading state machine implemented.');
+ assertCheck(failures, terminalReadme.includes('V42 Gate 3') && terminalReadme.includes('TerminalEnterpriseReadingRouteState'), 'Terminal README must document Gate 3 route state.');
+
+ if (failures.length > 0) {
+ process.stderr.write(`V42 Gate 3 Reading shortest path state machine check failed:\n- ${failures.join('\n- ')}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write(`V42 Gate 3 Reading shortest path state machine ok artifact=${artifact.artifactRoot}\n`);
+}
+
+main();
diff --git a/scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs b/scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs
new file mode 100644
index 00000000..d52bc7d3
--- /dev/null
+++ b/scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs
@@ -0,0 +1,258 @@
+#!/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/v42-readneed-review-resynthesis-product-closure.json';
+
+const SECRET_MARKERS = [
+ `${['sk', 'proj'].join('-')}-`,
+ `${['sb', 'secret'].join('_')}__`,
+ ['service', 'role'].join('_'),
+ Buffer.from('{"alg":"HS256","typ":"JWT"}').toString('base64url').slice(0, 18),
+ ['OPENAI', 'API', 'KEY'].join('_'),
+ ['SUPABASE', 'SERVICE', 'ROLE'].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 = {
+ skipBranchCheck: false,
+ skipPackageTests: false,
+ skipUapiTests: false,
+ repoRoot: defaultRepoRoot,
+ help: false,
+ };
+
+ for (let index = 0; index < argv.length; index += 1) {
+ const arg = argv[index];
+ if (arg === '--skip-branch-check') args.skipBranchCheck = true;
+ else if (arg === '--skip-package-tests') args.skipPackageTests = true;
+ else if (arg === '--skip-uapi-tests') args.skipUapiTests = 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-v42-gate4-readneed-review-resynthesis-product-closure.mjs [--skip-branch-check] [--skip-package-tests] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V42 Gate 4 ReadNeed product closure, review/resynthesis, rejection, accepted-Need admission, source-safe runtime storage, telemetry receipts, Terminal readback, tests, docs, workflow wiring, and proof artifact.',
+ ].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 === 'V41',
+ `BITCODE_SPEC.txt must remain V41 during V42 gate work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v42' || /^v42\/gate-(?:4|[5-9]|10)-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V42 Gate 4+ work must occur on version/v42 or v42/gate-4..10-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ ARTIFACT_PATH,
+ 'packages/pipelines/asset-pack/src/read-need.ts',
+ 'packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts',
+ 'packages/pipelines/asset-pack/src/reading-pipeline-contract.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/read-need.test.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/read-need-review-resynthesis.test.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/reading-pipeline-contract.test.ts',
+ 'uapi/app/api/read-review/route.ts',
+ 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ 'uapi/tests/api/readReviewRoute.test.ts',
+ 'uapi/tests/api/readReviewProtocolParity.test.ts',
+ 'packages/protocol/src/canonical/v42-readneed-review-resynthesis-product-closure.js',
+ 'packages/protocol/test/v42-readneed-review-resynthesis-product-closure.test.js',
+ 'scripts/generate-v42-readneed-review-resynthesis-product-closure.mjs',
+ 'scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs',
+ 'BITCODE_SPEC_V42.md',
+ 'BITCODE_SPEC_V42_DELTA.md',
+ 'BITCODE_SPEC_V42_NOTES.md',
+ 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'uapi/app/terminal/README.md',
+ 'packages/pipelines/asset-pack/README.md',
+ 'packages/protocol/README.md',
+ 'package.json',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V42 Gate 4 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', ['scripts/generate-v42-readneed-review-resynthesis-product-closure.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V42 ReadNeed review/resynthesis artifact check failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', [
+ '--test',
+ '--test-force-exit',
+ 'packages/protocol/test/v42-readneed-review-resynthesis-product-closure.test.js',
+ ]);
+ } catch (error) {
+ failures.push(`V42 ReadNeed review/resynthesis protocol test failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipPackageTests) {
+ try {
+ run(root, 'pnpm', [
+ '--filter',
+ '@bitcode/pipeline-asset-pack',
+ 'exec',
+ 'jest',
+ '--config',
+ 'jest.config.cjs',
+ '--runTestsByPath',
+ 'src/__tests__/read-need.test.ts',
+ 'src/__tests__/read-need-review-resynthesis.test.ts',
+ 'src/__tests__/reading-pipeline-contract.test.ts',
+ '--runInBand',
+ '--forceExit',
+ ]);
+ } catch (error) {
+ failures.push(`V42 ReadNeed review/resynthesis package tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', [
+ '--dir',
+ 'uapi',
+ 'exec',
+ 'jest',
+ '--runTestsByPath',
+ 'tests/api/readReviewRoute.test.ts',
+ 'tests/api/readReviewProtocolParity.test.ts',
+ 'tests/terminalDepositReadWorkbench.test.ts',
+ 'tests/terminalEnterpriseReadingUxState.test.ts',
+ '--runInBand',
+ ]);
+ } catch (error) {
+ failures.push(`V42 ReadNeed review/resynthesis UAPI tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ const serializedArtifact = fileExists(root, ARTIFACT_PATH) ? read(root, ARTIFACT_PATH) : '';
+ for (const marker of SECRET_MARKERS) {
+ assertCheck(failures, !serializedArtifact.includes(marker), `V42 Gate 4 artifact must not contain secret marker ${marker}.`);
+ }
+
+ const artifact = serializedArtifact ? JSON.parse(serializedArtifact) : null;
+ if (artifact) {
+ assertCheck(failures, artifact.artifactId === 'v42-readneed-review-resynthesis-product-closure', 'Gate 4 artifactId must match.');
+ assertCheck(
+ failures,
+ artifact.schemaId === 'bitcode.v42.readNeedReviewResynthesisProductClosure.v1',
+ 'Gate 4 schemaId must match.',
+ );
+ assertCheck(failures, artifact.version === 'V42' && artifact.currentTarget === 'V41', 'Gate 4 artifact must bind V42 over active V41.');
+ assertCheck(failures, artifact.passed === true, 'Gate 4 artifact must pass.');
+ assertCheck(
+ failures,
+ artifact.sourceSafetyVerdict === 'source-safe-readneed-review-resynthesis-product-closure-metadata',
+ 'Gate 4 artifact must declare source-safe ReadNeed review/resynthesis product closure metadata.',
+ );
+ assertCheck(failures, artifact.coverage.rowCount === 11, 'Gate 4 must cover eleven ReadNeed product closure rows.');
+ assertCheck(failures, artifact.coverage.phaseCount === 4, 'Gate 4 must cover four ReadNeedComprehensionSynthesis phases.');
+ assertCheck(failures, artifact.coverage.ptrrStepCount === 16, 'Gate 4 must cover sixteen PTRR steps.');
+ assertCheck(failures, artifact.coverage.failsafeSequenceCount === 48, 'Gate 4 must cover forty-eight Failsafe sequences.');
+ assertCheck(failures, artifact.coverage.thricifiedGenerationCount === 48, 'Gate 4 must cover forty-eight ThricifiedGeneration receipts.');
+ assertCheck(failures, artifact.coverage.acceptedNeedRequiredForFindingFits === true, 'Gate 4 must require accepted Need before Finding Fits.');
+ assertCheck(failures, artifact.coverage.rejectedNeedBlocksFindingFits === true, 'Gate 4 must block Finding Fits after rejected Need.');
+ assertCheck(failures, artifact.coverage.terminalRuntimeReadbackCovered === true, 'Gate 4 must cover Terminal runtime readback.');
+ assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Gate 4 must remain source-safe metadata only.');
+ assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Gate 4 artifact must not expose protected source.');
+ assertCheck(failures, artifact.coverage.rawProtectedPromptVisible === false, 'Gate 4 artifact must not expose protected prompts.');
+ assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Gate 4 artifact must not expose raw provider responses.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Gate 4 artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Gate 4 artifact must not expose wallet private material.');
+ assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Gate 4 artifact must not expose settlement private payloads.');
+ assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Gate 4 artifact must not serialize credentials.');
+ assertCheck(failures, artifact.coverage.legacySourceRoots === false, 'Gate 4 must not rely on legacy source roots.');
+ assertCheck(failures, Array.isArray(artifact.coverage.failedPredicateIds) && artifact.coverage.failedPredicateIds.length === 0, 'Gate 4 predicates must all pass.');
+ }
+
+ const spec = read(root, 'BITCODE_SPEC_V42.md');
+ const parity = read(root, 'BITCODE_SPEC_V42_PARITY_MATRIX.md');
+ const terminalReadme = read(root, 'uapi/app/terminal/README.md');
+ assertCheck(failures, spec.includes('V42 Gate 4') && spec.includes('v42-readneed-review-resynthesis-product-closure'), 'V42 spec must expand Gate 4 ReadNeed product closure.');
+ assertCheck(failures, parity.includes('ReadNeed product closure') && parity.includes('implemented'), 'V42 parity matrix must mark ReadNeed product closure implemented.');
+ assertCheck(failures, terminalReadme.includes('V42 Gate 4') && terminalReadme.includes('ReadNeedReviewResynthesisRuntime'), 'Terminal README must document Gate 4 ReadNeed runtime readback.');
+
+ if (failures.length > 0) {
+ process.stderr.write(`V42 Gate 4 ReadNeed product closure check failed:\n- ${failures.join('\n- ')}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write(`V42 Gate 4 ReadNeed product closure ok artifact=${artifact.artifactRoot}\n`);
+}
+
+main();
diff --git a/scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs b/scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs
new file mode 100644
index 00000000..86408c24
--- /dev/null
+++ b/scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs
@@ -0,0 +1,268 @@
+#!/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/v42-readfitsfinding-preview-quote.json';
+
+const SECRET_MARKERS = [
+ `${['sk', 'proj'].join('-')}-`,
+ `${['sb', 'secret'].join('_')}__`,
+ ['service', 'role'].join('_'),
+ Buffer.from('{"alg":"HS256","typ":"JWT"}').toString('base64url').slice(0, 18),
+ ['OPENAI', 'API', 'KEY'].join('_'),
+ ['SUPABASE', 'SERVICE', 'ROLE'].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 = {
+ skipBranchCheck: false,
+ skipPackageTests: false,
+ skipUapiTests: false,
+ repoRoot: defaultRepoRoot,
+ help: false,
+ };
+
+ for (let index = 0; index < argv.length; index += 1) {
+ const arg = argv[index];
+ if (arg === '--skip-branch-check') args.skipBranchCheck = true;
+ else if (arg === '--skip-package-tests') args.skipPackageTests = true;
+ else if (arg === '--skip-uapi-tests') args.skipUapiTests = 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-v42-gate5-readfitsfinding-preview-quote.mjs [--skip-branch-check] [--skip-package-tests] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V42 Gate 5 ReadFitsFinding preview and quote closure: many-candidate search, selected-fit provenance, source-safe AssetPack preview, deterministic quote, no pre-settlement source exposure, Terminal readback, tests, docs, workflows, and proof artifact.',
+ ].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 === 'V41',
+ `BITCODE_SPEC.txt must remain V41 during V42 gate work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v42' || /^v42\/gate-(?:5|[6-9]|10)-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V42 Gate 5+ work must occur on version/v42 or v42/gate-5..10-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ ARTIFACT_PATH,
+ 'packages/pipelines/asset-pack/src/depository-search.ts',
+ 'packages/pipelines/asset-pack/src/read-fits-finding-runtime.ts',
+ 'packages/pipelines/asset-pack/src/asset-pack-preview-boundary.ts',
+ 'packages/pipelines/asset-pack/src/read-need.ts',
+ 'packages/pipelines/asset-pack/src/postprocess.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/depository-search.test.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/read-fits-finding-runtime.test.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/asset-pack-preview-boundary.test.ts',
+ 'uapi/app/api/pipeline-harness/asset-pack/runner.ts',
+ 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ 'uapi/app/terminal/terminal-pipeline-harness-client.ts',
+ 'uapi/tests/api/pipelineHarnessRoute.test.ts',
+ 'uapi/tests/terminalPipelineHarnessClient.test.ts',
+ 'packages/protocol/src/canonical/v42-readfitsfinding-preview-quote.js',
+ 'packages/protocol/test/v42-readfitsfinding-preview-quote.test.js',
+ 'scripts/generate-v42-readfitsfinding-preview-quote.mjs',
+ 'scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs',
+ 'BITCODE_SPEC_V42.md',
+ 'BITCODE_SPEC_V42_DELTA.md',
+ 'BITCODE_SPEC_V42_NOTES.md',
+ 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'uapi/app/terminal/README.md',
+ 'packages/pipelines/asset-pack/README.md',
+ 'packages/protocol/README.md',
+ 'package.json',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V42 Gate 5 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', ['scripts/generate-v42-readfitsfinding-preview-quote.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V42 ReadFitsFinding preview/quote artifact check failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', [
+ '--test',
+ '--test-force-exit',
+ 'packages/protocol/test/v42-readfitsfinding-preview-quote.test.js',
+ ]);
+ } catch (error) {
+ failures.push(`V42 ReadFitsFinding preview/quote protocol test failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipPackageTests) {
+ try {
+ run(root, 'pnpm', [
+ '--filter',
+ '@bitcode/pipeline-asset-pack',
+ 'exec',
+ 'jest',
+ '--config',
+ 'jest.config.cjs',
+ '--runTestsByPath',
+ 'src/__tests__/depository-search.test.ts',
+ 'src/__tests__/read-fits-finding-runtime.test.ts',
+ 'src/__tests__/asset-pack-preview-boundary.test.ts',
+ 'src/__tests__/postprocess.test.ts',
+ '--runInBand',
+ '--forceExit',
+ ]);
+ } catch (error) {
+ failures.push(`V42 ReadFitsFinding preview/quote package tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', [
+ '--dir',
+ 'uapi',
+ 'exec',
+ 'jest',
+ '--runTestsByPath',
+ 'tests/api/pipelineHarnessRoute.test.ts',
+ 'tests/terminalPipelineHarnessClient.test.ts',
+ 'tests/terminalDepositReadWorkbench.test.ts',
+ '--runInBand',
+ ]);
+ } catch (error) {
+ failures.push(`V42 ReadFitsFinding preview/quote UAPI tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ const serializedArtifact = fileExists(root, ARTIFACT_PATH) ? read(root, ARTIFACT_PATH) : '';
+ for (const marker of SECRET_MARKERS) {
+ assertCheck(failures, !serializedArtifact.includes(marker), `V42 Gate 5 artifact must not contain secret marker ${marker}.`);
+ }
+
+ const artifact = serializedArtifact ? JSON.parse(serializedArtifact) : null;
+ if (artifact) {
+ assertCheck(failures, artifact.artifactId === 'v42-readfitsfinding-preview-quote', 'Gate 5 artifactId must match.');
+ assertCheck(
+ failures,
+ artifact.schemaId === 'bitcode.v42.readFitsFindingPreviewQuote.v1',
+ 'Gate 5 schemaId must match.',
+ );
+ assertCheck(failures, artifact.version === 'V42' && artifact.currentTarget === 'V41', 'Gate 5 artifact must bind V42 over active V41.');
+ assertCheck(failures, artifact.passed === true, 'Gate 5 artifact must pass.');
+ assertCheck(
+ failures,
+ artifact.sourceSafetyVerdict === 'source-safe-readfitsfinding-preview-quote-metadata',
+ 'Gate 5 artifact must declare source-safe ReadFitsFinding preview/quote metadata.',
+ );
+ assertCheck(failures, artifact.coverage.rowCount === 12, 'Gate 5 must cover twelve ReadFitsFinding preview/quote rows.');
+ assertCheck(failures, artifact.coverage.pipelineName === 'ReadFitsFindingSynthesis', 'Gate 5 must bind ReadFitsFindingSynthesis.');
+ assertCheck(failures, artifact.coverage.requiredPriorPipelineName === 'ReadNeedComprehensionSynthesis', 'Gate 5 must bind accepted-Need prior pipeline.');
+ assertCheck(failures, artifact.coverage.phaseCount === 7, 'Gate 5 must cover seven ReadFitsFindingSynthesis phases.');
+ assertCheck(failures, artifact.coverage.agentCount === 8, 'Gate 5 must cover eight ReadFitsFindingSynthesis PTRR agents.');
+ assertCheck(failures, artifact.coverage.ptrrStepCount === 32, 'Gate 5 must cover thirty-two PTRR steps.');
+ assertCheck(failures, artifact.coverage.failsafeSequenceCount === 96, 'Gate 5 must cover ninety-six Failsafe sequences.');
+ assertCheck(failures, artifact.coverage.thricifiedGenerationCount === 96, 'Gate 5 must cover ninety-six ThricifiedGeneration receipts.');
+ assertCheck(failures, Array.isArray(artifact.coverage.searchChannelIds) && artifact.coverage.searchChannelIds.length === 7, 'Gate 5 must cover seven search channels.');
+ assertCheck(failures, artifact.coverage.selectedFitProvenanceRequired === true, 'Gate 5 must require selected-fit provenance.');
+ assertCheck(failures, artifact.coverage.sourceSafePreviewRequired === true, 'Gate 5 must require source-safe AssetPack preview.');
+ assertCheck(failures, artifact.coverage.deterministicQuoteRequired === true, 'Gate 5 must require deterministic quote.');
+ assertCheck(failures, artifact.coverage.noProtectedSourceBeforeSettlement === true, 'Gate 5 must block protected source before settlement.');
+ assertCheck(failures, artifact.coverage.settlementInstructionsRequired === true, 'Gate 5 must require settlement instructions.');
+ assertCheck(failures, artifact.coverage.terminalPreviewQuoteReadbackCovered === true, 'Gate 5 must cover Terminal preview/quote readback.');
+ assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Gate 5 must remain source-safe metadata only.');
+ assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Gate 5 artifact must not expose protected source.');
+ assertCheck(failures, artifact.coverage.rawProtectedPromptVisible === false, 'Gate 5 artifact must not expose protected prompts.');
+ assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Gate 5 artifact must not expose raw provider responses.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Gate 5 artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Gate 5 artifact must not expose wallet private material.');
+ assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Gate 5 artifact must not expose settlement private payloads.');
+ assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Gate 5 artifact must not serialize credentials.');
+ assertCheck(failures, artifact.coverage.legacySourceRoots === false, 'Gate 5 must not rely on legacy source roots.');
+ assertCheck(failures, Array.isArray(artifact.coverage.failedPredicateIds) && artifact.coverage.failedPredicateIds.length === 0, 'Gate 5 predicates must all pass.');
+ }
+
+ const spec = read(root, 'BITCODE_SPEC_V42.md');
+ const parity = read(root, 'BITCODE_SPEC_V42_PARITY_MATRIX.md');
+ const terminalReadme = read(root, 'uapi/app/terminal/README.md');
+ assertCheck(failures, spec.includes('V42 Gate 5') && spec.includes('v42-readfitsfinding-preview-quote'), 'V42 spec must expand Gate 5 ReadFitsFinding preview/quote closure.');
+ assertCheck(failures, parity.includes('Finding Fits preview and quote') && parity.includes('implemented'), 'V42 parity matrix must mark Finding Fits preview and quote implemented.');
+ assertCheck(failures, terminalReadme.includes('V42 Gate 5') && terminalReadme.includes('Finding Fits preview'), 'Terminal README must document Gate 5 preview/quote readback.');
+
+ if (failures.length > 0) {
+ process.stderr.write(`V42 Gate 5 ReadFitsFinding preview/quote check failed:\n- ${failures.join('\n- ')}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write(`V42 Gate 5 ReadFitsFinding preview/quote ok artifact=${artifact.artifactRoot}\n`);
+}
+
+main();
diff --git a/scripts/check-v42-gate6-settlement-rights-delivery.mjs b/scripts/check-v42-gate6-settlement-rights-delivery.mjs
new file mode 100644
index 00000000..1655e605
--- /dev/null
+++ b/scripts/check-v42-gate6-settlement-rights-delivery.mjs
@@ -0,0 +1,252 @@
+#!/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/v42-settlement-rights-delivery.json';
+
+const SECRET_MARKERS = [
+ `${['sk', 'proj'].join('-')}-`,
+ `${['sb', 'secret'].join('_')}__`,
+ ['service', 'role'].join('_'),
+ ['eyJ', 'hbGci', 'Oi', 'JIUzI1Ni'].join(''),
+ ['OPENAI', 'API', 'KEY'].join('_'),
+ ['SUPABASE', 'SERVICE', 'ROLE'].join('_'),
+ ['VERCEL', 'TOKEN'].join('_'),
+ ['VERCEL', 'OIDC', 'TOKEN'].join('_'),
+ ['PRIVATE', 'KEY'].join('_'),
+];
+
+function parseArgs(argv) {
+ const args = {
+ skipBranchCheck: false,
+ skipPackageTests: false,
+ skipUapiTests: false,
+ repoRoot: defaultRepoRoot,
+ help: false,
+ };
+
+ for (let index = 0; index < argv.length; index += 1) {
+ const arg = argv[index];
+ if (arg === '--skip-branch-check') args.skipBranchCheck = true;
+ else if (arg === '--skip-package-tests') args.skipPackageTests = true;
+ else if (arg === '--skip-uapi-tests') args.skipUapiTests = 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 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 printHelp() {
+ process.stdout.write(
+ [
+ 'Usage: node scripts/check-v42-gate6-settlement-rights-delivery.mjs [--skip-branch-check] [--skip-package-tests] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V42 Gate 6 settlement, BTD rights transfer, source-to-shares compensation, delivery unlock, route/UI readback, docs, workflow wiring, and proof artifact.',
+ ].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 === 'V41',
+ `BITCODE_SPEC.txt must remain V41 during V42 gate work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v42' || /^v42\/gate-(?:6|7|8|9)-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V42 Gate 6+ work must occur on version/v42 or v42/gate-6..9-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ ARTIFACT_PATH,
+ '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/pipeline-hosts/src/asset-pack-harness.ts',
+ 'packages/pipeline-hosts/src/__tests__/asset-pack-harness.test.ts',
+ 'uapi/app/api/pipeline-harness/asset-pack/runner.ts',
+ 'uapi/tests/api/pipelineHarnessRoute.test.ts',
+ 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ 'uapi/app/terminal/terminal-pipeline-harness-client.ts',
+ 'uapi/tests/terminalPipelineHarnessClient.test.ts',
+ 'packages/protocol/src/canonical/v42-settlement-rights-delivery.js',
+ 'packages/protocol/test/v42-settlement-rights-delivery.test.js',
+ 'scripts/generate-v42-settlement-rights-delivery.mjs',
+ 'scripts/check-v42-gate6-settlement-rights-delivery.mjs',
+ 'BITCODE_SPEC_V42.md',
+ 'BITCODE_SPEC_V42_DELTA.md',
+ 'BITCODE_SPEC_V42_NOTES.md',
+ 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'packages/pipelines/asset-pack/README.md',
+ 'packages/protocol/README.md',
+ 'uapi/app/terminal/README.md',
+ 'package.json',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V42 Gate 6 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', ['scripts/generate-v42-settlement-rights-delivery.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V42 settlement rights delivery artifact check failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', [
+ '--test',
+ '--test-force-exit',
+ 'packages/protocol/test/v42-settlement-rights-delivery.test.js',
+ ]);
+ } catch (error) {
+ failures.push(`V42 settlement rights delivery protocol test failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipPackageTests) {
+ try {
+ run(root, 'pnpm', [
+ '--filter',
+ '@bitcode/pipeline-asset-pack',
+ 'exec',
+ 'jest',
+ '--config',
+ 'jest.config.cjs',
+ '--runTestsByPath',
+ 'src/__tests__/asset-pack-settlement-rights-delivery.test.ts',
+ 'src/__tests__/asset-pack-preview-boundary.test.ts',
+ 'src/__tests__/postprocess.test.ts',
+ '--runInBand',
+ '--forceExit',
+ ]);
+ run(root, 'pnpm', [
+ '--filter',
+ '@bitcode/pipeline-hosts',
+ 'exec',
+ 'jest',
+ '--runTestsByPath',
+ 'src/__tests__/asset-pack-harness.test.ts',
+ '--runInBand',
+ '--forceExit',
+ ]);
+ } catch (error) {
+ failures.push(`V42 settlement rights delivery package tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', [
+ '--dir',
+ 'uapi',
+ 'exec',
+ 'jest',
+ '--runTestsByPath',
+ 'tests/api/pipelineHarnessRoute.test.ts',
+ 'tests/terminalPipelineHarnessClient.test.ts',
+ '--runInBand',
+ ]);
+ } catch (error) {
+ failures.push(`V42 settlement rights delivery UAPI tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ const serializedArtifact = fileExists(root, ARTIFACT_PATH) ? read(root, ARTIFACT_PATH) : '';
+ for (const marker of SECRET_MARKERS) {
+ assertCheck(failures, !serializedArtifact.includes(marker), `V42 Gate 6 artifact must not contain secret marker ${marker}.`);
+ }
+
+ const artifact = serializedArtifact ? JSON.parse(serializedArtifact) : null;
+ if (artifact) {
+ assertCheck(failures, artifact.artifactId === 'v42-settlement-rights-delivery', 'Gate 6 artifactId must match.');
+ assertCheck(failures, artifact.schemaId === 'bitcode.v42.settlementRightsDelivery.v1', 'Gate 6 schemaId must match.');
+ assertCheck(failures, artifact.version === 'V42' && artifact.currentTarget === 'V41', 'Gate 6 artifact must bind V42 over active V41.');
+ assertCheck(failures, artifact.passed === true, 'Gate 6 artifact must pass.');
+ assertCheck(failures, artifact.coverage.rowCount === 11, 'Gate 6 must cover eleven settlement rows.');
+ assertCheck(failures, artifact.coverage.runtimeType === 'AssetPackSettlementRightsDeliveryBoundary', 'Gate 6 must cover AssetPackSettlementRightsDeliveryBoundary.');
+ assertCheck(failures, artifact.coverage.rightsTransferType === 'BtdRightsTransferReceipt', 'Gate 6 must cover BTD rights transfer.');
+ assertCheck(failures, artifact.coverage.sourceToSharesType === 'SourceToSharesProof', 'Gate 6 must cover source-to-shares.');
+ assertCheck(failures, artifact.coverage.reconciliationType === 'LedgerDatabaseReconciliationReport', 'Gate 6 must cover reconciliation.');
+ assertCheck(failures, artifact.coverage.deliveryType === 'AssetPackDeliveryUnlockReceipt', 'Gate 6 must cover delivery unlock.');
+ assertCheck(failures, artifact.coverage.stagingProjectRef === 'tkpyosihuouusyaxtbau', 'Gate 6 must bind staging-testnet Supabase project ref.');
+ assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Gate 6 must remain source-safe metadata only.');
+ assertCheck(failures, artifact.coverage.protectedSourcePayloadSerialized === false, 'Gate 6 artifact must not serialize protected source.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Gate 6 artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Gate 6 artifact must not expose private wallet material.');
+ assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Gate 6 artifact must not expose private settlement payloads.');
+ assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Gate 6 artifact must not serialize credentials.');
+ assertCheck(failures, artifact.coverage.hostBoundaryMaterializationCovered === true, 'Gate 6 must cover live harness boundary materialization.');
+ assertCheck(failures, artifact.coverage.routeReadbackCovered === true, 'Gate 6 must cover route readback.');
+ assertCheck(failures, artifact.coverage.terminalReadbackCovered === true, 'Gate 6 must cover Terminal readback.');
+ assertCheck(failures, artifact.coverage.confirmedPaymentCovered === true, 'Gate 6 must cover confirmed payment.');
+ assertCheck(failures, artifact.coverage.underpaymentBlockedCovered === true, 'Gate 6 must cover underpayment blocking.');
+ assertCheck(failures, artifact.coverage.finalityBlockedCovered === true, 'Gate 6 must cover finality blocking.');
+ assertCheck(failures, artifact.coverage.reconciliationRepairCovered === true, 'Gate 6 must cover reconciliation repair.');
+ assertCheck(failures, Array.isArray(artifact.coverage.failedPredicateIds) && artifact.coverage.failedPredicateIds.length === 0, 'Gate 6 predicates must all pass.');
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write(`V42 Gate 6 settlement rights delivery check failed:\n- ${failures.join('\n- ')}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write(`V42 Gate 6 settlement rights delivery ok artifact=${artifact.artifactRoot}\n`);
+}
+
+main();
diff --git a/scripts/check-v42-gate7-ai-reading-demonstration.mjs b/scripts/check-v42-gate7-ai-reading-demonstration.mjs
new file mode 100644
index 00000000..2c5ec4f5
--- /dev/null
+++ b/scripts/check-v42-gate7-ai-reading-demonstration.mjs
@@ -0,0 +1,202 @@
+#!/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/v42-ai-reading-demonstration.json';
+
+const SECRET_MARKERS = [
+ `${['sk', 'proj'].join('-')}-`,
+ `${['sb', 'secret'].join('_')}__`,
+ ['service', 'role'].join('_'),
+ ['eyJ', 'hbGci', 'Oi', 'JIUzI1Ni'].join(''),
+ ['OPENAI', 'API', 'KEY'].join('_'),
+ ['SUPABASE', 'SERVICE', 'ROLE'].join('_'),
+ ['VERCEL', 'TOKEN'].join('_'),
+ ['VERCEL', 'OIDC', 'TOKEN'].join('_'),
+ ['PRIVATE', 'KEY'].join('_'),
+];
+
+function parseArgs(argv) {
+ const args = {
+ skipBranchCheck: false,
+ skipPackageTests: false,
+ skipDemonstrationTests: false,
+ repoRoot: defaultRepoRoot,
+ help: false,
+ };
+
+ for (let index = 0; index < argv.length; index += 1) {
+ const arg = argv[index];
+ if (arg === '--skip-branch-check') args.skipBranchCheck = true;
+ else if (arg === '--skip-package-tests') args.skipPackageTests = true;
+ else if (arg === '--skip-demonstration-tests') args.skipDemonstrationTests = 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 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 printHelp() {
+ process.stdout.write(
+ [
+ 'Usage: node scripts/check-v42-gate7-ai-reading-demonstration.mjs [--skip-branch-check] [--skip-package-tests] [--skip-demonstration-tests] [--repo-root ]',
+ '',
+ 'Checks V42 Gate 7 AI-reading demonstration MVP, source-safety, generated artifact, docs, workflow wiring, and package 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 === 'V41',
+ `BITCODE_SPEC.txt must remain V41 during V42 gate work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v42' || /^v42\/gate-(?:7|8|9)-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V42 Gate 7+ work must occur on version/v42 or v42/gate-7..9-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ ARTIFACT_PATH,
+ 'protocol-demonstration/src/ai-reading-demonstration.js',
+ 'protocol-demonstration/test/v42-ai-reading-mvp.test.js',
+ 'protocol-demonstration/package.json',
+ 'protocol-demonstration/README.md',
+ 'packages/protocol/src/canonical/v42-ai-reading-demonstration.js',
+ 'packages/protocol/test/v42-ai-reading-demonstration.test.js',
+ 'scripts/generate-v42-ai-reading-demonstration.mjs',
+ 'scripts/check-v42-gate7-ai-reading-demonstration.mjs',
+ 'BITCODE_SPEC_V42.md',
+ 'BITCODE_SPEC_V42_DELTA.md',
+ 'BITCODE_SPEC_V42_NOTES.md',
+ 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'packages/protocol/README.md',
+ 'package.json',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V42 Gate 7 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', ['scripts/generate-v42-ai-reading-demonstration.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V42 AI-reading demonstration artifact check failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipPackageTests) {
+ try {
+ run(root, 'node', [
+ '--test',
+ '--test-force-exit',
+ 'packages/protocol/test/v42-ai-reading-demonstration.test.js',
+ ]);
+ } catch (error) {
+ failures.push(`V42 AI-reading demonstration protocol test failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length === 0 && !args.skipDemonstrationTests) {
+ try {
+ run(root, 'npm', ['--prefix', 'protocol-demonstration', 'run', 'test:v42-ai-reading-mvp']);
+ } catch (error) {
+ failures.push(`V42 AI-reading demonstration runtime test failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ const serializedArtifact = fileExists(root, ARTIFACT_PATH) ? read(root, ARTIFACT_PATH) : '';
+ for (const marker of SECRET_MARKERS) {
+ assertCheck(failures, !serializedArtifact.includes(marker), `V42 Gate 7 artifact must not contain secret marker ${marker}.`);
+ }
+
+ const artifact = serializedArtifact ? JSON.parse(serializedArtifact) : null;
+ if (artifact) {
+ assertCheck(failures, artifact.artifactId === 'v42-ai-reading-demonstration', 'Gate 7 artifactId must match.');
+ assertCheck(failures, artifact.schemaId === 'bitcode.v42.aiReadingDemonstration.v1', 'Gate 7 schemaId must match.');
+ assertCheck(failures, artifact.version === 'V42' && artifact.currentTarget === 'V41', 'Gate 7 artifact must bind V42 over active V41.');
+ assertCheck(failures, artifact.passed === true, 'Gate 7 artifact must pass.');
+ assertCheck(failures, artifact.coverage.rowCount === 8, 'Gate 7 must cover eight AI-reading demonstration rows.');
+ assertCheck(failures, artifact.coverage.baselineMode === 'public-data-only', 'Gate 7 must cover public-data-only baseline.');
+ assertCheck(failures, artifact.coverage.enhancedMode === 'assetpack-enhanced-after-rights', 'Gate 7 must cover AssetPack-enhanced reading.');
+ assertCheck(failures, artifact.coverage.expectedBaselineBp === 0, 'Gate 7 baseline score must be deterministic.');
+ assertCheck(failures, artifact.coverage.expectedTreatmentBp === 10000, 'Gate 7 treatment score must be deterministic.');
+ assertCheck(failures, artifact.coverage.minimumUpliftBp === 2400, 'Gate 7 minimum uplift must be explicit.');
+ assertCheck(failures, artifact.coverage.expectedSelectedDepositId === 'deposit-auth-migration-runbook', 'Gate 7 selected deposit must be explicit.');
+ assertCheck(failures, artifact.coverage.expectedFitResultState === 'worthy_fit', 'Gate 7 must prove worthy fit.');
+ assertCheck(failures, artifact.coverage.protectedSourceBeforeSettlement === 'withheld_until_settlement', 'Gate 7 must withhold protected source before settlement.');
+ assertCheck(failures, artifact.coverage.sourceBearingDeliveryRequiresSettlement === true, 'Gate 7 must require settlement before source-bearing delivery.');
+ assertCheck(failures, artifact.coverage.deterministicLocalOnly === true, 'Gate 7 must be deterministic local demonstration.');
+ assertCheck(failures, artifact.coverage.selfContainedDemonstration === true, 'Gate 7 must remain self-contained.');
+ assertCheck(failures, artifact.coverage.outsideRuntimeImportRequired === false, 'Gate 7 must not require outside runtime imports.');
+ assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Gate 7 artifact must remain source-safe metadata.');
+ assertCheck(failures, artifact.coverage.protectedSourcePayloadSerialized === false, 'Gate 7 artifact must not serialize protected source.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Gate 7 artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, Array.isArray(artifact.coverage.failedPredicateIds) && artifact.coverage.failedPredicateIds.length === 0, 'Gate 7 predicates must all pass.');
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write(`V42 Gate 7 AI-reading demonstration check failed:\n- ${failures.join('\n- ')}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write(`V42 Gate 7 AI-reading demonstration ok artifact=${artifact.artifactRoot}\n`);
+}
+
+main();
+
diff --git a/scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs b/scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs
new file mode 100644
index 00000000..f8a0b479
--- /dev/null
+++ b/scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs
@@ -0,0 +1,281 @@
+#!/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/v42-local-staging-mvp-rehearsal.json';
+
+const SECRET_MARKERS = [
+ `${['sk', 'proj'].join('-')}-`,
+ `${['sb', 'secret'].join('_')}__`,
+ String.fromCharCode(101, 121, 74, 104, 98, 71, 99, 105, 79, 105, 74, 73, 85, 122, 73, 49, 78, 105),
+ ['OPENAI', 'API', 'KEY'].join('_'),
+ ['SUPABASE', 'SERVICE', 'ROLE'].join('_'),
+ ['VERCEL', 'TOKEN'].join('_'),
+ ['VERCEL', 'OIDC', 'TOKEN'].join('_'),
+ ['PRIVATE', 'KEY'].join('_'),
+];
+
+function parseArgs(argv) {
+ const args = {
+ repoRoot: defaultRepoRoot,
+ skipBranchCheck: false,
+ skipPackageTests: false,
+ skipUapiTests: 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 === '--skip-package-tests') args.skipPackageTests = true;
+ else if (arg === '--skip-uapi-tests') args.skipUapiTests = true;
+ else if (arg === '--help' || arg === '-h') args.help = true;
+ else throw new Error(`Unknown argument ${arg}`);
+ }
+
+ return args;
+}
+
+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, options = {}) {
+ return execFileSync(command, args, {
+ cwd: root,
+ encoding: 'utf8',
+ stdio: ['ignore', 'pipe', 'pipe'],
+ ...options,
+ }).trim();
+}
+
+function commandExists(root, command) {
+ try {
+ execFileSync('sh', ['-lc', `command -v ${command}`], {
+ cwd: root,
+ encoding: 'utf8',
+ stdio: ['ignore', 'pipe', 'ignore'],
+ });
+ return true;
+ } catch {
+ return false;
+ }
+}
+
+function assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function printHelp() {
+ process.stdout.write(
+ [
+ 'Usage: node scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs [--skip-branch-check] [--skip-package-tests] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V42 Gate 8 local/staging-testnet full MVP rehearsal artifact, source-safe operator receipts, package tests, docs, and workflow wiring.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function parseJson(output, failures, label) {
+ try {
+ return JSON.parse(output);
+ } catch (error) {
+ failures.push(`${label} did not emit JSON: ${error.message}`);
+ return null;
+ }
+}
+
+function runFocusedTests(root, failures, args) {
+ const commands = [
+ ['node', ['--test', '--test-force-exit', 'packages/protocol/test/v42-local-staging-mvp-rehearsal.test.js']],
+ ];
+
+ if (!args.skipPackageTests && commandExists(root, 'pnpm')) {
+ commands.push(
+ ['pnpm', ['--filter', '@bitcode/pipeline-asset-pack', 'exec', 'jest', '--config', 'jest.config.cjs', '--runTestsByPath', 'src/__tests__/reading-local-staging-rehearsal.test.ts', '--runInBand', '--forceExit']],
+ );
+ }
+
+ if (!args.skipUapiTests && commandExists(root, 'pnpm')) {
+ commands.push(
+ ['pnpm', ['--dir', 'uapi', 'exec', 'jest', '--runTestsByPath', 'tests/api/pipelineHarnessPreflight.test.ts', 'tests/api/pipelineHarnessRoute.test.ts', '--runInBand']],
+ );
+ }
+
+ for (const [command, commandArgs] of commands) {
+ try {
+ run(root, command, commandArgs);
+ } catch (error) {
+ failures.push(`Gate 8 focused test failed for ${command} ${commandArgs.join(' ')}: ${error.stderr || error.message}`);
+ return;
+ }
+ }
+}
+
+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 === 'V41',
+ `BITCODE_SPEC.txt must remain V41 during V42 gate work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v42' || /^v42\/gate-(?:8|9)-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V42 Gate 8+ work must occur on version/v42 or v42/gate-8..9-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ ARTIFACT_PATH,
+ 'scripts/rehearse-v42-local-staging-mvp.mjs',
+ 'scripts/generate-v42-local-staging-mvp-rehearsal.mjs',
+ 'scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs',
+ 'packages/protocol/src/canonical/v42-local-staging-mvp-rehearsal.js',
+ 'packages/protocol/test/v42-local-staging-mvp-rehearsal.test.js',
+ 'packages/pipelines/asset-pack/src/reading-local-staging-rehearsal.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/reading-local-staging-rehearsal.test.ts',
+ 'uapi/app/api/pipeline-harness/asset-pack/preflight.ts',
+ 'uapi/app/api/pipeline-harness/asset-pack/runner.ts',
+ 'uapi/components/base/bitcode/execution/pipeline-execution-log.tsx',
+ 'BITCODE_SPEC_V42.md',
+ 'BITCODE_SPEC_V42_DELTA.md',
+ 'BITCODE_SPEC_V42_NOTES.md',
+ 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'packages/protocol/README.md',
+ 'packages/pipelines/asset-pack/README.md',
+ 'uapi/app/terminal/README.md',
+ 'package.json',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V42 Gate 8 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', ['scripts/generate-v42-local-staging-mvp-rehearsal.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V42 local/staging MVP rehearsal artifact check failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ let localReceipt = null;
+ let stagingReceipt = null;
+ if (failures.length === 0) {
+ const dryRunEnv = {
+ ...process.env,
+ OPENAI_API_KEY: `${['sk', 'proj'].join('-')}-dummy-do-not-serialize-000000000000`,
+ VERCEL_OIDC_TOKEN: 'oidc_dummy_do_not_serialize',
+ BITCODE_RUN_VERCEL_SANDBOX_HARNESS: '1',
+ BITCODE_ENABLE_PIPELINE_HARNESS_API: '1',
+ BITCODE_ASSET_PACK_REAL_INFERENCE: '1',
+ BITCODE_PIPELINE_STREAM_TO_DATABASE: '1',
+ SUPABASE_URL: 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/',
+ SUPABASE_ANON_KEY: 'anon_dummy_do_not_serialize',
+ SUPABASE_SECRET_KEY: 'admin_dummy_do_not_serialize',
+ };
+ const localOutput = run(root, 'node', ['scripts/rehearse-v42-local-staging-mvp.mjs', '--lane', 'local', '--dry-run', '--json'], { env: dryRunEnv });
+ const stagingOutput = run(root, 'node', ['scripts/rehearse-v42-local-staging-mvp.mjs', '--lane', 'staging-testnet', '--dry-run', '--json'], { env: dryRunEnv });
+ localReceipt = parseJson(localOutput, failures, 'local V42 rehearsal dry run');
+ stagingReceipt = parseJson(stagingOutput, failures, 'staging-testnet V42 rehearsal dry run');
+
+ for (const marker of ['dummy-do-not-serialize', dryRunEnv.OPENAI_API_KEY, dryRunEnv.SUPABASE_SECRET_KEY, dryRunEnv.VERCEL_OIDC_TOKEN]) {
+ assertCheck(failures, !localOutput.includes(marker), `Local dry-run receipt must not serialize secret value ${marker}.`);
+ assertCheck(failures, !stagingOutput.includes(marker), `Staging dry-run receipt must not serialize secret value ${marker}.`);
+ }
+ }
+
+ if (failures.length === 0) {
+ runFocusedTests(root, failures, args);
+ }
+
+ const serializedArtifact = fileExists(root, ARTIFACT_PATH) ? read(root, ARTIFACT_PATH) : '';
+ for (const marker of SECRET_MARKERS) {
+ assertCheck(failures, !serializedArtifact.includes(marker), `V42 Gate 8 artifact must not contain secret marker ${marker}.`);
+ }
+
+ const artifact = serializedArtifact ? JSON.parse(serializedArtifact) : null;
+ if (artifact) {
+ assertCheck(failures, artifact.artifactId === 'v42-local-staging-mvp-rehearsal', 'Gate 8 artifactId must match.');
+ assertCheck(failures, artifact.schemaId === 'bitcode.v42.localStagingMvpRehearsal.v1', 'Gate 8 schemaId must match.');
+ assertCheck(failures, artifact.version === 'V42' && artifact.currentTarget === 'V41', 'Gate 8 artifact must bind V42 over active V41.');
+ assertCheck(failures, artifact.passed === true, 'Gate 8 artifact must pass.');
+ assertCheck(failures, artifact.coverage.rowCount === 14, 'Gate 8 must cover fourteen rehearsal rows.');
+ assertCheck(failures, artifact.coverage.laneCount === 2, 'Gate 8 must cover local and staging-testnet lanes.');
+ assertCheck(failures, artifact.coverage.stageCount === 7, 'Gate 8 must cover the complete MVP stage path.');
+ assertCheck(failures, artifact.coverage.gateArtifactCount === 6, 'Gate 8 must bind Gates 2 through 7 artifacts.');
+ assertCheck(failures, artifact.coverage.stagingProjectRef === 'tkpyosihuouusyaxtbau', 'Gate 8 must bind staging-testnet Supabase project.');
+ assertCheck(failures, artifact.coverage.depositingCovered === true, 'Gate 8 must cover Depositing.');
+ assertCheck(failures, artifact.coverage.readNeedReviewCovered === true, 'Gate 8 must cover ReadNeed review.');
+ assertCheck(failures, artifact.coverage.readFitsFindingCovered === true, 'Gate 8 must cover Finding Fits.');
+ assertCheck(failures, artifact.coverage.settlementRightsDeliveryCovered === true, 'Gate 8 must cover settlement rights and delivery.');
+ assertCheck(failures, artifact.coverage.aiReadingDemonstrationCovered === true, 'Gate 8 must cover AI-reading demonstration proof.');
+ assertCheck(failures, artifact.coverage.richTelemetryReadbackCovered === true, 'Gate 8 must cover rich telemetry readback.');
+ assertCheck(failures, artifact.coverage.mainnetValueBearingBlocked === true, 'Gate 8 must block value-bearing mainnet.');
+ assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Gate 8 artifact must be source-safe metadata only.');
+ assertCheck(failures, artifact.coverage.protectedSourcePayloadSerialized === false, 'Gate 8 artifact must not serialize protected source.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Gate 8 artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Gate 8 artifact must not serialize credentials.');
+ assertCheck(failures, Array.isArray(artifact.coverage.failedPredicateIds) && artifact.coverage.failedPredicateIds.length === 0, 'Gate 8 predicates must all pass.');
+ assertCheck(failures, artifact.sourceSafety.liveRehearsalLogPayloadSerialized === false, 'Gate 8 artifact must not serialize live rehearsal logs.');
+ }
+
+ if (localReceipt) {
+ assertCheck(failures, localReceipt.laneId === 'local', 'Local dry-run receipt must identify local lane.');
+ assertCheck(failures, localReceipt.ready === true, 'Local dry-run receipt should be ready under dummy source-safe env.');
+ assertCheck(failures, localReceipt.currentTarget === 'V41', 'Local dry-run receipt must bind V42 over active V41.');
+ assertCheck(failures, localReceipt.sourceSafety.secretValueSerialized === false, 'Local receipt must not serialize secret values.');
+ assertCheck(failures, localReceipt.sourceSafety.valueBearingMainnetAdmitted === false, 'Local receipt must block value-bearing mainnet.');
+ }
+ if (stagingReceipt) {
+ assertCheck(failures, stagingReceipt.laneId === 'staging-testnet', 'Staging dry-run receipt must identify staging-testnet lane.');
+ assertCheck(failures, stagingReceipt.ready === true, 'Staging dry-run receipt should be ready under dummy source-safe env.');
+ assertCheck(failures, stagingReceipt.stagingProjectRef === 'tkpyosihuouusyaxtbau', 'Staging receipt must bind staging-testnet project ref.');
+ assertCheck(failures, stagingReceipt.stagingRestHost === 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/', 'Staging receipt must bind staging-testnet REST host.');
+ assertCheck(failures, stagingReceipt.sourceSafety.secretValueSerialized === false, 'Staging receipt must not serialize secret values.');
+ assertCheck(failures, stagingReceipt.sourceSafety.valueBearingMainnetAdmitted === false, 'Staging receipt must block value-bearing mainnet.');
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write(`V42 Gate 8 local/staging MVP rehearsal check failed:\n- ${failures.join('\n- ')}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write(`V42 Gate 8 local/staging MVP rehearsal ok artifact=${artifact.artifactRoot}\n`);
+}
+
+main();
diff --git a/scripts/check-v42-gate9-promotion-readiness.mjs b/scripts/check-v42-gate9-promotion-readiness.mjs
new file mode 100644
index 00000000..e64fcd7f
--- /dev/null
+++ b/scripts/check-v42-gate9-promotion-readiness.mjs
@@ -0,0 +1,358 @@
+#!/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/v42-promotion-readiness-report.json';
+
+const V42_GATE_ARTIFACTS = [
+ '.bitcode/v42-depositing-shortest-path.json',
+ '.bitcode/v42-reading-shortest-path-state-machine.json',
+ '.bitcode/v42-readneed-review-resynthesis-product-closure.json',
+ '.bitcode/v42-readfitsfinding-preview-quote.json',
+ '.bitcode/v42-settlement-rights-delivery.json',
+ '.bitcode/v42-ai-reading-demonstration.json',
+ '.bitcode/v42-local-staging-mvp-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-v42-gate9-promotion-readiness.mjs [--promotion-mode] [--skip-branch-check] [--skip-package-tests] [--repo-root ]',
+ '',
+ 'Checks V42 Gate 9 promotion readiness, reliable MVP artifacts, V42 promotion workflow support, source-safety, generated proof support, and V43 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 === 'V42';
+
+ assertCheck(
+ failures,
+ args.promotionMode ? ['V41', 'V42'].includes(pointer) : pointer === 'V41',
+ args.promotionMode
+ ? `BITCODE_SPEC.txt must be V41 before V42 promotion or V42 after promotion. Observed ${pointer || 'empty'}.`
+ : `BITCODE_SPEC.txt must remain V41 during V42 Gate 9 work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v42' || /^v42\/gate-9-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V42 Gate 9 work must occur on version/v42 or v42/gate-9-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ 'BITCODE_SPEC_V42.md',
+ 'BITCODE_SPEC_V42_DELTA.md',
+ 'BITCODE_SPEC_V42_NOTES.md',
+ 'BITCODE_SPEC_V42_PARITY_MATRIX.md',
+ ARTIFACT_PATH,
+ 'scripts/generate-v42-promotion-readiness-report.mjs',
+ 'scripts/check-v42-gate9-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/v42-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/v42-promotion-readiness-report.js',
+ 'packages/protocol/test/v42-promotion-readiness.test.js',
+ 'packages/protocol/src/canonical/v21-specifying.js',
+ 'package.json',
+ 'README.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ ...V42_GATE_ARTIFACTS,
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V42 Gate 9 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0 && !promotedPointer) {
+ try {
+ run(root, 'node', ['scripts/generate-v42-depositing-shortest-path.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v42-reading-shortest-path-state-machine.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v42-readneed-review-resynthesis-product-closure.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v42-readfitsfinding-preview-quote.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v42-settlement-rights-delivery.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v42-ai-reading-demonstration.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v42-local-staging-mvp-rehearsal.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v42-promotion-readiness-report.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V42 Gate 9 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 === 'v42-promotion-readiness-report', 'Promotion readiness artifactId must match.');
+ assertCheck(failures, artifact.schemaId === 'bitcode.v42.promotionReadinessReport.v1', 'Promotion readiness schemaId must match.');
+ assertCheck(failures, artifact.version === 'V42' && artifact.currentTarget === 'V41', 'Promotion readiness must bind V42 over active V41.');
+ assertCheck(failures, artifact.passed === true, 'Promotion readiness report must pass.');
+ assertCheck(
+ failures,
+ artifact.sourceSafetyVerdict === 'source-safe-v42-reliable-mvp-promotion-readiness-metadata',
+ 'Promotion readiness report must be source-safe reliable MVP promotion metadata.',
+ );
+ assertCheck(failures, artifact.prePromotionPosture === 'V41 active / V42 draft', 'Promotion readiness pre-promotion posture must match.');
+ assertCheck(failures, artifact.postPromotionPosture === 'V42 active / V43 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:v42-gate9'), 'Promotion readiness must list check:v42-gate9.');
+ assertCheck(
+ failures,
+ artifact.validationCommands.includes('node scripts/promote-bitcode-canon.mjs --version V42 --commit HEAD --dry-run'),
+ 'Promotion readiness must list V42 promotion dry-run.',
+ );
+ }
+
+ const spec = read(root, 'BITCODE_SPEC_V42.md');
+ const delta = read(root, 'BITCODE_SPEC_V42_DELTA.md');
+ const notes = read(root, 'BITCODE_SPEC_V42_NOTES.md');
+ const parity = read(root, 'BITCODE_SPEC_V42_PARITY_MATRIX.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');
+ const promotionWorkflow = read(root, '.github/workflows/v42-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('V42 promotion readiness canon'), 'V42 SPEC must define promotion readiness canon.');
+ assertCheck(failures, spec.includes(ARTIFACT_PATH) && spec.includes('V42 active / draft V43'), 'V42 SPEC must include Gate 9 artifact and post-promotion posture.');
+ assertCheck(failures, delta.includes('Gate 9: V42 Promotion Readiness') && delta.includes(ARTIFACT_PATH), 'V42 DELTA must define Gate 9 closure acceptance and artifact.');
+ assertCheck(failures, delta.includes('promotion scripts support V42'), 'V42 DELTA must state V42 promotion script support.');
+ assertCheck(failures, notes.includes('Gate 9: V42 Promotion Readiness') && notes.includes('active V42 / draft V43'), 'V42 NOTES must carry Gate 9 post-promotion posture notes.');
+ assertCheck(failures, parity.includes('## Gate 9 Promotion readiness parity') && parity.includes(ARTIFACT_PATH) && parity.includes('closed'), 'V42 PARITY must close Gate 9 artifact parity.');
+ assertCheck(failures, roadmap.includes('V42 Gate 9 closure anchor'), 'Roadmap must include V42 Gate 9 closure anchor.');
+ assertCheck(
+ failures,
+ packageJson.includes('"generate:v42-promotion-readiness"') &&
+ packageJson.includes('"check:v42-promotion-readiness"') &&
+ packageJson.includes('"check:v42-gate9"'),
+ 'package.json must expose V42 Gate 9 generator/check scripts.',
+ );
+ assertCheck(
+ failures,
+ gateWorkflow.includes('check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check') &&
+ gateWorkflow.includes('elif [ "$POINTER" = "V42" ]') &&
+ gateWorkflow.includes('--active-canon V42 --draft-target V43'),
+ 'Gate-quality workflow must tolerate both V41-draft and V42-promoted states.',
+ );
+ assertCheck(
+ failures,
+ canonWorkflow.includes('check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check') &&
+ canonWorkflow.includes('elif [ "$POINTER" = "V42" ]') &&
+ canonWorkflow.includes('--active-canon V42 --draft-target V43'),
+ 'Canon-quality workflow must validate V42 promoted posture.',
+ );
+ assertCheck(
+ failures,
+ promotionWorkflow.includes("head.ref == 'version/v42'") &&
+ promotionWorkflow.includes('node scripts/prepare-bitcode-spec-family-promotion.mjs --version V42') &&
+ promotionWorkflow.includes('node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V42 --next-draft V43') &&
+ promotionWorkflow.includes('node scripts/generate-bitcode-proven.mjs --version V42') &&
+ promotionWorkflow.includes('node scripts/check-bitcode-spec-family.mjs --version V42 --mode promoted --current-target V42') &&
+ promotionWorkflow.includes('check-v42-gate9-promotion-readiness.mjs --promotion-mode --skip-branch-check'),
+ 'V42 promotion workflow must validate Gate 9 and promote V42.',
+ );
+ assertCheck(
+ failures,
+ promoteScript.includes("if (version === 'V42')") &&
+ promoteScript.includes('const v42Gate9Command') &&
+ promoteScript.includes('buildDerivedV42CommitMessageBody') &&
+ promoteScript.includes("version === 'V42'"),
+ 'Promotion script must support V42.',
+ );
+ assertCheck(
+ failures,
+ prepareSpecScript.includes("if (version === 'V42')") &&
+ prepareSpecScript.includes('V42 canonical system specification for reliable MVP experience') &&
+ prepareSpecScript.includes(ARTIFACT_PATH),
+ 'Spec-family promotion preparation must support V42.',
+ );
+ 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('buildV42ProvenPackage') &&
+ provenGenerator.includes('buildV42PromotionReadinessReport') &&
+ provenGenerator.includes(ARTIFACT_PATH),
+ 'Proven generator must include V42 promotion package support.',
+ );
+ assertCheck(failures, protocolReadme.includes('V42 Gate 9') && protocolReadme.includes('V42` active, `V43` draft'), 'Protocol README must document V42 Gate 9.');
+ assertCheck(failures, rootReadme.includes('check:v42-gate9') && rootReadme.includes('v42-canon-promotion.yml'), 'Root README must document V42 Gate 9 scripts/workflow.');
+
+ if (failures.length === 0 && !args.skipPackageTests) {
+ try {
+ run(root, 'pnpm', ['--filter', '@bitcode/protocol', 'exec', 'node', '--test', '--test-force-exit', 'test/v42-promotion-readiness.test.js']);
+ run(root, 'node', ['scripts/promote-bitcode-canon.mjs', '--version', 'V42', '--commit', 'HEAD', '--dry-run']);
+ } catch (error) {
+ failures.push(`V42 Gate 9 package promotion tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write(`V42 Gate 9 promotion readiness failed:\n${failures.map((failure) => `- ${failure}`).join('\n')}\n`);
+ process.exit(1);
+ }
+
+ process.stdout.write(`V42 Gate 9 promotion readiness ok artifacts=${V42_GATE_ARTIFACTS.length} root=${artifact?.artifactRoot || 'pending'}\n`);
+}
+
+main();
diff --git a/scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs b/scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs
new file mode 100644
index 00000000..5c42a290
--- /dev/null
+++ b/scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs
@@ -0,0 +1,181 @@
+#!/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 assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function parseArgs(argv) {
+ const args = { repoRoot: defaultRepoRoot, skipBranchCheck: 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-v43-gate1-packs-read-deposit-roadmap.mjs [--skip-branch-check] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 1 spec family, roadmap, docs, workflow, package script, and active V42 / draft V43 route-product posture.',
+ ].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 === 'V42', `BITCODE_SPEC.txt must remain V42 during V43 gate work. Observed ${pointer || 'empty'}.`);
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 work must occur on version/v43 or v43/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ for (const relativePath of [
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'packages/protocol/README.md',
+ 'protocol-demonstration/README.md',
+ '.github/pull_request_template.md',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ 'package.json',
+ ]) {
+ assertCheck(failures, exists(root, relativePath), `Missing required V43 Gate 1 file: ${relativePath}`);
+ }
+
+ const spec = read(root, 'BITCODE_SPEC_V43.md');
+ const delta = read(root, 'BITCODE_SPEC_V43_DELTA.md');
+ const notes = read(root, 'BITCODE_SPEC_V43_NOTES.md');
+ const parity = read(root, 'BITCODE_SPEC_V43_PARITY_MATRIX.md');
+ const roadmap = read(root, 'SPECIFICATIONS_ROADMAP.md');
+ const readme = read(root, 'README.md');
+ const protocolReadme = read(root, 'packages/protocol/README.md');
+ const demoReadme = read(root, 'protocol-demonstration/README.md');
+ const prTemplate = read(root, '.github/pull_request_template.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] of [
+ ['V43 SPEC', spec],
+ ['V43 DELTA', delta],
+ ['V43 NOTES', notes],
+ ['V43 PARITY', parity],
+ ]) {
+ assertCheck(failures, content.includes('Current canonical/latest target: `V42`'), `${label} must declare V42 as current canonical/latest target.`);
+ }
+
+ for (const phrase of [
+ '/packs',
+ '/read',
+ '/deposit',
+ 'AssetPacks in and AssetPacks out',
+ 'agentic deposit',
+ 'DepositAssetPackOption',
+ 'PackActivity',
+ 'searchable master-detail',
+ 'column sorting',
+ 'filtering',
+ 'source-safe measurements',
+ 'sub-critical',
+ 'positive ROI',
+ 'Reading demand',
+ 'self-referential',
+ 'self-explanatory',
+ 'unpaid AssetPack source',
+ ]) {
+ assertCheck(
+ failures,
+ spec.includes(phrase) || delta.includes(phrase) || notes.includes(phrase) || parity.includes(phrase) || roadmap.includes(phrase),
+ `V43 opening must name ${phrase}.`,
+ );
+ }
+
+ for (const gate of [
+ 'Gate 1 Packs, Read, Deposit Roadmap And Spec Opening',
+ 'Gate 2 Route Vocabulary Inventory And Migration Plan',
+ 'Gate 3 Packs Activity Master-Detail Data Model',
+ 'Gate 4 Read Route Extraction And Five-Step UX',
+ 'Gate 5 Deposit Route And Agentic AssetPack Option Synthesis',
+ 'Gate 6 Source Criticality, Demand, ROI, And Compensation Policy',
+ 'Gate 7 Deposit Option Review, Approval, And Admission',
+ 'Gate 8 UX/UI Product Excellence Pass',
+ 'Gate 9 Cross-Route Rehearsal, Telemetry, And Repair',
+ 'Gate 10 Promotion Readiness',
+ ]) {
+ assertCheck(failures, spec.includes(gate) || delta.includes(gate), `V43 gate plan is missing ${gate}.`);
+ }
+
+ assertCheck(failures, roadmap.includes('Current active canonical pointer: `BITCODE_SPEC.txt` -> `V42`'), 'Roadmap must state V42 active pointer.');
+ assertCheck(failures, roadmap.includes('Current working gate: V43 Gate'), 'Roadmap must state active V43 gate work.');
+ assertCheck(failures, roadmap.includes('| V43 | `BITCODE_SPEC_V43.md` | active draft target |'), 'Roadmap must list V43 as active draft target.');
+ assertCheck(failures, readme.includes('resolves to `V42`; V43 is the active draft target'), 'README must state V42 active / V43 draft posture.');
+ assertCheck(failures, readme.includes('/packs') && readme.includes('/read') && readme.includes('/deposit'), 'README must document V43 routes.');
+ assertCheck(failures, protocolReadme.includes('V43 Gate 1') && protocolReadme.includes('V42` active, `V43` draft'), 'Protocol README must document V43 Gate 1 active/draft posture.');
+ assertCheck(failures, demoReadme.includes('`BITCODE_SPEC.txt -> V42`'), 'Demonstration README must keep V42 pointer truth.');
+ assertCheck(failures, prTemplate.includes('V43 Gate N:'), 'PR template must use V43 gate title examples.');
+ assertCheck(failures, packageJson.includes('"check:v43-gate1"'), 'package.json must expose check:v43-gate1.');
+ assertCheck(failures, gateWorkflow.includes('check-v43-gate1-packs-read-deposit-roadmap.mjs'), 'Gate workflow must run V43 Gate 1 checker.');
+ assertCheck(failures, canonWorkflow.includes('check-v43-gate1-packs-read-deposit-roadmap.mjs'), 'Canon workflow must run V43 Gate 1 checker.');
+
+ if (failures.length > 0) {
+ process.stderr.write('V43 Gate 1 packs/read/deposit roadmap check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V43 Gate 1 packs/read/deposit roadmap 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-v43-gate10-promotion-readiness.mjs b/scripts/check-v43-gate10-promotion-readiness.mjs
new file mode 100644
index 00000000..6b8ada5a
--- /dev/null
+++ b/scripts/check-v43-gate10-promotion-readiness.mjs
@@ -0,0 +1,360 @@
+#!/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/v43-promotion-readiness-report.json';
+
+const V43_GATE_ARTIFACTS = [
+ '.bitcode/v43-route-vocabulary-inventory.json',
+ '.bitcode/v43-packs-activity-master-detail.json',
+ '.bitcode/v43-read-route-five-step-ux.json',
+ '.bitcode/v43-deposit-route-options.json',
+ '.bitcode/v43-deposit-policy-compensation.json',
+ '.bitcode/v43-deposit-option-admission.json',
+ '.bitcode/v43-route-ux-product-excellence.json',
+ '.bitcode/v43-cross-route-rehearsal-telemetry-repair.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-v43-gate10-promotion-readiness.mjs [--promotion-mode] [--skip-branch-check] [--skip-package-tests] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 10 promotion readiness, product route and agentic depositing artifacts, V43 promotion workflow support, source-safety, generated proof support, and V44 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 === 'V43';
+
+ assertCheck(
+ failures,
+ args.promotionMode ? ['V42', 'V43'].includes(pointer) : pointer === 'V42',
+ args.promotionMode
+ ? `BITCODE_SPEC.txt must be V42 before V43 promotion or V43 after promotion. Observed ${pointer || 'empty'}.`
+ : `BITCODE_SPEC.txt must remain V42 during V43 Gate 10 work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-10-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 Gate 10 work must occur on version/v43 or v43/gate-10-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_PARITY_MATRIX.md',
+ ARTIFACT_PATH,
+ 'scripts/generate-v43-promotion-readiness-report.mjs',
+ 'scripts/check-v43-gate10-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/v43-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/v43-promotion-readiness-report.js',
+ 'packages/protocol/test/v43-promotion-readiness.test.js',
+ 'packages/protocol/src/canonical/v21-specifying.js',
+ 'package.json',
+ 'README.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ ...V43_GATE_ARTIFACTS,
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V43 Gate 10 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0 && !promotedPointer) {
+ try {
+ run(root, 'node', ['scripts/generate-v43-route-vocabulary-inventory.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v43-packs-activity-master-detail.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v43-read-route-five-step-ux.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v43-deposit-route-options.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v43-deposit-policy-compensation.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v43-deposit-option-admission.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v43-route-ux-product-excellence.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs', '--check']);
+ run(root, 'node', ['scripts/generate-v43-promotion-readiness-report.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V43 Gate 10 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 === 'v43-promotion-readiness-report', 'Promotion readiness artifactId must match.');
+ assertCheck(failures, artifact.schemaId === 'bitcode.v43.promotionReadinessReport.v1', 'Promotion readiness schemaId must match.');
+ assertCheck(failures, artifact.version === 'V43' && artifact.currentTarget === 'V42', 'Promotion readiness must bind V43 over active V42.');
+ assertCheck(failures, artifact.passed === true, 'Promotion readiness report must pass.');
+ assertCheck(
+ failures,
+ artifact.sourceSafetyVerdict === 'source-safe-v43-product-routes-agentic-depositing-promotion-metadata',
+ 'Promotion readiness report must be source-safe product route and agentic depositing promotion metadata.',
+ );
+ assertCheck(failures, artifact.prePromotionPosture === 'V42 active / V43 draft', 'Promotion readiness pre-promotion posture must match.');
+ assertCheck(failures, artifact.postPromotionPosture === 'V43 active / V44 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:v43-gate10'), 'Promotion readiness must list check:v43-gate10.');
+ assertCheck(
+ failures,
+ artifact.validationCommands.includes('node scripts/promote-bitcode-canon.mjs --version V43 --commit HEAD --dry-run'),
+ 'Promotion readiness must list V43 promotion dry-run.',
+ );
+ }
+
+ const spec = read(root, 'BITCODE_SPEC_V43.md');
+ const delta = read(root, 'BITCODE_SPEC_V43_DELTA.md');
+ const notes = read(root, 'BITCODE_SPEC_V43_NOTES.md');
+ const parity = read(root, 'BITCODE_SPEC_V43_PARITY_MATRIX.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');
+ const promotionWorkflow = read(root, '.github/workflows/v43-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('V43 promotion readiness canon'), 'V43 SPEC must define promotion readiness canon.');
+ assertCheck(failures, spec.includes(ARTIFACT_PATH) && spec.includes('V43 active / draft V44'), 'V43 SPEC must include Gate 10 artifact and post-promotion posture.');
+ assertCheck(failures, delta.includes('Gate 10: V43 Promotion Readiness') && delta.includes(ARTIFACT_PATH), 'V43 DELTA must define Gate 10 closure acceptance and artifact.');
+ assertCheck(failures, delta.includes('promotion scripts support V43'), 'V43 DELTA must state V43 promotion script support.');
+ assertCheck(failures, notes.includes('Gate 10: V43 Promotion Readiness') && notes.includes('active V43 / draft V44'), 'V43 NOTES must carry Gate 10 post-promotion posture notes.');
+ assertCheck(failures, parity.includes('## Gate 10 Promotion readiness parity') && parity.includes(ARTIFACT_PATH) && parity.includes('closed'), 'V43 PARITY must close Gate 10 artifact parity.');
+ assertCheck(failures, roadmap.includes('V43 Gate 10 closure anchor'), 'Roadmap must include V43 Gate 10 closure anchor.');
+ assertCheck(
+ failures,
+ packageJson.includes('"generate:v43-promotion-readiness"') &&
+ packageJson.includes('"check:v43-promotion-readiness"') &&
+ packageJson.includes('"check:v43-gate10"'),
+ 'package.json must expose V43 Gate 10 generator/check scripts.',
+ );
+ assertCheck(
+ failures,
+ gateWorkflow.includes('check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check') &&
+ gateWorkflow.includes('elif [ "$POINTER" = "V43" ]') &&
+ gateWorkflow.includes('--active-canon V43 --draft-target V44'),
+ 'Gate-quality workflow must tolerate both V42-draft and V43-promoted states.',
+ );
+ assertCheck(
+ failures,
+ canonWorkflow.includes('check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check') &&
+ canonWorkflow.includes('elif [ "$POINTER" = "V43" ]') &&
+ canonWorkflow.includes('--active-canon V43 --draft-target V44'),
+ 'Canon-quality workflow must validate V43 promoted posture.',
+ );
+ assertCheck(
+ failures,
+ promotionWorkflow.includes("head.ref == 'version/v43'") &&
+ promotionWorkflow.includes('node scripts/prepare-bitcode-spec-family-promotion.mjs --version V43') &&
+ promotionWorkflow.includes('node scripts/prepare-bitcode-runtime-canon-promotion.mjs --version V43 --next-draft V44') &&
+ promotionWorkflow.includes('node scripts/generate-bitcode-proven.mjs --version V43') &&
+ promotionWorkflow.includes('node scripts/check-bitcode-spec-family.mjs --version V43 --mode promoted --current-target V43') &&
+ promotionWorkflow.includes('check-v43-gate10-promotion-readiness.mjs --promotion-mode --skip-branch-check'),
+ 'V43 promotion workflow must validate Gate 10 and promote V43.',
+ );
+ assertCheck(
+ failures,
+ promoteScript.includes("if (version === 'V43')") &&
+ promoteScript.includes('const v43Gate10Command') &&
+ promoteScript.includes('buildDerivedV43CommitMessageBody') &&
+ promoteScript.includes("version === 'V43'"),
+ 'Promotion script must support V43.',
+ );
+ assertCheck(
+ failures,
+ prepareSpecScript.includes("if (version === 'V43')") &&
+ prepareSpecScript.includes('V43 canonical system specification for product routes and agentic depositing') &&
+ prepareSpecScript.includes(ARTIFACT_PATH),
+ 'Spec-family promotion preparation must support V43.',
+ );
+ 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('buildV43ProvenPackage') &&
+ provenGenerator.includes('buildV43PromotionReadinessReport') &&
+ provenGenerator.includes(ARTIFACT_PATH),
+ 'Proven generator must include V43 promotion package support.',
+ );
+ assertCheck(failures, protocolReadme.includes('V43 Gate 10') && protocolReadme.includes('V43` active, `V44` draft'), 'Protocol README must document V43 Gate 10.');
+ assertCheck(failures, rootReadme.includes('check:v43-gate10') && rootReadme.includes('v43-canon-promotion.yml'), 'Root README must document V43 Gate 10 scripts/workflow.');
+
+ if (failures.length === 0 && !args.skipPackageTests) {
+ try {
+ run(root, 'pnpm', ['--filter', '@bitcode/protocol', 'exec', 'node', '--test', '--test-force-exit', 'test/v43-promotion-readiness.test.js']);
+ run(root, 'node', ['scripts/promote-bitcode-canon.mjs', '--version', 'V43', '--commit', 'HEAD', '--dry-run']);
+ } catch (error) {
+ failures.push(`V43 Gate 10 package promotion tests failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write(`V43 Gate 10 promotion readiness failed:\n${failures.map((failure) => `- ${failure}`).join('\n')}\n`);
+ process.exit(1);
+ }
+
+ process.stdout.write(`V43 Gate 10 promotion readiness ok artifacts=${V43_GATE_ARTIFACTS.length} root=${artifact?.artifactRoot || 'pending'}\n`);
+}
+
+main();
diff --git a/scripts/check-v43-gate2-route-vocabulary-inventory.mjs b/scripts/check-v43-gate2-route-vocabulary-inventory.mjs
new file mode 100644
index 00000000..3035fd73
--- /dev/null
+++ b/scripts/check-v43-gate2-route-vocabulary-inventory.mjs
@@ -0,0 +1,173 @@
+#!/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 {
+ V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH,
+ buildV43RouteVocabularyInventory,
+} from '../packages/protocol/src/canonical/v43-route-vocabulary-inventory.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 assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function parseArgs(argv) {
+ const args = { repoRoot: defaultRepoRoot, skipBranchCheck: 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-v43-gate2-route-vocabulary-inventory.mjs [--skip-branch-check] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 2 route vocabulary inventory, migration matrix, generated artifact, docs, workflows, exports, and source-safe disclosure posture.',
+ ].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 === 'V42', `BITCODE_SPEC.txt must remain V42 during V43 gate work. Observed ${pointer || 'empty'}.`);
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 work must occur on version/v43 or v43/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ for (const relativePath of [
+ V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH,
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'packages/protocol/README.md',
+ 'packages/protocol/src/canonical/v43-route-vocabulary-inventory.js',
+ 'packages/protocol/test/v43-route-vocabulary-inventory.test.js',
+ 'scripts/generate-v43-route-vocabulary-inventory.mjs',
+ 'scripts/check-v43-gate2-route-vocabulary-inventory.mjs',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ 'package.json',
+ ]) {
+ assertCheck(failures, exists(root, relativePath), `Missing required V43 Gate 2 file: ${relativePath}`);
+ }
+
+ const artifact = buildV43RouteVocabularyInventory({ repoRoot: root });
+ assertCheck(failures, artifact.passed, `V43 route vocabulary inventory predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`);
+ assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Inventory artifact must be source-safe metadata only.');
+ assertCheck(failures, artifact.coverage.protectedSourceVisible === false, 'Inventory artifact must not expose protected source.');
+ assertCheck(failures, artifact.coverage.rawSourceTextVisible === false, 'Inventory artifact must not serialize raw source text.');
+ assertCheck(failures, artifact.coverage.sourceSnippetVisible === false, 'Inventory artifact must not serialize source snippets.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Inventory artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, artifact.coverage.routeVocabularyInventoryComplete === true, 'Inventory coverage must mark route vocabulary inventory complete.');
+ assertCheck(failures, artifact.coverage.migrationMatrixComplete === true, 'Inventory coverage must mark migration matrix complete.');
+ assertCheck(failures, artifact.migrationRows.length === 6, 'Inventory must contain all six Gate 2 migration rows.');
+ assertCheck(failures, artifact.sourceFiles.length > 0, 'Inventory must include source-safe file metadata rows.');
+
+ const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+ assertCheck(
+ failures,
+ exists(root, V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH) &&
+ read(root, V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH) === serialized,
+ `${V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH} must be generated and current.`,
+ );
+
+ const spec = read(root, 'BITCODE_SPEC_V43.md');
+ const delta = read(root, 'BITCODE_SPEC_V43_DELTA.md');
+ const notes = read(root, 'BITCODE_SPEC_V43_NOTES.md');
+ const parity = read(root, 'BITCODE_SPEC_V43_PARITY_MATRIX.md');
+ const roadmap = read(root, 'SPECIFICATIONS_ROADMAP.md');
+ const readme = read(root, 'README.md');
+ const protocolReadme = read(root, 'packages/protocol/README.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 phrase of [
+ 'v43-route-vocabulary-inventory',
+ '/exchange',
+ '/packs',
+ '/terminal',
+ '/read',
+ '/deposit',
+ 'retained debug cockpit',
+ 'redirect compatibility',
+ 'self-referential',
+ 'source-safe file/token counts',
+ ]) {
+ assertCheck(
+ failures,
+ spec.includes(phrase) || delta.includes(phrase) || notes.includes(phrase) || parity.includes(phrase) || roadmap.includes(phrase),
+ `Gate 2 spec family or roadmap must name ${phrase}.`,
+ );
+ }
+
+ assertCheck(failures, roadmap.includes('Current working gate: V43 Gate'), 'Roadmap must state active V43 gate work.');
+ assertCheck(failures, roadmap.includes('V43 Gate 2 closure anchor'), 'Roadmap must include V43 Gate 2 closure anchor.');
+ assertCheck(failures, readme.includes('V43 Gate 2'), 'README must document V43 Gate 2.');
+ assertCheck(failures, protocolReadme.includes('V43 Gate 2'), 'Protocol README must document V43 Gate 2.');
+ assertCheck(failures, packageJson.includes('"generate:v43-route-vocabulary-inventory"'), 'package.json must expose generate:v43-route-vocabulary-inventory.');
+ assertCheck(failures, packageJson.includes('"check:v43-route-vocabulary-inventory"'), 'package.json must expose check:v43-route-vocabulary-inventory.');
+ assertCheck(failures, packageJson.includes('"check:v43-gate2"'), 'package.json must expose check:v43-gate2.');
+ assertCheck(failures, gateWorkflow.includes('check-v43-gate2-route-vocabulary-inventory.mjs'), 'Gate workflow must run V43 Gate 2 checker.');
+ assertCheck(failures, canonWorkflow.includes('check-v43-gate2-route-vocabulary-inventory.mjs'), 'Canon workflow must run V43 Gate 2 checker.');
+
+ if (failures.length > 0) {
+ process.stderr.write('V43 Gate 2 route vocabulary inventory check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V43 Gate 2 route vocabulary inventory 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-v43-gate3-packs-activity-master-detail.mjs b/scripts/check-v43-gate3-packs-activity-master-detail.mjs
new file mode 100644
index 00000000..00bcc395
--- /dev/null
+++ b/scripts/check-v43-gate3-packs-activity-master-detail.mjs
@@ -0,0 +1,166 @@
+#!/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 {
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH,
+ buildV43PacksActivityMasterDetail,
+} from '../packages/protocol/src/canonical/v43-packs-activity-master-detail.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 assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function parseArgs(argv) {
+ const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipUapiTests: 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-uapi-tests') args.skipUapiTests = 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-v43-gate3-packs-activity-master-detail.mjs [--skip-branch-check] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 3 packs activity master-detail contracts, route/API/UI source, generated artifact, docs, workflows, tests, and source-safe disclosure posture.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function run(root, command, args) {
+ execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' });
+}
+
+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 === 'V42', `BITCODE_SPEC.txt must remain V42 during V43 gate work. Observed ${pointer || 'empty'}.`);
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 work must occur on version/v43 or v43/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ for (const relativePath of [
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH,
+ 'uapi/components/base/bitcode/activity/pack-activity-model.ts',
+ 'uapi/app/api/packs/activity/route.ts',
+ 'uapi/app/packs/page.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/app/exchange/page.tsx',
+ 'uapi/tests/packActivityModel.test.ts',
+ 'packages/protocol/src/canonical/v43-packs-activity-master-detail.js',
+ 'packages/protocol/test/v43-packs-activity-master-detail.test.js',
+ 'scripts/generate-v43-packs-activity-master-detail.mjs',
+ 'scripts/check-v43-gate3-packs-activity-master-detail.mjs',
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_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 V43 Gate 3 file: ${relativePath}`);
+ }
+
+ const artifact = buildV43PacksActivityMasterDetail({ repoRoot: root });
+ assertCheck(failures, artifact.passed, `V43 packs activity predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`);
+ assertCheck(failures, artifact.coverage.packActivityContractsImplemented === true, 'PackActivity contracts must be implemented.');
+ assertCheck(failures, artifact.coverage.packsRouteImplemented === true, 'Packs route must be implemented.');
+ assertCheck(failures, artifact.coverage.packsActivityApiImplemented === true, 'Packs activity API must be implemented.');
+ assertCheck(failures, artifact.coverage.exchangeRedirectCompatibilityImplemented === true, 'Exchange compatibility redirect must be implemented.');
+ assertCheck(failures, artifact.coverage.tableSearchImplemented === true, 'Table search must be implemented.');
+ assertCheck(failures, artifact.coverage.columnSortImplemented === true, 'Column sort must be implemented.');
+ assertCheck(failures, artifact.coverage.filteringImplemented === true, 'Filtering must be implemented.');
+ assertCheck(failures, artifact.coverage.detailProjectionImplemented === true, 'Detail projection must be implemented.');
+ 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.');
+
+ const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+ assertCheck(
+ failures,
+ exists(root, V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH) &&
+ read(root, V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH) === serialized,
+ `${V43_PACKS_ACTIVITY_MASTER_DETAIL_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:v43-packs-activity-master-detail"'), 'package.json must expose generate:v43-packs-activity-master-detail.');
+ assertCheck(failures, packageJson.includes('"check:v43-packs-activity-master-detail"'), 'package.json must expose check:v43-packs-activity-master-detail.');
+ assertCheck(failures, packageJson.includes('"check:v43-gate3"'), 'package.json must expose check:v43-gate3.');
+ assertCheck(failures, gateWorkflow.includes('check-v43-gate3-packs-activity-master-detail.mjs'), 'Gate workflow must run V43 Gate 3 checker.');
+ assertCheck(failures, canonWorkflow.includes('check-v43-gate3-packs-activity-master-detail.mjs'), 'Canon workflow must run V43 Gate 3 checker.');
+
+ if (!args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', ['--dir', 'uapi', 'exec', 'jest', 'packActivityModel.test.ts', '--runInBand']);
+ } catch {
+ failures.push('uapi packActivityModel.test.ts must pass.');
+ }
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write('V43 Gate 3 packs activity master-detail check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V43 Gate 3 packs activity master-detail 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-v43-gate4-read-route-five-step-ux.mjs b/scripts/check-v43-gate4-read-route-five-step-ux.mjs
new file mode 100644
index 00000000..65b24368
--- /dev/null
+++ b/scripts/check-v43-gate4-read-route-five-step-ux.mjs
@@ -0,0 +1,171 @@
+#!/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 {
+ V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH,
+ buildV43ReadRouteFiveStepUx,
+} from '../packages/protocol/src/canonical/v43-read-route-five-step-ux.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 assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function parseArgs(argv) {
+ const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipUapiTests: 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-uapi-tests') args.skipUapiTests = 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-v43-gate4-read-route-five-step-ux.mjs [--skip-branch-check] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 4 /read route extraction, five-step Reading UX, source-safe preview boundaries, generated artifact, docs, workflows, and tests.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function run(root, command, args) {
+ execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' });
+}
+
+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 === 'V42', `BITCODE_SPEC.txt must remain V42 during V43 gate work. Observed ${pointer || 'empty'}.`);
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 work must occur on version/v43 or v43/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ for (const relativePath of [
+ V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH,
+ 'uapi/app/read/read-route-model.ts',
+ 'uapi/app/read/page.tsx',
+ 'uapi/app/read/ReadPageClient.tsx',
+ 'uapi/app/terminal/terminal-routes.ts',
+ 'uapi/app/terminal/TerminalDepositReadWorkbench.tsx',
+ 'uapi/app/terminal/terminal-enterprise-reading-ux-state.ts',
+ 'uapi/components/base/bitcode/layout/nav.tsx',
+ 'uapi/components/base/bitcode/layout/workspace-surface.ts',
+ 'uapi/components/base/bitcode/layout/bitcode-public-copy.ts',
+ 'uapi/components/base/bitcode/layout/bitcode-public-explainers.ts',
+ 'uapi/components/base/bitcode/layout/footer.tsx',
+ 'uapi/tests/readRouteModel.test.ts',
+ 'uapi/tests/readPageClient.test.tsx',
+ 'packages/protocol/src/canonical/v43-read-route-five-step-ux.js',
+ 'packages/protocol/test/v43-read-route-five-step-ux.test.js',
+ 'scripts/generate-v43-read-route-five-step-ux.mjs',
+ 'scripts/check-v43-gate4-read-route-five-step-ux.mjs',
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_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 V43 Gate 4 file: ${relativePath}`);
+ }
+
+ const artifact = buildV43ReadRouteFiveStepUx({ repoRoot: root });
+ assertCheck(failures, artifact.passed, `V43 read route predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`);
+ assertCheck(failures, artifact.coverage.readRouteImplemented === true, 'Read route must be implemented.');
+ assertCheck(failures, artifact.coverage.fiveStepUxImplemented === true, 'Five-step Reading UX must be implemented.');
+ assertCheck(failures, artifact.coverage.acceptedNeedRequiredBeforeFindingFits === true, 'Accepted Need must gate Finding Fits.');
+ assertCheck(failures, artifact.coverage.sourceSafePreviewBeforeSettlement === true, 'AssetPack preview must be source-safe before settlement.');
+ assertCheck(failures, artifact.coverage.deliveryRequiresPaidReadRights === true, 'Delivery must require paid read rights.');
+ assertCheck(failures, artifact.coverage.executionStreamRetained === true, 'Execution stream must be retained.');
+ 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.');
+
+ const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+ assertCheck(
+ failures,
+ exists(root, V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH) &&
+ read(root, V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH) === serialized,
+ `${V43_READ_ROUTE_FIVE_STEP_UX_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:v43-read-route-five-step-ux"'), 'package.json must expose generate:v43-read-route-five-step-ux.');
+ assertCheck(failures, packageJson.includes('"check:v43-read-route-five-step-ux"'), 'package.json must expose check:v43-read-route-five-step-ux.');
+ assertCheck(failures, packageJson.includes('"check:v43-gate4"'), 'package.json must expose check:v43-gate4.');
+ assertCheck(failures, gateWorkflow.includes('check-v43-gate4-read-route-five-step-ux.mjs'), 'Gate workflow must run V43 Gate 4 checker.');
+ assertCheck(failures, canonWorkflow.includes('check-v43-gate4-read-route-five-step-ux.mjs'), 'Canon workflow must run V43 Gate 4 checker.');
+
+ if (!args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', ['--dir', 'uapi', 'exec', 'jest', 'readRouteModel.test.ts', 'readPageClient.test.tsx', '--runInBand']);
+ } catch {
+ failures.push('uapi readRouteModel.test.ts and readPageClient.test.tsx must pass.');
+ }
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write('V43 Gate 4 read route five-step UX check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V43 Gate 4 read route five-step UX 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-v43-gate5-deposit-route-options.mjs b/scripts/check-v43-gate5-deposit-route-options.mjs
new file mode 100644
index 00000000..bff0771e
--- /dev/null
+++ b/scripts/check-v43-gate5-deposit-route-options.mjs
@@ -0,0 +1,176 @@
+#!/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 {
+ V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH,
+ buildV43DepositRouteOptions,
+} from '../packages/protocol/src/canonical/v43-deposit-route-options.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 assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function parseArgs(argv) {
+ const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipUapiTests: 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-uapi-tests') args.skipUapiTests = 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-v43-gate5-deposit-route-options.mjs [--skip-branch-check] [--skip-uapi-tests] [--skip-package-tests] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 5 /deposit route extraction, source-safe deposit AssetPack option synthesis, generated artifact, docs, workflows, and tests.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function run(root, command, args) {
+ execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' });
+}
+
+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 === 'V42', `BITCODE_SPEC.txt must remain V42 during V43 gate work. Observed ${pointer || 'empty'}.`);
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 work must occur on version/v43 or v43/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ for (const relativePath of [
+ V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH,
+ 'uapi/app/deposit/deposit-route-model.ts',
+ 'uapi/app/deposit/page.tsx',
+ 'uapi/app/deposit/DepositPageClient.tsx',
+ 'uapi/app/terminal/terminal-routes.ts',
+ 'packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-options.test.ts',
+ 'uapi/tests/depositRouteModel.test.ts',
+ 'uapi/tests/depositPageClient.test.tsx',
+ 'packages/protocol/src/canonical/v43-deposit-route-options.js',
+ 'packages/protocol/test/v43-deposit-route-options.test.js',
+ 'scripts/generate-v43-deposit-route-options.mjs',
+ 'scripts/check-v43-gate5-deposit-route-options.mjs',
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_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 V43 Gate 5 file: ${relativePath}`);
+ }
+
+ const artifact = buildV43DepositRouteOptions({ repoRoot: root });
+ assertCheck(failures, artifact.passed, `V43 deposit route predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`);
+ assertCheck(failures, artifact.coverage.depositRouteImplemented === true, 'Deposit route must be implemented.');
+ assertCheck(failures, artifact.coverage.optionSynthesisImplemented === true, 'Deposit AssetPack option synthesis must be implemented.');
+ assertCheck(failures, artifact.coverage.multipleOptionsSynthesized === true, 'Multiple deposit AssetPack options must be synthesized.');
+ assertCheck(failures, artifact.coverage.sourceCriticalityDemandRoiPolicyDeferredToGate6 === true, 'Gate 6 policy must remain deferred.');
+ assertCheck(failures, artifact.coverage.admissionAndIndexingDeferredToGate7 === true, 'Gate 7 admission/indexing must remain deferred.');
+ assertCheck(failures, artifact.coverage.reviewRequiredBeforeDepositAdmission === true, 'Depositor review must precede admission.');
+ 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.rawSourceTextVisible === false, 'Artifact must not expose raw source text.');
+ 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.');
+
+ const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+ assertCheck(
+ failures,
+ exists(root, V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH) &&
+ read(root, V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH) === serialized,
+ `${V43_DEPOSIT_ROUTE_OPTIONS_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:v43-deposit-route-options"'), 'package.json must expose generate:v43-deposit-route-options.');
+ assertCheck(failures, packageJson.includes('"check:v43-deposit-route-options"'), 'package.json must expose check:v43-deposit-route-options.');
+ assertCheck(failures, packageJson.includes('"check:v43-gate5"'), 'package.json must expose check:v43-gate5.');
+ assertCheck(failures, gateWorkflow.includes('check-v43-gate5-deposit-route-options.mjs'), 'Gate workflow must run V43 Gate 5 checker.');
+ assertCheck(failures, canonWorkflow.includes('check-v43-gate5-deposit-route-options.mjs'), 'Canon workflow must run V43 Gate 5 checker.');
+
+ if (!args.skipPackageTests) {
+ try {
+ run(root, 'pnpm', ['--filter', '@bitcode/pipeline-asset-pack', 'exec', 'jest', 'deposit-asset-pack-options.test.ts', '--runInBand']);
+ } catch {
+ failures.push('asset-pack deposit-asset-pack-options.test.ts must pass.');
+ }
+ }
+
+ if (!args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', ['--dir', 'uapi', 'exec', 'jest', 'depositRouteModel.test.ts', 'depositPageClient.test.tsx', '--runInBand']);
+ } catch {
+ failures.push('uapi depositRouteModel.test.ts and depositPageClient.test.tsx must pass.');
+ }
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write('V43 Gate 5 deposit route options check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V43 Gate 5 deposit route options 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-v43-gate6-deposit-policy-compensation.mjs b/scripts/check-v43-gate6-deposit-policy-compensation.mjs
new file mode 100644
index 00000000..840fa518
--- /dev/null
+++ b/scripts/check-v43-gate6-deposit-policy-compensation.mjs
@@ -0,0 +1,173 @@
+#!/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 {
+ V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH,
+ buildV43DepositPolicyCompensation,
+} from '../packages/protocol/src/canonical/v43-deposit-policy-compensation.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 assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function parseArgs(argv) {
+ const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipUapiTests: 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-uapi-tests') args.skipUapiTests = 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-v43-gate6-deposit-policy-compensation.mjs [--skip-branch-check] [--skip-uapi-tests] [--skip-package-tests] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 6 deposit source criticality, demand, ROI, BTD potential, compensation policy, generated artifact, docs, workflows, and tests.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function run(root, command, args) {
+ execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' });
+}
+
+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 === 'V42', `BITCODE_SPEC.txt must remain V42 during V43 gate work. Observed ${pointer || 'empty'}.`);
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 work must occur on version/v43 or v43/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ for (const relativePath of [
+ V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH,
+ 'packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-policy.test.ts',
+ 'uapi/app/deposit/deposit-route-model.ts',
+ 'uapi/app/deposit/DepositPageClient.tsx',
+ 'uapi/tests/depositRouteModel.test.ts',
+ 'uapi/tests/depositPageClient.test.tsx',
+ 'packages/protocol/src/canonical/v43-deposit-policy-compensation.js',
+ 'packages/protocol/test/v43-deposit-policy-compensation.test.js',
+ 'scripts/generate-v43-deposit-policy-compensation.mjs',
+ 'scripts/check-v43-gate6-deposit-policy-compensation.mjs',
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_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 V43 Gate 6 file: ${relativePath}`);
+ }
+
+ const artifact = buildV43DepositPolicyCompensation({ repoRoot: root });
+ assertCheck(failures, artifact.passed, `V43 deposit policy predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`);
+ assertCheck(failures, artifact.coverage.depositPolicyImplemented === true, 'Deposit policy must be implemented.');
+ assertCheck(failures, artifact.coverage.criticalSourceBlockedBeforeAdmission === true, 'Critical source must block before admission.');
+ assertCheck(failures, artifact.coverage.roiPolicyImplemented === true, 'ROI policy must be implemented.');
+ assertCheck(failures, artifact.coverage.btdPotentialEstimateOnly === true, 'BTD potential must remain estimate-only.');
+ assertCheck(failures, artifact.coverage.compensationPolicyImplemented === true, 'Compensation policy must be implemented.');
+ assertCheck(failures, artifact.coverage.compensationPriceAsset === 'BTC', 'Compensation price asset must be BTC.');
+ assertCheck(failures, artifact.coverage.admissionAndIndexingDeferredToGate7 === true, 'Gate 7 admission/indexing must remain deferred.');
+ 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.walletPrivateMaterialVisible === false, 'Artifact must not expose wallet private material.');
+ assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Artifact must not expose settlement private payload.');
+
+ const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+ assertCheck(
+ failures,
+ exists(root, V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH) &&
+ read(root, V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH) === serialized,
+ `${V43_DEPOSIT_POLICY_COMPENSATION_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:v43-deposit-policy-compensation"'), 'package.json must expose generate:v43-deposit-policy-compensation.');
+ assertCheck(failures, packageJson.includes('"check:v43-deposit-policy-compensation"'), 'package.json must expose check:v43-deposit-policy-compensation.');
+ assertCheck(failures, packageJson.includes('"check:v43-gate6"'), 'package.json must expose check:v43-gate6.');
+ assertCheck(failures, gateWorkflow.includes('check-v43-gate6-deposit-policy-compensation.mjs'), 'Gate workflow must run V43 Gate 6 checker.');
+ assertCheck(failures, canonWorkflow.includes('check-v43-gate6-deposit-policy-compensation.mjs'), 'Canon workflow must run V43 Gate 6 checker.');
+
+ if (!args.skipPackageTests) {
+ try {
+ run(root, 'pnpm', ['--filter', '@bitcode/pipeline-asset-pack', 'exec', 'jest', 'deposit-asset-pack-option-policy.test.ts', '--runInBand']);
+ } catch {
+ failures.push('asset-pack deposit-asset-pack-option-policy.test.ts must pass.');
+ }
+ }
+
+ if (!args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', ['--dir', 'uapi', 'exec', 'jest', 'depositRouteModel.test.ts', 'depositPageClient.test.tsx', '--runInBand']);
+ } catch {
+ failures.push('uapi depositRouteModel.test.ts and depositPageClient.test.tsx must pass.');
+ }
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write('V43 Gate 6 deposit policy compensation check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V43 Gate 6 deposit policy compensation 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-v43-gate7-deposit-option-admission.mjs b/scripts/check-v43-gate7-deposit-option-admission.mjs
new file mode 100644
index 00000000..5c5ebb9a
--- /dev/null
+++ b/scripts/check-v43-gate7-deposit-option-admission.mjs
@@ -0,0 +1,186 @@
+#!/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 {
+ V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH,
+ buildV43DepositOptionAdmission,
+} from '../packages/protocol/src/canonical/v43-deposit-option-admission.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 assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function parseArgs(argv) {
+ const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipUapiTests: 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-uapi-tests') args.skipUapiTests = 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-v43-gate7-deposit-option-admission.mjs [--skip-branch-check] [--skip-uapi-tests] [--skip-package-tests] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 7 deposit option review decisions, source-safe admission receipts, Depository indexing, storage projection, /packs synchronization, generated artifact, docs, workflows, and tests.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function run(root, command, args) {
+ execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' });
+}
+
+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 === 'V42', `BITCODE_SPEC.txt must remain V42 during V43 gate work. Observed ${pointer || 'empty'}.`);
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 work must occur on version/v43 or v43/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ for (const relativePath of [
+ V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH,
+ 'packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts',
+ 'packages/pipelines/asset-pack/src/__tests__/deposit-asset-pack-option-admission.test.ts',
+ 'uapi/app/deposit/deposit-route-model.ts',
+ 'uapi/app/deposit/DepositPageClient.tsx',
+ 'uapi/components/base/bitcode/activity/pack-activity-model.ts',
+ 'uapi/tests/depositRouteModel.test.ts',
+ 'uapi/tests/depositPageClient.test.tsx',
+ 'uapi/tests/packActivityModel.test.ts',
+ 'uapi/jest.config.cjs',
+ 'packages/protocol/src/canonical/v43-deposit-option-admission.js',
+ 'packages/protocol/test/v43-deposit-option-admission.test.js',
+ 'scripts/generate-v43-deposit-option-admission.mjs',
+ 'scripts/check-v43-gate7-deposit-option-admission.mjs',
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_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 V43 Gate 7 file: ${relativePath}`);
+ }
+
+ const artifact = buildV43DepositOptionAdmission({ repoRoot: root });
+ assertCheck(failures, artifact.passed, `V43 deposit option admission predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`);
+ assertCheck(failures, artifact.coverage.reviewDecisionsImplemented === true, 'Review decisions must be implemented.');
+ assertCheck(failures, artifact.coverage.approvalDecisionImplemented === true, 'Approval decision must be implemented.');
+ assertCheck(failures, artifact.coverage.rejectionDecisionImplemented === true, 'Rejection decision must be implemented.');
+ assertCheck(failures, artifact.coverage.resynthesisDecisionImplemented === true, 'Resynthesis decision must be implemented.');
+ assertCheck(failures, artifact.coverage.admissionReceiptsImplemented === true, 'Admission receipts must be implemented.');
+ assertCheck(failures, artifact.coverage.approvedPolicyEligibleOptionsAdmittedOnly === true, 'Only approved policy-eligible options may be admitted.');
+ assertCheck(failures, artifact.coverage.depositoryIndexProjectionImplemented === true, 'Depository index projection must be implemented.');
+ assertCheck(failures, artifact.coverage.storageProjectionImplemented === true, 'Storage projection must be implemented.');
+ assertCheck(failures, artifact.coverage.compensationPreviewContinued === true, 'Compensation preview continuity must be implemented.');
+ assertCheck(failures, artifact.coverage.compensationPriceAsset === 'BTC', 'Compensation price asset must be BTC.');
+ assertCheck(failures, artifact.coverage.packsActivitySynchronizationImplemented === true, '/packs activity synchronization must be implemented.');
+ assertCheck(failures, artifact.coverage.packsActivityType === 'depository-assetpack', '/packs activity type must be depository-assetpack.');
+ assertCheck(failures, artifact.coverage.telemetryImplemented === true, 'Admission telemetry must be implemented.');
+ assertCheck(failures, artifact.coverage.routeAdmissionReadbackImplemented === true, '/deposit admission readback must be implemented.');
+ assertCheck(failures, artifact.coverage.btdMintRequiresFutureNeedFitSettlement === true, 'BTD minting must remain future Need-Fit settlement gated.');
+ 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.rawSourceTextVisible === false, 'Artifact must not expose raw source text.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Artifact must not expose raw provider responses.');
+ assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Artifact must not expose wallet private material.');
+ assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Artifact must not expose settlement private payload.');
+
+ const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+ assertCheck(
+ failures,
+ exists(root, V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH) &&
+ read(root, V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH) === serialized,
+ `${V43_DEPOSIT_OPTION_ADMISSION_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:v43-deposit-option-admission"'), 'package.json must expose generate:v43-deposit-option-admission.');
+ assertCheck(failures, packageJson.includes('"check:v43-deposit-option-admission"'), 'package.json must expose check:v43-deposit-option-admission.');
+ assertCheck(failures, packageJson.includes('"check:v43-gate7"'), 'package.json must expose check:v43-gate7.');
+ assertCheck(failures, gateWorkflow.includes('check-v43-gate7-deposit-option-admission.mjs'), 'Gate workflow must run V43 Gate 7 checker.');
+ assertCheck(failures, canonWorkflow.includes('check-v43-gate7-deposit-option-admission.mjs'), 'Canon workflow must run V43 Gate 7 checker.');
+
+ if (!args.skipPackageTests) {
+ try {
+ run(root, 'pnpm', ['--filter', '@bitcode/pipeline-asset-pack', 'exec', 'jest', 'deposit-asset-pack-option-admission.test.ts', '--runInBand']);
+ } catch {
+ failures.push('asset-pack deposit-asset-pack-option-admission.test.ts must pass.');
+ }
+ }
+
+ if (!args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', ['--dir', 'uapi', 'exec', 'jest', 'depositRouteModel.test.ts', 'depositPageClient.test.tsx', 'packActivityModel.test.ts', '--runInBand']);
+ } catch {
+ failures.push('uapi depositRouteModel.test.ts, depositPageClient.test.tsx, and packActivityModel.test.ts must pass.');
+ }
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write('V43 Gate 7 deposit option admission check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V43 Gate 7 deposit option admission 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-v43-gate8-route-ux-product-excellence.mjs b/scripts/check-v43-gate8-route-ux-product-excellence.mjs
new file mode 100644
index 00000000..39c3bea2
--- /dev/null
+++ b/scripts/check-v43-gate8-route-ux-product-excellence.mjs
@@ -0,0 +1,171 @@
+#!/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 {
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH,
+ buildV43RouteUxProductExcellence,
+} from '../packages/protocol/src/canonical/v43-route-ux-product-excellence.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 assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function parseArgs(argv) {
+ const args = { repoRoot: defaultRepoRoot, skipBranchCheck: false, skipUapiTests: 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-uapi-tests') args.skipUapiTests = 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-v43-gate8-route-ux-product-excellence.mjs [--skip-branch-check] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 8 shared route shell, product route copy, progressive disclosure, loading/empty/error states, route tests, generated artifact, docs, and workflow wiring.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function run(root, command, args) {
+ execFileSync(command, args, { cwd: root, stdio: 'pipe', encoding: 'utf8' });
+}
+
+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 === 'V42', `BITCODE_SPEC.txt must remain V42 during V43 gate work. Observed ${pointer || 'empty'}.`);
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-\d+-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 work must occur on version/v43 or v43/gate-N-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ for (const relativePath of [
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH,
+ 'uapi/components/base/bitcode/routes/product-route-shell.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/app/read/ReadPageClient.tsx',
+ 'uapi/app/deposit/DepositPageClient.tsx',
+ 'uapi/tests/packsPageClient.test.tsx',
+ 'uapi/tests/readPageClient.test.tsx',
+ 'uapi/tests/depositPageClient.test.tsx',
+ 'packages/protocol/src/canonical/v43-route-ux-product-excellence.js',
+ 'packages/protocol/test/v43-route-ux-product-excellence.test.js',
+ 'scripts/generate-v43-route-ux-product-excellence.mjs',
+ 'scripts/check-v43-gate8-route-ux-product-excellence.mjs',
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_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 V43 Gate 8 file: ${relativePath}`);
+ }
+
+ const artifact = buildV43RouteUxProductExcellence({ repoRoot: root });
+ assertCheck(failures, artifact.passed, `V43 route UX product excellence predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}`);
+ assertCheck(failures, artifact.coverage.sharedRouteShellImplemented === true, 'Shared route shell must be implemented.');
+ assertCheck(failures, artifact.coverage.sharedStepGridImplemented === true, 'Shared route step grid must be implemented.');
+ assertCheck(failures, artifact.coverage.keyboardCurrentStepImplemented === true, 'Keyboard current-step semantics must be implemented.');
+ assertCheck(failures, artifact.coverage.productRouteStatePanelsImplemented === true, 'Product route state panels must be implemented.');
+ assertCheck(failures, artifact.coverage.loadingEmptyErrorStatesImplemented === true, 'Loading, empty, and error states must be implemented.');
+ assertCheck(failures, artifact.coverage.progressiveDisclosureImplemented === true, 'Progressive disclosure must be implemented.');
+ assertCheck(failures, artifact.coverage.packsRouteUsesSharedShell === true, '/packs must use shared route shell.');
+ assertCheck(failures, artifact.coverage.readRouteUsesSharedShell === true, '/read must use shared route shell.');
+ assertCheck(failures, artifact.coverage.depositRouteUsesSharedShell === true, '/deposit must use shared route shell.');
+ assertCheck(failures, artifact.coverage.selfReferentialProductCopyReduced === true, 'Product copy must be reduced to route/status vocabulary.');
+ assertCheck(failures, artifact.coverage.executionStreamReadbackRetained === true, 'Execution stream readback posture must remain retained.');
+ 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.rawSourceTextVisible === false, 'Artifact must not expose raw source text.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, artifact.coverage.rawProviderResponseVisible === false, 'Artifact must not expose raw provider responses.');
+ assertCheck(failures, artifact.coverage.walletPrivateMaterialVisible === false, 'Artifact must not expose wallet private material.');
+ assertCheck(failures, artifact.coverage.settlementPrivatePayloadVisible === false, 'Artifact must not expose settlement private payload.');
+
+ const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+ assertCheck(
+ failures,
+ exists(root, V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH) &&
+ read(root, V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH) === serialized,
+ `${V43_ROUTE_UX_PRODUCT_EXCELLENCE_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:v43-route-ux-product-excellence"'), 'package.json must expose generate:v43-route-ux-product-excellence.');
+ assertCheck(failures, packageJson.includes('"check:v43-route-ux-product-excellence"'), 'package.json must expose check:v43-route-ux-product-excellence.');
+ assertCheck(failures, packageJson.includes('"check:v43-gate8"'), 'package.json must expose check:v43-gate8.');
+ assertCheck(failures, gateWorkflow.includes('check-v43-gate8-route-ux-product-excellence.mjs'), 'Gate workflow must run V43 Gate 8 checker.');
+ assertCheck(failures, canonWorkflow.includes('check-v43-gate8-route-ux-product-excellence.mjs'), 'Canon workflow must run V43 Gate 8 checker.');
+
+ if (!args.skipUapiTests) {
+ try {
+ run(root, 'pnpm', ['--dir', 'uapi', 'exec', 'jest', '--runTestsByPath', 'tests/packsPageClient.test.tsx', 'tests/readPageClient.test.tsx', 'tests/depositPageClient.test.tsx', '--runInBand']);
+ } catch {
+ failures.push('uapi packsPageClient.test.tsx, readPageClient.test.tsx, and depositPageClient.test.tsx must pass.');
+ }
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write('V43 Gate 8 route UX product excellence check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V43 Gate 8 route UX product excellence 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-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs b/scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs
new file mode 100644
index 00000000..22452993
--- /dev/null
+++ b/scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs
@@ -0,0 +1,282 @@
+#!/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/v43-cross-route-rehearsal-telemetry-repair.json';
+
+const SECRET_MARKERS = [
+ `${['sk', 'proj'].join('-')}-`,
+ `${['sb', 'secret'].join('_')}__`,
+ String.fromCharCode(101, 121, 74, 104, 98, 71, 99, 105, 79, 105, 74, 73, 85, 122, 73, 49, 78, 105),
+ ['OPENAI', 'API', 'KEY'].join('_'),
+ ['SUPABASE', 'SERVICE', 'ROLE'].join('_'),
+ ['VERCEL', 'TOKEN'].join('_'),
+ ['VERCEL', 'OIDC', 'TOKEN'].join('_'),
+ ['PRIVATE', 'KEY'].join('_'),
+];
+
+function parseArgs(argv) {
+ const args = {
+ repoRoot: defaultRepoRoot,
+ skipBranchCheck: false,
+ skipPackageTests: false,
+ skipUapiTests: 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 === '--skip-package-tests') args.skipPackageTests = true;
+ else if (arg === '--skip-uapi-tests') args.skipUapiTests = true;
+ else if (arg === '--help' || arg === '-h') args.help = true;
+ else throw new Error(`Unknown argument ${arg}`);
+ }
+
+ return args;
+}
+
+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, options = {}) {
+ return execFileSync(command, args, {
+ cwd: root,
+ encoding: 'utf8',
+ stdio: ['ignore', 'pipe', 'pipe'],
+ ...options,
+ }).trim();
+}
+
+function commandExists(root, command) {
+ try {
+ execFileSync('sh', ['-lc', `command -v ${command}`], {
+ cwd: root,
+ encoding: 'utf8',
+ stdio: ['ignore', 'pipe', 'ignore'],
+ });
+ return true;
+ } catch {
+ return false;
+ }
+}
+
+function assertCheck(failures, condition, message) {
+ if (!condition) failures.push(message);
+}
+
+function printHelp() {
+ process.stdout.write(
+ [
+ 'Usage: node scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs [--skip-branch-check] [--skip-package-tests] [--skip-uapi-tests] [--repo-root ]',
+ '',
+ 'Checks V43 Gate 9 cross-route rehearsal, telemetry, synchronization, repair, source-safety, docs, tests, and workflow wiring.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function parseJson(output, failures, label) {
+ try {
+ return JSON.parse(output);
+ } catch (error) {
+ failures.push(`${label} did not emit JSON: ${error.message}`);
+ return null;
+ }
+}
+
+function runFocusedTests(root, failures, args) {
+ const commands = [
+ ['node', ['--test', '--test-force-exit', 'packages/protocol/test/v43-cross-route-rehearsal-telemetry-repair.test.js']],
+ ];
+
+ if (!args.skipPackageTests && commandExists(root, 'pnpm')) {
+ commands.push(
+ ['pnpm', ['--filter', '@bitcode/pipeline-asset-pack', 'exec', 'jest', '--config', 'jest.config.cjs', '--runTestsByPath', 'src/__tests__/deposit-asset-pack-option-admission.test.ts', 'src/__tests__/reading-local-staging-rehearsal.test.ts', '--runInBand', '--forceExit']],
+ );
+ }
+
+ if (!args.skipUapiTests && commandExists(root, 'pnpm')) {
+ commands.push(
+ ['pnpm', ['--dir', 'uapi', 'exec', 'jest', '--runTestsByPath', 'tests/depositPageClient.test.tsx', 'tests/readPageClient.test.tsx', 'tests/packsPageClient.test.tsx', 'tests/packActivityModel.test.ts', '--runInBand']],
+ );
+ }
+
+ for (const [command, commandArgs] of commands) {
+ try {
+ run(root, command, commandArgs);
+ } catch (error) {
+ failures.push(`Gate 9 focused test failed for ${command} ${commandArgs.join(' ')}: ${error.stderr || error.message}`);
+ return;
+ }
+ }
+}
+
+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 === 'V42',
+ `BITCODE_SPEC.txt must remain V42 during V43 gate work. Observed ${pointer || 'empty'}.`,
+ );
+
+ if (!args.skipBranchCheck) {
+ const branch = git(root, ['branch', '--show-current']);
+ assertCheck(
+ failures,
+ branch === 'version/v43' || /^v43\/gate-(?:9|10)-[a-z0-9][a-z0-9-]*$/u.test(branch),
+ `V43 Gate 9+ work must occur on version/v43 or v43/gate-9..10-* branches. Observed ${branch || 'detached HEAD'}.`,
+ );
+ }
+
+ const requiredFiles = [
+ ARTIFACT_PATH,
+ 'scripts/rehearse-v43-cross-route-product-flow.mjs',
+ 'scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs',
+ 'scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs',
+ 'packages/protocol/src/canonical/v43-cross-route-rehearsal-telemetry-repair.js',
+ 'packages/protocol/test/v43-cross-route-rehearsal-telemetry-repair.test.js',
+ 'uapi/app/deposit/DepositPageClient.tsx',
+ 'uapi/app/read/ReadPageClient.tsx',
+ 'uapi/app/packs/PacksPageClient.tsx',
+ 'uapi/app/api/packs/activity/route.ts',
+ 'uapi/components/base/bitcode/execution/pipeline-execution-log.tsx',
+ 'BITCODE_SPEC_V43.md',
+ 'BITCODE_SPEC_V43_DELTA.md',
+ 'BITCODE_SPEC_V43_NOTES.md',
+ 'BITCODE_SPEC_V43_PARITY_MATRIX.md',
+ 'SPECIFICATIONS_ROADMAP.md',
+ 'README.md',
+ 'packages/protocol/README.md',
+ 'package.json',
+ '.github/workflows/bitcode-gate-quality.yml',
+ '.github/workflows/bitcode-canon-quality.yml',
+ ];
+
+ for (const relativePath of requiredFiles) {
+ assertCheck(failures, fileExists(root, relativePath), `Missing V43 Gate 9 file: ${relativePath}`);
+ }
+
+ if (failures.length === 0) {
+ try {
+ run(root, 'node', ['scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs', '--check']);
+ } catch (error) {
+ failures.push(`V43 cross-route rehearsal artifact check failed: ${error.stderr || error.message}`);
+ }
+ }
+
+ let localReceipt = null;
+ let stagingReceipt = null;
+ if (failures.length === 0) {
+ const dryRunEnv = {
+ ...process.env,
+ OPENAI_API_KEY: `${['sk', 'proj'].join('-')}-dummy-do-not-serialize-000000000000`,
+ VERCEL_OIDC_TOKEN: 'oidc_dummy_do_not_serialize',
+ BITCODE_RUN_VERCEL_SANDBOX_HARNESS: '1',
+ BITCODE_ENABLE_PIPELINE_HARNESS_API: '1',
+ BITCODE_ASSET_PACK_REAL_INFERENCE: '1',
+ BITCODE_PIPELINE_STREAM_TO_DATABASE: '1',
+ SUPABASE_URL: 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/',
+ SUPABASE_ANON_KEY: 'anon_dummy_do_not_serialize',
+ SUPABASE_SECRET_KEY: 'admin_dummy_do_not_serialize',
+ };
+ const localOutput = run(root, 'node', ['scripts/rehearse-v43-cross-route-product-flow.mjs', '--lane', 'local', '--dry-run', '--json'], { env: dryRunEnv });
+ const stagingOutput = run(root, 'node', ['scripts/rehearse-v43-cross-route-product-flow.mjs', '--lane', 'staging-testnet', '--dry-run', '--json'], { env: dryRunEnv });
+ localReceipt = parseJson(localOutput, failures, 'local V43 cross-route rehearsal dry run');
+ stagingReceipt = parseJson(stagingOutput, failures, 'staging-testnet V43 cross-route rehearsal dry run');
+
+ for (const marker of ['dummy-do-not-serialize', dryRunEnv.OPENAI_API_KEY, dryRunEnv.SUPABASE_SECRET_KEY, dryRunEnv.VERCEL_OIDC_TOKEN]) {
+ assertCheck(failures, !localOutput.includes(marker), `Local dry-run receipt must not serialize secret value ${marker}.`);
+ assertCheck(failures, !stagingOutput.includes(marker), `Staging dry-run receipt must not serialize secret value ${marker}.`);
+ }
+ }
+
+ if (failures.length === 0) {
+ runFocusedTests(root, failures, args);
+ }
+
+ const serializedArtifact = fileExists(root, ARTIFACT_PATH) ? read(root, ARTIFACT_PATH) : '';
+ for (const marker of SECRET_MARKERS) {
+ assertCheck(failures, !serializedArtifact.includes(marker), `V43 Gate 9 artifact must not contain secret marker ${marker}.`);
+ }
+
+ const artifact = serializedArtifact ? JSON.parse(serializedArtifact) : null;
+ if (artifact) {
+ assertCheck(failures, artifact.artifactId === 'v43-cross-route-rehearsal-telemetry-repair', 'Gate 9 artifactId must match.');
+ assertCheck(failures, artifact.schemaId === 'bitcode.v43.crossRouteRehearsalTelemetryRepair.v1', 'Gate 9 schemaId must match.');
+ assertCheck(failures, artifact.version === 'V43' && artifact.currentTarget === 'V42', 'Gate 9 artifact must bind V43 over active V42.');
+ assertCheck(failures, artifact.passed === true, 'Gate 9 artifact must pass.');
+ assertCheck(failures, artifact.coverage.rowCount === 12, 'Gate 9 must cover twelve rehearsal rows.');
+ assertCheck(failures, artifact.coverage.laneCount === 2, 'Gate 9 must cover local and staging-testnet lanes.');
+ assertCheck(failures, artifact.coverage.routeCount === 3, 'Gate 9 must cover /deposit, /read, and /packs.');
+ assertCheck(failures, artifact.coverage.stageCount === 9, 'Gate 9 must cover all cross-route stages.');
+ assertCheck(failures, artifact.coverage.stagingProjectRef === 'tkpyosihuouusyaxtbau', 'Gate 9 must bind staging-testnet Supabase project.');
+ assertCheck(failures, artifact.coverage.depositRouteCovered === true, 'Gate 9 must cover /deposit.');
+ assertCheck(failures, artifact.coverage.readRouteCovered === true, 'Gate 9 must cover /read.');
+ assertCheck(failures, artifact.coverage.packsRouteCovered === true, 'Gate 9 must cover /packs.');
+ assertCheck(failures, artifact.coverage.telemetryDatabaseReadbackCovered === true, 'Gate 9 must cover telemetry database readback.');
+ assertCheck(failures, artifact.coverage.ledgerDatabaseStorageSynchronized === true, 'Gate 9 must cover ledger/database/storage sync.');
+ assertCheck(failures, artifact.coverage.repairMatrixCovered === true, 'Gate 9 must cover repair states.');
+ assertCheck(failures, artifact.coverage.mainnetValueBearingBlocked === true, 'Gate 9 must keep value-bearing mainnet blocked.');
+ assertCheck(failures, artifact.coverage.sourceSafeMetadataOnly === true, 'Gate 9 artifact must be source-safe metadata only.');
+ assertCheck(failures, artifact.coverage.credentialsSerialized === false, 'Gate 9 artifact must not serialize credentials.');
+ assertCheck(failures, artifact.coverage.unpaidAssetPackSourceVisible === false, 'Gate 9 artifact must not expose unpaid AssetPack source.');
+ assertCheck(failures, artifact.coverage.failedPredicateIds.length === 0, `Gate 9 predicates must pass: ${artifact.coverage.failedPredicateIds.join(', ')}`);
+ }
+
+ if (localReceipt) {
+ assertCheck(failures, localReceipt.version === 'V43', 'Local receipt must be V43.');
+ assertCheck(failures, localReceipt.laneId === 'local', 'Local receipt lane must be local.');
+ assertCheck(failures, localReceipt.routes.includes('/deposit') && localReceipt.routes.includes('/read') && localReceipt.routes.includes('/packs'), 'Local receipt must cover product routes.');
+ assertCheck(failures, localReceipt.sourceSafety.secretValueSerialized === false, 'Local receipt must not serialize secrets.');
+ }
+ if (stagingReceipt) {
+ assertCheck(failures, stagingReceipt.version === 'V43', 'Staging receipt must be V43.');
+ assertCheck(failures, stagingReceipt.laneId === 'staging-testnet', 'Staging receipt lane must be staging-testnet.');
+ assertCheck(failures, stagingReceipt.stagingProjectRef === 'tkpyosihuouusyaxtbau', 'Staging receipt must bind staging project.');
+ assertCheck(failures, stagingReceipt.ready === true, 'Staging dry-run receipt must be ready with dummy family values.');
+ assertCheck(failures, stagingReceipt.sourceSafety.secretValueSerialized === false, 'Staging receipt must not serialize secrets.');
+ }
+
+ if (failures.length > 0) {
+ process.stderr.write('V43 Gate 9 cross-route rehearsal telemetry repair check failed:\n');
+ for (const failure of failures.filter(Boolean)) process.stderr.write(`- ${failure}\n`);
+ process.exitCode = 1;
+ return;
+ }
+
+ process.stdout.write('V43 Gate 9 cross-route rehearsal telemetry repair 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/generate-v42-ai-reading-demonstration.mjs b/scripts/generate-v42-ai-reading-demonstration.mjs
new file mode 100644
index 00000000..d98c0d69
--- /dev/null
+++ b/scripts/generate-v42-ai-reading-demonstration.mjs
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+
+import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import {
+ V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH,
+ buildV42AiReadingDemonstration,
+} from '../packages/protocol/src/canonical/v42-ai-reading-demonstration.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const defaultRepoRoot = path.resolve(__dirname, '..');
+
+function parseArgs(argv) {
+ const args = {
+ repoRoot: defaultRepoRoot,
+ check: 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 === '--check') args.check = true;
+ else if (arg === '--help' || arg === '-h') {
+ process.stdout.write(
+ 'Usage: node scripts/generate-v42-ai-reading-demonstration.mjs [--check] [--repo-root ]\n',
+ );
+ process.exit(0);
+ } else {
+ throw new Error(`Unknown argument ${arg}`);
+ }
+ }
+ return args;
+}
+
+const args = parseArgs(process.argv.slice(2));
+const artifact = buildV42AiReadingDemonstration({ repoRoot: args.repoRoot });
+const artifactPath = path.join(args.repoRoot, V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH);
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+
+if (args.check) {
+ if (!existsSync(artifactPath)) {
+ process.stderr.write(`Missing ${V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH}\n`);
+ process.exit(1);
+ }
+ const current = readFileSync(artifactPath, 'utf8');
+ if (current !== serialized) {
+ process.stderr.write(`${V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH} is stale. Run pnpm run generate:v42-ai-reading-demonstration.\n`);
+ process.exit(1);
+ }
+ if (!artifact.passed) {
+ process.stderr.write(`V42 AI-reading demonstration artifact predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}\n`);
+ process.exit(1);
+ }
+ process.stdout.write(`V42 AI-reading demonstration artifact ok ${artifact.artifactRoot}\n`);
+ process.exit(0);
+}
+
+mkdirSync(path.dirname(artifactPath), { recursive: true });
+writeFileSync(artifactPath, serialized);
+process.stdout.write(`Wrote ${V42_AI_READING_DEMONSTRATION_ARTIFACT_PATH} ${artifact.artifactRoot}\n`);
+
diff --git a/scripts/generate-v42-depositing-shortest-path.mjs b/scripts/generate-v42-depositing-shortest-path.mjs
new file mode 100644
index 00000000..4ca1a620
--- /dev/null
+++ b/scripts/generate-v42-depositing-shortest-path.mjs
@@ -0,0 +1,31 @@
+#!/usr/bin/env node
+
+import { readFileSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import {
+ V42_DEPOSITING_SHORTEST_PATH_ARTIFACT_PATH,
+ buildV42DepositingShortestPath,
+} from '../packages/protocol/src/canonical/v42-depositing-shortest-path.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const repoRoot = path.resolve(__dirname, '..');
+
+const check = process.argv.includes('--check');
+const artifact = buildV42DepositingShortestPath({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V42_DEPOSITING_SHORTEST_PATH_ARTIFACT_PATH);
+
+if (check) {
+ const current = readFileSync(artifactPath, 'utf8');
+ if (current !== serialized) {
+ process.stderr.write(
+ `${V42_DEPOSITING_SHORTEST_PATH_ARTIFACT_PATH} is stale. Run pnpm run generate:v42-depositing-shortest-path.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V42_DEPOSITING_SHORTEST_PATH_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v42-local-staging-mvp-rehearsal.mjs b/scripts/generate-v42-local-staging-mvp-rehearsal.mjs
new file mode 100644
index 00000000..028ffffd
--- /dev/null
+++ b/scripts/generate-v42-local-staging-mvp-rehearsal.mjs
@@ -0,0 +1,61 @@
+#!/usr/bin/env node
+
+import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import {
+ V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH,
+ buildV42LocalStagingMvpRehearsal,
+} from '../packages/protocol/src/canonical/v42-local-staging-mvp-rehearsal.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const defaultRepoRoot = path.resolve(__dirname, '..');
+
+function parseArgs(argv) {
+ const args = {
+ repoRoot: defaultRepoRoot,
+ check: 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 === '--check') args.check = true;
+ else if (arg === '--help' || arg === '-h') {
+ process.stdout.write(
+ 'Usage: node scripts/generate-v42-local-staging-mvp-rehearsal.mjs [--check] [--repo-root ]\n',
+ );
+ process.exit(0);
+ } else {
+ throw new Error(`Unknown argument ${arg}`);
+ }
+ }
+ return args;
+}
+
+const args = parseArgs(process.argv.slice(2));
+const artifact = buildV42LocalStagingMvpRehearsal({ repoRoot: args.repoRoot });
+const artifactPath = path.join(args.repoRoot, V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH);
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+
+if (args.check) {
+ if (!existsSync(artifactPath)) {
+ process.stderr.write(`Missing ${V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH}\n`);
+ process.exit(1);
+ }
+ const current = readFileSync(artifactPath, 'utf8');
+ if (current !== serialized) {
+ process.stderr.write(`${V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH} is stale. Run pnpm run generate:v42-local-staging-mvp-rehearsal.\n`);
+ process.exit(1);
+ }
+ if (!artifact.passed) {
+ process.stderr.write(`V42 local/staging MVP rehearsal artifact predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}\n`);
+ process.exit(1);
+ }
+ process.stdout.write(`V42 local/staging MVP rehearsal artifact ok ${artifact.artifactRoot}\n`);
+ process.exit(0);
+}
+
+mkdirSync(path.dirname(artifactPath), { recursive: true });
+writeFileSync(artifactPath, serialized);
+process.stdout.write(`Wrote ${V42_LOCAL_STAGING_MVP_REHEARSAL_ARTIFACT_PATH} ${artifact.artifactRoot}\n`);
diff --git a/scripts/generate-v42-promotion-readiness-report.mjs b/scripts/generate-v42-promotion-readiness-report.mjs
new file mode 100644
index 00000000..79dc207c
--- /dev/null
+++ b/scripts/generate-v42-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 {
+ V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ V42_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ buildV42PromotionReadinessReport,
+} 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-05-25T00:00:00.000Z';
+const EXPECTED_ARTIFACT_ID = 'v42-promotion-readiness-report';
+const EXPECTED_SOURCE_SAFETY_VERDICT = 'source-safe-v42-reliable-mvp-promotion-readiness-metadata';
+
+function parseArgs(argv) {
+ return {
+ check: argv.includes('--check'),
+ };
+}
+
+function main() {
+ const args = parseArgs(process.argv.slice(2));
+ const artifact = buildV42PromotionReadinessReport({
+ generatedAt: GENERATED_AT,
+ repoRoot,
+ });
+ if (
+ artifact.artifactId !== EXPECTED_ARTIFACT_ID ||
+ artifact.sourceSafetyVerdict !== V42_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT ||
+ artifact.sourceSafetyVerdict !== EXPECTED_SOURCE_SAFETY_VERDICT
+ ) {
+ throw new Error('Unexpected V42 promotion readiness artifact identity.');
+ }
+ const outputPath = path.join(repoRoot, V42_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(
+ `${V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH} is stale. Run pnpm run generate:v42-promotion-readiness.\n`,
+ );
+ process.exitCode = 1;
+ return;
+ }
+ if (!artifact.passed) {
+ process.stderr.write(`V42 promotion readiness artifact failed:\n${artifact.failures.map((failure) => `- ${failure}`).join('\n')}\n`);
+ process.exitCode = 1;
+ return;
+ }
+ process.stdout.write(
+ `V42 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 ${V42_PROMOTION_READINESS_REPORT_ARTIFACT_PATH} artifacts=${artifact.coverage.gateArtifactCount} root=${artifact.artifactRoot}\n`,
+ );
+}
+
+main();
diff --git a/scripts/generate-v42-readfitsfinding-preview-quote.mjs b/scripts/generate-v42-readfitsfinding-preview-quote.mjs
new file mode 100644
index 00000000..62e6ffbd
--- /dev/null
+++ b/scripts/generate-v42-readfitsfinding-preview-quote.mjs
@@ -0,0 +1,31 @@
+#!/usr/bin/env node
+
+import { readFileSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import {
+ V42_READFITSFINDING_PREVIEW_QUOTE_ARTIFACT_PATH,
+ buildV42ReadFitsFindingPreviewQuote,
+} from '../packages/protocol/src/canonical/v42-readfitsfinding-preview-quote.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const repoRoot = path.resolve(__dirname, '..');
+
+const check = process.argv.includes('--check');
+const artifact = buildV42ReadFitsFindingPreviewQuote({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V42_READFITSFINDING_PREVIEW_QUOTE_ARTIFACT_PATH);
+
+if (check) {
+ const current = readFileSync(artifactPath, 'utf8');
+ if (current !== serialized) {
+ process.stderr.write(
+ `${V42_READFITSFINDING_PREVIEW_QUOTE_ARTIFACT_PATH} is stale. Run pnpm run generate:v42-readfitsfinding-preview-quote.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V42_READFITSFINDING_PREVIEW_QUOTE_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v42-reading-shortest-path-state-machine.mjs b/scripts/generate-v42-reading-shortest-path-state-machine.mjs
new file mode 100644
index 00000000..615153ae
--- /dev/null
+++ b/scripts/generate-v42-reading-shortest-path-state-machine.mjs
@@ -0,0 +1,31 @@
+#!/usr/bin/env node
+
+import { readFileSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import {
+ V42_READING_SHORTEST_PATH_STATE_MACHINE_ARTIFACT_PATH,
+ buildV42ReadingShortestPathStateMachine,
+} from '../packages/protocol/src/canonical/v42-reading-shortest-path-state-machine.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const repoRoot = path.resolve(__dirname, '..');
+
+const check = process.argv.includes('--check');
+const artifact = buildV42ReadingShortestPathStateMachine({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V42_READING_SHORTEST_PATH_STATE_MACHINE_ARTIFACT_PATH);
+
+if (check) {
+ const current = readFileSync(artifactPath, 'utf8');
+ if (current !== serialized) {
+ process.stderr.write(
+ `${V42_READING_SHORTEST_PATH_STATE_MACHINE_ARTIFACT_PATH} is stale. Run pnpm run generate:v42-reading-shortest-path-state-machine.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V42_READING_SHORTEST_PATH_STATE_MACHINE_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v42-readneed-review-resynthesis-product-closure.mjs b/scripts/generate-v42-readneed-review-resynthesis-product-closure.mjs
new file mode 100644
index 00000000..cb05c4a3
--- /dev/null
+++ b/scripts/generate-v42-readneed-review-resynthesis-product-closure.mjs
@@ -0,0 +1,31 @@
+#!/usr/bin/env node
+
+import { readFileSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import {
+ V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ARTIFACT_PATH,
+ buildV42ReadNeedReviewResynthesisProductClosure,
+} from '../packages/protocol/src/canonical/v42-readneed-review-resynthesis-product-closure.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const repoRoot = path.resolve(__dirname, '..');
+
+const check = process.argv.includes('--check');
+const artifact = buildV42ReadNeedReviewResynthesisProductClosure({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ARTIFACT_PATH);
+
+if (check) {
+ const current = readFileSync(artifactPath, 'utf8');
+ if (current !== serialized) {
+ process.stderr.write(
+ `${V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ARTIFACT_PATH} is stale. Run pnpm run generate:v42-readneed-review-resynthesis-product-closure.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V42_READNEED_REVIEW_RESYNTHESIS_PRODUCT_CLOSURE_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v42-settlement-rights-delivery.mjs b/scripts/generate-v42-settlement-rights-delivery.mjs
new file mode 100644
index 00000000..3e9fe1c2
--- /dev/null
+++ b/scripts/generate-v42-settlement-rights-delivery.mjs
@@ -0,0 +1,61 @@
+#!/usr/bin/env node
+
+import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import {
+ V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH,
+ buildV42SettlementRightsDelivery,
+} from '../packages/protocol/src/canonical/v42-settlement-rights-delivery.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const defaultRepoRoot = path.resolve(__dirname, '..');
+
+function parseArgs(argv) {
+ const args = {
+ repoRoot: defaultRepoRoot,
+ check: 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 === '--check') args.check = true;
+ else if (arg === '--help' || arg === '-h') {
+ process.stdout.write(
+ 'Usage: node scripts/generate-v42-settlement-rights-delivery.mjs [--check] [--repo-root ]\n',
+ );
+ process.exit(0);
+ } else {
+ throw new Error(`Unknown argument ${arg}`);
+ }
+ }
+ return args;
+}
+
+const args = parseArgs(process.argv.slice(2));
+const artifact = buildV42SettlementRightsDelivery({ repoRoot: args.repoRoot });
+const artifactPath = path.join(args.repoRoot, V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH);
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+
+if (args.check) {
+ if (!existsSync(artifactPath)) {
+ process.stderr.write(`Missing ${V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH}\n`);
+ process.exit(1);
+ }
+ const current = readFileSync(artifactPath, 'utf8');
+ if (current !== serialized) {
+ process.stderr.write(`${V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH} is stale. Run pnpm run generate:v42-settlement-rights-delivery.\n`);
+ process.exit(1);
+ }
+ if (!artifact.passed) {
+ process.stderr.write(`V42 settlement rights delivery artifact predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}\n`);
+ process.exit(1);
+ }
+ process.stdout.write(`V42 settlement rights delivery artifact ok ${artifact.artifactRoot}\n`);
+ process.exit(0);
+}
+
+mkdirSync(path.dirname(artifactPath), { recursive: true });
+writeFileSync(artifactPath, serialized);
+process.stdout.write(`Wrote ${V42_SETTLEMENT_RIGHTS_DELIVERY_ARTIFACT_PATH} ${artifact.artifactRoot}\n`);
diff --git a/scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs b/scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs
new file mode 100644
index 00000000..ddf8fca9
--- /dev/null
+++ b/scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs
@@ -0,0 +1,61 @@
+#!/usr/bin/env node
+
+import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import {
+ V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH,
+ buildV43CrossRouteRehearsalTelemetryRepair,
+} from '../packages/protocol/src/canonical/v43-cross-route-rehearsal-telemetry-repair.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const defaultRepoRoot = path.resolve(__dirname, '..');
+
+function parseArgs(argv) {
+ const args = {
+ repoRoot: defaultRepoRoot,
+ check: 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 === '--check') args.check = true;
+ else if (arg === '--help' || arg === '-h') {
+ process.stdout.write(
+ 'Usage: node scripts/generate-v43-cross-route-rehearsal-telemetry-repair.mjs [--check] [--repo-root ]\n',
+ );
+ process.exit(0);
+ } else {
+ throw new Error(`Unknown argument ${arg}`);
+ }
+ }
+ return args;
+}
+
+const args = parseArgs(process.argv.slice(2));
+const artifact = buildV43CrossRouteRehearsalTelemetryRepair({ repoRoot: args.repoRoot });
+const artifactPath = path.join(args.repoRoot, V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH);
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+
+if (args.check) {
+ if (!existsSync(artifactPath)) {
+ process.stderr.write(`Missing ${V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH}\n`);
+ process.exit(1);
+ }
+ const current = readFileSync(artifactPath, 'utf8');
+ if (current !== serialized) {
+ process.stderr.write(`${V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH} is stale. Run pnpm run generate:v43-cross-route-rehearsal.\n`);
+ process.exit(1);
+ }
+ if (!artifact.passed) {
+ process.stderr.write(`V43 cross-route rehearsal predicates failed: ${artifact.coverage.failedPredicateIds.join(', ')}\n`);
+ process.exit(1);
+ }
+ process.stdout.write(`V43 cross-route rehearsal artifact ok ${artifact.artifactRoot}\n`);
+ process.exit(0);
+}
+
+mkdirSync(path.dirname(artifactPath), { recursive: true });
+writeFileSync(artifactPath, serialized);
+process.stdout.write(`Wrote ${V43_CROSS_ROUTE_REHEARSAL_ARTIFACT_PATH} ${artifact.artifactRoot}\n`);
diff --git a/scripts/generate-v43-deposit-option-admission.mjs b/scripts/generate-v43-deposit-option-admission.mjs
new file mode 100644
index 00000000..5e9f69e7
--- /dev/null
+++ b/scripts/generate-v43-deposit-option-admission.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 {
+ V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH,
+ buildV43DepositOptionAdmission,
+} from '../packages/protocol/src/canonical/v43-deposit-option-admission.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const repoRoot = path.resolve(__dirname, '..');
+const check = process.argv.includes('--check');
+const artifact = buildV43DepositOptionAdmission({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH);
+
+if (check) {
+ if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) {
+ process.stderr.write(
+ `${V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH} is stale. Run pnpm run generate:v43-deposit-option-admission.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ mkdirSync(path.dirname(artifactPath), { recursive: true });
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V43_DEPOSIT_OPTION_ADMISSION_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v43-deposit-policy-compensation.mjs b/scripts/generate-v43-deposit-policy-compensation.mjs
new file mode 100644
index 00000000..3257c288
--- /dev/null
+++ b/scripts/generate-v43-deposit-policy-compensation.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 {
+ V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH,
+ buildV43DepositPolicyCompensation,
+} from '../packages/protocol/src/canonical/v43-deposit-policy-compensation.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const repoRoot = path.resolve(__dirname, '..');
+const check = process.argv.includes('--check');
+const artifact = buildV43DepositPolicyCompensation({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH);
+
+if (check) {
+ if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) {
+ process.stderr.write(
+ `${V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH} is stale. Run pnpm run generate:v43-deposit-policy-compensation.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ mkdirSync(path.dirname(artifactPath), { recursive: true });
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V43_DEPOSIT_POLICY_COMPENSATION_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v43-deposit-route-options.mjs b/scripts/generate-v43-deposit-route-options.mjs
new file mode 100644
index 00000000..1acce7cc
--- /dev/null
+++ b/scripts/generate-v43-deposit-route-options.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 {
+ V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH,
+ buildV43DepositRouteOptions,
+} from '../packages/protocol/src/canonical/v43-deposit-route-options.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 = buildV43DepositRouteOptions({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH);
+
+if (checkOnly) {
+ if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) {
+ process.stderr.write(
+ `${V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH} is stale. Run pnpm run generate:v43-deposit-route-options.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ mkdirSync(path.dirname(artifactPath), { recursive: true });
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V43_DEPOSIT_ROUTE_OPTIONS_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v43-packs-activity-master-detail.mjs b/scripts/generate-v43-packs-activity-master-detail.mjs
new file mode 100644
index 00000000..5fa1be8f
--- /dev/null
+++ b/scripts/generate-v43-packs-activity-master-detail.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 {
+ V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH,
+ buildV43PacksActivityMasterDetail,
+} from '../packages/protocol/src/canonical/v43-packs-activity-master-detail.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 = buildV43PacksActivityMasterDetail({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH);
+
+if (checkOnly) {
+ if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) {
+ process.stderr.write(
+ `${V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH} is stale. Run pnpm run generate:v43-packs-activity-master-detail.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ mkdirSync(path.dirname(artifactPath), { recursive: true });
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V43_PACKS_ACTIVITY_MASTER_DETAIL_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v43-promotion-readiness-report.mjs b/scripts/generate-v43-promotion-readiness-report.mjs
new file mode 100644
index 00000000..45c4712c
--- /dev/null
+++ b/scripts/generate-v43-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 {
+ V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH,
+ V43_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT,
+ buildV43PromotionReadinessReport,
+} 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-05-29T00:00:00.000Z';
+const EXPECTED_ARTIFACT_ID = 'v43-promotion-readiness-report';
+const EXPECTED_SOURCE_SAFETY_VERDICT = 'source-safe-v43-product-routes-agentic-depositing-promotion-metadata';
+
+function parseArgs(argv) {
+ return {
+ check: argv.includes('--check'),
+ };
+}
+
+function main() {
+ const args = parseArgs(process.argv.slice(2));
+ const artifact = buildV43PromotionReadinessReport({
+ generatedAt: GENERATED_AT,
+ repoRoot,
+ });
+ if (
+ artifact.artifactId !== EXPECTED_ARTIFACT_ID ||
+ artifact.sourceSafetyVerdict !== V43_PROMOTION_READINESS_SOURCE_SAFETY_VERDICT ||
+ artifact.sourceSafetyVerdict !== EXPECTED_SOURCE_SAFETY_VERDICT
+ ) {
+ throw new Error('Unexpected V43 promotion readiness artifact identity.');
+ }
+ const outputPath = path.join(repoRoot, V43_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(
+ `${V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH} is stale. Run pnpm run generate:v43-promotion-readiness.\n`,
+ );
+ process.exitCode = 1;
+ return;
+ }
+ if (!artifact.passed) {
+ process.stderr.write(`V43 promotion readiness artifact failed:\n${artifact.failures.map((failure) => `- ${failure}`).join('\n')}\n`);
+ process.exitCode = 1;
+ return;
+ }
+ process.stdout.write(
+ `V43 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 ${V43_PROMOTION_READINESS_REPORT_ARTIFACT_PATH} artifacts=${artifact.coverage.gateArtifactCount} root=${artifact.artifactRoot}\n`,
+ );
+}
+
+main();
diff --git a/scripts/generate-v43-read-route-five-step-ux.mjs b/scripts/generate-v43-read-route-five-step-ux.mjs
new file mode 100644
index 00000000..b119d4f9
--- /dev/null
+++ b/scripts/generate-v43-read-route-five-step-ux.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 {
+ V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH,
+ buildV43ReadRouteFiveStepUx,
+} from '../packages/protocol/src/canonical/v43-read-route-five-step-ux.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 = buildV43ReadRouteFiveStepUx({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH);
+
+if (checkOnly) {
+ if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) {
+ process.stderr.write(
+ `${V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH} is stale. Run pnpm run generate:v43-read-route-five-step-ux.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ mkdirSync(path.dirname(artifactPath), { recursive: true });
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V43_READ_ROUTE_FIVE_STEP_UX_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v43-route-ux-product-excellence.mjs b/scripts/generate-v43-route-ux-product-excellence.mjs
new file mode 100644
index 00000000..d8c0ce1a
--- /dev/null
+++ b/scripts/generate-v43-route-ux-product-excellence.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 {
+ V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH,
+ buildV43RouteUxProductExcellence,
+} from '../packages/protocol/src/canonical/v43-route-ux-product-excellence.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const repoRoot = path.resolve(__dirname, '..');
+const check = process.argv.includes('--check');
+const artifact = buildV43RouteUxProductExcellence({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH);
+
+if (check) {
+ if (!existsSync(artifactPath) || readFileSync(artifactPath, 'utf8') !== serialized) {
+ process.stderr.write(
+ `${V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH} is stale. Run pnpm run generate:v43-route-ux-product-excellence.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ mkdirSync(path.dirname(artifactPath), { recursive: true });
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V43_ROUTE_UX_PRODUCT_EXCELLENCE_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/generate-v43-route-vocabulary-inventory.mjs b/scripts/generate-v43-route-vocabulary-inventory.mjs
new file mode 100644
index 00000000..468d02c8
--- /dev/null
+++ b/scripts/generate-v43-route-vocabulary-inventory.mjs
@@ -0,0 +1,31 @@
+#!/usr/bin/env node
+
+import { readFileSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+import {
+ V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH,
+ buildV43RouteVocabularyInventory,
+} from '../packages/protocol/src/canonical/v43-route-vocabulary-inventory.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const repoRoot = path.resolve(__dirname, '..');
+
+const check = process.argv.includes('--check');
+const artifact = buildV43RouteVocabularyInventory({ repoRoot });
+const serialized = `${JSON.stringify(artifact, null, 2)}\n`;
+const artifactPath = path.join(repoRoot, V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH);
+
+if (check) {
+ const current = readFileSync(artifactPath, 'utf8');
+ if (current !== serialized) {
+ process.stderr.write(
+ `${V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH} is stale. Run pnpm run generate:v43-route-vocabulary-inventory.\n`,
+ );
+ process.exitCode = 1;
+ }
+} else {
+ writeFileSync(artifactPath, serialized);
+ process.stdout.write(`wrote ${V43_ROUTE_VOCABULARY_INVENTORY_ARTIFACT_PATH}\n`);
+}
diff --git a/scripts/prepare-bitcode-spec-family-promotion.mjs b/scripts/prepare-bitcode-spec-family-promotion.mjs
index 2593a6b9..6b24bb41 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, and V41.'
+ 'Currently implemented for V21, V22, V23, V24, V25, V28, V29, V30, V31, V32, V33, V34, V35, V36, V37, V38, V39, V40, V41, V42, and V43.'
].join('\n')
);
}
@@ -557,8 +557,66 @@ function rewritePromotionStatus(version, commit, content, kind) {
return kind === 'parity' ? rewritePromotedParityJudgments(rewritten, version) : rewritten;
}
+ if (version === 'V42') {
+ const sharedInventory = 'active canonical `.bitcode/v42-spec-family-report.json`, `.bitcode/v42-canonical-input-report.json`, `.bitcode/v42-canon-posture-drift-report.json`, `.bitcode/v42-depositing-shortest-path.json`, `.bitcode/v42-reading-shortest-path-state-machine.json`, `.bitcode/v42-readneed-review-resynthesis-product-closure.json`, `.bitcode/v42-readfitsfinding-preview-quote.json`, `.bitcode/v42-settlement-rights-delivery.json`, `.bitcode/v42-ai-reading-demonstration.json`, `.bitcode/v42-local-staging-mvp-rehearsal.json`, `.bitcode/v42-promotion-readiness-report.json`, V42 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V42_PROVEN.md` as the generated proof appendix for V42 promotion';
+ const scopeByKind = {
+ spec: 'V42 canonical system specification for reliable MVP experience across shortest-path Depositing, shortest-path Reading, reviewed Need synthesis, Finding Fits preview and quote, settlement-gated rights delivery, depositor compensation visibility, AI-reading demonstration, local/staging-testnet rehearsal, and promotion readiness surfaces',
+ delta: 'V42 canonical delta for reliable MVP experience over promoted V41 prompt-program excellence canon',
+ notes: 'V42 canonical notes for reliable MVP experience over promoted V41 prompt-program excellence canon',
+ parity: 'V42 canonical parity ledger for reliable MVP experience over promoted V41 prompt-program excellence canon'
+ };
+ const stateByKind = {
+ spec: 'canonical promotion complete; V42 is the active reliable MVP experience canon and the V42 hand-authored plus generated canon are aligned',
+ delta: 'canonical promotion complete; this delta records the promoted V41-to-V42 reliable MVP experience closure set',
+ notes: 'canonical promotion complete; V42 notes record accepted Depositing, Reading, Need review, Finding Fits, settlement, delivery, AI-reading demonstration, local/staging rehearsal, and promotion-readiness evidence',
+ parity: 'canonical promotion complete; V42 parity truth, generated reliable MVP artifacts, gate closure, and promotion automation are aligned'
+ };
+ const rewritten = rewriteStatusValues(content, {
+ Scope: scopeByKind[kind],
+ ...(kind !== 'delta'
+ ? { 'Last fully realized canonical target preserved in source': '`V42`' }
+ : {}),
+ 'Current canonical/latest target': '`V42`',
+ 'Canonical proof-source commit': `\`${commit}\``,
+ 'Generated structured artifact inventory': sharedInventory,
+ 'Source parity state':
+ 'V42 source-side Depositing shortest path, Reading shortest path state machine, ReadNeed review/resynthesis closure, ReadFitsFinding preview and quote closure, settlement rights delivery, AI-reading demonstration, local/staging-testnet rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V42 file family',
+ 'V42 state': stateByKind[kind]
+ });
+ return kind === 'parity' ? rewritePromotedParityJudgments(rewritten, version) : rewritten;
+ }
+
+ if (version === 'V43') {
+ const sharedInventory = 'active canonical `.bitcode/v43-spec-family-report.json`, `.bitcode/v43-canonical-input-report.json`, `.bitcode/v43-canon-posture-drift-report.json`, `.bitcode/v43-route-vocabulary-inventory.json`, `.bitcode/v43-packs-activity-master-detail.json`, `.bitcode/v43-read-route-five-step-ux.json`, `.bitcode/v43-deposit-route-options.json`, `.bitcode/v43-deposit-policy-compensation.json`, `.bitcode/v43-deposit-option-admission.json`, `.bitcode/v43-route-ux-product-excellence.json`, `.bitcode/v43-cross-route-rehearsal-telemetry-repair.json`, `.bitcode/v43-promotion-readiness-report.json`, V43 gate-quality and promotion workflow evidence, and `BITCODE_SPEC_V43_PROVEN.md` as the generated proof appendix for V43 promotion';
+ const scopeByKind = {
+ spec: 'V43 canonical system specification for product routes and agentic depositing across `/packs`, `/read`, `/deposit`, PackActivity search/detail, Read five-step UX, deposit AssetPack option synthesis, deposit policy/compensation, option admission, route UX product excellence, cross-route rehearsal, and promotion readiness surfaces',
+ delta: 'V43 canonical delta for product routes and agentic depositing over promoted V42 reliable MVP canon',
+ notes: 'V43 canonical notes for product routes and agentic depositing over promoted V42 reliable MVP canon',
+ parity: 'V43 canonical parity ledger for product routes and agentic depositing over promoted V42 reliable MVP canon'
+ };
+ const stateByKind = {
+ spec: 'canonical promotion complete; V43 is the active product-route and agentic-depositing canon and the V43 hand-authored plus generated canon are aligned',
+ delta: 'canonical promotion complete; this delta records the promoted V42-to-V43 product-route and agentic-depositing closure set',
+ notes: 'canonical promotion complete; V43 notes record accepted route vocabulary, PackActivity, Reading, Depositing, policy, admission, UX, rehearsal, and promotion-readiness evidence',
+ parity: 'canonical promotion complete; V43 parity truth, generated product-route artifacts, gate closure, and promotion automation are aligned'
+ };
+ const rewritten = rewriteStatusValues(content, {
+ Scope: scopeByKind[kind],
+ ...(kind !== 'delta'
+ ? { 'Last fully realized canonical target preserved in source': '`V43`' }
+ : {}),
+ 'Current canonical/latest target': '`V43`',
+ 'Canonical proof-source commit': `\`${commit}\``,
+ 'Generated structured artifact inventory': sharedInventory,
+ 'Source parity state':
+ 'V43 source-side route vocabulary, Packs master-detail, Read five-step UX, deposit option synthesis, deposit policy/compensation, deposit option admission, route UX, cross-route rehearsal, workflow, and promotion surfaces are canonicalized in the promoted V43 file family',
+ 'V43 state': stateByKind[kind]
+ });
+ return kind === 'parity' ? rewritePromotedParityJudgments(rewritten, version) : rewritten;
+ }
+
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, and V41. 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, and V43. 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 2cec63e3..0038c429 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.',
+ ' --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.',
' --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.',
@@ -559,6 +559,41 @@ function buildCommandPlan(version, commit) {
const v41PromotedCanonicalInputCheckCommand = ['node', ['scripts/check-bitcode-canonical-inputs.mjs', '--current-target', 'V41']];
const v41PromotedSpecCheckCommand = ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V41', '--mode', 'promoted', '--current-target', 'V41']];
const v41PromotedCanonPostureDriftCommand = ['node', ['scripts/check-bitcode-canon-posture-drift.mjs', '--active-canon', 'V41', '--draft-target', 'V42']];
+ const v42DraftSpecCheckCommand = ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V42', '--mode', 'draft', '--current-target', 'V41']];
+ const v42CanonicalInputCheckCommand = ['node', ['scripts/check-bitcode-canonical-inputs.mjs', '--current-target', 'V41']];
+ const v42DraftCanonPostureDriftCommand = ['node', ['scripts/check-bitcode-canon-posture-drift.mjs', '--active-canon', 'V41', '--draft-target', 'V42']];
+ const v42Gate1Command = ['node', ['scripts/check-v42-gate1-mvp-experience-roadmap-opening.mjs', '--skip-branch-check']];
+ const v42Gate2Command = ['node', ['scripts/check-v42-gate2-depositing-shortest-path.mjs', '--skip-branch-check', '--skip-package-tests']];
+ const v42Gate3Command = ['node', ['scripts/check-v42-gate3-reading-shortest-path-state-machine.mjs', '--skip-branch-check', '--skip-uapi-tests']];
+ const v42Gate4Command = ['node', ['scripts/check-v42-gate4-readneed-review-resynthesis-product-closure.mjs', '--skip-branch-check', '--skip-package-tests', '--skip-uapi-tests']];
+ const v42Gate5Command = ['node', ['scripts/check-v42-gate5-readfitsfinding-preview-quote.mjs', '--skip-branch-check', '--skip-package-tests', '--skip-uapi-tests']];
+ const v42Gate6Command = ['node', ['scripts/check-v42-gate6-settlement-rights-delivery.mjs', '--skip-branch-check', '--skip-package-tests', '--skip-uapi-tests']];
+ const v42Gate7Command = ['node', ['scripts/check-v42-gate7-ai-reading-demonstration.mjs', '--skip-branch-check', '--skip-package-tests', '--skip-demonstration-tests']];
+ const v42Gate8Command = ['node', ['scripts/check-v42-gate8-local-staging-mvp-rehearsal.mjs', '--skip-branch-check', '--skip-package-tests', '--skip-uapi-tests']];
+ const v42Gate9Command = ['node', ['scripts/check-v42-gate9-promotion-readiness.mjs', '--promotion-mode', '--skip-branch-check', '--skip-package-tests']];
+ const v42PreparePromotionSpecFamilyCommand = ['node', ['scripts/prepare-bitcode-spec-family-promotion.mjs', '--version', 'V42', '--commit', commit]];
+ const v42PrepareRuntimePromotionCommand = ['node', ['scripts/prepare-bitcode-runtime-canon-promotion.mjs', '--version', 'V42', '--next-draft', 'V43']];
+ const v42PromotedCanonicalInputCheckCommand = ['node', ['scripts/check-bitcode-canonical-inputs.mjs', '--current-target', 'V42']];
+ const v42PromotedSpecCheckCommand = ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V42', '--mode', 'promoted', '--current-target', 'V42']];
+ const v42PromotedCanonPostureDriftCommand = ['node', ['scripts/check-bitcode-canon-posture-drift.mjs', '--active-canon', 'V42', '--draft-target', 'V43']];
+ const v43DraftSpecCheckCommand = ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V43', '--mode', 'draft', '--current-target', 'V42']];
+ const v43CanonicalInputCheckCommand = ['node', ['scripts/check-bitcode-canonical-inputs.mjs', '--current-target', 'V42']];
+ const v43DraftCanonPostureDriftCommand = ['node', ['scripts/check-bitcode-canon-posture-drift.mjs', '--active-canon', 'V42', '--draft-target', 'V43']];
+ const v43Gate1Command = ['node', ['scripts/check-v43-gate1-packs-read-deposit-roadmap.mjs', '--skip-branch-check']];
+ const v43Gate2Command = ['node', ['scripts/check-v43-gate2-route-vocabulary-inventory.mjs', '--skip-branch-check']];
+ const v43Gate3Command = ['node', ['scripts/check-v43-gate3-packs-activity-master-detail.mjs', '--skip-branch-check', '--skip-uapi-tests']];
+ const v43Gate4Command = ['node', ['scripts/check-v43-gate4-read-route-five-step-ux.mjs', '--skip-branch-check', '--skip-uapi-tests']];
+ const v43Gate5Command = ['node', ['scripts/check-v43-gate5-deposit-route-options.mjs', '--skip-branch-check', '--skip-uapi-tests', '--skip-package-tests']];
+ const v43Gate6Command = ['node', ['scripts/check-v43-gate6-deposit-policy-compensation.mjs', '--skip-branch-check', '--skip-uapi-tests', '--skip-package-tests']];
+ const v43Gate7Command = ['node', ['scripts/check-v43-gate7-deposit-option-admission.mjs', '--skip-branch-check', '--skip-uapi-tests', '--skip-package-tests']];
+ const v43Gate8Command = ['node', ['scripts/check-v43-gate8-route-ux-product-excellence.mjs', '--skip-branch-check', '--skip-uapi-tests']];
+ const v43Gate9Command = ['node', ['scripts/check-v43-gate9-cross-route-rehearsal-telemetry-repair.mjs', '--skip-branch-check', '--skip-uapi-tests', '--skip-package-tests']];
+ const v43Gate10Command = ['node', ['scripts/check-v43-gate10-promotion-readiness.mjs', '--promotion-mode', '--skip-branch-check', '--skip-package-tests']];
+ const v43PreparePromotionSpecFamilyCommand = ['node', ['scripts/prepare-bitcode-spec-family-promotion.mjs', '--version', 'V43', '--commit', commit]];
+ const v43PrepareRuntimePromotionCommand = ['node', ['scripts/prepare-bitcode-runtime-canon-promotion.mjs', '--version', 'V43', '--next-draft', 'V44']];
+ const v43PromotedCanonicalInputCheckCommand = ['node', ['scripts/check-bitcode-canonical-inputs.mjs', '--current-target', 'V43']];
+ const v43PromotedSpecCheckCommand = ['node', ['scripts/check-bitcode-spec-family.mjs', '--version', 'V43', '--mode', 'promoted', '--current-target', 'V43']];
+ const v43PromotedCanonPostureDriftCommand = ['node', ['scripts/check-bitcode-canon-posture-drift.mjs', '--active-canon', 'V43', '--draft-target', 'V44']];
const inheritedProofCommands = [
['npm', ['--prefix', 'protocol-demonstration', 'run', 'typecheck']],
['npm', ['--prefix', 'protocol-demonstration', 'run', 'test:unit']],
@@ -1219,7 +1254,76 @@ function buildCommandPlan(version, commit) {
['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, or V41.`);
+ if (version === 'V42') {
+ return [
+ v42DraftSpecCheckCommand,
+ v42CanonicalInputCheckCommand,
+ v42DraftCanonPostureDriftCommand,
+ v42Gate1Command,
+ v42Gate2Command,
+ v42Gate3Command,
+ v42Gate4Command,
+ v42Gate5Command,
+ v42Gate6Command,
+ v42Gate7Command,
+ v42Gate8Command,
+ v42Gate9Command,
+ ['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']],
+ v42PreparePromotionSpecFamilyCommand,
+ v42PrepareRuntimePromotionCommand,
+ ['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']],
+ v42PromotedCanonicalInputCheckCommand,
+ v42PromotedSpecCheckCommand,
+ v42PromotedCanonPostureDriftCommand,
+ ['git', ['diff', '--check']]
+ ];
+ }
+ if (version === 'V43') {
+ return [
+ v43DraftSpecCheckCommand,
+ v43CanonicalInputCheckCommand,
+ v43DraftCanonPostureDriftCommand,
+ v43Gate1Command,
+ v43Gate2Command,
+ v43Gate3Command,
+ v43Gate4Command,
+ v43Gate5Command,
+ v43Gate6Command,
+ v43Gate7Command,
+ v43Gate8Command,
+ v43Gate9Command,
+ v43Gate10Command,
+ ['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']],
+ v43PreparePromotionSpecFamilyCommand,
+ v43PrepareRuntimePromotionCommand,
+ ['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']],
+ v43PromotedCanonicalInputCheckCommand,
+ v43PromotedSpecCheckCommand,
+ v43PromotedCanonPostureDriftCommand,
+ ['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, or V43.`);
}
/**
@@ -2262,6 +2366,109 @@ async function buildDerivedV41CommitMessageBody(commit) {
].join('\n');
}
+/**
+ * @param {string} commit
+ * @returns {Promise}
+ */
+async function buildDerivedV42CommitMessageBody(commit) {
+ const { spec, delta, parity } = await readSpecFamily('V42');
+ const scope = extractStatusValue(spec, 'Scope') || 'V42 canonical system specification for reliable MVP experience';
+ const focus = deriveScopeFocus(scope) || 'reliable MVP experience over promoted V41 prompt-program canon';
+ const decisionSection = extractSection(delta, 'Accepted V42 decisions');
+ const acceptedDecisions = extractOrderedItems(decisionSection).map(stripMarkdown);
+ const parityRows = [
+ ...parseMarkdownTable(extractSection(parity, 'V42 implementation matrix')),
+ ...parseMarkdownTable(extractSection(parity, 'V42 implementation checklist'))
+ ];
+
+ /** @type {string[]} */
+ const bullets = [];
+ for (const decision of acceptedDecisions.slice(0, 4)) {
+ bullets.push(trimTrailingPeriod(decision));
+ }
+
+ const prioritizedAreas = [
+ 'Depositing shortest path',
+ 'Reading shortest path',
+ 'ReadNeed review',
+ 'Finding Fits preview',
+ 'Settlement rights delivery',
+ 'AI-reading demonstration',
+ 'Local/staging rehearsal',
+ 'Promotion readiness'
+ ];
+ for (const area of prioritizedAreas) {
+ const row = findParityRow(parityRows, area);
+ if (!row) continue;
+ const closureSignal = trimTrailingPeriod(
+ stripMarkdown(row['Required V42 result'] || row['Closure requirement'] || row['Source evidence'] || '')
+ );
+ if (!closureSignal) continue;
+ bullets.push(`${stripMarkdown(area)}: ${closureSignal}`);
+ }
+
+ return [
+ `Promotes V42 as ${focus} for Bitcode.`,
+ '',
+ `Proof-source commit: ${commit}`,
+ '',
+ 'The promotion carries:',
+ ...bullets.slice(0, 14).map((bullet) => `- ${bullet}`)
+ ].join('\n');
+}
+
+/**
+ * @param {string} commit
+ * @returns {Promise}
+ */
+async function buildDerivedV43CommitMessageBody(commit) {
+ const { spec, delta, parity } = await readSpecFamily('V43');
+ const scope = extractStatusValue(spec, 'Scope') || 'V43 canonical system specification for product routes and agentic depositing';
+ const focus = deriveScopeFocus(scope) || 'product routes and agentic depositing over promoted V42 reliable MVP canon';
+ const decisionSection = extractSection(delta, 'Accepted V43 decisions');
+ const acceptedDecisions = extractOrderedItems(decisionSection).map(stripMarkdown);
+ const parityRows = [
+ ...parseMarkdownTable(extractSection(parity, 'V43 implementation matrix')),
+ ...parseMarkdownTable(extractSection(parity, 'V43 implementation checklist'))
+ ];
+
+ /** @type {string[]} */
+ const bullets = [];
+ for (const decision of acceptedDecisions.slice(0, 4)) {
+ bullets.push(trimTrailingPeriod(decision));
+ }
+
+ const prioritizedAreas = [
+ 'Route vocabulary',
+ 'Packs master-detail',
+ 'Read route',
+ 'Deposit route',
+ 'Criticality/ROI policy',
+ 'Deposit option admission',
+ 'UX/UI product excellence',
+ 'Cross-route rehearsal',
+ 'Promotion readiness'
+ ];
+ for (const area of prioritizedAreas) {
+ const row = findParityRow(parityRows, area);
+ if (!row) continue;
+ const closureSignal = trimTrailingPeriod(
+ stripMarkdown(row['Required V43 result'] || row['Closure requirement'] || row['Source evidence'] || '')
+ );
+ if (!closureSignal) continue;
+ bullets.push(`${stripMarkdown(area)}: ${closureSignal}`);
+ }
+
+ return [
+ `Promotes V43 as ${focus} for Bitcode.`,
+ '',
+ `Proof-source commit: ${commit}`,
+ '',
+ 'The promotion carries:',
+ ...bullets.slice(0, 14).map((bullet) => `- ${bullet}`)
+ ].join('\n');
+}
+
/**
* @param {string} version
* @param {string} commit
@@ -2358,7 +2565,13 @@ async function buildCommitMessageBody(version, commit) {
if (version === 'V41') {
return buildDerivedV41CommitMessageBody(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, or V41.`);
+ if (version === 'V42') {
+ return buildDerivedV42CommitMessageBody(commit);
+ }
+ if (version === 'V43') {
+ return buildDerivedV43CommitMessageBody(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, or V43.`);
}
async function main() {
@@ -2369,8 +2582,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'].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, or V41. 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'].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, or V43. Received ${version || 'none'}.`);
}
const commit = args.commit || '';
if (!commit) {
diff --git a/scripts/rehearse-v42-local-staging-mvp.mjs b/scripts/rehearse-v42-local-staging-mvp.mjs
new file mode 100644
index 00000000..2516246b
--- /dev/null
+++ b/scripts/rehearse-v42-local-staging-mvp.mjs
@@ -0,0 +1,325 @@
+#!/usr/bin/env node
+
+import { spawnSync } from 'node:child_process';
+import { createHash } from 'node:crypto';
+import { mkdirSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+
+export const V42_REHEARSAL_LANES = ['local', 'staging-testnet'];
+
+const DEFAULT_RECEIPT_DIR = '.bitcode/pipeline-harness-runs/v42-mvp-rehearsal-receipts';
+const STAGING_PROJECT_REF = 'tkpyosihuouusyaxtbau';
+const STAGING_REST_HOST = 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/';
+
+const SOURCE_SAFETY = Object.freeze({
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawInterpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ privateSettlementPayloadVisible: false,
+ liveRehearsalLogPayloadSerialized: false,
+ valueBearingMainnetAdmitted: false,
+ secretValueSerialized: false,
+});
+
+const ENVIRONMENT_FAMILIES = Object.freeze({
+ sandboxAuth: {
+ familyId: 'sandbox-auth',
+ required: true,
+ acceptedKeyNames: ['VERCEL_OIDC_TOKEN', 'VERCEL_TOKEN'],
+ posture: 'vercel-oidc-preferred-access-token-fallback',
+ },
+ sandboxOptIn: {
+ familyId: 'sandbox-live-opt-in',
+ required: true,
+ acceptedKeyNames: ['BITCODE_RUN_VERCEL_SANDBOX_HARNESS'],
+ requiredLiteralValue: '1',
+ posture: 'explicit-live-sandbox-opt-in',
+ },
+ harnessApi: {
+ familyId: 'pipeline-harness-api-enabled',
+ required: true,
+ acceptedKeyNames: ['BITCODE_ENABLE_PIPELINE_HARNESS_API'],
+ requiredLiteralValue: '1',
+ posture: 'local-and-staging-harness-api-enabled',
+ },
+ llmProvider: {
+ familyId: 'llm-provider-key',
+ required: true,
+ acceptedKeyNames: ['OPENAI_API_KEY'],
+ posture: 'real-inference-provider-credential',
+ },
+ supabaseUrl: {
+ familyId: 'supabase-rest-url',
+ required: true,
+ acceptedKeyNames: ['SUPABASE_URL', 'NEXT_PUBLIC_SUPABASE_URL'],
+ requiredHost: `${STAGING_PROJECT_REF}.supabase.co`,
+ posture: 'staging-testnet-rest-host-bound',
+ },
+ supabasePublic: {
+ familyId: 'supabase-public-key',
+ required: true,
+ acceptedKeyNames: [
+ 'SUPABASE_ANON_KEY',
+ 'SUPABASE_PUBLISHABLE_KEY',
+ 'NEXT_PUBLIC_SUPABASE_ANON_KEY',
+ 'NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY',
+ ],
+ posture: 'staging-testnet-public-readback-key',
+ },
+ supabaseAdmin: {
+ familyId: 'supabase-admin-key',
+ required: true,
+ acceptedKeyNames: ['SUPABASE_SECRET_KEY', 'SUPABASE_ADMIN_KEY', 'SUPABASE_SERVICE_ROLE_KEY'],
+ posture: 'staging-testnet-admin-readback-key',
+ },
+ databaseStreaming: {
+ familyId: 'pipeline-database-streaming',
+ required: true,
+ acceptedKeyNames: ['BITCODE_PIPELINE_STREAM_TO_DATABASE'],
+ requiredLiteralValue: '1',
+ posture: 'pipeline-events-persist-to-staging-database',
+ },
+ realInference: {
+ familyId: 'assetpack-real-inference',
+ required: true,
+ acceptedKeyNames: ['BITCODE_ASSET_PACK_REAL_INFERENCE'],
+ requiredLiteralValue: '1',
+ posture: 'staging-testnet-real-inference-required',
+ },
+});
+
+const LANE_REQUIREMENTS = Object.freeze({
+ local: [
+ ENVIRONMENT_FAMILIES.sandboxAuth,
+ ENVIRONMENT_FAMILIES.sandboxOptIn,
+ ENVIRONMENT_FAMILIES.harnessApi,
+ ],
+ 'staging-testnet': [
+ ENVIRONMENT_FAMILIES.sandboxAuth,
+ ENVIRONMENT_FAMILIES.sandboxOptIn,
+ ENVIRONMENT_FAMILIES.harnessApi,
+ ENVIRONMENT_FAMILIES.llmProvider,
+ ENVIRONMENT_FAMILIES.supabaseUrl,
+ ENVIRONMENT_FAMILIES.supabasePublic,
+ ENVIRONMENT_FAMILIES.supabaseAdmin,
+ ENVIRONMENT_FAMILIES.databaseStreaming,
+ ENVIRONMENT_FAMILIES.realInference,
+ ],
+});
+
+function stableStringify(value) {
+ if (typeof value === 'undefined') return 'null';
+ if (value === null || typeof value !== 'object') return JSON.stringify(value);
+ if (Array.isArray(value)) return `[${value.map((entry) => stableStringify(entry)).join(',')}]`;
+ return `{${Object.keys(value)
+ .sort()
+ .map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`)
+ .join(',')}}`;
+}
+
+function rootOf(value) {
+ return `sha256:${createHash('sha256').update(stableStringify(value)).digest('hex')}`;
+}
+
+function parseArgs(argv) {
+ const args = {
+ lane: 'local',
+ dryRun: true,
+ execute: false,
+ json: false,
+ writeReceipt: false,
+ includeEnvKeyNames: false,
+ receiptDir: DEFAULT_RECEIPT_DIR,
+ };
+
+ for (let index = 0; index < argv.length; index += 1) {
+ const arg = argv[index];
+ if (arg === '--lane') args.lane = argv[++index];
+ else if (arg === '--dry-run') args.dryRun = true;
+ else if (arg === '--execute') {
+ args.execute = true;
+ args.dryRun = false;
+ } else if (arg === '--json') args.json = true;
+ else if (arg === '--write-receipt') args.writeReceipt = true;
+ else if (arg === '--include-env-key-names') args.includeEnvKeyNames = true;
+ else if (arg === '--receipt-dir') args.receiptDir = argv[++index];
+ else if (arg === '--help' || arg === '-h') args.help = true;
+ else throw new Error(`Unknown argument ${arg}`);
+ }
+
+ if (!V42_REHEARSAL_LANES.includes(args.lane)) {
+ throw new Error(`Unsupported V42 rehearsal lane ${args.lane}. Expected one of ${V42_REHEARSAL_LANES.join(', ')}.`);
+ }
+
+ return args;
+}
+
+function printHelp() {
+ process.stdout.write(
+ [
+ 'Usage: node scripts/rehearse-v42-local-staging-mvp.mjs --lane [--dry-run|--execute] [--json] [--write-receipt]',
+ '',
+ 'Builds a source-safe operator receipt for the V42 local/staging-testnet full MVP rehearsal lane.',
+ 'Live execution requires BITCODE_V42_REHEARSAL_EXECUTE=1 and delegates to the Vercel Sandbox AssetPack harness.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function hostFromUrl(value) {
+ if (!value) return null;
+ try {
+ return new URL(value).hostname;
+ } catch {
+ return null;
+ }
+}
+
+function readEnvironmentFamily(family, env, includeEnvKeyNames) {
+ const observed = family.acceptedKeyNames
+ .map((keyName) => ({
+ keyName,
+ present: typeof env[keyName] === 'string' && env[keyName].length > 0,
+ literalMatches: family.requiredLiteralValue ? env[keyName] === family.requiredLiteralValue : true,
+ hostMatches: family.requiredHost ? hostFromUrl(env[keyName]) === family.requiredHost : true,
+ }))
+ .filter((entry) => entry.present);
+
+ const satisfied = observed.some((entry) => entry.literalMatches && entry.hostMatches);
+ return {
+ familyId: family.familyId,
+ required: family.required,
+ posture: family.posture,
+ present: observed.length > 0,
+ satisfied,
+ ...(family.requiredHost ? { requiredHost: family.requiredHost } : {}),
+ ...(family.requiredLiteralValue ? { requiredLiteralValuePresent: satisfied } : {}),
+ ...(includeEnvKeyNames
+ ? { acceptedKeyNames: family.acceptedKeyNames, observedKeyNames: observed.map((entry) => entry.keyName) }
+ : {}),
+ secretValueSerialized: false,
+ };
+}
+
+function buildReceipt(args, env = process.env) {
+ const families = LANE_REQUIREMENTS[args.lane].map((family) =>
+ readEnvironmentFamily(family, env, args.includeEnvKeyNames),
+ );
+ const missingEnvironmentFamilies = families
+ .filter((family) => family.required && !family.satisfied)
+ .map((family) => family.familyId);
+ const command = {
+ commandId: 'pipeline-hosts:qa-asset-pack-sandbox',
+ cwd: 'packages/pipeline-hosts',
+ argv: ['pnpm', '--filter', '@bitcode/pipeline-hosts', 'run', 'qa:asset-pack:sandbox'],
+ dryRun: args.dryRun,
+ liveExecutionOptInRequired: true,
+ liveExecutionOptInSatisfied: env.BITCODE_V42_REHEARSAL_EXECUTE === '1',
+ };
+ const withoutRoot = {
+ schema: 'bitcode.v42.localStagingMvpRehearsal.operatorReceipt',
+ version: 'V42',
+ currentTarget: 'V41',
+ laneId: args.lane,
+ laneClass: args.lane === 'staging-testnet' ? 'staging-testnet-real-inference-full-mvp' : 'local-full-mvp-rehearsal',
+ stagingProjectRef: args.lane === 'staging-testnet' ? STAGING_PROJECT_REF : null,
+ stagingRestHost: args.lane === 'staging-testnet' ? STAGING_REST_HOST : null,
+ generatedAt: 'operator-runtime',
+ ready: missingEnvironmentFamilies.length === 0,
+ dryRun: args.dryRun,
+ stages: [
+ 'deposit-source',
+ 'request-read',
+ 'review-synthesized-need',
+ 'request-finding-fits',
+ 'review-assetpack-preview',
+ 'buy-assetpack-settle',
+ 'receive-repository-delivery',
+ ],
+ command,
+ environmentFamilies: families,
+ missingEnvironmentFamilies,
+ receiptArtifactRoot: DEFAULT_RECEIPT_DIR,
+ sourceSafety: SOURCE_SAFETY,
+ };
+
+ return {
+ ...withoutRoot,
+ receiptRoot: rootOf(withoutRoot),
+ };
+}
+
+function writeReceipt(receipt, receiptDir) {
+ mkdirSync(receiptDir, { recursive: true });
+ const filename = `${receipt.version.toLowerCase()}-${receipt.laneId}-operator-receipt.json`;
+ const receiptPath = path.resolve(receiptDir, filename);
+ writeFileSync(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`);
+ return receiptPath;
+}
+
+function runLiveHarness(receipt) {
+ if (!receipt.ready) {
+ throw new Error(`Cannot execute V42 rehearsal; missing families: ${receipt.missingEnvironmentFamilies.join(', ')}`);
+ }
+ if (!receipt.command.liveExecutionOptInSatisfied) {
+ throw new Error('Set BITCODE_V42_REHEARSAL_EXECUTE=1 before live rehearsal execution.');
+ }
+
+ return spawnSync('pnpm', ['--filter', '@bitcode/pipeline-hosts', 'run', 'qa:asset-pack:sandbox'], {
+ stdio: 'inherit',
+ env: {
+ ...process.env,
+ BITCODE_SANDBOX_MODE: process.env.BITCODE_SANDBOX_MODE || 'asset_pack_pipeline',
+ BITCODE_PIPELINE_STREAM_TO_DATABASE:
+ receipt.laneId === 'staging-testnet'
+ ? '1'
+ : process.env.BITCODE_PIPELINE_STREAM_TO_DATABASE || '0',
+ BITCODE_ENABLE_PIPELINE_HARNESS_API: process.env.BITCODE_ENABLE_PIPELINE_HARNESS_API || '1',
+ },
+ });
+}
+
+function main() {
+ const args = parseArgs(process.argv.slice(2));
+ if (args.help) {
+ printHelp();
+ return;
+ }
+
+ const receipt = buildReceipt(args);
+ let receiptPath = null;
+ if (args.writeReceipt) {
+ receiptPath = writeReceipt(receipt, args.receiptDir);
+ }
+
+ if (args.execute) {
+ const result = runLiveHarness(receipt);
+ if (result.status !== 0) process.exit(result.status || 1);
+ }
+
+ if (args.json) {
+ process.stdout.write(`${JSON.stringify(receipt, null, 2)}\n`);
+ return;
+ }
+
+ process.stdout.write(
+ [
+ `V42 ${receipt.laneId} full MVP rehearsal receipt ${receipt.receiptRoot}`,
+ `ready=${receipt.ready}`,
+ receiptPath ? `receipt=${receiptPath}` : null,
+ receipt.missingEnvironmentFamilies.length
+ ? `missing=${receipt.missingEnvironmentFamilies.join(',')}`
+ : 'missing=none',
+ ]
+ .filter(Boolean)
+ .join(' '),
+ );
+ process.stdout.write('\n');
+}
+
+main();
diff --git a/scripts/rehearse-v43-cross-route-product-flow.mjs b/scripts/rehearse-v43-cross-route-product-flow.mjs
new file mode 100644
index 00000000..d52c9521
--- /dev/null
+++ b/scripts/rehearse-v43-cross-route-product-flow.mjs
@@ -0,0 +1,347 @@
+#!/usr/bin/env node
+
+import { spawnSync } from 'node:child_process';
+import { createHash } from 'node:crypto';
+import { mkdirSync, writeFileSync } from 'node:fs';
+import path from 'node:path';
+
+export const V43_CROSS_ROUTE_REHEARSAL_LANES = ['local', 'staging-testnet'];
+
+const DEFAULT_RECEIPT_DIR = '.bitcode/pipeline-harness-runs/v43-cross-route-rehearsal-receipts';
+const STAGING_PROJECT_REF = 'tkpyosihuouusyaxtbau';
+const STAGING_REST_HOST = 'https://tkpyosihuouusyaxtbau.supabase.co/rest/v1/';
+
+const SOURCE_SAFETY = Object.freeze({
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ rawProtectedPromptVisible: false,
+ rawInterpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ walletPrivateMaterialVisible: false,
+ privateSettlementPayloadVisible: false,
+ liveRehearsalLogPayloadSerialized: false,
+ valueBearingMainnetAdmitted: false,
+ secretValueSerialized: false,
+});
+
+const ENVIRONMENT_FAMILIES = Object.freeze({
+ sandboxAuth: {
+ familyId: 'sandbox-auth',
+ required: true,
+ acceptedKeyNames: ['VERCEL_OIDC_TOKEN', 'VERCEL_TOKEN'],
+ posture: 'vercel-oidc-preferred-access-token-fallback',
+ },
+ sandboxOptIn: {
+ familyId: 'sandbox-live-opt-in',
+ required: true,
+ acceptedKeyNames: ['BITCODE_RUN_VERCEL_SANDBOX_HARNESS'],
+ requiredLiteralValue: '1',
+ posture: 'explicit-live-sandbox-opt-in',
+ },
+ harnessApi: {
+ familyId: 'pipeline-harness-api-enabled',
+ required: true,
+ acceptedKeyNames: ['BITCODE_ENABLE_PIPELINE_HARNESS_API'],
+ requiredLiteralValue: '1',
+ posture: 'local-and-staging-harness-api-enabled',
+ },
+ llmProvider: {
+ familyId: 'llm-provider-key',
+ required: true,
+ acceptedKeyNames: ['OPENAI_API_KEY'],
+ posture: 'real-inference-provider-credential',
+ },
+ supabaseUrl: {
+ familyId: 'supabase-rest-url',
+ required: true,
+ acceptedKeyNames: ['SUPABASE_URL', 'NEXT_PUBLIC_SUPABASE_URL'],
+ requiredHost: `${STAGING_PROJECT_REF}.supabase.co`,
+ posture: 'staging-testnet-rest-host-bound',
+ },
+ supabasePublic: {
+ familyId: 'supabase-public-key',
+ required: true,
+ acceptedKeyNames: [
+ 'SUPABASE_ANON_KEY',
+ 'SUPABASE_PUBLISHABLE_KEY',
+ 'NEXT_PUBLIC_SUPABASE_ANON_KEY',
+ 'NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY',
+ ],
+ posture: 'staging-testnet-public-readback-key',
+ },
+ supabaseAdmin: {
+ familyId: 'supabase-admin-key',
+ required: true,
+ acceptedKeyNames: ['SUPABASE_SECRET_KEY', 'SUPABASE_ADMIN_KEY', 'SUPABASE_SERVICE_ROLE_KEY'],
+ posture: 'staging-testnet-admin-readback-key',
+ },
+ databaseStreaming: {
+ familyId: 'pipeline-database-streaming',
+ required: true,
+ acceptedKeyNames: ['BITCODE_PIPELINE_STREAM_TO_DATABASE'],
+ requiredLiteralValue: '1',
+ posture: 'pipeline-events-persist-to-staging-database',
+ },
+ realInference: {
+ familyId: 'assetpack-real-inference',
+ required: true,
+ acceptedKeyNames: ['BITCODE_ASSET_PACK_REAL_INFERENCE'],
+ requiredLiteralValue: '1',
+ posture: 'staging-testnet-real-inference-required',
+ },
+});
+
+const LANE_REQUIREMENTS = Object.freeze({
+ local: [
+ ENVIRONMENT_FAMILIES.sandboxAuth,
+ ENVIRONMENT_FAMILIES.sandboxOptIn,
+ ENVIRONMENT_FAMILIES.harnessApi,
+ ],
+ 'staging-testnet': [
+ ENVIRONMENT_FAMILIES.sandboxAuth,
+ ENVIRONMENT_FAMILIES.sandboxOptIn,
+ ENVIRONMENT_FAMILIES.harnessApi,
+ ENVIRONMENT_FAMILIES.llmProvider,
+ ENVIRONMENT_FAMILIES.supabaseUrl,
+ ENVIRONMENT_FAMILIES.supabasePublic,
+ ENVIRONMENT_FAMILIES.supabaseAdmin,
+ ENVIRONMENT_FAMILIES.databaseStreaming,
+ ENVIRONMENT_FAMILIES.realInference,
+ ],
+});
+
+const STAGES = Object.freeze([
+ 'deposit:synthesize-options',
+ 'deposit:review-admit',
+ 'read:request',
+ 'read:review-need',
+ 'read:request-finding-fits',
+ 'read:preview-assetpack',
+ 'settlement:pay-btc-transfer-rights',
+ 'delivery:repository-pull-request',
+ 'packs:inspect-activity-repair',
+]);
+
+function stableStringify(value) {
+ if (typeof value === 'undefined') return 'null';
+ if (value === null || typeof value !== 'object') return JSON.stringify(value);
+ if (Array.isArray(value)) return `[${value.map((entry) => stableStringify(entry)).join(',')}]`;
+ return `{${Object.keys(value)
+ .sort()
+ .map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`)
+ .join(',')}}`;
+}
+
+function rootOf(value) {
+ return `sha256:${createHash('sha256').update(stableStringify(value)).digest('hex')}`;
+}
+
+function parseArgs(argv) {
+ const args = {
+ lane: 'local',
+ dryRun: true,
+ execute: false,
+ json: false,
+ writeReceipt: false,
+ includeEnvKeyNames: false,
+ receiptDir: DEFAULT_RECEIPT_DIR,
+ };
+
+ for (let index = 0; index < argv.length; index += 1) {
+ const arg = argv[index];
+ if (arg === '--lane') args.lane = argv[++index];
+ else if (arg === '--dry-run') args.dryRun = true;
+ else if (arg === '--execute') {
+ args.execute = true;
+ args.dryRun = false;
+ } else if (arg === '--json') args.json = true;
+ else if (arg === '--write-receipt') args.writeReceipt = true;
+ else if (arg === '--include-env-key-names') args.includeEnvKeyNames = true;
+ else if (arg === '--receipt-dir') args.receiptDir = argv[++index];
+ else if (arg === '--help' || arg === '-h') args.help = true;
+ else throw new Error(`Unknown argument ${arg}`);
+ }
+
+ if (!V43_CROSS_ROUTE_REHEARSAL_LANES.includes(args.lane)) {
+ throw new Error(
+ `Unsupported V43 cross-route rehearsal lane ${args.lane}. Expected one of ${V43_CROSS_ROUTE_REHEARSAL_LANES.join(', ')}.`,
+ );
+ }
+
+ return args;
+}
+
+function printHelp() {
+ process.stdout.write(
+ [
+ 'Usage: node scripts/rehearse-v43-cross-route-product-flow.mjs --lane [--dry-run|--execute] [--json] [--write-receipt]',
+ '',
+ 'Builds a source-safe operator receipt for the V43 /deposit -> /read -> /packs product rehearsal lane.',
+ 'Live execution requires BITCODE_V43_CROSS_ROUTE_REHEARSAL_EXECUTE=1 and delegates to the Vercel Sandbox AssetPack harness.',
+ ].join('\n'),
+ );
+ process.stdout.write('\n');
+}
+
+function hostFromUrl(value) {
+ if (!value) return null;
+ try {
+ return new URL(value).hostname;
+ } catch {
+ return null;
+ }
+}
+
+function readEnvironmentFamily(family, env, includeEnvKeyNames) {
+ const observed = family.acceptedKeyNames
+ .map((keyName) => ({
+ keyName,
+ present: typeof env[keyName] === 'string' && env[keyName].length > 0,
+ literalMatches: family.requiredLiteralValue ? env[keyName] === family.requiredLiteralValue : true,
+ hostMatches: family.requiredHost ? hostFromUrl(env[keyName]) === family.requiredHost : true,
+ }))
+ .filter((entry) => entry.present);
+
+ const satisfied = observed.some((entry) => entry.literalMatches && entry.hostMatches);
+ return {
+ familyId: family.familyId,
+ required: family.required,
+ posture: family.posture,
+ present: observed.length > 0,
+ satisfied,
+ ...(family.requiredHost ? { requiredHost: family.requiredHost } : {}),
+ ...(family.requiredLiteralValue ? { requiredLiteralValuePresent: satisfied } : {}),
+ ...(includeEnvKeyNames
+ ? { acceptedKeyNames: family.acceptedKeyNames, observedKeyNames: observed.map((entry) => entry.keyName) }
+ : {}),
+ secretValueSerialized: false,
+ };
+}
+
+function buildReceipt(args, env = process.env) {
+ const families = LANE_REQUIREMENTS[args.lane].map((family) =>
+ readEnvironmentFamily(family, env, args.includeEnvKeyNames),
+ );
+ const missingEnvironmentFamilies = families
+ .filter((family) => family.required && !family.satisfied)
+ .map((family) => family.familyId);
+ const command = {
+ commandId: 'pipeline-hosts:qa-asset-pack-sandbox',
+ cwd: 'packages/pipeline-hosts',
+ argv: ['pnpm', '--filter', '@bitcode/pipeline-hosts', 'run', 'qa:asset-pack:sandbox'],
+ routes: ['/deposit', '/read', '/packs'],
+ dryRun: args.dryRun,
+ liveExecutionOptInRequired: true,
+ liveExecutionOptInSatisfied: env.BITCODE_V43_CROSS_ROUTE_REHEARSAL_EXECUTE === '1',
+ };
+ const withoutRoot = {
+ schema: 'bitcode.v43.crossRouteRehearsal.operatorReceipt',
+ version: 'V43',
+ currentTarget: 'V42',
+ laneId: args.lane,
+ laneClass:
+ args.lane === 'staging-testnet'
+ ? 'staging-testnet-real-inference-cross-route-rehearsal'
+ : 'local-cross-route-rehearsal',
+ stagingProjectRef: args.lane === 'staging-testnet' ? STAGING_PROJECT_REF : null,
+ stagingRestHost: args.lane === 'staging-testnet' ? STAGING_REST_HOST : null,
+ generatedAt: 'operator-runtime',
+ ready: missingEnvironmentFamilies.length === 0,
+ dryRun: args.dryRun,
+ routes: ['/deposit', '/read', '/packs'],
+ stages: [...STAGES],
+ telemetry: {
+ streamToDatabaseRequired: args.lane === 'staging-testnet',
+ executionStreamUiRequired: true,
+ packsActivityReadbackRequired: true,
+ repairReadbackRequired: true,
+ },
+ synchronization: {
+ ledgerDatabaseStorageRequired: true,
+ compensationReadbackRequired: true,
+ repositoryDeliveryReadbackRequired: true,
+ },
+ command,
+ environmentFamilies: families,
+ missingEnvironmentFamilies,
+ receiptArtifactRoot: DEFAULT_RECEIPT_DIR,
+ sourceSafety: SOURCE_SAFETY,
+ };
+
+ return {
+ ...withoutRoot,
+ receiptRoot: rootOf(withoutRoot),
+ };
+}
+
+function writeReceipt(receipt, receiptDir) {
+ mkdirSync(receiptDir, { recursive: true });
+ const filename = `${receipt.version.toLowerCase()}-${receipt.laneId}-cross-route-rehearsal-receipt.json`;
+ const receiptPath = path.resolve(receiptDir, filename);
+ writeFileSync(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`);
+ return receiptPath;
+}
+
+function runLiveHarness(receipt) {
+ if (!receipt.ready) {
+ throw new Error(`Cannot execute V43 rehearsal; missing families: ${receipt.missingEnvironmentFamilies.join(', ')}`);
+ }
+ if (!receipt.command.liveExecutionOptInSatisfied) {
+ throw new Error('Set BITCODE_V43_CROSS_ROUTE_REHEARSAL_EXECUTE=1 before live rehearsal execution.');
+ }
+
+ return spawnSync('pnpm', ['--filter', '@bitcode/pipeline-hosts', 'run', 'qa:asset-pack:sandbox'], {
+ stdio: 'inherit',
+ env: {
+ ...process.env,
+ BITCODE_SANDBOX_MODE: process.env.BITCODE_SANDBOX_MODE || 'asset_pack_pipeline',
+ BITCODE_PIPELINE_STREAM_TO_DATABASE:
+ receipt.laneId === 'staging-testnet'
+ ? '1'
+ : process.env.BITCODE_PIPELINE_STREAM_TO_DATABASE || '0',
+ BITCODE_ENABLE_PIPELINE_HARNESS_API: process.env.BITCODE_ENABLE_PIPELINE_HARNESS_API || '1',
+ },
+ });
+}
+
+function main() {
+ const args = parseArgs(process.argv.slice(2));
+ if (args.help) {
+ printHelp();
+ return;
+ }
+
+ const receipt = buildReceipt(args);
+ let receiptPath = null;
+ if (args.writeReceipt) {
+ receiptPath = writeReceipt(receipt, args.receiptDir);
+ }
+
+ if (args.execute) {
+ const result = runLiveHarness(receipt);
+ if (result.status !== 0) process.exit(result.status || 1);
+ }
+
+ if (args.json) {
+ process.stdout.write(`${JSON.stringify(receipt, null, 2)}\n`);
+ return;
+ }
+
+ process.stdout.write(
+ [
+ `V43 ${receipt.laneId} cross-route rehearsal receipt ${receipt.receiptRoot}`,
+ `ready=${receipt.ready}`,
+ receiptPath ? `receipt=${receiptPath}` : null,
+ receipt.missingEnvironmentFamilies.length
+ ? `missing=${receipt.missingEnvironmentFamilies.join(',')}`
+ : 'missing=none',
+ ]
+ .filter(Boolean)
+ .join(' '),
+ );
+ process.stdout.write('\n');
+}
+
+main();
diff --git a/uapi/app/api/packs/activity/route.ts b/uapi/app/api/packs/activity/route.ts
new file mode 100644
index 00000000..d20f00e2
--- /dev/null
+++ b/uapi/app/api/packs/activity/route.ts
@@ -0,0 +1,123 @@
+import { NextResponse } from 'next/server';
+
+import { GET as getActivity } from '@/app/api/activity/route';
+import {
+ assertPackActivitySourceSafe,
+ buildPackActivityDetailProjection,
+ normalizePackActivityRecord,
+ queryPackActivityRecords,
+ summarizePackActivityRecords,
+ type PackActivityFilters,
+ type PackActivitySortDirection,
+ type PackActivitySortKey,
+ type PackActivityType,
+} from '@/components/base/bitcode/activity/pack-activity-model';
+import type { BitcodeActivityRecord } from '@/components/base/bitcode/activity/bitcode-activity-model';
+
+export const runtime = 'nodejs';
+
+const PACK_ACTIVITY_TYPES = new Set([
+ 'deposit-option',
+ 'depository-assetpack',
+ 'read-need-fit-preview',
+ 'settled-assetpack',
+ 'settlement',
+ 'compensation',
+ 'delivery',
+ 'repair',
+ 'execution',
+ 'notification',
+]);
+
+const PACK_ACTIVITY_SORT_KEYS = new Set([
+ 'timestamp',
+ 'title',
+ 'value',
+ 'settlementState',
+ 'compensationState',
+ 'deliveryState',
+ 'repairState',
+]);
+
+function readEnum(value: string | null, allowed: Set, fallback: T) {
+ return value && allowed.has(value as T) ? (value as T) : fallback;
+}
+
+function readFilterParam(params: URLSearchParams, key: string) {
+ const value = String(params.get(key) || '').trim();
+ return value || 'all';
+}
+
+function buildFilters(params: URLSearchParams): PackActivityFilters {
+ const requestedType = readFilterParam(params, 'type');
+ return {
+ type: requestedType === 'all' ? 'all' : readEnum(requestedType, PACK_ACTIVITY_TYPES, 'execution'),
+ scope: readFilterParam(params, 'scope') as PackActivityFilters['scope'],
+ state: readFilterParam(params, 'state'),
+ settlementState: readFilterParam(params, 'settlementState'),
+ compensationState: readFilterParam(params, 'compensationState'),
+ deliveryState: readFilterParam(params, 'deliveryState'),
+ repairState: readFilterParam(params, 'repairState'),
+ repository: readFilterParam(params, 'repository'),
+ };
+}
+
+async function readBaseActivity(request: Request, limit: number) {
+ const url = new URL(request.url);
+ const activityUrl = new URL('/api/activity', url.origin);
+ activityUrl.searchParams.set('limit', String(Math.min(limit * 2, 100)));
+ const response = await getActivity(new Request(activityUrl));
+ const payload = await response.json();
+ return { response, payload };
+}
+
+export async function GET(request: Request) {
+ const url = new URL(request.url);
+ const params = url.searchParams;
+ const limit = Math.max(1, Math.min(Number(params.get('limit') || 50), 100));
+ const detailId = String(params.get('detailId') || '').trim();
+ const sortKey = readEnum(params.get('sort') || 'timestamp', PACK_ACTIVITY_SORT_KEYS, 'timestamp');
+ const sortDirection: PackActivitySortDirection = params.get('direction') === 'asc' ? 'asc' : 'desc';
+ const filters = buildFilters(params);
+
+ const { response, payload } = await readBaseActivity(request, limit);
+ if (!response.ok || payload?.error) {
+ return NextResponse.json(
+ { ok: false, error: payload?.error || 'Failed to fetch pack activity' },
+ { status: response.status || 500 },
+ );
+ }
+
+ const baseRecords = Array.isArray(payload?.records)
+ ? (payload.records as BitcodeActivityRecord[])
+ : [];
+ const packRecords = baseRecords.map(normalizePackActivityRecord);
+ const query = queryPackActivityRecords(packRecords, {
+ search: params.get('q') || params.get('search') || '',
+ filters,
+ sort: { key: sortKey, direction: sortDirection },
+ });
+ const records = query.records.slice(0, limit);
+ const selected = detailId
+ ? packRecords.find((record) => record.id === detailId) || records[0] || null
+ : records[0] || null;
+ const detail = selected ? buildPackActivityDetailProjection(selected) : null;
+ const safeRecords = records.filter(assertPackActivitySourceSafe);
+
+ return NextResponse.json({
+ ok: true,
+ records: safeRecords,
+ detail: detail && assertPackActivitySourceSafe(detail) ? detail : null,
+ summary: summarizePackActivityRecords(safeRecords),
+ query: query.query,
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ sourceSnippetVisible: false,
+ },
+ });
+}
diff --git a/uapi/app/api/pipeline-harness/asset-pack/preflight.ts b/uapi/app/api/pipeline-harness/asset-pack/preflight.ts
index 89b148f5..f5853315 100644
--- a/uapi/app/api/pipeline-harness/asset-pack/preflight.ts
+++ b/uapi/app/api/pipeline-harness/asset-pack/preflight.ts
@@ -8,6 +8,9 @@ export type PipelineHarnessPreflightBody = {
type PipelineHarnessRuntimeEnv = Record;
+const STAGING_TESTNET_SUPABASE_PROJECT_REF = 'tkpyosihuouusyaxtbau';
+const STAGING_TESTNET_SUPABASE_REST_HOST = `${STAGING_TESTNET_SUPABASE_PROJECT_REF}.supabase.co`;
+
const SUPABASE_ADMIN_CREDENTIAL_KEYS = [
'SUPABASE_SECRET_KEY',
'SUPABASE_ADMIN_KEY',
@@ -214,6 +217,9 @@ export function summarizeHarnessPreflight(
supabaseUrlProvided: isUsableSupabaseUrl(supabaseUrl),
supabaseHost,
supabaseDbHost,
+ stagingTestnetProjectRef: STAGING_TESTNET_SUPABASE_PROJECT_REF,
+ stagingTestnetSupabaseHostMatched:
+ normalizeSupabaseHost(supabaseHost) === STAGING_TESTNET_SUPABASE_REST_HOST,
supabaseRestDbHostAligned:
!normalizedSupabaseHost ||
!normalizedSupabaseDbHost ||
diff --git a/uapi/app/api/pipeline-harness/asset-pack/runner.ts b/uapi/app/api/pipeline-harness/asset-pack/runner.ts
index 3ec0705a..e34f8df4 100644
--- a/uapi/app/api/pipeline-harness/asset-pack/runner.ts
+++ b/uapi/app/api/pipeline-harness/asset-pack/runner.ts
@@ -419,6 +419,59 @@ function summarizeEvidence(evidence: unknown): Record | null {
: record.sourceSafePreview && typeof record.sourceSafePreview === 'object'
? (record.sourceSafePreview as Record)
: null;
+ const assetPackPreviewBoundary = output?.assetPackPreviewBoundary && typeof output.assetPackPreviewBoundary === 'object'
+ ? (output.assetPackPreviewBoundary as Record)
+ : record.assetPackPreviewBoundary && typeof record.assetPackPreviewBoundary === 'object'
+ ? (record.assetPackPreviewBoundary as Record)
+ : null;
+ const assetPackQuoteReceipt = output?.assetPackQuoteReceipt && typeof output.assetPackQuoteReceipt === 'object'
+ ? (output.assetPackQuoteReceipt as Record)
+ : assetPackPreviewBoundary?.quoteReceipt && typeof assetPackPreviewBoundary.quoteReceipt === 'object'
+ ? (assetPackPreviewBoundary.quoteReceipt as Record)
+ : null;
+ const assetPackSettlementInstructions = output?.assetPackSettlementInstructions && typeof output.assetPackSettlementInstructions === 'object'
+ ? (output.assetPackSettlementInstructions as Record)
+ : assetPackPreviewBoundary?.settlementInstructions && typeof assetPackPreviewBoundary.settlementInstructions === 'object'
+ ? (assetPackPreviewBoundary.settlementInstructions as Record)
+ : null;
+ const assetPackDeliveryPosture = output?.assetPackDeliveryPosture && typeof output.assetPackDeliveryPosture === 'object'
+ ? (output.assetPackDeliveryPosture as Record)
+ : assetPackPreviewBoundary?.deliveryPosture && typeof assetPackPreviewBoundary.deliveryPosture === 'object'
+ ? (assetPackPreviewBoundary.deliveryPosture as Record)
+ : null;
+ const assetPackDisclosureReview = output?.assetPackDisclosureReview && typeof output.assetPackDisclosureReview === 'object'
+ ? (output.assetPackDisclosureReview as Record)
+ : assetPackPreviewBoundary?.disclosureReview && typeof assetPackPreviewBoundary.disclosureReview === 'object'
+ ? (assetPackPreviewBoundary.disclosureReview as Record)
+ : null;
+ const assetPackSettlementRightsDeliveryBoundary =
+ output?.assetPackSettlementRightsDeliveryBoundary && typeof output.assetPackSettlementRightsDeliveryBoundary === 'object'
+ ? (output.assetPackSettlementRightsDeliveryBoundary as Record)
+ : record.assetPackSettlementRightsDeliveryBoundary && typeof record.assetPackSettlementRightsDeliveryBoundary === 'object'
+ ? (record.assetPackSettlementRightsDeliveryBoundary as Record)
+ : null;
+ const assetPackSettlementReplayReceipt =
+ output?.assetPackSettlementReplayReceipt && typeof output.assetPackSettlementReplayReceipt === 'object'
+ ? (output.assetPackSettlementReplayReceipt as Record)
+ : assetPackSettlementRightsDeliveryBoundary?.replayReceipt &&
+ typeof assetPackSettlementRightsDeliveryBoundary.replayReceipt === 'object'
+ ? (assetPackSettlementRightsDeliveryBoundary.replayReceipt as Record)
+ : null;
+ const assetPackDeliveryUnlock =
+ output?.assetPackDeliveryUnlock && typeof output.assetPackDeliveryUnlock === 'object'
+ ? (output.assetPackDeliveryUnlock as Record)
+ : assetPackSettlementRightsDeliveryBoundary?.deliveryUnlock &&
+ typeof assetPackSettlementRightsDeliveryBoundary.deliveryUnlock === 'object'
+ ? (assetPackSettlementRightsDeliveryBoundary.deliveryUnlock as Record)
+ : null;
+ const assetPackLedgerDatabaseStorageReconciliation =
+ output?.assetPackLedgerDatabaseStorageReconciliation &&
+ typeof output.assetPackLedgerDatabaseStorageReconciliation === 'object'
+ ? (output.assetPackLedgerDatabaseStorageReconciliation as Record)
+ : assetPackSettlementRightsDeliveryBoundary?.reconciliationReport &&
+ typeof assetPackSettlementRightsDeliveryBoundary.reconciliationReport === 'object'
+ ? (assetPackSettlementRightsDeliveryBoundary.reconciliationReport as Record)
+ : null;
const summarizeCandidate = (candidate: unknown) => {
if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) return null;
const record = candidate as Record;
@@ -522,6 +575,110 @@ function summarizeEvidence(evidence: unknown): Record | null {
delivery: sourceSafePreview.delivery,
}
: null,
+ assetPackPreviewBoundary: summarizeAssetPackPreviewBoundary(assetPackPreviewBoundary),
+ assetPackQuoteReceipt: assetPackQuoteReceipt
+ ? {
+ schema: assetPackQuoteReceipt.schema,
+ quoteId: assetPackQuoteReceipt.quoteId,
+ deterministic: assetPackQuoteReceipt.deterministic,
+ formula: assetPackQuoteReceipt.formula,
+ needId: assetPackQuoteReceipt.needId,
+ needMeasurementRoot: assetPackQuoteReceipt.needMeasurementRoot,
+ admittedFitQuality: assetPackQuoteReceipt.admittedFitQuality,
+ weightedRequestedVolume: assetPackQuoteReceipt.weightedRequestedVolume,
+ weightedAdmittedVolume: assetPackQuoteReceipt.weightedAdmittedVolume,
+ sats: assetPackQuoteReceipt.sats,
+ feeSchedule: assetPackQuoteReceipt.feeSchedule,
+ finalityState: assetPackQuoteReceipt.finalityState,
+ payer: assetPackQuoteReceipt.payer,
+ quoteRoot: assetPackQuoteReceipt.quoteRoot,
+ receiptRoot: assetPackQuoteReceipt.receiptRoot,
+ }
+ : null,
+ assetPackSettlementInstructions: assetPackSettlementInstructions
+ ? {
+ schema: assetPackSettlementInstructions.schema,
+ state: assetPackSettlementInstructions.state,
+ payer: assetPackSettlementInstructions.payer,
+ payee: assetPackSettlementInstructions.payee,
+ btcNetwork: assetPackSettlementInstructions.btcNetwork,
+ sats: assetPackSettlementInstructions.sats,
+ quoteRoot: assetPackSettlementInstructions.quoteRoot,
+ serverCustody: assetPackSettlementInstructions.serverCustody,
+ btcFeeOperation: assetPackSettlementInstructions.btcFeeOperation,
+ settlementRequiredBeforeUnlock: assetPackSettlementInstructions.settlementRequiredBeforeUnlock,
+ requiredReadbacksBeforeUnlock: assetPackSettlementInstructions.requiredReadbacksBeforeUnlock,
+ forbiddenBeforeSettlement: assetPackSettlementInstructions.forbiddenBeforeSettlement,
+ instructionsRoot: assetPackSettlementInstructions.instructionsRoot,
+ }
+ : null,
+ assetPackDeliveryPosture: assetPackDeliveryPosture
+ ? {
+ schema: assetPackDeliveryPosture.schema,
+ state: assetPackDeliveryPosture.state,
+ deliveryMechanism: assetPackDeliveryPosture.deliveryMechanism,
+ pullRequestTarget: assetPackDeliveryPosture.pullRequestTarget,
+ sourceBearingDeliveryVisible: assetPackDeliveryPosture.sourceBearingDeliveryVisible,
+ availableAfterSettlement: assetPackDeliveryPosture.availableAfterSettlement,
+ blockerCodes: assetPackDeliveryPosture.blockerCodes,
+ deliveryRoot: assetPackDeliveryPosture.deliveryRoot,
+ }
+ : null,
+ assetPackDisclosureReview: assetPackDisclosureReview
+ ? {
+ schema: assetPackDisclosureReview.schema,
+ assetPackId: assetPackDisclosureReview.assetPackId,
+ access: assetPackDisclosureReview.access,
+ policy: assetPackDisclosureReview.policy,
+ sourceLeakage: assetPackDisclosureReview.sourceLeakage,
+ roots: assetPackDisclosureReview.roots,
+ }
+ : null,
+ assetPackSettlementRightsDeliveryBoundary: summarizeAssetPackSettlementRightsDeliveryBoundary(
+ assetPackSettlementRightsDeliveryBoundary,
+ ),
+ assetPackSettlementReplayReceipt: assetPackSettlementReplayReceipt
+ ? {
+ schema: assetPackSettlementReplayReceipt.schema,
+ replayMode: assetPackSettlementReplayReceipt.replayMode,
+ previewBoundaryRoot: assetPackSettlementReplayReceipt.previewBoundaryRoot,
+ quoteRoot: assetPackSettlementReplayReceipt.quoteRoot,
+ paymentReceiptRoot: assetPackSettlementReplayReceipt.paymentReceiptRoot,
+ finalityRoot: assetPackSettlementReplayReceipt.finalityRoot,
+ sourceToSharesRoot: assetPackSettlementReplayReceipt.sourceToSharesRoot,
+ rightsTransferRoot: assetPackSettlementReplayReceipt.rightsTransferRoot,
+ readReceiptRoot: assetPackSettlementReplayReceipt.readReceiptRoot,
+ deliveryRoot: assetPackSettlementReplayReceipt.deliveryRoot,
+ reconciliationRoot: assetPackSettlementReplayReceipt.reconciliationRoot,
+ replayRoot: assetPackSettlementReplayReceipt.replayRoot,
+ verified: assetPackSettlementReplayReceipt.verified,
+ }
+ : null,
+ assetPackDeliveryUnlock: assetPackDeliveryUnlock
+ ? {
+ schema: assetPackDeliveryUnlock.schema,
+ state: assetPackDeliveryUnlock.state,
+ deliveryMechanism: assetPackDeliveryUnlock.deliveryMechanism,
+ pullRequestTarget: assetPackDeliveryUnlock.pullRequestTarget,
+ sourceBearingDeliveryVisibleToReader:
+ assetPackDeliveryUnlock.sourceBearingDeliveryVisibleToReader,
+ protectedSourcePayloadSerialized:
+ assetPackDeliveryUnlock.protectedSourcePayloadSerialized,
+ requiredReceipts: assetPackDeliveryUnlock.requiredReceipts,
+ blockerCodes: assetPackDeliveryUnlock.blockerCodes,
+ deliveryRoot: assetPackDeliveryUnlock.deliveryRoot,
+ }
+ : null,
+ assetPackLedgerDatabaseStorageReconciliation: assetPackLedgerDatabaseStorageReconciliation
+ ? {
+ schema: assetPackLedgerDatabaseStorageReconciliation.schema,
+ reconciliationId: assetPackLedgerDatabaseStorageReconciliation.reconciliationId,
+ state: assetPackLedgerDatabaseStorageReconciliation.state,
+ blocking: assetPackLedgerDatabaseStorageReconciliation.blocking,
+ repairActions: assetPackLedgerDatabaseStorageReconciliation.repairActions,
+ proofRoots: assetPackLedgerDatabaseStorageReconciliation.proofRoots,
+ }
+ : null,
depositorySearch: depositorySearch
? {
...summarizeFitLike(depositorySearch),
@@ -570,6 +727,275 @@ function summarizeEvidence(evidence: unknown): Record | null {
};
}
+function summarizeAssetPackPreviewBoundary(
+ boundary: Record | null,
+): Record | null {
+ if (!boundary) return null;
+ const quoteReceipt = boundary.quoteReceipt && typeof boundary.quoteReceipt === 'object'
+ ? (boundary.quoteReceipt as Record)
+ : null;
+ const selectedFitProvenance = boundary.selectedFitProvenance && typeof boundary.selectedFitProvenance === 'object'
+ ? (boundary.selectedFitProvenance as Record)
+ : null;
+ const settlementInstructions = boundary.settlementInstructions && typeof boundary.settlementInstructions === 'object'
+ ? (boundary.settlementInstructions as Record)
+ : null;
+ const deliveryPosture = boundary.deliveryPosture && typeof boundary.deliveryPosture === 'object'
+ ? (boundary.deliveryPosture as Record)
+ : null;
+ const replayReceipt = boundary.replayReceipt && typeof boundary.replayReceipt === 'object'
+ ? (boundary.replayReceipt as Record)
+ : null;
+ const repairPosture = boundary.repairPosture && typeof boundary.repairPosture === 'object'
+ ? (boundary.repairPosture as Record)
+ : null;
+ const proofRoots = boundary.proofRoots && typeof boundary.proofRoots === 'object'
+ ? (boundary.proofRoots as Record)
+ : null;
+ const sourceSafety = boundary.sourceSafety && typeof boundary.sourceSafety === 'object'
+ ? (boundary.sourceSafety as Record)
+ : null;
+ const storageProjection = Array.isArray(boundary.storageProjection)
+ ? boundary.storageProjection
+ .map((record) => record && typeof record === 'object' && !Array.isArray(record)
+ ? record as Record
+ : null)
+ .filter((record): record is Record => Boolean(record))
+ : [];
+
+ return {
+ schema: boundary.schema,
+ boundaryId: boundary.boundaryId,
+ assetPackId: boundary.assetPackId,
+ sourceSafety,
+ proofRoots,
+ quoteReceipt: quoteReceipt
+ ? {
+ quoteId: quoteReceipt.quoteId,
+ deterministic: quoteReceipt.deterministic,
+ formula: quoteReceipt.formula,
+ needId: quoteReceipt.needId,
+ admittedFitQuality: quoteReceipt.admittedFitQuality,
+ weightedRequestedVolume: quoteReceipt.weightedRequestedVolume,
+ weightedAdmittedVolume: quoteReceipt.weightedAdmittedVolume,
+ sats: quoteReceipt.sats,
+ finalityState: quoteReceipt.finalityState,
+ payer: quoteReceipt.payer,
+ quoteRoot: quoteReceipt.quoteRoot,
+ receiptRoot: quoteReceipt.receiptRoot,
+ }
+ : null,
+ selectedFitProvenance: selectedFitProvenance
+ ? {
+ schema: selectedFitProvenance.schema,
+ resultState: selectedFitProvenance.resultState,
+ selectedCandidateAssetIds: selectedFitProvenance.selectedCandidateAssetIds,
+ fitDepositAssetIds: selectedFitProvenance.fitDepositAssetIds,
+ queryRoot: selectedFitProvenance.queryRoot,
+ rankingRoot: selectedFitProvenance.rankingRoot,
+ selectedCandidates: Array.isArray(selectedFitProvenance.selectedCandidates)
+ ? selectedFitProvenance.selectedCandidates.map((candidate) =>
+ candidate && typeof candidate === 'object'
+ ? {
+ assetId: (candidate as Record).assetId,
+ finalScore: (candidate as Record).finalScore,
+ semanticScore: (candidate as Record).semanticScore,
+ proofRoot: (candidate as Record).proofRoot,
+ measurementRoot: (candidate as Record).measurementRoot,
+ reconciliationReadbackRoot: (candidate as Record).reconciliationReadbackRoot,
+ }
+ : null,
+ ).filter(Boolean)
+ : [],
+ provenanceRoot: selectedFitProvenance.provenanceRoot,
+ }
+ : null,
+ settlementInstructions: settlementInstructions
+ ? {
+ state: settlementInstructions.state,
+ payer: settlementInstructions.payer,
+ payee: settlementInstructions.payee,
+ btcNetwork: settlementInstructions.btcNetwork,
+ sats: settlementInstructions.sats,
+ quoteRoot: settlementInstructions.quoteRoot,
+ serverCustody: settlementInstructions.serverCustody,
+ settlementRequiredBeforeUnlock: settlementInstructions.settlementRequiredBeforeUnlock,
+ instructionsRoot: settlementInstructions.instructionsRoot,
+ }
+ : null,
+ deliveryPosture: deliveryPosture
+ ? {
+ state: deliveryPosture.state,
+ deliveryMechanism: deliveryPosture.deliveryMechanism,
+ pullRequestTarget: deliveryPosture.pullRequestTarget,
+ sourceBearingDeliveryVisible: deliveryPosture.sourceBearingDeliveryVisible,
+ availableAfterSettlement: deliveryPosture.availableAfterSettlement,
+ blockerCodes: deliveryPosture.blockerCodes,
+ deliveryRoot: deliveryPosture.deliveryRoot,
+ }
+ : null,
+ replayReceipt: replayReceipt
+ ? {
+ replayMode: replayReceipt.replayMode,
+ previewRoot: replayReceipt.previewRoot,
+ quoteRoot: replayReceipt.quoteRoot,
+ selectedFitProvenanceRoot: replayReceipt.selectedFitProvenanceRoot,
+ settlementInstructionsRoot: replayReceipt.settlementInstructionsRoot,
+ deliveryPostureRoot: replayReceipt.deliveryPostureRoot,
+ storageRoot: replayReceipt.storageRoot,
+ replayRoot: replayReceipt.replayRoot,
+ verified: replayReceipt.verified,
+ }
+ : null,
+ repairPosture,
+ storageProjection: storageProjection.map((record) => ({
+ recordId: record.recordId,
+ recordKind: record.recordKind,
+ namespace: record.namespace,
+ key: record.key,
+ root: record.root,
+ sourceSafety: record.sourceSafety,
+ })),
+ storageRecordCount: storageProjection.length,
+ };
+}
+
+function summarizeAssetPackSettlementRightsDeliveryBoundary(
+ boundary: Record | null,
+): Record | null {
+ if (!boundary) return null;
+ const paymentObservation = boundary.paymentObservation && typeof boundary.paymentObservation === 'object'
+ ? (boundary.paymentObservation as Record)
+ : null;
+ const finalityReceipt = boundary.finalityReceipt && typeof boundary.finalityReceipt === 'object'
+ ? (boundary.finalityReceipt as Record)
+ : null;
+ const deliveryUnlock = boundary.deliveryUnlock && typeof boundary.deliveryUnlock === 'object'
+ ? (boundary.deliveryUnlock as Record)
+ : null;
+ const settlementUnlock = boundary.settlementUnlock && typeof boundary.settlementUnlock === 'object'
+ ? (boundary.settlementUnlock as Record)
+ : null;
+ const reconciliationReport = boundary.reconciliationReport && typeof boundary.reconciliationReport === 'object'
+ ? (boundary.reconciliationReport as Record)
+ : null;
+ const replayReceipt = boundary.replayReceipt && typeof boundary.replayReceipt === 'object'
+ ? (boundary.replayReceipt as Record)
+ : null;
+ const repairPosture = boundary.repairPosture && typeof boundary.repairPosture === 'object'
+ ? (boundary.repairPosture as Record)
+ : null;
+ const proofRoots = boundary.proofRoots && typeof boundary.proofRoots === 'object'
+ ? (boundary.proofRoots as Record)
+ : null;
+ const sourceSafety = boundary.sourceSafety && typeof boundary.sourceSafety === 'object'
+ ? (boundary.sourceSafety as Record)
+ : null;
+ const storageProjection = Array.isArray(boundary.storageProjection)
+ ? boundary.storageProjection
+ .map((record) => record && typeof record === 'object' && !Array.isArray(record)
+ ? record as Record
+ : null)
+ .filter((record): record is Record => Boolean(record))
+ : [];
+
+ return {
+ schema: boundary.schema,
+ boundaryId: boundary.boundaryId,
+ state: boundary.state,
+ assetPackId: boundary.assetPackId,
+ readId: boundary.readId,
+ orderId: boundary.orderId,
+ previewBoundaryRoot: boundary.previewBoundaryRoot,
+ paymentObservation: paymentObservation
+ ? {
+ paymentReceiptId: paymentObservation.paymentReceiptId,
+ payer: paymentObservation.payer,
+ payee: paymentObservation.payee,
+ payerWalletId: paymentObservation.payerWalletId,
+ payeeWalletId: paymentObservation.payeeWalletId,
+ btcNetwork: paymentObservation.btcNetwork,
+ expectedSats: paymentObservation.expectedSats,
+ observedDebitSats: paymentObservation.observedDebitSats,
+ observedCreditSats: paymentObservation.observedCreditSats,
+ txid: paymentObservation.txid,
+ serverCustody: paymentObservation.serverCustody,
+ paymentReceiptRoot: paymentObservation.paymentReceiptRoot,
+ }
+ : null,
+ finalityReceipt: finalityReceipt
+ ? {
+ finalityState: finalityReceipt.finalityState,
+ confirmations: finalityReceipt.confirmations,
+ blockHeight: finalityReceipt.blockHeight,
+ txid: finalityReceipt.txid,
+ finalityRoot: finalityReceipt.finalityRoot,
+ }
+ : null,
+ sourceToSharesRoot: proofRoots?.sourceToSharesRoot ?? null,
+ btdReadReceiptRoot: proofRoots?.btdReadReceiptRoot ?? null,
+ rightsTransferRoot: proofRoots?.rightsTransferRoot ?? null,
+ settlementUnlock: settlementUnlock
+ ? {
+ state: settlementUnlock.state,
+ sourceAvailable: settlementUnlock.sourceAvailable,
+ reason: settlementUnlock.reason,
+ readLicenseId: settlementUnlock.readLicenseId,
+ pullRequestTarget: settlementUnlock.pullRequestTarget,
+ missingReadbackKeys: settlementUnlock.missingReadbackKeys,
+ }
+ : null,
+ deliveryUnlock: deliveryUnlock
+ ? {
+ state: deliveryUnlock.state,
+ deliveryMechanism: deliveryUnlock.deliveryMechanism,
+ pullRequestTarget: deliveryUnlock.pullRequestTarget,
+ sourceBearingDeliveryVisibleToReader:
+ deliveryUnlock.sourceBearingDeliveryVisibleToReader,
+ requiredReceipts: deliveryUnlock.requiredReceipts,
+ blockerCodes: deliveryUnlock.blockerCodes,
+ deliveryRoot: deliveryUnlock.deliveryRoot,
+ }
+ : null,
+ reconciliationReport: reconciliationReport
+ ? {
+ reconciliationId: reconciliationReport.reconciliationId,
+ state: reconciliationReport.state,
+ blocking: reconciliationReport.blocking,
+ repairActions: reconciliationReport.repairActions,
+ proofRoots: reconciliationReport.proofRoots,
+ }
+ : null,
+ replayReceipt: replayReceipt
+ ? {
+ replayMode: replayReceipt.replayMode,
+ quoteRoot: replayReceipt.quoteRoot,
+ paymentReceiptRoot: replayReceipt.paymentReceiptRoot,
+ finalityRoot: replayReceipt.finalityRoot,
+ sourceToSharesRoot: replayReceipt.sourceToSharesRoot,
+ rightsTransferRoot: replayReceipt.rightsTransferRoot,
+ readReceiptRoot: replayReceipt.readReceiptRoot,
+ deliveryRoot: replayReceipt.deliveryRoot,
+ reconciliationRoot: replayReceipt.reconciliationRoot,
+ replayRoot: replayReceipt.replayRoot,
+ verified: replayReceipt.verified,
+ }
+ : null,
+ repairPosture,
+ sourceSafety,
+ proofRoots,
+ storageProjection: storageProjection.map((record) => ({
+ recordId: record.recordId,
+ recordKind: record.recordKind,
+ namespace: record.namespace,
+ key: record.key,
+ root: record.root,
+ sourceSafety: record.sourceSafety,
+ })),
+ storageRecordCount: storageProjection.length,
+ };
+}
+
function safeHostEvent(event: PipelineHarnessHostEvent): PipelineHarnessHostEvent {
return event;
}
diff --git a/uapi/app/api/read-review/route.ts b/uapi/app/api/read-review/route.ts
index f7a2d304..7966a42c 100644
--- a/uapi/app/api/read-review/route.ts
+++ b/uapi/app/api/read-review/route.ts
@@ -126,6 +126,7 @@ export async function POST(request: Request) {
const { acceptReadNeed, admitReadFitsFinding } = await import('@bitcode/pipeline-asset-pack/read-need');
const {
buildReadNeedReviewResynthesisRuntime,
+ persistReadNeedReviewResynthesisRuntime,
summarizeReadNeedReviewResynthesisRuntime,
} = await import('@bitcode/pipeline-asset-pack/read-need-review-resynthesis');
const {
@@ -145,10 +146,12 @@ export async function POST(request: Request) {
acceptedReadNeed,
requireAcceptedReadNeed: true,
});
+ const inferenceCapture = createRouteInferenceCapture();
const reviewRuntime = buildReadNeedReviewResynthesisRuntime({
action,
readNeed: acceptedReadNeed,
});
+ persistReadNeedReviewResynthesisRuntime(inferenceCapture.execution, reviewRuntime);
const acceptanceStep =
READ_NEED_COMPREHENSION_SYNTHESIS_CONTRACT.phases
.flatMap((phase) => phase.agents)
@@ -197,6 +200,7 @@ export async function POST(request: Request) {
const { rejectReadNeed, admitReadFitsFinding } = await import('@bitcode/pipeline-asset-pack/read-need');
const {
buildReadNeedReviewResynthesisRuntime,
+ persistReadNeedReviewResynthesisRuntime,
summarizeReadNeedReviewResynthesisRuntime,
} = await import('@bitcode/pipeline-asset-pack/read-need-review-resynthesis');
const {
@@ -219,11 +223,13 @@ export async function POST(request: Request) {
readNeed: rejectedReadNeed,
requireAcceptedReadNeed: true,
});
+ const inferenceCapture = createRouteInferenceCapture();
const reviewRuntime = buildReadNeedReviewResynthesisRuntime({
action,
readNeed: rejectedReadNeed,
feedback: stringArray(body.feedback || body.readNeedFeedback),
});
+ persistReadNeedReviewResynthesisRuntime(inferenceCapture.execution, reviewRuntime);
const reviewStep =
READ_NEED_COMPREHENSION_SYNTHESIS_CONTRACT.phases
.flatMap((phase) => phase.agents)
diff --git a/uapi/app/deposit/DepositPageClient.tsx b/uapi/app/deposit/DepositPageClient.tsx
new file mode 100644
index 00000000..3e75b83a
--- /dev/null
+++ b/uapi/app/deposit/DepositPageClient.tsx
@@ -0,0 +1,1126 @@
+"use client";
+
+import Link from "next/link";
+import React, { useCallback, useEffect, useMemo, useState } from "react";
+import {
+ Boxes,
+ GitBranch,
+ GitCommitHorizontal,
+ RefreshCw,
+ ShieldCheck,
+ Sparkles,
+} from "lucide-react";
+import { useRouter, useSearchParams } from "next/navigation";
+
+import { useAuth } from "@/components/base/bitcode/auth/AuthProvider";
+import {
+ ProductRouteDisclosure,
+ ProductRouteShell,
+ ProductRouteStatePanel,
+ ProductRouteStepGrid,
+} from "@/components/base/bitcode/routes/product-route-shell";
+import { useUserData } from "@/hooks/useUserData";
+import { fetchPipelineExecutionHistory } from "@/networking/api-client";
+import type { PipelineExecution } from "@/types/api";
+
+import TerminalDepositComposer from "@/app/terminal/TerminalDepositComposer";
+import TerminalRepositoryContextPanel from "@/app/terminal/TerminalRepositoryContextPanel";
+import TerminalSupplySelectionPanel from "@/app/terminal/TerminalSupplySelectionPanel";
+import {
+ buildTerminalExecutionHistoryRequest,
+ mapExecutionHistoryRunToWorkspaceRun,
+ readTerminalRouteError,
+ type TerminalActivityRecordDraft,
+ upsertWorkspaceRun,
+} from "@/app/terminal/terminal-activity-history";
+import type { TerminalRepositoryContextState } from "@/app/terminal/terminal-repository-context";
+import {
+ readTerminalTransactionId,
+ writeTerminalTransactionId,
+} from "@/app/terminal/terminal-transaction-query";
+import { shouldRecoverTerminalTransactionRoute } from "@/app/terminal/terminal-transaction-query";
+import type { WorkspaceRun } from "@/app/terminal/terminal-run-data";
+import {
+ buildDepositHref,
+ DEPOSIT_ROUTE,
+} from "@/app/terminal/terminal-routes";
+import { TerminalShellBridgeProvider } from "@/app/terminal/terminal-shell-bridge";
+import { deriveTerminalTransactionReadiness } from "@/app/terminal/terminal-transaction-readiness-source";
+
+import {
+ buildDepositRouteSession,
+ readDepositRouteStage,
+ writeDepositRouteStage,
+} from "./deposit-route-model";
+import type {
+ DepositOptionReviewDecision,
+ DepositOptionReviewDecisionState,
+} from "@bitcode/pipeline-asset-pack/deposit-asset-pack-option-admission";
+
+const DEPOSIT_OPTION_PIPELINE_ID = "DepositAssetPackOptionSynthesis";
+const DEPOSIT_OPTION_POLICY_ID = "DepositAssetPackOptionPolicy";
+const DEPOSIT_OPTION_ADMISSION_ID = "DepositAssetPackOptionAdmissionReport";
+
+function shortIdentifier(value: string | null | undefined) {
+ if (!value) return "pending";
+ return value.length > 18 ? `${value.slice(0, 12)}...` : value;
+}
+
+function formatDate(value: string | null | undefined) {
+ if (!value) return "pending";
+ const date = new Date(value);
+ if (Number.isNaN(date.getTime())) return value;
+ return date.toLocaleString(undefined, {
+ month: "short",
+ day: "numeric",
+ hour: "2-digit",
+ minute: "2-digit",
+ });
+}
+
+function readStringField(source: unknown, ...keys: string[]) {
+ if (!source || typeof source !== "object") return null;
+ const record = source as Record;
+ for (const key of keys) {
+ const value = record[key];
+ if (typeof value === "string" && value.trim()) return value.trim();
+ }
+ return null;
+}
+
+export default function DepositPageClient() {
+ const router = useRouter();
+ const searchParams = useSearchParams();
+ const { user } = useAuth();
+ const {
+ data: userData,
+ hasGitHubConnection,
+ hasValidGitHubConnection,
+ hasWalletConnection,
+ hasVerifiedWalletConnection,
+ hasStoredVerifiedWalletConnection,
+ walletConnectionStatus,
+ } = useUserData();
+ const routeSearchParams = useMemo(
+ () => new URLSearchParams(searchParams.toString()),
+ [searchParams],
+ );
+ const selectedTransactionId = useMemo(
+ () => readTerminalTransactionId(routeSearchParams),
+ [routeSearchParams],
+ );
+ const routeDepositStage = useMemo(
+ () => readDepositRouteStage(routeSearchParams),
+ [routeSearchParams],
+ );
+ const [liveRuns, setLiveRuns] = useState([]);
+ const [isLoadingRuns, setIsLoadingRuns] = useState(true);
+ const [runsLoadError, setRunsLoadError] = useState(null);
+ const [repositoryContext, setRepositoryContext] =
+ useState(null);
+ const [depositorInstructions, setDepositorInstructions] = useState(
+ "Propose source-safe AssetPack options that are sub-critical to expose after settlement and likely useful for future Reading demand.",
+ );
+ const [sourcePathHintsText, setSourcePathHintsText] = useState(
+ [
+ "uapi/app/terminal/TerminalDepositComposer.tsx",
+ "packages/pipelines/asset-pack/src/depository-supply-index.ts",
+ ].join("\n"),
+ );
+ const [optionsRequested, setOptionsRequested] = useState(false);
+ const [optionReviewDecisions, setOptionReviewDecisions] = useState<
+ Record
+ >({});
+
+ const readCurrentSearchParams = useCallback(
+ () =>
+ typeof window !== "undefined" &&
+ window.location.pathname === DEPOSIT_ROUTE
+ ? new URLSearchParams(window.location.search)
+ : new URLSearchParams(searchParams.toString()),
+ [searchParams],
+ );
+
+ const replaceDepositSearchParams = useCallback(
+ (nextParams: URLSearchParams) => {
+ const query = nextParams.toString();
+ router.replace(buildDepositHref(query), { scroll: false });
+ },
+ [router],
+ );
+
+ const replaceDepositRouteTransaction = useCallback(
+ (transactionId: string) => {
+ replaceDepositSearchParams(
+ writeTerminalTransactionId(readCurrentSearchParams(), transactionId),
+ );
+ },
+ [readCurrentSearchParams, replaceDepositSearchParams],
+ );
+
+ const refreshLiveRuns = useCallback(async () => {
+ setIsLoadingRuns(true);
+ setRunsLoadError(null);
+
+ try {
+ const history = await fetchPipelineExecutionHistory();
+ const nextRuns = history.map(mapExecutionHistoryRunToWorkspaceRun);
+ setLiveRuns(nextRuns);
+ return nextRuns;
+ } catch (error) {
+ setLiveRuns([]);
+ setRunsLoadError(
+ error instanceof Error
+ ? error.message
+ : "Unable to load recent Deposit activity.",
+ );
+ return [];
+ } finally {
+ setIsLoadingRuns(false);
+ }
+ }, []);
+
+ useEffect(() => {
+ void refreshLiveRuns();
+ }, [refreshLiveRuns]);
+
+ useEffect(() => {
+ if (
+ !shouldRecoverTerminalTransactionRoute({
+ transactionIds: liveRuns.map((run) => run.id),
+ selectedTransactionId,
+ })
+ ) {
+ return;
+ }
+ replaceDepositRouteTransaction(liveRuns[0].id);
+ }, [liveRuns, replaceDepositRouteTransaction, selectedTransactionId]);
+
+ const selectedRun = useMemo(
+ () =>
+ liveRuns.find((run) => run.id === selectedTransactionId) ||
+ liveRuns[0] ||
+ null,
+ [liveRuns, selectedTransactionId],
+ );
+
+ const profileRecord =
+ userData?.profile && typeof userData.profile === "object"
+ ? (userData.profile as Record)
+ : null;
+ const walletBinding =
+ profileRecord?.wallet_binding &&
+ typeof profileRecord.wallet_binding === "object"
+ ? (profileRecord.wallet_binding as Record)
+ : null;
+ const preferredSignerAddress = useMemo(() => {
+ const profileAuthAddress = readStringField(profileRecord, "auth_address");
+ const profileWalletAddress = readStringField(
+ profileRecord,
+ "wallet_address",
+ );
+ const walletAuthAddress =
+ walletConnectionStatus?.metadata?.authAddress?.trim() || "";
+ const walletAddress = walletConnectionStatus?.address?.trim() || "";
+ return (
+ walletAuthAddress ||
+ walletAddress ||
+ profileAuthAddress ||
+ profileWalletAddress ||
+ null
+ );
+ }, [profileRecord, walletConnectionStatus]);
+ const preferredSignerLabel = walletConnectionStatus?.provider
+ ? `${walletConnectionStatus.provider} wallet`
+ : "connected wallet";
+ const transactionReadiness = useMemo(
+ () =>
+ deriveTerminalTransactionReadiness({
+ signedIn: Boolean(user),
+ repositoryContext,
+ repositoryConnectionStatus: repositoryContext?.connectionStatus || null,
+ hasRepositoryProviderAttachment: hasGitHubConnection,
+ hasValidRepositoryProviderAttachment: hasValidGitHubConnection,
+ hasWalletBinding:
+ hasWalletConnection ||
+ Boolean(
+ readStringField(profileRecord, "wallet_address") ||
+ readStringField(walletBinding, "address"),
+ ),
+ hasVerifiedWalletBinding: hasVerifiedWalletConnection,
+ hasStoredVerifiedWalletBinding: hasStoredVerifiedWalletConnection,
+ }).readiness,
+ [
+ hasGitHubConnection,
+ hasStoredVerifiedWalletConnection,
+ hasValidGitHubConnection,
+ hasVerifiedWalletConnection,
+ hasWalletConnection,
+ profileRecord,
+ repositoryContext,
+ user,
+ walletBinding,
+ ],
+ );
+
+ const sourcePathHints = useMemo(
+ () =>
+ sourcePathHintsText
+ .split(/\r?\n|,/u)
+ .map((entry) => entry.trim())
+ .filter(Boolean),
+ [sourcePathHintsText],
+ );
+ const sourceCriticalitySignals = useMemo(
+ () => [
+ {
+ id: "depositor-sub-critical-intent",
+ label:
+ "Depositor intends this option set to avoid critical source exposure.",
+ severity: "sub-critical" as const,
+ weight: 0.74,
+ },
+ ...(sourcePathHints.some((path) =>
+ /secret|credential|wallet|auth|key|payment|settlement/iu.test(path),
+ )
+ ? [
+ {
+ id: "source-path-sensitive-scope-warning",
+ label:
+ "Source path hints include sensitive operational terms requiring review.",
+ severity: "warning" as const,
+ weight: 0.64,
+ },
+ ]
+ : []),
+ ],
+ [sourcePathHints],
+ );
+ const hasSubmittedDeposit = useMemo(() => {
+ const selectedRepository = repositoryContext?.selectedRepository || null;
+ if (!selectedRepository) return false;
+ const selectedBranch =
+ repositoryContext?.selectedBranch ||
+ selectedRepository.defaultBranch ||
+ "main";
+ return liveRuns.some(
+ (run) =>
+ run.contextSource === "terminal-deposit-composer" &&
+ run.repository === selectedRepository.fullName &&
+ run.branch === selectedBranch &&
+ Boolean(run.candidateAssetId),
+ );
+ }, [liveRuns, repositoryContext]);
+ const hasDepositoryReadback = useMemo(
+ () =>
+ liveRuns.some(
+ (run) =>
+ run.contextSource === "terminal-deposit-composer" &&
+ Boolean(
+ run.depositorySearchDocumentRoot ||
+ run.vectorDocumentRoot ||
+ run.compensationPreviewRoot,
+ ),
+ ),
+ [liveRuns],
+ );
+ const optionReviewDecisionRecords = useMemo(
+ () =>
+ Object.entries(optionReviewDecisions).map(([optionId, decision]) => ({
+ optionId,
+ decision,
+ reviewerId: user?.id || preferredSignerAddress || null,
+ })),
+ [optionReviewDecisions, preferredSignerAddress, user?.id],
+ );
+ const depositRouteInput = useMemo(
+ () => ({
+ transactionId: selectedTransactionId || selectedRun?.id || null,
+ depositStage: routeDepositStage,
+ repositoryFullName:
+ repositoryContext?.selectedRepository?.fullName || null,
+ sourceBranch: repositoryContext?.selectedBranch || null,
+ sourceCommit: repositoryContext?.selectedCommit || null,
+ depositorInstructions,
+ sourcePathHints,
+ depositoryDemandSignals: [
+ {
+ id: "depository-gap-source-safe-pack-options",
+ label:
+ "Depository benefits from reviewable source-safe AssetPack supply options.",
+ weight: 0.72,
+ },
+ ],
+ readingDemandSignals: [
+ {
+ id: "reading-demand-fit-ready-source-supply",
+ label:
+ "Reading demand needs searchable, proof-bearing source supply for Finding Fits.",
+ weight: 0.8,
+ },
+ ],
+ existingDepositorySignals: [
+ {
+ id: "existing-supply-compensation-route",
+ label:
+ "Existing supply expects proof roots, vector projections, and compensation previews.",
+ weight: 0.58,
+ },
+ ],
+ sourceCriticalitySignals,
+ developmentCostSats: Math.max(1600, 1200 + sourcePathHints.length * 240),
+ expectedSettlementSats: Math.max(
+ 4200,
+ 3600 + sourcePathHints.length * 360 + liveRuns.length * 90,
+ ),
+ depositorWalletId: preferredSignerAddress
+ ? "connected-depositor-wallet"
+ : null,
+ reviewerId: user?.id || preferredSignerAddress || null,
+ hasRepositorySource: Boolean(repositoryContext?.selectedRepository),
+ optionsRequested,
+ hasReviewedOption: optionReviewDecisionRecords.length > 0,
+ hasSubmittedDeposit,
+ hasDepositoryReadback,
+ }),
+ [
+ depositorInstructions,
+ hasDepositoryReadback,
+ hasSubmittedDeposit,
+ liveRuns.length,
+ optionsRequested,
+ optionReviewDecisionRecords.length,
+ preferredSignerAddress,
+ repositoryContext,
+ routeDepositStage,
+ selectedRun?.id,
+ selectedTransactionId,
+ sourceCriticalitySignals,
+ sourcePathHints,
+ user?.id,
+ ],
+ );
+ const depositRouteSession = useMemo(
+ () =>
+ buildDepositRouteSession({
+ ...depositRouteInput,
+ optionReviewDecisions: optionReviewDecisionRecords,
+ }),
+ [depositRouteInput, optionReviewDecisionRecords],
+ );
+
+ const sessionRows = [
+ {
+ label: "Repository",
+ value:
+ depositRouteSession.routeState.repositoryFullName ||
+ "select repository",
+ },
+ {
+ label: "Branch",
+ value: depositRouteSession.routeState.sourceBranch || "pending",
+ },
+ {
+ label: "Commit",
+ value: shortIdentifier(depositRouteSession.routeState.sourceCommit),
+ },
+ {
+ label: "Transaction",
+ value: shortIdentifier(depositRouteSession.routeState.transactionId),
+ },
+ { label: "Pipeline", value: DEPOSIT_OPTION_PIPELINE_ID },
+ { label: "Policy", value: DEPOSIT_OPTION_POLICY_ID },
+ { label: "Admission", value: DEPOSIT_OPTION_ADMISSION_ID },
+ {
+ label: "Option roots",
+ value: String(depositRouteSession.synthesis.roots.optionRoots.length),
+ },
+ {
+ label: "Positive ROI options",
+ value: String(depositRouteSession.policy.reviewablePositiveRoiCount),
+ },
+ {
+ label: "Admitted options",
+ value: String(depositRouteSession.admission.admittedCount),
+ },
+ ];
+
+ const recentDepositRuns = useMemo(
+ () =>
+ liveRuns
+ .filter(
+ (run) =>
+ run.contextSource === "terminal-deposit-composer" ||
+ run.transactionLens === "deposit",
+ )
+ .slice(0, 6),
+ [liveRuns],
+ );
+
+ const handleRecordActivity = useCallback(
+ async (draft: TerminalActivityRecordDraft) => {
+ const response = await fetch("/api/executions/history", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(
+ buildTerminalExecutionHistoryRequest(draft, {
+ repositoryContext,
+ fallbackRun: selectedRun,
+ }),
+ ),
+ });
+
+ if (!response.ok) {
+ throw new Error(
+ await readTerminalRouteError(
+ response,
+ "Unable to record Deposit activity.",
+ ),
+ );
+ }
+
+ const payload = (await response.json()) as {
+ execution?: PipelineExecution;
+ };
+ if (!payload.execution)
+ throw new Error(
+ "Deposit activity response did not include an execution row.",
+ );
+
+ const nextRun = mapExecutionHistoryRunToWorkspaceRun(payload.execution);
+ setLiveRuns((currentRuns) => upsertWorkspaceRun(currentRuns, nextRun));
+ if (draft.selectAfterRecord !== false)
+ replaceDepositRouteTransaction(nextRun.id);
+ void refreshLiveRuns();
+ return nextRun;
+ },
+ [
+ refreshLiveRuns,
+ replaceDepositRouteTransaction,
+ repositoryContext,
+ selectedRun,
+ ],
+ );
+
+ const handleOptionReviewDecision = useCallback(
+ async (optionId: string, decision: DepositOptionReviewDecisionState) => {
+ const nextDecisions = {
+ ...optionReviewDecisions,
+ [optionId]: decision,
+ };
+ setOptionsRequested(true);
+ setOptionReviewDecisions(nextDecisions);
+
+ const nextDecisionRecords = Object.entries(nextDecisions).map(
+ ([entryOptionId, entryDecision]) => ({
+ optionId: entryOptionId,
+ decision: entryDecision,
+ reviewerId: user?.id || preferredSignerAddress || null,
+ }),
+ );
+ const nextSession = buildDepositRouteSession({
+ ...depositRouteInput,
+ optionsRequested: true,
+ hasReviewedOption: true,
+ optionReviewDecisions: nextDecisionRecords,
+ });
+ const receipt = nextSession.admission.receipts.find(
+ (entry) => entry.optionId === optionId,
+ );
+ const admitted = receipt?.admission.state === "admitted-to-depository";
+ replaceDepositSearchParams(
+ writeDepositRouteStage(
+ readCurrentSearchParams(),
+ admitted ? "read-depository-state" : "review-options",
+ ),
+ );
+
+ if (!receipt) return;
+
+ try {
+ await handleRecordActivity({
+ type: admitted
+ ? "pipeline:deposit-option-admission"
+ : "pipeline:deposit-option-review",
+ status: "completed",
+ summary: admitted
+ ? `Admitted ${receipt.title} to the Depository.`
+ : `Recorded ${decision.replace(/-/g, " ")} for ${receipt.title}.`,
+ selectAfterRecord: admitted,
+ output: {
+ assetPackTitle: receipt.title,
+ depositAdmission: nextSession.admission,
+ admissionState: receipt.admission.state,
+ depositoryAssetPackId: receipt.admission.depositoryAssetPackId,
+ compensationState: receipt.compensationPreview.state,
+ packActivitySyncState: receipt.packsActivitySync.state,
+ packsActivityRoot: receipt.packsActivitySync.activityRoot,
+ },
+ context: {
+ source: "deposit-option-review-admission",
+ workbench: "deposit-option-review",
+ optionId,
+ reviewDecision: decision,
+ admissionState: receipt.admission.state,
+ depositoryAssetPackId: receipt.admission.depositoryAssetPackId,
+ compensationState: receipt.compensationPreview.state,
+ packActivitySyncState: receipt.packsActivitySync.state,
+ packActivityType: receipt.packsActivitySync.activityType,
+ packsRoute: receipt.packsActivitySync.route,
+ },
+ });
+ } catch (error) {
+ setRunsLoadError(
+ error instanceof Error
+ ? error.message
+ : "Unable to record deposit option review.",
+ );
+ }
+ },
+ [
+ depositRouteInput,
+ handleRecordActivity,
+ optionReviewDecisions,
+ preferredSignerAddress,
+ readCurrentSearchParams,
+ replaceDepositSearchParams,
+ user?.id,
+ ],
+ );
+
+ const handleRepositorySourceBranchChange = useCallback(
+ (branch: string) => {
+ const nextParams = readCurrentSearchParams();
+ if (repositoryContext?.provider)
+ nextParams.set("provider", repositoryContext.provider);
+ if (repositoryContext?.selectedRepository?.fullName)
+ nextParams.set("repo", repositoryContext.selectedRepository.fullName);
+ nextParams.set("sourceBranch", branch);
+ nextParams.delete("sourceCommit");
+ nextParams.delete("branch");
+ nextParams.delete("commit");
+ replaceDepositSearchParams(nextParams);
+ },
+ [readCurrentSearchParams, replaceDepositSearchParams, repositoryContext],
+ );
+
+ const handleRepositorySourceCommitChange = useCallback(
+ (commit: string) => {
+ const nextParams = readCurrentSearchParams();
+ if (repositoryContext?.provider)
+ nextParams.set("provider", repositoryContext.provider);
+ if (repositoryContext?.selectedRepository?.fullName)
+ nextParams.set("repo", repositoryContext.selectedRepository.fullName);
+ if (repositoryContext?.selectedBranch)
+ nextParams.set("sourceBranch", repositoryContext.selectedBranch);
+ nextParams.set("sourceCommit", commit);
+ nextParams.delete("branch");
+ nextParams.delete("commit");
+ replaceDepositSearchParams(nextParams);
+ },
+ [readCurrentSearchParams, replaceDepositSearchParams, repositoryContext],
+ );
+
+ return (
+
+
+
+ replaceDepositSearchParams(
+ writeDepositRouteStage(readCurrentSearchParams(), stepId),
+ )
+ }
+ />
+
+
+
+
+
+
+
+
+
+ Option synthesis
+
+
+ Depositor instruction
+
+
+
+
+
+
+ Instructions
+
+
+
+
+ Source path hints
+
+
+ {
+ setOptionsRequested(true);
+ replaceDepositSearchParams(
+ writeDepositRouteStage(
+ readCurrentSearchParams(),
+ "review-options",
+ ),
+ );
+ }}
+ className="mt-4 inline-flex w-full items-center justify-center border border-emerald-300/25 bg-emerald-300/12 px-4 py-3 text-sm font-medium text-emerald-100 transition hover:border-emerald-200/45 hover:bg-emerald-300/18"
+ >
+ Synthesize options
+
+
+
+
+
+
+
+
+
+
+ Options
+
+
+ Source-safe AssetPack proposals
+
+
+ Criticality, demand, ROI, BTD potential, compensation.
+
+
+
+ {depositRouteSession.synthesis.pipeline}
+
+
+
+ {depositRouteSession.synthesis.options.map((option) => {
+ const reviewDecision =
+ optionReviewDecisions[option.optionId] ||
+ "pending-depositor-review";
+ const reviewed =
+ reviewDecision !== "pending-depositor-review";
+ const policyEvaluation =
+ depositRouteSession.policy.evaluations.find(
+ (evaluation) => evaluation.optionId === option.optionId,
+ );
+ const admissionReceipt =
+ depositRouteSession.admission.receipts.find(
+ (receipt) => receipt.optionId === option.optionId,
+ );
+ return (
+
+
+
+ {option.kind}
+
+
+ {option.title}
+
+
+ {option.summary}
+
+
+
+ {policyEvaluation ? (
+ <>
+
+
+ Policy
+
+
+ {policyEvaluation.policyDecision}
+
+
+
+
+
+ Criticality
+
+
+ {policyEvaluation.sourceCriticality.state}
+
+
+
+
+ Demand
+
+
+ {policyEvaluation.demand.state}
+
+
+
+
+
+
+ ROI
+
+
+ {policyEvaluation.roi.state} /{" "}
+ {policyEvaluation.roi.expectedNetSats} sats
+ net
+
+
+
+
+ BTD potential
+
+
+ {policyEvaluation.btdPotential.state}
+
+
+
+
+
+ Compensation
+
+
+ {policyEvaluation.compensation.state} / BTC
+ source-to-shares preview
+
+
+ {admissionReceipt ? (
+
+
+ Admission
+
+
+ {admissionReceipt.admission.state} /{" "}
+ {admissionReceipt.packsActivitySync.state}
+
+
+ ) : null}
+ >
+ ) : null}
+ {option.measurements.map((measurement) => (
+
+
+ {measurement.label}
+
+
+ {(measurement.volume * 100).toFixed(0)}% / weight{" "}
+ {measurement.weight.toFixed(2)}
+
+
+ ))}
+
+
+
+ Option roots
+
+
+ {Object.entries(option.roots).map(
+ ([label, value]) => (
+
+
+ {label}
+
+
+ {value}
+
+
+ ),
+ )}
+
+
+
+
{
+ void handleOptionReviewDecision(
+ option.optionId,
+ "approved-for-admission",
+ );
+ }}
+ className="border border-emerald-300/25 bg-emerald-300/12 px-4 py-3 text-sm font-medium text-emerald-100 transition hover:border-emerald-200/45 hover:bg-emerald-300/18"
+ >
+ {reviewDecision === "approved-for-admission"
+ ? "Approved for Depository"
+ : "Approve for Depository"}
+
+
+ {
+ void handleOptionReviewDecision(
+ option.optionId,
+ "rejected-by-depositor",
+ );
+ }}
+ className="border border-white/10 bg-white/[0.04] px-3 py-2 text-xs font-medium text-neutral-200 transition hover:border-red-300/30 hover:bg-red-300/10"
+ >
+ {reviewDecision === "rejected-by-depositor"
+ ? "Rejected"
+ : "Reject"}
+
+ {
+ void handleOptionReviewDecision(
+ option.optionId,
+ "resynthesis-requested",
+ );
+ }}
+ className="border border-white/10 bg-white/[0.04] px-3 py-2 text-xs font-medium text-neutral-200 transition hover:border-amber-300/30 hover:bg-amber-300/10"
+ >
+ {reviewDecision === "resynthesis-requested"
+ ? "Resynthesis queued"
+ : "Resynthesize"}
+
+
+
+ {reviewed
+ ? reviewDecision.replace(/-/g, " ")
+ : "Pending depositor review"}
+
+
+
+ );
+ })}
+
+
+
+
+
+
+
+
+
+
+
+ Session
+
+
+ Source-safe deposit state
+
+
+
+
+
+ {sessionRows.map((row) => (
+
+
+ {row.label}
+
+
+ {row.value}
+
+
+ ))}
+
+
+
+ Visible: measurements, demand roots, source path roots, policy
+ roots, estimated ROI, BTD potential, compensation metadata.
+ Withheld: raw source, unpaid AssetPack source, prompts,
+ provider responses, settlement private payloads, wallet
+ private material.
+
+
+
+
+
+
+
+
+ Readback
+
+
+ Recent Deposit activity
+
+
+
{
+ void refreshLiveRuns();
+ }}
+ className="inline-flex h-9 w-9 items-center justify-center border border-white/10 bg-white/[0.04] text-neutral-200 transition hover:border-emerald-300/30 hover:bg-emerald-300/10"
+ aria-label="Refresh Deposit activity"
+ >
+
+
+
+ {runsLoadError ? (
+
+ ) : null}
+
+ {recentDepositRuns.length ? (
+ recentDepositRuns.map((run) => (
+
+
+ {run.type}
+ {run.status}
+
+
+ {run.summary || run.id}
+
+
+
+
+ {run.branch || "branch pending"}
+
+
+
+ {shortIdentifier(run.sourceCommit)}
+
+ {formatDate(run.created_at)}
+
+
+ ))
+ ) : (
+
+ )}
+
+
+ Open pack activity
+
+
+
+
+
+
+ );
+}
diff --git a/uapi/app/deposit/deposit-route-model.ts b/uapi/app/deposit/deposit-route-model.ts
new file mode 100644
index 00000000..428fd48c
--- /dev/null
+++ b/uapi/app/deposit/deposit-route-model.ts
@@ -0,0 +1,326 @@
+import {
+ assertDepositAssetPackOptionSynthesisSourceSafe,
+ buildDepositAssetPackOptionSynthesis,
+ type DepositAssetPackOptionSynthesis,
+ type DepositOptionSynthesisRequest,
+} from '@bitcode/pipeline-asset-pack/deposit-asset-pack-options';
+import {
+ assertDepositAssetPackOptionPolicyReportSourceSafe,
+ buildDepositAssetPackOptionPolicyReport,
+ type DepositAssetPackOptionPolicyReport,
+ type DepositOptionCriticalitySignal,
+} from '@bitcode/pipeline-asset-pack/deposit-asset-pack-option-policy';
+import {
+ assertDepositAssetPackOptionAdmissionReportSourceSafe,
+ buildDepositAssetPackOptionAdmissionReport,
+ type DepositAssetPackOptionAdmissionReport,
+ type DepositOptionReviewDecision,
+} from '@bitcode/pipeline-asset-pack/deposit-asset-pack-option-admission';
+
+export type DepositRouteStepId =
+ | 'connect-source'
+ | 'synthesize-options'
+ | 'review-options'
+ | 'submit-deposit'
+ | 'read-depository-state';
+
+export type DepositRouteStepState = 'complete' | 'current' | 'blocked' | 'ready';
+
+export interface DepositRouteSessionInput extends DepositOptionSynthesisRequest {
+ depositStage?: DepositRouteStepId | null;
+ transactionId?: string | null;
+ sourceCriticalitySignals?: DepositOptionCriticalitySignal[] | null;
+ developmentCostSats?: number | null;
+ expectedSettlementSats?: number | null;
+ depositorWalletId?: string | null;
+ optionReviewDecisions?: DepositOptionReviewDecision[] | null;
+ reviewerId?: string | null;
+ hasRepositorySource?: boolean;
+ optionsRequested?: boolean;
+ hasReviewedOption?: boolean;
+ hasSubmittedDeposit?: boolean;
+ hasDepositoryReadback?: boolean;
+}
+
+export interface DepositRouteStep {
+ id: DepositRouteStepId;
+ label: string;
+ state: DepositRouteStepState;
+ lowDetailGuidance: string;
+ blockers: string[];
+}
+
+export interface DepositRouteSession {
+ schema: 'bitcode.deposit.route-session';
+ route: '/deposit';
+ stageCount: 5;
+ activeStepId: DepositRouteStepId;
+ steps: DepositRouteStep[];
+ routeState: {
+ transactionId: string | null;
+ depositStage: DepositRouteStepId | null;
+ repositoryFullName: string | null;
+ sourceBranch: string | null;
+ sourceCommit: string | null;
+ };
+ pipelineOwnership: {
+ depositOptionPipeline: 'DepositAssetPackOptionSynthesis';
+ depositOptionPolicy: 'DepositAssetPackOptionPolicy';
+ depositOptionAdmission: 'DepositAssetPackOptionAdmissionReport';
+ reviewRequiredBeforeDepositAdmission: true;
+ sourceCriticalityDemandRoiPolicyOwnedByGate6: true;
+ sourceCriticalityDemandRoiPolicyDeferredToGate6: true;
+ admissionAndIndexingOwnedByGate7: true;
+ retainedTerminalDebugCompatible: true;
+ };
+ synthesis: DepositAssetPackOptionSynthesis;
+ policy: DepositAssetPackOptionPolicyReport;
+ admission: DepositAssetPackOptionAdmissionReport;
+ disclosure: {
+ sourceSafetyClass: 'source_safe_deposit_option_route_metadata';
+ lowDetailDefault: true;
+ expandableSourceSafeDetail: true;
+ protectedSourceVisible: false;
+ rawSourceTextVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ rawPromptVisible: false;
+ interpolatedPromptVisible: false;
+ rawProviderResponseVisible: false;
+ walletPrivateMaterialVisible: false;
+ };
+ proofRoot: string;
+}
+
+export const DEPOSIT_ROUTE_STEPS: Array<{
+ id: DepositRouteStepId;
+ label: string;
+ lowDetailGuidance: string;
+}> = [
+ {
+ id: 'connect-source',
+ label: 'Connect source',
+ lowDetailGuidance: 'Select repository, branch, commit, and source scope for candidate AssetPack option synthesis.',
+ },
+ {
+ id: 'synthesize-options',
+ label: 'Synthesize AssetPack options',
+ lowDetailGuidance: 'Use source-safe repository context plus demand signals to propose multiple options.',
+ },
+ {
+ id: 'review-options',
+ label: 'Review source-safe options',
+ lowDetailGuidance: 'Inspect measurements, demand posture, and policy boundaries without exposing protected source.',
+ },
+ {
+ id: 'submit-deposit',
+ label: 'Submit deposit',
+ lowDetailGuidance: 'Record approved source supply with wallet and repository readiness through the existing deposit composer.',
+ },
+ {
+ id: 'read-depository-state',
+ label: 'Read depository state',
+ lowDetailGuidance: 'Reread proof roots, searchability, compensation preview, and indexing posture from activity state.',
+ },
+];
+
+const DEPOSIT_ROUTE_STAGE_IDS = DEPOSIT_ROUTE_STEPS.map((step) => step.id);
+
+function stableHash(value: string) {
+ let hash = 2166136261;
+ for (let index = 0; index < value.length; index += 1) {
+ hash ^= value.charCodeAt(index);
+ hash = Math.imul(hash, 16777619);
+ }
+ return (hash >>> 0).toString(16).padStart(8, '0');
+}
+
+function normalizedText(value: string | null | undefined) {
+ const normalized = value?.trim();
+ return normalized ? normalized : null;
+}
+
+function hasReviewDecision(input: DepositRouteSessionInput) {
+ return Boolean(
+ input.hasReviewedOption ||
+ input.optionReviewDecisions?.some((decision) => decision.decision !== 'pending-depositor-review'),
+ );
+}
+
+function resolveActiveStep(input: DepositRouteSessionInput, admittedCount = 0): DepositRouteStepId {
+ if (input.depositStage && DEPOSIT_ROUTE_STAGE_IDS.includes(input.depositStage)) return input.depositStage;
+ if (input.hasDepositoryReadback) return 'read-depository-state';
+ if (input.hasSubmittedDeposit || admittedCount > 0) return 'submit-deposit';
+ if (hasReviewDecision(input)) return 'review-options';
+ if (input.optionsRequested || input.hasRepositorySource) return 'synthesize-options';
+ return 'connect-source';
+}
+
+function stepState(
+ input: DepositRouteSessionInput,
+ stepId: DepositRouteStepId,
+ activeStepId: DepositRouteStepId,
+ admittedCount: number,
+): DepositRouteStepState {
+ const reviewed = hasReviewDecision(input);
+ const submitted = Boolean(input.hasSubmittedDeposit || admittedCount > 0);
+ if (stepId === activeStepId) return 'current';
+ if (stepId === 'connect-source') return input.hasRepositorySource ? 'complete' : 'ready';
+ if (stepId === 'synthesize-options') return input.optionsRequested ? 'complete' : input.hasRepositorySource ? 'ready' : 'blocked';
+ if (stepId === 'review-options') return reviewed ? 'complete' : input.optionsRequested ? 'ready' : 'blocked';
+ if (stepId === 'submit-deposit') return submitted ? 'complete' : reviewed ? 'ready' : 'blocked';
+ return input.hasDepositoryReadback ? 'complete' : submitted ? 'ready' : 'blocked';
+}
+
+function stepBlockers(input: DepositRouteSessionInput, stepId: DepositRouteStepId, admittedCount: number): string[] {
+ const blockers: string[] = [];
+ const reviewed = hasReviewDecision(input);
+ const submitted = Boolean(input.hasSubmittedDeposit || admittedCount > 0);
+ if (stepId !== 'connect-source' && !input.hasRepositorySource) blockers.push('repository source required');
+ if (['review-options', 'submit-deposit', 'read-depository-state'].includes(stepId) && !input.optionsRequested) {
+ blockers.push('deposit AssetPack options required');
+ }
+ if (['submit-deposit', 'read-depository-state'].includes(stepId) && !reviewed) {
+ blockers.push('depositor option review required');
+ }
+ if (['submit-deposit', 'read-depository-state'].includes(stepId) && reviewed && admittedCount === 0) {
+ blockers.push('approved admissible option required');
+ }
+ if (stepId === 'read-depository-state' && !submitted) blockers.push('submitted deposit required');
+ return blockers;
+}
+
+export function readDepositRouteStage(params: URLSearchParams): DepositRouteStepId | null {
+ const stage = params.get('depositStage')?.trim();
+ return DEPOSIT_ROUTE_STAGE_IDS.includes(stage as DepositRouteStepId) ? (stage as DepositRouteStepId) : null;
+}
+
+export function writeDepositRouteStage(params: URLSearchParams, stage: DepositRouteStepId | null) {
+ const next = new URLSearchParams(params.toString());
+ if (stage) next.set('depositStage', stage);
+ else next.delete('depositStage');
+ return next;
+}
+
+export function buildDepositRouteSession(input: DepositRouteSessionInput = {}): DepositRouteSession {
+ const repositoryFullName = normalizedText(input.repositoryFullName);
+ const sourceBranch = normalizedText(input.sourceBranch);
+ const sourceCommit = normalizedText(input.sourceCommit);
+ const synthesis = buildDepositAssetPackOptionSynthesis({
+ repositoryFullName,
+ sourceBranch,
+ sourceCommit,
+ depositorInstructions: input.depositorInstructions,
+ sourcePathHints: input.sourcePathHints,
+ depositoryDemandSignals: input.depositoryDemandSignals,
+ readingDemandSignals: input.readingDemandSignals,
+ existingDepositorySignals: input.existingDepositorySignals,
+ createdAt: input.createdAt,
+ });
+ const policy = buildDepositAssetPackOptionPolicyReport({
+ synthesis,
+ sourceCriticalitySignals: input.sourceCriticalitySignals,
+ developmentCostSats: input.developmentCostSats,
+ expectedSettlementSats: input.expectedSettlementSats,
+ depositorWalletId: input.depositorWalletId,
+ createdAt: input.createdAt,
+ });
+ const admission = buildDepositAssetPackOptionAdmissionReport({
+ synthesis,
+ policy,
+ decisions: input.optionReviewDecisions,
+ reviewerId: input.reviewerId,
+ telemetryRunId: normalizedText(input.transactionId),
+ createdAt: input.createdAt,
+ });
+ const activeStepId = resolveActiveStep(input, admission.admittedCount);
+ const steps = DEPOSIT_ROUTE_STEPS.map((step) => ({
+ ...step,
+ state: stepState(input, step.id, activeStepId, admission.admittedCount),
+ blockers: stepBlockers(input, step.id, admission.admittedCount),
+ }));
+ const seed = JSON.stringify({
+ transactionId: normalizedText(input.transactionId),
+ activeStepId,
+ repositoryFullName,
+ sourceBranch,
+ sourceCommit,
+ synthesisRoot: synthesis.roots.synthesisRoot,
+ policyReportRoot: policy.roots.policyReportRoot,
+ admissionReportRoot: admission.roots.admissionReportRoot,
+ steps: steps.map((step) => ({ id: step.id, state: step.state, blockers: step.blockers })),
+ });
+
+ return {
+ schema: 'bitcode.deposit.route-session',
+ route: '/deposit',
+ stageCount: 5,
+ activeStepId,
+ steps,
+ routeState: {
+ transactionId: normalizedText(input.transactionId),
+ depositStage: input.depositStage || null,
+ repositoryFullName,
+ sourceBranch,
+ sourceCommit,
+ },
+ pipelineOwnership: {
+ depositOptionPipeline: 'DepositAssetPackOptionSynthesis',
+ depositOptionPolicy: 'DepositAssetPackOptionPolicy',
+ depositOptionAdmission: 'DepositAssetPackOptionAdmissionReport',
+ reviewRequiredBeforeDepositAdmission: true,
+ sourceCriticalityDemandRoiPolicyOwnedByGate6: true,
+ sourceCriticalityDemandRoiPolicyDeferredToGate6: true,
+ admissionAndIndexingOwnedByGate7: true,
+ retainedTerminalDebugCompatible: true,
+ },
+ synthesis,
+ policy,
+ admission,
+ disclosure: {
+ sourceSafetyClass: 'source_safe_deposit_option_route_metadata',
+ lowDetailDefault: true,
+ expandableSourceSafeDetail: true,
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ },
+ proofRoot: `deposit-route-session:${stableHash(seed)}`,
+ };
+}
+
+export function assertDepositRouteSessionSourceSafe(session: DepositRouteSession) {
+ const synthesisSafety = assertDepositAssetPackOptionSynthesisSourceSafe(session.synthesis);
+ const policySafety = assertDepositAssetPackOptionPolicyReportSourceSafe(session.policy);
+ const admissionSafety = assertDepositAssetPackOptionAdmissionReportSourceSafe(session.admission);
+ const sourceSafe =
+ synthesisSafety.admitted &&
+ policySafety.admitted &&
+ admissionSafety.admitted &&
+ session.schema === 'bitcode.deposit.route-session' &&
+ session.route === '/deposit' &&
+ session.stageCount === 5 &&
+ session.pipelineOwnership.depositOptionPipeline === 'DepositAssetPackOptionSynthesis' &&
+ session.pipelineOwnership.depositOptionPolicy === 'DepositAssetPackOptionPolicy' &&
+ session.pipelineOwnership.depositOptionAdmission === 'DepositAssetPackOptionAdmissionReport' &&
+ session.pipelineOwnership.reviewRequiredBeforeDepositAdmission === true &&
+ session.pipelineOwnership.sourceCriticalityDemandRoiPolicyOwnedByGate6 === true &&
+ session.pipelineOwnership.sourceCriticalityDemandRoiPolicyDeferredToGate6 === true &&
+ session.pipelineOwnership.admissionAndIndexingOwnedByGate7 === true &&
+ session.disclosure.sourceSafetyClass === 'source_safe_deposit_option_route_metadata' &&
+ session.disclosure.protectedSourceVisible === false &&
+ session.disclosure.rawSourceTextVisible === false &&
+ session.disclosure.unpaidAssetPackSourceVisible === false &&
+ session.disclosure.rawPromptVisible === false &&
+ session.disclosure.interpolatedPromptVisible === false &&
+ session.disclosure.rawProviderResponseVisible === false &&
+ session.disclosure.walletPrivateMaterialVisible === false;
+
+ return {
+ admitted: sourceSafe,
+ reason: sourceSafe ? 'source_safe_deposit_option_route_metadata' : 'deposit_route_source_safety_boundary_violation',
+ };
+}
diff --git a/uapi/app/deposit/page.tsx b/uapi/app/deposit/page.tsx
new file mode 100644
index 00000000..a6f32bc0
--- /dev/null
+++ b/uapi/app/deposit/page.tsx
@@ -0,0 +1,33 @@
+import type { Metadata } from 'next';
+import { Suspense } from 'react';
+
+import PublicShellFrame from '@/app/(root)/components/PublicShellFrame';
+
+import DepositPageClient from './DepositPageClient';
+
+export const metadata: Metadata = {
+ title: 'Bitcode Deposit',
+ description:
+ 'Connect repository source, synthesize source-safe AssetPack deposit options, review measurements, and submit source supply into Bitcode.',
+ alternates: {
+ canonical: '/deposit',
+ },
+};
+
+export default function DepositPage() {
+ return (
+
+
+
+ Loading Depositing...
+
+
+ }
+ >
+
+
+
+ );
+}
diff --git a/uapi/app/exchange/ExchangePageClient.tsx b/uapi/app/exchange/ExchangePageClient.tsx
deleted file mode 100644
index 9d693333..00000000
--- a/uapi/app/exchange/ExchangePageClient.tsx
+++ /dev/null
@@ -1,212 +0,0 @@
-'use client';
-
-import React from 'react';
-import { useCallback, useEffect, useMemo, useState } from 'react';
-import { usePathname, useRouter, useSearchParams } from 'next/navigation';
-
-import type { TransactionDataMode } from '@/components/base/bitcode/execution/bitcode-transaction-types';
-import TerminalTransactionWorkspace from '@/app/terminal/TerminalTransactionWorkspace';
-import {
- mapExecutionHistoryRunToWorkspaceRun,
-} from '@/app/terminal/terminal-activity-history';
-import { TerminalShellBridgeProvider } from '@/app/terminal/terminal-shell-bridge';
-import {
- readTerminalTransactionDetailSection,
- readTerminalTransactionFilters,
- readTerminalTransactionId,
- readTerminalTransactionPagination,
- resetTerminalTransactionFilters,
- writeTerminalTransactionDetailSection,
- writeTerminalTransactionFilters,
- writeTerminalTransactionId,
- writeTerminalTransactionPagination,
-} from '@/app/terminal/terminal-transaction-query';
-import { resolveTerminalTransactionSource } from '@/app/terminal/terminal-transaction-source';
-import type { WorkspaceRun } from '@/app/terminal/terminal-run-data';
-import { isAuxillariesMockMode } from '@/lib/mock-review-mode';
-import { fetchPipelineExecutionHistory } from '@/networking/api-client';
-
-export default function ExchangePageClient() {
- const router = useRouter();
- const pathname = usePathname();
- const searchParams = useSearchParams();
- const routeSearchParams = useMemo(() => new URLSearchParams(searchParams.toString()), [searchParams]);
- const mockMode = isAuxillariesMockMode();
- const selectedTransactionId = useMemo(
- () => readTerminalTransactionId(routeSearchParams),
- [routeSearchParams],
- );
- const selectedTransactionDetailSection = useMemo(
- () => readTerminalTransactionDetailSection(routeSearchParams),
- [routeSearchParams],
- );
- const transactionFilters = useMemo(
- () => readTerminalTransactionFilters(routeSearchParams),
- [routeSearchParams],
- );
- const transactionPagination = useMemo(
- () => readTerminalTransactionPagination(routeSearchParams),
- [routeSearchParams],
- );
- const [liveRuns, setLiveRuns] = useState([]);
- const [isLoadingRuns, setIsLoadingRuns] = useState(!mockMode);
- const [runsLoadError, setRunsLoadError] = useState(null);
-
- const transactionSource = useMemo(
- () =>
- resolveTerminalTransactionSource({
- liveRuns,
- mockMode,
- selectedTransactionId,
- }),
- [liveRuns, mockMode, selectedTransactionId],
- );
- const runs = transactionSource.runs;
- const transactionDataMode: TransactionDataMode = transactionSource.dataMode;
- const runsError = transactionDataMode === 'review-fallback' ? null : runsLoadError;
-
- const replaceExchangeSearchParams = useCallback(
- (nextParams: URLSearchParams) => {
- if (typeof window !== 'undefined' && window.location.pathname !== pathname) return;
- const nextQuery = nextParams.toString();
- router.replace(nextQuery ? `${pathname}?${nextQuery}` : pathname, { scroll: false });
- },
- [pathname, router],
- );
- const readCurrentExchangeSearchParams = useCallback(
- () =>
- typeof window !== 'undefined' && window.location.pathname === pathname
- ? new URLSearchParams(window.location.search)
- : new URLSearchParams(searchParams.toString()),
- [pathname, searchParams],
- );
-
- const replaceExchangeRoute = useCallback(
- (transactionId: string, detailSection = selectedTransactionDetailSection) => {
- const nextParams = writeTerminalTransactionDetailSection(
- writeTerminalTransactionId(readCurrentExchangeSearchParams(), transactionId),
- detailSection,
- );
- replaceExchangeSearchParams(nextParams);
- },
- [readCurrentExchangeSearchParams, replaceExchangeSearchParams, selectedTransactionDetailSection],
- );
-
- const refreshLiveRuns = useCallback(async () => {
- if (mockMode) {
- setLiveRuns([]);
- setIsLoadingRuns(false);
- setRunsLoadError(null);
- return [];
- }
-
- setIsLoadingRuns(true);
- setRunsLoadError(null);
-
- try {
- const history = await fetchPipelineExecutionHistory();
- const nextRuns = history.map(mapExecutionHistoryRunToWorkspaceRun);
- setLiveRuns(nextRuns);
- return nextRuns;
- } catch (error) {
- setLiveRuns([]);
- setRunsLoadError(error instanceof Error ? error.message : 'Unable to load Exchange activity.');
- return [];
- } finally {
- setIsLoadingRuns(false);
- }
- }, [mockMode]);
-
- useEffect(() => {
- void refreshLiveRuns();
- }, [refreshLiveRuns]);
-
- const selectedRun = useMemo(
- () => runs.find((run) => run.id === selectedTransactionId) || runs[0] || null,
- [runs, selectedTransactionId],
- );
-
- const handleTransactionFiltersChange = (nextFilters: typeof transactionFilters) => {
- const nextParams = writeTerminalTransactionPagination(
- writeTerminalTransactionFilters(readCurrentExchangeSearchParams(), nextFilters),
- { page: 1, pageSize: transactionPagination.pageSize },
- );
- replaceExchangeSearchParams(nextParams);
- };
-
- const handleTransactionFiltersReset = () => {
- const nextParams = writeTerminalTransactionPagination(
- resetTerminalTransactionFilters(readCurrentExchangeSearchParams()),
- { page: 1, pageSize: transactionPagination.pageSize },
- );
- replaceExchangeSearchParams(nextParams);
- };
-
- const handleTransactionPaginationChange = (nextPagination: typeof transactionPagination) => {
- replaceExchangeSearchParams(writeTerminalTransactionPagination(readCurrentExchangeSearchParams(), nextPagination));
- };
-
- const handleTransactionDetailSectionChange = (detailSection: typeof selectedTransactionDetailSection) => {
- replaceExchangeSearchParams(writeTerminalTransactionDetailSection(readCurrentExchangeSearchParams(), detailSection));
- };
-
- return (
-
-
-
-
-
-
-
Bitcode Exchange
-
- Read market activity, select an order, and inspect Exchange state
-
-
- The Exchange is the durable activity layer behind Terminal and connected interfaces. Use this
- surface to search market activity, review order history, inspect rights-transfer and pricing
- posture, and read settlement or repair state without entering Terminal write controls.
-
-
-
-
-
Master detail
-
market filters
-
-
-
Order history
-
activity replay
-
-
-
Rights + quote
-
source-safe preview
-
-
-
Settle + repair
-
proof-rooted state
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/uapi/app/exchange/page.tsx b/uapi/app/exchange/page.tsx
index d620f582..eaa8dbda 100644
--- a/uapi/app/exchange/page.tsx
+++ b/uapi/app/exchange/page.tsx
@@ -1,39 +1,22 @@
-import type { Metadata } from 'next';
import { redirect } from 'next/navigation';
-import { Suspense } from 'react';
-import PublicShellFrame from '@/app/(root)/components/PublicShellFrame';
-import { FEATURE_FLAGS } from '@/config/features';
-
-import ExchangePageClient from './ExchangePageClient';
-
-export const metadata: Metadata = {
- title: 'Bitcode Exchange',
- description:
- 'Search Bitcode Exchange activity, select activity rows, and inspect AssetPack evidence, proofs, history, and execution detail.',
- alternates: {
- canonical: '/exchange',
- },
+type ExchangeCompatibilityPageProps = {
+ searchParams?: Record;
};
-export default function ExchangePage() {
- if (FEATURE_FLAGS.DISABLE_EXCHANGE_ROUTE) {
- redirect('/terminal');
+function serializeSearchParams(searchParams: ExchangeCompatibilityPageProps['searchParams']) {
+ const next = new URLSearchParams();
+ for (const [key, value] of Object.entries(searchParams || {})) {
+ if (Array.isArray(value)) {
+ value.forEach((entry) => next.append(key, entry));
+ } else if (value) {
+ next.set(key, value);
+ }
}
+ const query = next.toString();
+ return query ? `?${query}` : '';
+}
- return (
-
-
-
- Loading Bitcode Exchange…
-
-
- }
- >
-
-
-
- );
+export default function ExchangeCompatibilityPage({ searchParams }: ExchangeCompatibilityPageProps) {
+ redirect(`/packs${serializeSearchParams(searchParams)}`);
}
diff --git a/uapi/app/packs/PacksPageClient.tsx b/uapi/app/packs/PacksPageClient.tsx
new file mode 100644
index 00000000..88ab3742
--- /dev/null
+++ b/uapi/app/packs/PacksPageClient.tsx
@@ -0,0 +1,564 @@
+"use client";
+
+import React, { useCallback, useEffect, useMemo, useState } from "react";
+import {
+ ArrowDownWideNarrow,
+ ArrowUpWideNarrow,
+ Package,
+ RefreshCw,
+ Search,
+ ShieldCheck,
+} from "lucide-react";
+import { usePathname, useRouter, useSearchParams } from "next/navigation";
+
+import {
+ ProductRouteShell,
+ ProductRouteStatePanel,
+} from "@/components/base/bitcode/routes/product-route-shell";
+import type {
+ PackActivityDetailProjection,
+ PackActivityRecord,
+ PackActivitySummary,
+ PackActivityType,
+ PackActivitySortDirection,
+ PackActivitySortKey,
+} from "@/components/base/bitcode/activity/pack-activity-model";
+
+type PacksActivityPayload = {
+ ok: boolean;
+ records: PackActivityRecord[];
+ detail: PackActivityDetailProjection | null;
+ summary: PackActivitySummary;
+ error?: string;
+};
+
+const TYPE_OPTIONS: Array<{ value: PackActivityType | "all"; label: string }> =
+ [
+ { value: "all", label: "All activity" },
+ { value: "deposit-option", label: "Deposit options" },
+ { value: "depository-assetpack", label: "Depository AssetPacks" },
+ { value: "read-need-fit-preview", label: "Read previews" },
+ { value: "settled-assetpack", label: "Settled AssetPacks" },
+ { value: "settlement", label: "Settlement" },
+ { value: "compensation", label: "Compensation" },
+ { value: "delivery", label: "Delivery" },
+ { value: "repair", label: "Repair" },
+ { value: "execution", label: "Executions" },
+ { value: "notification", label: "Notifications" },
+ ];
+
+const SORT_OPTIONS: Array<{ value: PackActivitySortKey; label: string }> = [
+ { value: "timestamp", label: "Time" },
+ { value: "title", label: "Title" },
+ { value: "value", label: "Value" },
+ { value: "settlementState", label: "Settlement" },
+ { value: "compensationState", label: "Compensation" },
+ { value: "deliveryState", label: "Delivery" },
+ { value: "repairState", label: "Repair" },
+];
+
+function readParam(params: URLSearchParams, key: string, fallback = "") {
+ return String(params.get(key) || fallback);
+}
+
+function formatTimestamp(value: string | null) {
+ if (!value) return "No timestamp";
+ const date = new Date(value);
+ if (Number.isNaN(date.getTime())) return value;
+ return date.toLocaleString(undefined, {
+ month: "short",
+ day: "numeric",
+ hour: "2-digit",
+ minute: "2-digit",
+ });
+}
+
+function formatCount(value: number) {
+ return new Intl.NumberFormat(undefined, { maximumFractionDigits: 1 }).format(
+ value,
+ );
+}
+
+function formatType(value: PackActivityType) {
+ return TYPE_OPTIONS.find((option) => option.value === value)?.label || value;
+}
+
+function statusPill(value: string | null, fallback = "not recorded") {
+ const label = value || fallback;
+ return (
+
+ {label}
+
+ );
+}
+
+function DetailSection({
+ title,
+ children,
+}: {
+ title: string;
+ children: React.ReactNode;
+}) {
+ return (
+
+
+ {title}
+
+ {children}
+
+ );
+}
+
+export default function PacksPageClient() {
+ const router = useRouter();
+ const pathname = usePathname();
+ const searchParams = useSearchParams();
+ const searchParamsString = searchParams.toString();
+ const routeParams = useMemo(
+ () => new URLSearchParams(searchParamsString),
+ [searchParamsString],
+ );
+ const [records, setRecords] = useState([]);
+ const [detail, setDetail] = useState(
+ null,
+ );
+ const [summary, setSummary] = useState(null);
+ const [isLoading, setIsLoading] = useState(true);
+ const [error, setError] = useState(null);
+
+ const search = readParam(routeParams, "q");
+ const type = readParam(routeParams, "type", "all") as
+ | PackActivityType
+ | "all";
+ const state = readParam(routeParams, "state", "all");
+ const sort = readParam(
+ routeParams,
+ "sort",
+ "timestamp",
+ ) as PackActivitySortKey;
+ const direction = readParam(
+ routeParams,
+ "direction",
+ "desc",
+ ) as PackActivitySortDirection;
+ const detailId = readParam(routeParams, "detailId");
+
+ const writeParams = useCallback(
+ (updates: Record) => {
+ const next = new URLSearchParams(routeParams);
+ for (const [key, value] of Object.entries(updates)) {
+ if (!value || value === "all") next.delete(key);
+ else next.set(key, value);
+ }
+ const query = next.toString();
+ router.replace(query ? `${pathname}?${query}` : pathname, {
+ scroll: false,
+ });
+ },
+ [pathname, routeParams, router],
+ );
+
+ const refresh = useCallback(async () => {
+ setIsLoading(true);
+ setError(null);
+ const params = new URLSearchParams(routeParams);
+ params.set("limit", params.get("limit") || "80");
+
+ try {
+ const response = await fetch(`/api/packs/activity?${params.toString()}`, {
+ headers: { Accept: "application/json" },
+ });
+ const payload = (await response.json()) as PacksActivityPayload;
+ if (!response.ok || !payload.ok) {
+ throw new Error(payload.error || "Unable to read pack activity.");
+ }
+ setRecords(payload.records || []);
+ setDetail(payload.detail || null);
+ setSummary(payload.summary || null);
+ } catch (loadError) {
+ setRecords([]);
+ setDetail(null);
+ setSummary(null);
+ setError(
+ loadError instanceof Error
+ ? loadError.message
+ : "Unable to read pack activity.",
+ );
+ } finally {
+ setIsLoading(false);
+ }
+ }, [routeParams]);
+
+ useEffect(() => {
+ void refresh();
+ }, [refresh]);
+
+ const selectedId = detail?.id || detailId || records[0]?.id || null;
+ const hasRows = records.length > 0;
+ const topTypes = useMemo(
+ () =>
+ summary
+ ? Object.entries(summary.types)
+ .filter(([, count]) => count > 0)
+ .slice(0, 4)
+ : [],
+ [summary],
+ );
+
+ return (
+
+
+
+
+
+ Search pack activity
+
+
+ writeParams({ q: event.currentTarget.value })
+ }
+ className="h-11 w-full border border-white/10 bg-black/30 pl-10 pr-3 text-sm text-neutral-100 outline-none transition placeholder:text-neutral-600 focus:border-emerald-300/45"
+ placeholder="Search titles, measurements, values, proof roots"
+ />
+
+
+ writeParams({ type: event.currentTarget.value })
+ }
+ className="h-11 border border-white/10 bg-black/30 px-3 text-sm text-neutral-200 outline-none focus:border-emerald-300/45"
+ aria-label="Activity type"
+ >
+ {TYPE_OPTIONS.map((option) => (
+
+ {option.label}
+
+ ))}
+
+
+ writeParams({ state: event.currentTarget.value || null })
+ }
+ className="h-11 border border-white/10 bg-black/30 px-3 text-sm text-neutral-200 outline-none placeholder:text-neutral-600 focus:border-emerald-300/45"
+ placeholder="State"
+ aria-label="State filter"
+ />
+
+ writeParams({ sort: event.currentTarget.value })
+ }
+ className="h-11 border border-white/10 bg-black/30 px-3 text-sm text-neutral-200 outline-none focus:border-emerald-300/45"
+ aria-label="Sort column"
+ >
+ {SORT_OPTIONS.map((option) => (
+
+ Sort: {option.label}
+
+ ))}
+
+
+ writeParams({ direction: direction === "asc" ? "desc" : "asc" })
+ }
+ className="inline-flex h-11 items-center justify-center gap-2 border border-emerald-400/25 bg-emerald-400/10 px-4 text-[0.7rem] font-semibold uppercase tracking-[0.18em] text-emerald-100 transition hover:border-emerald-300/45 hover:bg-emerald-400/16"
+ >
+ {direction === "asc" ? (
+
+ ) : (
+
+ )}
+ {direction}
+
+
+
+
+
+
+
+
+ Pack
+
+
+ Type
+
+
+ Value
+
+
+ Settlement
+
+
+ Delivery
+
+
+ Time
+
+
+
+
+ {isLoading ? (
+
+
+
+
+
+ ) : error ? (
+
+
+
+
+
+ ) : hasRows ? (
+ records.map((record) => (
+
+
+ writeParams({ detailId: record.id })}
+ className="block w-full text-left outline-none transition focus-visible:ring-2 focus-visible:ring-emerald-300/55"
+ aria-label={`Inspect ${record.assetPackTitle || record.title}`}
+ >
+
+ {record.assetPackTitle || record.title}
+
+
+ {record.description}
+
+
+ {record.id}
+
+
+
+
+ {formatType(record.type)}
+
+
+ {record.values[0]
+ ? `${record.values[0].amount} ${record.values[0].unit}`
+ : record.measurements[0]
+ ? `${record.measurements[0].value} ${record.measurements[0].unit || ""}`
+ : "not measured"}
+
+
+ {statusPill(record.settlementState)}
+
+
+ {statusPill(record.deliveryState)}
+
+
+ {formatTimestamp(record.timestamp)}
+
+
+ ))
+ ) : (
+
+
+
+
+
+ )}
+
+
+
+
+
+
+ {topTypes.length ? (
+ topTypes.map(([activityType, count]) => (
+
+ {formatType(activityType as PackActivityType)} {count}
+
+ ))
+ ) : (
+ No active type totals
+ )}
+
+
void refresh()}
+ className="inline-flex items-center gap-2 border border-white/10 bg-white/[0.04] px-3 py-2 text-[0.68rem] uppercase tracking-[0.18em] text-neutral-300 transition hover:border-emerald-300/30 hover:text-emerald-100"
+ >
+
+ Refresh
+
+
+
+
+
+ {detail ? (
+
+
+
+
+ Source-safe detail
+
+
+ {detail.title}
+
+
+ {detail.description}
+
+
+
+
+
+
+
Type
+
+ {formatType(detail.type)}
+
+
+
+
State
+
+ {detail.overview.state || "not recorded"}
+
+
+
+
Repository
+
+ {detail.overview.repository || "not recorded"}
+
+
+
+
Time
+
+ {formatTimestamp(detail.timestamp)}
+
+
+
+
+
+
+
+ {detail.measurements.length ? (
+ detail.measurements.map((measurement) => (
+
+
+ {measurement.label}
+
+
+ {measurement.value} {measurement.unit || ""}
+
+
+ ))
+ ) : (
+
+ No source-safe measurements recorded.
+
+ )}
+
+
+
+
+
+
+ {statusPill(
+ detail.states.settlement,
+ "settlement not recorded",
+ )}
+
+
+ {statusPill(
+ detail.states.compensation,
+ "compensation not recorded",
+ )}
+
+
+ {statusPill(
+ detail.states.delivery,
+ "delivery not recorded",
+ )}
+
+
+ {statusPill(detail.states.repair, "repair not recorded")}
+
+
+
+
+
+
+ {detail.proofRoots.length ? (
+ detail.proofRoots.map((proofRoot) => (
+
+
+ {proofRoot.label}
+
+
+ {proofRoot.root}
+
+
+ ))
+ ) : (
+
+ No proof roots recorded.
+
+ )}
+
+
+
+ ) : (
+
+ )}
+
+
+
+ );
+}
diff --git a/uapi/app/packs/page.tsx b/uapi/app/packs/page.tsx
new file mode 100644
index 00000000..1fd29527
--- /dev/null
+++ b/uapi/app/packs/page.tsx
@@ -0,0 +1,33 @@
+import type { Metadata } from 'next';
+import { Suspense } from 'react';
+
+import PublicShellFrame from '@/app/(root)/components/PublicShellFrame';
+
+import PacksPageClient from './PacksPageClient';
+
+export const metadata: Metadata = {
+ title: 'Bitcode Packs',
+ description:
+ 'Search pack activity, inspect source-safe measurements, proof roots, settlement, compensation, delivery, and repair state.',
+ alternates: {
+ canonical: '/packs',
+ },
+};
+
+export default function PacksPage() {
+ return (
+
+
+
+ Loading pack activity...
+
+
+ }
+ >
+
+
+
+ );
+}
diff --git a/uapi/app/read/ReadPageClient.tsx b/uapi/app/read/ReadPageClient.tsx
new file mode 100644
index 00000000..47cf8679
--- /dev/null
+++ b/uapi/app/read/ReadPageClient.tsx
@@ -0,0 +1,576 @@
+"use client";
+
+import Link from "next/link";
+import React from "react";
+import { useCallback, useEffect, useMemo, useState } from "react";
+import {
+ GitBranch,
+ GitCommitHorizontal,
+ RefreshCw,
+ ShieldCheck,
+ Workflow,
+} from "lucide-react";
+import { useRouter, useSearchParams } from "next/navigation";
+
+import { fetchPipelineExecutionHistory } from "@/networking/api-client";
+import type { PipelineExecution } from "@/types/api";
+
+import {
+ ProductRouteDisclosure,
+ ProductRouteShell,
+ ProductRouteStatePanel,
+ ProductRouteStepGrid,
+} from "@/components/base/bitcode/routes/product-route-shell";
+import TerminalDepositReadWorkbench from "@/app/terminal/TerminalDepositReadWorkbench";
+import TerminalRepositoryContextPanel from "@/app/terminal/TerminalRepositoryContextPanel";
+import TerminalReadScenarioPanel from "@/app/terminal/TerminalReadScenarioPanel";
+import { TerminalShellBridgeProvider } from "@/app/terminal/terminal-shell-bridge";
+import type { TerminalDepositedSourceRevision } from "@/app/terminal/terminal-deposit-read-workbench";
+import {
+ buildTerminalExecutionHistoryRequest,
+ mapExecutionHistoryRunToWorkspaceRun,
+ readTerminalRouteError,
+ type TerminalActivityRecordDraft,
+ upsertWorkspaceRun,
+} from "@/app/terminal/terminal-activity-history";
+import type { TerminalRepositoryContextState } from "@/app/terminal/terminal-repository-context";
+import {
+ readTerminalTransactionId,
+ writeTerminalTransactionId,
+} from "@/app/terminal/terminal-transaction-query";
+import { shouldRecoverTerminalTransactionRoute } from "@/app/terminal/terminal-transaction-query";
+import type { WorkspaceRun } from "@/app/terminal/terminal-run-data";
+import { buildReadHref } from "@/app/terminal/terminal-routes";
+
+import {
+ buildReadRouteSession,
+ readReadRouteStage,
+ writeReadRouteStage,
+} from "./read-route-model";
+
+function shortIdentifier(value: string | null | undefined) {
+ if (!value) return "pending";
+ return value.length > 18 ? `${value.slice(0, 12)}...` : value;
+}
+
+function formatDate(value: string | null | undefined) {
+ if (!value) return "pending";
+ const date = new Date(value);
+ if (Number.isNaN(date.getTime())) return value;
+ return date.toLocaleString(undefined, {
+ month: "short",
+ day: "numeric",
+ hour: "2-digit",
+ minute: "2-digit",
+ });
+}
+
+export default function ReadPageClient() {
+ const router = useRouter();
+ const searchParams = useSearchParams();
+ const routeSearchParams = useMemo(
+ () => new URLSearchParams(searchParams.toString()),
+ [searchParams],
+ );
+ const selectedTransactionId = useMemo(
+ () => readTerminalTransactionId(routeSearchParams),
+ [routeSearchParams],
+ );
+ const routeReadingStage = useMemo(
+ () => readReadRouteStage(routeSearchParams),
+ [routeSearchParams],
+ );
+ const [liveRuns, setLiveRuns] = useState([]);
+ const [isLoadingRuns, setIsLoadingRuns] = useState(true);
+ const [runsLoadError, setRunsLoadError] = useState(null);
+ const [repositoryContext, setRepositoryContext] =
+ useState(null);
+
+ const readCurrentSearchParams = useCallback(
+ () =>
+ typeof window !== "undefined" && window.location.pathname === "/read"
+ ? new URLSearchParams(window.location.search)
+ : new URLSearchParams(searchParams.toString()),
+ [searchParams],
+ );
+
+ const replaceReadSearchParams = useCallback(
+ (nextParams: URLSearchParams) => {
+ const query = nextParams.toString();
+ router.replace(buildReadHref(query), { scroll: false });
+ },
+ [router],
+ );
+
+ const replaceReadRouteTransaction = useCallback(
+ (transactionId: string) => {
+ replaceReadSearchParams(
+ writeTerminalTransactionId(readCurrentSearchParams(), transactionId),
+ );
+ },
+ [readCurrentSearchParams, replaceReadSearchParams],
+ );
+
+ const refreshLiveRuns = useCallback(async () => {
+ setIsLoadingRuns(true);
+ setRunsLoadError(null);
+
+ try {
+ const history = await fetchPipelineExecutionHistory();
+ const nextRuns = history.map(mapExecutionHistoryRunToWorkspaceRun);
+ setLiveRuns(nextRuns);
+ return nextRuns;
+ } catch (error) {
+ setLiveRuns([]);
+ setRunsLoadError(
+ error instanceof Error
+ ? error.message
+ : "Unable to load recent Reading activity.",
+ );
+ return [];
+ } finally {
+ setIsLoadingRuns(false);
+ }
+ }, []);
+
+ useEffect(() => {
+ void refreshLiveRuns();
+ }, [refreshLiveRuns]);
+
+ useEffect(() => {
+ if (
+ !shouldRecoverTerminalTransactionRoute({
+ transactionIds: liveRuns.map((run) => run.id),
+ selectedTransactionId,
+ })
+ ) {
+ return;
+ }
+ replaceReadRouteTransaction(liveRuns[0].id);
+ }, [liveRuns, replaceReadRouteTransaction, selectedTransactionId]);
+
+ const selectedRun = useMemo(
+ () =>
+ liveRuns.find((run) => run.id === selectedTransactionId) ||
+ liveRuns[0] ||
+ null,
+ [liveRuns, selectedTransactionId],
+ );
+
+ const depositedSourceRevision =
+ useMemo(() => {
+ const selectedRepository = repositoryContext?.selectedRepository || null;
+ if (!selectedRepository) return null;
+ const selectedBranch =
+ repositoryContext?.selectedBranch ||
+ selectedRepository.defaultBranch ||
+ "main";
+ const matchingSubmission = liveRuns.find(
+ (run) =>
+ run.contextSource === "terminal-deposit-composer" &&
+ run.repository === selectedRepository.fullName &&
+ run.branch === selectedBranch &&
+ Boolean(run.sourceCommit) &&
+ Boolean(run.candidateAssetId),
+ );
+ if (!matchingSubmission?.sourceCommit) return null;
+
+ return {
+ repositoryFullName: selectedRepository.fullName,
+ branch: selectedBranch,
+ commit: matchingSubmission.sourceCommit,
+ activityId: matchingSubmission.id,
+ createdAt: matchingSubmission.created_at,
+ depositAssetId: matchingSubmission.candidateAssetId || null,
+ hasWalletOrAttestationProof: Boolean(
+ matchingSubmission.candidateAssetId,
+ ),
+ hasAssetMeasurementEvidence: Boolean(
+ matchingSubmission.candidateAssetId,
+ ),
+ proofRoot: matchingSubmission.depositProofRoot || null,
+ measurementRoot: matchingSubmission.depositMeasurementRoot || null,
+ reconciliationReadbackRoot:
+ matchingSubmission.depositReconciliationReadbackRoot || null,
+ depositorySearchDocumentRoot:
+ matchingSubmission.depositorySearchDocumentRoot || null,
+ lexicalDocumentRoot: matchingSubmission.lexicalDocumentRoot || null,
+ vectorDocumentRoot: matchingSubmission.vectorDocumentRoot || null,
+ compensationPreviewRoot:
+ matchingSubmission.compensationPreviewRoot || null,
+ sourceToSharesPreviewRoot:
+ matchingSubmission.sourceToSharesPreviewRoot || null,
+ compensationState: matchingSubmission.compensationState || null,
+ compensationAllocationMethod:
+ matchingSubmission.compensationAllocationMethod || null,
+ compensationPriceAsset:
+ matchingSubmission.compensationPriceAsset || null,
+ depositorWalletId: matchingSubmission.depositorWalletId || null,
+ depositoryIndexState: matchingSubmission.depositoryIndexState || null,
+ };
+ }, [liveRuns, repositoryContext]);
+
+ const admittedReadActivityId = useMemo(() => {
+ const selectedRepository = repositoryContext?.selectedRepository || null;
+ if (!selectedRepository) return null;
+ const sourceBranch =
+ depositedSourceRevision?.branch ||
+ repositoryContext?.selectedBranch ||
+ selectedRepository.defaultBranch ||
+ "main";
+ const sourceCommit =
+ depositedSourceRevision?.commit ||
+ repositoryContext?.selectedCommit ||
+ null;
+ const matchingRead = liveRuns.find(
+ (run) =>
+ run.contextSource === "terminal-deposit-read-workbench" &&
+ run.contextWorkbench === "read-admission" &&
+ run.repository === selectedRepository.fullName &&
+ run.branch === sourceBranch &&
+ (!sourceCommit || run.sourceCommit === sourceCommit),
+ );
+ return matchingRead?.id || null;
+ }, [depositedSourceRevision, liveRuns, repositoryContext]);
+
+ const readRouteSession = useMemo(
+ () =>
+ buildReadRouteSession({
+ transactionId: selectedTransactionId || admittedReadActivityId || null,
+ routeReadingStage,
+ repositoryFullName:
+ repositoryContext?.selectedRepository?.fullName || null,
+ sourceBranch:
+ depositedSourceRevision?.branch ||
+ repositoryContext?.selectedBranch ||
+ null,
+ sourceCommit:
+ depositedSourceRevision?.commit ||
+ repositoryContext?.selectedCommit ||
+ null,
+ hasRepositorySource: Boolean(repositoryContext?.selectedRepository),
+ hasReadMeasurement: Boolean(
+ admittedReadActivityId ||
+ selectedRun?.contextWorkbench === "read-admission" ||
+ selectedRun?.transactionLens === "read",
+ ),
+ hasSynthesizedNeed: Boolean(
+ admittedReadActivityId ||
+ selectedRun?.contextSource === "terminal-staged-reading",
+ ),
+ hasAcceptedNeed: Boolean(admittedReadActivityId),
+ findingFitsRunning: Boolean(
+ selectedRun?.type?.includes("asset-pack") &&
+ selectedRun.status === "running",
+ ),
+ hasSourceSafePreview: Boolean(
+ selectedRun?.type?.includes("asset-pack") &&
+ selectedRun.status === "completed",
+ ),
+ hasSettlementReadback: Boolean(
+ selectedRun?.closureFocus?.toLowerCase().includes("settlement"),
+ ),
+ hasDeliveryReadback: Boolean(
+ selectedRun?.closureFocus?.toLowerCase().includes("delivery"),
+ ),
+ }),
+ [
+ admittedReadActivityId,
+ depositedSourceRevision,
+ repositoryContext,
+ routeReadingStage,
+ selectedRun,
+ selectedTransactionId,
+ ],
+ );
+
+ const handleRecordActivity = useCallback(
+ async (draft: TerminalActivityRecordDraft) => {
+ const response = await fetch("/api/executions/history", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(
+ buildTerminalExecutionHistoryRequest(draft, {
+ repositoryContext,
+ fallbackRun: selectedRun,
+ }),
+ ),
+ });
+
+ if (!response.ok) {
+ throw new Error(
+ await readTerminalRouteError(
+ response,
+ "Unable to record Reading activity.",
+ ),
+ );
+ }
+
+ const payload = (await response.json()) as {
+ execution?: PipelineExecution;
+ };
+ if (!payload.execution)
+ throw new Error(
+ "Reading activity response did not include an execution row.",
+ );
+
+ const nextRun = mapExecutionHistoryRunToWorkspaceRun(payload.execution);
+ setLiveRuns((currentRuns) => upsertWorkspaceRun(currentRuns, nextRun));
+ if (draft.selectAfterRecord !== false)
+ replaceReadRouteTransaction(nextRun.id);
+ void refreshLiveRuns();
+ return nextRun;
+ },
+ [
+ refreshLiveRuns,
+ replaceReadRouteTransaction,
+ repositoryContext,
+ selectedRun,
+ ],
+ );
+
+ const recentReadingRuns = useMemo(
+ () =>
+ liveRuns
+ .filter(
+ (run) =>
+ [
+ "terminal-deposit-read-workbench",
+ "terminal-staged-reading",
+ "pipeline-harness",
+ ].includes(run.contextSource || "") ||
+ Boolean(run.type?.includes("pipeline")),
+ )
+ .slice(0, 6),
+ [liveRuns],
+ );
+
+ const sessionRows = [
+ {
+ label: "Repository",
+ value:
+ readRouteSession.routeState.repositoryFullName || "select repository",
+ },
+ {
+ label: "Branch",
+ value: readRouteSession.routeState.sourceBranch || "pending",
+ },
+ {
+ label: "Commit",
+ value: shortIdentifier(readRouteSession.routeState.sourceCommit),
+ },
+ {
+ label: "Transaction",
+ value: shortIdentifier(readRouteSession.routeState.transactionId),
+ },
+ {
+ label: "Need pipeline",
+ value: readRouteSession.pipelineOwnership.readNeedPipeline,
+ },
+ {
+ label: "Fits pipeline",
+ value: readRouteSession.pipelineOwnership.findingFitsPipeline,
+ },
+ ];
+
+ return (
+
+
+
+ replaceReadSearchParams(
+ writeReadRouteStage(readCurrentSearchParams(), stepId),
+ )
+ }
+ />
+
+
+
+
+
+
+
+
+
+ Session
+
+
+ Source-safe read state
+
+
+
+
+
+ {sessionRows.map((row) => (
+
+
+ {row.label}
+
+
+ {row.value}
+
+
+ ))}
+
+
+
+ Visible: Need measurements, fit ids, proof roots, fee quotes,
+ settlement readback, delivery posture. Withheld until paid
+ rights: source-bearing AssetPack contents.
+
+
+
+
+
+
+
+
+ Readback
+
+
+ Recent Reading activity
+
+
+
{
+ void refreshLiveRuns();
+ }}
+ className="inline-flex h-9 w-9 items-center justify-center border border-white/10 bg-white/[0.04] text-neutral-200 transition hover:border-sky-300/30 hover:bg-sky-300/10"
+ aria-label="Refresh Reading activity"
+ >
+
+
+
+ {runsLoadError ? (
+
+ ) : null}
+
+ {recentReadingRuns.length ? (
+ recentReadingRuns.map((run) => (
+
+
+ {run.type}
+ {run.status}
+
+
+ {run.summary || run.id}
+
+
+
+
+ {run.branch || "branch pending"}
+
+
+
+ {shortIdentifier(run.sourceCommit)}
+
+ {formatDate(run.created_at)}
+
+
+ ))
+ ) : (
+
+ )}
+
+
+ Open pack activity
+
+
+
+
+
+
+ );
+}
diff --git a/uapi/app/read/page.tsx b/uapi/app/read/page.tsx
new file mode 100644
index 00000000..b9293203
--- /dev/null
+++ b/uapi/app/read/page.tsx
@@ -0,0 +1,33 @@
+import type { Metadata } from 'next';
+import { Suspense } from 'react';
+
+import PublicShellFrame from '@/app/(root)/components/PublicShellFrame';
+
+import ReadPageClient from './ReadPageClient';
+
+export const metadata: Metadata = {
+ title: 'Bitcode Read',
+ description:
+ 'Request Reading, review synthesized Needs, request Finding Fits, inspect source-safe AssetPack previews, and settle for delivery.',
+ alternates: {
+ canonical: '/read',
+ },
+};
+
+export default function ReadPage() {
+ return (
+
+
+
+ Loading Reading...
+
+
+ }
+ >
+
+
+
+ );
+}
diff --git a/uapi/app/read/read-route-model.ts b/uapi/app/read/read-route-model.ts
new file mode 100644
index 00000000..62920a48
--- /dev/null
+++ b/uapi/app/read/read-route-model.ts
@@ -0,0 +1,201 @@
+import {
+ TERMINAL_ENTERPRISE_READING_FORBIDDEN_FIELDS,
+ TERMINAL_ENTERPRISE_READING_STEPS,
+ assertTerminalEnterpriseReadingUxStateSourceSafe,
+ buildTerminalEnterpriseReadingUxState,
+ type TerminalEnterpriseReadingStepId,
+ type TerminalEnterpriseReadingUxStateInput,
+} from '@/app/terminal/terminal-enterprise-reading-ux-state';
+
+export type ReadRouteStepId = TerminalEnterpriseReadingStepId;
+
+export type ReadRouteSessionInput = TerminalEnterpriseReadingUxStateInput & {
+ repositoryFullName?: string | null;
+ sourceBranch?: string | null;
+ sourceCommit?: string | null;
+ readNeedId?: string | null;
+ assetPackPreviewId?: string | null;
+ settlementQuoteId?: string | null;
+};
+
+export type ReadRouteSession = {
+ schema: 'bitcode.read.route-session';
+ route: '/read';
+ stageCount: 5;
+ activeStepId: ReadRouteStepId;
+ steps: ReturnType['steps'];
+ readObjects: {
+ readRequestRecorded: boolean;
+ synthesizedNeedReviewed: boolean;
+ acceptedNeedPresent: boolean;
+ findingFitsRequested: boolean;
+ sourceSafeAssetPackPreviewPresent: boolean;
+ settlementQuotePresent: boolean;
+ deliveryUnlocked: boolean;
+ };
+ routeState: {
+ transactionId: string | null;
+ readingStage: ReadRouteStepId | null;
+ repositoryFullName: string | null;
+ sourceBranch: string | null;
+ sourceCommit: string | null;
+ readNeedId: string | null;
+ assetPackPreviewId: string | null;
+ settlementQuoteId: string | null;
+ };
+ pipelineOwnership: {
+ readNeedPipeline: 'ReadNeedComprehensionSynthesis';
+ findingFitsPipeline: 'ReadFitsFindingSynthesis';
+ acceptedNeedRequiredBeforeFindingFits: true;
+ previewSourceSafeBeforeSettlement: true;
+ deliveryRequiresPaidReadRights: true;
+ retainedTerminalDebugCompatible: true;
+ };
+ disclosure: {
+ sourceSafetyClass: 'source_safe_read_route_metadata';
+ lowDetailDefault: true;
+ expandableSourceSafeDetail: true;
+ protectedSourceVisible: false;
+ unpaidAssetPackSourceVisible: false;
+ rawPromptVisible: false;
+ interpolatedPromptVisible: false;
+ rawProviderResponseVisible: false;
+ walletPrivateMaterialVisible: false;
+ settlementPrivatePayloadVisible: false;
+ hiddenBeforeSettlement: typeof TERMINAL_ENTERPRISE_READING_FORBIDDEN_FIELDS;
+ };
+ proofRoot: string;
+};
+
+const READ_ROUTE_STAGE_IDS = TERMINAL_ENTERPRISE_READING_STEPS.map((step) => step.id);
+
+function stableHash(value: string) {
+ let hash = 2166136261;
+ for (let index = 0; index < value.length; index += 1) {
+ hash ^= value.charCodeAt(index);
+ hash = Math.imul(hash, 16777619);
+ }
+ return (hash >>> 0).toString(16).padStart(8, '0');
+}
+
+function normalizedText(value: string | null | undefined) {
+ const normalized = value?.trim();
+ return normalized ? normalized : null;
+}
+
+export function readReadRouteStage(params: URLSearchParams): ReadRouteStepId | null {
+ const stage = params.get('readingStage')?.trim();
+ return READ_ROUTE_STAGE_IDS.includes(stage as ReadRouteStepId) ? (stage as ReadRouteStepId) : null;
+}
+
+export function writeReadRouteStage(params: URLSearchParams, stage: ReadRouteStepId | null) {
+ const next = new URLSearchParams(params.toString());
+ if (stage) next.set('readingStage', stage);
+ else next.delete('readingStage');
+ return next;
+}
+
+export function buildReadRouteSession(input: ReadRouteSessionInput = {}): ReadRouteSession {
+ const enterpriseState = buildTerminalEnterpriseReadingUxState(input);
+ const seed = JSON.stringify({
+ activeStepId: enterpriseState.activeStepId,
+ transactionId: enterpriseState.routeState.transactionId,
+ repositoryFullName: normalizedText(input.repositoryFullName),
+ sourceBranch: normalizedText(input.sourceBranch),
+ sourceCommit: normalizedText(input.sourceCommit),
+ readNeedId: normalizedText(input.readNeedId),
+ assetPackPreviewId: normalizedText(input.assetPackPreviewId),
+ settlementQuoteId: normalizedText(input.settlementQuoteId),
+ steps: enterpriseState.steps.map((step) => ({ id: step.id, state: step.state, blockers: step.blockers })),
+ });
+
+ return {
+ schema: 'bitcode.read.route-session',
+ route: '/read',
+ stageCount: 5,
+ activeStepId: enterpriseState.activeStepId,
+ steps: enterpriseState.steps,
+ readObjects: {
+ readRequestRecorded: Boolean(input.hasReadMeasurement),
+ synthesizedNeedReviewed: Boolean(input.hasSynthesizedNeed),
+ acceptedNeedPresent: Boolean(input.hasAcceptedNeed),
+ findingFitsRequested: Boolean(input.findingFitsRunning || input.hasSourceSafePreview),
+ sourceSafeAssetPackPreviewPresent: Boolean(input.hasSourceSafePreview),
+ settlementQuotePresent: Boolean(input.hasSourceSafePreview || input.hasSettlementReadback),
+ deliveryUnlocked: Boolean(input.hasDeliveryReadback),
+ },
+ routeState: {
+ transactionId: enterpriseState.routeState.transactionId,
+ readingStage: enterpriseState.routeState.routeReadingStage,
+ repositoryFullName: normalizedText(input.repositoryFullName),
+ sourceBranch: normalizedText(input.sourceBranch),
+ sourceCommit: normalizedText(input.sourceCommit),
+ readNeedId: normalizedText(input.readNeedId),
+ assetPackPreviewId: normalizedText(input.assetPackPreviewId),
+ settlementQuoteId: normalizedText(input.settlementQuoteId),
+ },
+ pipelineOwnership: {
+ readNeedPipeline: 'ReadNeedComprehensionSynthesis',
+ findingFitsPipeline: 'ReadFitsFindingSynthesis',
+ acceptedNeedRequiredBeforeFindingFits: true,
+ previewSourceSafeBeforeSettlement: true,
+ deliveryRequiresPaidReadRights: true,
+ retainedTerminalDebugCompatible: true,
+ },
+ disclosure: {
+ sourceSafetyClass: 'source_safe_read_route_metadata',
+ lowDetailDefault: true,
+ expandableSourceSafeDetail: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ settlementPrivatePayloadVisible: false,
+ hiddenBeforeSettlement: TERMINAL_ENTERPRISE_READING_FORBIDDEN_FIELDS,
+ },
+ proofRoot: `read-route-session:${stableHash(seed)}`,
+ };
+}
+
+export function assertReadRouteSessionSourceSafe(session: ReadRouteSession) {
+ const enterpriseSafety = assertTerminalEnterpriseReadingUxStateSourceSafe(
+ buildTerminalEnterpriseReadingUxState({
+ transactionId: session.routeState.transactionId,
+ routeReadingStage: session.routeState.readingStage,
+ hasRepositorySource: Boolean(session.routeState.repositoryFullName),
+ hasReadMeasurement: session.readObjects.readRequestRecorded,
+ hasSynthesizedNeed: session.readObjects.synthesizedNeedReviewed,
+ hasAcceptedNeed: session.readObjects.acceptedNeedPresent,
+ hasSourceSafePreview: session.readObjects.sourceSafeAssetPackPreviewPresent,
+ hasSettlementReadback: session.readObjects.settlementQuotePresent,
+ hasDeliveryReadback: session.readObjects.deliveryUnlocked,
+ }),
+ );
+
+ const sourceSafe =
+ enterpriseSafety.admitted &&
+ session.schema === 'bitcode.read.route-session' &&
+ session.route === '/read' &&
+ session.stageCount === 5 &&
+ session.pipelineOwnership.acceptedNeedRequiredBeforeFindingFits === true &&
+ session.pipelineOwnership.previewSourceSafeBeforeSettlement === true &&
+ session.pipelineOwnership.deliveryRequiresPaidReadRights === true &&
+ session.disclosure.sourceSafetyClass === 'source_safe_read_route_metadata' &&
+ session.disclosure.protectedSourceVisible === false &&
+ session.disclosure.unpaidAssetPackSourceVisible === false &&
+ session.disclosure.rawPromptVisible === false &&
+ session.disclosure.interpolatedPromptVisible === false &&
+ session.disclosure.rawProviderResponseVisible === false &&
+ session.disclosure.walletPrivateMaterialVisible === false &&
+ session.disclosure.settlementPrivatePayloadVisible === false &&
+ TERMINAL_ENTERPRISE_READING_FORBIDDEN_FIELDS.every((field) =>
+ session.disclosure.hiddenBeforeSettlement.includes(field),
+ );
+
+ return {
+ admitted: sourceSafe,
+ reason: sourceSafe ? 'source_safe_read_route_metadata' : 'read_route_source_safety_boundary_violation',
+ };
+}
diff --git a/uapi/app/terminal/README.md b/uapi/app/terminal/README.md
index 7867c6b7..20c75c41 100644
--- a/uapi/app/terminal/README.md
+++ b/uapi/app/terminal/README.md
@@ -105,6 +105,62 @@ parses it only as operator posture. The source-safe generated artifact is
`.bitcode/v39-enterprise-reading-ux-state.json`, checked by
`pnpm run check:v39-gate3`.
+V42 Gate 3 extends that state into the current Reading shortest path recovery
+contract. `TerminalEnterpriseReadingRouteState` binds transaction id presence,
+the `readingStage` query parameter, active-stage hydration, retry and restart
+posture, source-safe failure kind, and repair actions. Terminal may restore a
+later stage from route state after refresh or handoff, but blockers still hold:
+accepted Need gates Finding Fits, source-safe AssetPack preview gates
+settlement, and settlement readback gates delivery. The source-safe proof
+artifact is `.bitcode/v42-reading-shortest-path-state-machine.json`, checked by
+`pnpm run check:v42-gate3`.
+
+V42 Gate 4 closes the Terminal ReadNeed review loop. The staged Reading
+surface now keeps `ReadNeedReviewResynthesisRuntime`, storage projection rows,
+telemetry return type, runtime root, storage root, telemetry root, admission
+blockers, and rejected Need posture visible in expandable source-safe detail.
+Terminal exposes synthesize, resynthesize, accept, and reject actions before
+Finding Fits; accepting the Need is the only admission handoff to
+`ReadFitsFindingSynthesis`. The source-safe proof artifact is
+`.bitcode/v42-readneed-review-resynthesis-product-closure.json`, checked by
+`pnpm run check:v42-gate4`.
+
+V42 Gate 5 closes the Terminal Finding Fits preview and quote readback. The
+source-safe preview panel now reads `AssetPackPreviewBoundary` summaries from
+pipeline harness evidence, including selected-fit provenance, deterministic
+quote receipt, settlement instructions, delivery posture, replay root, and
+storage record count. Terminal keeps those rows expandable and metadata-only:
+protected source and unpaid AssetPack source stay withheld until settlement
+and rights-transfer readback. The source-safe proof artifact is
+`.bitcode/v42-readfitsfinding-preview-quote.json`, checked by
+`pnpm run check:v42-gate5`.
+
+V42 Gate 6 closes Terminal Settlement rights readback. The paid-boundary panel
+now reads `AssetPackSettlementRightsDeliveryBoundary` summaries from pipeline
+harness evidence, including BTC payment observation, finality, source-to-shares
+compensation, BTD rights transfer, paid read receipt, source-bearing
+pull-request delivery unlock, ledger/database/object-storage reconciliation,
+replay root, repair posture, and storage record count. Terminal keeps these
+rows expandable and source-safe: it may show that delivery is unlocked for the
+paid Reader after settlement, but it must not expose unpaid AssetPack source,
+protected source, wallet private material, private settlement payloads,
+credentials, raw protected prompts, or raw provider responses. The source-safe
+proof artifact is `.bitcode/v42-settlement-rights-delivery.json`, checked by
+`pnpm run check:v42-gate6`.
+
+V42 Gate 8 closes local/staging full MVP rehearsal readback for Terminal.
+The route remains `/terminal` during V42, but the proof now binds the whole
+MVP chain: deposit source, request read, review synthesized Need, request
+Finding Fits, review source-safe AssetPack preview and quote, buy/settle,
+receive repository delivery, and inspect rich stream telemetry/database
+readback. The source-safe proof artifact is
+`.bitcode/v42-local-staging-mvp-rehearsal.json`, checked by
+`pnpm run check:v42-gate8`. Generated rehearsal data may carry lane ids,
+stage ids, roots, staging-testnet project `tkpyosihuouusyaxtbau`, and repair
+posture; it must not carry protected source, unpaid AssetPack source, raw
+prompts, provider responses, credentials, wallet private material, private
+settlement payloads, or live logs.
+
## Live staging-testnet QA
Terminal Deposit/Read QA starts only after Wallet and Externals prerequisites are
diff --git a/uapi/app/terminal/TerminalDepositComposer.tsx b/uapi/app/terminal/TerminalDepositComposer.tsx
index 2daea862..8e799f7e 100644
--- a/uapi/app/terminal/TerminalDepositComposer.tsx
+++ b/uapi/app/terminal/TerminalDepositComposer.tsx
@@ -44,6 +44,24 @@ type TerminalDepositResponseEvidence = {
depositorySearchDocumentRoot?: string | null;
lexicalDocumentRoot?: string | null;
vectorDocumentRoot?: string | null;
+ compensationPreviewRoot?: string | null;
+ sourceToSharesPreviewRoot?: string | null;
+ compensationPreview?: {
+ state?: string | null;
+ readiness?: {
+ eligibleForFindingFits?: boolean | null;
+ eligibleForCompensationIfSelected?: boolean | null;
+ blockers?: string[] | null;
+ warnings?: string[] | null;
+ } | null;
+ compensationRoute?: {
+ priceAsset?: string | null;
+ allocationMethod?: string | null;
+ sourceToSharesProofState?: string | null;
+ btdMintBoundary?: string | null;
+ btdRightsTransferBoundary?: string | null;
+ } | null;
+ } | null;
depositorBoundary?: {
walletId?: string | null;
} | null;
@@ -318,6 +336,7 @@ export default function TerminalDepositComposer({
depositoryEvidence?: TerminalDepositResponseEvidence | null;
};
const depositoryEvidence = payload.depositoryEvidence || payload.asset?.depositoryEvidence || null;
+ const compensationPreview = depositoryEvidence?.compensationPreview || null;
await runControl((controls) => controls.refresh?.());
setTitle('');
@@ -355,6 +374,15 @@ export default function TerminalDepositComposer({
depositorySearchDocumentRoot: depositoryEvidence?.depositorySearchDocumentRoot || null,
lexicalDocumentRoot: depositoryEvidence?.lexicalDocumentRoot || null,
vectorDocumentRoot: depositoryEvidence?.vectorDocumentRoot || null,
+ compensationPreviewRoot: depositoryEvidence?.compensationPreviewRoot || null,
+ sourceToSharesPreviewRoot: depositoryEvidence?.sourceToSharesPreviewRoot || null,
+ compensationState: compensationPreview?.state || null,
+ compensationAllocationMethod: compensationPreview?.compensationRoute?.allocationMethod || null,
+ compensationPriceAsset: compensationPreview?.compensationRoute?.priceAsset || null,
+ compensationEligibleForFindingFits:
+ compensationPreview?.readiness?.eligibleForFindingFits ?? null,
+ compensationEligibleIfSelected:
+ compensationPreview?.readiness?.eligibleForCompensationIfSelected ?? null,
depositorWalletId: depositoryEvidence?.depositorBoundary?.walletId || null,
depositoryIndexState: depositoryEvidence?.indexState?.vector || depositoryEvidence?.indexState?.lexical || null,
},
@@ -787,6 +815,16 @@ export default function TerminalDepositComposer({
Submitting refreshes the working chain so selected supply, measured demand, fit, and later branch, proof,
and settlement reads stay aligned in the same Bitcode Terminal.
+
+
+
Compensation route
+ BTC source-to-shares preview if this deposit is selected into a paid AssetPack
+
+
+
Pre-fit boundary
+ No BTD mint or source-bearing reader visibility at deposit admission
+
+
diff --git a/uapi/app/terminal/TerminalDepositReadWorkbench.tsx b/uapi/app/terminal/TerminalDepositReadWorkbench.tsx
index 6d0e756b..8e65ae43 100644
--- a/uapi/app/terminal/TerminalDepositReadWorkbench.tsx
+++ b/uapi/app/terminal/TerminalDepositReadWorkbench.tsx
@@ -104,10 +104,29 @@ type TerminalReadNeedState = Record & {
};
};
+type TerminalReadNeedReviewRuntimeState = Record & {
+ schema?: 'bitcode.read-need-review-resynthesis-runtime';
+ runtimeId?: string;
+ action?: string;
+ reviewState?: string;
+ findingFitsAdmission?: {
+ admitted?: boolean;
+ blockers?: string[];
+ };
+ reviewLoop?: Record;
+ proofRoots?: {
+ runtimeRoot?: string;
+ storageRoot?: string;
+ telemetryRoot?: string;
+ readRequestRoot?: string;
+ };
+};
+
interface TerminalDepositReadWorkbenchProps {
repositoryContext?: TerminalRepositoryContextState | null;
depositedSourceRevision?: TerminalDepositedSourceRevision | null;
admittedReadActivityId?: string | null;
+ routeReadingStage?: TerminalEnterpriseReadingStepId | null;
onRecordActivity?: (draft: TerminalActivityRecordDraft) => Promise;
onHarnessCompleted?: () => Promise | unknown;
showDemonstrationWorkbench?: boolean;
@@ -117,6 +136,7 @@ export default function TerminalDepositReadWorkbench({
repositoryContext = null,
depositedSourceRevision = null,
admittedReadActivityId = null,
+ routeReadingStage = null,
onRecordActivity,
onHarnessCompleted,
showDemonstrationWorkbench = true,
@@ -132,9 +152,12 @@ export default function TerminalDepositReadWorkbench({
const [harnessUserHasScrolled, setHarnessUserHasScrolled] = useState(false);
const [readNeed, setReadNeed] = useState(null);
const [acceptedReadNeed, setAcceptedReadNeed] = useState(null);
+ const [readNeedReviewRuntime, setReadNeedReviewRuntime] = useState(null);
+ const [readNeedStorageProjection, setReadNeedStorageProjection] = useState>>([]);
+ const [readNeedTelemetry, setReadNeedTelemetry] = useState | null>(null);
const [readNeedFeedback, setReadNeedFeedback] = useState('');
const [readNeedMessage, setReadNeedMessage] = useState(null);
- const [readNeedAction, setReadNeedAction] = useState<'synthesize' | 'accept' | 'resynthesize' | null>(null);
+ const [readNeedAction, setReadNeedAction] = useState<'synthesize' | 'accept' | 'reject' | 'resynthesize' | null>(null);
const [readNeedSynthesisCount, setReadNeedSynthesisCount] = useState(0);
const workbenchSnapshot = useMemo(() => {
const liveWorkbenchSnapshot = buildLiveTerminalDepositReadWorkbenchSnapshot(repositoryContext, depositedSourceRevision);
@@ -155,6 +178,9 @@ export default function TerminalDepositReadWorkbench({
setHarnessEvents([]);
setReadNeed(null);
setAcceptedReadNeed(null);
+ setReadNeedReviewRuntime(null);
+ setReadNeedStorageProjection([]);
+ setReadNeedTelemetry(null);
setReadNeedFeedback('');
setReadNeedMessage(null);
setReadNeedAction(null);
@@ -285,9 +311,27 @@ export default function TerminalDepositReadWorkbench({
}
return null;
}, [harnessEvents]);
- const sourceSafePreview = objectValue(completedHarnessEvidence?.sourceSafePreview);
+ const assetPackPreviewBoundary = objectValue(completedHarnessEvidence?.assetPackPreviewBoundary);
+ const boundarySourceSafePreview = objectValue(assetPackPreviewBoundary?.sourceSafePreview);
+ const sourceSafePreview =
+ objectValue(completedHarnessEvidence?.sourceSafePreview) ||
+ boundarySourceSafePreview;
+ const assetPackSelectedFitProvenance =
+ objectValue(assetPackPreviewBoundary?.selectedFitProvenance);
+ const assetPackQuoteReceipt =
+ objectValue(assetPackPreviewBoundary?.quoteReceipt) ||
+ objectValue(completedHarnessEvidence?.assetPackQuoteReceipt);
+ const assetPackSettlementInstructions =
+ objectValue(assetPackPreviewBoundary?.settlementInstructions) ||
+ objectValue(completedHarnessEvidence?.assetPackSettlementInstructions);
+ const assetPackDeliveryPosture =
+ objectValue(assetPackPreviewBoundary?.deliveryPosture) ||
+ objectValue(completedHarnessEvidence?.assetPackDeliveryPosture);
+ const assetPackPreviewProofRoots = objectValue(assetPackPreviewBoundary?.proofRoots);
+ const assetPackPreviewReplayReceipt = objectValue(assetPackPreviewBoundary?.replayReceipt);
const assetPackDisclosureReview =
objectValue(completedHarnessEvidence?.assetPackDisclosureReview) ||
+ objectValue(assetPackPreviewBoundary?.disclosureReview) ||
objectValue(sourceSafePreview?.disclosureReview);
const disclosureAccess = objectValue(assetPackDisclosureReview?.access);
const disclosurePolicy = objectValue(assetPackDisclosureReview?.policy);
@@ -295,15 +339,46 @@ export default function TerminalDepositReadWorkbench({
const disclosureRoots = objectValue(assetPackDisclosureReview?.roots);
const disclosureSourceSafe = disclosureLeakage?.protectedSourceDetected !== true;
const ledgerSettlement = objectValue(completedHarnessEvidence?.ledgerSettlement);
- const previewFeeQuote = objectValue(sourceSafePreview?.feeQuote);
+ const assetPackSettlementRightsDeliveryBoundary = objectValue(
+ completedHarnessEvidence?.assetPackSettlementRightsDeliveryBoundary,
+ );
+ const assetPackSettlementPaymentObservation = objectValue(
+ assetPackSettlementRightsDeliveryBoundary?.paymentObservation,
+ );
+ const assetPackSettlementFinalityReceipt = objectValue(
+ assetPackSettlementRightsDeliveryBoundary?.finalityReceipt,
+ );
+ const assetPackSettlementDeliveryUnlock =
+ objectValue(assetPackSettlementRightsDeliveryBoundary?.deliveryUnlock) ||
+ objectValue(completedHarnessEvidence?.assetPackDeliveryUnlock);
+ const assetPackSettlementReplayReceipt =
+ objectValue(assetPackSettlementRightsDeliveryBoundary?.replayReceipt) ||
+ objectValue(completedHarnessEvidence?.assetPackSettlementReplayReceipt);
+ const assetPackSettlementReconciliation =
+ objectValue(assetPackSettlementRightsDeliveryBoundary?.reconciliationReport) ||
+ objectValue(completedHarnessEvidence?.assetPackLedgerDatabaseStorageReconciliation);
+ const assetPackSettlementProofRoots = objectValue(assetPackSettlementRightsDeliveryBoundary?.proofRoots);
+ const readingLocalStagingRehearsal = objectValue(completedHarnessEvidence?.readingLocalStagingRehearsal);
+ const readingLocalStagingCoverage = objectValue(readingLocalStagingRehearsal?.coverage);
+ const readingLocalStagingProofRoots = objectValue(readingLocalStagingRehearsal?.proofRoots);
+ const readingLocalStagingStageReadback = objectValue(readingLocalStagingRehearsal?.stageReadback);
+ const previewFeeQuote =
+ assetPackQuoteReceipt ||
+ objectValue(sourceSafePreview?.feeQuote);
const protectedSourceUnlock =
objectValue(sourceSafePreview?.unlock) ||
objectValue(ledgerSettlement?.protectedSourceUnlock);
const settledReadback = ledgerSettlement?.status === 'settled';
- const pullRequestDelivered = settledReadback && Boolean(textValue(objectValue(sourceSafePreview?.delivery)?.pullRequestTarget));
+ const previewDelivery = objectValue(sourceSafePreview?.delivery);
+ const pullRequestDelivered = settledReadback && Boolean(
+ textValue(previewDelivery?.pullRequestTarget) ||
+ textValue(assetPackDeliveryPosture?.pullRequestTarget),
+ );
const enterpriseReadingState = useMemo(
() =>
buildTerminalEnterpriseReadingUxState({
+ transactionId: recordedAdmittedReadActivityId || harnessReadActivityId || admittedReadActivityId || null,
+ routeReadingStage,
hasRepositorySource: Boolean(workbench?.sourceRevision),
hasReadMeasurement: readFitsFindingProgress !== 'draft' || Boolean(harnessReadActivityId),
hasSynthesizedNeed: Boolean(readNeed),
@@ -312,18 +387,24 @@ export default function TerminalDepositReadWorkbench({
hasSourceSafePreview: Boolean(sourceSafePreview),
hasSettlementReadback: settledReadback,
hasDeliveryReadback: pullRequestDelivered,
+ retryRequested: readNeedSynthesisCount > 1 || harnessState === 'failed',
+ failureKind: harnessState === 'failed' ? 'fits_finding_failed' : null,
sourceSafePreviewBlocked: Boolean(sourceSafePreview && !disclosureSourceSafe),
disclosureLeakageDetected: disclosureLeakage?.protectedSourceDetected === true,
}),
[
acceptedReadNeed,
+ admittedReadActivityId,
disclosureLeakage?.protectedSourceDetected,
disclosureSourceSafe,
harnessReadActivityId,
harnessState,
+ readNeedSynthesisCount,
pullRequestDelivered,
readFitsFindingProgress,
+ recordedAdmittedReadActivityId,
readNeed,
+ routeReadingStage,
settledReadback,
sourceSafePreview,
workbench?.sourceRevision,
@@ -383,6 +464,242 @@ export default function TerminalDepositReadWorkbench({
sourceSafePreview?.accessPolicy,
],
);
+ const assetPackPreviewBoundaryRows = useMemo(
+ () => [
+ {
+ label: 'Boundary',
+ value: shortIdentifier(assetPackPreviewBoundary?.boundaryId) || 'pending',
+ },
+ {
+ label: 'Preview root',
+ value:
+ shortIdentifier(assetPackPreviewProofRoots?.previewRoot) ||
+ shortIdentifier(objectValue(sourceSafePreview?.roots)?.previewRoot) ||
+ 'pending',
+ },
+ {
+ label: 'Quote',
+ value: numericValue(previewFeeQuote?.sats) ? `${String(previewFeeQuote?.sats)} sats` : 'pending',
+ },
+ {
+ label: 'Quote root',
+ value:
+ shortIdentifier(assetPackQuoteReceipt?.quoteRoot) ||
+ shortIdentifier(previewFeeQuote?.quoteRoot) ||
+ 'pending',
+ },
+ {
+ label: 'Formula',
+ value: textValue(assetPackQuoteReceipt?.formula) || textValue(previewFeeQuote?.formula) || 'pending',
+ },
+ {
+ label: 'Deterministic',
+ value: assetPackQuoteReceipt?.deterministic === true ? 'yes' : 'pending',
+ },
+ {
+ label: 'Selected fits',
+ value: stringList(assetPackSelectedFitProvenance?.selectedCandidateAssetIds).join(', ') || 'pending',
+ },
+ {
+ label: 'Fit deposits',
+ value: stringList(assetPackSelectedFitProvenance?.fitDepositAssetIds).join(', ') || 'pending',
+ },
+ {
+ label: 'Provenance root',
+ value:
+ shortIdentifier(assetPackSelectedFitProvenance?.provenanceRoot) ||
+ shortIdentifier(assetPackPreviewProofRoots?.selectedFitProvenanceRoot) ||
+ 'pending',
+ },
+ {
+ label: 'Settlement',
+ value: textValue(assetPackSettlementInstructions?.state) || 'pending',
+ },
+ {
+ label: 'Network',
+ value: textValue(assetPackSettlementInstructions?.btcNetwork) || 'pending',
+ },
+ {
+ label: 'Instructions root',
+ value: shortIdentifier(assetPackSettlementInstructions?.instructionsRoot) || 'pending',
+ },
+ {
+ label: 'Delivery',
+ value: textValue(assetPackDeliveryPosture?.state) || 'pending',
+ },
+ {
+ label: 'Delivery root',
+ value: shortIdentifier(assetPackDeliveryPosture?.deliveryRoot) || 'pending',
+ },
+ {
+ label: 'Replay root',
+ value:
+ shortIdentifier(assetPackPreviewReplayReceipt?.replayRoot) ||
+ shortIdentifier(assetPackPreviewProofRoots?.replayRoot) ||
+ 'pending',
+ },
+ {
+ label: 'Storage records',
+ value: numericValue(assetPackPreviewBoundary?.storageRecordCount)
+ ? String(assetPackPreviewBoundary?.storageRecordCount)
+ : String(countList(assetPackPreviewBoundary?.storageProjection) || 0),
+ },
+ ],
+ [
+ assetPackDeliveryPosture,
+ assetPackPreviewBoundary,
+ assetPackPreviewProofRoots,
+ assetPackPreviewReplayReceipt,
+ assetPackQuoteReceipt,
+ assetPackSelectedFitProvenance,
+ assetPackSettlementInstructions,
+ previewFeeQuote,
+ sourceSafePreview?.roots,
+ ],
+ );
+ const assetPackSettlementBoundaryRows = useMemo(
+ () => [
+ {
+ label: 'Boundary',
+ value: shortIdentifier(assetPackSettlementRightsDeliveryBoundary?.boundaryId) || 'pending',
+ },
+ {
+ label: 'State',
+ value: textValue(assetPackSettlementRightsDeliveryBoundary?.state) || 'pending',
+ },
+ {
+ label: 'Payment',
+ value:
+ numericValue(assetPackSettlementPaymentObservation?.observedDebitSats) &&
+ numericValue(assetPackSettlementPaymentObservation?.expectedSats)
+ ? `${String(assetPackSettlementPaymentObservation?.observedDebitSats)}/${String(assetPackSettlementPaymentObservation?.expectedSats)} sats`
+ : 'pending',
+ },
+ {
+ label: 'Payment root',
+ value: shortIdentifier(assetPackSettlementPaymentObservation?.paymentReceiptRoot) || 'pending',
+ },
+ {
+ label: 'Finality',
+ value: textValue(assetPackSettlementFinalityReceipt?.finalityState) || 'pending',
+ },
+ {
+ label: 'Finality root',
+ value: shortIdentifier(assetPackSettlementFinalityReceipt?.finalityRoot) || 'pending',
+ },
+ {
+ label: 'Source-to-shares',
+ value: shortIdentifier(assetPackSettlementProofRoots?.sourceToSharesRoot) || 'pending',
+ },
+ {
+ label: 'Rights transfer',
+ value: shortIdentifier(assetPackSettlementProofRoots?.rightsTransferRoot) || 'pending',
+ },
+ {
+ label: 'Read receipt',
+ value: shortIdentifier(assetPackSettlementProofRoots?.btdReadReceiptRoot) || 'pending',
+ },
+ {
+ label: 'Delivery unlock',
+ value: textValue(assetPackSettlementDeliveryUnlock?.state) || 'pending',
+ },
+ {
+ label: 'Delivery root',
+ value: shortIdentifier(assetPackSettlementDeliveryUnlock?.deliveryRoot) || 'pending',
+ },
+ {
+ label: 'Reconciliation',
+ value: textValue(assetPackSettlementReconciliation?.state) || 'pending',
+ },
+ {
+ label: 'Reconciliation root',
+ value:
+ shortIdentifier(objectValue(assetPackSettlementReconciliation?.proofRoots)?.repairPlanRoot) ||
+ shortIdentifier(assetPackSettlementProofRoots?.reconciliationRoot) ||
+ 'pending',
+ },
+ {
+ label: 'Replay root',
+ value:
+ shortIdentifier(assetPackSettlementReplayReceipt?.replayRoot) ||
+ shortIdentifier(assetPackSettlementProofRoots?.replayRoot) ||
+ 'pending',
+ },
+ {
+ label: 'Storage records',
+ value: numericValue(assetPackSettlementRightsDeliveryBoundary?.storageRecordCount)
+ ? String(assetPackSettlementRightsDeliveryBoundary?.storageRecordCount)
+ : String(countList(assetPackSettlementRightsDeliveryBoundary?.storageProjection) || 0),
+ },
+ ],
+ [
+ assetPackSettlementDeliveryUnlock,
+ assetPackSettlementFinalityReceipt,
+ assetPackSettlementPaymentObservation,
+ assetPackSettlementProofRoots,
+ assetPackSettlementReconciliation,
+ assetPackSettlementReplayReceipt,
+ assetPackSettlementRightsDeliveryBoundary,
+ ],
+ );
+ const readingLocalStagingRehearsalRows = useMemo(
+ () => [
+ {
+ label: 'Rehearsal',
+ value: shortIdentifier(readingLocalStagingRehearsal?.rehearsalId) || 'pending',
+ },
+ {
+ label: 'Run',
+ value: shortIdentifier(readingLocalStagingRehearsal?.runId) || textValue(readingLocalStagingRehearsal?.runId) || 'pending',
+ },
+ {
+ label: 'Lanes',
+ value: stringList(readingLocalStagingRehearsal?.lanes).join(', ') || 'pending',
+ },
+ {
+ label: 'Stages complete',
+ value: `${Object.values(readingLocalStagingStageReadback || {}).filter((status) => status === 'completed').length}/${String(countList(readingLocalStagingRehearsal?.stageIds) || 0)}`,
+ },
+ {
+ label: 'Staging',
+ value: textValue(readingLocalStagingCoverage?.stagingProjectRef) || 'pending',
+ },
+ {
+ label: 'Many fits',
+ value: readingLocalStagingCoverage?.depositoryManyFitsCovered === true ? 'covered' : 'pending',
+ },
+ {
+ label: 'Telemetry',
+ value: readingLocalStagingCoverage?.telemetryStreamingReadbackCovered === true ? 'readback covered' : 'pending',
+ },
+ {
+ label: 'Sync',
+ value: readingLocalStagingCoverage?.ledgerDatabaseStorageSynchronized === true ? 'aligned' : 'pending',
+ },
+ {
+ label: 'Delivery',
+ value: readingLocalStagingCoverage?.postSettlementPullRequestDeliveryCovered === true ? 'post-settlement PR' : 'pending',
+ },
+ {
+ label: 'Mainnet',
+ value: readingLocalStagingCoverage?.valueBearingMainnetAdmitted === false ? 'blocked' : 'pending',
+ },
+ {
+ label: 'Root',
+ value: shortIdentifier(readingLocalStagingProofRoots?.rehearsalRoot) || 'pending',
+ },
+ {
+ label: 'Rows',
+ value: String(countList(readingLocalStagingRehearsal?.rows) || 'pending'),
+ },
+ ],
+ [
+ readingLocalStagingCoverage,
+ readingLocalStagingProofRoots?.rehearsalRoot,
+ readingLocalStagingRehearsal,
+ readingLocalStagingStageReadback,
+ ],
+ );
const readNeedRows = useMemo(() => {
if (!currentReadNeed) return [];
return [
@@ -400,6 +717,23 @@ export default function TerminalDepositReadWorkbench({
{ label: 'Previous Need', value: shortIdentifier(currentReadNeed.request?.previousNeedId) || currentReadNeed.request?.previousNeedId || 'none' },
];
}, [currentReadNeed]);
+ const readNeedRuntimeRows = useMemo(() => {
+ if (!readNeedReviewRuntime && !readNeedTelemetry && readNeedStorageProjection.length === 0) return [];
+ const admission = objectValue(readNeedReviewRuntime?.findingFitsAdmission);
+ const proofRoots = objectValue(readNeedReviewRuntime?.proofRoots);
+ return [
+ { label: 'Runtime', value: shortIdentifier(readNeedReviewRuntime?.runtimeId) || textValue(readNeedReviewRuntime?.runtimeId) || 'pending' },
+ { label: 'Action', value: textValue(readNeedReviewRuntime?.action) || 'pending' },
+ { label: 'Admission', value: admission?.admitted === true ? 'admitted' : 'blocked' },
+ { label: 'Blockers', value: stringList(admission?.blockers).join(', ') || 'none' },
+ { label: 'Storage records', value: String(readNeedStorageProjection.length || 'pending') },
+ { label: 'Runtime root', value: shortIdentifier(proofRoots?.runtimeRoot) || 'pending' },
+ { label: 'Storage root', value: shortIdentifier(proofRoots?.storageRoot) || 'pending' },
+ { label: 'Telemetry root', value: shortIdentifier(proofRoots?.telemetryRoot || readNeedTelemetry?.telemetryRoot) || 'pending' },
+ { label: 'PTRR step', value: shortIdentifier(readNeedTelemetry?.ptrrStepId) || textValue(readNeedTelemetry?.ptrrStepId) || 'pending' },
+ { label: 'Return type', value: textValue(readNeedTelemetry?.returnType) || 'pending' },
+ ];
+ }, [readNeedReviewRuntime, readNeedStorageProjection, readNeedTelemetry]);
const stageCards = enterpriseReadingState.steps;
const canRunLiveFit =
!showDemonstrationWorkbench &&
@@ -521,6 +855,9 @@ export default function TerminalDepositReadWorkbench({
if (!nextNeed) throw new Error('Read-Need synthesis did not return a typed Need.');
setReadNeed(nextNeed);
setAcceptedReadNeed(null);
+ setReadNeedReviewRuntime(objectValue(payload?.readNeedReviewRuntime) as TerminalReadNeedReviewRuntimeState | null);
+ setReadNeedStorageProjection(Array.isArray(payload?.storageProjection) ? payload.storageProjection as Array> : []);
+ setReadNeedTelemetry(objectValue(payload?.telemetry));
setReadNeedSynthesisCount((count) => count + 1);
setReadNeedMessage(
action === 'synthesize_read_need'
@@ -563,6 +900,9 @@ export default function TerminalDepositReadWorkbench({
}
setAcceptedReadNeed(accepted);
setReadNeed(accepted);
+ setReadNeedReviewRuntime(objectValue(payload?.readNeedReviewRuntime) as TerminalReadNeedReviewRuntimeState | null);
+ setReadNeedStorageProjection(Array.isArray(payload?.storageProjection) ? payload.storageProjection as Array> : []);
+ setReadNeedTelemetry(objectValue(payload?.telemetry));
setReadNeedMessage('Read-Need accepted. Finding Fits can now run against deposited source.');
await onRecordActivity?.({
type: 'agentic-execution:read-measurement',
@@ -594,6 +934,47 @@ export default function TerminalDepositReadWorkbench({
}
}, [onRecordActivity, readNeed]);
+ const handleRejectReadNeed = useCallback(async () => {
+ if (!readNeed) return;
+
+ setReadNeedAction('reject');
+ setReadNeedMessage(null);
+
+ try {
+ const response = await fetch('/api/read-review', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ action: 'reject_read_need',
+ readNeed,
+ feedback: readNeedFeedback.trim() ? [readNeedFeedback.trim()] : [],
+ }),
+ });
+
+ if (!response.ok) {
+ throw new Error(await readTerminalRouteError(response, 'Unable to reject the Read-Need.'));
+ }
+
+ const payload = objectValue(await response.json());
+ const rejected = terminalReadNeed(payload?.rejectedReadNeed || payload?.readNeed);
+ if (!rejected || rejected.reviewState !== 'rejected') {
+ throw new Error('Read-Need rejection did not return a rejected Need.');
+ }
+ setReadNeed(rejected);
+ setAcceptedReadNeed(null);
+ setReadNeedReviewRuntime(objectValue(payload?.readNeedReviewRuntime) as TerminalReadNeedReviewRuntimeState | null);
+ setReadNeedStorageProjection(Array.isArray(payload?.storageProjection) ? payload.storageProjection as Array> : []);
+ setReadNeedTelemetry(objectValue(payload?.telemetry));
+ setReadNeedMessage('Read-Need rejected. Finding Fits remains blocked until a resynthesized Need is accepted.');
+ } catch (error) {
+ setReadNeedMessage(error instanceof Error ? error.message : 'Unable to reject the Read-Need.');
+ } finally {
+ setReadNeedAction(null);
+ }
+ }, [readNeed, readNeedFeedback]);
+
const handleRunLiveFit = useCallback(async () => {
if (!harnessRequestState.ready) {
setHarnessState('failed');
@@ -711,7 +1092,12 @@ export default function TerminalDepositReadWorkbench({
/>
-
+
staged reading
@@ -835,6 +1221,16 @@ export default function TerminalDepositReadWorkbench({
>
{readNeedAction === 'accept' ? 'Accepting…' : 'Accept Read-Need'}
+
{
+ void handleRejectReadNeed();
+ }}
+ className="rounded-[1.2rem] border border-red-300/30 bg-red-300/10 px-4 py-3 text-sm font-medium text-red-100 transition hover:border-red-200/50 hover:bg-red-300/15 disabled:cursor-not-allowed disabled:opacity-55"
+ >
+ {readNeedAction === 'reject' ? 'Rejecting…' : 'Reject Read-Need'}
+
(
{row.label}
@@ -869,6 +1265,45 @@ export default function TerminalDepositReadWorkbench({
))}
+
+
+ Finding Fits preview, quote, and provenance
+
+
+ {assetPackPreviewBoundaryRows.map((row) => (
+
+
{row.label}
+ {row.value}
+
+ ))}
+
+
+
+
+ Settlement rights, compensation, and delivery
+
+
+ {assetPackSettlementBoundaryRows.map((row) => (
+
+
{row.label}
+ {row.value}
+
+ ))}
+
+
+
+
+ Local/staging MVP rehearsal
+
+
+ {readingLocalStagingRehearsalRows.map((row) => (
+
+
{row.label}
+ {row.value}
+
+ ))}
+
+
@@ -903,6 +1338,36 @@ export default function TerminalDepositReadWorkbench({
))}
) : null}
+
+ {readNeedRuntimeRows.length ? (
+
+
+ Need runtime, storage, and telemetry
+
+
+ {readNeedRuntimeRows.map((row) => (
+
+
{row.label}
+ {row.value}
+
+ ))}
+
+ {readNeedStorageProjection.length ? (
+
+ {readNeedStorageProjection.map((record, index) => (
+
+
+ {textValue(record.recordKind) || 'storage record'}
+
+
+ {shortIdentifier(record.root) || textValue(record.root) || 'pending'}
+
+
+ ))}
+
+ ) : null}
+
+ ) : null}
diff --git a/uapi/app/terminal/TerminalPageClient.tsx b/uapi/app/terminal/TerminalPageClient.tsx
index 37437b67..f33d3aa2 100644
--- a/uapi/app/terminal/TerminalPageClient.tsx
+++ b/uapi/app/terminal/TerminalPageClient.tsx
@@ -329,6 +329,11 @@ export default function TerminalPageClient() {
depositorySearchDocumentRoot: matchingSubmission.depositorySearchDocumentRoot || null,
lexicalDocumentRoot: matchingSubmission.lexicalDocumentRoot || null,
vectorDocumentRoot: matchingSubmission.vectorDocumentRoot || null,
+ compensationPreviewRoot: matchingSubmission.compensationPreviewRoot || null,
+ sourceToSharesPreviewRoot: matchingSubmission.sourceToSharesPreviewRoot || null,
+ compensationState: matchingSubmission.compensationState || null,
+ compensationAllocationMethod: matchingSubmission.compensationAllocationMethod || null,
+ compensationPriceAsset: matchingSubmission.compensationPriceAsset || null,
depositorWalletId: matchingSubmission.depositorWalletId || null,
depositoryIndexState: matchingSubmission.depositoryIndexState || null,
};
@@ -686,6 +691,7 @@ export default function TerminalPageClient() {
repositoryContext={repositoryContext}
depositedSourceRevision={depositedSourceRevision}
admittedReadActivityId={admittedReadActivityId}
+ routeReadingStage={conversationHandoffContext.readingStage}
onRecordActivity={handleRecordActivity}
onHarnessCompleted={refreshLiveRuns}
showDemonstrationWorkbench={showDemonstrationSurfaces}
diff --git a/uapi/app/terminal/TerminalRepositoryContextPanel.tsx b/uapi/app/terminal/TerminalRepositoryContextPanel.tsx
index 06fd89c4..5da5e083 100644
--- a/uapi/app/terminal/TerminalRepositoryContextPanel.tsx
+++ b/uapi/app/terminal/TerminalRepositoryContextPanel.tsx
@@ -60,12 +60,16 @@ interface TerminalRepositoryContextPanelProps {
preferredRepository?: string | null;
onContextChange?: (context: TerminalRepositoryContextState) => void;
onRecordActivity?: (draft: TerminalActivityRecordDraft) => Promise;
+ routePath?: string;
+ buildRouteHref?: (params?: URLSearchParams | string | null) => string;
}
export default function TerminalRepositoryContextPanel({
preferredRepository,
onContextChange,
onRecordActivity,
+ routePath = TERMINAL_ROUTE,
+ buildRouteHref = buildTerminalHref,
}: TerminalRepositoryContextPanelProps) {
const router = useRouter();
const pathname = usePathname();
@@ -322,12 +326,12 @@ export default function TerminalRepositoryContextPanel({
useEffect(() => {
const hasRouteContext =
typeof window !== 'undefined'
- ? window.location.pathname === TERMINAL_ROUTE && window.location.search.length > 1
+ ? window.location.pathname === routePath && window.location.search.length > 1
: searchParams.toString().length > 0;
if (!hasRouteContext) return;
const nextParams =
- typeof window !== 'undefined' && window.location.pathname === TERMINAL_ROUTE
+ typeof window !== 'undefined' && window.location.pathname === routePath
? new URLSearchParams(window.location.search)
: new URLSearchParams(searchParams.toString());
let changed = false;
@@ -384,8 +388,8 @@ export default function TerminalRepositoryContextPanel({
}
if (!changed) return;
- if (typeof window !== 'undefined' && window.location.pathname !== TERMINAL_ROUTE) return;
- router.replace(buildTerminalHref(nextParams), { scroll: false });
+ if (typeof window !== 'undefined' && window.location.pathname !== routePath) return;
+ router.replace(buildRouteHref(nextParams), { scroll: false });
}, [
isLoadingBranches,
isLoadingCommits,
@@ -396,6 +400,8 @@ export default function TerminalRepositoryContextPanel({
selectedBranch,
selectedCommit,
selectedRepository,
+ routePath,
+ buildRouteHref,
]);
const refreshRepositoryContext = () => {
@@ -488,8 +494,8 @@ export default function TerminalRepositoryContextPanel({
nextParams.delete('sourceCommit');
nextParams.delete('branch');
nextParams.delete('commit');
- if (typeof window !== 'undefined' && window.location.pathname !== TERMINAL_ROUTE) return;
- router.replace(buildTerminalHref(nextParams), { scroll: false });
+ if (typeof window !== 'undefined' && window.location.pathname !== routePath) return;
+ router.replace(buildRouteHref(nextParams), { scroll: false });
}}
className={`rounded-full border px-3 py-2 text-[0.72rem] uppercase tracking-[0.18em] transition ${
isActive
@@ -521,8 +527,8 @@ export default function TerminalRepositoryContextPanel({
nextParams.delete('sourceCommit');
nextParams.delete('branch');
nextParams.delete('commit');
- if (typeof window !== 'undefined' && window.location.pathname !== TERMINAL_ROUTE) return;
- router.replace(buildTerminalHref(nextParams), { scroll: false });
+ if (typeof window !== 'undefined' && window.location.pathname !== routePath) return;
+ router.replace(buildRouteHref(nextParams), { scroll: false });
}}
placeholder={
connectionStatus?.connected
@@ -572,8 +578,8 @@ export default function TerminalRepositoryContextPanel({
nextParams.delete('sourceCommit');
nextParams.delete('branch');
nextParams.delete('commit');
- if (typeof window !== 'undefined' && window.location.pathname !== TERMINAL_ROUTE) return;
- router.replace(buildTerminalHref(nextParams), { scroll: false });
+ if (typeof window !== 'undefined' && window.location.pathname !== routePath) return;
+ router.replace(buildRouteHref(nextParams), { scroll: false });
}}
className="mt-3 w-full rounded-xl border border-white/10 bg-[rgba(10,15,30,0.88)] px-3 py-3 text-sm text-white outline-none transition focus:border-emerald-400/40 disabled:cursor-not-allowed disabled:opacity-60"
>
@@ -607,8 +613,8 @@ export default function TerminalRepositoryContextPanel({
nextParams.set('sourceCommit', event.target.value);
nextParams.delete('branch');
nextParams.delete('commit');
- if (typeof window !== 'undefined' && window.location.pathname !== TERMINAL_ROUTE) return;
- router.replace(buildTerminalHref(nextParams), { scroll: false });
+ if (typeof window !== 'undefined' && window.location.pathname !== routePath) return;
+ router.replace(buildRouteHref(nextParams), { scroll: false });
}}
className="mt-3 w-full rounded-xl border border-white/10 bg-[rgba(10,15,30,0.88)] px-3 py-3 text-sm text-white outline-none transition focus:border-emerald-400/40 disabled:cursor-not-allowed disabled:opacity-60"
>
diff --git a/uapi/app/terminal/TerminalSupplySelectionPanel.tsx b/uapi/app/terminal/TerminalSupplySelectionPanel.tsx
index ad0cd970..d646b671 100644
--- a/uapi/app/terminal/TerminalSupplySelectionPanel.tsx
+++ b/uapi/app/terminal/TerminalSupplySelectionPanel.tsx
@@ -29,6 +29,7 @@ import { buildTerminalHref } from './terminal-routes';
interface TerminalSupplySelectionPanelProps {
repositoryContext?: TerminalRepositoryContextState | null;
onRecordActivity?: (draft: TerminalActivityRecordDraft) => Promise;
+ buildRouteHref?: (params?: URLSearchParams | string | null) => string;
}
function formatRepositoryOptionLabel(
@@ -49,6 +50,7 @@ function formatSelectedCommit(value?: string | null) {
export default function TerminalSupplySelectionPanel({
repositoryContext = null,
onRecordActivity,
+ buildRouteHref = buildTerminalHref,
}: TerminalSupplySelectionPanelProps) {
const router = useRouter();
const searchParams = useSearchParams();
@@ -113,7 +115,7 @@ export default function TerminalSupplySelectionPanel({
nextParams.delete('sourceCommit');
nextParams.delete('branch');
nextParams.delete('commit');
- router.replace(buildTerminalHref(nextParams), { scroll: false });
+ router.replace(buildRouteHref(nextParams), { scroll: false });
};
const selectRepositoryEntry = (entryId: string) => {
diff --git a/uapi/app/terminal/terminal-activity-history.ts b/uapi/app/terminal/terminal-activity-history.ts
index 5fde0e8d..900da747 100644
--- a/uapi/app/terminal/terminal-activity-history.ts
+++ b/uapi/app/terminal/terminal-activity-history.ts
@@ -678,6 +678,23 @@ export function mapExecutionHistoryRunToWorkspaceRun(run: PipelineExecution): Wo
contextString('lexicalDocumentRoot') || readNestedString(run.output, ['depositoryEvidence', 'lexicalDocumentRoot']),
vectorDocumentRoot:
contextString('vectorDocumentRoot') || readNestedString(run.output, ['depositoryEvidence', 'vectorDocumentRoot']),
+ compensationPreviewRoot:
+ contextString('compensationPreviewRoot') ||
+ readNestedString(run.output, ['depositoryEvidence', 'compensationPreviewRoot']) ||
+ readNestedString(run.output, ['depositoryEvidence', 'compensationPreview', 'roots', 'compensationPreviewRoot']),
+ sourceToSharesPreviewRoot:
+ contextString('sourceToSharesPreviewRoot') ||
+ readNestedString(run.output, ['depositoryEvidence', 'sourceToSharesPreviewRoot']) ||
+ readNestedString(run.output, ['depositoryEvidence', 'compensationPreview', 'roots', 'sourceToSharesPreviewRoot']),
+ compensationState:
+ contextString('compensationState') ||
+ readNestedString(run.output, ['depositoryEvidence', 'compensationPreview', 'state']),
+ compensationAllocationMethod:
+ contextString('compensationAllocationMethod') ||
+ readNestedString(run.output, ['depositoryEvidence', 'compensationPreview', 'compensationRoute', 'allocationMethod']),
+ compensationPriceAsset:
+ contextString('compensationPriceAsset') ||
+ readNestedString(run.output, ['depositoryEvidence', 'compensationPreview', 'compensationRoute', 'priceAsset']),
depositorWalletId:
contextString('depositorWalletId') ||
readNestedString(run.output, ['depositoryEvidence', 'depositorBoundary', 'walletId']),
diff --git a/uapi/app/terminal/terminal-deposit-read-workbench.ts b/uapi/app/terminal/terminal-deposit-read-workbench.ts
index 4f6c6b9c..c8aa08eb 100644
--- a/uapi/app/terminal/terminal-deposit-read-workbench.ts
+++ b/uapi/app/terminal/terminal-deposit-read-workbench.ts
@@ -33,6 +33,11 @@ export type TerminalDepositedSourceRevision = TerminalSourceRevision & {
depositorySearchDocumentRoot?: string | null;
lexicalDocumentRoot?: string | null;
vectorDocumentRoot?: string | null;
+ compensationPreviewRoot?: string | null;
+ sourceToSharesPreviewRoot?: string | null;
+ compensationState?: string | null;
+ compensationAllocationMethod?: string | null;
+ compensationPriceAsset?: string | null;
depositorWalletId?: string | null;
depositoryIndexState?: string | null;
};
@@ -94,6 +99,11 @@ type ShellSnapshot = {
depositorySearchDocumentRoot?: string | null;
lexicalDocumentRoot?: string | null;
vectorDocumentRoot?: string | null;
+ compensationPreviewRoot?: string | null;
+ sourceToSharesPreviewRoot?: string | null;
+ compensationState?: string | null;
+ compensationAllocationMethod?: string | null;
+ compensationPriceAsset?: string | null;
depositorWalletId?: string | null;
depositoryIndexState?: string | null;
} | null;
@@ -232,6 +242,11 @@ export function buildLiveTerminalDepositReadWorkbenchSnapshot(
depositorySearchDocumentRoot: matchingDepositedRevision?.depositorySearchDocumentRoot || null,
lexicalDocumentRoot: matchingDepositedRevision?.lexicalDocumentRoot || null,
vectorDocumentRoot: matchingDepositedRevision?.vectorDocumentRoot || null,
+ compensationPreviewRoot: matchingDepositedRevision?.compensationPreviewRoot || null,
+ sourceToSharesPreviewRoot: matchingDepositedRevision?.sourceToSharesPreviewRoot || null,
+ compensationState: matchingDepositedRevision?.compensationState || null,
+ compensationAllocationMethod: matchingDepositedRevision?.compensationAllocationMethod || null,
+ compensationPriceAsset: matchingDepositedRevision?.compensationPriceAsset || null,
depositorWalletId: matchingDepositedRevision?.depositorWalletId || null,
depositoryIndexState: matchingDepositedRevision?.depositoryIndexState || null,
},
@@ -406,6 +421,11 @@ export function normalizeTerminalDepositReadWorkbench(
const depositorySearchDocumentRoot = textValue(snapshot.depositingSurface?.depositorySearchDocumentRoot);
const lexicalDocumentRoot = textValue(snapshot.depositingSurface?.lexicalDocumentRoot);
const vectorDocumentRoot = textValue(snapshot.depositingSurface?.vectorDocumentRoot);
+ const compensationPreviewRoot = textValue(snapshot.depositingSurface?.compensationPreviewRoot);
+ const sourceToSharesPreviewRoot = textValue(snapshot.depositingSurface?.sourceToSharesPreviewRoot);
+ const compensationState = textValue(snapshot.depositingSurface?.compensationState);
+ const compensationAllocationMethod = textValue(snapshot.depositingSurface?.compensationAllocationMethod);
+ const compensationPriceAsset = textValue(snapshot.depositingSurface?.compensationPriceAsset);
const depositorWalletId = textValue(snapshot.depositingSurface?.depositorWalletId);
const depositoryIndexState = textValue(snapshot.depositingSurface?.depositoryIndexState);
const sourceProofRootCount = [
@@ -418,6 +438,10 @@ export function normalizeTerminalDepositReadWorkbench(
lexicalDocumentRoot,
vectorDocumentRoot,
].filter(Boolean).length;
+ const compensationRootCount = [
+ compensationPreviewRoot,
+ sourceToSharesPreviewRoot,
+ ].filter(Boolean).length;
const sourceRevisionRepository = textValue(snapshot.sourceRevision?.repositoryFullName) || repositoryLabel;
const sourceRevisionBranch =
textValue(snapshot.sourceRevision?.branch) ||
@@ -448,6 +472,7 @@ export function normalizeTerminalDepositReadWorkbench(
},
{ label: 'Source proof roots', value: numberValue(sourceProofRootCount) },
{ label: 'Search document roots', value: numberValue(searchDocumentRootCount) },
+ { label: 'Compensation roots', value: numberValue(compensationRootCount) },
]
: [
{ label: 'Selected refs', value: numberValue(snapshot.inventory?.selectedCount) },
@@ -456,6 +481,7 @@ export function normalizeTerminalDepositReadWorkbench(
{ label: 'Authenticated repos', value: numberValue(snapshot.repoSupplySummary?.repoCount) },
{ label: 'Source proof roots', value: numberValue(sourceProofRootCount) },
{ label: 'Search document roots', value: numberValue(searchDocumentRootCount) },
+ { label: 'Compensation roots', value: numberValue(compensationRootCount) },
];
return {
@@ -547,6 +573,26 @@ export function normalizeTerminalDepositReadWorkbench(
label: 'Vector document root',
value: vectorDocumentRoot || '—',
},
+ {
+ label: 'Compensation state',
+ value: compensationState || '—',
+ },
+ {
+ label: 'Compensation asset',
+ value: compensationPriceAsset || '—',
+ },
+ {
+ label: 'Source-to-shares method',
+ value: compensationAllocationMethod || '—',
+ },
+ {
+ label: 'Compensation preview root',
+ value: compensationPreviewRoot || '—',
+ },
+ {
+ label: 'Source-to-shares preview root',
+ value: sourceToSharesPreviewRoot || '—',
+ },
{
label: 'Depository index',
value: depositoryIndexState || '—',
diff --git a/uapi/app/terminal/terminal-enterprise-reading-ux-state.ts b/uapi/app/terminal/terminal-enterprise-reading-ux-state.ts
index 54911805..bcf7c869 100644
--- a/uapi/app/terminal/terminal-enterprise-reading-ux-state.ts
+++ b/uapi/app/terminal/terminal-enterprise-reading-ux-state.ts
@@ -7,6 +7,16 @@ export type TerminalEnterpriseReadingStepId =
export type TerminalEnterpriseReadingStepState = 'complete' | 'current' | 'blocked';
+export type TerminalEnterpriseReadingFailureKind =
+ | 'none'
+ | 'read_request_invalid'
+ | 'need_review_required'
+ | 'fits_finding_failed'
+ | 'asset_pack_preview_blocked'
+ | 'settlement_blocked'
+ | 'delivery_blocked'
+ | 'source_safety_blocked';
+
export type TerminalEnterpriseReadingSourceSafeField =
| 'read_request_summary'
| 'read_need_measurements'
@@ -46,6 +56,8 @@ export type TerminalEnterpriseReadingStepView = TerminalEnterpriseReadingStepDef
};
export type TerminalEnterpriseReadingUxStateInput = {
+ transactionId?: string | null;
+ routeReadingStage?: TerminalEnterpriseReadingStepId | null;
hasRepositorySource?: boolean;
hasReadMeasurement?: boolean;
hasSynthesizedNeed?: boolean;
@@ -54,10 +66,30 @@ export type TerminalEnterpriseReadingUxStateInput = {
hasSourceSafePreview?: boolean;
hasSettlementReadback?: boolean;
hasDeliveryReadback?: boolean;
+ retryRequested?: boolean;
+ restartRequested?: boolean;
+ failureKind?: TerminalEnterpriseReadingFailureKind | null;
sourceSafePreviewBlocked?: boolean;
disclosureLeakageDetected?: boolean;
};
+export type TerminalEnterpriseReadingRouteState = {
+ transactionId: string | null;
+ transactionIdPresent: boolean;
+ transactionIdRequiredForRecovery: true;
+ readingStageQueryParam: 'readingStage';
+ activeStageHydratedFromRoute: boolean;
+ routeReadingStage: TerminalEnterpriseReadingStepId | null;
+ restartRequested: boolean;
+ restartRestoresActiveStage: true;
+ retryRequested: boolean;
+ retryPreservesNeedLineage: true;
+ retryPreservesSettlementBoundary: true;
+ failureKind: TerminalEnterpriseReadingFailureKind;
+ failureStateSourceSafe: true;
+ failureRepairActions: string[];
+};
+
export type TerminalEnterpriseReadingUxState = {
schema: 'bitcode.terminal.enterprise-reading-ux-state';
activeStepId: TerminalEnterpriseReadingStepId;
@@ -78,10 +110,15 @@ export type TerminalEnterpriseReadingUxState = {
routeContract: {
terminalOwnsTransactionAuthority: true;
conversationMayHandoffIntent: true;
+ transactionRouteRequiredForRecovery: true;
acceptedNeedRequiredBeforeFindingFits: true;
sourceSafePreviewRequiredBeforeSettlement: true;
deliveryRequiresSettlementUnlock: true;
+ restartRestoresReadingStage: true;
+ retryPreservesSourceSafeLineage: true;
+ failureStatesSourceSafe: true;
};
+ routeState: TerminalEnterpriseReadingRouteState;
proofRoot: string;
};
@@ -102,7 +139,7 @@ export const TERMINAL_ENTERPRISE_READING_STEPS: TerminalEnterpriseReadingStepDef
label: '1. Request Read',
lowDetailGuidance: 'Frame repository, branch, commit, and the reader request.',
expandableDetail:
- 'Terminal captures source anchors, enterprise intent, constraints, disclosure posture, target artifact kinds, and the measured Read posture that can be reviewed before Need synthesis.',
+ 'Reading captures source anchors, enterprise intent, constraints, disclosure posture, target artifact kinds, and the measured Read posture that can be reviewed before Need synthesis.',
primaryAction: 'Record read posture',
sourceSafeVisibleFields: ['read_request_summary', 'proof_roots'],
forbiddenFields: TERMINAL_ENTERPRISE_READING_FORBIDDEN_FIELDS,
@@ -124,7 +161,7 @@ export const TERMINAL_ENTERPRISE_READING_STEPS: TerminalEnterpriseReadingStepDef
label: '3. Request Finding Fits',
lowDetailGuidance: 'Run Finding Fits only from an accepted Need.',
expandableDetail:
- 'Terminal hands the accepted Need, deposit/source anchors, proof roots, measurement roots, and source-safe search posture to ReadFitsFindingSynthesis without exposing protected deposit source.',
+ 'Reading hands the accepted Need, deposit/source anchors, proof roots, measurement roots, and source-safe search posture to ReadFitsFindingSynthesis without exposing protected deposit source.',
primaryAction: 'Request Finding Fits',
sourceSafeVisibleFields: ['read_need_measurements', 'depository_candidate_counts', 'proof_roots'],
forbiddenFields: TERMINAL_ENTERPRISE_READING_FORBIDDEN_FIELDS,
@@ -183,6 +220,47 @@ export function inferTerminalEnterpriseReadingActiveStep(
return 'request-read';
}
+function normalizeTransactionId(value: string | null | undefined): string | null {
+ const normalized = value?.trim();
+ return normalized ? normalized : null;
+}
+
+function routeStageOrNull(value: TerminalEnterpriseReadingStepId | null | undefined): TerminalEnterpriseReadingStepId | null {
+ return value && STEP_ORDER.includes(value) ? value : null;
+}
+
+function chooseActiveStep(
+ input: TerminalEnterpriseReadingUxStateInput,
+): { activeStepId: TerminalEnterpriseReadingStepId; routeReadingStage: TerminalEnterpriseReadingStepId | null } {
+ const inferredStep = inferTerminalEnterpriseReadingActiveStep(input);
+ const routeReadingStage = routeStageOrNull(input.routeReadingStage);
+ if (!routeReadingStage) return { activeStepId: inferredStep, routeReadingStage };
+
+ const inferredIndex = STEP_ORDER.indexOf(inferredStep);
+ const routeIndex = STEP_ORDER.indexOf(routeReadingStage);
+ return {
+ activeStepId: routeIndex > inferredIndex ? routeReadingStage : inferredStep,
+ routeReadingStage,
+ };
+}
+
+function failureKindFor(input: TerminalEnterpriseReadingUxStateInput): TerminalEnterpriseReadingFailureKind {
+ if (input.disclosureLeakageDetected) return 'source_safety_blocked';
+ if (input.sourceSafePreviewBlocked) return 'asset_pack_preview_blocked';
+ return input.failureKind || 'none';
+}
+
+function repairActionsForFailure(kind: TerminalEnterpriseReadingFailureKind): string[] {
+ if (kind === 'none') return [];
+ if (kind === 'read_request_invalid') return ['repair-read-request'];
+ if (kind === 'need_review_required') return ['review-or-resynthesize-need'];
+ if (kind === 'fits_finding_failed') return ['retry-finding-fits-from-accepted-need'];
+ if (kind === 'asset_pack_preview_blocked') return ['repair-source-safe-preview'];
+ if (kind === 'settlement_blocked') return ['repair-settlement-readback'];
+ if (kind === 'delivery_blocked') return ['repair-repository-delivery'];
+ return ['repair-source-safety-disclosure'];
+}
+
function blockersFor(stepId: TerminalEnterpriseReadingStepId, input: TerminalEnterpriseReadingUxStateInput) {
const blockers: string[] = [];
if (stepId === 'request-read' && !input.hasRepositorySource) blockers.push('repository source required');
@@ -208,8 +286,10 @@ function blockersFor(stepId: TerminalEnterpriseReadingStepId, input: TerminalEnt
export function buildTerminalEnterpriseReadingUxState(
input: TerminalEnterpriseReadingUxStateInput = {},
): TerminalEnterpriseReadingUxState {
- const activeStepId = inferTerminalEnterpriseReadingActiveStep(input);
+ const { activeStepId, routeReadingStage } = chooseActiveStep(input);
const activeIndex = STEP_ORDER.indexOf(activeStepId);
+ const transactionId = normalizeTransactionId(input.transactionId);
+ const failureKind = failureKindFor(input);
const steps = TERMINAL_ENTERPRISE_READING_STEPS.map((step, index) => {
const blockers = blockersFor(step.id, input);
const state: TerminalEnterpriseReadingStepState =
@@ -232,6 +312,10 @@ export function buildTerminalEnterpriseReadingUxState(
hasSourceSafePreview: Boolean(input.hasSourceSafePreview),
hasSettlementReadback: Boolean(input.hasSettlementReadback),
hasDeliveryReadback: Boolean(input.hasDeliveryReadback),
+ transactionId,
+ routeReadingStage,
+ retryRequested: Boolean(input.retryRequested),
+ failureKind,
});
return {
@@ -254,9 +338,29 @@ export function buildTerminalEnterpriseReadingUxState(
routeContract: {
terminalOwnsTransactionAuthority: true,
conversationMayHandoffIntent: true,
+ transactionRouteRequiredForRecovery: true,
acceptedNeedRequiredBeforeFindingFits: true,
sourceSafePreviewRequiredBeforeSettlement: true,
deliveryRequiresSettlementUnlock: true,
+ restartRestoresReadingStage: true,
+ retryPreservesSourceSafeLineage: true,
+ failureStatesSourceSafe: true,
+ },
+ routeState: {
+ transactionId,
+ transactionIdPresent: Boolean(transactionId),
+ transactionIdRequiredForRecovery: true,
+ readingStageQueryParam: 'readingStage',
+ activeStageHydratedFromRoute: routeReadingStage === activeStepId,
+ routeReadingStage,
+ restartRequested: Boolean(input.restartRequested),
+ restartRestoresActiveStage: true,
+ retryRequested: Boolean(input.retryRequested),
+ retryPreservesNeedLineage: true,
+ retryPreservesSettlementBoundary: true,
+ failureKind,
+ failureStateSourceSafe: true,
+ failureRepairActions: repairActionsForFailure(failureKind),
},
proofRoot: `terminal-enterprise-reading-ux:${stableHash(seed)}`,
};
@@ -276,9 +380,19 @@ export function assertTerminalEnterpriseReadingUxStateSourceSafe(state: Terminal
state.disclosure.ledgerAuthorityClaimed === false &&
state.routeContract.terminalOwnsTransactionAuthority === true &&
state.routeContract.conversationMayHandoffIntent === true &&
+ state.routeContract.transactionRouteRequiredForRecovery === true &&
state.routeContract.acceptedNeedRequiredBeforeFindingFits === true &&
state.routeContract.sourceSafePreviewRequiredBeforeSettlement === true &&
state.routeContract.deliveryRequiresSettlementUnlock === true &&
+ state.routeContract.restartRestoresReadingStage === true &&
+ state.routeContract.retryPreservesSourceSafeLineage === true &&
+ state.routeContract.failureStatesSourceSafe === true &&
+ state.routeState.transactionIdRequiredForRecovery === true &&
+ state.routeState.readingStageQueryParam === 'readingStage' &&
+ state.routeState.restartRestoresActiveStage === true &&
+ state.routeState.retryPreservesNeedLineage === true &&
+ state.routeState.retryPreservesSettlementBoundary === true &&
+ state.routeState.failureStateSourceSafe === true &&
TERMINAL_ENTERPRISE_READING_FORBIDDEN_FIELDS.every((field) =>
state.disclosure.hiddenBeforeSettlement.includes(field),
);
diff --git a/uapi/app/terminal/terminal-pipeline-harness-client.ts b/uapi/app/terminal/terminal-pipeline-harness-client.ts
index 51b5b2d7..e1443134 100644
--- a/uapi/app/terminal/terminal-pipeline-harness-client.ts
+++ b/uapi/app/terminal/terminal-pipeline-harness-client.ts
@@ -635,8 +635,23 @@ export function summarizeTerminalReadFitsFindingSynthesisHarnessEvent(
const depositorySearch = recordValue(evidence?.depositorySearch);
const ledgerSettlement = recordValue(evidence?.ledgerSettlement);
const sourceSafePreview = recordValue(evidence?.sourceSafePreview);
+ const assetPackPreviewBoundary = recordValue(evidence?.assetPackPreviewBoundary);
+ const settlementBoundary = recordValue(evidence?.assetPackSettlementRightsDeliveryBoundary);
+ const deliveryUnlock = recordValue(settlementBoundary?.deliveryUnlock) ||
+ recordValue(evidence?.assetPackDeliveryUnlock);
+ const paymentObservation = recordValue(settlementBoundary?.paymentObservation);
+ const finalityReceipt = recordValue(settlementBoundary?.finalityReceipt);
+ const reconciliationReport = recordValue(settlementBoundary?.reconciliationReport) ||
+ recordValue(evidence?.assetPackLedgerDatabaseStorageReconciliation);
+ const boundaryQuoteReceipt = recordValue(assetPackPreviewBoundary?.quoteReceipt);
+ const boundarySelectedFitProvenance = recordValue(assetPackPreviewBoundary?.selectedFitProvenance);
+ const boundarySettlementInstructions = recordValue(assetPackPreviewBoundary?.settlementInstructions);
+ const boundaryDeliveryPosture = recordValue(assetPackPreviewBoundary?.deliveryPosture);
const assetPackDisclosureReview = recordValue(evidence?.assetPackDisclosureReview);
- const feeQuote = recordValue(sourceSafePreview?.feeQuote);
+ const feeQuote =
+ boundaryQuoteReceipt ||
+ recordValue(evidence?.assetPackQuoteReceipt) ||
+ recordValue(sourceSafePreview?.feeQuote);
const unlock = recordValue(sourceSafePreview?.unlock) || recordValue(ledgerSettlement?.protectedSourceUnlock);
const disclosureAccess = recordValue(assetPackDisclosureReview?.access);
const disclosureLeakage = recordValue(assetPackDisclosureReview?.sourceLeakage);
@@ -646,7 +661,9 @@ export function summarizeTerminalReadFitsFindingSynthesisHarnessEvent(
? `ledger ${String(ledgerSettlement.status)}`
: null;
const selectedCandidateText = summarizeCandidateIds(
- fitResult?.selectedCandidateAssetIds || depositorySearch?.selectedCandidateAssetIds,
+ boundarySelectedFitProvenance?.selectedCandidateAssetIds ||
+ fitResult?.selectedCandidateAssetIds ||
+ depositorySearch?.selectedCandidateAssetIds,
);
const telemetryLineCount = Number(data?.telemetryLineCount || 0);
const telemetryText = telemetryLineCount > 0
@@ -655,6 +672,34 @@ export function summarizeTerminalReadFitsFindingSynthesisHarnessEvent(
const feeQuoteText = typeof feeQuote?.sats === 'number'
? ` fee ${feeQuote.sats} sats`
: null;
+ const quoteText = boundaryQuoteReceipt?.quoteRoot
+ ? ` quote ${shortIdentifier(boundaryQuoteReceipt.quoteRoot)}`
+ : null;
+ const settlementText = boundarySettlementInstructions?.state
+ ? ` settlement ${String(boundarySettlementInstructions.state)}`
+ : null;
+ const deliveryText = boundaryDeliveryPosture?.state
+ ? ` delivery ${String(boundaryDeliveryPosture.state)}`
+ : null;
+ const settlementBoundaryText = settlementBoundary?.state
+ ? ` settlement-boundary ${String(settlementBoundary.state)}`
+ : null;
+ const paymentText = typeof paymentObservation?.observedDebitSats === 'number' &&
+ typeof paymentObservation?.expectedSats === 'number'
+ ? ` paid ${paymentObservation.observedDebitSats}/${paymentObservation.expectedSats} sats`
+ : null;
+ const finalityText = finalityReceipt?.finalityState
+ ? ` finality ${String(finalityReceipt.finalityState)}`
+ : null;
+ const rightsText = settlementBoundary?.rightsTransferRoot
+ ? ` rights ${shortIdentifier(settlementBoundary.rightsTransferRoot)}`
+ : null;
+ const deliveredText = deliveryUnlock?.state
+ ? ` delivery-unlock ${String(deliveryUnlock.state)}`
+ : null;
+ const reconciliationText = reconciliationReport?.state
+ ? ` reconciliation ${String(reconciliationReport.state)}`
+ : null;
const unlockText = unlock?.sourceAvailable === true
? ` source ${String(unlock.state || 'available')}`
: unlock?.state
@@ -678,6 +723,15 @@ export function summarizeTerminalReadFitsFindingSynthesisHarnessEvent(
selectedCandidateText,
ledgerStatus,
feeQuoteText,
+ quoteText,
+ settlementText,
+ deliveryText,
+ settlementBoundaryText,
+ paymentText,
+ finalityText,
+ rightsText,
+ deliveredText,
+ reconciliationText,
unlockText,
disclosureText,
leakageText,
diff --git a/uapi/app/terminal/terminal-routes.ts b/uapi/app/terminal/terminal-routes.ts
index 4577ecd7..4346cc4b 100644
--- a/uapi/app/terminal/terminal-routes.ts
+++ b/uapi/app/terminal/terminal-routes.ts
@@ -1,12 +1,29 @@
export const TERMINAL_ROUTE = '/terminal' as const;
-export const EXCHANGE_ROUTE = '/exchange' as const;
+export const PACKS_ROUTE = '/packs' as const;
+export const READ_ROUTE = '/read' as const;
+export const DEPOSIT_ROUTE = '/deposit' as const;
+export const EXCHANGE_ROUTE = PACKS_ROUTE;
export function buildTerminalHref(params?: URLSearchParams | string | null) {
const query = typeof params === 'string' ? params : params?.toString();
return query ? `${TERMINAL_ROUTE}?${query}` : TERMINAL_ROUTE;
}
-export function buildExchangeHref(params?: URLSearchParams | string | null) {
+export function buildPacksHref(params?: URLSearchParams | string | null) {
+ const query = typeof params === 'string' ? params : params?.toString();
+ return query ? `${PACKS_ROUTE}?${query}` : PACKS_ROUTE;
+}
+
+export function buildReadHref(params?: URLSearchParams | string | null) {
+ const query = typeof params === 'string' ? params : params?.toString();
+ return query ? `${READ_ROUTE}?${query}` : READ_ROUTE;
+}
+
+export function buildDepositHref(params?: URLSearchParams | string | null) {
const query = typeof params === 'string' ? params : params?.toString();
- return query ? `${EXCHANGE_ROUTE}?${query}` : EXCHANGE_ROUTE;
+ return query ? `${DEPOSIT_ROUTE}?${query}` : DEPOSIT_ROUTE;
+}
+
+export function buildExchangeHref(params?: URLSearchParams | string | null) {
+ return buildPacksHref(params);
}
diff --git a/uapi/app/terminal/terminal-run-data.ts b/uapi/app/terminal/terminal-run-data.ts
index 84be1f2d..46de2176 100644
--- a/uapi/app/terminal/terminal-run-data.ts
+++ b/uapi/app/terminal/terminal-run-data.ts
@@ -16,6 +16,11 @@ export type WorkspaceRun = Pick;
+}
+
+export interface PackActivityFilters {
+ type?: PackActivityType | 'all';
+ scope?: BitcodeActivityScope | 'all';
+ state?: string | 'all';
+ settlementState?: string | 'all';
+ compensationState?: string | 'all';
+ deliveryState?: string | 'all';
+ repairState?: string | 'all';
+ repository?: string | 'all';
+}
+
+export interface PackActivityQuery {
+ search?: string | null;
+ filters?: PackActivityFilters;
+ sort?: {
+ key?: PackActivitySortKey;
+ direction?: PackActivitySortDirection;
+ };
+}
+
+export interface PackActivityDetailProjection {
+ id: string;
+ type: PackActivityType;
+ title: string;
+ description: string;
+ timestamp: string | null;
+ sourceSafety: PackActivitySourceSafety;
+ overview: {
+ state: string | null;
+ scope: BitcodeActivityScope;
+ repository: string | null;
+ assetPackTitle: string | null;
+ };
+ measurements: PackActivityMeasurement[];
+ values: PackActivityValue[];
+ proofRoots: PackActivityProofRoot[];
+ states: {
+ settlement: string | null;
+ compensation: string | null;
+ delivery: string | null;
+ repair: string | null;
+ };
+ telemetry: {
+ sourceEventId: string;
+ sourceKind: string | null;
+ sourceChannel: string | null;
+ };
+ metadata: Record;
+}
+
+export interface PackActivitySummary {
+ total: number;
+ types: Record;
+ states: Record;
+ repositories: string[];
+ settlementReady: number;
+ compensationReady: number;
+ deliveryReady: number;
+ repairOpen: number;
+}
+
+const SOURCE_SAFETY: PackActivitySourceSafety = {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ sourceSnippetVisible: false,
+};
+
+const PACK_ACTIVITY_TYPES: PackActivityType[] = [
+ 'deposit-option',
+ 'depository-assetpack',
+ 'read-need-fit-preview',
+ 'settled-assetpack',
+ 'settlement',
+ 'compensation',
+ 'delivery',
+ 'repair',
+ 'execution',
+ 'notification',
+];
+
+const SOURCE_BEARING_KEY_PATTERN =
+ /(^|_|\b)(protectedsource|unpaidassetpacksource|sourcesnippet|sourcecode|sourcetext|sourcepayload|rawprompt|interpolatedprompt|rawresponse|providerresponse|rawproviderresponse|credential|secret|privatekey|walletprivate|filecontents|patch|diff|codebody)($|_|\b)/iu;
+
+function asRecord(value: unknown): Record {
+ return value && typeof value === 'object' && !Array.isArray(value)
+ ? (value as Record)
+ : {};
+}
+
+function readString(source: unknown, ...keys: string[]) {
+ const record = asRecord(source);
+ for (const key of keys) {
+ const value = record[key];
+ if (typeof value === 'string' && value.trim()) return value.trim();
+ if (typeof value === 'number' && Number.isFinite(value)) return String(value);
+ }
+ return null;
+}
+
+function findFirstString(source: unknown, keys: string[], depth = 0): string | null {
+ if (depth > 7 || source === null || source === undefined) return null;
+ if (Array.isArray(source)) {
+ for (const item of source) {
+ const found = findFirstString(item, keys, depth + 1);
+ if (found) return found;
+ }
+ return null;
+ }
+
+ const record = asRecord(source);
+ for (const key of keys) {
+ const direct = readString(record, key);
+ if (direct) return direct;
+ }
+
+ for (const value of Object.values(record)) {
+ const found = findFirstString(value, keys, depth + 1);
+ if (found) return found;
+ }
+ return null;
+}
+
+function findFirstNumber(source: unknown, keys: string[], depth = 0): number | null {
+ if (depth > 7 || source === null || source === undefined) return null;
+ if (Array.isArray(source)) {
+ for (const item of source) {
+ const found = findFirstNumber(item, keys, depth + 1);
+ if (found !== null) return found;
+ }
+ return null;
+ }
+
+ const record = asRecord(source);
+ for (const key of keys) {
+ const value = record[key];
+ if (typeof value === 'number' && Number.isFinite(value)) return value;
+ if (typeof value === 'string' && value.trim() && Number.isFinite(Number(value))) return Number(value);
+ }
+
+ for (const value of Object.values(record)) {
+ const found = findFirstNumber(value, keys, depth + 1);
+ if (found !== null) return found;
+ }
+ return null;
+}
+
+function normalizeLabel(value: string) {
+ return value
+ .replace(/([a-z])([A-Z])/gu, '$1 $2')
+ .replace(/[-_]+/gu, ' ')
+ .replace(/\s+/gu, ' ')
+ .trim()
+ .replace(/^./u, (char) => char.toUpperCase());
+}
+
+function compareText(left: string | null | undefined, right: string | null | undefined) {
+ const a = String(left || '');
+ const b = String(right || '');
+ if (a < b) return -1;
+ if (a > b) return 1;
+ return 0;
+}
+
+function includesAny(text: string, tokens: string[]) {
+ return tokens.some((token) => text.includes(token));
+}
+
+function inferPackActivityType(record: BitcodeActivityRecord): PackActivityType {
+ const payload = asRecord(record.payload);
+ const haystack = [
+ record.kind,
+ record.title,
+ record.summary,
+ record.state,
+ readString(payload, 'type', 'status', 'kind', 'eventType'),
+ findFirstString(payload, ['canonicalType', 'family', 'label', 'reviewStage']),
+ ]
+ .filter(Boolean)
+ .join(' ')
+ .toLowerCase();
+
+ if (
+ includesAny(haystack, [
+ 'depository assetpack',
+ 'depository asset pack',
+ 'deposit admission',
+ 'deposit-option-admission',
+ 'admitted to the depository',
+ ])
+ ) {
+ return 'depository-assetpack';
+ }
+ if (includesAny(haystack, ['deposit option', 'deposit-option', 'option synthesis'])) return 'deposit-option';
+ if (includesAny(haystack, ['finding fits', 'fits finding', 'read-fits', 'fit preview', 'assetpack preview'])) return 'read-need-fit-preview';
+ if (includesAny(haystack, ['settled assetpack', 'settled asset pack', 'rights transfer'])) return 'settled-assetpack';
+ if (includesAny(haystack, ['settlement', 'btc', 'finality'])) return 'settlement';
+ if (includesAny(haystack, ['compensation', 'source-to-shares', 'shares allocation'])) return 'compensation';
+ if (includesAny(haystack, ['delivery', 'pull request', 'pr delivery', 'repository delivery'])) return 'delivery';
+ if (includesAny(haystack, ['repair', 'reconcile', 'reconciliation'])) return 'repair';
+ return record.kind === 'notification' ? 'notification' : 'execution';
+}
+
+function inferRepository(record: BitcodeActivityRecord) {
+ const payload = asRecord(record.payload);
+ const snapshot = asRecord(payload.repo_snapshot ?? payload.repoSnapshot ?? payload.repositorySnapshot);
+ const org = readString(snapshot, 'org', 'owner', 'organization');
+ const repo = readString(snapshot, 'repo', 'name');
+ if (org && repo) return `${org}/${repo}`;
+
+ return (
+ findFirstString(payload, [
+ 'repositoryFullName',
+ 'repositoryAnchor',
+ 'repository',
+ 'repoFullName',
+ 'repo',
+ ]) || null
+ );
+}
+
+function inferAssetPackTitle(record: BitcodeActivityRecord) {
+ return (
+ findFirstString(record.payload, [
+ 'assetPackTitle',
+ 'asset_pack_title',
+ 'packTitle',
+ 'title',
+ 'summary',
+ ]) || (record.kind === 'notification' ? record.title : null)
+ );
+}
+
+function buildMeasurements(record: BitcodeActivityRecord): PackActivityMeasurement[] {
+ const payload = asRecord(record.payload);
+ const measurements: PackActivityMeasurement[] = [];
+
+ const candidates: Array<[string, string[], string | null]> = [
+ ['measured-btd', ['measuredBtd', 'measured_btd', 'btdVolume', 'weightedRequestedVolume'], 'BTD'],
+ ['token-total', ['total_tokens', 'tokenTotal', 'totalTokens'], 'tokens'],
+ ['duration', ['duration_ms', 'durationMs', 'runtimeMs'], 'ms'],
+ ['cost', ['total_cost', 'totalCost'], 'USD'],
+ ['candidate-count', ['candidateCount', 'fitCandidateCount', 'targetKindCount', 'optionCount'], 'count'],
+ ['admitted-count', ['admittedCount'], 'count'],
+ ['closure-criteria', ['closureCriteriaCount', 'closureCount'], 'count'],
+ ];
+
+ for (const [id, keys, unit] of candidates) {
+ const value = findFirstNumber(payload, keys);
+ if (value !== null) {
+ measurements.push({ id, label: normalizeLabel(id), value, unit, root: null });
+ }
+ }
+
+ const measurementRoot = findFirstString(payload, [
+ 'measurementRoot',
+ 'depositMeasurementRoot',
+ 'assetPackMeasurementRoot',
+ 'readNeedMeasurementRoot',
+ 'admissionReportRoot',
+ 'admissionRoot',
+ ]);
+ if (measurementRoot) {
+ measurements.push({
+ id: 'measurement-root',
+ label: 'Measurement root',
+ value: measurementRoot,
+ unit: null,
+ root: measurementRoot,
+ });
+ }
+
+ return measurements;
+}
+
+function buildValues(record: BitcodeActivityRecord): PackActivityValue[] {
+ const payload = asRecord(record.payload);
+ const values: PackActivityValue[] = [];
+ const candidates: Array<[string, string[], string]> = [
+ ['btc-fee', ['btcFee', 'btc_fee', 'btcFeeSats', 'feeSats'], 'sats'],
+ ['usd-equivalent', ['btcFeeUsdEquivalent', 'usdEquivalent', 'total_cost'], 'USD'],
+ ['btd-potential', ['btdPotential', 'estimatedBtdPotential', 'measuredBtd'], 'BTD'],
+ ['settlement-price', ['settlementPrice', 'quoteAmount', 'amountSats'], 'sats'],
+ ];
+
+ for (const [id, keys, unit] of candidates) {
+ const value = findFirstNumber(payload, keys);
+ if (value !== null) values.push({ id, label: normalizeLabel(id), amount: value, unit });
+ }
+
+ return values;
+}
+
+function collectProofRoots(source: unknown, roots = new Map(), depth = 0) {
+ if (depth > 7 || source === null || source === undefined) return roots;
+
+ if (Array.isArray(source)) {
+ source.forEach((item) => collectProofRoots(item, roots, depth + 1));
+ return roots;
+ }
+
+ const record = asRecord(source);
+ for (const [key, value] of Object.entries(record)) {
+ if (typeof value === 'string' && /(root|hash|receipt|witness|anchor)$/iu.test(key) && value.trim()) {
+ const id = key.replace(/[^a-z0-9]+/giu, '-').toLowerCase();
+ roots.set(`${id}:${value}`, {
+ id,
+ label: normalizeLabel(key),
+ root: value.trim(),
+ });
+ continue;
+ }
+
+ if (value && typeof value === 'object') collectProofRoots(value, roots, depth + 1);
+ }
+
+ return roots;
+}
+
+function redactMetadata(source: unknown, depth = 0): unknown {
+ if (depth > 5) return '[withheld:depth-limit]';
+ if (source === null || source === undefined) return source;
+ if (typeof source === 'string') return source.length > 500 ? `${source.slice(0, 500)}...` : source;
+ if (typeof source === 'number' || typeof source === 'boolean') return source;
+ if (Array.isArray(source)) return source.slice(0, 40).map((item) => redactMetadata(item, depth + 1));
+
+ const record = asRecord(source);
+ const redacted: Record = {};
+ for (const [key, value] of Object.entries(record)) {
+ const normalizedKey = key.replace(/[^a-z0-9]/giu, '').toLowerCase();
+ if (SOURCE_BEARING_KEY_PATTERN.test(normalizedKey)) {
+ redacted[key] = '[withheld:source-safe]';
+ continue;
+ }
+ redacted[key] = redactMetadata(value, depth + 1);
+ }
+ return redacted;
+}
+
+function readState(record: BitcodeActivityRecord, keys: string[]) {
+ return findFirstString(record.payload, keys);
+}
+
+export function normalizePackActivityRecord(record: BitcodeActivityRecord): PackActivityRecord {
+ const type = inferPackActivityType(record);
+ const metadata = redactMetadata(record.payload) as Record;
+ const settlementState = readState(record, ['settlementState', 'settlement_state', 'finalityState']);
+ const compensationState = readState(record, ['compensationState', 'compensation_state', 'sourceToSharesState']);
+ const deliveryState = readState(record, ['deliveryState', 'delivery_state', 'pullRequestState']);
+ const repairState = readState(record, ['repairState', 'repair_state', 'reconciliationState']);
+
+ return {
+ id: record.id,
+ type,
+ scope: record.scope,
+ title: record.title || normalizeLabel(type),
+ description: record.summary || 'Pack activity',
+ timestamp: record.timestamp,
+ state: record.state,
+ repository: inferRepository(record),
+ assetPackTitle: inferAssetPackTitle(record),
+ settlementState,
+ compensationState,
+ deliveryState,
+ repairState,
+ measurements: buildMeasurements(record),
+ values: buildValues(record),
+ proofRoots: [...collectProofRoots(record.payload).values()].slice(0, 24),
+ sourceSafety: SOURCE_SAFETY,
+ metadata,
+ };
+}
+
+export function assertPackActivitySourceSafe(record: PackActivityRecord | PackActivityDetailProjection) {
+ const serialized = JSON.stringify(record).toLowerCase();
+ const unsafeNeedles = [
+ 'protected source body',
+ 'unpaid assetpack source',
+ 'raw prompt text',
+ 'interpolated prompt text',
+ 'raw provider response',
+ 'source snippet',
+ ];
+
+ return (
+ record.sourceSafety.sourceSafeMetadataOnly === true &&
+ record.sourceSafety.protectedSourceVisible === false &&
+ record.sourceSafety.unpaidAssetPackSourceVisible === false &&
+ record.sourceSafety.rawPromptVisible === false &&
+ record.sourceSafety.interpolatedPromptVisible === false &&
+ record.sourceSafety.rawProviderResponseVisible === false &&
+ record.sourceSafety.sourceSnippetVisible === false &&
+ unsafeNeedles.every((needle) => !serialized.includes(needle))
+ );
+}
+
+function matchesFilter(value: string | null, filter: string | undefined) {
+ return !filter || filter === 'all' || String(value || '') === filter;
+}
+
+function buildSearchText(record: PackActivityRecord) {
+ return [
+ record.id,
+ record.type,
+ record.title,
+ record.description,
+ record.state,
+ record.repository,
+ record.assetPackTitle,
+ record.settlementState,
+ record.compensationState,
+ record.deliveryState,
+ record.repairState,
+ ...record.measurements.flatMap((measurement) => [
+ measurement.id,
+ measurement.label,
+ String(measurement.value),
+ measurement.unit,
+ measurement.root,
+ ]),
+ ...record.values.flatMap((value) => [value.id, value.label, String(value.amount), value.unit]),
+ ...record.proofRoots.flatMap((proofRoot) => [proofRoot.id, proofRoot.label, proofRoot.root]),
+ ]
+ .filter(Boolean)
+ .join(' ')
+ .toLowerCase();
+}
+
+export function filterPackActivityRecords(
+ records: PackActivityRecord[],
+ filters: PackActivityFilters = {},
+ search?: string | null,
+) {
+ const normalizedSearch = String(search || '').trim().toLowerCase();
+ return records.filter((record) => {
+ if (filters.type && filters.type !== 'all' && record.type !== filters.type) return false;
+ if (filters.scope && filters.scope !== 'all' && record.scope !== filters.scope) return false;
+ if (!matchesFilter(record.state, filters.state)) return false;
+ if (!matchesFilter(record.settlementState, filters.settlementState)) return false;
+ if (!matchesFilter(record.compensationState, filters.compensationState)) return false;
+ if (!matchesFilter(record.deliveryState, filters.deliveryState)) return false;
+ if (!matchesFilter(record.repairState, filters.repairState)) return false;
+ if (!matchesFilter(record.repository, filters.repository)) return false;
+ if (normalizedSearch && !buildSearchText(record).includes(normalizedSearch)) return false;
+ return true;
+ });
+}
+
+export function sortPackActivityRecords(
+ records: PackActivityRecord[],
+ sort: PackActivityQuery['sort'] = {},
+) {
+ const key = sort?.key || 'timestamp';
+ const direction = sort?.direction || 'desc';
+ const multiplier = direction === 'asc' ? 1 : -1;
+
+ return [...records].sort((left, right) => {
+ if (key === 'value') {
+ const leftValue = left.values[0]?.amount ?? left.measurements[0]?.value ?? 0;
+ const rightValue = right.values[0]?.amount ?? right.measurements[0]?.value ?? 0;
+ return (Number(leftValue) - Number(rightValue)) * multiplier;
+ }
+
+ const leftText =
+ key === 'title'
+ ? left.title
+ : key === 'settlementState'
+ ? left.settlementState
+ : key === 'compensationState'
+ ? left.compensationState
+ : key === 'deliveryState'
+ ? left.deliveryState
+ : key === 'repairState'
+ ? left.repairState
+ : left.timestamp;
+ const rightText =
+ key === 'title'
+ ? right.title
+ : key === 'settlementState'
+ ? right.settlementState
+ : key === 'compensationState'
+ ? right.compensationState
+ : key === 'deliveryState'
+ ? right.deliveryState
+ : key === 'repairState'
+ ? right.repairState
+ : right.timestamp;
+ return compareText(leftText, rightText) * multiplier || compareText(left.id, right.id);
+ });
+}
+
+export function buildPackActivityDetailProjection(
+ record: PackActivityRecord,
+): PackActivityDetailProjection {
+ return {
+ id: record.id,
+ type: record.type,
+ title: record.title,
+ description: record.description,
+ timestamp: record.timestamp,
+ sourceSafety: record.sourceSafety,
+ overview: {
+ state: record.state,
+ scope: record.scope,
+ repository: record.repository,
+ assetPackTitle: record.assetPackTitle,
+ },
+ measurements: record.measurements,
+ values: record.values,
+ proofRoots: record.proofRoots,
+ states: {
+ settlement: record.settlementState,
+ compensation: record.compensationState,
+ delivery: record.deliveryState,
+ repair: record.repairState,
+ },
+ telemetry: {
+ sourceEventId: record.id,
+ sourceKind: String(record.metadata.kind || record.metadata.type || '') || null,
+ sourceChannel: String(record.metadata.channel || '') || null,
+ },
+ metadata: record.metadata,
+ };
+}
+
+export function summarizePackActivityRecords(records: PackActivityRecord[]): PackActivitySummary {
+ const types = Object.fromEntries(PACK_ACTIVITY_TYPES.map((type) => [type, 0])) as Record<
+ PackActivityType,
+ number
+ >;
+ const states: Record = {};
+ const repositories = new Set();
+
+ for (const record of records) {
+ types[record.type] += 1;
+ if (record.state) states[record.state] = (states[record.state] || 0) + 1;
+ if (record.repository) repositories.add(record.repository);
+ }
+
+ return {
+ total: records.length,
+ types,
+ states,
+ repositories: [...repositories].sort(compareText),
+ settlementReady: records.filter((record) => /ready|settled|final/i.test(record.settlementState || '')).length,
+ compensationReady: records.filter((record) => /ready|allocated|paid/i.test(record.compensationState || '')).length,
+ deliveryReady: records.filter((record) => /ready|delivered|pull/i.test(record.deliveryState || '')).length,
+ repairOpen: records.filter((record) => /open|repair|reconcile|failed/i.test(record.repairState || '')).length,
+ };
+}
+
+export function queryPackActivityRecords(records: PackActivityRecord[], query: PackActivityQuery = {}) {
+ const filtered = filterPackActivityRecords(records, query.filters || {}, query.search);
+ const sorted = sortPackActivityRecords(filtered, query.sort || {});
+ return {
+ records: sorted,
+ summary: summarizePackActivityRecords(sorted),
+ query: {
+ search: query.search || '',
+ filters: query.filters || {},
+ sort: {
+ key: query.sort?.key || 'timestamp',
+ direction: query.sort?.direction || 'desc',
+ },
+ },
+ };
+}
diff --git a/uapi/components/base/bitcode/execution/bitcode-transaction-active-filters.ts b/uapi/components/base/bitcode/execution/bitcode-transaction-active-filters.ts
index 923851be..be450e2b 100644
--- a/uapi/components/base/bitcode/execution/bitcode-transaction-active-filters.ts
+++ b/uapi/components/base/bitcode/execution/bitcode-transaction-active-filters.ts
@@ -16,7 +16,7 @@ export type BitcodeTransactionActiveFilterChip = {
const OWNERSHIP_LABELS: Record, string> = {
mine: 'My transactions',
- network: 'Exchange transactions',
+ network: 'Pack activity',
};
const LENS_LABELS: Record, string> = {
diff --git a/uapi/components/base/bitcode/layout/NavBrand.tsx b/uapi/components/base/bitcode/layout/NavBrand.tsx
index 64db4aab..95e679d9 100644
--- a/uapi/components/base/bitcode/layout/NavBrand.tsx
+++ b/uapi/components/base/bitcode/layout/NavBrand.tsx
@@ -5,7 +5,7 @@ import React from "react";
import Logo from "@/components/base/bitcode/branding/logo";
export type NavSurface = "terminal" | "auxillaries" | "conversations" | null;
-export type NavBrandSurface = Exclude | 'home' | 'network' | 'docs' | null;
+export type NavBrandSurface = Exclude | 'home' | 'network' | 'deposit' | 'read' | 'docs' | null;
interface NavBrandProps {
animated?: boolean;
@@ -25,7 +25,15 @@ const SURFACE_COPY: Record, { eyebrow: string; ti
},
network: {
eyebrow: "Bitcode",
- title: "exchange",
+ title: "packs",
+ },
+ deposit: {
+ eyebrow: "Bitcode",
+ title: "deposit",
+ },
+ read: {
+ eyebrow: "Bitcode",
+ title: "read",
},
docs: {
eyebrow: "Bitcode",
diff --git a/uapi/components/base/bitcode/layout/bitcode-public-copy.ts b/uapi/components/base/bitcode/layout/bitcode-public-copy.ts
index a290a899..3e6c7f45 100644
--- a/uapi/components/base/bitcode/layout/bitcode-public-copy.ts
+++ b/uapi/components/base/bitcode/layout/bitcode-public-copy.ts
@@ -10,8 +10,8 @@ export const BITCODE_PUBLIC_COPY = {
'MOCKED TERMINAL',
],
primaryCta: {
- href: '/terminal',
- label: 'Open Terminal',
+ href: '/read',
+ label: 'Request Read',
},
secondaryCta: {
href: '/docs',
@@ -40,7 +40,7 @@ export const BITCODE_PUBLIC_COPY = {
],
},
terminalPreview: {
- pill: 'Exchange',
+ pill: 'Packs',
kicker: 'Terminal preview',
rail: ['deposit', 'read', 'settle'],
},
@@ -51,7 +51,7 @@ export const BITCODE_PUBLIC_COPY = {
modes: ['Proofs', 'Conversations', 'Auxillaries', 'Deposit + Read'],
},
giveContribution: {
- title: 'Exchange supply',
+ title: 'Pack supply',
},
sourceToSettlement: {
title: 'Source to settlement',
@@ -71,7 +71,9 @@ export const BITCODE_PUBLIC_COPY = {
guestCta: 'Open Auxillaries',
userCta: 'Open Auxillaries',
links: {
- network: 'Exchange',
+ network: 'Packs',
+ deposit: 'Deposit',
+ read: 'Read',
transactions: 'Terminal',
docs: 'Docs',
github: 'Bitcode on GitHub',
@@ -79,7 +81,9 @@ export const BITCODE_PUBLIC_COPY = {
},
publicNav: {
links: [
- { href: '/exchange', label: 'Exchange' },
+ { href: '/packs', label: 'Packs' },
+ { href: '/deposit', label: 'Deposit' },
+ { href: '/read', label: 'Read' },
{ href: '/terminal', label: 'Terminal' },
{ href: '/docs', label: 'Docs' },
],
diff --git a/uapi/components/base/bitcode/layout/bitcode-public-explainers.ts b/uapi/components/base/bitcode/layout/bitcode-public-explainers.ts
index bd7940ea..f875d52b 100644
--- a/uapi/components/base/bitcode/layout/bitcode-public-explainers.ts
+++ b/uapi/components/base/bitcode/layout/bitcode-public-explainers.ts
@@ -6,14 +6,36 @@ function buildExplainer(explainer: BitcodeExplainer): BitcodeExplainer {
export const BITCODE_PUBLIC_EXPLAINERS = {
network: buildExplainer({
- kicker: 'Bitcode Exchange',
- title: 'Exchange',
- summary: 'Read the public Bitcode exchange frame where source supply, measured read, settlement posture, and teaching surfaces meet.',
+ kicker: 'Bitcode Packs',
+ title: 'Packs',
+ summary: 'Read pack activity where source supply, measured reads, settlement posture, compensation, delivery, and repair state meet.',
detail:
- 'Use this route when you want the highest-level public view of how Source Shares become measurable technical intelligence before you dive into full detail.',
+ 'Use this route when you need the activity master-detail view for AssetPack proposals, admitted packs, previews, proof roots, settlement, and delivery state.',
points: [
- 'Frames Bitcode as the exchange for source-backed technical value',
- 'Connects public narrative directly to Terminal, docs, and Source Shares',
+ 'Searches and filters source-safe pack activity',
+ 'Keeps proof and settlement detail expandable without exposing unpaid source',
+ ],
+ }),
+ read: buildExplainer({
+ kicker: 'Bitcode Read',
+ title: 'Read',
+ summary: 'Request Reading, review a synthesized Need, request Finding Fits, inspect source-safe AssetPack preview, and settle for delivery.',
+ detail:
+ 'Use this route for the enterprise Reading path. It keeps source-bearing AssetPack contents withheld before settlement while exposing measurements, proof roots, quote posture, and delivery state.',
+ points: [
+ 'Separates Read-Need review from Finding Fits',
+ 'Keeps AssetPack preview source-safe until paid read rights unlock delivery',
+ ],
+ }),
+ deposit: buildExplainer({
+ kicker: 'Bitcode Deposit',
+ title: 'Deposit',
+ summary: 'Connect repository source, synthesize source-safe AssetPack options, review measurements, and submit supply.',
+ detail:
+ 'Use this route for the enterprise depositing path. It proposes multiple AssetPack options from connected source, depositor instruction, Depository demand, and Reading demand without serializing protected source.',
+ points: [
+ 'Synthesize reviewable AssetPack options before admission',
+ 'Keeps criticality, ROI, compensation policy, and admission boundaries explicit',
],
}),
transactions: buildExplainer({
@@ -46,7 +68,7 @@ export const BITCODE_PUBLIC_EXPLAINERS = {
'Use this when you want the auxillary access layer directly. Connect Wallet is for first-time wallet identity and onboarding; Open Auxillaries is for entering the contained shell.',
points: [
'Opens the contained auxillary shell',
- 'Keeps Auxillaries distinct from Exchange, Terminal, and Docs',
+ 'Keeps Auxillaries distinct from Packs, Terminal, and Docs',
],
}),
protocolSpec: buildExplainer({
diff --git a/uapi/components/base/bitcode/layout/footer.tsx b/uapi/components/base/bitcode/layout/footer.tsx
index 96835d9f..c34f15af 100644
--- a/uapi/components/base/bitcode/layout/footer.tsx
+++ b/uapi/components/base/bitcode/layout/footer.tsx
@@ -23,14 +23,16 @@ import { DisabledTooltipWrapper } from '@/components/base/bitcode/overlays/disab
import { BITCODE_GITHUB_APP_PUBLIC_URL } from '@/lib/github-app-url';
const TERMINAL_URL = '/terminal';
-const EXCHANGE_URL = '/exchange';
+const PACKS_URL = '/packs';
+const DEPOSIT_URL = '/deposit';
+const READ_URL = '/read';
const DEFAULT_OPERATOR_GUIDE_URL =
process.env.NEXT_PUBLIC_BITCODE_OPERATOR_GUIDE_URL?.trim() || '/docs';
const CURRENT_PROTOCOL_SPEC_URL = 'https://github.com/engineeredsoftware/ENGI/blob/main/BITCODE_SPEC.txt';
const BITCODE_REPOSITORY_URL = 'https://github.com/engineeredsoftware/bitcode';
const DISABLED_FEATURE_TOOLTIPS = {
- exchange:
- 'Disabled for launch mode. When enabled, Exchange opens the public Source Shares activity and market-reading surface.',
+ packs:
+ 'Disabled for launch mode. When enabled, Packs opens the public Source Shares activity and pack-reading surface.',
terminal:
'Disabled for launch mode. When enabled, Terminal opens the full deposit-to-settle ledger, proofs, and history workspace.',
auxillaries:
@@ -121,10 +123,10 @@ export default function Footer({ showPrimaryContent = true, className = '' }: Fo
: BITCODE_PUBLIC_COPY.footer.guestCta;
const footerLinks = useMemo(() => [
{
- ariaLabel: 'Exchange',
+ ariaLabel: BITCODE_PUBLIC_COPY.footer.links.network,
label: BITCODE_PUBLIC_COPY.footer.links.network,
- meta: 'Public exchange',
- href: EXCHANGE_URL,
+ meta: 'Pack activity',
+ href: PACKS_URL,
explainer: BITCODE_PUBLIC_EXPLAINERS.network,
icon: (
),
},
+ {
+ ariaLabel: BITCODE_PUBLIC_COPY.footer.links.deposit,
+ label: BITCODE_PUBLIC_COPY.footer.links.deposit,
+ meta: 'Depositing flow',
+ href: DEPOSIT_URL,
+ explainer: BITCODE_PUBLIC_EXPLAINERS.deposit,
+ icon: (
+
+
+
+
+
+
+
+ ),
+ },
+ {
+ ariaLabel: BITCODE_PUBLIC_COPY.footer.links.read,
+ label: BITCODE_PUBLIC_COPY.footer.links.read,
+ meta: 'Reading flow',
+ href: READ_URL,
+ explainer: BITCODE_PUBLIC_EXPLAINERS.read,
+ icon: (
+
+
+
+
+
+
+
+
+ ),
+ },
{
ariaLabel: BITCODE_PUBLIC_COPY.footer.links.transactions,
label: BITCODE_PUBLIC_COPY.footer.links.transactions,
@@ -237,7 +300,7 @@ export default function Footer({ showPrimaryContent = true, className = '' }: Fo
], []);
const isExternalHref = (href: string) => href.startsWith('http');
const disableAuxillaries = Boolean(FEATURE_FLAGS.DISABLE_AUXILLARIES);
- const disableExchangeLink = Boolean(FEATURE_FLAGS.DISABLE_EXCHANGE_LINK);
+ const disablePacksLink = Boolean(FEATURE_FLAGS.DISABLE_EXCHANGE_LINK);
const disableTerminalLink = Boolean(FEATURE_FLAGS.DISABLE_TERMINAL_LINK);
return (
@@ -374,7 +437,7 @@ export default function Footer({ showPrimaryContent = true, className = '' }: Fo
{footerLinks.map((social) => {
const isDisabledRoute =
- (social.href === EXCHANGE_URL && disableExchangeLink) ||
+ (social.href === PACKS_URL && disablePacksLink) ||
(social.href === TERMINAL_URL && disableTerminalLink);
const explainerButton = social.explainer ? (
{BITCODE_PUBLIC_COPY.publicNav.links.map(({ href, label }, index) => {
- const isExchangeRoute = href === '/exchange';
+ const isPacksRoute = href === '/packs';
+ const isDepositRoute = href === '/deposit';
+ const isReadRoute = href === '/read';
const isDisabledRoute =
- (isExchangeRoute && disableExchangeLink) ||
+ (isPacksRoute && disableExchangeLink) ||
(href === '/terminal' && disableTerminalLink);
const isActiveRoute =
- isExchangeRoute
- ? pathname === '/exchange' || pathname?.startsWith('/exchange/')
+ isPacksRoute
+ ? pathname === '/packs' || pathname?.startsWith('/packs/') || pathname === '/exchange' || pathname?.startsWith('/exchange/')
: href === '/docs'
? pathname === '/docs' || pathname?.startsWith('/docs/')
: pathname === href || pathname?.startsWith(`${href}/`);
@@ -413,7 +415,7 @@ export default function Nav() {
{isDisabledRoute ? (
)}
- {isExchangeRoute ? (
+ {isPacksRoute ? (
+ ) : isDepositRoute ? (
+
+ ) : isReadRoute ? (
+
) : href === '/terminal' ? (
= {
+ emerald: {
+ page: "bg-[radial-gradient(circle_at_top_left,rgba(16,185,129,0.16),transparent_30%),linear-gradient(180deg,#050915_0%,#02050d_100%)]",
+ headerBorder: "border-emerald-300/15",
+ eyebrow: "text-emerald-200/80",
+ activeStep:
+ "border-emerald-300/38 bg-emerald-300/12 shadow-[0_0_24px_rgba(16,185,129,0.12)]",
+ inactiveStep:
+ "border-white/10 bg-white/[0.035] hover:border-emerald-300/24 hover:bg-emerald-300/[0.06]",
+ focusRing: "focus-visible:ring-emerald-300/55",
+ panelAccent:
+ "border-emerald-300/15 bg-emerald-300/[0.04] text-emerald-100/85",
+ },
+ sky: {
+ page: "bg-[radial-gradient(circle_at_top_left,rgba(56,189,248,0.14),transparent_30%),linear-gradient(180deg,#050915_0%,#02050d_100%)]",
+ headerBorder: "border-sky-300/15",
+ eyebrow: "text-sky-200/80",
+ activeStep:
+ "border-sky-300/38 bg-sky-300/12 shadow-[0_0_24px_rgba(56,189,248,0.12)]",
+ inactiveStep:
+ "border-white/10 bg-white/[0.035] hover:border-sky-300/24 hover:bg-sky-300/[0.06]",
+ focusRing: "focus-visible:ring-sky-300/55",
+ panelAccent: "border-sky-300/15 bg-sky-300/[0.04] text-sky-100/85",
+ },
+ violet: {
+ page: "bg-[radial-gradient(circle_at_top_left,rgba(167,139,250,0.13),transparent_30%),linear-gradient(180deg,#050915_0%,#02050d_100%)]",
+ headerBorder: "border-violet-300/15",
+ eyebrow: "text-violet-200/80",
+ activeStep:
+ "border-violet-300/38 bg-violet-300/12 shadow-[0_0_24px_rgba(167,139,250,0.12)]",
+ inactiveStep:
+ "border-white/10 bg-white/[0.035] hover:border-violet-300/24 hover:bg-violet-300/[0.06]",
+ focusRing: "focus-visible:ring-violet-300/55",
+ panelAccent: "border-violet-300/15 bg-violet-300/[0.04] text-violet-100/85",
+ },
+};
+
+export type ProductRouteMetric = {
+ label: string;
+ value: React.ReactNode;
+};
+
+export type ProductRouteStep = {
+ id: StepId;
+ label: string;
+ state: string;
+ lowDetailGuidance?: string;
+};
+
+type ProductRouteShellProps = {
+ testId: string;
+ tone: ProductRouteTone;
+ label: string;
+ title: string;
+ summary: string;
+ icon: LucideIcon;
+ metrics: ProductRouteMetric[];
+ children: React.ReactNode;
+};
+
+export function ProductRouteShell({
+ testId,
+ tone,
+ label,
+ title,
+ summary,
+ icon: Icon,
+ metrics,
+ children,
+}: ProductRouteShellProps) {
+ const toneClasses = TONE_CLASSES[tone];
+
+ return (
+
+
+
+ );
+}
+
+type ProductRouteStepGridProps = {
+ ariaLabel: string;
+ activeStepId: StepId;
+ steps: ProductRouteStep[];
+ tone: ProductRouteTone;
+ testIdPrefix: string;
+ stateDataAttribute: string;
+ onSelect: (stepId: StepId) => void;
+};
+
+export function ProductRouteStepGrid({
+ ariaLabel,
+ activeStepId,
+ steps,
+ tone,
+ testIdPrefix,
+ stateDataAttribute,
+ onSelect,
+}: ProductRouteStepGridProps) {
+ const toneClasses = TONE_CLASSES[tone];
+
+ return (
+
+ {steps.map((step) => {
+ const active = step.id === activeStepId;
+ const stateAttribute = { [stateDataAttribute]: step.state };
+ return (
+ onSelect(step.id)}
+ className={`min-h-[9rem] border px-4 py-4 text-left outline-none transition focus-visible:ring-2 ${toneClasses.focusRing} ${
+ active ? toneClasses.activeStep : toneClasses.inactiveStep
+ }`}
+ {...stateAttribute}
+ >
+
+ {step.state}
+
+
+ {step.label}
+
+ {step.lowDetailGuidance ? (
+
+ {step.lowDetailGuidance}
+
+ ) : null}
+
+ );
+ })}
+
+ );
+}
+
+type ProductRouteStatePanelProps = {
+ variant: "loading" | "empty" | "error";
+ title: string;
+ message: string;
+ compact?: boolean;
+};
+
+export function ProductRouteStatePanel({
+ variant,
+ title,
+ message,
+ compact = false,
+}: ProductRouteStatePanelProps) {
+ const Icon =
+ variant === "error"
+ ? AlertCircle
+ : variant === "loading"
+ ? CircleDashed
+ : ShieldCheck;
+ const colorClass =
+ variant === "error"
+ ? "border-red-300/20 bg-red-300/10 text-red-100"
+ : "border-white/10 bg-black/20 text-neutral-300";
+
+ return (
+
+ );
+}
+
+type ProductRouteDisclosureProps = {
+ title: string;
+ tone: ProductRouteTone;
+ children: React.ReactNode;
+ defaultOpen?: boolean;
+};
+
+export function ProductRouteDisclosure({
+ title,
+ tone,
+ children,
+ defaultOpen = false,
+}: ProductRouteDisclosureProps) {
+ const toneClasses = TONE_CLASSES[tone];
+
+ return (
+
+
+ {title}
+
+ {children}
+
+ );
+}
diff --git a/uapi/jest.config.cjs b/uapi/jest.config.cjs
index ea275332..a637587e 100644
--- a/uapi/jest.config.cjs
+++ b/uapi/jest.config.cjs
@@ -52,6 +52,9 @@ module.exports = {
'^@bitcode/pipeline-asset-pack/read-need-review-resynthesis$': '/../packages/pipelines/asset-pack/src/read-need-review-resynthesis.ts',
'^@bitcode/pipeline-asset-pack/reading-interface-product-parity$': '/../packages/pipelines/asset-pack/src/reading-interface-product-parity.ts',
'^@bitcode/pipeline-asset-pack/reading-pipeline-contract$': '/../packages/pipelines/asset-pack/src/reading-pipeline-contract.ts',
+ '^@bitcode/pipeline-asset-pack/deposit-asset-pack-options$': '/../packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts',
+ '^@bitcode/pipeline-asset-pack/deposit-asset-pack-option-policy$': '/../packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts',
+ '^@bitcode/pipeline-asset-pack/deposit-asset-pack-option-admission$': '/../packages/pipelines/asset-pack/src/deposit-asset-pack-option-admission.ts',
'^@bitcode/pipeline-asset-pack/src/(.+)$': '/../packages/pipelines/asset-pack/src/$1',
'^@bitcode/([^/]+)/src/(.+)$': '/../packages/$1/src/$2',
'^@bitcode/supabase/ssr/server$': '/tests/mocks/supabaseServerClient.ts',
@@ -125,7 +128,12 @@ module.exports = {
'/tests/bitcodeDocsContent.test.tsx',
'/tests/features.test.ts',
'/tests/workspaceSurface.test.ts',
- '/tests/exchangePageClient.test.tsx',
+ '/tests/packsPageClient.test.tsx',
+ '/tests/packActivityModel.test.ts',
+ '/tests/depositRouteModel.test.ts',
+ '/tests/depositPageClient.test.tsx',
+ '/tests/readRouteModel.test.ts',
+ '/tests/readPageClient.test.tsx',
'/tests/exchangeTerminalHandoff.test.ts',
'/tests/terminalPreservedShellSurface.test.tsx',
'/tests/terminalFloatingDebugWidget.test.tsx',
diff --git a/uapi/tests/api/pipelineHarnessRoute.test.ts b/uapi/tests/api/pipelineHarnessRoute.test.ts
index 1d94e05b..935185f0 100644
--- a/uapi/tests/api/pipelineHarnessRoute.test.ts
+++ b/uapi/tests/api/pipelineHarnessRoute.test.ts
@@ -79,12 +79,236 @@ jest.mock('@bitcode/pipeline-hosts', () => ({
},
sourceSafePreview: {
schema: 'bitcode.asset-pack.source-safe-preview',
+ assetPackId: 'asset-pack-route-test',
+ feeQuote: {
+ sats: 546,
+ quoteRoot: 'sha256:route-quote-root',
+ },
unlock: {
state: 'denied',
sourceAvailable: false,
reason: 'settlement blocked in route test',
},
},
+ assetPackPreviewBoundary: {
+ schema: 'bitcode.asset-pack.preview-boundary',
+ boundaryId: 'asset-pack-preview-boundary-route-test',
+ assetPackId: 'asset-pack-route-test',
+ quoteReceipt: {
+ quoteId: 'quote-route-test',
+ deterministic: true,
+ formula: 'sum(measurement.weight * measurement.volume * admitted_fit_quality)',
+ needId: 'need-route-test',
+ admittedFitQuality: 0.91,
+ weightedRequestedVolume: 3,
+ weightedAdmittedVolume: 2.73,
+ sats: 546,
+ finalityState: 'preview_not_paid',
+ payer: 'reader',
+ quoteRoot: 'sha256:route-quote-root',
+ receiptRoot: 'sha256:route-quote-receipt-root',
+ },
+ selectedFitProvenance: {
+ resultState: 'worthy_fit',
+ selectedCandidateAssetIds: ['asset-repository-revision'],
+ fitDepositAssetIds: ['deposit-route-test'],
+ queryRoot: 'sha256:route-query-root',
+ rankingRoot: 'sha256:route-ranking-root',
+ selectedCandidates: [
+ {
+ assetId: 'asset-repository-revision',
+ finalScore: 0.91,
+ semanticScore: 0.82,
+ proofRoot: 'sha256:route-proof-root',
+ measurementRoot: 'sha256:route-measurement-root',
+ reconciliationReadbackRoot: 'sha256:route-readback-root',
+ },
+ ],
+ provenanceRoot: 'sha256:route-provenance-root',
+ },
+ settlementInstructions: {
+ state: 'quote_ready_settlement_required',
+ payer: 'reader',
+ payee: 'depositor',
+ btcNetwork: 'testnet',
+ sats: 546,
+ quoteRoot: 'sha256:route-quote-root',
+ serverCustody: false,
+ settlementRequiredBeforeUnlock: true,
+ instructionsRoot: 'sha256:route-instructions-root',
+ },
+ deliveryPosture: {
+ state: 'withheld_until_settlement',
+ deliveryMechanism: 'pull_request_after_settlement',
+ pullRequestTarget: null,
+ sourceBearingDeliveryVisible: false,
+ availableAfterSettlement: true,
+ blockerCodes: ['btc_fee_unpaid'],
+ deliveryRoot: 'sha256:route-delivery-root',
+ },
+ replayReceipt: {
+ replayMode: 'source-safe-preview-quote-disclosure-boundary-replay',
+ previewRoot: 'sha256:route-preview-root',
+ quoteRoot: 'sha256:route-quote-root',
+ selectedFitProvenanceRoot: 'sha256:route-provenance-root',
+ settlementInstructionsRoot: 'sha256:route-instructions-root',
+ deliveryPostureRoot: 'sha256:route-delivery-root',
+ storageRoot: 'sha256:route-storage-root',
+ replayRoot: 'sha256:route-replay-root',
+ verified: {
+ protectedSourceLeakageAbsent: true,
+ },
+ },
+ proofRoots: {
+ previewRoot: 'sha256:route-preview-root',
+ quoteRoot: 'sha256:route-quote-root',
+ selectedFitProvenanceRoot: 'sha256:route-provenance-root',
+ settlementInstructionsRoot: 'sha256:route-instructions-root',
+ deliveryPostureRoot: 'sha256:route-delivery-root',
+ replayRoot: 'sha256:route-replay-root',
+ boundaryRoot: 'sha256:route-boundary-root',
+ },
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ },
+ storageProjection: [
+ {
+ recordId: 'route-storage-record',
+ recordKind: 'deterministic_btc_quote',
+ namespace: 'asset-pack/preview',
+ key: 'quoteReceipt',
+ root: 'sha256:route-storage-record-root',
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ },
+ payload: {
+ hiddenFromRouteSummary: true,
+ },
+ },
+ ],
+ },
+ assetPackSettlementRightsDeliveryBoundary: {
+ schema: 'bitcode.asset-pack.settlement-rights-delivery-boundary',
+ boundaryId: 'asset-pack-settlement-rights-delivery-route-test',
+ state: 'settlement_delivered',
+ assetPackId: 'asset-pack-route-test',
+ readId: 'read-route-test',
+ orderId: 'order-route-test',
+ previewBoundaryRoot: 'sha256:route-boundary-root',
+ paymentObservation: {
+ paymentReceiptId: 'btc-fee-route-test',
+ payer: 'reader',
+ payee: 'depositor',
+ payerWalletId: 'reader-wallet-route-test',
+ payeeWalletId: 'depositor-wallet-route-test',
+ btcNetwork: 'testnet',
+ expectedSats: 546,
+ observedDebitSats: 546,
+ observedCreditSats: 546,
+ txid: 'testnet-route-txid',
+ serverCustody: false,
+ paymentReceiptRoot: 'sha256:route-payment-root',
+ },
+ finalityReceipt: {
+ finalityState: 'confirmed',
+ confirmations: 6,
+ blockHeight: 840000,
+ txid: 'testnet-route-txid',
+ finalityRoot: 'sha256:route-finality-root',
+ },
+ settlementUnlock: {
+ schema: 'bitcode.asset-pack.settlement-unlock',
+ state: 'licensed_read',
+ sourceAvailable: true,
+ reason: 'settlement delivered in route test',
+ readLicenseId: 'read-license-route-test',
+ pullRequestTarget: 'https://github.com/engineeredsoftware/ENGI/pull/42',
+ missingReadbackKeys: [],
+ },
+ deliveryUnlock: {
+ schema: 'bitcode.asset-pack.delivery-unlock',
+ state: 'source_bearing_pull_request_ready',
+ deliveryMechanism: 'pull_request_after_settlement',
+ pullRequestTarget: 'https://github.com/engineeredsoftware/ENGI/pull/42',
+ sourceBearingDeliveryVisibleToReader: true,
+ protectedSourcePayloadSerialized: false,
+ requiredReceipts: ['btc_payment_observation', 'btd_rights_transfer'],
+ blockerCodes: [],
+ deliveryRoot: 'sha256:route-delivery-unlock-root',
+ },
+ reconciliationReport: {
+ schema: 'bitcode.ledger-database-reconciliation-report',
+ reconciliationId: 'reconciliation-route-test',
+ state: 'aligned',
+ blocking: false,
+ repairActions: [],
+ proofRoots: {
+ repairPlanRoot: 'sha256:route-reconciliation-root',
+ },
+ },
+ replayReceipt: {
+ schema: 'bitcode.asset-pack.settlement-rights-delivery.replay-receipt',
+ replayMode: 'settlement-rights-delivery-replay',
+ previewBoundaryRoot: 'sha256:route-boundary-root',
+ quoteRoot: 'sha256:route-quote-root',
+ paymentReceiptRoot: 'sha256:route-payment-root',
+ finalityRoot: 'sha256:route-finality-root',
+ sourceToSharesRoot: 'sha256:route-source-to-shares-root',
+ rightsTransferRoot: 'sha256:route-rights-root',
+ readReceiptRoot: 'sha256:route-read-root',
+ deliveryRoot: 'sha256:route-delivery-unlock-root',
+ reconciliationRoot: 'sha256:route-reconciliation-root',
+ replayRoot: 'sha256:route-settlement-replay-root',
+ verified: {
+ paymentMatchesQuote: true,
+ finalityConfirmed: true,
+ sourceToSharesConserved: true,
+ rightsTransferConfirmed: true,
+ reconciliationAligned: true,
+ deliveryUnlockedOnlyAfterSettlement: true,
+ protectedSourcePayloadAbsent: true,
+ },
+ },
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ protectedSourcePayloadSerialized: false,
+ sourceBearingDeliveryUnlockedToReader: true,
+ walletPrivateMaterialVisible: false,
+ credentialsSerialized: false,
+ },
+ proofRoots: {
+ previewBoundaryRoot: 'sha256:route-boundary-root',
+ paymentReceiptRoot: 'sha256:route-payment-root',
+ finalityRoot: 'sha256:route-finality-root',
+ sourceToSharesRoot: 'sha256:route-source-to-shares-root',
+ btdReadReceiptRoot: 'sha256:route-read-root',
+ rightsTransferRoot: 'sha256:route-rights-root',
+ settlementUnlockRoot: 'sha256:route-settlement-unlock-root',
+ deliveryRoot: 'sha256:route-delivery-unlock-root',
+ reconciliationRoot: 'sha256:route-reconciliation-root',
+ storageRoot: 'sha256:route-settlement-storage-root',
+ replayRoot: 'sha256:route-settlement-replay-root',
+ boundaryRoot: 'sha256:route-settlement-boundary-root',
+ },
+ storageProjection: [
+ {
+ recordId: 'route-settlement-storage-record',
+ recordKind: 'btd_rights_transfer',
+ namespace: 'asset-pack/settlement',
+ key: 'rightsTransferReceipt',
+ root: 'sha256:route-settlement-storage-record-root',
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ },
+ payload: {
+ hiddenFromRouteSummary: true,
+ },
+ },
+ ],
+ },
},
},
telemetry: '{"type":"pipeline-stream-event","runId":"route-run","stage":"asset-pack-synthesis"}\n',
@@ -474,11 +698,76 @@ describe('POST /api/pipeline-harness/asset-pack', () => {
},
},
sourceSafePreview: {
+ assetPackId: 'asset-pack-route-test',
unlock: {
state: 'denied',
sourceAvailable: false,
},
},
+ assetPackPreviewBoundary: {
+ boundaryId: 'asset-pack-preview-boundary-route-test',
+ assetPackId: 'asset-pack-route-test',
+ quoteReceipt: {
+ sats: 546,
+ quoteRoot: 'sha256:route-quote-root',
+ },
+ selectedFitProvenance: {
+ selectedCandidateAssetIds: ['asset-repository-revision'],
+ fitDepositAssetIds: ['deposit-route-test'],
+ provenanceRoot: 'sha256:route-provenance-root',
+ },
+ settlementInstructions: {
+ state: 'quote_ready_settlement_required',
+ serverCustody: false,
+ },
+ deliveryPosture: {
+ state: 'withheld_until_settlement',
+ sourceBearingDeliveryVisible: false,
+ },
+ storageRecordCount: 1,
+ },
+ assetPackQuoteReceipt: {
+ sats: 546,
+ deterministic: true,
+ quoteRoot: 'sha256:route-quote-root',
+ },
+ assetPackSettlementInstructions: {
+ state: 'quote_ready_settlement_required',
+ serverCustody: false,
+ },
+ assetPackDeliveryPosture: {
+ state: 'withheld_until_settlement',
+ sourceBearingDeliveryVisible: false,
+ },
+ assetPackSettlementRightsDeliveryBoundary: {
+ state: 'settlement_delivered',
+ assetPackId: 'asset-pack-route-test',
+ paymentObservation: {
+ observedDebitSats: 546,
+ expectedSats: 546,
+ serverCustody: false,
+ },
+ finalityReceipt: {
+ finalityState: 'confirmed',
+ },
+ deliveryUnlock: {
+ state: 'source_bearing_pull_request_ready',
+ sourceBearingDeliveryVisibleToReader: true,
+ },
+ reconciliationReport: {
+ state: 'aligned',
+ blocking: false,
+ },
+ storageRecordCount: 1,
+ },
+ assetPackDeliveryUnlock: {
+ state: 'source_bearing_pull_request_ready',
+ sourceBearingDeliveryVisibleToReader: true,
+ },
+ assetPackLedgerDatabaseStorageReconciliation: {
+ state: 'aligned',
+ blocking: false,
+ },
},
});
expect(eventText).toContain('[redacted]');
diff --git a/uapi/tests/api/readReviewRoute.test.ts b/uapi/tests/api/readReviewRoute.test.ts
index 90d198df..12f4a21b 100644
--- a/uapi/tests/api/readReviewRoute.test.ts
+++ b/uapi/tests/api/readReviewRoute.test.ts
@@ -402,8 +402,18 @@ describe('/api/read-review', () => {
rejectedNeedPosturePersisted: true,
findingFitsBlockedUntilAcceptedNeed: true,
},
+ sourceSafety: {
+ protectedSourceVisible: false,
+ rawProviderResponseVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ credentialsSerialized: false,
+ },
});
expect(payload.storageProjection.map((record: { recordKind: string }) => record.recordKind)).toContain('rejected_need_posture');
+ expect(payload.runtimeSummary).toMatchObject({
+ findingFitsAdmitted: false,
+ storageRecordCount: payload.storageProjection.length,
+ });
expect(payload.telemetry).toMatchObject({
schema: 'bitcode.read-need.rejection-telemetry',
returnType: 'RejectedReadNeed',
diff --git a/uapi/tests/bitcodeTransactionsActiveFilters.test.tsx b/uapi/tests/bitcodeTransactionsActiveFilters.test.tsx
index 2f6646da..f3b4e078 100644
--- a/uapi/tests/bitcodeTransactionsActiveFilters.test.tsx
+++ b/uapi/tests/bitcodeTransactionsActiveFilters.test.tsx
@@ -66,7 +66,7 @@ describe('BitcodeTransactionsActiveFilters', () => {
expect(container.firstChild).toBeNull();
});
- it('renders exchange ownership copy for network-scoped transaction filters', () => {
+ it('renders pack activity ownership copy for network-scoped transaction filters', () => {
render(
{
/>,
);
- expect(screen.getByRole('button', { name: 'Ownership: Exchange transactions ×' })).toBeTruthy();
+ expect(screen.getByRole('button', { name: 'Ownership: Pack activity ×' })).toBeTruthy();
});
});
diff --git a/uapi/tests/depositPageClient.test.tsx b/uapi/tests/depositPageClient.test.tsx
new file mode 100644
index 00000000..16569572
--- /dev/null
+++ b/uapi/tests/depositPageClient.test.tsx
@@ -0,0 +1,228 @@
+import React from "react";
+import "@testing-library/jest-dom";
+import { render, screen, waitFor } from "@testing-library/react";
+
+import DepositPageClient from "@/app/deposit/DepositPageClient";
+
+const mockReplace = jest.fn();
+const mockFetchPipelineExecutionHistory = jest.fn();
+const mockUseAuth = jest.fn();
+const mockUseUserData = jest.fn();
+let mockQuery = "transactionId=deposit-1&depositStage=review-options";
+
+jest.mock("next/navigation", () => ({
+ useRouter: () => ({ replace: mockReplace }),
+ useSearchParams: () => new URLSearchParams(mockQuery),
+}));
+
+jest.mock("@/components/base/bitcode/auth/AuthProvider", () => ({
+ useAuth: () => mockUseAuth(),
+}));
+
+jest.mock("@/hooks/useUserData", () => ({
+ useUserData: () => mockUseUserData(),
+}));
+
+jest.mock("@/networking/api-client", () => ({
+ fetchPipelineExecutionHistory: () => mockFetchPipelineExecutionHistory(),
+}));
+
+jest.mock("@/app/terminal/terminal-shell-bridge", () => ({
+ TerminalShellBridgeProvider: ({
+ children,
+ }: {
+ children: React.ReactNode;
+ }) => <>{children}>,
+ useTerminalShellBridge: () => ({
+ snapshot: null,
+ runControl: jest.fn(),
+ }),
+}));
+
+jest.mock("@/app/terminal/TerminalRepositoryContextPanel", () => ({
+ __esModule: true,
+ default: ({
+ onContextChange,
+ routePath,
+ }: {
+ onContextChange: (value: unknown) => void;
+ routePath?: string;
+ }) => {
+ React.useEffect(() => {
+ onContextChange({
+ provider: "github",
+ selectedRepository: {
+ id: "repo-1",
+ fullName: "engineeredsoftware/ENGI",
+ defaultBranch: "main",
+ private: true,
+ language: "TypeScript",
+ topics: [],
+ owner: { username: "engineeredsoftware" },
+ },
+ repositories: [],
+ selectedBranch: "main",
+ selectedCommit: "31bbc0c5227b6b3aed5d107fd8507d35ec22970a",
+ branches: [],
+ commits: [],
+ connectionStatus: { connected: true, valid: true },
+ });
+ }, [onContextChange]);
+ return (
+
+ Repository source selector
+
+ );
+ },
+}));
+
+jest.mock("@/app/terminal/TerminalSupplySelectionPanel", () => ({
+ __esModule: true,
+ default: () => (
+
+ Deposit supply selector
+
+ ),
+}));
+
+jest.mock("@/app/terminal/TerminalDepositComposer", () => ({
+ __esModule: true,
+ default: ({
+ showDemonstrationDraft,
+ }: {
+ showDemonstrationDraft?: boolean;
+ }) => (
+
+ ),
+}));
+
+describe("DepositPageClient", () => {
+ beforeEach(() => {
+ mockReplace.mockReset();
+ mockQuery = "transactionId=deposit-1&depositStage=review-options";
+ mockUseAuth.mockReturnValue({ user: { id: "user-1" } });
+ mockUseUserData.mockReturnValue({
+ data: {
+ profile: {
+ wallet_address: "bc1qexample",
+ wallet_binding: { address: "bc1qexample" },
+ },
+ },
+ hasGitHubConnection: true,
+ hasValidGitHubConnection: true,
+ hasWalletConnection: true,
+ hasVerifiedWalletConnection: true,
+ hasStoredVerifiedWalletConnection: true,
+ walletConnectionStatus: {
+ address: "bc1qexample",
+ provider: "xverse",
+ metadata: { authAddress: "bc1qexample-auth" },
+ },
+ });
+ mockFetchPipelineExecutionHistory.mockResolvedValue([
+ {
+ id: "deposit-1",
+ created_at: "2026-05-29T10:00:00.000Z",
+ status: "completed",
+ type: "agentic-execution:asset-pack",
+ agentic_execution: {
+ canonicalType: "agentic-execution:asset-pack",
+ lens: "deposit",
+ proofStatus: "depository proof ready",
+ closureFocus: "deposit posture",
+ },
+ context: {
+ source: "terminal-deposit-composer",
+ candidateAssetId: "deposit-asset-1",
+ depositorySearchDocumentRoot: "sha256:search",
+ vectorDocumentRoot: "sha256:vector",
+ compensationPreviewRoot: "sha256:compensation",
+ },
+ repo_snapshot: {
+ org: "engineeredsoftware",
+ repo: "ENGI",
+ branch: "main",
+ commit: "31bbc0c5227b6b3aed5d107fd8507d35ec22970a",
+ },
+ output: {},
+ items: [],
+ },
+ ]);
+ global.fetch = jest.fn();
+ });
+
+ afterEach(() => {
+ jest.restoreAllMocks();
+ });
+
+ it("renders /deposit with option synthesis, source-safe state, and live deposit composer ownership", async () => {
+ render( );
+
+ expect(screen.getByTestId("route-shell-deposit")).toBeInTheDocument();
+ expect(
+ screen.getByRole("heading", { name: "Depositing" }),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByTestId("deposit-route-step-connect-source"),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByTestId("deposit-route-step-synthesize-options"),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByTestId("deposit-route-step-review-options"),
+ ).toHaveAttribute("data-deposit-step-state", "current");
+ expect(
+ screen.getByTestId("deposit-route-step-review-options"),
+ ).toHaveAttribute("aria-current", "step");
+ expect(screen.getByText("Source-safe deposit state")).toBeInTheDocument();
+ expect(
+ screen.getAllByText("DepositAssetPackOptionSynthesis").length,
+ ).toBeGreaterThan(0);
+ expect(
+ screen.getAllByText("DepositAssetPackOptionPolicy").length,
+ ).toBeGreaterThan(0);
+ expect(
+ screen.getAllByText("DepositAssetPackOptionAdmissionReport").length,
+ ).toBeGreaterThan(0);
+ expect(
+ screen.getAllByText(/BTC source-to-shares preview/u).length,
+ ).toBeGreaterThan(0);
+ expect(
+ screen.getAllByText(/Approve for Depository/u).length,
+ ).toBeGreaterThan(0);
+ expect(
+ screen.getAllByText(/not-admitted-pending-review/u).length,
+ ).toBeGreaterThan(0);
+ expect(
+ screen.getByTestId("deposit-option-capability-slice"),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByTestId("deposit-option-implementation-pattern"),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByTestId("deposit-option-proof-operations-slice"),
+ ).toBeInTheDocument();
+
+ await waitFor(() =>
+ expect(
+ screen.getByLabelText("Repository source selector"),
+ ).toHaveAttribute("data-route-path", "/deposit"),
+ );
+ expect(
+ screen.getByLabelText("Deposit supply selector"),
+ ).toBeInTheDocument();
+ expect(screen.getByLabelText("Deposit composer")).toHaveAttribute(
+ "data-demonstration",
+ "false",
+ );
+ expect(screen.getByText("Recent Deposit activity")).toBeInTheDocument();
+ });
+});
diff --git a/uapi/tests/depositRouteModel.test.ts b/uapi/tests/depositRouteModel.test.ts
new file mode 100644
index 00000000..29e331c0
--- /dev/null
+++ b/uapi/tests/depositRouteModel.test.ts
@@ -0,0 +1,167 @@
+import {
+ assertDepositRouteSessionSourceSafe,
+ buildDepositRouteSession,
+ readDepositRouteStage,
+ writeDepositRouteStage,
+} from '@/app/deposit/deposit-route-model';
+
+describe('deposit-route-model', () => {
+ it('builds a source-safe five-step DepositRouteSession with option synthesis ownership', () => {
+ const session = buildDepositRouteSession({
+ transactionId: 'deposit-run-1',
+ depositStage: 'review-options',
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ depositorInstructions: 'Create bounded source-safe AssetPack options for review.',
+ sourcePathHints: ['uapi/app/deposit/DepositPageClient.tsx'],
+ sourceCriticalitySignals: [
+ {
+ id: 'sub-critical-route-test',
+ label: 'Route test source is sub-critical.',
+ severity: 'sub-critical',
+ weight: 0.75,
+ },
+ ],
+ depositorWalletId: 'wallet-depositor-1',
+ optionsRequested: true,
+ optionReviewDecisions: [
+ {
+ optionId: 'will-be-ignored-until-synthesis-option-id-is-known',
+ decision: 'pending-depositor-review',
+ },
+ ],
+ });
+
+ expect(session.schema).toBe('bitcode.deposit.route-session');
+ expect(session.route).toBe('/deposit');
+ expect(session.stageCount).toBe(5);
+ expect(session.steps.map((step) => step.id)).toEqual([
+ 'connect-source',
+ 'synthesize-options',
+ 'review-options',
+ 'submit-deposit',
+ 'read-depository-state',
+ ]);
+ expect(session.activeStepId).toBe('review-options');
+ expect(session.pipelineOwnership).toMatchObject({
+ depositOptionPipeline: 'DepositAssetPackOptionSynthesis',
+ depositOptionPolicy: 'DepositAssetPackOptionPolicy',
+ depositOptionAdmission: 'DepositAssetPackOptionAdmissionReport',
+ reviewRequiredBeforeDepositAdmission: true,
+ sourceCriticalityDemandRoiPolicyOwnedByGate6: true,
+ sourceCriticalityDemandRoiPolicyDeferredToGate6: true,
+ admissionAndIndexingOwnedByGate7: true,
+ retainedTerminalDebugCompatible: true,
+ });
+ expect(session.synthesis.schema).toBe('bitcode.deposit.asset-pack-option-synthesis');
+ expect(session.synthesis.optionCount).toBe(3);
+ expect(session.policy.schema).toBe('bitcode.deposit.asset-pack-option-policy-report');
+ expect(session.policy.reviewablePositiveRoiCount).toBeGreaterThan(0);
+ expect(session.policy.aggregatePolicy.compensationPolicy).toBe('future-reader-btc-source-to-shares-route-preview');
+ expect(session.admission.schema).toBe('bitcode.deposit.asset-pack-option-admission-report');
+ expect(session.admission.receipts.every((receipt) => receipt.admission.state === 'not-admitted-pending-review')).toBe(true);
+ expect(session.synthesis.options[0].reviewBoundary.state).toBe('reviewable-source-safe-option');
+ expect(session.disclosure).toMatchObject({
+ sourceSafetyClass: 'source_safe_deposit_option_route_metadata',
+ protectedSourceVisible: false,
+ rawSourceTextVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ walletPrivateMaterialVisible: false,
+ });
+ expect(session.proofRoot).toMatch(/^deposit-route-session:/u);
+ expect(assertDepositRouteSessionSourceSafe(session)).toEqual({
+ admitted: true,
+ reason: 'source_safe_deposit_option_route_metadata',
+ });
+ });
+
+ it('keeps deposit submission blocked until option review is present', () => {
+ const session = buildDepositRouteSession({
+ depositStage: 'submit-deposit',
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ sourcePathHints: ['packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts'],
+ sourceCriticalitySignals: [{ id: 'warning', severity: 'warning', weight: 0.5 }],
+ optionsRequested: true,
+ hasReviewedOption: false,
+ });
+
+ expect(session.activeStepId).toBe('submit-deposit');
+ expect(session.steps.find((step) => step.id === 'submit-deposit')?.blockers).toContain(
+ 'depositor option review required',
+ );
+ expect(session.steps.find((step) => step.id === 'read-depository-state')?.blockers).toContain(
+ 'submitted deposit required',
+ );
+ expect(assertDepositRouteSessionSourceSafe(session).admitted).toBe(true);
+ });
+
+ it('keeps critical or negative-value policy blocked before Gate 7 admission', () => {
+ const session = buildDepositRouteSession({
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ sourcePathHints: ['packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts'],
+ sourceCriticalitySignals: [{ id: 'critical', severity: 'critical', weight: 1 }],
+ developmentCostSats: 9000,
+ expectedSettlementSats: 1000,
+ optionsRequested: true,
+ });
+
+ expect(session.policy.blockedCount).toBe(3);
+ expect(session.policy.evaluations.every((evaluation) => evaluation.policyDecision === 'blocked-before-admission')).toBe(true);
+ expect(session.pipelineOwnership.admissionAndIndexingOwnedByGate7).toBe(true);
+ expect(assertDepositRouteSessionSourceSafe(session).admitted).toBe(true);
+ });
+
+ it('admits approved policy-eligible deposit options into source-safe Depository projections', () => {
+ const initial = buildDepositRouteSession({
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ sourcePathHints: ['uapi/app/deposit/DepositPageClient.tsx'],
+ sourceCriticalitySignals: [{ id: 'sub-critical', severity: 'sub-critical', weight: 0.85 }],
+ depositorWalletId: 'wallet-depositor-1',
+ optionsRequested: true,
+ });
+ const approved = buildDepositRouteSession({
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ sourcePathHints: ['uapi/app/deposit/DepositPageClient.tsx'],
+ sourceCriticalitySignals: [{ id: 'sub-critical', severity: 'sub-critical', weight: 0.85 }],
+ depositorWalletId: 'wallet-depositor-1',
+ optionsRequested: true,
+ optionReviewDecisions: [
+ {
+ optionId: initial.synthesis.options[0].optionId,
+ decision: 'approved-for-admission',
+ reviewerId: 'depositor-1',
+ },
+ ],
+ });
+
+ expect(approved.admission.approvedCount).toBe(1);
+ expect(approved.admission.admittedCount).toBe(1);
+ expect(approved.admission.receipts[0].admission.state).toBe('admitted-to-depository');
+ expect(approved.admission.receipts[0].depositoryIndexProjection.state).toBe('indexed-for-finding-fits');
+ expect(approved.admission.receipts[0].storageProjection.state).toBe('projected-to-object-storage');
+ expect(approved.admission.receipts[0].packsActivitySync.state).toBe('synchronized-to-packs');
+ expect(assertDepositRouteSessionSourceSafe(approved).admitted).toBe(true);
+ });
+
+ it('reads and writes the route-owned depositStage query parameter', () => {
+ const params = new URLSearchParams('transactionId=deposit-run-2');
+ const withStage = writeDepositRouteStage(params, 'submit-deposit');
+
+ expect(withStage.get('depositStage')).toBe('submit-deposit');
+ expect(readDepositRouteStage(withStage)).toBe('submit-deposit');
+ expect(readDepositRouteStage(new URLSearchParams('depositStage=unsafe-stage'))).toBeNull();
+ expect(writeDepositRouteStage(withStage, null).has('depositStage')).toBe(false);
+ });
+});
diff --git a/uapi/tests/exchangePageClient.test.tsx b/uapi/tests/exchangePageClient.test.tsx
deleted file mode 100644
index de2df8f5..00000000
--- a/uapi/tests/exchangePageClient.test.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import React from 'react';
-import '@testing-library/jest-dom';
-import { render, screen, waitFor } from '@testing-library/react';
-
-import ExchangePageClient from '@/app/exchange/ExchangePageClient';
-
-const mockReplace = jest.fn();
-let mockQuery = 'intent=buy-existing-btd';
-
-jest.mock('next/navigation', () => ({
- usePathname: () => '/exchange',
- useRouter: () => ({ replace: mockReplace }),
- useSearchParams: () => new URLSearchParams(mockQuery),
-}));
-
-jest.mock('@/lib/mock-review-mode', () => ({
- isAuxillariesMockMode: () => true,
-}));
-
-jest.mock('@/networking/api-client', () => ({
- fetchPipelineExecutionHistory: jest.fn(),
-}));
-
-jest.mock('@/app/terminal/terminal-shell-bridge', () => ({
- TerminalShellBridgeProvider: ({ children }: { children: React.ReactNode }) => <>{children}>,
-}));
-
-jest.mock('@/app/terminal/TerminalTransactionWorkspace', () => ({
- __esModule: true,
- default: ({
- runs,
- selectedRun,
- surface,
- }: {
- runs: Array<{ id: string }>;
- selectedRun: { id: string } | null;
- surface?: string;
- }) => (
-
- ),
-}));
-
-describe('ExchangePageClient', () => {
- beforeEach(() => {
- mockReplace.mockReset();
- mockQuery = 'intent=buy-existing-btd';
- });
-
- it('renders the Exchange activity master-detail surface without redirecting or route-focusing the first row', async () => {
- render( );
-
- expect(
- screen.getByRole('heading', { name: /Read market activity, select an order, and inspect Exchange state/i }),
- ).toBeInTheDocument();
- expect(screen.getByText('market filters')).toBeInTheDocument();
- expect(screen.getByText('activity replay')).toBeInTheDocument();
- expect(screen.getByText('source-safe preview')).toBeInTheDocument();
- expect(screen.getByText('proof-rooted state')).toBeInTheDocument();
- expect(screen.getByTestId('exchange-workspace')).toHaveAttribute('data-surface', 'exchange');
- expect(screen.getByTestId('exchange-workspace')).toHaveAttribute(
- 'data-selected-run',
- 'mock-run-branch-remediation',
- );
-
- await waitFor(() => {
- expect(screen.getByTestId('exchange-workspace')).toHaveAttribute('data-run-count', '3');
- });
- expect(mockReplace).not.toHaveBeenCalled();
- });
-
- it('honors an explicit Exchange transaction focus without rewriting the entry URL', async () => {
- mockQuery = 'intent=buy-existing-btd&transactionId=mock-run-read-measurement-pass';
-
- render( );
-
- expect(screen.getByTestId('exchange-workspace')).toHaveAttribute(
- 'data-selected-run',
- 'mock-run-read-measurement-pass',
- );
- expect(mockReplace).not.toHaveBeenCalled();
- });
-});
diff --git a/uapi/tests/exchangeTerminalHandoff.test.ts b/uapi/tests/exchangeTerminalHandoff.test.ts
index d447552b..2fcfef1d 100644
--- a/uapi/tests/exchangeTerminalHandoff.test.ts
+++ b/uapi/tests/exchangeTerminalHandoff.test.ts
@@ -1,4 +1,4 @@
-import { buildExchangeHref, buildTerminalHref } from '@/app/terminal/terminal-routes';
+import { buildPacksHref, buildTerminalHref } from '@/app/terminal/terminal-routes';
import {
writeTerminalTransactionDetailSection,
writeTerminalTransactionId,
@@ -26,8 +26,8 @@ const selectedRun: WorkspaceRun = {
closureFocus: 'rights and settlement review',
};
-describe('Exchange and Terminal transaction handoff', () => {
- it('builds Exchange links that preserve transaction, detail, filters, and unknown context', () => {
+describe('Packs and Terminal transaction handoff', () => {
+ it('builds Packs links that preserve transaction, detail, filters, and unknown context', () => {
const baseParams = new URLSearchParams(
'transactionId=old-run&transactionDetail=history&provider=github&repo=engineeredsoftware%2FENGI&transactionSearch=AssetPack&transactionOwnership=network',
);
@@ -36,21 +36,21 @@ describe('Exchange and Terminal transaction handoff', () => {
'journal',
);
- const exchangeHref = buildExchangeHref(nextParams);
+ const packsHref = buildPacksHref(nextParams);
const terminalHref = buildTerminalHref(nextParams);
- expect(exchangeHref).toContain('/exchange?');
- expect(exchangeHref).toContain('transactionId=tx-exchange-handoff');
- expect(exchangeHref).toContain('transactionDetail=journal');
- expect(exchangeHref).toContain('provider=github');
- expect(exchangeHref).toContain('repo=engineeredsoftware%2FENGI');
- expect(exchangeHref).toContain('transactionSearch=AssetPack');
- expect(exchangeHref).toContain('transactionOwnership=network');
+ expect(packsHref).toContain('/packs?');
+ expect(packsHref).toContain('transactionId=tx-exchange-handoff');
+ expect(packsHref).toContain('transactionDetail=journal');
+ expect(packsHref).toContain('provider=github');
+ expect(packsHref).toContain('repo=engineeredsoftware%2FENGI');
+ expect(packsHref).toContain('transactionSearch=AssetPack');
+ expect(packsHref).toContain('transactionOwnership=network');
expect(terminalHref).toContain('/terminal?');
expect(terminalHref).toContain('transactionId=tx-exchange-handoff');
});
- it('adds a source-safe Exchange handoff to the transaction read model', () => {
+ it('adds a source-safe Packs handoff to the transaction read model', () => {
const model = buildTerminalTransactionReadModel({
selectedRun,
detail: null,
@@ -62,7 +62,7 @@ describe('Exchange and Terminal transaction handoff', () => {
});
expect(model.route.href).toContain('/terminal?');
- expect(model.route.exchangeHref).toContain('/exchange?');
+ expect(model.route.exchangeHref).toContain('/packs?');
expect(model.route.exchangeHref).toContain('transactionId=tx-exchange-handoff');
expect(model.route.exchangeHref).toContain('transactionDetail=proofs');
expect(model.route.exchangeHref).toContain('provider=github');
diff --git a/uapi/tests/footerPublicShell.test.tsx b/uapi/tests/footerPublicShell.test.tsx
index 45d12185..014207d3 100644
--- a/uapi/tests/footerPublicShell.test.tsx
+++ b/uapi/tests/footerPublicShell.test.tsx
@@ -51,9 +51,17 @@ describe('Footer public shell', () => {
it('renders third-gate public labels and opens orbitals access for guests', () => {
render();
- expect(screen.getByRole('link', { name: 'Exchange' })).toHaveAttribute(
+ expect(screen.getByRole('link', { name: 'Packs' })).toHaveAttribute(
'href',
- '/exchange',
+ '/packs',
+ );
+ expect(screen.getByRole('link', { name: 'Deposit' })).toHaveAttribute(
+ 'href',
+ '/deposit',
+ );
+ expect(screen.getByRole('link', { name: 'Read' })).toHaveAttribute(
+ 'href',
+ '/read',
);
expect(screen.getByRole('link', { name: 'Terminal' })).toHaveAttribute(
'href',
@@ -67,14 +75,18 @@ describe('Footer public shell', () => {
'href',
'https://github.com/engineeredsoftware/bitcode',
);
- expect(screen.getByRole('button', { name: 'Explain Exchange' })).toBeInTheDocument();
+ expect(screen.getByRole('button', { name: 'Explain Packs' })).toBeInTheDocument();
+ expect(screen.getByRole('button', { name: 'Explain Deposit' })).toBeInTheDocument();
+ expect(screen.getByRole('button', { name: 'Explain Read' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: 'Explain Terminal' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: 'Explain Docs' })).toBeInTheDocument();
- expect(screen.getByText('Public exchange')).toBeInTheDocument();
+ expect(screen.getByText('Pack activity')).toBeInTheDocument();
+ expect(screen.getByText('Depositing flow')).toBeInTheDocument();
+ expect(screen.getByText('Reading flow')).toBeInTheDocument();
expect(screen.getAllByText('Terminal').length).toBeGreaterThan(0);
expect(screen.getByText('Docs hub')).toBeInTheDocument();
- expect(screen.getByText('Deposit')).toBeInTheDocument();
- expect(screen.getByText('Read')).toBeInTheDocument();
+ expect(screen.getAllByText('Deposit').length).toBeGreaterThan(0);
+ expect(screen.getAllByText('Read').length).toBeGreaterThan(0);
expect(screen.getAllByText('Settle').length).toBeGreaterThan(0);
expect(screen.getAllByText('🧪').length).toBeGreaterThan(0);
const protocolSpecLink = screen.getByRole('link', { name: 'Protocol spec' });
diff --git a/uapi/tests/marketingLandingPage.test.tsx b/uapi/tests/marketingLandingPage.test.tsx
index 9c015c30..a5d5895b 100644
--- a/uapi/tests/marketingLandingPage.test.tsx
+++ b/uapi/tests/marketingLandingPage.test.tsx
@@ -83,8 +83,8 @@ describe('MarketingLandingPage', () => {
screen.getByText('Bitcode is auditable market infrastructure for technical knowledge.'),
).toBeInTheDocument();
expect(
- screen.getByRole('link', { name: 'Open Terminal' }),
- ).toHaveAttribute('href', '/terminal');
+ screen.getByRole('link', { name: 'Request Read' }),
+ ).toHaveAttribute('href', '/read');
expect(screen.getByRole('link', { name: 'Read docs' })).toHaveAttribute(
'href',
'/docs',
diff --git a/uapi/tests/navBrand.test.tsx b/uapi/tests/navBrand.test.tsx
index e1115471..730143f6 100644
--- a/uapi/tests/navBrand.test.tsx
+++ b/uapi/tests/navBrand.test.tsx
@@ -12,12 +12,12 @@ describe('NavBrand', () => {
expect(screen.getByText('terminal')).toBeTruthy();
});
- it('renders exchange copy for mounted exchange routes', () => {
+ it('renders packs copy for mounted pack activity routes', () => {
render( {}} />);
expect(screen.getByLabelText('Bitcode logo')).toBeTruthy();
expect(screen.getByText('Bitcode')).toBeTruthy();
- expect(screen.getByText('exchange')).toBeTruthy();
+ expect(screen.getByText('packs')).toBeTruthy();
});
it('renders homepage copy for the public homepage', () => {
diff --git a/uapi/tests/navPublicShell.test.tsx b/uapi/tests/navPublicShell.test.tsx
index 35b80072..d2ffa8b9 100644
--- a/uapi/tests/navPublicShell.test.tsx
+++ b/uapi/tests/navPublicShell.test.tsx
@@ -110,11 +110,15 @@ describe('Nav public shell', () => {
const createButton = screen.getByRole('button', { name: 'Connect Wallet' });
expect(screen.getByText('Brand home')).toBeInTheDocument();
- expect(screen.getByRole('link', { name: 'Exchange' })).toHaveAttribute('href', '/exchange');
- expect(screen.getByRole('link', { name: 'Exchange' })).not.toHaveAttribute('aria-current');
+ expect(screen.getByRole('link', { name: 'Packs' })).toHaveAttribute('href', '/packs');
+ expect(screen.getByRole('link', { name: 'Packs' })).not.toHaveAttribute('aria-current');
+ expect(screen.getByRole('link', { name: 'Deposit' })).toHaveAttribute('href', '/deposit');
+ expect(screen.getByRole('link', { name: 'Read' })).toHaveAttribute('href', '/read');
expect(screen.getByRole('link', { name: 'Terminal' })).toHaveAttribute('href', '/terminal');
expect(screen.getByRole('link', { name: 'Docs' })).toHaveAttribute('href', '/docs');
- expect(screen.getByRole('button', { name: 'Explain Exchange' })).toBeInTheDocument();
+ expect(screen.getByRole('button', { name: 'Explain Packs' })).toBeInTheDocument();
+ expect(screen.getByRole('button', { name: 'Explain Deposit' })).toBeInTheDocument();
+ expect(screen.getByRole('button', { name: 'Explain Read' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: 'Explain Terminal' })).toBeInTheDocument();
expect(screen.getByRole('button', { name: 'Explain Docs' })).toBeInTheDocument();
@@ -158,7 +162,9 @@ describe('Nav public shell', () => {
render( );
expect(screen.getByText('Brand home')).toBeInTheDocument();
+ expect(screen.getByRole('link', { name: 'Deposit' })).toHaveAttribute('href', '/deposit');
expect(screen.getByRole('link', { name: 'Terminal' })).toHaveAttribute('href', '/terminal');
+ expect(screen.getByRole('link', { name: 'Read' })).toHaveAttribute('href', '/read');
expect(screen.getByRole('button', { name: 'Explain Terminal' })).toBeInTheDocument();
expect(screen.getByText('Notifications')).toBeInTheDocument();
@@ -176,14 +182,34 @@ describe('Nav public shell', () => {
expect(screen.getByRole('link', { name: 'Docs' })).toHaveAttribute('href', '/docs');
});
- it('renders exchange brand posture and active nav on exchange routes', () => {
- mockPathname = '/exchange';
+ it('renders pack brand posture and active nav on pack routes', () => {
+ mockPathname = '/packs';
render( );
expect(screen.getByText('Brand network')).toBeInTheDocument();
- expect(screen.getByRole('link', { name: 'Exchange' })).toHaveAttribute('href', '/exchange');
- expect(screen.getByRole('link', { name: 'Exchange' })).toHaveAttribute('aria-current', 'page');
+ expect(screen.getByRole('link', { name: 'Packs' })).toHaveAttribute('href', '/packs');
+ expect(screen.getByRole('link', { name: 'Packs' })).toHaveAttribute('aria-current', 'page');
+ });
+
+ it('renders read brand posture and active nav on read routes', () => {
+ mockPathname = '/read';
+
+ render( );
+
+ expect(screen.getByText('Brand read')).toBeInTheDocument();
+ expect(screen.getByRole('link', { name: 'Read' })).toHaveAttribute('href', '/read');
+ expect(screen.getByRole('link', { name: 'Read' })).toHaveAttribute('aria-current', 'page');
+ });
+
+ it('renders deposit brand posture and active nav on deposit routes', () => {
+ mockPathname = '/deposit';
+
+ render( );
+
+ expect(screen.getByText('Brand deposit')).toBeInTheDocument();
+ expect(screen.getByRole('link', { name: 'Deposit' })).toHaveAttribute('href', '/deposit');
+ expect(screen.getByRole('link', { name: 'Deposit' })).toHaveAttribute('aria-current', 'page');
});
it('treats /edgetimes as a docs-branded public route', () => {
diff --git a/uapi/tests/navWorkspaceChrome.test.tsx b/uapi/tests/navWorkspaceChrome.test.tsx
index 456feb49..ce4714ea 100644
--- a/uapi/tests/navWorkspaceChrome.test.tsx
+++ b/uapi/tests/navWorkspaceChrome.test.tsx
@@ -101,7 +101,7 @@ describe('Nav Terminal product chrome', () => {
const accessButton = screen.getByRole('button', { name: 'Open Auxillaries' });
const createButton = screen.getByRole('button', { name: 'Connect Wallet' });
- expect(screen.getByRole('link', { name: 'Exchange' })).toHaveAttribute('href', '/exchange');
+ expect(screen.getByRole('link', { name: 'Packs' })).toHaveAttribute('href', '/packs');
expect(screen.getByRole('link', { name: 'Terminal' })).toHaveAttribute('href', '/terminal');
expect(screen.getByRole('link', { name: 'Docs' })).toHaveAttribute('href', '/docs');
fireEvent.mouseEnter(accessButton);
@@ -143,7 +143,7 @@ describe('Nav Terminal product chrome', () => {
render( );
- expect(screen.getByRole('link', { name: 'Exchange' })).toHaveAttribute('href', '/exchange');
+ expect(screen.getByRole('link', { name: 'Packs' })).toHaveAttribute('href', '/packs');
expect(screen.getByRole('link', { name: 'Terminal' })).toHaveAttribute('href', '/terminal');
expect(screen.getByRole('link', { name: 'Docs' })).toHaveAttribute('href', '/docs');
expect(screen.queryByRole('button', { name: 'Open Auxillaries' })).toBeNull();
diff --git a/uapi/tests/packActivityModel.test.ts b/uapi/tests/packActivityModel.test.ts
new file mode 100644
index 00000000..3bdd68f2
--- /dev/null
+++ b/uapi/tests/packActivityModel.test.ts
@@ -0,0 +1,130 @@
+import {
+ assertPackActivitySourceSafe,
+ buildPackActivityDetailProjection,
+ normalizePackActivityRecord,
+ queryPackActivityRecords,
+} from '@/components/base/bitcode/activity/pack-activity-model';
+import type { BitcodeActivityRecord } from '@/components/base/bitcode/activity/bitcode-activity-model';
+
+describe('pack-activity-model', () => {
+ const baseRecord: BitcodeActivityRecord = {
+ id: 'pack-activity-1',
+ kind: 'execution',
+ scope: 'network',
+ channel: 'system-surface',
+ label: 'Executions',
+ title: 'ReadFitsFindingSynthesis preview',
+ summary: 'Synthesized a source-safe AssetPack preview for accepted Need.',
+ timestamp: '2026-05-28T10:00:00.000Z',
+ state: 'completed',
+ read: null,
+ payload: {
+ type: 'pipeline:read-fits',
+ repo_snapshot: {
+ org: 'engineeredsoftware',
+ repo: 'ENGI',
+ },
+ assetPackTitle: 'Auth rollback proof pack',
+ measuredBtd: 42,
+ btcFeeSats: 3200,
+ finalityState: 'quote_ready',
+ compensationState: 'source_to_shares_preview_ready',
+ deliveryState: 'locked_until_settlement',
+ repairState: 'not_required',
+ assetPackMeasurementRoot: 'measurement-root-abc',
+ settlementReceiptRoot: 'settlement-root-def',
+ protectedSource: 'protected source body',
+ rawPrompt: 'raw prompt text',
+ interpolatedPrompt: 'interpolated prompt text',
+ rawProviderResponse: 'raw provider response',
+ sourceSnippet: 'source snippet',
+ patch: 'diff --git a/protected b/protected',
+ },
+ };
+
+ it('normalizes source-safe PackActivity records with measurements, values, and proof roots', () => {
+ const record = normalizePackActivityRecord(baseRecord);
+
+ expect(record).toMatchObject({
+ id: 'pack-activity-1',
+ type: 'read-need-fit-preview',
+ repository: 'engineeredsoftware/ENGI',
+ assetPackTitle: 'Auth rollback proof pack',
+ settlementState: 'quote_ready',
+ compensationState: 'source_to_shares_preview_ready',
+ deliveryState: 'locked_until_settlement',
+ });
+ expect(record.measurements.some((measurement) => measurement.id === 'measured-btd')).toBe(true);
+ expect(record.values.some((value) => value.id === 'btc-fee')).toBe(true);
+ expect(record.proofRoots.map((proofRoot) => proofRoot.root)).toContain('settlement-root-def');
+ expect(assertPackActivitySourceSafe(record)).toBe(true);
+ expect(JSON.stringify(record)).not.toContain('protected source body');
+ expect(JSON.stringify(record)).not.toContain('raw prompt text');
+ expect(JSON.stringify(record)).not.toContain('raw provider response');
+ });
+
+ it('searches, filters, sorts, and projects source-safe detail', () => {
+ const records = [
+ normalizePackActivityRecord(baseRecord),
+ normalizePackActivityRecord({
+ ...baseRecord,
+ id: 'pack-activity-2',
+ title: 'Deposit option repair',
+ summary: 'Repair state opened for a deposit AssetPack option.',
+ timestamp: '2026-05-28T09:00:00.000Z',
+ state: 'running',
+ payload: {
+ type: 'deposit option synthesis',
+ assetPackTitle: 'Vector index cleanup pack',
+ repairState: 'open_reconciliation',
+ sourceToSharesRoot: 'source-shares-root-xyz',
+ },
+ }),
+ ];
+
+ const result = queryPackActivityRecords(records, {
+ search: 'rollback',
+ filters: { type: 'read-need-fit-preview' },
+ sort: { key: 'value', direction: 'desc' },
+ });
+
+ expect(result.records.map((record) => record.id)).toEqual(['pack-activity-1']);
+ expect(result.summary.total).toBe(1);
+
+ const detail = buildPackActivityDetailProjection(result.records[0]);
+ expect(detail.states.settlement).toBe('quote_ready');
+ expect(detail.proofRoots.length).toBeGreaterThan(0);
+ expect(assertPackActivitySourceSafe(detail)).toBe(true);
+ });
+
+ it('projects approved deposit admission receipts as Depository AssetPack activity', () => {
+ const record = normalizePackActivityRecord({
+ ...baseRecord,
+ id: 'pack-activity-deposit-admission',
+ title: 'Pipeline execution',
+ summary: 'Admitted Repository capability AssetPack option to the Depository.',
+ state: 'completed',
+ payload: {
+ type: 'pipeline:deposit-option-admission',
+ assetPackTitle: 'Repository capability AssetPack option',
+ optionCount: 3,
+ admittedCount: 1,
+ admissionState: 'admitted-to-depository',
+ compensationState: 'compensation-preview-ready',
+ packActivitySyncState: 'synchronized-to-packs',
+ admissionReportRoot: 'deposit-admission-report-root',
+ protectedSource: 'protected source body',
+ rawProviderResponse: 'raw provider response',
+ },
+ });
+
+ expect(record.type).toBe('depository-assetpack');
+ expect(record.assetPackTitle).toBe('Repository capability AssetPack option');
+ expect(record.measurements.some((measurement) => measurement.id === 'admitted-count')).toBe(true);
+ expect(record.compensationState).toBe('compensation-preview-ready');
+ expect(record.proofRoots.map((proofRoot) => proofRoot.root)).toContain('deposit-admission-report-root');
+ expect(assertPackActivitySourceSafe(record)).toBe(true);
+ expect(JSON.stringify(record)).not.toContain('protected source body');
+ expect(JSON.stringify(record)).not.toContain('raw provider response');
+ });
+});
diff --git a/uapi/tests/packsPageClient.test.tsx b/uapi/tests/packsPageClient.test.tsx
new file mode 100644
index 00000000..7d55511c
--- /dev/null
+++ b/uapi/tests/packsPageClient.test.tsx
@@ -0,0 +1,191 @@
+import React from "react";
+import "@testing-library/jest-dom";
+import {
+ fireEvent,
+ render,
+ screen,
+ waitFor,
+ within,
+} from "@testing-library/react";
+
+import PacksPageClient from "@/app/packs/PacksPageClient";
+
+const mockReplace = jest.fn();
+let mockQuery = "q=rollback&type=read-need-fit-preview";
+
+jest.mock("next/navigation", () => ({
+ usePathname: () => "/packs",
+ useRouter: () => ({ replace: mockReplace }),
+ useSearchParams: () => new URLSearchParams(mockQuery),
+}));
+
+describe("PacksPageClient", () => {
+ beforeEach(() => {
+ mockReplace.mockReset();
+ mockQuery = "q=rollback&type=read-need-fit-preview";
+ global.fetch = jest.fn(async () => ({
+ ok: true,
+ json: async () => ({
+ ok: true,
+ records: [
+ {
+ id: "pack-activity-1",
+ type: "read-need-fit-preview",
+ scope: "network",
+ title: "Auth rollback proof pack",
+ description: "Source-safe AssetPack preview.",
+ timestamp: "2026-05-28T10:00:00.000Z",
+ state: "completed",
+ repository: "engineeredsoftware/ENGI",
+ assetPackTitle: "Auth rollback proof pack",
+ settlementState: "quote_ready",
+ compensationState: "source_to_shares_preview_ready",
+ deliveryState: "locked_until_settlement",
+ repairState: "not_required",
+ measurements: [
+ {
+ id: "measured-btd",
+ label: "Measured btd",
+ value: 42,
+ unit: "BTD",
+ root: null,
+ },
+ ],
+ values: [
+ { id: "btc-fee", label: "Btc fee", amount: 3200, unit: "sats" },
+ ],
+ proofRoots: [
+ {
+ id: "settlement-root",
+ label: "Settlement root",
+ root: "settlement-root-def",
+ },
+ ],
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ sourceSnippetVisible: false,
+ },
+ metadata: {},
+ },
+ ],
+ detail: {
+ id: "pack-activity-1",
+ type: "read-need-fit-preview",
+ title: "Auth rollback proof pack",
+ description: "Source-safe AssetPack preview.",
+ timestamp: "2026-05-28T10:00:00.000Z",
+ sourceSafety: {
+ sourceSafeMetadataOnly: true,
+ protectedSourceVisible: false,
+ unpaidAssetPackSourceVisible: false,
+ rawPromptVisible: false,
+ interpolatedPromptVisible: false,
+ rawProviderResponseVisible: false,
+ sourceSnippetVisible: false,
+ },
+ overview: {
+ state: "completed",
+ scope: "network",
+ repository: "engineeredsoftware/ENGI",
+ assetPackTitle: "Auth rollback proof pack",
+ },
+ measurements: [
+ {
+ id: "measured-btd",
+ label: "Measured btd",
+ value: 42,
+ unit: "BTD",
+ root: null,
+ },
+ ],
+ values: [
+ { id: "btc-fee", label: "Btc fee", amount: 3200, unit: "sats" },
+ ],
+ proofRoots: [
+ {
+ id: "settlement-root",
+ label: "Settlement root",
+ root: "settlement-root-def",
+ },
+ ],
+ states: {
+ settlement: "quote_ready",
+ compensation: "source_to_shares_preview_ready",
+ delivery: "locked_until_settlement",
+ repair: "not_required",
+ },
+ telemetry: {
+ sourceEventId: "pack-activity-1",
+ sourceKind: "execution",
+ sourceChannel: "system-surface",
+ },
+ metadata: {},
+ },
+ summary: {
+ total: 1,
+ types: { "read-need-fit-preview": 1 },
+ states: { completed: 1 },
+ repositories: ["engineeredsoftware/ENGI"],
+ settlementReady: 1,
+ compensationReady: 1,
+ deliveryReady: 0,
+ repairOpen: 0,
+ },
+ }),
+ })) as jest.Mock;
+ });
+
+ afterEach(() => {
+ jest.restoreAllMocks();
+ });
+
+ it("renders searchable Packs activity and source-safe detail readback", async () => {
+ render( );
+
+ expect(screen.getByTestId("route-shell-packs")).toBeInTheDocument();
+ expect(
+ screen.getByRole("heading", { name: "Pack activity" }),
+ ).toBeInTheDocument();
+ await waitFor(() =>
+ expect(
+ screen.getAllByText("Auth rollback proof pack").length,
+ ).toBeGreaterThan(0),
+ );
+ expect(screen.getByText("Proof roots")).toBeInTheDocument();
+ expect(screen.getByText("settlement-root-def")).toBeInTheDocument();
+ expect(screen.getAllByText("quote_ready").length).toBeGreaterThan(0);
+ expect(
+ JSON.stringify(screen.queryByText(/protected source/i)),
+ ).not.toContain("protected source body");
+ });
+
+ it("writes route query params for filters and selected detail", async () => {
+ render( );
+
+ await waitFor(() =>
+ expect(
+ within(screen.getByRole("table")).getByText("Auth rollback proof pack"),
+ ).toBeInTheDocument(),
+ );
+ fireEvent.click(
+ within(screen.getByRole("table")).getByText("Auth rollback proof pack"),
+ );
+ expect(mockReplace).toHaveBeenCalledWith(
+ "/packs?q=rollback&type=read-need-fit-preview&detailId=pack-activity-1",
+ { scroll: false },
+ );
+
+ fireEvent.change(screen.getByLabelText("Activity type"), {
+ target: { value: "settlement" },
+ });
+ expect(mockReplace).toHaveBeenCalledWith(
+ "/packs?q=rollback&type=settlement",
+ { scroll: false },
+ );
+ });
+});
diff --git a/uapi/tests/readPageClient.test.tsx b/uapi/tests/readPageClient.test.tsx
new file mode 100644
index 00000000..f7273e2e
--- /dev/null
+++ b/uapi/tests/readPageClient.test.tsx
@@ -0,0 +1,196 @@
+import React from "react";
+import "@testing-library/jest-dom";
+import { render, screen, waitFor } from "@testing-library/react";
+
+import ReadPageClient from "@/app/read/ReadPageClient";
+
+const mockReplace = jest.fn();
+const mockFetchPipelineExecutionHistory = jest.fn();
+let mockQuery = "transactionId=read-admission-1&readingStage=request-fit";
+
+jest.mock("next/navigation", () => ({
+ useRouter: () => ({ replace: mockReplace }),
+ useSearchParams: () => new URLSearchParams(mockQuery),
+}));
+
+jest.mock("@/networking/api-client", () => ({
+ fetchPipelineExecutionHistory: () => mockFetchPipelineExecutionHistory(),
+}));
+
+jest.mock("@/app/terminal/terminal-shell-bridge", () => ({
+ TerminalShellBridgeProvider: ({
+ children,
+ }: {
+ children: React.ReactNode;
+ }) => <>{children}>,
+}));
+
+jest.mock("@/app/terminal/TerminalRepositoryContextPanel", () => ({
+ __esModule: true,
+ default: ({
+ onContextChange,
+ }: {
+ onContextChange: (value: unknown) => void;
+ }) => {
+ React.useEffect(() => {
+ onContextChange({
+ provider: "github",
+ selectedRepository: {
+ id: "repo-1",
+ fullName: "engineeredsoftware/ENGI",
+ defaultBranch: "main",
+ private: true,
+ language: "TypeScript",
+ topics: [],
+ },
+ selectedBranch: "main",
+ selectedCommit: "31bbc0c5227b6b3aed5d107fd8507d35ec22970a",
+ branches: [],
+ commits: [],
+ connectionStatus: { connected: true, valid: true },
+ });
+ }, [onContextChange]);
+ return (
+
+ Repository source selector
+
+ );
+ },
+}));
+
+jest.mock("@/app/terminal/TerminalReadScenarioPanel", () => ({
+ __esModule: true,
+ default: () => (
+
+ Read request scenarios
+
+ ),
+}));
+
+jest.mock("@/app/terminal/TerminalDepositReadWorkbench", () => ({
+ __esModule: true,
+ default: ({
+ admittedReadActivityId,
+ routeReadingStage,
+ showDemonstrationWorkbench,
+ }: {
+ admittedReadActivityId?: string | null;
+ routeReadingStage?: string | null;
+ showDemonstrationWorkbench?: boolean;
+ }) => (
+
+ ),
+}));
+
+describe("ReadPageClient", () => {
+ beforeEach(() => {
+ mockReplace.mockReset();
+ mockQuery = "transactionId=read-admission-1&readingStage=request-fit";
+ mockFetchPipelineExecutionHistory.mockResolvedValue([
+ {
+ id: "deposit-1",
+ created_at: "2026-05-28T10:00:00.000Z",
+ status: "completed",
+ type: "agentic-execution:asset-pack",
+ agentic_execution: {
+ canonicalType: "agentic-execution:asset-pack",
+ lens: "deposit",
+ proofStatus: "depository proof ready",
+ closureFocus: "deposit posture",
+ },
+ context: {
+ source: "terminal-deposit-composer",
+ candidateAssetId: "deposit-asset-1",
+ },
+ repo_snapshot: {
+ org: "engineeredsoftware",
+ repo: "ENGI",
+ branch: "main",
+ commit: "31bbc0c5227b6b3aed5d107fd8507d35ec22970a",
+ },
+ output: {},
+ items: [],
+ },
+ {
+ id: "read-admission-1",
+ created_at: "2026-05-28T10:05:00.000Z",
+ status: "completed",
+ type: "agentic-execution:read-measurement",
+ agentic_execution: {
+ canonicalType: "agentic-execution:read-measurement",
+ lens: "read",
+ proofStatus: "read Need accepted",
+ closureFocus: "read measurement + Finding Fits admission",
+ },
+ context: {
+ source: "terminal-deposit-read-workbench",
+ workbench: "read-admission",
+ },
+ repo_snapshot: {
+ org: "engineeredsoftware",
+ repo: "ENGI",
+ branch: "main",
+ commit: "31bbc0c5227b6b3aed5d107fd8507d35ec22970a",
+ },
+ output: {},
+ items: [],
+ },
+ ]);
+ global.fetch = jest.fn();
+ });
+
+ afterEach(() => {
+ jest.restoreAllMocks();
+ });
+
+ it("renders the five-step /read route with source-safe session state and live workbench ownership", async () => {
+ render( );
+
+ expect(screen.getByTestId("route-shell-read")).toBeInTheDocument();
+ expect(
+ screen.getByRole("heading", { name: "Reading" }),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByTestId("read-route-step-request-read"),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByTestId("read-route-step-review-synthesized-need"),
+ ).toBeInTheDocument();
+ expect(screen.getByTestId("read-route-step-request-fit")).toHaveAttribute(
+ "data-reading-step-state",
+ "current",
+ );
+ expect(screen.getByTestId("read-route-step-request-fit")).toHaveAttribute(
+ "aria-current",
+ "step",
+ );
+ expect(screen.getByText("Source-safe read state")).toBeInTheDocument();
+ expect(
+ screen.getByText("ReadNeedComprehensionSynthesis"),
+ ).toBeInTheDocument();
+ expect(screen.getByText("ReadFitsFindingSynthesis")).toBeInTheDocument();
+
+ await waitFor(() =>
+ expect(
+ screen.getByLabelText("Repository source selector"),
+ ).toBeInTheDocument(),
+ );
+ const workbench = screen.getByLabelText("Reading workbench");
+ await waitFor(() =>
+ expect(workbench).toHaveAttribute(
+ "data-admitted-read",
+ "read-admission-1",
+ ),
+ );
+ expect(workbench).toHaveAttribute("data-route-stage", "request-fit");
+ expect(workbench).toHaveAttribute("data-demonstration", "false");
+ expect(screen.getByText("Recent Reading activity")).toBeInTheDocument();
+ });
+});
diff --git a/uapi/tests/readRouteModel.test.ts b/uapi/tests/readRouteModel.test.ts
new file mode 100644
index 00000000..56e823b6
--- /dev/null
+++ b/uapi/tests/readRouteModel.test.ts
@@ -0,0 +1,77 @@
+import {
+ assertReadRouteSessionSourceSafe,
+ buildReadRouteSession,
+ readReadRouteStage,
+ writeReadRouteStage,
+} from '@/app/read/read-route-model';
+
+describe('read-route-model', () => {
+ it('builds a source-safe five-step ReadRouteSession', () => {
+ const session = buildReadRouteSession({
+ transactionId: 'read-run-1',
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ sourceBranch: 'main',
+ sourceCommit: '31bbc0c5227b6b3aed5d107fd8507d35ec22970a',
+ hasRepositorySource: true,
+ hasReadMeasurement: true,
+ hasSynthesizedNeed: true,
+ hasAcceptedNeed: true,
+ hasSourceSafePreview: true,
+ });
+
+ expect(session.schema).toBe('bitcode.read.route-session');
+ expect(session.route).toBe('/read');
+ expect(session.stageCount).toBe(5);
+ expect(session.steps.map((step) => step.id)).toEqual([
+ 'request-read',
+ 'review-synthesized-need',
+ 'request-fit',
+ 'review-synthesized-asset-pack',
+ 'buy-asset-pack-settle',
+ ]);
+ expect(session.pipelineOwnership.readNeedPipeline).toBe('ReadNeedComprehensionSynthesis');
+ expect(session.pipelineOwnership.findingFitsPipeline).toBe('ReadFitsFindingSynthesis');
+ expect(session.pipelineOwnership.acceptedNeedRequiredBeforeFindingFits).toBe(true);
+ expect(session.pipelineOwnership.previewSourceSafeBeforeSettlement).toBe(true);
+ expect(session.pipelineOwnership.deliveryRequiresPaidReadRights).toBe(true);
+ expect(session.disclosure.protectedSourceVisible).toBe(false);
+ expect(session.disclosure.unpaidAssetPackSourceVisible).toBe(false);
+ expect(session.disclosure.rawPromptVisible).toBe(false);
+ expect(session.disclosure.interpolatedPromptVisible).toBe(false);
+ expect(session.disclosure.rawProviderResponseVisible).toBe(false);
+ expect(session.proofRoot).toMatch(/^read-route-session:/u);
+ expect(assertReadRouteSessionSourceSafe(session)).toEqual({
+ admitted: true,
+ reason: 'source_safe_read_route_metadata',
+ });
+ });
+
+ it('keeps Finding Fits blocked until a synthesized Need is accepted', () => {
+ const session = buildReadRouteSession({
+ routeReadingStage: 'request-fit',
+ repositoryFullName: 'engineeredsoftware/ENGI',
+ hasRepositorySource: true,
+ hasReadMeasurement: true,
+ hasSynthesizedNeed: true,
+ hasAcceptedNeed: false,
+ });
+
+ expect(session.activeStepId).toBe('request-fit');
+ expect(session.readObjects.acceptedNeedPresent).toBe(false);
+ expect(session.steps.find((step) => step.id === 'request-fit')?.blockers).toContain('accepted Need required');
+ expect(session.steps.find((step) => step.id === 'review-synthesized-asset-pack')?.blockers).toContain(
+ 'accepted Need required',
+ );
+ expect(assertReadRouteSessionSourceSafe(session).admitted).toBe(true);
+ });
+
+ it('reads and writes the route-owned readingStage query parameter', () => {
+ const params = new URLSearchParams('transactionId=read-run-2');
+ const withStage = writeReadRouteStage(params, 'review-synthesized-asset-pack');
+
+ expect(withStage.get('readingStage')).toBe('review-synthesized-asset-pack');
+ expect(readReadRouteStage(withStage)).toBe('review-synthesized-asset-pack');
+ expect(readReadRouteStage(new URLSearchParams('readingStage=unsafe-stage'))).toBeNull();
+ expect(writeReadRouteStage(withStage, null).has('readingStage')).toBe(false);
+ });
+});
diff --git a/uapi/tests/terminalEnterpriseReadingUxState.test.ts b/uapi/tests/terminalEnterpriseReadingUxState.test.ts
index 352e54e5..52873233 100644
--- a/uapi/tests/terminalEnterpriseReadingUxState.test.ts
+++ b/uapi/tests/terminalEnterpriseReadingUxState.test.ts
@@ -90,6 +90,7 @@ describe('terminal-enterprise-reading-ux-state', () => {
it('admits only source-safe low-detail and expandable metadata before settlement', () => {
const state = buildTerminalEnterpriseReadingUxState({
+ transactionId: 'reading-transaction-1',
hasRepositorySource: true,
hasReadMeasurement: true,
hasSynthesizedNeed: true,
@@ -98,13 +99,49 @@ describe('terminal-enterprise-reading-ux-state', () => {
});
expect(state.activeStepId).toBe('request-fit');
+ expect(state.routeState.transactionId).toBe('reading-transaction-1');
+ expect(state.routeState.transactionIdPresent).toBe(true);
+ expect(state.routeState.readingStageQueryParam).toBe('readingStage');
expect(state.routeContract.acceptedNeedRequiredBeforeFindingFits).toBe(true);
expect(state.routeContract.sourceSafePreviewRequiredBeforeSettlement).toBe(true);
expect(state.routeContract.deliveryRequiresSettlementUnlock).toBe(true);
+ expect(state.routeContract.restartRestoresReadingStage).toBe(true);
+ expect(state.routeContract.retryPreservesSourceSafeLineage).toBe(true);
+ expect(state.routeContract.failureStatesSourceSafe).toBe(true);
expect(state.proofRoot).toMatch(/^terminal-enterprise-reading-ux:/u);
expect(assertTerminalEnterpriseReadingUxStateSourceSafe(state)).toEqual({
admitted: true,
reason: 'source_safe_enterprise_reading_ux_metadata',
});
});
+
+ it('hydrates later route stages, retry posture, and source-safe failure repair actions', () => {
+ const state = buildTerminalEnterpriseReadingUxState({
+ transactionId: 'reading-transaction-2',
+ routeReadingStage: 'buy-asset-pack-settle',
+ hasRepositorySource: true,
+ hasReadMeasurement: true,
+ hasSynthesizedNeed: true,
+ hasAcceptedNeed: true,
+ retryRequested: true,
+ restartRequested: true,
+ failureKind: 'settlement_blocked',
+ });
+
+ expect(state.activeStepId).toBe('buy-asset-pack-settle');
+ expect(state.routeState.routeReadingStage).toBe('buy-asset-pack-settle');
+ expect(state.routeState.activeStageHydratedFromRoute).toBe(true);
+ expect(state.routeState.retryRequested).toBe(true);
+ expect(state.routeState.retryPreservesNeedLineage).toBe(true);
+ expect(state.routeState.retryPreservesSettlementBoundary).toBe(true);
+ expect(state.routeState.restartRequested).toBe(true);
+ expect(state.routeState.restartRestoresActiveStage).toBe(true);
+ expect(state.routeState.failureKind).toBe('settlement_blocked');
+ expect(state.routeState.failureStateSourceSafe).toBe(true);
+ expect(state.routeState.failureRepairActions).toContain('repair-settlement-readback');
+ expect(state.steps.find((step) => step.id === 'buy-asset-pack-settle')?.blockers).toContain(
+ 'source-safe AssetPack preview required',
+ );
+ expect(assertTerminalEnterpriseReadingUxStateSourceSafe(state).admitted).toBe(true);
+ });
});
diff --git a/uapi/tests/terminalPipelineHarnessClient.test.ts b/uapi/tests/terminalPipelineHarnessClient.test.ts
index 7165b582..52ceaf4e 100644
--- a/uapi/tests/terminalPipelineHarnessClient.test.ts
+++ b/uapi/tests/terminalPipelineHarnessClient.test.ts
@@ -188,13 +188,46 @@ describe('terminal pipeline harness client', () => {
},
sourceSafePreview: {
feeQuote: {
- sats: 546,
+ sats: 500,
},
unlock: {
state: 'licensed_read',
sourceAvailable: true,
},
},
+ assetPackPreviewBoundary: {
+ quoteReceipt: {
+ sats: 546,
+ quoteRoot: 'sha256:asset-pack-preview-quote-root',
+ },
+ selectedFitProvenance: {
+ selectedCandidateAssetIds: ['asset-repository-revision'],
+ fitDepositAssetIds: ['deposit-asset-pack'],
+ },
+ settlementInstructions: {
+ state: 'quote_ready_settlement_required',
+ },
+ deliveryPosture: {
+ state: 'withheld_until_settlement',
+ },
+ },
+ assetPackSettlementRightsDeliveryBoundary: {
+ state: 'settlement_delivered',
+ rightsTransferRoot: 'sha256:settlement-rights-root',
+ paymentObservation: {
+ expectedSats: 546,
+ observedDebitSats: 546,
+ },
+ finalityReceipt: {
+ finalityState: 'confirmed',
+ },
+ deliveryUnlock: {
+ state: 'source_bearing_pull_request_ready',
+ },
+ reconciliationReport: {
+ state: 'aligned',
+ },
+ },
assetPackDisclosureReview: {
access: {
sourceVisibility: 'available_after_settlement',
@@ -214,6 +247,15 @@ describe('terminal pipeline harness client', () => {
expect(summary).toContain('candidate asset-repository-revision');
expect(summary).toContain('ledger settled');
expect(summary).toContain('fee 546 sats');
+ expect(summary).toContain('quote sha256:asset');
+ expect(summary).toContain('settlement quote_ready_settlement_required');
+ expect(summary).toContain('delivery withheld_until_settlement');
+ expect(summary).toContain('settlement-boundary settlement_delivered');
+ expect(summary).toContain('paid 546/546 sats');
+ expect(summary).toContain('finality confirmed');
+ expect(summary).toContain('rights sha256:settl');
+ expect(summary).toContain('delivery-unlock source_bearing_pull_request_ready');
+ expect(summary).toContain('reconciliation aligned');
expect(summary).toContain('source licensed_read');
expect(summary).toContain('disclosure available_after_settlement');
expect(summary).toContain('leakage none');
diff --git a/uapi/tests/terminalTransactionReadModel.test.ts b/uapi/tests/terminalTransactionReadModel.test.ts
index 80dae4e4..5fa5bf34 100644
--- a/uapi/tests/terminalTransactionReadModel.test.ts
+++ b/uapi/tests/terminalTransactionReadModel.test.ts
@@ -144,7 +144,7 @@ describe('terminal transaction read model', () => {
expect(model.route.href).toContain('transactionDetail=proofs');
expect(model.route.href).toContain('provider=github');
expect(model.route.href).not.toContain('runId=legacy-run');
- expect(model.route.exchangeHref).toContain('/exchange?');
+ expect(model.route.exchangeHref).toContain('/packs?');
expect(model.route.exchangeHref).toContain('transactionId=tx-read-1');
expect(model.route.exchangeHref).toContain('transactionDetail=proofs');
expect(model.route.exchangeHref).toContain('provider=github');
diff --git a/uapi/tsconfig.json b/uapi/tsconfig.json
index 34436519..608beaaf 100644
--- a/uapi/tsconfig.json
+++ b/uapi/tsconfig.json
@@ -70,6 +70,12 @@
"@bitcode/pipeline-asset-pack/reading-pipeline-contract": [
"../packages/pipelines/asset-pack/src/reading-pipeline-contract.ts"
],
+ "@bitcode/pipeline-asset-pack/deposit-asset-pack-options": [
+ "../packages/pipelines/asset-pack/src/deposit-asset-pack-options.ts"
+ ],
+ "@bitcode/pipeline-asset-pack/deposit-asset-pack-option-policy": [
+ "../packages/pipelines/asset-pack/src/deposit-asset-pack-option-policy.ts"
+ ],
"@bitcode/*": [
"../packages/*/src",
"../packages/*"