From c1364e76471cbcf69a4c37eb0ee37a577d28ee67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Ech=C3=A1niz?= Date: Thu, 13 Aug 2026 02:15:22 -0300 Subject: [PATCH 1/4] Consolidate V0 embodiment and recovery contracts --- .github/workflows/coordination.yml | 12 +- .github/workflows/tests.yml | 78 +- CONCURRENT-WORK-AUDIT.md | 9 + CURRENT-STATE.md | 36 +- PLAN.md | 10 +- README.md | 20 +- RESUME.md | 98 + REVIEW-HANDOFF.md | 32 +- ROADMAP.md | 25 +- TRIBE-MIGRATION.md | 22 +- conformance/registry-v1.json | 72 +- conformance/source-v0-section14.json | 2 +- docs/dm024-hosted-runtime.md | 22 +- docs/dm025-cli-mcp.md | 8 + docs/dm026-conformance.md | 11 +- docs/dm036-collective-memory.md | 180 + docs/dm055-native-peer-cutover.md | 18 +- docs/dm078-fresh-host-rebirth.md | 206 + docs/dm079-authority-epochs.md | 10 + docs/dm083-two-host-dogfood.md | 254 ++ docs/harness-adoption-v0.md | 274 ++ docs/runbooks/operator-bootstrap.md | 124 + docs/verification/dm026-invariants.json | 15 +- docs/verification/dm036-dm083-integration.md | 64 + docs/verification/dm036-invariants.json | 34 + docs/verification/dm074-invariants.json | 30 + docs/verification/dm078-fresh-host-rebirth.md | 143 + docs/verification/dm083-invariants.json | 36 + profiles/harness/v0/claude-code.json | 210 + profiles/harness/v0/codex-cli.json | 210 + profiles/harness/v0/generic-mcp-cli.json | 208 + profiles/harness/v0/google-antigravity.json | 209 + profiles/harness/v0/grok-build.json | 212 + profiles/harness/v0/kimi-code.json | 213 + provenance/collective-memory-exchange-v1.json | 50 + provenance/harnesses-v0.json | 177 + provenance/hermes-agent-0.19.0.json | 2 +- pyproject.toml | 2 + reviews/DM-010-correction.md | 7 + reviews/DM-083.md | 101 + schemas/clients/v1/client.schema.json | 55 +- schemas/clients/v1/mcp-tools.schema.json | 8 +- .../v1/contracts.schema.json | 385 ++ schemas/harness/v0/profile.schema.json | 248 ++ schemas/hosted/v7/bundle.schema.json | 549 +++ .../v1/embodiment-enrollment.schema.json | 59 + schemas/weave/v1/event.schema.json | 26 +- schemas/weave/v1/recovery-rebirth.schema.json | 64 + specs/adapter-contracts.md | 24 + specs/source-ancestry.md | 10 +- src/daimon_matrix/authority_epochs.py | 599 ++- src/daimon_matrix/cli.py | 12 + src/daimon_matrix/client.py | 97 +- src/daimon_matrix/collective_memory.py | 3555 +++++++++++++++++ src/daimon_matrix/conformance.py | 7 +- src/daimon_matrix/daemon.py | 5 +- src/daimon_matrix/ledger.py | 6 + src/daimon_matrix/mcp_server.py | 21 + src/daimon_matrix/operator_bootstrap.py | 564 +++ src/daimon_matrix/operator_rebirth.py | 2532 ++++++++++++ src/daimon_matrix/peer_transport.py | 50 +- src/daimon_matrix/runtime.py | 229 +- src/daimon_matrix/scopes.py | 14 + src/daimon_matrix/service.py | 86 +- src/daimon_matrix/weave.py | 47 + tests/fixtures/harness/v0/checker.py | 1129 ++++++ .../harness/v0/claude-code.report.json | 46 + .../fixtures/harness/v0/codex-cli.report.json | 47 + .../harness/v0/generic-mcp-cli.report.json | 47 + .../harness/v0/google-antigravity.report.json | 48 + .../harness/v0/grok-build.report.json | 45 + .../fixtures/harness/v0/kimi-code.report.json | 48 + tests/fixtures/harness/v0/manifest.json | 92 + tests/test_dm025_cli_mcp.py | 61 +- tests/test_dm025_client.py | 45 + tests/test_dm032_curator_worker.py | 11 +- tests/test_dm036_collective_memory.py | 1496 +++++++ tests/test_dm041_hermes_body.py | 10 +- tests/test_dm055_peer_transport.py | 37 +- tests/test_dm074_harness_conformance.py | 249 ++ tests/test_dm078_rebirth.py | 603 +++ tests/test_dm078_recovery_rebirth.py | 1116 ++++++ tests/test_dm079_authority_epochs.py | 20 + tests/test_dm083_dogfood.py | 316 ++ tests/test_package_scaffold.py | 19 +- tools/check_distribution.py | 18 + tools/generate_dm036_vectors.py | 174 + tools/generate_dm041_vectors.py | 3 +- tools/generate_dm074_profiles.py | 801 ++++ tools/generate_dm078_recovery_vectors.py | 172 + tools/generate_dm078_vectors.py | 156 + tools/reproducible_build.py | 3 + tools/scan_secrets.py | 20 +- vectors/collective-memory/v1/index.json | 1 + .../v1/negative-host-path.json | 1 + .../v1/publisher-acceptance.json | 1 + .../v1/publisher-profile.json | 1 + .../v1/publisher-request.json | 1 + .../collective-memory/v1/source-preview.json | 1 + .../collective-memory/v1/source-profile.json | 1 + .../collective-memory/v1/source-receipt.json | 1 + vectors/hermes/v1/index.json | 2 +- vectors/hermes/v1/valid/launch-receipt.json | 2 +- vectors/hermes/v1/valid/profile-manifest.json | 2 +- .../v1/embodiment-enrollment/activation.json | 1 + .../embodiment-credential.json | 1 + .../embodiment-enrollment.json | 1 + .../enrollment-request.json | 1 + .../incarnation-authorization.json | 1 + .../weave/v1/embodiment-enrollment/index.json | 1 + .../negative/request-signature-tampered.json | 1 + .../negative/transition-hash-tampered.json | 1 + .../previous-manifest.json | 1 + .../successor-manifest.json | 1 + .../weave/v1/recovery-rebirth/activation.json | 1 + .../embodiment-credential.json | 1 + .../recovery-rebirth/enrollment-request.json | 1 + .../incarnation-authorization.json | 1 + vectors/weave/v1/recovery-rebirth/index.json | 1 + .../negative/recovery-signature-tampered.json | 1 + .../negative/transition-hash-tampered.json | 1 + .../recovery-rebirth/previous-manifest.json | 1 + .../recovery-rebirth/recovery-artifact.json | 1 + .../v1/recovery-rebirth/recovery-rebirth.json | 1 + .../recovery-rebirth/successor-manifest.json | 1 + 125 files changed, 19413 insertions(+), 152 deletions(-) create mode 100644 RESUME.md create mode 100644 docs/dm036-collective-memory.md create mode 100644 docs/dm078-fresh-host-rebirth.md create mode 100644 docs/dm083-two-host-dogfood.md create mode 100644 docs/harness-adoption-v0.md create mode 100644 docs/runbooks/operator-bootstrap.md create mode 100644 docs/verification/dm036-dm083-integration.md create mode 100644 docs/verification/dm036-invariants.json create mode 100644 docs/verification/dm074-invariants.json create mode 100644 docs/verification/dm078-fresh-host-rebirth.md create mode 100644 docs/verification/dm083-invariants.json create mode 100644 profiles/harness/v0/claude-code.json create mode 100644 profiles/harness/v0/codex-cli.json create mode 100644 profiles/harness/v0/generic-mcp-cli.json create mode 100644 profiles/harness/v0/google-antigravity.json create mode 100644 profiles/harness/v0/grok-build.json create mode 100644 profiles/harness/v0/kimi-code.json create mode 100644 provenance/collective-memory-exchange-v1.json create mode 100644 provenance/harnesses-v0.json create mode 100644 reviews/DM-083.md create mode 100644 schemas/collective-memory/v1/contracts.schema.json create mode 100644 schemas/harness/v0/profile.schema.json create mode 100644 schemas/hosted/v7/bundle.schema.json create mode 100644 schemas/weave/v1/embodiment-enrollment.schema.json create mode 100644 schemas/weave/v1/recovery-rebirth.schema.json create mode 100644 src/daimon_matrix/collective_memory.py create mode 100644 src/daimon_matrix/operator_bootstrap.py create mode 100644 src/daimon_matrix/operator_rebirth.py create mode 100644 tests/fixtures/harness/v0/checker.py create mode 100644 tests/fixtures/harness/v0/claude-code.report.json create mode 100644 tests/fixtures/harness/v0/codex-cli.report.json create mode 100644 tests/fixtures/harness/v0/generic-mcp-cli.report.json create mode 100644 tests/fixtures/harness/v0/google-antigravity.report.json create mode 100644 tests/fixtures/harness/v0/grok-build.report.json create mode 100644 tests/fixtures/harness/v0/kimi-code.report.json create mode 100644 tests/fixtures/harness/v0/manifest.json create mode 100644 tests/test_dm036_collective_memory.py create mode 100644 tests/test_dm074_harness_conformance.py create mode 100644 tests/test_dm078_rebirth.py create mode 100644 tests/test_dm078_recovery_rebirth.py create mode 100644 tests/test_dm083_dogfood.py create mode 100755 tools/generate_dm036_vectors.py create mode 100644 tools/generate_dm074_profiles.py create mode 100644 tools/generate_dm078_recovery_vectors.py create mode 100644 tools/generate_dm078_vectors.py create mode 100644 vectors/collective-memory/v1/index.json create mode 100644 vectors/collective-memory/v1/negative-host-path.json create mode 100644 vectors/collective-memory/v1/publisher-acceptance.json create mode 100644 vectors/collective-memory/v1/publisher-profile.json create mode 100644 vectors/collective-memory/v1/publisher-request.json create mode 100644 vectors/collective-memory/v1/source-preview.json create mode 100644 vectors/collective-memory/v1/source-profile.json create mode 100644 vectors/collective-memory/v1/source-receipt.json create mode 100644 vectors/weave/v1/embodiment-enrollment/activation.json create mode 100644 vectors/weave/v1/embodiment-enrollment/embodiment-credential.json create mode 100644 vectors/weave/v1/embodiment-enrollment/embodiment-enrollment.json create mode 100644 vectors/weave/v1/embodiment-enrollment/enrollment-request.json create mode 100644 vectors/weave/v1/embodiment-enrollment/incarnation-authorization.json create mode 100644 vectors/weave/v1/embodiment-enrollment/index.json create mode 100644 vectors/weave/v1/embodiment-enrollment/negative/request-signature-tampered.json create mode 100644 vectors/weave/v1/embodiment-enrollment/negative/transition-hash-tampered.json create mode 100644 vectors/weave/v1/embodiment-enrollment/previous-manifest.json create mode 100644 vectors/weave/v1/embodiment-enrollment/successor-manifest.json create mode 100644 vectors/weave/v1/recovery-rebirth/activation.json create mode 100644 vectors/weave/v1/recovery-rebirth/embodiment-credential.json create mode 100644 vectors/weave/v1/recovery-rebirth/enrollment-request.json create mode 100644 vectors/weave/v1/recovery-rebirth/incarnation-authorization.json create mode 100644 vectors/weave/v1/recovery-rebirth/index.json create mode 100644 vectors/weave/v1/recovery-rebirth/negative/recovery-signature-tampered.json create mode 100644 vectors/weave/v1/recovery-rebirth/negative/transition-hash-tampered.json create mode 100644 vectors/weave/v1/recovery-rebirth/previous-manifest.json create mode 100644 vectors/weave/v1/recovery-rebirth/recovery-artifact.json create mode 100644 vectors/weave/v1/recovery-rebirth/recovery-rebirth.json create mode 100644 vectors/weave/v1/recovery-rebirth/successor-manifest.json diff --git a/.github/workflows/coordination.yml b/.github/workflows/coordination.yml index 2c95607..05104a8 100644 --- a/.github/workflows/coordination.yml +++ b/.github/workflows/coordination.yml @@ -30,10 +30,10 @@ jobs: group: daimon-coordination-mutations cancel-in-progress: false steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 with: ref: ${{ github.event.repository.default_branch }} - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.12" cache: pip @@ -60,10 +60,10 @@ jobs: group: daimon-coordination-mutations cancel-in-progress: false steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 with: ref: ${{ github.event.repository.default_branch }} - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.12" cache: pip @@ -86,7 +86,7 @@ jobs: issues: read pull-requests: read steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 with: ref: ${{ github.event.repository.default_branch }} - name: Detect coordination baseline @@ -96,7 +96,7 @@ jobs: if [[ -f tools/github_coordination.py && -f coordination/principals.json ]]; then echo 'enabled=true' >> "$GITHUB_OUTPUT"; else echo 'enabled=false' >> "$GITHUB_OUTPUT"; fi - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 if: steps.coordination.outputs.enabled == 'true' with: python-version: "3.12" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ac285e5..38cfed0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,8 +17,13 @@ jobs: matrix: python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + with: + repository: nicoechaniz/collective-memory + ref: 3e3b39416917f8e3c2bc5ca69362b20296205938 + path: .collective-memory-contract + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: ${{ matrix.python-version }} cache: pip @@ -30,24 +35,40 @@ jobs: requirements-vectors.txt - run: python -m pip install -r requirements-dev.txt -r requirements-vectors.txt - run: python -m pip install -r requirements-species.txt - - run: python -m ruff format --check src tools/check_distribution.py tools/check_tribe_provenance.py tools/generate_dm021_vectors.py tools/generate_dm022_vectors.py tools/generate_dm030_vectors.py tools/generate_dm031_vectors.py tools/generate_dm032_vectors.py tools/generate_dm033_vectors.py tools/generate_dm034_vectors.py tools/generate_dm035_vectors.py tools/generate_dm040_vectors.py tools/generate_dm041_vectors.py tools/generate_dm061_vectors.py tools/generate_dm079_vectors.py tools/generate_dm081_vectors.py tools/generate_dm082_vectors.py tools/reproducible_build.py tools/scan_secrets.py tests/test_package_scaffold.py tests/test_dm021_identity.py tests/test_dm021_keystore.py tests/test_dm021_process.py tests/test_dm021_vectors.py tests/test_dm022_ledger.py tests/test_dm023_sync.py tests/test_dm024_service.py tests/test_dm024_runtime.py tests/test_dm025_client.py tests/test_dm025_cli_mcp.py tests/test_dm026_conformance.py tests/test_dm030_memory_policy.py tests/test_dm031_curator.py tests/test_dm032_curator_worker.py tests/test_dm033_human_review.py tests/test_dm034_memory_projection.py tests/test_dm035_publication.py tests/test_dm037_cluster_effects.py tests/test_dm040_codex_body.py tests/test_dm041_hermes_body.py tests/test_dm050_tribe_provenance.py tests/test_dm051_sealed.py tests/test_dm052_communication.py tests/test_dm053_routes.py tests/test_dm054_scopes.py tests/test_dm055_peer_transport.py tests/test_dm060_synthetic_birth.py tests/test_dm061_species.py tests/test_dm079_authority_epochs.py tests/test_dm081_sources.py tests/test_dm082_relationships.py - - run: python -m ruff check src tools/check_distribution.py tools/check_tribe_provenance.py tools/generate_dm021_vectors.py tools/generate_dm022_vectors.py tools/generate_dm030_vectors.py tools/generate_dm031_vectors.py tools/generate_dm032_vectors.py tools/generate_dm033_vectors.py tools/generate_dm034_vectors.py tools/generate_dm035_vectors.py tools/generate_dm040_vectors.py tools/generate_dm041_vectors.py tools/generate_dm061_vectors.py tools/generate_dm079_vectors.py tools/generate_dm081_vectors.py tools/generate_dm082_vectors.py tools/reproducible_build.py tools/scan_secrets.py tests/test_package_scaffold.py tests/test_dm021_identity.py tests/test_dm021_keystore.py tests/test_dm021_process.py tests/test_dm021_vectors.py tests/test_dm022_ledger.py tests/test_dm023_sync.py tests/test_dm024_service.py tests/test_dm024_runtime.py tests/test_dm025_client.py tests/test_dm025_cli_mcp.py tests/test_dm026_conformance.py tests/test_dm030_memory_policy.py tests/test_dm031_curator.py tests/test_dm032_curator_worker.py tests/test_dm033_human_review.py tests/test_dm034_memory_projection.py tests/test_dm035_publication.py tests/test_dm037_cluster_effects.py tests/test_dm040_codex_body.py tests/test_dm041_hermes_body.py tests/test_dm050_tribe_provenance.py tests/test_dm051_sealed.py tests/test_dm052_communication.py tests/test_dm053_routes.py tests/test_dm054_scopes.py tests/test_dm055_peer_transport.py tests/test_dm060_synthetic_birth.py tests/test_dm061_species.py tests/test_dm079_authority_epochs.py tests/test_dm081_sources.py tests/test_dm082_relationships.py - - run: MYPYPATH=src python -m mypy src tools/check_distribution.py tools/check_tribe_provenance.py tools/generate_dm021_vectors.py tools/generate_dm022_vectors.py tools/generate_dm030_vectors.py tools/generate_dm031_vectors.py tools/generate_dm032_vectors.py tools/generate_dm033_vectors.py tools/generate_dm034_vectors.py tools/generate_dm035_vectors.py tools/generate_dm040_vectors.py tools/generate_dm041_vectors.py tools/generate_dm061_vectors.py tools/generate_dm079_vectors.py tools/generate_dm081_vectors.py tools/generate_dm082_vectors.py tools/reproducible_build.py tools/scan_secrets.py tests/test_package_scaffold.py tests/test_dm021_identity.py tests/test_dm021_keystore.py tests/test_dm021_process.py tests/test_dm021_vectors.py tests/test_dm022_ledger.py tests/test_dm023_sync.py tests/test_dm024_service.py tests/test_dm024_runtime.py tests/test_dm025_client.py tests/test_dm025_cli_mcp.py tests/test_dm026_conformance.py tests/test_dm030_memory_policy.py tests/test_dm031_curator.py tests/test_dm032_curator_worker.py tests/test_dm033_human_review.py tests/test_dm034_memory_projection.py tests/test_dm035_publication.py tests/test_dm037_cluster_effects.py tests/test_dm040_codex_body.py tests/test_dm041_hermes_body.py tests/test_dm050_tribe_provenance.py tests/test_dm051_sealed.py tests/test_dm052_communication.py tests/test_dm053_routes.py tests/test_dm054_scopes.py tests/test_dm055_peer_transport.py tests/test_dm060_synthetic_birth.py tests/test_dm061_species.py tests/test_dm079_authority_epochs.py tests/test_dm081_sources.py tests/test_dm082_relationships.py + - run: python -m ruff format --check src tools/check_distribution.py tools/check_tribe_provenance.py tools/generate_dm021_vectors.py tools/generate_dm022_vectors.py tools/generate_dm030_vectors.py tools/generate_dm031_vectors.py tools/generate_dm032_vectors.py tools/generate_dm033_vectors.py tools/generate_dm034_vectors.py tools/generate_dm035_vectors.py tools/generate_dm040_vectors.py tools/generate_dm041_vectors.py tools/generate_dm061_vectors.py tools/generate_dm079_vectors.py tools/generate_dm081_vectors.py tools/reproducible_build.py tools/scan_secrets.py tests/test_package_scaffold.py tests/test_dm021_identity.py tests/test_dm021_keystore.py tests/test_dm021_process.py tests/test_dm021_vectors.py tests/test_dm022_ledger.py tests/test_dm023_sync.py tests/test_dm024_service.py tests/test_dm024_runtime.py tests/test_dm025_client.py tests/test_dm025_cli_mcp.py tests/test_dm026_conformance.py tests/test_dm030_memory_policy.py tests/test_dm031_curator.py tests/test_dm032_curator_worker.py tests/test_dm033_human_review.py tests/test_dm034_memory_projection.py tests/test_dm035_publication.py tests/test_dm037_cluster_effects.py tests/test_dm040_codex_body.py tests/test_dm041_hermes_body.py tests/test_dm050_tribe_provenance.py tests/test_dm051_sealed.py tests/test_dm052_communication.py tests/test_dm053_routes.py tests/test_dm054_scopes.py tests/test_dm055_peer_transport.py tests/test_dm060_synthetic_birth.py tests/test_dm061_species.py tests/test_dm079_authority_epochs.py tests/test_dm081_sources.py tests/test_dm083_dogfood.py + - run: python -m ruff check src tools/check_distribution.py tools/check_tribe_provenance.py tools/generate_dm021_vectors.py tools/generate_dm022_vectors.py tools/generate_dm030_vectors.py tools/generate_dm031_vectors.py tools/generate_dm032_vectors.py tools/generate_dm033_vectors.py tools/generate_dm034_vectors.py tools/generate_dm035_vectors.py tools/generate_dm040_vectors.py tools/generate_dm041_vectors.py tools/generate_dm061_vectors.py tools/generate_dm079_vectors.py tools/generate_dm081_vectors.py tools/reproducible_build.py tools/scan_secrets.py tests/test_package_scaffold.py tests/test_dm021_identity.py tests/test_dm021_keystore.py tests/test_dm021_process.py tests/test_dm021_vectors.py tests/test_dm022_ledger.py tests/test_dm023_sync.py tests/test_dm024_service.py tests/test_dm024_runtime.py tests/test_dm025_client.py tests/test_dm025_cli_mcp.py tests/test_dm026_conformance.py tests/test_dm030_memory_policy.py tests/test_dm031_curator.py tests/test_dm032_curator_worker.py tests/test_dm033_human_review.py tests/test_dm034_memory_projection.py tests/test_dm035_publication.py tests/test_dm037_cluster_effects.py tests/test_dm040_codex_body.py tests/test_dm041_hermes_body.py tests/test_dm050_tribe_provenance.py tests/test_dm051_sealed.py tests/test_dm052_communication.py tests/test_dm053_routes.py tests/test_dm054_scopes.py tests/test_dm055_peer_transport.py tests/test_dm060_synthetic_birth.py tests/test_dm061_species.py tests/test_dm079_authority_epochs.py tests/test_dm081_sources.py tests/test_dm083_dogfood.py + - run: MYPYPATH=src python -m mypy src tools/check_distribution.py tools/check_tribe_provenance.py tools/generate_dm021_vectors.py tools/generate_dm022_vectors.py tools/generate_dm030_vectors.py tools/generate_dm031_vectors.py tools/generate_dm032_vectors.py tools/generate_dm033_vectors.py tools/generate_dm034_vectors.py tools/generate_dm035_vectors.py tools/generate_dm040_vectors.py tools/generate_dm041_vectors.py tools/generate_dm061_vectors.py tools/generate_dm079_vectors.py tools/generate_dm081_vectors.py tools/reproducible_build.py tools/scan_secrets.py tests/test_package_scaffold.py tests/test_dm021_identity.py tests/test_dm021_keystore.py tests/test_dm021_process.py tests/test_dm021_vectors.py tests/test_dm022_ledger.py tests/test_dm023_sync.py tests/test_dm024_service.py tests/test_dm024_runtime.py tests/test_dm025_client.py tests/test_dm025_cli_mcp.py tests/test_dm026_conformance.py tests/test_dm030_memory_policy.py tests/test_dm031_curator.py tests/test_dm032_curator_worker.py tests/test_dm033_human_review.py tests/test_dm034_memory_projection.py tests/test_dm035_publication.py tests/test_dm037_cluster_effects.py tests/test_dm040_codex_body.py tests/test_dm041_hermes_body.py tests/test_dm050_tribe_provenance.py tests/test_dm051_sealed.py tests/test_dm052_communication.py tests/test_dm053_routes.py tests/test_dm054_scopes.py tests/test_dm055_peer_transport.py tests/test_dm060_synthetic_birth.py tests/test_dm061_species.py tests/test_dm079_authority_epochs.py tests/test_dm081_sources.py tests/test_dm083_dogfood.py + - run: python -m ruff format --check tools/generate_dm078_vectors.py tools/generate_dm078_recovery_vectors.py tests/test_dm078_rebirth.py tests/test_dm078_recovery_rebirth.py + - run: python -m ruff check tools/generate_dm078_vectors.py tools/generate_dm078_recovery_vectors.py tests/test_dm078_rebirth.py tests/test_dm078_recovery_rebirth.py + - run: MYPYPATH=src python -m mypy tools/generate_dm078_vectors.py tools/generate_dm078_recovery_vectors.py tests/test_dm078_rebirth.py tests/test_dm078_recovery_rebirth.py + - run: python -m ruff format --check tools/generate_dm082_vectors.py tests/test_dm082_relationships.py + - run: python -m ruff check tools/generate_dm082_vectors.py tests/test_dm082_relationships.py + - run: MYPYPATH=src python -m mypy tools/generate_dm082_vectors.py tests/test_dm082_relationships.py - run: python -m ruff format --check tools/generate_dm042_vectors.py tests/test_dm042_local_we.py - run: python -m ruff check tools/generate_dm042_vectors.py tests/test_dm042_local_we.py - run: MYPYPATH=src python -m mypy tools/generate_dm042_vectors.py tests/test_dm042_local_we.py - run: python -m ruff format --check tools/generate_dm070_vectors.py tests/test_dm070_multihost.py - run: python -m ruff check tools/generate_dm070_vectors.py tests/test_dm070_multihost.py - run: MYPYPATH=src python -m mypy tools/generate_dm070_vectors.py tests/test_dm070_multihost.py + - run: python -m ruff format --check tools/generate_dm036_vectors.py tests/test_dm036_collective_memory.py + - run: python -m ruff check tools/generate_dm036_vectors.py tests/test_dm036_collective_memory.py + - run: MYPYPATH=src python -m mypy tools/generate_dm036_vectors.py tests/test_dm036_collective_memory.py - run: python tools/generate_dm041_vectors.py --check - run: python tools/generate_dm042_vectors.py --check + - run: python tools/generate_dm036_vectors.py --check + env: + COLLECTIVE_MEMORY_CONTRACT_ROOT: ${{ github.workspace }}/.collective-memory-contract - run: python tools/generate_dm061_vectors.py --check - run: python tools/generate_dm070_vectors.py --check + - run: python tools/generate_dm078_vectors.py --check + - run: python tools/generate_dm078_recovery_vectors.py --check - run: python tools/generate_dm081_vectors.py --check - run: python tools/generate_dm082_vectors.py --check - run: python -m compileall -q coordination src tools tests - run: PYTHONPATH=src python -W error::ResourceWarning -m unittest discover -s tests -v - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + env: + COLLECTIVE_MEMORY_CONTRACT_ROOT: ${{ github.workspace }}/.collective-memory-contract + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 with: repository: nicoechaniz/hermes-memory-kit ref: f10fd5c3089c0962920314c97e14bc024feffa7a @@ -56,7 +77,7 @@ jobs: env: HMK_CONTRACT_ROOT: ${{ github.workspace }}/.hmk-contract - run: python tools/check_tribe_provenance.py provenance/tribe-bridge-v1.json - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 with: repository: nicoechaniz/daimon-cluster ref: 676495e852e6772a60de8221271ee9fc976f77ce @@ -70,8 +91,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.12" cache: pip @@ -82,7 +103,7 @@ jobs: requirements-vectors.txt - run: python -m pip install -r requirements-dev.txt -r requirements-hermes-contract.txt -r requirements-vectors.txt - run: python -m pip install -r requirements-species.txt - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 with: repository: nicoechaniz/hermes-agent ref: 0db1912911fafa384aa5ee0145929658a9d1dd33 @@ -98,8 +119,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.12" cache: pip @@ -109,7 +130,12 @@ jobs: - run: python -m pip install -r requirements-build.txt - run: python tools/reproducible_build.py --output dist - run: python tools/scan_secrets.py . dist/daimon_matrix-0.0.0.tar.gz dist/daimon_matrix-0.0.0-py3-none-any.whl - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + with: + repository: nicoechaniz/collective-memory + ref: 3e3b39416917f8e3c2bc5ca69362b20296205938 + path: .collective-memory-contract + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 with: repository: nicoechaniz/hermes-memory-kit ref: f10fd5c3089c0962920314c97e14bc024feffa7a @@ -117,6 +143,7 @@ jobs: - name: Smoke-test the installed wheel env: HMK_CONTRACT_ROOT: ${{ github.workspace }}/.hmk-contract + COLLECTIVE_MEMORY_CONTRACT_ROOT: ${{ github.workspace }}/.collective-memory-contract run: | python -m venv "${RUNNER_TEMP}/dm020-wheel" "${RUNNER_TEMP}/dm020-wheel/bin/python" -m pip install -r requirements-vectors.txt @@ -126,6 +153,7 @@ jobs: "${RUNNER_TEMP}/dm020-wheel/bin/python" -c 'import importlib.metadata as m; import daimon_matrix; assert daimon_matrix.__version__ == "0.0.0"; assert m.requires("daimon-matrix") == ["cryptography==50.0.0", "mcp==2.0.0", "wasmtime==45.0.0"]' "${RUNNER_TEMP}/dm020-wheel/bin/python" -c 'from daimon_matrix.identity import create_genesis, verify_genesis; roots=[bytes([n])*32 for n in (1,2,3)]; recovery=[bytes([n])*32 for n in (4,5,6)]; artifact=create_genesis(roots,2,recovery,2,created_at_ms=1); assert verify_genesis(artifact).being_ref.startswith("dm:being:v1:")' "${RUNNER_TEMP}/dm020-wheel/bin/python" -c 'from daimon_matrix.ledger import Ledger; from daimon_matrix.weave import BeingManifest; assert Ledger and BeingManifest' + "${RUNNER_TEMP}/dm020-wheel/bin/python" -c 'from daimon_matrix.collective_memory import create_source_manifest, create_publisher_manifest; assert create_source_manifest()["adapter_id"] != create_publisher_manifest()["adapter_id"]' "${RUNNER_TEMP}/dm020-wheel/bin/python" -c 'from daimon_matrix.sealed import PROFILE; from cryptography.hazmat.primitives.hpke import Suite; assert PROFILE.startswith("HPKE-X25519") and Suite' "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm022_ledger -q "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm023_sync -q @@ -134,7 +162,10 @@ jobs: "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm033_human_review -q "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm034_memory_projection -q "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm035_publication.DM035PublicContractTests -q + "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm036_collective_memory.DM036ContractTests -q "${RUNNER_TEMP}/dm020-wheel/bin/daimon-matrixd" --help + "${RUNNER_TEMP}/dm020-wheel/bin/daimon-bootstrap" --help + "${RUNNER_TEMP}/dm020-wheel/bin/daimon-rebirth" --help "${RUNNER_TEMP}/dm020-wheel/bin/daimon" --help "${RUNNER_TEMP}/dm020-wheel/bin/daimon-conformance" --help "${RUNNER_TEMP}/dm020-wheel/bin/daimon-codex-body" --help @@ -144,7 +175,6 @@ jobs: "${RUNNER_TEMP}/dm020-wheel/bin/daimon-reviewer" --help "${RUNNER_TEMP}/dm020-wheel/bin/daimon-synthetic-birth" --help "${RUNNER_TEMP}/dm020-wheel/bin/daimon-synthetic-multihost" --help - "${RUNNER_TEMP}/dm020-wheel/bin/daimon-synthetic-relationships" --help "${RUNNER_TEMP}/dm020-wheel/bin/daimon-synthetic-species" --help "${RUNNER_TEMP}/dm020-wheel/bin/daimon-synthetic-sources" --help "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm040_codex_body -q @@ -155,6 +185,9 @@ jobs: "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm070_multihost.DM070PublishedContractTests -q "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm081_sources -q "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm082_relationships -q + "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm083_dogfood -q + "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm078_rebirth -q + "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm078_recovery_rebirth -q "${RUNNER_TEMP}/dm020-wheel/bin/python" -W error::ResourceWarning -m unittest tests.test_dm024_service tests.test_dm024_runtime tests.test_dm025_client tests.test_dm025_cli_mcp tests.test_dm026_conformance tests.test_dm030_memory_policy tests.test_dm037_cluster_effects tests.test_dm051_sealed tests.test_dm052_communication tests.test_dm053_routes tests.test_dm054_scopes tests.test_dm055_peer_transport tests.test_dm079_authority_epochs -q dm070_state="$(mktemp -d "${RUNNER_TEMP}/dm070-state-XXXXXX")" dm070_receipt="${RUNNER_TEMP}/dm070-receipt.json" @@ -166,11 +199,6 @@ jobs: "${RUNNER_TEMP}/dm020-wheel/bin/daimon-synthetic-sources" --state-root "${dm081_state}" > "${dm081_report}" cmp "${dm081_report}" conformance/fixtures/dm081-synthetic-source.json python tools/scan_secrets.py "${dm081_report}" - dm082_state="$(mktemp -d "${RUNNER_TEMP}/dm082-state-XXXXXX")" - dm082_report="${RUNNER_TEMP}/dm082-report.json" - "${RUNNER_TEMP}/dm020-wheel/bin/daimon-synthetic-relationships" --state-root "${dm082_state}" > "${dm082_report}" - cmp "${dm082_report}" conformance/fixtures/dm082-synthetic-relationships.json - python tools/scan_secrets.py "${dm082_report}" - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: daimon-matrix-python-${{ github.sha }} @@ -181,8 +209,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.13" cache: pip @@ -192,7 +220,12 @@ jobs: requirements-vectors.txt - run: python -m pip install -r requirements-build.txt -r requirements-vectors.txt - run: python tools/reproducible_build.py --output dist - - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + with: + repository: nicoechaniz/collective-memory + ref: 3e3b39416917f8e3c2bc5ca69362b20296205938 + path: .collective-memory-contract + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 with: repository: nicoechaniz/hermes-memory-kit ref: f10fd5c3089c0962920314c97e14bc024feffa7a @@ -200,6 +233,7 @@ jobs: - name: Run installed deterministic conformance twice env: HMK_CONTRACT_ROOT: ${{ github.workspace }}/.hmk-contract + COLLECTIVE_MEMORY_CONTRACT_ROOT: ${{ github.workspace }}/.collective-memory-contract run: | python -m venv "${RUNNER_TEMP}/dm026-wheel" "${RUNNER_TEMP}/dm026-wheel/bin/python" -m pip install -r requirements-vectors.txt mcp==2.0.0 diff --git a/CONCURRENT-WORK-AUDIT.md b/CONCURRENT-WORK-AUDIT.md index ea16659..3e13a51 100644 --- a/CONCURRENT-WORK-AUDIT.md +++ b/CONCURRENT-WORK-AUDIT.md @@ -114,6 +114,15 @@ credential patterns, and prevent revocation from deleting an untracked target. Inbound collective knowledge is a separate attributed source/quarantine direction and must use the supported API or an atomic snapshot boundary. +DM-036 resolves that pending boundary against the public MIT upstream commit +`3e3b39416917f8e3c2bc5ca69362b20296205938`, with closed schema SHA-256 +`2aad43d1b309ee95108c855fc8dc682a854e5fdf3a1e799ecfca96d3ebf7c5d9`. +The exact repository/tree/blob/license inventory is +`provenance/collective-memory-exchange-v1.json`. No upstream source, database, +WAL, corpus or live state is imported or vendored. Matrix uses two independent +injected contracts: immutable export into quarantine and exact reviewed +publication with fresh effect-truth reconciliation. + ### compaii-state and Wiki Retain hash-pinned generations, staging, conflict checks, classified artifact diff --git a/CURRENT-STATE.md b/CURRENT-STATE.md index 0aafe21..95701df 100644 --- a/CURRENT-STATE.md +++ b/CURRENT-STATE.md @@ -1,5 +1,33 @@ # Current state +## Active completion checkpoint — 2026-08-11 + +DM-083 is operationally accepted. Exact Matrix runtime `915c56c` and Cluster +runtime `94d80ba` run across the real Legion and daimonmatrix host embodiments of +one fresh being. Encrypted peer exchange, pending import, observer-local +adoption/reversal, ordinary exact retry, outage refusal, whole-pair rollback, +portable restore, checked off-host backup, scheduled quiesce/resume and one +separate Tribe v1 transport message were exercised. A signed authority epoch +advanced the Legion incarnation while preserving accepted history. + +The real succession first exposed a safe historical-response rejection. The +repaired V2 client then replayed the preserved request byte-identically without +duplicating its event. Subsequent bounded live work left both host views at +nine known events and zero incomplete events. The final runtime also provisions +a distinct five-method read-only host status client. A cold daimonmatrix reboot +then recovered every service and container with unchanged audit/idempotency +hashes and reconcile findings; the private-bridge bind preflight completed once +with no crash or restart. Final service, Matrix integrity, Cluster audit-chain, +portable restore and encrypted backup/mirror checks passed. The next dependency +gates are cross-being native semantic delivery and fresh-host rebirth/recovery. The exact +sequence is in [`RESUME.md`](RESUME.md); the public audit is +[`reviews/DM-083.md`](reviews/DM-083.md). + +PR #112 remains subject to independent review. Tribe Bridge remains only the +transitional human-message lane; its ACK cannot substitute for Matrix +authenticated intake or a signed semantic receipt. There is still no separately +identified `tribe-chat` repository in the recorded project set. + The canonical model permits multiple simultaneous embodiments of one being. The previously documented identity-wide singleton lease is not part of the supported architecture. @@ -47,11 +75,11 @@ authority plus purpose-separated encrypted runtime secrets, journals exact RPC responses, and survives retry across semantic-commit/response-write failures. DM-025 adds the typed authenticated local client, installed `daimon` CLI and closed MCP `2026-07-28` stdio adapter. Durable retry files preserve exact RPC -bytes, MCP exposes only the current forty-six closed methods and +bytes, the daemon exposes 83 closed methods, MCP advertises 66 closed tools and `daimon:` resources, and legacy MCP and Matrix.org transports remain absent. The merged Cluster host adapter supervises the process. DM-026 closes the local release gate with a deterministic installed conformance report over the current -91-scenario closed registry; it exercises real process, AF_UNIX, filesystem and +97-scenario closed registry; it exercises real process, AF_UNIX, filesystem and SQLite paths. DM-070 extends that gate with two isolated installed processes, native encrypted peer exchange, partition/restart convergence, observer-local adoption, authority-epoch succession and injected Cluster fence truth. Neither @@ -133,8 +161,8 @@ external-reference promotion, retraction/reassertion and tombstone are exposed through runtime bundle V5 and twelve typed daemon/CLI/MCP methods. The installed two-being journey recovers at every durable boundary and the generated 84-row Section 14 registry is release-blocking. It performs no live disclosure, -source fetch, memory admission, host mutation or Cluster effect. DM-082 owns -DM-082 now implements those relationship grants plus bilateral consent, +source fetch, memory admission, host mutation or Cluster effect. DM-082 now +implements the relationship grants plus bilateral consent, founded-Tribe membership, founder succession and strict delegation. Runtime bundle V6 feeds DM-054 from verified signed history, publishes fixed owner daemon/CLI/MCP surfaces and retains forks without an arrival-order winner. Its diff --git a/PLAN.md b/PLAN.md index b1aa497..0021041 100644 --- a/PLAN.md +++ b/PLAN.md @@ -33,8 +33,9 @@ is explicitly outside the MVP. 6. Absorb Tribe Bridge's reusable implementation into Matrix: recipient encryption, typed messages, cursors, routes, and `/me`/`/we`/`/tribe` resolution; then remove the standalone runtime dependency (DM-050 through - DM-055). DM-055's native encrypted peer implementation is complete behind - bundle V3; its authorized two-host cutover remains an operational gate. + DM-055). DM-055's native encrypted peer implementation has passed the + same-being two-host DM-083 cutover. Cross-being authenticated intake and a + signed semantic receipt remain the replacement gate before Tribe removal. 7. Complete birth/species/source behavior and their synthetic acceptance journeys. DM-060, DM-061 and DM-081 now implement those isolated journeys; DM-082 relationship grants precede the DM-071 external source canary. @@ -44,7 +45,10 @@ is explicitly outside the MVP. still completion evidence rather than inferred from the synthetic adapter. 9. Run local, cross-host, recovery, revocation, and rebirth journeys with real processes, cryptography, encrypted state, transport, Cluster bodies, and - separately authorized synthetic/live evidence. + separately authorized synthetic/live evidence. The same-being two-host + journey, authority-epoch succession, exact historical retry and checked + recovery passed. Cross-being delivery and fresh-host rebirth/recovery are + the active release gates. 10. Freeze, audit, publish, and independently reinstall the V0.1 release. ## Release invariants diff --git a/README.md b/README.md index ba1107e..535f191 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,8 @@ Matrix.org clients, homeservers and federation are intentionally outside the MVP. To avoid ambiguity, documentation uses `daimon-matrix`, `Matrix.org`, and “daimonmatrix host” for the software, external protocol, and VPS. -Start with [ONTOLOGY.md](ONTOLOGY.md), the +For a cold start after the current pause, read [RESUME.md](RESUME.md) first. +Then continue with [ONTOLOGY.md](ONTOLOGY.md), the [operational stack contract](specs/operational-stack-contract.md), and the [being-root contract](specs/identity-root-v1.md). Delivery order and acceptance are in [PLAN.md](PLAN.md) and [ROADMAP.md](ROADMAP.md). @@ -58,13 +59,15 @@ is deployed. DM-054 now provides exact `/me`, `/we`, `/we.diff`, per-origin `/we.sync` plans, verified `/tribe` snapshots, and signed replay-safe partial fan-out independent of any live carrier. DM-055 adds the optional bundle-V3 root-bound HPKE/Ed25519 peer transport and direct scope/sync HTTP carrier with -durable replay. DM-070 proves deterministic convergence between two isolated -installed processes through partition and restart; a fresh live two-host +durable replay. DM-083 adds the installed plural-being bootstrap, closed V7 +peer targets and an authenticated configured peer-pull operation. DM-070 proves +deterministic convergence between two isolated installed processes through +partition and restart; a fresh live two-host cutover remains human-authorized. Cluster remains its lifecycle/state-volume host; frozen fixtures preserve the old canary as a migration oracle rather than a second protocol. Tribe Bridge is not a Matrix peer wire. The installed `daimon-conformance` gate binds the local -implementation and reproducible artifacts to a closed 91-scenario report; its +implementation and reproducible artifacts to a closed 97-scenario report; its route, birth and multihost evidence is synthetic/isolated and does not yet certify a fresh live remote delivery or rebirth. The merged Cluster adapter pins Matrix, supervises one daemon per embodiment, preserves quiesced relocatable state and @@ -119,6 +122,15 @@ adopts a shared target and Hermes locally rejects it. The published `dm.local-we.validation/v1` receipt is deterministic and path-free; the card is a synthetic single-host gate, not a Matrix.org, multihost Cluster or CompAII rebirth claim. +DM-036 adds independent inbound and outbound `collective-memory` adapters over +the exact public exchange-v1 contract. Immutable generations enter only an +append-only source log plus `source.imported` quarantine evidence, with offline +catch-up and ledger/source-log rebuild. Publication requires exact current +Matrix source refs, recomputable checkpoints, subject consent, independent +human review, deterministic final-byte secret scanning and fresh upstream +effect truth. The directions have content-addressed DM-018 identities and no +shared credential, store, queue, receipt or authority; the real-I/O lane uses +only isolated synthetic corpus roots. DM-060 adds the root-authorized birth V1 ceremony and installed `daimon-synthetic-birth` acceptance. A parent can offer attributed context but cannot precommit or retain the newborn root; the newborn independently accepts, diff --git a/RESUME.md b/RESUME.md new file mode 100644 index 0000000..b1daf99 --- /dev/null +++ b/RESUME.md @@ -0,0 +1,98 @@ +# Project resume checkpoint + +Status: autonomous V0 completion is active. The operator authorized reversible +local and SSH work on the named systems on 2026-08-10 and the final reboot on +2026-08-11. DM-083 same-being live dogfood is operationally accepted; its +host-qualified successor pair is exact Matrix runtime `915c56c` and Cluster +runtime `94d80ba`. The active dependency path is now consented cross-being +native delivery followed by fresh-host rebirth/recovery. + +Last reconciled: 2026-08-11. + +## Proven checkpoint + +- Matrix runtime `915c56c8899fd53d683bd7c7c81c3465b600bed9` and Cluster + runtime `94d80baca05f468287b7d2bf99c577350d654a36` run on Legion and + daimonmatrix as two embodiments of one fresh being. Native encrypted peer + pull, pending intake, observer-local adoption/reversal, ordinary restart, + ambiguous peer outage and separate Tribe v1 transport evidence succeeded. +- Portable snapshots restored with exact manifests. Encrypted restic backups + were checked, mirrored off host and rerun through the corrected scheduled + quiesce/resume path. +- A signed authority epoch advanced Legion to one successor incarnation while + preserving accepted history on both hosts. Replaying an old exact request + did not duplicate its event, but the daemon closed the reply because the + service and client expected only the active server origin. +- The repaired V2 client returned the exact historical CLI output across the + succession without duplicating the event. A successor-lane event then + converged both hosts; later bounded live-canary work left both views at nine + known events and zero incomplete events. Portable + restores, fresh encrypted backups and final service/integrity checks passed. +- Matrix bootstrap now emits a separate owner-only status client with a + distinct key and exactly five read methods. Authenticated host status is + configured and healthy without giving Cluster mutation authority. +- The final daimonmatrix reboot changed boot ID and recovered every enabled + service and all three containers without intervention. Audit and idempotency + hashes were byte-identical, the five known reconcile findings were unchanged, + `clusterd` started once after its private-bridge preflight, and neither an + `EADDRNOTAVAIL` bind failure nor a service restart occurred. +- Restic snapshot `89d801b1` passed repository verification and its encrypted + repository mirror was pulled to Legion. The prior Cluster 4a release remains + preserved as an explicit whole-pair rollback. + +## Repositories and authority + +| Repository | Recorded state | Role and resume warning | +|---|---|---| +| `AlterMundi/daimon-matrix` | draft PR #112; deployed runtime code `915c56c` | Canonical identity, ledgers, scopes, relationship/grant authority, communication semantics and peer runtime. DM-083 plus the host-status/reboot qualification passed; PR #112 still requires independent review. Documentation-only successors do not change the exact deployed runtime pin. | +| `nicoechaniz/daimon-cluster` | PR #77; deployed runtime code `94d80ba`, exact Matrix pin `915c56c` | Hosts bodies/storage/lifecycle and resource fences. CI, deployment, repeated whole-pair rollback, backup/mirror and cold reboot passed. Cluster never gains social, grant or canonical-ledger authority. Documentation-only successors do not change the installed runtime code. | +| `nicoechaniz/tribe-bridge` | PR #61 at runtime-repair code `ecb51d8`; deployed service build `d49bf22` | V1 remains the transitional deployed human-message carrier at directory epoch 5. Keep ACK/dedup evidence separate from Matrix intake and semantic receipts, then retire it only after the native live message and explicit migration/archive gates. | + +No repository named `tribe-chat` was found in the local project set or the +`nicoechaniz`/`AlterMundi` GitHub repositories at this checkpoint. If +“tribe-chat” means the current chat-facing Tribe runtime, its canonical source +is `nicoechaniz/tribe-bridge`; do not invent a fourth authority or migration +target without first recording the actual repository. + +“Matrix” means `daimon-matrix`. Matrix.org remains excluded. “daimonmatrix +host” means the VPS, not a software component or being authority. + +## Exact resume order + +1. Read this file, `CURRENT-STATE.md`, `ROADMAP.md`, DM-083 issue #111, draft + PR #112, `reviews/DM-083.md` and `docs/dm083-two-host-dogfood.md`. +2. Preserve `915c56c` as the exact deployed Matrix runtime candidate and + `94d80ba` as its Cluster host pair; documentation-only successors do not + silently move that pin. +3. Complete the Project 9 consented cross-being canary using Matrix's native + authenticated intake and signed semantic receipt. Do not infer that result + from the already-proven Tribe ACK lane. +4. Complete fresh-host rebirth/recovery with a new root-authorized embodiment + credential, independent private custody and no copied writable database. +5. Complete remaining adapter, collective-memory and adversarial security + gates, then freeze the exact release candidate and independently reinstall + it. +6. Remove transitional compatibility and archive Tribe Bridge only after the + native replacement and explicit migration gates prove it is unnecessary. + +## Stop conditions + +Do not proceed from preparation to live effects if roots/manifests differ, +custody or writable state is shared, the Matrix/Cluster commits are not exact, +a route is implicit, rollback is incomplete, a backup is unverified, or a +secret/private endpoint would enter public evidence. Transport reachability, +Tribe directory membership, Cluster registry state, successful decryption and +ACKs never create relationship, grant, `/we`, adoption or semantic-delivery +authority. + +## Local minimum rerun + +From an installed current Matrix artifact: + +```bash +state_dir="$(mktemp -d /tmp/daimon-relationship-demo-XXXXXX)" +daimon-synthetic-relationships --state-root "$state_dir" | python -m json.tool +``` + +Success requires every reported invariant to be true. This command remains +local and uses disposable state plus loopback networking. diff --git a/REVIEW-HANDOFF.md b/REVIEW-HANDOFF.md index b482aa9..6d16a2d 100644 --- a/REVIEW-HANDOFF.md +++ b/REVIEW-HANDOFF.md @@ -3,7 +3,8 @@ > Historical gate: DM-000 completed on 2026-07-31. Do not ask an existing > session to repeat that audit. Use this procedure only for newly discovered > concurrent work, then record its disposition on the owning open card. The -> current operational baseline is in [`CURRENT-STATE.md`](CURRENT-STATE.md). +> current operational baseline is in [`RESUME.md`](RESUME.md) and +> [`CURRENT-STATE.md`](CURRENT-STATE.md). Use this document to decide whether work already in progress remains relevant to Daimon Matrix V0. @@ -16,12 +17,13 @@ work. Read, in order: -1. [`docs/foundation/daimon-matrix.md`](docs/foundation/daimon-matrix.md) -2. [`ONTOLOGY.md`](ONTOLOGY.md) -3. [`PLAN.md`](PLAN.md) -4. [`TRIBE-MIGRATION.md`](TRIBE-MIGRATION.md) -5. [`ISSUES.md`](ISSUES.md) -6. [DM-000: concurrent-work relevance audit](https://github.com/AlterMundi/daimon-matrix/issues/1) +1. [`RESUME.md`](RESUME.md) +2. [`docs/foundation/daimon-matrix.md`](docs/foundation/daimon-matrix.md) +3. [`ONTOLOGY.md`](ONTOLOGY.md) +4. [`PLAN.md`](PLAN.md) +5. [`TRIBE-MIGRATION.md`](TRIBE-MIGRATION.md) +6. [`ISSUES.md`](ISSUES.md) +7. [DM-000: concurrent-work relevance audit](https://github.com/AlterMundi/daimon-matrix/issues/1) Then inspect the concrete work in your session and report: @@ -54,12 +56,18 @@ notes can be updated before implementation continues. The reviewer must account for these decisions: -- `/me` is one continuing cryptographic and experiential identity with at most - one awake body. -- `/we` is a collective scope over distinct signed `/me` identities, not +- A being is one continuing cryptographic and experiential identity that may + authorize zero, one or many simultaneously awake embodiments. There is no + identity-wide singleton-body lease. +- `/me` is the situated current embodiment; `/we` is the set/navigation scope + over embodiments of that same being. It is not a set of different beings, another identity, a species, or a mandatory answer integrator. -- Multiple `/we` members may be awake simultaneously; duplicate active bodies - for one `/me` are split-brain and fail closed. +- Every embodiment has distinct credentials, incarnation, writable state and + attributable origin. Only stale writers competing for the same concrete + resource fail closed through a resource-scoped Cluster fence. +- Relationships and founded-Tribe membership connect distinct beings through + explicit signed consent/grants; transport directories, reachability and + Cluster presence never create that authority. - `/tribe` is a resource-sharing relationship scope, not the transport. - Tribe Bridge is planned for absorption as the first transport implementation. - Tribe v0 public-roster-derived encryption did not provide confidentiality; diff --git a/ROADMAP.md b/ROADMAP.md index 5dfd206..1d981ec 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,28 @@ # Roadmap +## Active critical path + +The complete minimum protocol and the real same-being two-host path have now +been exercised. DM-083 is operationally accepted, and its final host-qualified +runtime successor is exact Matrix `915c56c` hosted by Cluster `94d80ba`. +Historical retry, successor convergence, rollback, checked recovery, +least-authority host status and a cold full-host reboot all passed. The release +branches remain unmerged pending independent review. [`RESUME.md`](RESUME.md) +is the cold-start handoff and Project 9 is the authoritative live board. + +Resume in dependency order: + +1. complete the consented cross-being native logical-message canary; +2. complete the fresh-host + rebirth/recovery gates; +3. complete remaining collective-memory/additional-harness and adversarial + security gates required by the board; +4. freeze and publish the V0.1.0 release; and +5. retire/archive the transitional Tribe Bridge only through its explicit + human-authorized migration cards. + +No live-host step is implied by a local conformance result or by this roadmap. + ## V0.1 MVP - Canonical ontology and cross-runtime contracts. @@ -31,7 +54,7 @@ claim/publication/quarantine policy. - `daimon-cluster` owns body/container lifecycle, storage, deployment evidence, and resource-scoped exclusion. -- Cluster hosts Matrix V6 relationship state under the exact adaptation +- Cluster hosts Matrix V7 relationship state under the exact adaptation contract but never derives social or grant authority from lifecycle truth. - Tribe Bridge is a transitional source/runtime and is archived after DM-050–DM-055 replacement gates and the release handoff. diff --git a/TRIBE-MIGRATION.md b/TRIBE-MIGRATION.md index 3a5bf0e..ab9a69a 100644 --- a/TRIBE-MIGRATION.md +++ b/TRIBE-MIGRATION.md @@ -1,5 +1,25 @@ # Tribe Bridge Integration +## Current checkpoint and repository name + +As reconciled on 2026-08-11, the only identified chat-facing Tribe repository is +`nicoechaniz/tribe-bridge`. PR #61 is at runtime-repair code `ecb51d8`, while +the deployed broker reports build `d49bf22`; documentation-only commits do not +silently move either runtime. Inspect Git and service health independently. No separate +`tribe-chat` repository was found locally or under the recorded GitHub owners. +Treat “tribe-chat” as an informal reference to the current Tribe Bridge +experience unless an exact repository and authority boundary are recorded +later. + +DM-082 completed the local relationship, grant, encrypted delivery, +authenticated intake and semantic-receipt slice inside `daimon-matrix`. +DM-083 then completed the authorized real same-being two-host dogfood and kept +one ordinary Tribe v1 message as explicitly separate transport evidence. +Matrix/Cluster now run the host-qualified `915c56c`/`94d80ba` pair, while Tribe +Bridge v1 remains deployed as the transitional ordinary human-message lane at +directory epoch 5. It must not be archived, dual-written or silently replaced. +The exact resume and retirement order is in [`RESUME.md`](RESUME.md). + ## Decision The Tribe Bridge implementation will be absorbed into `daimon-matrix` as the @@ -47,7 +67,7 @@ parsers, commands, ports, downgrade paths, and message-history migration have been retired. Rollback means repairing v1 with a successor state; it never means reinstalling v0. -The active transitional runtime is Tribe Bridge v1 directory epoch 3. It uses +The active transitional runtime is Tribe Bridge v1 directory epoch 5. It uses signed directory chaining, recipient encryption, authenticated envelopes, stable IDs, leases, and direct/hub routing. This is useful transport evidence, but its directory still must not become Daimon `/me` authority. diff --git a/conformance/registry-v1.json b/conformance/registry-v1.json index 06e40a2..183433e 100644 --- a/conformance/registry-v1.json +++ b/conformance/registry-v1.json @@ -1,6 +1,6 @@ { "schema": "dm.conformance.registry/v1", - "suite_version": "DM-026.19", + "suite_version": "DM-026.20", "fixture_seed": "dm026-v1", "scenarios": [ { @@ -129,6 +129,62 @@ "ci_lane": "complete", "required": true }, + { + "id": "collective_exchange_recovery", + "owners": ["DM-022", "DM-036"], + "specifications": ["docs/dm036-collective-memory.md", "specs/source-ancestry.md"], + "setup": "Separate owner-only inbound source-log and outbound publication journals with one pinned immutable collective-memory generation and one reviewed derived target.", + "stimulus": "Crash after inbound prepare, after its Matrix event, after outbound prepare, after provider effect and after Matrix acceptance, then restart each adapter.", + "fault": "Process loss occurs on every side of the authoritative Matrix events and external content-addressed receipts.", + "expected": "Recovery deterministically completes all-old or all-new, authors or discovers exactly one event and never advances a mixed generation or serves blind replay.", + "evidence": ["tests.test_dm036_collective_memory.DM036IntegrationTests.test_inbound_recovers_crash_after_ledger_without_mixed_head", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_inbound_recovers_crash_after_prepare_before_ledger", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_outbound_recovers_after_acceptance_event_before_journal_commit", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_outbound_recovers_after_effect_before_matrix_acceptance", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_outbound_recovers_after_prepare_before_request_event"], + "cleanup": "Close both SQLite stores and discard only fixture-owned source, publication and corpus roots.", + "platform": "linux", + "ci_lane": "complete", + "required": true + }, + { + "id": "collective_publication_review", + "owners": ["DM-015", "DM-018", "DM-033", "DM-036"], + "specifications": ["docs/dm036-collective-memory.md", "specs/adapter-contracts.md", "specs/source-ancestry.md"], + "setup": "Pinned reviewed-publisher boundary, exact current Matrix source checkpoint, subject consent key and distinct current human review key.", + "stimulus": "Publish, retry, advance a successor and tombstone, then substitute evidence, final bytes, source checkpoint, target state and effect truth.", + "fault": "Expired or revoked consent, self-review, final-render secret, stale predecessor, response loss, drift or an inbound credential attempts to authorize publication.", + "expected": "Only exact final reviewed bytes commit monotonically; every retry re-observes effect truth and neither inbound trust nor an external receipt gains Matrix authority.", + "evidence": ["tests.test_dm036_collective_memory.DM036IntegrationTests.test_direction_separation_and_exact_review_fail_closed", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_outbound_real_boundary_publish_response_loss_and_replay", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_outbound_rejects_expired_or_revoked_consent_and_source_drift", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_outbound_rejects_provider_preview_injection_untracked_tombstone_and_drift", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_outbound_successor_and_reviewed_tombstone_are_monotonic"], + "cleanup": "Remove isolated external targets, projection databases, Matrix ledger and publisher journal.", + "platform": "linux", + "ci_lane": "complete", + "required": true + }, + { + "id": "collective_real_io", + "owners": ["DM-015", "DM-036"], + "specifications": ["docs/dm036-collective-memory.md", "schemas/collective-memory/v1/contracts.schema.json"], + "setup": "Real pinned collective-memory export and publication boundaries over an isolated synthetic corpus with FTS SQLite and Atlas projections plus unrelated content.", + "stimulus": "Export, quarantine in Matrix, publish an independently reviewed derivative, verify search and Atlas, then publish a reviewed tombstone and reindex.", + "fault": "A direction shares SQLite, WAL or SHM state, commit exposes a mixed generation, or the transaction mutates unrelated corpus content.", + "expected": "Every view is old-or-new, both databases pass integrity checks, the target converges through tombstone and unrelated content remains exact.", + "evidence": ["tests.test_dm036_collective_memory.DM036IntegrationTests.test_real_export_matrix_quarantine_publish_search_atlas_and_tombstone"], + "cleanup": "Close SQLite handles and remove the complete isolated corpus and both independent Matrix adapter roots.", + "platform": "linux", + "ci_lane": "complete", + "required": true + }, + { + "id": "collective_source_quarantine", + "owners": ["DM-015", "DM-018", "DM-023", "DM-036"], + "specifications": ["docs/dm036-collective-memory.md", "specs/source-ancestry.md"], + "setup": "Pinned read-only export capability, immutable attributed generations, separate append-only Matrix source log and root-authorized ledger.", + "stimulus": "Preview and apply initial, paged, successor, tombstone and offline generations, then rebuild from the authoritative Matrix event and local immutable source log.", + "fault": "Tampered or partial pages, implicit removal, predecessor fork, symlink, timeout or collective text attempts to become autobiographical memory.", + "expected": "Only complete continuous generations advance; every artifact remains attributed and quarantined, prior active truth survives failure and personal-memory assertions remain exactly zero.", + "evidence": ["tests.test_dm036_collective_memory.DM036IntegrationTests.test_inbound_contract_rejects_adversarial_manifests_and_partial_page", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_inbound_initial_retry_successor_and_tombstone_remain_quarantined", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_inbound_offline_catch_up_walks_historical_manifests", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_inbound_paginates_bounded_generation_without_large_ledger_event", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_inbound_rebuilds_active_projection_from_ledger_and_source_log", "tests.test_dm036_collective_memory.DM036IntegrationTests.test_inbound_rejects_artifact_fork_and_symlink_source"], + "cleanup": "Close the inbound source store and ledger, then remove their separate owner-only fixture roots.", + "platform": "linux", + "ci_lane": "complete", + "required": true + }, { "id": "communication_cursor_contiguous", "owners": ["DM-052"], @@ -815,6 +871,20 @@ "ci_lane": "fast", "required": true }, + { + "id": "rebirth_additional_and_recovery", + "owners": ["DM-021", "DM-022", "DM-078"], + "specifications": ["docs/dm078-fresh-host-rebirth.md", "schemas/weave/v1/embodiment-enrollment.schema.json", "schemas/weave/v1/recovery-rebirth.schema.json"], + "setup": "A root-bound being, split offline root and recovery custody, and a separately keyed target with empty writable state.", + "stimulus": "Authorize an additional embodiment under the current root, then independently rotate a recovery quorum into fresh roots and one fresh replacement body.", + "fault": "Threshold shortfall, signature or hash tamper, stale or reused identifiers, incomplete revocation, old-root reuse, unexpected custody roles or writable-state copying.", + "expected": "Both ceremonies preserve exact signed history while target and authority custody stay separate; recovery revokes every active predecessor, drops old roots and starts one fresh target-only runtime.", + "evidence": ["tests.test_dm078_rebirth.TestAdditionalEmbodiment.test_activation_builds_loadable_empty_target_runtime", "tests.test_dm078_rebirth.TestAdditionalEmbodiment.test_target_and_root_never_share_private_material", "tests.test_dm078_recovery_rebirth.TestRecoveryRebirthAuthority.test_offline_recovery_custody_drops_old_roots_and_authorizes_target", "tests.test_dm078_recovery_rebirth.TestRecoveryRebirthAuthority.test_recovery_and_ordinary_enrollment_compose_in_both_orders", "tests.test_dm078_recovery_rebirth.TestRecoveryRebirthAuthority.test_recovery_must_revoke_every_predecessor_and_bind_exact_bytes", "tests.test_dm078_recovery_rebirth.TestRecoveryRebirthAuthority.test_recovery_preparation_builds_loadable_target_only_runtime"], + "cleanup": "Close SQLite handles and remove only fixture-owned owner-only temporary ceremony and runtime roots.", + "platform": "all", + "ci_lane": "complete", + "required": true + }, { "id": "recipient_encryption_isolation", "owners": ["DM-051"], diff --git a/conformance/source-v0-section14.json b/conformance/source-v0-section14.json index 7ba4886..b93323a 100644 --- a/conformance/source-v0-section14.json +++ b/conformance/source-v0-section14.json @@ -1 +1 @@ -{"row_count":84,"rows":[{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-001","index":1,"required_result":"intrinsically valid, locally quarantined","scenario":"valid sequence-zero self-claim with complete evidence"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-002","index":2,"required_result":"reject `false-self`","scenario":"claim author differs from claimant"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-003","index":3,"required_result":"reject","scenario":"root, transport, Tribe, harness, host, model, or adapter signs in place of accepted operational credential"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-004","index":4,"required_result":"reject policy implementation","scenario":"valid signature is treated as true ancestry"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-005","index":5,"required_result":"reject","scenario":"source ID does not recompute from exact core"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-006","index":6,"required_result":"distinct source or reject mismatch; never merge","scenario":"source alias or normalized URI is substituted"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-007","index":7,"required_result":"reject","scenario":"source core embeds credentials, userinfo, whitespace, control, or locator behavior"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-008","index":8,"required_result":"reject","scenario":"relation unknown, empty, unsorted, or duplicated"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-009","index":9,"required_result":"reject","scenario":"assert has null evidence or retract has evidence"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-010","index":10,"required_result":"reject","scenario":"sequence gap or wrong predecessor ID/hash"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-011","index":11,"required_result":"idempotent","scenario":"exact event replay"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-012","index":12,"required_result":"quarantine series; no winner","scenario":"two successors occupy one claim position"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-013","index":13,"required_result":"retain and quarantine descendants","scenario":"late sibling arrives below high-water"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-014","index":14,"required_result":"reject/fork remains","scenario":"ordinary successor attempts to heal fork"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-015","index":15,"required_result":"exclude claimant; retain history","scenario":"retraction becomes current"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-016","index":16,"required_result":"reject; retraction covers exact current assertion","scenario":"retraction changes only a subset of predecessor relations"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-017","index":17,"required_result":"historical only; no eligibility","scenario":"expired claim replays after a newer head"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-018","index":18,"required_result":"valid new head, initially quarantined","scenario":"assertion after retraction with fresh predecessor/evidence"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-019","index":19,"required_result":"reject","scenario":"evidence manifest binding hash names another claim"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-020","index":20,"required_result":"claim incomplete/quarantined, never admitted","scenario":"evidence is missing but well-formed"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-021","index":21,"required_result":"discard bytes; remain incomplete","scenario":"evidence bytes mismatch digest"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-022","index":22,"required_result":"reject policy implementation","scenario":"claimant's own evidence or many matching claims are treated as objective quorum"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-023","index":23,"required_result":"downgrade is forbidden; reject manifest","scenario":"cryptographic-author label lacks exact author/content signature"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-024","index":24,"required_result":"claimant eligible subject to identity/presence/policy","scenario":"valid local assessment admits exact current claim under complete policy/evidence"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-025","index":25,"required_result":"reject","scenario":"assessment author differs from assessor"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-026","index":26,"required_result":"retain as evidence only","scenario":"remote assessment changes local disposition"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-027","index":27,"required_result":"historical; cannot admit current head","scenario":"assessment cites old claim head"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_assessment_successor_fork_excludes_locally_admitted_claim","tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-028","index":28,"required_result":"exclude claimant locally; quarantine assessment chain","scenario":"two assessment successors fork"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-029","index":29,"required_result":"quarantined/incomplete, never admit","scenario":"policy bytes missing or hash mismatch"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-030","index":30,"required_result":"reject assessment/decision","scenario":"evidence snapshot omits an input, binds another subject/cursor, or changes after decision"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-031","index":31,"required_result":"reject","scenario":"resolver uses search index, route, name, or semantic similarity as membership"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-032","index":32,"required_result":"fail closed","scenario":"`/source` operation omits exact selector"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-033","index":33,"required_result":"reject","scenario":"unqualified all-sources network query"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-034","index":34,"required_result":"one recipient, evidence retains relations","scenario":"one claimant has multiple relations"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-035","index":35,"required_result":"excluded or resolved-unroutable per DM-012; never replaced","scenario":"admitted claimant is parked or unroutable"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-036","index":36,"required_result":"closed denial, no oracle detail","scenario":"unauthorized status/diff distinguishes source existence"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-037","index":37,"required_result":"intrinsically published, receiver quarantine on pull","scenario":"valid first publication with explicit consent and provenance"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-038","index":38,"required_result":"reject","scenario":"publication author differs from publisher"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-039","index":39,"required_result":"publication incomplete/quarantined; do not offer","scenario":"publisher claim is missing, retracted, expired, or forked"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-040","index":40,"required_result":"reject","scenario":"publication ID or sequence does not bind publisher/source URI"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-041","index":41,"required_result":"reject V0 export","scenario":"private, implicit-consent, or null-license publication"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-042","index":42,"required_result":"cryptographic publication remains a claim; disclosure/promotion denied","scenario":"publisher says explicit consent but required consent evidence is absent"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-043","index":43,"required_result":"refuse","scenario":"stable source URI is dereferenced as a locator"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-044","index":44,"required_result":"reject","scenario":"publication update names wrong predecessor"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_successor_fork_is_retained_and_never_offered","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-045","index":45,"required_result":"quarantine series; offer neither","scenario":"two publication successors fork"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_fresh_receiver_lands_tombstone_without_withdrawn_content","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-046","index":46,"required_result":"stop offering/projection; retain events and receipts","scenario":"tombstone current"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-047","index":47,"required_result":"refuse deletion","scenario":"tombstone deletes untracked or drifted target"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_republish_after_tombstone_creates_new_quarantine_successor","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-048","index":48,"required_result":"new successor and review; old bytes remain history","scenario":"republish after tombstone"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-049","index":49,"required_result":"reject","scenario":"provenance output differs from publication content/URI"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-050","index":50,"required_result":"reject","scenario":"provenance graph is cyclic, disconnected, or has derivation root"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-051","index":51,"required_result":"reject","scenario":"summary drops an original node or relabels authorship"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-052","index":52,"required_result":"reject","scenario":"external author represented as cryptographically verified without registered proof"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-053","index":53,"required_result":"reject","scenario":"model/indexer/receiver becomes author merely by projection"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_fresh_receiver_lands_tombstone_without_withdrawn_content","tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-054","index":54,"required_result":"reject","scenario":"diff mutates receiver or offers tombstoned/private/forked content"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-055","index":55,"required_result":"reject","scenario":"continuation token reused for another requester/responder/cursor"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-056","index":56,"required_result":"reject claim; cursor is observer-relative","scenario":"cursor claims global completeness"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-057","index":57,"required_result":"fail preview","scenario":"incoming writes, fetches, renders, executes, indexes, or advances cursor"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-058","index":58,"required_result":"stale; recompute","scenario":"incoming starts at changed local cursor"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-059","index":59,"required_result":"reject","scenario":"pull copies HMK/collective-memory/ledger SQLite"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-060","index":60,"required_result":"reject/quarantine","scenario":"pull trusts a remote index row without canonical event/content evidence"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_item_with_transitive_publication_creates_every_import_receipt","tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-061","index":61,"required_result":"persist canonical evidence and initial quarantine decision only","scenario":"pull receives valid new content"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-062","index":62,"required_result":"reject configuration/effect","scenario":"configuration asks pull to auto-promote"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-063","index":63,"required_result":"resume idempotently from durable prefix","scenario":"interrupted pull before cursor commit"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-064","index":64,"required_result":"no duplicate events, blobs, decisions, or projections","scenario":"repeated pull after completion"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_incomplete_item_is_reported_but_not_landed_or_marked_known","tests.test_dm081_sources.SourceRegistryTests.test_malformed_item_is_rejected_while_complete_prefix_lands","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-065","index":65,"required_result":"keep complete prefix; report incomplete","scenario":"partial bundle lacks predecessor/provenance"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-066","index":66,"required_result":"reject","scenario":"transport ACK reported as import receipt"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-067","index":67,"required_result":"create attributed derived projection","scenario":"promotion is separate and exact policy/evidence/current-head checks pass"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-068","index":68,"required_result":"remain quarantined","scenario":"promotion policy or evidence missing"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_fresh_receiver_lands_tombstone_without_withdrawn_content","tests.test_dm081_sources.SourceRegistryTests.test_publication_successor_fork_is_retained_and_never_offered","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-069","index":69,"required_result":"reject","scenario":"tombstoned/forked publication is promoted"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-070","index":70,"required_result":"reject","scenario":"promotion rewrites publisher, author, URI, derivation, digest, or decision history"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-071","index":71,"required_result":"reject regardless of policy","scenario":"external knowledge promoted as autobiography/body experience"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-072","index":72,"required_result":"reject","scenario":"consensus, repetition, embedding score, species, `/we`, or tribe triggers promotion"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-073","index":73,"required_result":"reject; deactivate projection only","scenario":"local rejection deletes canonical history"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-074","index":74,"required_result":"accept as adapter evidence, not Daimon authority","scenario":"HMK publication maps immutable URI/provenance/receipt/tombstone"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-075","index":75,"required_result":"fail publication review","scenario":"raw HMK body scanned but final rendered artifact is not"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-076","index":76,"required_result":"reject boundary crossing","scenario":"outbound receipt reused as inbound admission"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-077","index":77,"required_result":"reject","scenario":"collective-memory index/Atlas node treated as canonical source event"},{"evidence":["tests.test_dm081_sources.SourceCASTests.test_content_is_inert_without_network_execution_or_archive_expansion","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-078","index":78,"required_result":"refuse before effect","scenario":"content parser receives SSRF target, ambient credential, active content, or archive traversal"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_initial_import_is_quarantine_and_promotion_is_separate","tests.test_dm081_sources.SourceWireContractTests.test_source_graph_depth_accepts_exact_bound_and_rejects_plus_one","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-079","index":79,"required_result":"process normally when otherwise valid","scenario":"exact count/byte/depth bound"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_initial_import_is_quarantine_and_promotion_is_separate","tests.test_dm081_sources.SourceWireContractTests.test_source_graph_depth_accepts_exact_bound_and_rejects_plus_one","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-080","index":80,"required_result":"reject or incomplete before unsafe work","scenario":"any bound plus one"},{"evidence":["tests.test_dm060_synthetic_birth.BirthContractTests.test_distinct_root_birth_first_embodiment_and_empty_memory_activate","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-081","index":81,"required_result":"reject","scenario":"source claim used as `/we`, tribe, species, identity, route, disclosure, or birth authority"},{"evidence":["tests.test_dm060_synthetic_birth.BirthContractTests.test_distinct_root_birth_first_embodiment_and_empty_memory_activate","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-082","index":82,"required_result":"bind contextual reference; claim still locally assessed","scenario":"birth offer references exact current DM-015 claim event ID"},{"evidence":["tests.test_dm060_synthetic_birth.BirthContractTests.test_distinct_root_birth_first_embodiment_and_empty_memory_activate","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-083","index":83,"required_result":"lineage context-incomplete; identity may awaken","scenario":"birth source reference unavailable"},{"evidence":["tests.test_dm060_synthetic_birth.BirthContractTests.test_distinct_root_birth_first_embodiment_and_empty_memory_activate","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-084","index":84,"required_result":"contextual source provenance excluded/quarantined; identity and birth binding remain valid","scenario":"birth source claim later retracts or forks"}],"schema":"dm.source-section14-registry/v0","section":"14","spec_path":"specs/source-ancestry.md","spec_sha256":"2a30c1cbd2d82c461f105f6dd8bd52cd0d7e3a70751081a3a0b54ad82979ac7b"} \ No newline at end of file +{"row_count":84,"rows":[{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-001","index":1,"required_result":"intrinsically valid, locally quarantined","scenario":"valid sequence-zero self-claim with complete evidence"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-002","index":2,"required_result":"reject `false-self`","scenario":"claim author differs from claimant"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-003","index":3,"required_result":"reject","scenario":"root, transport, Tribe, harness, host, model, or adapter signs in place of accepted operational credential"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-004","index":4,"required_result":"reject policy implementation","scenario":"valid signature is treated as true ancestry"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-005","index":5,"required_result":"reject","scenario":"source ID does not recompute from exact core"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-006","index":6,"required_result":"distinct source or reject mismatch; never merge","scenario":"source alias or normalized URI is substituted"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-007","index":7,"required_result":"reject","scenario":"source core embeds credentials, userinfo, whitespace, control, or locator behavior"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-008","index":8,"required_result":"reject","scenario":"relation unknown, empty, unsorted, or duplicated"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-009","index":9,"required_result":"reject","scenario":"assert has null evidence or retract has evidence"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-010","index":10,"required_result":"reject","scenario":"sequence gap or wrong predecessor ID/hash"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-011","index":11,"required_result":"idempotent","scenario":"exact event replay"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-012","index":12,"required_result":"quarantine series; no winner","scenario":"two successors occupy one claim position"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-013","index":13,"required_result":"retain and quarantine descendants","scenario":"late sibling arrives below high-water"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-014","index":14,"required_result":"reject/fork remains","scenario":"ordinary successor attempts to heal fork"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-015","index":15,"required_result":"exclude claimant; retain history","scenario":"retraction becomes current"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-016","index":16,"required_result":"reject; retraction covers exact current assertion","scenario":"retraction changes only a subset of predecessor relations"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-017","index":17,"required_result":"historical only; no eligibility","scenario":"expired claim replays after a newer head"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-018","index":18,"required_result":"valid new head, initially quarantined","scenario":"assertion after retraction with fresh predecessor/evidence"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-019","index":19,"required_result":"reject","scenario":"evidence manifest binding hash names another claim"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-020","index":20,"required_result":"claim incomplete/quarantined, never admitted","scenario":"evidence is missing but well-formed"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-021","index":21,"required_result":"discard bytes; remain incomplete","scenario":"evidence bytes mismatch digest"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-022","index":22,"required_result":"reject policy implementation","scenario":"claimant's own evidence or many matching claims are treated as objective quorum"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-023","index":23,"required_result":"downgrade is forbidden; reject manifest","scenario":"cryptographic-author label lacks exact author/content signature"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-024","index":24,"required_result":"claimant eligible subject to identity/presence/policy","scenario":"valid local assessment admits exact current claim under complete policy/evidence"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-025","index":25,"required_result":"reject","scenario":"assessment author differs from assessor"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-026","index":26,"required_result":"retain as evidence only","scenario":"remote assessment changes local disposition"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-027","index":27,"required_result":"historical; cannot admit current head","scenario":"assessment cites old claim head"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_assessment_successor_fork_excludes_locally_admitted_claim","tests.test_dm081_sources.SourceRegistryTests.test_claim_starts_quarantined_then_exact_local_assessment_admits","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-028","index":28,"required_result":"exclude claimant locally; quarantine assessment chain","scenario":"two assessment successors fork"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-029","index":29,"required_result":"quarantined/incomplete, never admit","scenario":"policy bytes missing or hash mismatch"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-030","index":30,"required_result":"reject assessment/decision","scenario":"evidence snapshot omits an input, binds another subject/cursor, or changes after decision"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-031","index":31,"required_result":"reject","scenario":"resolver uses search index, route, name, or semantic similarity as membership"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-032","index":32,"required_result":"fail closed","scenario":"`/source` operation omits exact selector"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_source_identity_is_byte_exact_and_selector_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-033","index":33,"required_result":"reject","scenario":"unqualified all-sources network query"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-034","index":34,"required_result":"one recipient, evidence retains relations","scenario":"one claimant has multiple relations"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-035","index":35,"required_result":"excluded or resolved-unroutable per DM-012; never replaced","scenario":"admitted claimant is parked or unroutable"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-036","index":36,"required_result":"closed denial, no oracle detail","scenario":"unauthorized status/diff distinguishes source existence"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-037","index":37,"required_result":"intrinsically published, receiver quarantine on pull","scenario":"valid first publication with explicit consent and provenance"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-038","index":38,"required_result":"reject","scenario":"publication author differs from publisher"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-039","index":39,"required_result":"publication incomplete/quarantined; do not offer","scenario":"publisher claim is missing, retracted, expired, or forked"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-040","index":40,"required_result":"reject","scenario":"publication ID or sequence does not bind publisher/source URI"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-041","index":41,"required_result":"reject V0 export","scenario":"private, implicit-consent, or null-license publication"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-042","index":42,"required_result":"cryptographic publication remains a claim; disclosure/promotion denied","scenario":"publisher says explicit consent but required consent evidence is absent"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-043","index":43,"required_result":"refuse","scenario":"stable source URI is dereferenced as a locator"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-044","index":44,"required_result":"reject","scenario":"publication update names wrong predecessor"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_successor_fork_is_retained_and_never_offered","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-045","index":45,"required_result":"quarantine series; offer neither","scenario":"two publication successors fork"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_fresh_receiver_lands_tombstone_without_withdrawn_content","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-046","index":46,"required_result":"stop offering/projection; retain events and receipts","scenario":"tombstone current"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-047","index":47,"required_result":"refuse deletion","scenario":"tombstone deletes untracked or drifted target"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_republish_after_tombstone_creates_new_quarantine_successor","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-048","index":48,"required_result":"new successor and review; old bytes remain history","scenario":"republish after tombstone"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-049","index":49,"required_result":"reject","scenario":"provenance output differs from publication content/URI"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-050","index":50,"required_result":"reject","scenario":"provenance graph is cyclic, disconnected, or has derivation root"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-051","index":51,"required_result":"reject","scenario":"summary drops an original node or relabels authorship"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-052","index":52,"required_result":"reject","scenario":"external author represented as cryptographically verified without registered proof"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-053","index":53,"required_result":"reject","scenario":"model/indexer/receiver becomes author merely by projection"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_fresh_receiver_lands_tombstone_without_withdrawn_content","tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-054","index":54,"required_result":"reject","scenario":"diff mutates receiver or offers tombstoned/private/forked content"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-055","index":55,"required_result":"reject","scenario":"continuation token reused for another requester/responder/cursor"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-056","index":56,"required_result":"reject claim; cursor is observer-relative","scenario":"cursor claims global completeness"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-057","index":57,"required_result":"fail preview","scenario":"incoming writes, fetches, renders, executes, indexes, or advances cursor"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-058","index":58,"required_result":"stale; recompute","scenario":"incoming starts at changed local cursor"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-059","index":59,"required_result":"reject","scenario":"pull copies HMK/collective-memory/ledger SQLite"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-060","index":60,"required_result":"reject/quarantine","scenario":"pull trusts a remote index row without canonical event/content evidence"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_item_with_transitive_publication_creates_every_import_receipt","tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-061","index":61,"required_result":"persist canonical evidence and initial quarantine decision only","scenario":"pull receives valid new content"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-062","index":62,"required_result":"reject configuration/effect","scenario":"configuration asks pull to auto-promote"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_paginated_pull_keeps_starting_cursor_until_terminal_page","tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-063","index":63,"required_result":"resume idempotently from durable prefix","scenario":"interrupted pull before cursor commit"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-064","index":64,"required_result":"no duplicate events, blobs, decisions, or projections","scenario":"repeated pull after completion"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_incomplete_item_is_reported_but_not_landed_or_marked_known","tests.test_dm081_sources.SourceRegistryTests.test_malformed_item_is_rejected_while_complete_prefix_lands","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-065","index":65,"required_result":"keep complete prefix; report incomplete","scenario":"partial bundle lacks predecessor/provenance"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_pull_resumes_after_crash_and_never_promotes","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-066","index":66,"required_result":"reject","scenario":"transport ACK reported as import receipt"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-067","index":67,"required_result":"create attributed derived projection","scenario":"promotion is separate and exact policy/evidence/current-head checks pass"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SourceWireContractTests.test_claim_binding_and_evidence_are_closed_and_content_bound","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-068","index":68,"required_result":"remain quarantined","scenario":"promotion policy or evidence missing"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_fresh_receiver_lands_tombstone_without_withdrawn_content","tests.test_dm081_sources.SourceRegistryTests.test_publication_successor_fork_is_retained_and_never_offered","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-069","index":69,"required_result":"reject","scenario":"tombstoned/forked publication is promoted"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-070","index":70,"required_result":"reject","scenario":"promotion rewrites publisher, author, URI, derivation, digest, or decision history"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-071","index":71,"required_result":"reject regardless of policy","scenario":"external knowledge promoted as autobiography/body experience"},{"evidence":["tests.test_dm081_sources.SourceRegistryTests.test_publication_pull_quarantines_then_separate_promotion_preserves_authors","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-072","index":72,"required_result":"reject","scenario":"consensus, repetition, embedding score, species, `/we`, or tribe triggers promotion"},{"evidence":["tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-073","index":73,"required_result":"reject; deactivate projection only","scenario":"local rejection deletes canonical history"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SourceRegistryTests.test_reviewed_publication_tombstones_without_deleting_history","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-074","index":74,"required_result":"accept as adapter evidence, not Daimon authority","scenario":"HMK publication maps immutable URI/provenance/receipt/tombstone"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-075","index":75,"required_result":"fail publication review","scenario":"raw HMK body scanned but final rendered artifact is not"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-076","index":76,"required_result":"reject boundary crossing","scenario":"outbound receipt reused as inbound admission"},{"evidence":["tests.test_dm035_publication.DM035PublicationTests.test_final_render_secret_policy_and_unsafe_target","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-077","index":77,"required_result":"reject","scenario":"collective-memory index/Atlas node treated as canonical source event"},{"evidence":["tests.test_dm081_sources.SourceCASTests.test_content_is_inert_without_network_execution_or_archive_expansion","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-078","index":78,"required_result":"refuse before effect","scenario":"content parser receives SSRF target, ambient credential, active content, or archive traversal"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_initial_import_is_quarantine_and_promotion_is_separate","tests.test_dm081_sources.SourceWireContractTests.test_source_graph_depth_accepts_exact_bound_and_rejects_plus_one","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-079","index":79,"required_result":"process normally when otherwise valid","scenario":"exact count/byte/depth bound"},{"evidence":["tests.test_dm081_sources.SourceWireContractTests.test_initial_import_is_quarantine_and_promotion_is_separate","tests.test_dm081_sources.SourceWireContractTests.test_source_graph_depth_accepts_exact_bound_and_rejects_plus_one","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-080","index":80,"required_result":"reject or incomplete before unsafe work","scenario":"any bound plus one"},{"evidence":["tests.test_dm060_synthetic_birth.BirthContractTests.test_distinct_root_birth_first_embodiment_and_empty_memory_activate","tests.test_dm081_sources.SourceWireContractTests.test_cyclic_and_disconnected_provenance_is_rejected","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-081","index":81,"required_result":"reject","scenario":"source claim used as `/we`, tribe, species, identity, route, disclosure, or birth authority"},{"evidence":["tests.test_dm060_synthetic_birth.BirthContractTests.test_distinct_root_birth_first_embodiment_and_empty_memory_activate","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-082","index":82,"required_result":"bind contextual reference; claim still locally assessed","scenario":"birth offer references exact current DM-015 claim event ID"},{"evidence":["tests.test_dm060_synthetic_birth.BirthContractTests.test_distinct_root_birth_first_embodiment_and_empty_memory_activate","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-083","index":83,"required_result":"lineage context-incomplete; identity may awaken","scenario":"birth source reference unavailable"},{"evidence":["tests.test_dm060_synthetic_birth.BirthContractTests.test_distinct_root_birth_first_embodiment_and_empty_memory_activate","tests.test_dm081_sources.SourceRegistryTests.test_same_claim_position_from_two_embodiments_quarantines_series","tests.test_dm081_sources.SourceWireContractTests.test_false_self_retraction_and_predecessor_rules_fail_closed","tests.test_dm081_sources.SyntheticSourceJourneyTests.test_two_being_report_is_closed_reproducible_and_secret_free"],"id":"source-s14-084","index":84,"required_result":"contextual source provenance excluded/quarantined; identity and birth binding remain valid","scenario":"birth source claim later retracts or forks"}],"schema":"dm.source-section14-registry/v0","section":"14","spec_path":"specs/source-ancestry.md","spec_sha256":"0734f48d81611e4e5fce53e03087fb14ecce796aea3c7b7fc3100caba7290f25"} \ No newline at end of file diff --git a/docs/dm024-hosted-runtime.md b/docs/dm024-hosted-runtime.md index 82ea8de..7ee50b1 100644 --- a/docs/dm024-hosted-runtime.md +++ b/docs/dm024-hosted-runtime.md @@ -44,6 +44,15 @@ policy and recovers every fenced application against the canonical ledger before serving. The public bundle contains no maintainer seed, pointer bytes, runner handle or mutable package source. +DM-081 adds source custody in V5 and DM-082 adds relationship state in V6. +DM-083 adds `dm.runtime.bundle/v7`: every active remote embodiment has one +sorted, exact native-peer HTTP(S) target and timeout. The endpoint is fixed at +startup rather than accepted from a sync call. `we.sync.peer-pull` reuses the +DM-023 request frozen by `scope.we.sync-plan`, performs the encrypted peer +round trip inside the daemon's custody boundary and atomically imports one +bounded page. The installed `daimon-bootstrap` ceremony and operational steps +are documented in `docs/runbooks/operator-bootstrap.md`. + ## Local protocol The only release listener is an owner-local AF_UNIX stream socket. Linux peer @@ -57,11 +66,12 @@ Authentication, expiry, peer UID and method scope are checked before params or runtime membership are disclosed. Unauthenticated framing/auth failures close without a response. Authenticated failures use stable bounded codes. -The original closed registry is `runtime.status`; `we.heads`, `we.preview`, `we.diff`; -`we.observe`, `we.decide`; `we.projection.get`, `we.projection.rebuild`; and the -four DM-023 sync operations. There is no generic signing, secret retrieval, -identity selection, TCP/HTTP, external effect, Tribe routing or live `/we` -fan-out method. +The original closed registry is `runtime.status`; `we.heads`, `we.preview`, +`we.diff`; `we.observe`, `we.decide`; `we.projection.get`, +`we.projection.rebuild`; and the four transport-neutral DM-023 sync operations. +V7 adds the bounded configured `we.sync.peer-pull` composition. There is no +generic signing, secret retrieval, identity selection, arbitrary endpoint, +Tribe routing or implicit adoption method. DM-052 extends the daemon registry with closed `communication.*` operations for message/leg projection, attempts, delivery replay, route ACKs, terminal @@ -125,6 +135,6 @@ not. Telegram, Buzz or another human gateway may be added later only behind the disabled generic edge. No carrier becomes event, scope, adoption, receipt or Weave-cursor authority. -Schemas are in `schemas/hosted/v1/` through `schemas/hosted/v4/`; runnable +Schemas are in `schemas/hosted/v1/` through `schemas/hosted/v7/`; runnable verification is in `tests/test_dm024_service.py`, `tests/test_dm024_runtime.py` and `tests/test_dm061_species.py`. diff --git a/docs/dm025-cli-mcp.md b/docs/dm025-cli-mcp.md index 682d317..932d072 100644 --- a/docs/dm025-cli-mcp.md +++ b/docs/dm025-cli-mcp.md @@ -24,6 +24,14 @@ after the ordinary 30-second freshness window only if the daemon already has its exact journal row and the capability remains active. A never-seen stale request is rejected. +After a DM-079 incarnation succession, an already completed retry can carry +the exact authenticated response of the retired server. Client config V2 keeps +the current expected origin plus a sorted, bounded list of same-body, +same-embodiment, same-principal historical origins and their retirement times. +Only a request issued no later than that retirement may accept the named +historical response; new work still requires the current server. Config V1 +remains the single-incarnation profile. + The capability method allowlist is bounded at 128 entries. The current fixed service surface has 83 methods after DM-082, so one least-privilege operator capability may name the complete surface without truncation; exact-bound and diff --git a/docs/dm026-conformance.md b/docs/dm026-conformance.md index 58a89d3..1613cc4 100644 --- a/docs/dm026-conformance.md +++ b/docs/dm026-conformance.md @@ -1,14 +1,14 @@ # DM-026 local conformance Status: implemented for the released local narrow waist through DM-082, -DM-079, DM-033 and DM-042. This is +DM-079, DM-078, DM-033 and DM-042. This is release evidence for `daimon-matrix`; it is not a remote transport, deployment, Cluster lifecycle, external-effect, or rebirth certification. ## Closed evidence registry `conformance/registry-v1.json` is the canonical -`dm.conformance.registry/v1`. Its 97 scenario identifiers are closed in both +`dm.conformance.registry/v1`. Its 102 scenario identifiers are closed in both directions: a missing scenario, an unknown scenario, duplicate identifier, unknown field, unregistered evidence reference, or non-required release scenario fails validation. Each scenario names its owner cards, @@ -62,7 +62,12 @@ The registry deliberately describes the implementation that exists: loopback delivery, foreign signed receipt authority, stale direct/hub refusal and restart persistence, while its generated map names executable evidence for each published scenario; and -- live remote Cluster effects and rebirth remain later integration obligations. +- DM-078 recovery-rebirth evidence uses split synthetic recovery and target + custody, drops every old root/body from active authority, restores canonical + history without copying predecessor custody, and starts one fresh target-only + runtime; and +- any live authority/custody transition remains an explicit human-authorized + operation, with disposable Cluster qualification tracked separately. ## Running the installed gate diff --git a/docs/dm036-collective-memory.md b/docs/dm036-collective-memory.md new file mode 100644 index 0000000..4c04750 --- /dev/null +++ b/docs/dm036-collective-memory.md @@ -0,0 +1,180 @@ +# DM-036 collective-memory exchange + +Status: normative for `dm.collective-* /v1`. + +“Matrix” means the `daimon-matrix` component. Matrix.org is not used. The +collective-memory dependency is the exchange boundary at commit +`3e3b39416917f8e3c2bc5ca69362b20296205938`, whose closed schema SHA-256 is +`2aad43d1b309ee95108c855fc8dc682a854e5fdf3a1e799ecfca96d3ebf7c5d9`. +Any other commit, schema, producer, release, policy, scope or target fails +closed. + +## Two directions, no shared authority + +DM-036 is two adapters, not one bidirectional credential: + +| Boundary | Adapter | Owns | Cannot do | +| --- | --- | --- | --- | +| inbound | `dm:adapter:v0:Sh-2fDC4rpFOZz_ddjWqLptoX2SgUUzJPKhe6XQOtj8` | read-only transport identity, immutable source log, quarantine receipts | publish, review, consent, promote, write `/me` | +| outbound | `dm:adapter:v0:Jsug9D2N641xJwE5Q_oLaHDy0wxT5knRJfxzV2ZEOXc` | reviewed request queue, exact provider receipts, effect reconciliation | read exports, trust sources, write `/me`, mint identity | + +Their credentials, transports, capabilities, SQLite files, lock files, +idempotency keys, events and receipts are distinct. Construction rejects the +same path or inode for both stores. Neither receives a host path, URL, command, +SQL statement, database handle, prompt, key or credential through its public +contract. Both DM-018 manifests deny Matrix, identity, presence, membership and +`/me` signing authority. + +Matrix remains authoritative for ledger history, `/me`, classification, +consent, human review and accepted adapter receipts. collective-memory remains +authoritative for its corpus, export generations, publication transaction, +index and Atlas. Each side retains a content-bound receipt for the other; a +receipt never transfers authority. + +## Inbound immutable source intake + +The injected source transport implements only `manifest`, `page` and `object`. +Credentials and endpoints stay inside that transport. Matrix validates before +any local effect: + +1. the exact producer instance/release, policy and public scope; +2. closed canonical manifest identity and state digest; +3. sorted unique artifact/logical IDs, authors and source references; +4. license, explicit scope, classification, media type, predecessors and + tombstones; +5. bounded page/cursor sequence and byte/count totals; and +6. every inert UTF-8 object's declared SHA-256 and length. + +Preview performs remote reads and validation but writes no file, cursor, +receipt, error, ledger event or projection. Apply re-fetches the exact immutable +generation. It prepares all descriptors and content in an owner-only inbound +source-log transaction while the prior generation remains active. A +deterministic `source.imported` event then records one receiver-authored +`quarantined:initial-pull` decision and explicitly commits to +`personal_memory_assertions = 0`. Only after that event exists does the source +log advance its active generation. + +Per-artifact provenance and bytes remain in the append-only source log; the +small canonical ledger event binds its source-log hash, generation, manifest, +counts and decision. This keeps a 4096-artifact import below the Weave event +bound without treating a remote database or index row as canonical evidence. +Tombstones advance only the imported logical head. Historical manifests, +objects, events and decisions remain available. + +### Offline catch-up + +The pinned upstream adds `ExportBoundary.manifest(generation_id)`. Matrix reads +the current manifest, follows `predecessor_generation` backwards to its locally +accepted high-water, rejects cycles/gaps/forks, validates the entire chain and +applies it oldest-first. It never skips an unobserved predecessor or guesses a +winner. A normal single-generation preview still rejects a gap. + +### Inbound recovery + +| Crash/failure | Observable result | +| --- | --- | +| fetch, timeout, invalid page/object or policy mismatch | prior generation remains active; apply records a redacted stable error code | +| before source-log prepare commits | no new source state or ledger event | +| after prepare, before ledger event | recovery authors the deterministic event once | +| after ledger event, before active switch | recovery finds the same event and activates once | +| invalid successor, implicit removal or fork | generation remains inactive and records a closed error | +| receipt/event/source-log drift | effect-truth discrepancy; no cached success | + +`rebuild()` performs no remote read. It validates every stored manifest, +descriptor, inert content byte, predecessor and chained source-log hash, then +uses the authoritative Matrix `source.imported` event prefix to reconstruct +only the derived active/superseded markers and missing crash-window receipt +bindings. A fork, disconnected generation, accepted-after-missing event, +content mismatch or contradictory non-null receipt fails closed. + +## Outbound reviewed publication + +Outbound accepts only a caller-rendered derived Markdown title/body plus exact +current Matrix source event IDs. `collective_checkpoint` binds those IDs and +hashes and the exact being/manifest. Matrix recomputes it before preview, +submit and execute; superseded or missing source events make the request stale. + +Matrix locally reproduces the upstream final Markdown bytes, including closed +frontmatter, and scans title, metadata and body for private-key, bearer, +provider-token, credential-assignment and credential-URL patterns before any +provider plan. The upstream preview must return byte-identical canonical bytes, +hash and length. + +Consent and review are separate Ed25519 evidence envelopes over the exact +preview hash, final content hash, subject, requester, action, logical target, +classification, policy and source checkpoint. Consent must be signed by the +subject. Review must use a current, non-revoked `human:*` principal distinct +from the subject and requester. Inbound trust, a model, Librarian or publisher +receipt cannot satisfy either role. + +The outbound journal stores the full bounded request privately. The canonical +`collective.publication.requested` event stores a content-bound summary rather +than raw body bytes and depends on all Matrix source events and the exact prior +acceptance. Under its own process lock, the adapter asks upstream for a +deterministic plan, applies the supported transaction and validates the complete +content-addressed receipt. It then requires fresh upstream +`reconcile(effect=verified)` before authoring +`collective.publication.receipted`. + +Initial publish, successor and reviewed tombstone are monotonic. A successor +names the current upstream receipt and supersedes the corresponding Matrix +acceptance. Identical retries require fresh effect truth and return the same +event/receipt. Changed bytes under an idempotency key, untracked targets, stale +predecessors and concurrent target writers fail closed. + +### Outbound recovery + +| Failure window | Required retry result | +| --- | --- | +| before request journal prepare | no queue event or external effect | +| after prepare, before request event | recovery authors the deterministic request event | +| provider rejects plan/final bytes | closed rejection; no Matrix acceptance | +| response lost after provider commit | exact apply replay returns the one receipt | +| after provider receipt, before Matrix acceptance | fresh reconcile then one acceptance event | +| after acceptance, before journal completion | journal binds the existing event exactly once | +| target/index/Atlas drift on replay | effect-truth discrepancy; cached success refused | + +## Contracts, vectors and real-I/O gate + +Matrix contracts are in +`schemas/collective-memory/v1/contracts.schema.json`; upstream is pinned by +commit and schema hash rather than copied as executable source. Deterministic +vectors are in `vectors/collective-memory/v1/` and regenerate with: + +```bash +python tools/generate_dm036_vectors.py +python tools/generate_dm036_vectors.py --check +``` + +`tests/test_dm036_collective_memory.py` uses the real pinned upstream +`ExportBoundary` and `PublicationBoundary` in isolated roots. It covers initial +import/retry, 257-item pagination, multi-generation offline catch-up, +successor/tombstone, corrupt/mixed/unavailable refresh, both inbound crash +windows, source-log rebuild, exact review, consent/review revocation and expiry, +secrets, response loss, source/target drift, concurrency and both outbound +acceptance windows. Its real projection lane performs: + +```text +export → Matrix quarantine → reviewed publish → real FTS index + Atlas + → reviewed tombstone → real reindex +``` + +That lane checks both SQLite databases with `PRAGMA integrity_check`, verifies +the published and unrelated documents in index/Atlas, preserves unrelated +corpus content, and proves there is no shared DB, WAL or SHM file. + +## Operation and rollback + +DM-036 has no live deployment authorization. Configure only temporary isolated +roots until a later consented canary card permits a corpus. Source and publisher +database parents must be separate owner-only directories. Start by calling +inbound `recover()` and outbound `recover()`, then reconcile every cached active +receipt before serving it. + +Before the first accepted effect, rollback may disable the adapters and remove +unused local stores. After an import or publication exists, disable the relevant +capability independently and preserve its ledger/source log, high-water and +receipts. Withdraw an outbound artifact only with a reviewed tombstone. Never +delete external data by inference, copy SQLite/WAL files, lower a high-water, +turn collective text into autobiographical memory or use inbound revocation to +activate outbound authority. diff --git a/docs/dm055-native-peer-cutover.md b/docs/dm055-native-peer-cutover.md index 6e342c2..7b1710a 100644 --- a/docs/dm055-native-peer-cutover.md +++ b/docs/dm055-native-peer-cutover.md @@ -23,7 +23,8 @@ surface and remain unchanged during the canary. - root/current-manifest-bound direct encryption and signature verification; - exact active embodiment/incarnation/principal and recipient-key checks; -- a durable randomized-ciphertext outbox keyed per recipient envelope; +- a durable randomized-ciphertext outbox keyed per recipient envelope whose + semantic V2 call plan reuses the first bounded expiry across later retries; - a durable inbound processing lease and byte-exact committed response replay; - client correlation/reply checks and a bounded HTTP(S) round trip; - dispatch only to the existing DM-054 scope and DM-023 sync handlers; and @@ -36,6 +37,13 @@ password descriptor; only the exact validated signing and encryption seeds are retained by the purpose-bound custody object. When absent, no peer listener or client context exists. V1 and V2 retain their exact prior behavior. +DM-083 closes the remaining operator seam with bundle V7. It adds a sorted, +complete target map for every active remote embodiment and the authenticated +`we.sync.peer-pull` composition. Callers provide only the target embodiment and +the frozen DM-023 request ID; they cannot substitute an endpoint at runtime. +Configured peers are visible as available in `/we`, while manifest membership +continues to come only from root authority. + The same `daimon-matrixd` process starts `POST /dm-peer/v1` only after the full bundle, root authority, current origin, encrypted custody and stores validate. The endpoint accepts one bounded canonical ciphertext and emits one bounded @@ -57,7 +65,8 @@ SQLite ledgers. They prove: - V3 load, exact key-slot binding, in-process daemon HTTP handler and backward disabled compatibility; - response loss after remote completion followed by byte-identical request and - response replay with one handler effect; + response replay with one handler effect, including a clock advance, process + reconstruction, legacy V1 outbox-plan recovery and fail-closed expiry; - concurrent duplicate serialization, expired-lease takeover, stale claimant rejection and corrupted exchange/outbox digest rejection; - one-shot password custody, absent/malformed/colliding/wrong-key V3 profiles, @@ -77,8 +86,9 @@ being/control/manifest hashes, embodiment/incarnation/credential IDs and AnyVPN endpoint. Never copy or print keystore values. 1. Back up and integrity-check each owner-local Matrix state root. -2. Install the exact reviewed wheel and a V3 bundle with a distinct peer - encryption slot, exchange DB, outbox DB and explicit AnyVPN listen address. +2. Install the exact reviewed wheel and a V7 bundle with a distinct peer + encryption slot, exchange DB, outbox DB, explicit AnyVPN listen address and + exact remote target. 3. Start both `daimon-matrixd` processes and verify local `/me` before network traffic. 4. From A, send one encrypted `/me` request to B and validate B's exact origin. diff --git a/docs/dm078-fresh-host-rebirth.md b/docs/dm078-fresh-host-rebirth.md new file mode 100644 index 0000000..2059a1f --- /dev/null +++ b/docs/dm078-fresh-host-rebirth.md @@ -0,0 +1,206 @@ +# DM-078 additional-embodiment rebirth + +Status: implemented V0 public-request/offline-root contracts for both an +additional embodiment and recovery-quorum rebirth. Installed distinct-host, +true relocation and disposable restore journeys remain operational gates. + +Rebirth in this contract means creating a new embodiment of the same being. In +the ordinary path it adds that body beside the existing active embodiments. In +the recovery path a recovery quorum revokes every old active embodiment, +rotates root authority and authorizes exactly one fresh replacement body. Both +paths begin with a fresh embodiment ID, first incarnation, empty local writable +stores and independent signing, encryption, transport and capability custody. +Neither copies an old body's private keys, local decisions or writable +database, relocates an existing embodiment, or creates another being. The new +body may ingest the same being's accepted signed history. + +## Split-custody ceremony + +The target and offline-root halves exchange public canonical artifacts: + +1. The fresh target generates independent Ed25519 embodiment and transport + keys plus an X25519 encryption key. It creates + `dm.operator.embodiment-request/v1`, signed independently by the embodiment + and transport keys. The request contains no private key. +2. The offline holder verifies the exact being, control and manifest heads, + expiry, nonce, new identifiers, partial embodiment acceptance, first + incarnation and both proofs of possession. It never receives target + custody. +3. A current root threshold completes the embodiment credential and signs one + `dm.we.embodiment-enrollment/v1` successor. The transition binds the request, + body, embodiment, incarnation, native peer principal, credential, + authorization and exact previous/successor manifests. +4. The target validates the activation against its original request before it + installs anything. Existing peers validate the same root transition and + advance their public bundles without gaining target secrets. + +No process or artifact in this flow requires root seeds and embodiment private +keys together. Root custody cannot impersonate the embodiment acceptance or +transport proof; target custody cannot reach the root threshold. + +The installed-module interface keeps that boundary executable even before a +dedicated console alias is published. `prepare` runs on the target and writes +only target custody; `authorize` runs at the offline root and receives only the +public request. Passwords use inherited descriptors and neither command accepts +private key bytes through arguments or environment: + +```bash +python -m daimon_matrix.operator_rebirth prepare \ + --authority /public/current-authority.json \ + --profile /public/fresh-target-profile.json \ + --output /target-owner/rebirth-preparation \ + --password-fd 3 3/runtime.json`: closed V7 bundle with exact peer targets; +- `runtimes/