{
  "commit": "cb756dee",
  "branch": "fix/287-persistent-restore",
  "worktree": ".worktrees/287-shellrestore",
  "summary": [
    "Removed machine-boot, launch-age and launch-stamp eligibility gates from persistent boot-sweep and owner-online restoration; both still share the same per-owner implementation.",
    "Persistent watchers bypass the corpse-age freeze; nonpersistent same-boot and unstamped corpses remain frozen.",
    "Reused live_launch_winner for binding-in-progress exclusion and made its probe birth-safe, preventing recycled PIDs from blocking restoration.",
    "Kept per-instance SHELL_RECORD_HEALED diagnostics and added a writer seam proving the complete owner-qualified healed set, without repeated events for healthy/already-healed records.",
    "Local relink success now reports status=binding (online at bind).",
    "Amended requirement registry, scoped both new rider requirements, updated KH2.6/KH2.7, glossary, manifest/public shell docs and effect-shaped Unreleased changelog."
  ],
  "changed_files": [
    "CHANGELOG.md",
    "CONTEXT.md",
    "traceable-reqs.toml",
    "docs/KNOWN-HAZARDS.md",
    "docs/MANIFEST.md",
    "docs-site/src/shells/overview.md",
    "crates/spt-daemon/src/shellwake.rs",
    "crates/spt-daemon/src/shellhost.rs",
    "crates/spt-store/src/shellinfo.rs",
    "crates/spt/src/cli.rs",
    "crates/spt/tests/shell_relink_force_e2e.rs"
  ],
  "regressions": [
    "Boot restoration includes pre-boot, same-boot and unstamped persistent corpses; excludes offline owners, nonpersistent shells and live binding launches.",
    "Owner-online edge after spent boot sweep restores every same-boot/unstamped sibling, including boot+46s field shape, and does not become a level-triggered retry loop.",
    "Heal enumerates three stranded instances for one owner plus another owner's instance, excludes a healthy instance and emits nothing on the second pass.",
    "Nonpersistent watcher freeze remains; the same corpse becomes watcher-eligible under persistence without a launch stamp or boot oracle.",
    "Launch-winner probe accepts matching birth and rejects live recycled-PID evidence.",
    "Existing forced-relink E2E now asserts the binding result token alongside actual stop/rebind behavior."
  ],
  "validation": "Not run, as explicitly required: no Cargo, tests, builds, formatter, linter, services, restarts or push. Commit hooks bypassed to honor the no-validation constraint.",
  "focused_commands_for_parent": [
    "cargo test -p spt-daemon --lib shellwake::tests::",
    "cargo test -p spt-daemon --lib shellhost::tests::only_a_live_recorded_pid_wins_a_launch_race",
    "cargo build -p mock-adapter --bin mock-shell",
    "cargo test -p spt --test shell_relink_force_e2e",
    "cargo test -p spt --test shell_stale_online_e2e",
    "traceable-reqs check --json"
  ],
  "risks_assumptions": [
    "Uncompiled/unexecuted lane: parent must run focused proof and final formatting/validation after runners free.",
    "Binding exclusion is necessary because removing the age gate otherwise exposes boot-sweep/owner-edge overlap before bind. The existing shared launch-winner probe now honors birth stamps for all its callers.",
    "Persistent restore remains boot/owner-edge triggered, not continuous supervision; a failed launch is retried on the next owner-online event.",
    "Existing missing-birth fail-toward-alive behavior and native timestamp precision remain unchanged.",
    "Historical REQ-HAZARD-SHELL-STALE-ONLINE field evidence is preserved beneath an explicit superseding nonpersistent-only freeze amendment."
  ]
}