{
  "authoritative_r3_model": {
    "all_absent_after_investigation": true,
    "candidate_outer_path_is_identity_input": false,
    "candidate_root": "/home/cube/projects/richard/traning coach/.omo/evidence/nutricoach-v150-combined/task-v15r71b-maintenance-candidate-r3",
    "input_root": "/home/cube/projects/richard/traning coach/.omo/evidence/nutricoach-v150-combined/task-v15r71b-maintenance-inputs-r3",
    "preseal_candidate_argument": "/home/cube/projects/richard/traning coach/.omo/evidence/nutricoach-v150-combined/task-v15r71b-maintenance-candidate-r3",
    "preseal_root": "/home/cube/.hermes/migrations/nutricoach-v1.5.0-combined/live-transaction-preseal-v15-runtime-authority-r71b-maintenance"
  },
  "blocker_count": 0,
  "current_authority": {
    "authority_receipt_path": "/home/cube/projects/richard/traning coach/.omo/evidence/nutricoach-telegram-checkin-stepper/task-10-r71b-authority-verification.json",
    "authority_receipt_schema": "nutricoach-v150-v15-authority-verification-v2",
    "authority_receipt_sha256": "515a6d460f5b1e2ebfb6e55ba03c42b2adb4916b1c595d393a52cbba72afb6f6",
    "authority_receipt_status": "PASS",
    "current_mismatch_count": 0,
    "latest_disposable_candidate_digest": "2a85524e610edef582583bb89e6cde57ccd03fe9a9489887fd6c8319e10843f6",
    "latest_disposable_manifest_sha256": "9c90f51ec632e1dc9b0ac37ef8aab02c68369b0330960157413e74744c0aeb77",
    "source_freeze_path": "/home/cube/projects/richard/traning coach/.omo/evidence/nutricoach-telegram-checkin-stepper/task-10-r71b-final-source-freeze.json",
    "source_freeze_sha256": "4aef39c8375eba7b438c9d98b9754e9f80790414c7ace338831d2239aae23f0a",
    "source_hash_stream_sha256": "7fce813732b2960e1bdb2195c6bead5a6e6f9de3f7ef4267b9179dd93bdf9f91",
    "source_inventory_count": 134
  },
  "disposable_proof": {
    "candidate_digests": [
      "2a85524e610edef582583bb89e6cde57ccd03fe9a9489887fd6c8319e10843f6",
      "2a85524e610edef582583bb89e6cde57ccd03fe9a9489887fd6c8319e10843f6"
    ],
    "candidate_outer_names": [
      "disposable-r3-outer-alpha",
      "disposable-r3-outer-zeta"
    ],
    "candidate_trees_path_hash_equal": true,
    "canonical_verifiers": [
      "PASS",
      "PASS"
    ],
    "disposable_roots_removed": true,
    "failed_candidate_identity_references": 0,
    "manifest_sha256": [
      "9c90f51ec632e1dc9b0ac37ef8aab02c68369b0330960157413e74744c0aeb77",
      "9c90f51ec632e1dc9b0ac37ef8aab02c68369b0330960157413e74744c0aeb77"
    ],
    "outer_path_not_identity": true,
    "same_exact_input_bundle": true
  },
  "expected_digests": {
    "authority_receipt_sha256": "515a6d460f5b1e2ebfb6e55ba03c42b2adb4916b1c595d393a52cbba72afb6f6",
    "authority_sha256_after_preseal": "e4aedd4cb810f13bafe9964e42138d28602d1045795a6565f7b1fe0b4827a205",
    "candidate_digest": "2a85524e610edef582583bb89e6cde57ccd03fe9a9489887fd6c8319e10843f6",
    "candidate_manifest_sha256": "9c90f51ec632e1dc9b0ac37ef8aab02c68369b0330960157413e74744c0aeb77",
    "final_package_digest_after_preseal": "98146e3946b7877b32aa9d950c39ffd7e6dd4027ad29f9a30fcde84ada2bfbd4",
    "hermes_wheel_sha256": "f8a205c29e877b5740b9460c80cb82045c04445bb2c1ce139118497efa5bc2b1",
    "hold_id_after_preseal": "b9abf1e4fa068f442eb32dc2f1392bd7bc31106ebc940f968e6e83cc7d4fc163",
    "hold_sha256_after_preseal": "e22403c4b6318a733c08f17431b450f4319747bb158d514ec88fc6a82fdd4639",
    "package_binding_digest_after_preseal": "d2902c332fde622895fcd460c6715d290c6b319ca57c21a6559589b0c1b95145",
    "profile_wheel_sha256": "e6c1fd77251cf43f8bde1759b9fb170e592e47851708c292297d3040b1d4f84f",
    "qualification_sha256": "2e2c1f362f82444d6143627bbc55c04bc67c244973ffb8597693d0e6c5215d69",
    "successor_overlay_sha256": "8241dde7529e67d9fb947dae4c49ca336419b5db47266061ba35670898b9452b"
  },
  "forbidden_effects": {
    "authoritative_r3_roots_created": 0,
    "git_github": 0,
    "live_actions": 0,
    "network_provider_customer": 0,
    "source_edits": 0
  },
  "guards": {
    "failed_candidate_reference": "the modeled sequence references task-v15r71-candidate-r3 base/v17 inputs and current r71b build roots, never either failed r71b candidate; both disposable candidate identities contained zero failed-candidate path references",
    "foreign_overlay": "reject because the overlay is generated only from current SUCCESSOR_OVERLAY_PATHS and closure requires the exact 97-path/current-hash file digest",
    "foreign_receipt": "receipts directory must contain exactly one regular nonempty authority-verification.json at 515a6d46...",
    "input_root_reuse": "test absent including symlink before mkdir; one uniquely named r3 root contains every seal input",
    "omission_or_tamper": "exact path, byte-size, and SHA-256 equality against prewrite_hash_manifest before chmod and seal",
    "shared_overlay": "install/generation produces a fresh inode; disposable proof confirmed it was not hardlinked to freeze or stale overlay sources",
    "stale_overlay": "reject unless generated overlay SHA-256 is exactly 8241dde7... and differs from d8056206..."
  },
  "preservation": {
    "attempt1": {
      "entries": 418,
      "path_hash_mode_tree_sha256_before_after": "504763f483a6b70ce62707c90e4327e2291bafa2fc29d964dea3bd523f37f38a",
      "unchanged": true
    },
    "authoritative_r3_input_candidate_preseal_action_roots_absent": true,
    "r2": {
      "entries": 420,
      "path_hash_mode_tree_sha256_before_after": "e09742b288af77d9329b877067870afd14489587944cc36caacc4420a15125c6",
      "unchanged": true
    }
  },
  "prewrite_hash_manifest": [
    {
      "bytes": 153571,
      "path": "base-manifest.json",
      "sha256": "fb29206ca7148868681c78bc37c01b68ffd2b14b1b806eaac94c9befa95d5b7f"
    },
    {
      "bytes": 5522,
      "path": "receipts/authority-verification.json",
      "sha256": "515a6d460f5b1e2ebfb6e55ba03c42b2adb4916b1c595d393a52cbba72afb6f6"
    },
    {
      "bytes": 11489,
      "path": "successor-overlay.sha256",
      "sha256": "8241dde7529e67d9fb947dae4c49ca336419b5db47266061ba35670898b9452b"
    },
    {
      "bytes": 585,
      "path": "v17/evidence-files.sha256",
      "sha256": "17e1909289829d035305703cb8a0e1b5313de21ad7a7ecb825cb7093f71d4389"
    },
    {
      "bytes": 2591,
      "path": "v17/exact-current-source-set.final.sha256",
      "sha256": "e163bf25d4d56dea9ce0d495446f4bbf9b1061c8ed0d602c885b68b1bb1c15cb"
    },
    {
      "bytes": 5165,
      "path": "v17/patch-tree.sha256",
      "sha256": "b33dfce51845361000c992adc7ebf9192498afa1bc9e22b447a4353863e4a1be"
    },
    {
      "bytes": 2131,
      "path": "v17/sandbox.diff",
      "sha256": "e2aa170a245054abf92cadc34663f9820f88023d597d72be1becb9978043e9b8"
    },
    {
      "bytes": 8586846,
      "path": "wheels/build-a-hermes.whl",
      "sha256": "f8a205c29e877b5740b9460c80cb82045c04445bb2c1ce139118497efa5bc2b1"
    },
    {
      "bytes": 429645,
      "path": "wheels/build-a-profile.whl",
      "sha256": "e6c1fd77251cf43f8bde1759b9fb170e592e47851708c292297d3040b1d4f84f"
    },
    {
      "bytes": 8586846,
      "path": "wheels/build-b-hermes.whl",
      "sha256": "f8a205c29e877b5740b9460c80cb82045c04445bb2c1ce139118497efa5bc2b1"
    },
    {
      "bytes": 429645,
      "path": "wheels/build-b-profile.whl",
      "sha256": "e6c1fd77251cf43f8bde1759b9fb170e592e47851708c292297d3040b1d4f84f"
    }
  ],
  "root_cause": {
    "current_overlay_sha256": "8241dde7529e67d9fb947dae4c49ca336419b5db47266061ba35670898b9452b",
    "current_preparation_sha256": "b8e62c2761304482c2b4c1a1a409f934f01948d7a65e8c5a6ab6ed6ce9c7c4a1",
    "exact_stale_source": "/home/cube/projects/richard/traning coach/.omo/evidence/nutricoach-v150-combined/task-v15r71b-maintenance-inputs/successor-overlay.sha256",
    "metadata_diff": "The stale and current overlays have the same exact 97-path set and differ in exactly one hash line: scripts/nutricoach_v150_r71b_preparation.py.",
    "overlay_path_count": 97,
    "proof": [
      "attempt1 inputs/successor-overlay.sha256, r2 inputs/successor-overlay.sha256, and task-v15r71b-maintenance-inputs/successor-overlay.sha256 are byte-identical at d8056206...",
      "r2 snapshot/source/scripts/nutricoach_v150_r71b_preparation.py is current at b8e62c27..., but its copied overlay claims stale 06200716...",
      "canonical r2 verifier returned NUTRICOACH_V150_CANDIDATE_FAIL:successor overlay mismatch: scripts/nutricoach_v150_r71b_preparation.py",
      "current freeze134 contains preparation.py at b8e62c27..., all 134 worktree hashes revalidated, and the generated canonical overlay contains that same hash"
    ],
    "r2_receipt_input_root": "/home/cube/projects/richard/traning coach/.omo/evidence/nutricoach-v150-combined/task-v15r71b-maintenance-inputs-r2",
    "r2_receipt_input_root_contents": [
      {
        "path": "authority-verification.json",
        "sha256": "515a6d460f5b1e2ebfb6e55ba03c42b2adb4916b1c595d393a52cbba72afb6f6"
      }
    ],
    "r2_reused_attempt1_receipt_input_root": false,
    "r2_reused_attempt1_shared_overlay": true,
    "stale_overlay_sha256": "d8056206ba93c9611e6eb37a2f8ddcc67bca192528391b9bef6f95f490003fbf",
    "stale_preparation_sha256": "06200716372e3362e4506c7f12f5b4770360b9dcaf0689d14ad04b32a198d486",
    "summary": "Authoritative r2 used a fresh receipt-only input root but reused attempt1's separate stale successor overlay. The sealer copied current worktree source bytes, including the new YAML-safe preparation.py, while copying the old overlay hash line. Canonical verification therefore fails on that one source/overlay mismatch."
  },
  "safe_authoritative_sequence": [
    "set -euo pipefail; WT='/home/cube/projects/richard/.worktrees/nutricoach-v150-combined'; ROOT='/home/cube/projects/richard/traning coach/.omo/evidence/nutricoach-v150-combined'; PLAN='/home/cube/projects/richard/traning coach/.omo/evidence/nutricoach-telegram-checkin-stepper'; INPUT=\"$ROOT/task-v15r71b-maintenance-inputs-r3\"; CANDIDATE=\"$ROOT/task-v15r71b-maintenance-candidate-r3\"; PRESEAL='/home/cube/.hermes/migrations/nutricoach-v1.5.0-combined/live-transaction-preseal-v15-runtime-authority-r71b-maintenance' ",
    "test ! -e \"$INPUT\" && test ! -L \"$INPUT\" && test ! -e \"$CANDIDATE\" && test ! -L \"$CANDIDATE\" && test ! -e \"$PRESEAL\" && test ! -L \"$PRESEAL\"; mkdir -m 0700 \"$INPUT\" \"$INPUT/v17\" \"$INPUT/receipts\" \"$INPUT/wheels\"",
    "install -m 0600 \"$ROOT/task-v15r71-candidate-r3/inputs/base-manifest.json\" \"$INPUT/base-manifest.json\"; install -m 0600 \"$ROOT/task-v15r71-candidate-r3/inputs/v17-evidence-files.sha256\" \"$INPUT/v17/evidence-files.sha256\"; install -m 0600 \"$ROOT/task-v15r71-candidate-r3/inputs/v17-exact-source-set.sha256\" \"$INPUT/v17/exact-current-source-set.final.sha256\"; install -m 0600 \"$ROOT/task-v15r71-candidate-r3/inputs/v17-patch-tree.sha256\" \"$INPUT/v17/patch-tree.sha256\"; install -m 0600 \"$ROOT/task-v15r71-candidate-r3/inputs/v17-sandbox.diff\" \"$INPUT/v17/sandbox.diff\"; install -m 0600 \"$PLAN/task-10-r71b-authority-verification.json\" \"$INPUT/receipts/authority-verification.json\"",
    "install -m 0600 \"$ROOT/task-v15r71b-maintenance-build-a-hermes-r2/hermes_agent-0.17.0-py3-none-any.whl\" \"$INPUT/wheels/build-a-hermes.whl\"; install -m 0600 \"$ROOT/task-v15r71b-maintenance-build-a-profile-r2/physique_checkin_cli-0.1.0-py3-none-any.whl\" \"$INPUT/wheels/build-a-profile.whl\"; install -m 0600 \"$ROOT/task-v15r71b-maintenance-build-b-hermes-r2/hermes_agent-0.17.0-py3-none-any.whl\" \"$INPUT/wheels/build-b-hermes.whl\"; install -m 0600 \"$ROOT/task-v15r71b-maintenance-build-b-profile-r2/physique_checkin_cli-0.1.0-py3-none-any.whl\" \"$INPUT/wheels/build-b-profile.whl\"",
    "cd \"$WT\"; PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B - \"$WT\" \"$INPUT/successor-overlay.sha256\" <<'PYOVERLAY'\nimport hashlib,pathlib,sys\nsys.path.insert(0,sys.argv[1])\nfrom scripts.verify_nutricoach_v150_candidate_inputs import SUCCESSOR_OVERLAY_PATHS\nw=pathlib.Path(sys.argv[1]); pathlib.Path(sys.argv[2]).write_text(''.join(f'{hashlib.sha256((w/p).read_bytes()).hexdigest()}  {p}\\n' for p in sorted(SUCCESSOR_OVERLAY_PATHS)),encoding='utf-8')\nPYOVERLAY\nchmod 0600 \"$INPUT/successor-overlay.sha256\"",
    "PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B - \"$WT\" \"$PLAN/task-10-r71b-final-source-freeze.json\" \"$INPUT\" \"$PLAN/task-10-r71b-candidate-r3-overlay-recovery.json\" <<'PYCLOSURE'\nimport hashlib,json,pathlib,stat,sys\nw,freeze,root,recovery=map(pathlib.Path,sys.argv[1:]); f=json.loads(freeze.read_text()); assert len(f['inventory'])==134 and all(hashlib.sha256((w/x['path']).read_bytes()).hexdigest()==x['sha256'] for x in f['inventory']); expected={x['path']:(x['bytes'],x['sha256']) for x in json.loads(recovery.read_text())['prewrite_hash_manifest']}; files=[p for p in root.rglob('*') if p.is_file()]; assert all(not p.is_symlink() and stat.S_ISREG(p.lstat().st_mode) and p.stat().st_nlink==1 and p.stat().st_size>0 for p in files); actual={p.relative_to(root).as_posix():(p.stat().st_size,hashlib.sha256(p.read_bytes()).hexdigest()) for p in files}; assert actual==expected; assert len(list((root/'receipts').iterdir()))==1; assert actual['successor-overlay.sha256'][1]=='8241dde7529e67d9fb947dae4c49ca336419b5db47266061ba35670898b9452b'\nPYCLOSURE\nchmod -R a-w \"$INPUT\"",
    "PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=\"$WT/dualcoach/profile\" .venv/bin/python -B scripts/seal_nutricoach_v150_candidate.py --base \"$INPUT/base-manifest.json\" --v17-evidence \"$INPUT/v17\" --successor \"$CANDIDATE\" --build-1-hermes \"$INPUT/wheels/build-a-hermes.whl\" --build-1-profile \"$INPUT/wheels/build-a-profile.whl\" --build-2-hermes \"$INPUT/wheels/build-b-hermes.whl\" --build-2-profile \"$INPUT/wheels/build-b-profile.whl\" --receipts-root \"$INPUT/receipts\" --successor-overlay \"$INPUT/successor-overlay.sha256\" --r70-error-evidence \"$PLAN/task-10-cron-no-send-recovery-analysis.json\" --observer-evidence \"$PLAN/task-10-debug-observer-r70.json\" --fixed-collector-evidence \"$PLAN/task-10-r70-health-recovery.json\" | grep -Fx '2a85524e610edef582583bb89e6cde57ccd03fe9a9489887fd6c8319e10843f6' ",
    "PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=\"$WT/dualcoach/profile\" .venv/bin/python -B scripts/verify_nutricoach_v150_candidate.py --base \"$INPUT/base-manifest.json\" --successor \"$CANDIDATE\" --manifest \"$CANDIDATE/manifest.json\" | grep -Fx 'NUTRICOACH_V150_CANDIDATE_PASS'; test \"$(sha256sum \"$CANDIDATE/manifest.json\" | cut -d' ' -f1)\" = '9c90f51ec632e1dc9b0ac37ef8aab02c68369b0330960157413e74744c0aeb77' ",
    "PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=\"$WT/dualcoach/profile\" .venv/bin/python -B scripts/prepare_nutricoach_v150_v15_preseal.py \"$CANDIDATE\" \"$CANDIDATE/artifacts/build-1/hermes_agent-0.17.0-py3-none-any.whl\" \"$CANDIDATE/artifacts/build-1/physique_checkin_cli-0.1.0-py3-none-any.whl\" --maintenance-kst-day 2026-09-02 --maintenance-not-before 2026-09-02T02:00:00+09:00 --maintenance-expires-at 2026-09-02T02:30:00+09:00",
    "PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=\"$WT/dualcoach/profile\" .venv/bin/python -B scripts/verify_nutricoach_v150_preseal_v15.py"
  ],
  "schema": "nutricoach-telegram-checkin-stepper-task-10-r71b-candidate-r3-overlay-recovery-v1",
  "scope": "read-only immutable-attempt recovery plus disposable candidate sealing; no authoritative r3 input, candidate, preseal, action, live, Git, network, provider, or customer root was created",
  "task_id": "st_01a05d0c",
  "verdict": "RECOVERABLE"
}
