﻿2026-06-23T09:38:00.3057617Z Current runner version: '2.335.1'
2026-06-23T09:38:00.3062883Z Runner name: 'kitsubito'
2026-06-23T09:38:00.3063607Z Runner group name: 'Default'
2026-06-23T09:38:00.3064398Z Machine name: 'KITSUBITO'
2026-06-23T09:38:00.3066832Z ##[group]GITHUB_TOKEN Permissions
2026-06-23T09:38:00.3068874Z Contents: read
2026-06-23T09:38:00.3069494Z Metadata: read
2026-06-23T09:38:00.3069960Z Packages: read
2026-06-23T09:38:00.3070579Z ##[endgroup]
2026-06-23T09:38:00.3072304Z Secret source: Actions
2026-06-23T09:38:00.3073042Z Prepare workflow directory
2026-06-23T09:38:00.3483592Z Prepare all required actions
2026-06-23T09:38:00.3513472Z Getting action download info
2026-06-23T09:38:00.6781701Z Download action repository 'actions/checkout@v5' (SHA:93cb6efe18208431cddfb8368fd83d5badbf9bfd)
2026-06-23T09:38:01.2014884Z Complete job name: traceability
2026-06-23T09:38:01.2802902Z ##[group]Run actions/checkout@v5
2026-06-23T09:38:01.2803650Z with:
2026-06-23T09:38:01.2804047Z   repository: SaberMage/spt-core
2026-06-23T09:38:01.2807262Z   token: ***
2026-06-23T09:38:01.2807635Z   ssh-strict: true
2026-06-23T09:38:01.2808022Z   ssh-user: git
2026-06-23T09:38:01.2808451Z   persist-credentials: true
2026-06-23T09:38:01.2808861Z   clean: true
2026-06-23T09:38:01.2809342Z   sparse-checkout-cone-mode: true
2026-06-23T09:38:01.2809798Z   fetch-depth: 1
2026-06-23T09:38:01.2810171Z   fetch-tags: false
2026-06-23T09:38:01.2810544Z   show-progress: true
2026-06-23T09:38:01.2810919Z   lfs: false
2026-06-23T09:38:01.2811281Z   submodules: false
2026-06-23T09:38:01.2811674Z   set-safe-directory: true
2026-06-23T09:38:01.2812275Z ##[endgroup]
2026-06-23T09:38:01.3642105Z Syncing repository: SaberMage/spt-core
2026-06-23T09:38:01.3643621Z ##[group]Getting Git version info
2026-06-23T09:38:01.3644303Z Working directory is '/home/reavus/actions-runner/_work/spt-core/spt-core'
2026-06-23T09:38:01.3645217Z [command]/usr/bin/git version
2026-06-23T09:38:01.3645669Z git version 2.43.0
2026-06-23T09:38:01.3647075Z ##[endgroup]
2026-06-23T09:38:01.3650642Z Temporarily overriding HOME='/home/reavus/actions-runner/_work/_temp/edbbb5cd-a5fd-491d-a043-c2c5a6a6940f' before making global git config changes
2026-06-23T09:38:01.3651760Z Adding repository directory to the temporary git global config as a safe directory
2026-06-23T09:38:01.3652708Z [command]/usr/bin/git config --global --add safe.directory /home/reavus/actions-runner/_work/spt-core/spt-core
2026-06-23T09:38:01.3681389Z [command]/usr/bin/git config --local --get remote.origin.url
2026-06-23T09:38:01.3702618Z https://github.com/SaberMage/spt-core
2026-06-23T09:38:01.3715202Z ##[group]Removing previously created refs, to avoid conflicts
2026-06-23T09:38:01.3718814Z [command]/usr/bin/git rev-parse --symbolic-full-name --verify --quiet HEAD
2026-06-23T09:38:01.3740716Z refs/heads/main
2026-06-23T09:38:01.3747682Z [command]/usr/bin/git checkout --detach
2026-06-23T09:38:01.3805838Z HEAD is now at 6ba875eb1 release: v0.14.0 — bump 0.13.2->0.14.0 + changelog + Cargo.lock
2026-06-23T09:38:01.3846100Z [command]/usr/bin/git branch --delete --force main
2026-06-23T09:38:01.3879554Z Deleted branch main (was 6ba875eb1).
2026-06-23T09:38:01.3924347Z ##[endgroup]
2026-06-23T09:38:01.3927058Z [command]/usr/bin/git submodule status
2026-06-23T09:38:01.4120472Z ##[group]Cleaning the repository
2026-06-23T09:38:01.4123058Z [command]/usr/bin/git clean -ffdx
2026-06-23T09:38:02.1874561Z Removing target/
2026-06-23T09:38:02.1884786Z [command]/usr/bin/git reset --hard HEAD
2026-06-23T09:38:02.1942449Z HEAD is now at 6ba875eb1 release: v0.14.0 — bump 0.13.2->0.14.0 + changelog + Cargo.lock
2026-06-23T09:38:02.1948310Z ##[endgroup]
2026-06-23T09:38:02.1949989Z ##[group]Disabling automatic garbage collection
2026-06-23T09:38:02.1954003Z [command]/usr/bin/git config --local gc.auto 0
2026-06-23T09:38:02.1984428Z ##[endgroup]
2026-06-23T09:38:02.1985533Z ##[group]Setting up auth
2026-06-23T09:38:02.1989545Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-06-23T09:38:02.2018296Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-06-23T09:38:02.2210074Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-06-23T09:38:02.2235438Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-06-23T09:38:02.2425759Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-06-23T09:38:02.2451276Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-06-23T09:38:02.2646458Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2026-06-23T09:38:02.2674739Z ##[endgroup]
2026-06-23T09:38:02.2675701Z ##[group]Fetching the repository
2026-06-23T09:38:02.2681860Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +6ba875eb189bff289f336735cbf8138996cf6d7f:refs/remotes/origin/main
2026-06-23T09:38:02.7206694Z ##[endgroup]
2026-06-23T09:38:02.7207674Z ##[group]Determining the checkout info
2026-06-23T09:38:02.7208639Z ##[endgroup]
2026-06-23T09:38:02.7212456Z [command]/usr/bin/git sparse-checkout disable
2026-06-23T09:38:02.7254968Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig
2026-06-23T09:38:02.7280041Z ##[group]Checking out the ref
2026-06-23T09:38:02.7283363Z [command]/usr/bin/git checkout --progress --force -B main refs/remotes/origin/main
2026-06-23T09:38:02.7338101Z Switched to a new branch 'main'
2026-06-23T09:38:02.7338649Z branch 'main' set up to track 'origin/main'.
2026-06-23T09:38:02.7343317Z ##[endgroup]
2026-06-23T09:38:02.7380069Z [command]/usr/bin/git log -1 --format=%H
2026-06-23T09:38:02.7403425Z 6ba875eb189bff289f336735cbf8138996cf6d7f
2026-06-23T09:38:02.7591095Z ##[group]Run WANT=0.1.2
2026-06-23T09:38:02.7591443Z [36;1mWANT=0.1.2[0m
2026-06-23T09:38:02.7591710Z [36;1mBIN="$HOME/.local/bin/traceable-reqs"[0m
2026-06-23T09:38:02.7592111Z [36;1mif [ -x "$BIN" ] && "$BIN" --version | grep -q " $WANT\$"; then[0m
2026-06-23T09:38:02.7592450Z [36;1m  ln -sf "$BIN" ./traceable-reqs[0m
2026-06-23T09:38:02.7592726Z [36;1melse[0m
2026-06-23T09:38:02.7593022Z [36;1m  # Build OUTSIDE the checkout: a clone inside it gets adopted by[0m
2026-06-23T09:38:02.7593411Z [36;1m  # the spt-core cargo workspace and refuses to build.[0m
2026-06-23T09:38:02.7593721Z [36;1m  SRC="$RUNNER_TEMP/tr-src"[0m
2026-06-23T09:38:02.7593983Z [36;1m  rm -rf "$SRC"[0m
2026-06-23T09:38:02.7594246Z [36;1m  git clone --depth 1 --branch "v$WANT" \[0m
2026-06-23T09:38:02.7594790Z [36;1m    "https://x-access-token:${GH_TOKEN}@github.com/BigscreenVR/traceable-reqs" "$SRC"[0m
2026-06-23T09:38:02.7595329Z [36;1m  cargo build --release --manifest-path "$SRC/rust/Cargo.toml"[0m
2026-06-23T09:38:02.7595709Z [36;1m  mkdir -p "$HOME/.local/bin"[0m
2026-06-23T09:38:02.7596021Z [36;1m  cp "$SRC/rust/target/release/traceable-reqs" "$BIN"[0m
2026-06-23T09:38:02.7596346Z [36;1m  ln -sf "$BIN" ./traceable-reqs[0m
2026-06-23T09:38:02.7596613Z [36;1mfi[0m
2026-06-23T09:38:02.7596831Z [36;1m./traceable-reqs --version[0m
2026-06-23T09:38:02.7612135Z shell: /usr/bin/bash -e {0}
2026-06-23T09:38:02.7612406Z env:
2026-06-23T09:38:02.7613026Z   GH_TOKEN: ***
2026-06-23T09:38:02.7613294Z ##[endgroup]
2026-06-23T09:38:02.7695694Z traceable-reqs 0.1.2
2026-06-23T09:38:02.7726021Z ##[group]Run ./traceable-reqs check --json
2026-06-23T09:38:02.7726383Z [36;1m./traceable-reqs check --json[0m
2026-06-23T09:38:02.7738790Z shell: /usr/bin/bash -e {0}
2026-06-23T09:38:02.7739143Z ##[endgroup]
2026-06-23T09:38:02.8376789Z {
2026-06-23T09:38:02.8377352Z   "schemaVersion": 1,
2026-06-23T09:38:02.8378034Z   "summary": {
2026-06-23T09:38:02.8378436Z     "requirementCount": 293,
2026-06-23T09:38:02.8379479Z     "completeCount": 293,
2026-06-23T09:38:02.8379916Z     "incompleteCount": 0,
2026-06-23T09:38:02.8380339Z     "findingCount": 0
2026-06-23T09:38:02.8380716Z   },
2026-06-23T09:38:02.8381074Z   "requirements": [
2026-06-23T09:38:02.8381459Z     {
2026-06-23T09:38:02.8381889Z       "id": "REQ-ADAPTER-GH-TRANSPORT",
2026-06-23T09:38:02.8385086Z       "title": "The `gh_release` avenue (and `spt adapter add --release`) gain a fetch `transport`: `https` (current reqwest direct, public), `gh` (shell the pre-authorized `gh` CLI — the private-repo path; `gh` honors OAuth and `GH_TOKEN`, so spt custodies no token), or `auto` (default: prefer `gh` when installed+authed, else HTTPS). `--gh`/`--https` force it on `add`. Additive over the existing fetch path; verify->extract->register downstream is unchanged. (v0.13.2)",
2026-06-23T09:38:02.8387543Z       "requiredStages": [
2026-06-23T09:38:02.8388146Z         "doc",
2026-06-23T09:38:02.8388604Z         "impl",
2026-06-23T09:38:02.8389228Z         "unit"
2026-06-23T09:38:02.8389700Z       ],
2026-06-23T09:38:02.8390168Z       "stages": {
2026-06-23T09:38:02.8390615Z         "doc": {
2026-06-23T09:38:02.8391220Z           "complete": true,
2026-06-23T09:38:02.8413464Z           "evidence": [
2026-06-23T09:38:02.8413880Z             {
2026-06-23T09:38:02.8414259Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.8414719Z               "line": 97
2026-06-23T09:38:02.8415124Z             },
2026-06-23T09:38:02.8415497Z             {
2026-06-23T09:38:02.8415902Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:02.8416407Z               "line": 316
2026-06-23T09:38:02.8416814Z             }
2026-06-23T09:38:02.8417175Z           ]
2026-06-23T09:38:02.8417532Z         },
2026-06-23T09:38:02.8417890Z         "impl": {
2026-06-23T09:38:02.8418271Z           "complete": true,
2026-06-23T09:38:02.8418701Z           "evidence": [
2026-06-23T09:38:02.8419219Z             {
2026-06-23T09:38:02.8419689Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.8420236Z               "line": 506
2026-06-23T09:38:02.8420638Z             },
2026-06-23T09:38:02.8420996Z             {
2026-06-23T09:38:02.8421428Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.8421950Z               "line": 533
2026-06-23T09:38:02.8422356Z             },
2026-06-23T09:38:02.8422723Z             {
2026-06-23T09:38:02.8423127Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8423628Z               "line": 2905
2026-06-23T09:38:02.8424043Z             },
2026-06-23T09:38:02.8424411Z             {
2026-06-23T09:38:02.8424795Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8425289Z               "line": 2927
2026-06-23T09:38:02.8425743Z             },
2026-06-23T09:38:02.8426143Z             {
2026-06-23T09:38:02.8426586Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8427055Z               "line": 2943
2026-06-23T09:38:02.8427422Z             },
2026-06-23T09:38:02.8427749Z             {
2026-06-23T09:38:02.8428097Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8428540Z               "line": 2955
2026-06-23T09:38:02.8428897Z             },
2026-06-23T09:38:02.8429309Z             {
2026-06-23T09:38:02.8429666Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8430106Z               "line": 2984
2026-06-23T09:38:02.8430462Z             },
2026-06-23T09:38:02.8430787Z             {
2026-06-23T09:38:02.8431130Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8431560Z               "line": 3218
2026-06-23T09:38:02.8432261Z             },
2026-06-23T09:38:02.8432609Z             {
2026-06-23T09:38:02.8432968Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8433411Z               "line": 6097
2026-06-23T09:38:02.8433779Z             },
2026-06-23T09:38:02.8434103Z             {
2026-06-23T09:38:02.8434471Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8435058Z               "line": 6550
2026-06-23T09:38:02.8435460Z             },
2026-06-23T09:38:02.8435779Z             {
2026-06-23T09:38:02.8436132Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8436579Z               "line": 6671
2026-06-23T09:38:02.8436912Z             },
2026-06-23T09:38:02.8437209Z             {
2026-06-23T09:38:02.8437537Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8437934Z               "line": 6732
2026-06-23T09:38:02.8438286Z             },
2026-06-23T09:38:02.8438581Z             {
2026-06-23T09:38:02.8438920Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8439405Z               "line": 6758
2026-06-23T09:38:02.8439696Z             }
2026-06-23T09:38:02.8439911Z           ]
2026-06-23T09:38:02.8440212Z         },
2026-06-23T09:38:02.8440477Z         "int": {
2026-06-23T09:38:02.8440732Z           "complete": false,
2026-06-23T09:38:02.8440990Z           "evidence": []
2026-06-23T09:38:02.8441290Z         },
2026-06-23T09:38:02.8441510Z         "unit": {
2026-06-23T09:38:02.8441734Z           "complete": true,
2026-06-23T09:38:02.8441982Z           "evidence": [
2026-06-23T09:38:02.8442249Z             {
2026-06-23T09:38:02.8442483Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8442755Z               "line": 8401
2026-06-23T09:38:02.8442989Z             },
2026-06-23T09:38:02.8443193Z             {
2026-06-23T09:38:02.8443481Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8443767Z               "line": 8419
2026-06-23T09:38:02.8444010Z             },
2026-06-23T09:38:02.8444223Z             {
2026-06-23T09:38:02.8444463Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8444739Z               "line": 8590
2026-06-23T09:38:02.8444978Z             },
2026-06-23T09:38:02.8445178Z             {
2026-06-23T09:38:02.8445421Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8445708Z               "line": 8606
2026-06-23T09:38:02.8445935Z             },
2026-06-23T09:38:02.8446128Z             {
2026-06-23T09:38:02.8446344Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8446606Z               "line": 8633
2026-06-23T09:38:02.8446829Z             },
2026-06-23T09:38:02.8447020Z             {
2026-06-23T09:38:02.8447230Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8447497Z               "line": 8660
2026-06-23T09:38:02.8447716Z             }
2026-06-23T09:38:02.8447912Z           ]
2026-06-23T09:38:02.8448103Z         }
2026-06-23T09:38:02.8448306Z       }
2026-06-23T09:38:02.8448499Z     },
2026-06-23T09:38:02.8448697Z     {
2026-06-23T09:38:02.8448918Z       "id": "REQ-ADAPTER-LIVE-UPDATE",
2026-06-23T09:38:02.8452466Z       "title": "An adapter update is live and daemon-coordinated (the adapter analog of brain self-update, ADR-0004): for an endpoint with a running RESIDENT adapter binary (today the `[message-idle-translation-binary]`), the CLI keeps fetch+verify and hands the APPLY to the daemon over IPC, which per affected endpoint (1) STOPS the resident binary -> releases the OS file lock (fixes the Windows 'Access denied (os error 5)' overwrite failure), (2) swaps on disk ONLY files whose CRC differs from the staged archive (unchanged files + their still-running binaries untouched), (3) RE-CLONES the new on-disk manifest into the running `BrainLifecycle` (the in-memory manifest is cached at bringup and otherwise goes stale -> binaries+manifest back on the same page), (4) RESTARTS the resident binary from the new files. An endpoint NOT running -> CLI swaps directly (no lock, no cache). Only the resident class is cycled; ephemeral adapter binaries (Psyche loop, `[digest]` extractor, `[session.*]` runners, hooks) self-heal on next spawn and are excluded. The daemon keeps a per-endpoint registry of resident adapter children. (ADR-0025, v0.13.2)",
2026-06-23T09:38:02.8455638Z       "requiredStages": [
2026-06-23T09:38:02.8455877Z         "doc",
2026-06-23T09:38:02.8456096Z         "impl",
2026-06-23T09:38:02.8456310Z         "unit",
2026-06-23T09:38:02.8456646Z         "int"
2026-06-23T09:38:02.8456846Z       ],
2026-06-23T09:38:02.8457065Z       "stages": {
2026-06-23T09:38:02.8457285Z         "doc": {
2026-06-23T09:38:02.8457509Z           "complete": true,
2026-06-23T09:38:02.8457748Z           "evidence": [
2026-06-23T09:38:02.8457975Z             {
2026-06-23T09:38:02.8458299Z               "path": "docs/adr/0025-live-daemon-coordinated-adapter-update.md",
2026-06-23T09:38:02.8458663Z               "line": 3
2026-06-23T09:38:02.8458891Z             },
2026-06-23T09:38:02.8459200Z             {
2026-06-23T09:38:02.8459511Z               "path": "docs/adr/0025-live-daemon-coordinated-adapter-update.md",
2026-06-23T09:38:02.8459863Z               "line": 44
2026-06-23T09:38:02.8460078Z             }
2026-06-23T09:38:02.8460268Z           ]
2026-06-23T09:38:02.8460454Z         },
2026-06-23T09:38:02.8460650Z         "impl": {
2026-06-23T09:38:02.8460878Z           "complete": true,
2026-06-23T09:38:02.8461112Z           "evidence": [
2026-06-23T09:38:02.8461324Z             {
2026-06-23T09:38:02.8461579Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.8461866Z               "line": 982
2026-06-23T09:38:02.8462091Z             },
2026-06-23T09:38:02.8462297Z             {
2026-06-23T09:38:02.8462535Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8462825Z               "line": 1044
2026-06-23T09:38:02.8463054Z             },
2026-06-23T09:38:02.8463274Z             {
2026-06-23T09:38:02.8463518Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8463809Z               "line": 1088
2026-06-23T09:38:02.8464032Z             },
2026-06-23T09:38:02.8464237Z             {
2026-06-23T09:38:02.8464587Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8464925Z               "line": 1210
2026-06-23T09:38:02.8465264Z             },
2026-06-23T09:38:02.8465569Z             {
2026-06-23T09:38:02.8465936Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8466390Z               "line": 1346
2026-06-23T09:38:02.8466743Z             },
2026-06-23T09:38:02.8467046Z             {
2026-06-23T09:38:02.8467411Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8467845Z               "line": 1359
2026-06-23T09:38:02.8468178Z             },
2026-06-23T09:38:02.8468469Z             {
2026-06-23T09:38:02.8468836Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8469347Z               "line": 1457
2026-06-23T09:38:02.8469676Z             },
2026-06-23T09:38:02.8469981Z             {
2026-06-23T09:38:02.8470337Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8470780Z               "line": 2313
2026-06-23T09:38:02.8471109Z             },
2026-06-23T09:38:02.8471405Z             {
2026-06-23T09:38:02.8471778Z               "path": "crates/spt-daemon/src/crc_swap.rs",
2026-06-23T09:38:02.8472215Z               "line": 37
2026-06-23T09:38:02.8472547Z             },
2026-06-23T09:38:02.8472848Z             {
2026-06-23T09:38:02.8473238Z               "path": "crates/spt-daemon/src/crc_swap.rs",
2026-06-23T09:38:02.8473671Z               "line": 93
2026-06-23T09:38:02.8474010Z             },
2026-06-23T09:38:02.8474310Z             {
2026-06-23T09:38:02.8474679Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8475129Z               "line": 75
2026-06-23T09:38:02.8475467Z             },
2026-06-23T09:38:02.8475762Z             {
2026-06-23T09:38:02.8476143Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8476748Z               "line": 101
2026-06-23T09:38:02.8477106Z             },
2026-06-23T09:38:02.8477411Z             {
2026-06-23T09:38:02.8477785Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8478233Z               "line": 127
2026-06-23T09:38:02.8478577Z             },
2026-06-23T09:38:02.8478883Z             {
2026-06-23T09:38:02.8479330Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8479926Z               "line": 224
2026-06-23T09:38:02.8480269Z             },
2026-06-23T09:38:02.8480574Z             {
2026-06-23T09:38:02.8480955Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8481417Z               "line": 232
2026-06-23T09:38:02.8481752Z             },
2026-06-23T09:38:02.8482047Z             {
2026-06-23T09:38:02.8482444Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8482901Z               "line": 251
2026-06-23T09:38:02.8483244Z             },
2026-06-23T09:38:02.8483564Z             {
2026-06-23T09:38:02.8483936Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8484399Z               "line": 326
2026-06-23T09:38:02.8484742Z             },
2026-06-23T09:38:02.8485043Z             {
2026-06-23T09:38:02.8485414Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.8485854Z               "line": 233
2026-06-23T09:38:02.8486217Z             },
2026-06-23T09:38:02.8486522Z             {
2026-06-23T09:38:02.8486890Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.8487332Z               "line": 239
2026-06-23T09:38:02.8487671Z             },
2026-06-23T09:38:02.8487980Z             {
2026-06-23T09:38:02.8488340Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.8488769Z               "line": 259
2026-06-23T09:38:02.8489147Z             },
2026-06-23T09:38:02.8489452Z             {
2026-06-23T09:38:02.8489796Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8490238Z               "line": 6403
2026-06-23T09:38:02.8490581Z             },
2026-06-23T09:38:02.8490881Z             {
2026-06-23T09:38:02.8491219Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8491644Z               "line": 6428
2026-06-23T09:38:02.8491977Z             },
2026-06-23T09:38:02.8492273Z             {
2026-06-23T09:38:02.8492617Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8493069Z               "line": 6457
2026-06-23T09:38:02.8493325Z             }
2026-06-23T09:38:02.8493523Z           ]
2026-06-23T09:38:02.8493725Z         },
2026-06-23T09:38:02.8493929Z         "int": {
2026-06-23T09:38:02.8494249Z           "complete": true,
2026-06-23T09:38:02.8494621Z           "evidence": [
2026-06-23T09:38:02.8494955Z             {
2026-06-23T09:38:02.8495384Z               "path": "crates/spt/tests/live_adapt_psyche_lock_e2e.rs",
2026-06-23T09:38:02.8495885Z               "line": 338
2026-06-23T09:38:02.8496226Z             },
2026-06-23T09:38:02.8521815Z             {
2026-06-23T09:38:02.8522329Z               "path": "crates/spt/tests/live_adapt_psyche_lock_e2e.rs",
2026-06-23T09:38:02.8522853Z               "line": 351
2026-06-23T09:38:02.8523195Z             },
2026-06-23T09:38:02.8523496Z             {
2026-06-23T09:38:02.8523939Z               "path": "crates/spt/tests/live_adapt_translation_swap_e2e.rs",
2026-06-23T09:38:02.8524425Z               "line": 96
2026-06-23T09:38:02.8524773Z             }
2026-06-23T09:38:02.8525062Z           ]
2026-06-23T09:38:02.8525348Z         },
2026-06-23T09:38:02.8525653Z         "unit": {
2026-06-23T09:38:02.8525991Z           "complete": true,
2026-06-23T09:38:02.8526344Z           "evidence": [
2026-06-23T09:38:02.8526663Z             {
2026-06-23T09:38:02.8527035Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8527465Z               "line": 3136
2026-06-23T09:38:02.8527797Z             },
2026-06-23T09:38:02.8528085Z             {
2026-06-23T09:38:02.8528639Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8529183Z               "line": 3169
2026-06-23T09:38:02.8529512Z             },
2026-06-23T09:38:02.8529812Z             {
2026-06-23T09:38:02.8530189Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.8530618Z               "line": 3193
2026-06-23T09:38:02.8530957Z             },
2026-06-23T09:38:02.8531262Z             {
2026-06-23T09:38:02.8531801Z               "path": "crates/spt-daemon/src/crc_swap.rs",
2026-06-23T09:38:02.8532259Z               "line": 222
2026-06-23T09:38:02.8532593Z             },
2026-06-23T09:38:02.8532889Z             {
2026-06-23T09:38:02.8533250Z               "path": "crates/spt-daemon/src/crc_swap.rs",
2026-06-23T09:38:02.8533689Z               "line": 253
2026-06-23T09:38:02.8534008Z             },
2026-06-23T09:38:02.8534309Z             {
2026-06-23T09:38:02.8534685Z               "path": "crates/spt-daemon/src/crc_swap.rs",
2026-06-23T09:38:02.8535114Z               "line": 276
2026-06-23T09:38:02.8535437Z             },
2026-06-23T09:38:02.8535731Z             {
2026-06-23T09:38:02.8536102Z               "path": "crates/spt-daemon/src/crc_swap.rs",
2026-06-23T09:38:02.8536537Z               "line": 331
2026-06-23T09:38:02.8536871Z             },
2026-06-23T09:38:02.8537167Z             {
2026-06-23T09:38:02.8537538Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8537996Z               "line": 1360
2026-06-23T09:38:02.8538323Z             },
2026-06-23T09:38:02.8538617Z             {
2026-06-23T09:38:02.8539057Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8539514Z               "line": 1399
2026-06-23T09:38:02.8539843Z             },
2026-06-23T09:38:02.8540129Z             {
2026-06-23T09:38:02.8540515Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8540977Z               "line": 1445
2026-06-23T09:38:02.8541327Z             },
2026-06-23T09:38:02.8541642Z             {
2026-06-23T09:38:02.8542033Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8542343Z               "line": 1479
2026-06-23T09:38:02.8542568Z             },
2026-06-23T09:38:02.8542776Z             {
2026-06-23T09:38:02.8543033Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.8543320Z               "line": 1531
2026-06-23T09:38:02.8543545Z             },
2026-06-23T09:38:02.8543757Z             {
2026-06-23T09:38:02.8543992Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8544268Z               "line": 12773
2026-06-23T09:38:02.8544497Z             },
2026-06-23T09:38:02.8544692Z             {
2026-06-23T09:38:02.8544921Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8545199Z               "line": 12855
2026-06-23T09:38:02.8545418Z             },
2026-06-23T09:38:02.8545617Z             {
2026-06-23T09:38:02.8545828Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8546088Z               "line": 12887
2026-06-23T09:38:02.8546310Z             }
2026-06-23T09:38:02.8546502Z           ]
2026-06-23T09:38:02.8546701Z         }
2026-06-23T09:38:02.8546896Z       }
2026-06-23T09:38:02.8547088Z     },
2026-06-23T09:38:02.8547268Z     {
2026-06-23T09:38:02.8547545Z       "id": "REQ-ADAPTER-MULTIPLATFORM-SPT",
2026-06-23T09:38:02.8550871Z       "title": "A `.spt` adapter archive may pack multiple platforms in one signed asset: shared `manifest.toml` + `strings/` at the root, role binaries under per-Rust-target-triple subdirectories (ADR-0016 triple vocabulary, e.g. `x86_64-pc-windows-msvc/`); install/update extracts the shared root plus ONLY `current_platform()`'s triple subdir, flattened into `install_dir` so flat `<install_dir>/<program>` resolution (REQ-INSTALL-11) is unchanged. Name stays `adapter.spt` (plain-tar or gzip, `--asset` optional default); one whole-archive Ed25519 signature over the fat archive (REQ-UPD-9 single-artifact verify). A legacy flat archive (no triple subdirs) extracts as today (free back-compat); a multi-platform archive sets `min_spt_core_version >= 0.13.2` (forward-compat gate, readable before extract); a multi-platform archive missing the recipient's triple -> typed `NoArtifactForPlatform`, never a silent no-op. Large adapters may still split per-platform (single-triple archives via `--asset`, or ADR-0016 update-set machinery). (ADR-0024, v0.13.2)",
2026-06-23T09:38:02.8553833Z       "requiredStages": [
2026-06-23T09:38:02.8554181Z         "doc",
2026-06-23T09:38:02.8554394Z         "impl",
2026-06-23T09:38:02.8554599Z         "unit",
2026-06-23T09:38:02.8554796Z         "int"
2026-06-23T09:38:02.8554995Z       ],
2026-06-23T09:38:02.8555200Z       "stages": {
2026-06-23T09:38:02.8555420Z         "doc": {
2026-06-23T09:38:02.8555629Z           "complete": true,
2026-06-23T09:38:02.8555863Z           "evidence": [
2026-06-23T09:38:02.8556092Z             {
2026-06-23T09:38:02.8556393Z               "path": "docs/adr/0024-multi-platform-adapter-spt-packaging.md",
2026-06-23T09:38:02.8556752Z               "line": 3
2026-06-23T09:38:02.8556956Z             }
2026-06-23T09:38:02.8557165Z           ]
2026-06-23T09:38:02.8557371Z         },
2026-06-23T09:38:02.8557576Z         "impl": {
2026-06-23T09:38:02.8557795Z           "complete": true,
2026-06-23T09:38:02.8558038Z           "evidence": [
2026-06-23T09:38:02.8558249Z             {
2026-06-23T09:38:02.8558501Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:02.8558806Z               "line": 189
2026-06-23T09:38:02.8559126Z             },
2026-06-23T09:38:02.8559340Z             {
2026-06-23T09:38:02.8559563Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8559828Z               "line": 3061
2026-06-23T09:38:02.8560066Z             },
2026-06-23T09:38:02.8560272Z             {
2026-06-23T09:38:02.8560501Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8560772Z               "line": 3151
2026-06-23T09:38:02.8560991Z             }
2026-06-23T09:38:02.8561183Z           ]
2026-06-23T09:38:02.8561387Z         },
2026-06-23T09:38:02.8561587Z         "int": {
2026-06-23T09:38:02.8561804Z           "complete": true,
2026-06-23T09:38:02.8562044Z           "evidence": [
2026-06-23T09:38:02.8562261Z             {
2026-06-23T09:38:02.8562491Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8562762Z               "line": 12608
2026-06-23T09:38:02.8562976Z             },
2026-06-23T09:38:02.8563182Z             {
2026-06-23T09:38:02.8563402Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8563678Z               "line": 12672
2026-06-23T09:38:02.8563897Z             },
2026-06-23T09:38:02.8564097Z             {
2026-06-23T09:38:02.8564313Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8564579Z               "line": 12715
2026-06-23T09:38:02.8564797Z             }
2026-06-23T09:38:02.8564988Z           ]
2026-06-23T09:38:02.8565187Z         },
2026-06-23T09:38:02.8565389Z         "unit": {
2026-06-23T09:38:02.8565613Z           "complete": true,
2026-06-23T09:38:02.8565840Z           "evidence": [
2026-06-23T09:38:02.8566056Z             {
2026-06-23T09:38:02.8581529Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8581936Z               "line": 12543
2026-06-23T09:38:02.8582222Z             },
2026-06-23T09:38:02.8582488Z             {
2026-06-23T09:38:02.8582774Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8583154Z               "line": 12560
2026-06-23T09:38:02.8583429Z             }
2026-06-23T09:38:02.8583663Z           ]
2026-06-23T09:38:02.8583897Z         }
2026-06-23T09:38:02.8584135Z       }
2026-06-23T09:38:02.8584368Z     },
2026-06-23T09:38:02.8584597Z     {
2026-06-23T09:38:02.8584898Z       "id": "REQ-ADAPTER-PROOF-DIR-OVERRIDE",
2026-06-23T09:38:02.8587138Z       "title": "The author-time proof commands (`spt adapter digest-proof`, `spt adapter translate-proof`) gain a `--dir <path>` / `--manifest <file>` override so an author proofs a DEV binary against an on-disk manifest+install dir WITHOUT staging a full extracted GhReleaseManaged install (mirrors digest-proof's `--sample` pointing straight at a file). Fixes perri F-011: a bare-file-added gh_release adapter currently can't be resolved by the *-proof commands ('manifest is not present yet at <dir>'); un-stales the bare-file digest-proof int. (perri F-011, v0.13.x DX)",
2026-06-23T09:38:02.8588714Z       "requiredStages": [
2026-06-23T09:38:02.8589137Z         "doc",
2026-06-23T09:38:02.8589362Z         "impl",
2026-06-23T09:38:02.8589567Z         "unit",
2026-06-23T09:38:02.8589766Z         "int"
2026-06-23T09:38:02.8589963Z       ],
2026-06-23T09:38:02.8590157Z       "stages": {
2026-06-23T09:38:02.8590372Z         "doc": {
2026-06-23T09:38:02.8590588Z           "complete": true,
2026-06-23T09:38:02.8590826Z           "evidence": [
2026-06-23T09:38:02.8591039Z             {
2026-06-23T09:38:02.8591309Z               "path": "docs-site/src/harness-contract/patterns.md",
2026-06-23T09:38:02.8591623Z               "line": 338
2026-06-23T09:38:02.8591848Z             },
2026-06-23T09:38:02.8592042Z             {
2026-06-23T09:38:02.8592267Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:02.8592534Z               "line": 189
2026-06-23T09:38:02.8592739Z             }
2026-06-23T09:38:02.8592943Z           ]
2026-06-23T09:38:02.8593145Z         },
2026-06-23T09:38:02.8593344Z         "impl": {
2026-06-23T09:38:02.8593559Z           "complete": true,
2026-06-23T09:38:02.8593801Z           "evidence": [
2026-06-23T09:38:02.8594018Z             {
2026-06-23T09:38:02.8594242Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8594519Z               "line": 6317
2026-06-23T09:38:02.8594743Z             },
2026-06-23T09:38:02.8594937Z             {
2026-06-23T09:38:02.8595162Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8595435Z               "line": 6329
2026-06-23T09:38:02.8595659Z             },
2026-06-23T09:38:02.8595864Z             {
2026-06-23T09:38:02.8596079Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8596351Z               "line": 6805
2026-06-23T09:38:02.8596572Z             }
2026-06-23T09:38:02.8596769Z           ]
2026-06-23T09:38:02.8596968Z         },
2026-06-23T09:38:02.8597173Z         "int": {
2026-06-23T09:38:02.8597383Z           "complete": true,
2026-06-23T09:38:02.8597618Z           "evidence": [
2026-06-23T09:38:02.8597836Z             {
2026-06-23T09:38:02.8598098Z               "path": "crates/spt/tests/translate_proof.rs",
2026-06-23T09:38:02.8598394Z               "line": 156
2026-06-23T09:38:02.8598619Z             }
2026-06-23T09:38:02.8598836Z           ]
2026-06-23T09:38:02.8599096Z         },
2026-06-23T09:38:02.8599293Z         "unit": {
2026-06-23T09:38:02.8599511Z           "complete": true,
2026-06-23T09:38:02.8599754Z           "evidence": [
2026-06-23T09:38:02.8599970Z             {
2026-06-23T09:38:02.8600194Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8600470Z               "line": 8495
2026-06-23T09:38:02.8600703Z             }
2026-06-23T09:38:02.8600913Z           ]
2026-06-23T09:38:02.8601100Z         }
2026-06-23T09:38:02.8601290Z       }
2026-06-23T09:38:02.8601482Z     },
2026-06-23T09:38:02.8601674Z     {
2026-06-23T09:38:02.8601897Z       "id": "REQ-ADAPTER-TRANSLATE-PROOF",
2026-06-23T09:38:02.8609478Z       "title": "`spt adapter translate-proof <adapter> --event <envelope> [--session <id>]` — the author-time EMIT-half proof tool for `[message-idle-translation-binary]` (ADR-0022), symmetric to `spt adapter digest-proof` (REQ-TERM-5). It spawns and feeds the adapter's declared translation binary EXACTLY as the daemon does at idle-delivery — running the REAL `spt_daemon::translation` driver VERBATIM (no protocol reimplementation): `TranslationChild::spawn` the binary, send the `{type:\"init\",endpoint_id,node}` line then the `{type:\"event\",envelope}` line, and read back the emitted `{key}`/`{text}`/`{delay_ms}`/`{commit}` keystroke-command stream — then prints it author-readable (each Key with its `key_to_bytes` rendering, Text quoted, Delay in ms, Commit marker) with counts. It fills the SAME `{id}`→option and `{session_id}`→(--session, else a placeholder) keys into the `--event` envelope the daemon fills at runtime, so an envelope that proofs here feeds faithfully live. EMIT-half ONLY: it proves the binary's spawn+feed+emit contract; it does NOT exercise the daemon's atomic PTY apply / controller-buffering (that stays covered by the W2 inject_control_wedge int gate) — `--help` says so. Exit codes mirror digest-proof: 0 ok, 1 on spawn-fail / zero commands / no-commit-or-output / unparseable, 2 when the adapter declares no `[message-idle-translation-binary]` section. The `TranslationChild` Drop does the bounded no-zombie reap. (v0.13.x)",
2026-06-23T09:38:02.8613501Z       "requiredStages": [
2026-06-23T09:38:02.8613735Z         "doc",
2026-06-23T09:38:02.8613937Z         "impl",
2026-06-23T09:38:02.8614145Z         "unit",
2026-06-23T09:38:02.8614345Z         "int"
2026-06-23T09:38:02.8614547Z       ],
2026-06-23T09:38:02.8614745Z       "stages": {
2026-06-23T09:38:02.8614954Z         "doc": {
2026-06-23T09:38:02.8615171Z           "complete": true,
2026-06-23T09:38:02.8615405Z           "evidence": [
2026-06-23T09:38:02.8615625Z             {
2026-06-23T09:38:02.8615945Z               "path": "docs/adr/0022-spt-hosted-idle-delivery-translation-binary.md",
2026-06-23T09:38:02.8616306Z               "line": 73
2026-06-23T09:38:02.8616541Z             }
2026-06-23T09:38:02.8616735Z           ]
2026-06-23T09:38:02.8616931Z         },
2026-06-23T09:38:02.8617137Z         "impl": {
2026-06-23T09:38:02.8617355Z           "complete": true,
2026-06-23T09:38:02.8617593Z           "evidence": [
2026-06-23T09:38:02.8617803Z             {
2026-06-23T09:38:02.8618031Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8618307Z               "line": 6328
2026-06-23T09:38:02.8618528Z             },
2026-06-23T09:38:02.8618724Z             {
2026-06-23T09:38:02.8619034Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8619300Z               "line": 6973
2026-06-23T09:38:02.8619518Z             }
2026-06-23T09:38:02.8619716Z           ]
2026-06-23T09:38:02.8619909Z         },
2026-06-23T09:38:02.8620109Z         "int": {
2026-06-23T09:38:02.8620312Z           "complete": true,
2026-06-23T09:38:02.8620545Z           "evidence": [
2026-06-23T09:38:02.8620756Z             {
2026-06-23T09:38:02.8621009Z               "path": "crates/spt/tests/translate_proof.rs",
2026-06-23T09:38:02.8621314Z               "line": 45
2026-06-23T09:38:02.8621528Z             }
2026-06-23T09:38:02.8621723Z           ]
2026-06-23T09:38:02.8621920Z         },
2026-06-23T09:38:02.8622119Z         "unit": {
2026-06-23T09:38:02.8622334Z           "complete": true,
2026-06-23T09:38:02.8622574Z           "evidence": [
2026-06-23T09:38:02.8622804Z             {
2026-06-23T09:38:02.8623027Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8623299Z               "line": 10008
2026-06-23T09:38:02.8623513Z             },
2026-06-23T09:38:02.8623708Z             {
2026-06-23T09:38:02.8623933Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8624191Z               "line": 10080
2026-06-23T09:38:02.8624414Z             }
2026-06-23T09:38:02.8624614Z           ]
2026-06-23T09:38:02.8624816Z         }
2026-06-23T09:38:02.8625015Z       }
2026-06-23T09:38:02.8625206Z     },
2026-06-23T09:38:02.8625395Z     {
2026-06-23T09:38:02.8625632Z       "id": "REQ-ADAPTER-UPDATE-MESSAGE",
2026-06-23T09:38:02.8627444Z       "title": "An adapter manifest may declare `[update].message` — a plain (multi-line) human notice surfaced to stdout, markdown-rendered (the v0.13.0 helpfmt prose path), ONLY when `spt adapter update` actually APPLIES an update (version changed), not on a no-op. Read from the newly-installed manifest; avenue-agnostic (gh_release/delegated/file_pull). No `{key}` substitution. Use: an adapter telling the operator a post-update action, e.g. spt-claude-code's \"run `/reload-plugins` in any ongoing sessions\". (v0.13.2)",
2026-06-23T09:38:02.8628882Z       "requiredStages": [
2026-06-23T09:38:02.8629168Z         "doc",
2026-06-23T09:38:02.8629374Z         "impl",
2026-06-23T09:38:02.8629574Z         "unit"
2026-06-23T09:38:02.8629770Z       ],
2026-06-23T09:38:02.8629971Z       "stages": {
2026-06-23T09:38:02.8630180Z         "doc": {
2026-06-23T09:38:02.8630393Z           "complete": true,
2026-06-23T09:38:02.8630748Z           "evidence": [
2026-06-23T09:38:02.8630963Z             {
2026-06-23T09:38:02.8631182Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.8631434Z               "line": 99
2026-06-23T09:38:02.8631650Z             },
2026-06-23T09:38:02.8631846Z             {
2026-06-23T09:38:02.8632059Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.8632308Z               "line": 528
2026-06-23T09:38:02.8632528Z             },
2026-06-23T09:38:02.8632722Z             {
2026-06-23T09:38:02.8632985Z               "path": "docs-site/src/harness-contract/manifest.md",
2026-06-23T09:38:02.8633298Z               "line": 391
2026-06-23T09:38:02.8633522Z             },
2026-06-23T09:38:02.8633725Z             {
2026-06-23T09:38:02.8633944Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:02.8634203Z               "line": 319
2026-06-23T09:38:02.8634427Z             }
2026-06-23T09:38:02.8634626Z           ]
2026-06-23T09:38:02.8634821Z         },
2026-06-23T09:38:02.8635013Z         "impl": {
2026-06-23T09:38:02.8635241Z           "complete": true,
2026-06-23T09:38:02.8635489Z           "evidence": [
2026-06-23T09:38:02.8635701Z             {
2026-06-23T09:38:02.8635955Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.8648115Z               "line": 497
2026-06-23T09:38:02.8648363Z             },
2026-06-23T09:38:02.8648573Z             {
2026-06-23T09:38:02.8648803Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8649152Z               "line": 6501
2026-06-23T09:38:02.8649373Z             },
2026-06-23T09:38:02.8649569Z             {
2026-06-23T09:38:02.8649803Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8650065Z               "line": 6650
2026-06-23T09:38:02.8650293Z             }
2026-06-23T09:38:02.8650489Z           ]
2026-06-23T09:38:02.8650675Z         },
2026-06-23T09:38:02.8650861Z         "int": {
2026-06-23T09:38:02.8651077Z           "complete": false,
2026-06-23T09:38:02.8651309Z           "evidence": []
2026-06-23T09:38:02.8651533Z         },
2026-06-23T09:38:02.8651732Z         "unit": {
2026-06-23T09:38:02.8651940Z           "complete": true,
2026-06-23T09:38:02.8652179Z           "evidence": [
2026-06-23T09:38:02.8652394Z             {
2026-06-23T09:38:02.8652622Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8652888Z               "line": 8462
2026-06-23T09:38:02.8653099Z             },
2026-06-23T09:38:02.8653291Z             {
2026-06-23T09:38:02.8653508Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8653766Z               "line": 8477
2026-06-23T09:38:02.8653972Z             }
2026-06-23T09:38:02.8654172Z           ]
2026-06-23T09:38:02.8654358Z         }
2026-06-23T09:38:02.8654542Z       }
2026-06-23T09:38:02.8654727Z     },
2026-06-23T09:38:02.8654917Z     {
2026-06-23T09:38:02.8655126Z       "id": "REQ-ADAPTER-VERSION-CMD",
2026-06-23T09:38:02.8656943Z       "title": "`spt adapter version <name>` prints a registered adapter's declared version — the EXISTING mandatory `[adapter].version` manifest field (manifest.rs already requires it; NOT a `[strings].version`, NOT `get-string`, no second version source). A new `AdapterCmd::Version{option}` resolves the option's merged view via `registry::resolve_option` like the sibling adapter subcommands and prints `manifest.adapter.version`; an unresolvable option errors (exit 1) the same way. (v0.13.2 W6)",
2026-06-23T09:38:02.8658356Z       "requiredStages": [
2026-06-23T09:38:02.8658580Z         "doc",
2026-06-23T09:38:02.8658809Z         "impl",
2026-06-23T09:38:02.8659101Z         "unit"
2026-06-23T09:38:02.8659296Z       ],
2026-06-23T09:38:02.8659635Z       "stages": {
2026-06-23T09:38:02.8659852Z         "doc": {
2026-06-23T09:38:02.8660058Z           "complete": true,
2026-06-23T09:38:02.8660291Z           "evidence": [
2026-06-23T09:38:02.8660505Z             {
2026-06-23T09:38:02.8660716Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:02.8660984Z               "line": 35
2026-06-23T09:38:02.8661197Z             }
2026-06-23T09:38:02.8661497Z           ]
2026-06-23T09:38:02.8661684Z         },
2026-06-23T09:38:02.8661879Z         "impl": {
2026-06-23T09:38:02.8662121Z           "complete": true,
2026-06-23T09:38:02.8662363Z           "evidence": [
2026-06-23T09:38:02.8662577Z             {
2026-06-23T09:38:02.8662795Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8663067Z               "line": 6293
2026-06-23T09:38:02.8663283Z             },
2026-06-23T09:38:02.8663473Z             {
2026-06-23T09:38:02.8663697Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8663974Z               "line": 6782
2026-06-23T09:38:02.8664189Z             }
2026-06-23T09:38:02.8664384Z           ]
2026-06-23T09:38:02.8664579Z         },
2026-06-23T09:38:02.8664771Z         "int": {
2026-06-23T09:38:02.8664984Z           "complete": false,
2026-06-23T09:38:02.8665230Z           "evidence": []
2026-06-23T09:38:02.8665444Z         },
2026-06-23T09:38:02.8665630Z         "unit": {
2026-06-23T09:38:02.8665854Z           "complete": true,
2026-06-23T09:38:02.8666098Z           "evidence": [
2026-06-23T09:38:02.8666315Z             {
2026-06-23T09:38:02.8666565Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8666841Z               "line": 8555
2026-06-23T09:38:02.8667066Z             },
2026-06-23T09:38:02.8667265Z             {
2026-06-23T09:38:02.8667489Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8667755Z               "line": 8566
2026-06-23T09:38:02.8667972Z             }
2026-06-23T09:38:02.8668173Z           ]
2026-06-23T09:38:02.8668359Z         }
2026-06-23T09:38:02.8668558Z       }
2026-06-23T09:38:02.8668749Z     },
2026-06-23T09:38:02.8668936Z     {
2026-06-23T09:38:02.8669222Z       "id": "REQ-API-1",
2026-06-23T09:38:02.8669536Z       "title": "api prefix and adapter_name on every machinery invocation",
2026-06-23T09:38:02.8669885Z       "requiredStages": [
2026-06-23T09:38:02.8670104Z         "impl",
2026-06-23T09:38:02.8670310Z         "unit",
2026-06-23T09:38:02.8670512Z         "int"
2026-06-23T09:38:02.8670718Z       ],
2026-06-23T09:38:02.8670904Z       "stages": {
2026-06-23T09:38:02.8671113Z         "doc": {
2026-06-23T09:38:02.8671329Z           "complete": false,
2026-06-23T09:38:02.8671563Z           "evidence": []
2026-06-23T09:38:02.8671785Z         },
2026-06-23T09:38:02.8672005Z         "impl": {
2026-06-23T09:38:02.8672216Z           "complete": true,
2026-06-23T09:38:02.8672449Z           "evidence": [
2026-06-23T09:38:02.8672667Z             {
2026-06-23T09:38:02.8672923Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:02.8673209Z               "line": 15
2026-06-23T09:38:02.8673423Z             }
2026-06-23T09:38:02.8673618Z           ]
2026-06-23T09:38:02.8673800Z         },
2026-06-23T09:38:02.8673999Z         "int": {
2026-06-23T09:38:02.8674205Z           "complete": true,
2026-06-23T09:38:02.8674449Z           "evidence": [
2026-06-23T09:38:02.8674653Z             {
2026-06-23T09:38:02.8674906Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:02.8675201Z               "line": 13
2026-06-23T09:38:02.8675407Z             }
2026-06-23T09:38:02.8675605Z           ]
2026-06-23T09:38:02.8675790Z         },
2026-06-23T09:38:02.8675989Z         "unit": {
2026-06-23T09:38:02.8676209Z           "complete": true,
2026-06-23T09:38:02.8676443Z           "evidence": [
2026-06-23T09:38:02.8676653Z             {
2026-06-23T09:38:02.8676871Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:02.8677153Z               "line": 717
2026-06-23T09:38:02.8677373Z             },
2026-06-23T09:38:02.8677678Z             {
2026-06-23T09:38:02.8677917Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:02.8678186Z               "line": 804
2026-06-23T09:38:02.8678414Z             }
2026-06-23T09:38:02.8678609Z           ]
2026-06-23T09:38:02.8678804Z         }
2026-06-23T09:38:02.8679076Z       }
2026-06-23T09:38:02.8679267Z     },
2026-06-23T09:38:02.8679452Z     {
2026-06-23T09:38:02.8679772Z       "id": "REQ-API-2",
2026-06-23T09:38:02.8680120Z       "title": "The api subcommand surface (bind/listen/poll/state/worker/boundary/...)",
2026-06-23T09:38:02.8680489Z       "requiredStages": [
2026-06-23T09:38:02.8680716Z         "impl",
2026-06-23T09:38:02.8680912Z         "unit",
2026-06-23T09:38:02.8681111Z         "int"
2026-06-23T09:38:02.8681301Z       ],
2026-06-23T09:38:02.8681498Z       "stages": {
2026-06-23T09:38:02.8681702Z         "doc": {
2026-06-23T09:38:02.8681922Z           "complete": false,
2026-06-23T09:38:02.8682161Z           "evidence": []
2026-06-23T09:38:02.8682395Z         },
2026-06-23T09:38:02.8682589Z         "impl": {
2026-06-23T09:38:02.8682804Z           "complete": true,
2026-06-23T09:38:02.8683048Z           "evidence": [
2026-06-23T09:38:02.8683256Z             {
2026-06-23T09:38:02.8683506Z               "path": "crates/spt-store/src/history.rs",
2026-06-23T09:38:02.8683789Z               "line": 17
2026-06-23T09:38:02.8683997Z             },
2026-06-23T09:38:02.8684202Z             {
2026-06-23T09:38:02.8684441Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:02.8684713Z               "line": 20
2026-06-23T09:38:02.8684927Z             },
2026-06-23T09:38:02.8685118Z             {
2026-06-23T09:38:02.8685357Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:02.8685639Z               "line": 142
2026-06-23T09:38:02.8685862Z             },
2026-06-23T09:38:02.8686052Z             {
2026-06-23T09:38:02.8686290Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8686569Z               "line": 24
2026-06-23T09:38:02.8686792Z             },
2026-06-23T09:38:02.8686989Z             {
2026-06-23T09:38:02.8687232Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8687513Z               "line": 41
2026-06-23T09:38:02.8687723Z             },
2026-06-23T09:38:02.8687923Z             {
2026-06-23T09:38:02.8688158Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8688439Z               "line": 213
2026-06-23T09:38:02.8688652Z             },
2026-06-23T09:38:02.8688861Z             {
2026-06-23T09:38:02.8689164Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8689446Z               "line": 255
2026-06-23T09:38:02.8689655Z             },
2026-06-23T09:38:02.8689861Z             {
2026-06-23T09:38:02.8690095Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8690380Z               "line": 334
2026-06-23T09:38:02.8690595Z             },
2026-06-23T09:38:02.8690800Z             {
2026-06-23T09:38:02.8691039Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8691311Z               "line": 397
2026-06-23T09:38:02.8691533Z             },
2026-06-23T09:38:02.8691729Z             {
2026-06-23T09:38:02.8691961Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8692238Z               "line": 436
2026-06-23T09:38:02.8692459Z             },
2026-06-23T09:38:02.8692654Z             {
2026-06-23T09:38:02.8692887Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.8693163Z               "line": 17
2026-06-23T09:38:02.8693388Z             },
2026-06-23T09:38:02.8693579Z             {
2026-06-23T09:38:02.8693816Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.8694081Z               "line": 30
2026-06-23T09:38:02.8694296Z             },
2026-06-23T09:38:02.8694729Z             {
2026-06-23T09:38:02.8695044Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.8695340Z               "line": 63
2026-06-23T09:38:02.8695744Z             },
2026-06-23T09:38:02.8695978Z             {
2026-06-23T09:38:02.8696251Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.8696538Z               "line": 77
2026-06-23T09:38:02.8696759Z             }
2026-06-23T09:38:02.8696948Z           ]
2026-06-23T09:38:02.8697148Z         },
2026-06-23T09:38:02.8697343Z         "int": {
2026-06-23T09:38:02.8697663Z           "complete": true,
2026-06-23T09:38:02.8697902Z           "evidence": [
2026-06-23T09:38:02.8698126Z             {
2026-06-23T09:38:02.8698374Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:02.8698654Z               "line": 14
2026-06-23T09:38:02.8698869Z             },
2026-06-23T09:38:02.8699236Z             {
2026-06-23T09:38:02.8699486Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:02.8699768Z               "line": 187
2026-06-23T09:38:02.8699991Z             }
2026-06-23T09:38:02.8700191Z           ]
2026-06-23T09:38:02.8700387Z         },
2026-06-23T09:38:02.8700587Z         "unit": {
2026-06-23T09:38:02.8700807Z           "complete": true,
2026-06-23T09:38:02.8701036Z           "evidence": [
2026-06-23T09:38:02.8701255Z             {
2026-06-23T09:38:02.8701503Z               "path": "crates/spt-store/src/history.rs",
2026-06-23T09:38:02.8701779Z               "line": 82
2026-06-23T09:38:02.8702009Z             },
2026-06-23T09:38:02.8702217Z             {
2026-06-23T09:38:02.8702455Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:02.8702732Z               "line": 279
2026-06-23T09:38:02.8702943Z             },
2026-06-23T09:38:02.8703147Z             {
2026-06-23T09:38:02.8703385Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8703676Z               "line": 709
2026-06-23T09:38:02.8703896Z             },
2026-06-23T09:38:02.8704086Z             {
2026-06-23T09:38:02.8704324Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8704604Z               "line": 720
2026-06-23T09:38:02.8704808Z             },
2026-06-23T09:38:02.8705002Z             {
2026-06-23T09:38:02.8705237Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8705514Z               "line": 873
2026-06-23T09:38:02.8705728Z             },
2026-06-23T09:38:02.8705924Z             {
2026-06-23T09:38:02.8706162Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8706444Z               "line": 919
2026-06-23T09:38:02.8706672Z             },
2026-06-23T09:38:02.8706862Z             {
2026-06-23T09:38:02.8707103Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.8707386Z               "line": 143
2026-06-23T09:38:02.8707603Z             },
2026-06-23T09:38:02.8707795Z             {
2026-06-23T09:38:02.8708029Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.8708300Z               "line": 187
2026-06-23T09:38:02.8708513Z             }
2026-06-23T09:38:02.8708705Z           ]
2026-06-23T09:38:02.8708895Z         }
2026-06-23T09:38:02.8709148Z       }
2026-06-23T09:38:02.8709335Z     },
2026-06-23T09:38:02.8709530Z     {
2026-06-23T09:38:02.8709729Z       "id": "REQ-API-3",
2026-06-23T09:38:02.8710023Z       "title": "commune/signoff are file-drops, not commands",
2026-06-23T09:38:02.8710343Z       "requiredStages": [
2026-06-23T09:38:02.8710576Z         "impl",
2026-06-23T09:38:02.8710785Z         "unit",
2026-06-23T09:38:02.8710990Z         "int"
2026-06-23T09:38:02.8711201Z       ],
2026-06-23T09:38:02.8711390Z       "stages": {
2026-06-23T09:38:02.8711610Z         "doc": {
2026-06-23T09:38:02.8711820Z           "complete": false,
2026-06-23T09:38:02.8712058Z           "evidence": []
2026-06-23T09:38:02.8712272Z         },
2026-06-23T09:38:02.8712469Z         "impl": {
2026-06-23T09:38:02.8712691Z           "complete": true,
2026-06-23T09:38:02.8712921Z           "evidence": [
2026-06-23T09:38:02.8713130Z             {
2026-06-23T09:38:02.8713479Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:02.8713770Z               "line": 27
2026-06-23T09:38:02.8713969Z             },
2026-06-23T09:38:02.8714170Z             {
2026-06-23T09:38:02.8714405Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8714685Z               "line": 566
2026-06-23T09:38:02.8714907Z             }
2026-06-23T09:38:02.8715108Z           ]
2026-06-23T09:38:02.8715301Z         },
2026-06-23T09:38:02.8715591Z         "int": {
2026-06-23T09:38:02.8715802Z           "complete": true,
2026-06-23T09:38:02.8716031Z           "evidence": [
2026-06-23T09:38:02.8716244Z             {
2026-06-23T09:38:02.8716484Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:02.8716769Z               "line": 261
2026-06-23T09:38:02.8716999Z             }
2026-06-23T09:38:02.8717198Z           ]
2026-06-23T09:38:02.8717394Z         },
2026-06-23T09:38:02.8717581Z         "unit": {
2026-06-23T09:38:02.8717789Z           "complete": true,
2026-06-23T09:38:02.8718026Z           "evidence": [
2026-06-23T09:38:02.8718230Z             {
2026-06-23T09:38:02.8718454Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:02.8718736Z               "line": 280
2026-06-23T09:38:02.8719027Z             },
2026-06-23T09:38:02.8719227Z             {
2026-06-23T09:38:02.8719465Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.8719751Z               "line": 948
2026-06-23T09:38:02.8719965Z             }
2026-06-23T09:38:02.8720157Z           ]
2026-06-23T09:38:02.8720346Z         }
2026-06-23T09:38:02.8720537Z       }
2026-06-23T09:38:02.8720725Z     },
2026-06-23T09:38:02.8720912Z     {
2026-06-23T09:38:02.8721121Z       "id": "REQ-API-4",
2026-06-23T09:38:02.8722851Z       "title": "api resolves the adapter manifest (+ profile + install dir) from `--adapter name:profile` via the registry when `--manifest` is omitted; `--manifest` becomes an optional OVERRIDE (unregistered / local-dev manifests). Removes the require-both-flags redundancy — a registered adapter's live bringup / digest / capability needs only `--adapter` — and yields the precise install dir (the record's source_dir) rather than the --manifest parent, closing the copy-mode psyche-binary edge (v0.8.0)",
2026-06-23T09:38:02.8724243Z       "requiredStages": [
2026-06-23T09:38:02.8724472Z         "doc",
2026-06-23T09:38:02.8724678Z         "impl",
2026-06-23T09:38:02.8724877Z         "unit"
2026-06-23T09:38:02.8725082Z       ],
2026-06-23T09:38:02.8725269Z       "stages": {
2026-06-23T09:38:02.8725463Z         "doc": {
2026-06-23T09:38:02.8725677Z           "complete": true,
2026-06-23T09:38:02.8725914Z           "evidence": [
2026-06-23T09:38:02.8782025Z             {
2026-06-23T09:38:02.8782364Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.8782668Z               "line": 158
2026-06-23T09:38:02.8782918Z             }
2026-06-23T09:38:02.8783117Z           ]
2026-06-23T09:38:02.8783317Z         },
2026-06-23T09:38:02.8783518Z         "impl": {
2026-06-23T09:38:02.8783783Z           "complete": true,
2026-06-23T09:38:02.8784024Z           "evidence": [
2026-06-23T09:38:02.8784235Z             {
2026-06-23T09:38:02.8784482Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:02.8784763Z               "line": 484
2026-06-23T09:38:02.8784982Z             }
2026-06-23T09:38:02.8785179Z           ]
2026-06-23T09:38:02.8785368Z         },
2026-06-23T09:38:02.8785559Z         "int": {
2026-06-23T09:38:02.8785780Z           "complete": false,
2026-06-23T09:38:02.8786022Z           "evidence": []
2026-06-23T09:38:02.8786241Z         },
2026-06-23T09:38:02.8786443Z         "unit": {
2026-06-23T09:38:02.8786659Z           "complete": true,
2026-06-23T09:38:02.8786894Z           "evidence": [
2026-06-23T09:38:02.8787099Z             {
2026-06-23T09:38:02.8787332Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:02.8787603Z               "line": 657
2026-06-23T09:38:02.8787814Z             },
2026-06-23T09:38:02.8788015Z             {
2026-06-23T09:38:02.8788524Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:02.8788805Z               "line": 681
2026-06-23T09:38:02.8789113Z             },
2026-06-23T09:38:02.8789312Z             {
2026-06-23T09:38:02.8789546Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:02.8789817Z               "line": 705
2026-06-23T09:38:02.8790037Z             }
2026-06-23T09:38:02.8790239Z           ]
2026-06-23T09:38:02.8790553Z         }
2026-06-23T09:38:02.8790753Z       }
2026-06-23T09:38:02.8790944Z     },
2026-06-23T09:38:02.8791129Z     {
2026-06-23T09:38:02.8791329Z       "id": "REQ-ARCH-1",
2026-06-23T09:38:02.8791602Z       "title": "Many small acyclically-layered crates",
2026-06-23T09:38:02.8791905Z       "requiredStages": [
2026-06-23T09:38:02.8792127Z         "impl"
2026-06-23T09:38:02.8792332Z       ],
2026-06-23T09:38:02.8792529Z       "stages": {
2026-06-23T09:38:02.8792737Z         "doc": {
2026-06-23T09:38:02.8792953Z           "complete": false,
2026-06-23T09:38:02.8793205Z           "evidence": []
2026-06-23T09:38:02.8793410Z         },
2026-06-23T09:38:02.8793605Z         "impl": {
2026-06-23T09:38:02.8793812Z           "complete": true,
2026-06-23T09:38:02.8794050Z           "evidence": [
2026-06-23T09:38:02.8794253Z             {
2026-06-23T09:38:02.8794495Z               "path": "crates/spt-msg/src/lib.rs",
2026-06-23T09:38:02.8794761Z               "line": 18
2026-06-23T09:38:02.8794989Z             },
2026-06-23T09:38:02.8795190Z             {
2026-06-23T09:38:02.8795429Z               "path": "crates/spt-proto/src/lib.rs",
2026-06-23T09:38:02.8795701Z               "line": 12
2026-06-23T09:38:02.8795915Z             },
2026-06-23T09:38:02.8796115Z             {
2026-06-23T09:38:02.8796345Z               "path": "crates/spt-store/src/lib.rs",
2026-06-23T09:38:02.8796621Z               "line": 12
2026-06-23T09:38:02.8796835Z             }
2026-06-23T09:38:02.8797027Z           ]
2026-06-23T09:38:02.8797224Z         },
2026-06-23T09:38:02.8797425Z         "int": {
2026-06-23T09:38:02.8797645Z           "complete": false,
2026-06-23T09:38:02.8797878Z           "evidence": []
2026-06-23T09:38:02.8798088Z         },
2026-06-23T09:38:02.8798284Z         "unit": {
2026-06-23T09:38:02.8798502Z           "complete": false,
2026-06-23T09:38:02.8798741Z           "evidence": []
2026-06-23T09:38:02.8799027Z         }
2026-06-23T09:38:02.8799229Z       }
2026-06-23T09:38:02.8799417Z     },
2026-06-23T09:38:02.8799612Z     {
2026-06-23T09:38:02.8799810Z       "id": "REQ-ARCH-2",
2026-06-23T09:38:02.8800130Z       "title": "Public SDK surface is spt-proto, spt-runtime, spt-msg",
2026-06-23T09:38:02.8800474Z       "requiredStages": [
2026-06-23T09:38:02.8800697Z         "impl"
2026-06-23T09:38:02.8800898Z       ],
2026-06-23T09:38:02.8801084Z       "stages": {
2026-06-23T09:38:02.8801294Z         "doc": {
2026-06-23T09:38:02.8801500Z           "complete": false,
2026-06-23T09:38:02.8801738Z           "evidence": []
2026-06-23T09:38:02.8801942Z         },
2026-06-23T09:38:02.8802134Z         "impl": {
2026-06-23T09:38:02.8802360Z           "complete": true,
2026-06-23T09:38:02.8802596Z           "evidence": [
2026-06-23T09:38:02.8802807Z             {
2026-06-23T09:38:02.8803050Z               "path": "crates/spt-runtime/src/lib.rs",
2026-06-23T09:38:02.8803326Z               "line": 18
2026-06-23T09:38:02.8803536Z             }
2026-06-23T09:38:02.8803728Z           ]
2026-06-23T09:38:02.8803912Z         },
2026-06-23T09:38:02.8804109Z         "int": {
2026-06-23T09:38:02.8804319Z           "complete": false,
2026-06-23T09:38:02.8804547Z           "evidence": []
2026-06-23T09:38:02.8804766Z         },
2026-06-23T09:38:02.8804961Z         "unit": {
2026-06-23T09:38:02.8805168Z           "complete": false,
2026-06-23T09:38:02.8805399Z           "evidence": []
2026-06-23T09:38:02.8805607Z         }
2026-06-23T09:38:02.8805797Z       }
2026-06-23T09:38:02.8805994Z     },
2026-06-23T09:38:02.8806184Z     {
2026-06-23T09:38:02.8806389Z       "id": "REQ-ARCH-3",
2026-06-23T09:38:02.8806847Z       "title": "Wire-protocol version independent of crate semver, N-1 compat window",
2026-06-23T09:38:02.8807239Z       "requiredStages": [
2026-06-23T09:38:02.8807462Z         "impl",
2026-06-23T09:38:02.8807670Z         "unit"
2026-06-23T09:38:02.8807876Z       ],
2026-06-23T09:38:02.8808071Z       "stages": {
2026-06-23T09:38:02.8808324Z         "doc": {
2026-06-23T09:38:02.8808534Z           "complete": false,
2026-06-23T09:38:02.8808868Z           "evidence": []
2026-06-23T09:38:02.8809155Z         },
2026-06-23T09:38:02.8809344Z         "impl": {
2026-06-23T09:38:02.8809559Z           "complete": true,
2026-06-23T09:38:02.8809780Z           "evidence": [
2026-06-23T09:38:02.8809996Z             {
2026-06-23T09:38:02.8810242Z               "path": "crates/spt-proto/src/version.rs",
2026-06-23T09:38:02.8810534Z               "line": 34
2026-06-23T09:38:02.8810748Z             },
2026-06-23T09:38:02.8810943Z             {
2026-06-23T09:38:02.8811182Z               "path": "crates/spt-proto/src/version.rs",
2026-06-23T09:38:02.8811473Z               "line": 41
2026-06-23T09:38:02.8811678Z             }
2026-06-23T09:38:02.8811868Z           ]
2026-06-23T09:38:02.8812050Z         },
2026-06-23T09:38:02.8812244Z         "int": {
2026-06-23T09:38:02.8812464Z           "complete": false,
2026-06-23T09:38:02.8812694Z           "evidence": []
2026-06-23T09:38:02.8812911Z         },
2026-06-23T09:38:02.8813100Z         "unit": {
2026-06-23T09:38:02.8813314Z           "complete": true,
2026-06-23T09:38:02.8813548Z           "evidence": [
2026-06-23T09:38:02.8813763Z             {
2026-06-23T09:38:02.8814001Z               "path": "crates/spt-proto/src/version.rs",
2026-06-23T09:38:02.8814278Z               "line": 51
2026-06-23T09:38:02.8814492Z             },
2026-06-23T09:38:02.8814697Z             {
2026-06-23T09:38:02.8814922Z               "path": "crates/spt-proto/src/version.rs",
2026-06-23T09:38:02.8815199Z               "line": 71
2026-06-23T09:38:02.8815416Z             },
2026-06-23T09:38:02.8815616Z             {
2026-06-23T09:38:02.8815862Z               "path": "crates/spt-proto/src/version.rs",
2026-06-23T09:38:02.8816153Z               "line": 83
2026-06-23T09:38:02.8816367Z             }
2026-06-23T09:38:02.8816563Z           ]
2026-06-23T09:38:02.8816758Z         }
2026-06-23T09:38:02.8816949Z       }
2026-06-23T09:38:02.8817141Z     },
2026-06-23T09:38:02.8817330Z     {
2026-06-23T09:38:02.8817536Z       "id": "REQ-ARCH-4",
2026-06-23T09:38:02.8817874Z       "title": "Copy-verbatim the commodity layer from the sister project",
2026-06-23T09:38:02.8818236Z       "requiredStages": [
2026-06-23T09:38:02.8818470Z         "impl",
2026-06-23T09:38:02.8818678Z         "unit"
2026-06-23T09:38:02.8818875Z       ],
2026-06-23T09:38:02.8819146Z       "stages": {
2026-06-23T09:38:02.8819352Z         "doc": {
2026-06-23T09:38:02.8819570Z           "complete": false,
2026-06-23T09:38:02.8819804Z           "evidence": []
2026-06-23T09:38:02.8820034Z         },
2026-06-23T09:38:02.8820228Z         "impl": {
2026-06-23T09:38:02.8820447Z           "complete": true,
2026-06-23T09:38:02.8820686Z           "evidence": [
2026-06-23T09:38:02.8820887Z             {
2026-06-23T09:38:02.8821126Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8821408Z               "line": 165
2026-06-23T09:38:02.8821614Z             },
2026-06-23T09:38:02.8821813Z             {
2026-06-23T09:38:02.8822057Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8822328Z               "line": 188
2026-06-23T09:38:02.8822620Z             },
2026-06-23T09:38:02.8822925Z             {
2026-06-23T09:38:02.8823367Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8823745Z               "line": 208
2026-06-23T09:38:02.8824032Z             },
2026-06-23T09:38:02.8824380Z             {
2026-06-23T09:38:02.8824708Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8825115Z               "line": 223
2026-06-23T09:38:02.8825482Z             },
2026-06-23T09:38:02.8825754Z             {
2026-06-23T09:38:02.8826251Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8826626Z               "line": 273
2026-06-23T09:38:02.8826970Z             }
2026-06-23T09:38:02.8827284Z           ]
2026-06-23T09:38:02.8827562Z         },
2026-06-23T09:38:02.8827904Z         "int": {
2026-06-23T09:38:02.8828239Z           "complete": false,
2026-06-23T09:38:02.8828602Z           "evidence": []
2026-06-23T09:38:02.8829097Z         },
2026-06-23T09:38:02.8829397Z         "unit": {
2026-06-23T09:38:02.8829750Z           "complete": true,
2026-06-23T09:38:02.8830069Z           "evidence": [
2026-06-23T09:38:02.8830369Z             {
2026-06-23T09:38:02.8830746Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8831164Z               "line": 334
2026-06-23T09:38:02.8831506Z             },
2026-06-23T09:38:02.8831796Z             {
2026-06-23T09:38:02.8832110Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8832527Z               "line": 344
2026-06-23T09:38:02.8832846Z             },
2026-06-23T09:38:02.8833157Z             {
2026-06-23T09:38:02.8833541Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8833884Z               "line": 355
2026-06-23T09:38:02.8834234Z             },
2026-06-23T09:38:02.8834530Z             {
2026-06-23T09:38:02.8834869Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8835269Z               "line": 366
2026-06-23T09:38:02.8835560Z             },
2026-06-23T09:38:02.8835889Z             {
2026-06-23T09:38:02.8836261Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8836656Z               "line": 378
2026-06-23T09:38:02.8836987Z             },
2026-06-23T09:38:02.8837273Z             {
2026-06-23T09:38:02.8837650Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8838013Z               "line": 391
2026-06-23T09:38:02.8838294Z             },
2026-06-23T09:38:02.8838694Z             {
2026-06-23T09:38:02.8839099Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8839523Z               "line": 402
2026-06-23T09:38:02.8839833Z             },
2026-06-23T09:38:02.8840104Z             {
2026-06-23T09:38:02.8840491Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8840854Z               "line": 419
2026-06-23T09:38:02.8841192Z             },
2026-06-23T09:38:02.8841526Z             {
2026-06-23T09:38:02.8841853Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.8842261Z               "line": 547
2026-06-23T09:38:02.8842557Z             }
2026-06-23T09:38:02.8842872Z           ]
2026-06-23T09:38:02.8843167Z         }
2026-06-23T09:38:02.8843458Z       }
2026-06-23T09:38:02.8843778Z     },
2026-06-23T09:38:02.8844088Z     {
2026-06-23T09:38:02.8844407Z       "id": "REQ-CLI-1",
2026-06-23T09:38:02.8845814Z       "title": "spt endpoint noun namespace: absorbs fork/suspend/wake/shutdown/rename/stop/digest + access (ported 1:1: allow|revoke|open|list, decision 21) + description (ex-resources blurb; bare=show, set=author); merged endpoint list [--local|--subnet <name>] grouped by subnet with SELF pinned, --detail adding the ex-resources yellow-pages blurb projection; bare spt endpoint = the list (M8 decisions 1-2, 25)",
2026-06-23T09:38:02.8847106Z       "requiredStages": [
2026-06-23T09:38:02.8847470Z         "impl",
2026-06-23T09:38:02.8847795Z         "unit"
2026-06-23T09:38:02.8848129Z       ],
2026-06-23T09:38:02.8848424Z       "stages": {
2026-06-23T09:38:02.8848739Z         "doc": {
2026-06-23T09:38:02.8849160Z           "complete": false,
2026-06-23T09:38:02.8849494Z           "evidence": []
2026-06-23T09:38:02.8849780Z         },
2026-06-23T09:38:02.8850116Z         "impl": {
2026-06-23T09:38:02.8850465Z           "complete": true,
2026-06-23T09:38:02.8850827Z           "evidence": [
2026-06-23T09:38:02.8851147Z             {
2026-06-23T09:38:02.8851447Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8851871Z               "line": 225
2026-06-23T09:38:02.8852275Z             },
2026-06-23T09:38:02.8852606Z             {
2026-06-23T09:38:02.8852945Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8853304Z               "line": 1162
2026-06-23T09:38:02.8853685Z             },
2026-06-23T09:38:02.8853962Z             {
2026-06-23T09:38:02.8854310Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8854795Z               "line": 2069
2026-06-23T09:38:02.8855118Z             },
2026-06-23T09:38:02.8855454Z             {
2026-06-23T09:38:02.8855755Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8856195Z               "line": 3774
2026-06-23T09:38:02.8856514Z             }
2026-06-23T09:38:02.8856795Z           ]
2026-06-23T09:38:02.8857110Z         },
2026-06-23T09:38:02.8857411Z         "int": {
2026-06-23T09:38:02.8857694Z           "complete": false,
2026-06-23T09:38:02.8858074Z           "evidence": []
2026-06-23T09:38:02.8858389Z         },
2026-06-23T09:38:02.8858743Z         "unit": {
2026-06-23T09:38:02.8859175Z           "complete": true,
2026-06-23T09:38:02.8859480Z           "evidence": [
2026-06-23T09:38:02.8859833Z             {
2026-06-23T09:38:02.8860162Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8860542Z               "line": 9324
2026-06-23T09:38:02.8860881Z             }
2026-06-23T09:38:02.8861177Z           ]
2026-06-23T09:38:02.8861534Z         }
2026-06-23T09:38:02.8861816Z       }
2026-06-23T09:38:02.8862121Z     },
2026-06-23T09:38:02.8862426Z     {
2026-06-23T09:38:02.8862717Z       "id": "REQ-CLI-2",
2026-06-23T09:38:02.8863743Z       "title": "spt daemon noun: run|stop|status (hidden daemon verb becomes daemon run; agent-endpoint shutdown keeps its name under endpoint); daemon status renders the pump heartbeat (last-tick recency) so a half-dead daemon is never rendered implied-healthy (M8 decisions 5, 23)",
2026-06-23T09:38:02.8864711Z       "requiredStages": [
2026-06-23T09:38:02.8865050Z         "impl",
2026-06-23T09:38:02.8865365Z         "unit"
2026-06-23T09:38:02.8865645Z       ],
2026-06-23T09:38:02.8865986Z       "stages": {
2026-06-23T09:38:02.8866276Z         "doc": {
2026-06-23T09:38:02.8866564Z           "complete": false,
2026-06-23T09:38:02.8866968Z           "evidence": []
2026-06-23T09:38:02.8867302Z         },
2026-06-23T09:38:02.8867631Z         "impl": {
2026-06-23T09:38:02.8867932Z           "complete": true,
2026-06-23T09:38:02.8868259Z           "evidence": [
2026-06-23T09:38:02.8868620Z             {
2026-06-23T09:38:02.8869016Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.8869445Z               "line": 414
2026-06-23T09:38:02.8869816Z             },
2026-06-23T09:38:02.8870136Z             {
2026-06-23T09:38:02.8870518Z               "path": "crates/spt-daemon/src/endpoint.rs",
2026-06-23T09:38:02.8870905Z               "line": 97
2026-06-23T09:38:02.8871232Z             },
2026-06-23T09:38:02.8871532Z             {
2026-06-23T09:38:02.8871881Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:02.8872281Z               "line": 256
2026-06-23T09:38:02.8872629Z             },
2026-06-23T09:38:02.8872938Z             {
2026-06-23T09:38:02.8873287Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8873636Z               "line": 439
2026-06-23T09:38:02.8873974Z             },
2026-06-23T09:38:02.8874270Z             {
2026-06-23T09:38:02.8874561Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8874991Z               "line": 1244
2026-06-23T09:38:02.8875325Z             },
2026-06-23T09:38:02.8875635Z             {
2026-06-23T09:38:02.8875955Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8876291Z               "line": 2312
2026-06-23T09:38:02.8876656Z             },
2026-06-23T09:38:02.8876947Z             {
2026-06-23T09:38:02.8883400Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8883748Z               "line": 2401
2026-06-23T09:38:02.8883979Z             },
2026-06-23T09:38:02.8884182Z             {
2026-06-23T09:38:02.8884577Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8884864Z               "line": 2462
2026-06-23T09:38:02.8885098Z             }
2026-06-23T09:38:02.8885294Z           ]
2026-06-23T09:38:02.8885484Z         },
2026-06-23T09:38:02.8885675Z         "int": {
2026-06-23T09:38:02.8885894Z           "complete": false,
2026-06-23T09:38:02.8886137Z           "evidence": []
2026-06-23T09:38:02.8886495Z         },
2026-06-23T09:38:02.8886695Z         "unit": {
2026-06-23T09:38:02.8886913Z           "complete": true,
2026-06-23T09:38:02.8887154Z           "evidence": [
2026-06-23T09:38:02.8887369Z             {
2026-06-23T09:38:02.8887622Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:02.8887908Z               "line": 338
2026-06-23T09:38:02.8888132Z             },
2026-06-23T09:38:02.8888323Z             {
2026-06-23T09:38:02.8888552Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8888824Z               "line": 9496
2026-06-23T09:38:02.8889153Z             }
2026-06-23T09:38:02.8889351Z           ]
2026-06-23T09:38:02.8889541Z         }
2026-06-23T09:38:02.8889725Z       }
2026-06-23T09:38:02.8889912Z     },
2026-06-23T09:38:02.8890108Z     {
2026-06-23T09:38:02.8890307Z       "id": "REQ-CLI-3",
2026-06-23T09:38:02.8891190Z       "title": "Agent hot path stays flat across the M8 reorg: send/ring/ready/whoami/how-to unchanged; notify moves to subnet notify while notif stays top-level; breaking renames land clean with no deprecation shims (zero external CLI consumers pre-spt-claude-code) (M8 decisions 3-4, 9)",
2026-06-23T09:38:02.8892078Z       "requiredStages": [
2026-06-23T09:38:02.8892309Z         "impl",
2026-06-23T09:38:02.8892518Z         "unit"
2026-06-23T09:38:02.8892715Z       ],
2026-06-23T09:38:02.8892905Z       "stages": {
2026-06-23T09:38:02.8893106Z         "doc": {
2026-06-23T09:38:02.8893321Z           "complete": false,
2026-06-23T09:38:02.8893558Z           "evidence": []
2026-06-23T09:38:02.8893782Z         },
2026-06-23T09:38:02.8893975Z         "impl": {
2026-06-23T09:38:02.8894192Z           "complete": true,
2026-06-23T09:38:02.8894425Z           "evidence": [
2026-06-23T09:38:02.8894635Z             {
2026-06-23T09:38:02.8894857Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8895128Z               "line": 1156
2026-06-23T09:38:02.8895357Z             }
2026-06-23T09:38:02.8895554Z           ]
2026-06-23T09:38:02.8895758Z         },
2026-06-23T09:38:02.8895949Z         "int": {
2026-06-23T09:38:02.8896164Z           "complete": false,
2026-06-23T09:38:02.8896402Z           "evidence": []
2026-06-23T09:38:02.8896611Z         },
2026-06-23T09:38:02.8896803Z         "unit": {
2026-06-23T09:38:02.8897022Z           "complete": true,
2026-06-23T09:38:02.8897250Z           "evidence": [
2026-06-23T09:38:02.8897469Z             {
2026-06-23T09:38:02.8897695Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8897962Z               "line": 9289
2026-06-23T09:38:02.8898173Z             }
2026-06-23T09:38:02.8898368Z           ]
2026-06-23T09:38:02.8898563Z         }
2026-06-23T09:38:02.8898750Z       }
2026-06-23T09:38:02.8898930Z     },
2026-06-23T09:38:02.8899197Z     {
2026-06-23T09:38:02.8899398Z       "id": "REQ-CLI-4",
2026-06-23T09:38:02.8901807Z       "title": "User-facing CLI output is human-readable: DIRECT-USER commands (e.g. adapter update/list/use) render friendly prose instead of raw CODE:RESULT markers — \"claude-spt is up to date (0.2.0).\" not \"ADAPTER_UPDATE_UPTODATE:claude-spt: installed 0.2.0, latest 0.2.0\". Strictly bounded to the direct-user surface: the adapter-PARSED bringup tokens (SEEDED/BOUND/READY/NO_SEED on seed/listen, which adapters grep) stay machine-parseable — humanization is additive (a human line beside the marker, or a --porcelain/--quiet split), never a silent rename of a dual-contract marker. The user-facing bringup composition belongs to the adapter (perri); this REQ owns only the direct-user CLI surface. (v0.9.0)",
2026-06-23T09:38:02.8903871Z       "requiredStages": [],
2026-06-23T09:38:02.8904118Z       "stages": {
2026-06-23T09:38:02.8904329Z         "doc": {
2026-06-23T09:38:02.8904558Z           "complete": false,
2026-06-23T09:38:02.8904792Z           "evidence": []
2026-06-23T09:38:02.8905014Z         },
2026-06-23T09:38:02.8905209Z         "impl": {
2026-06-23T09:38:02.8905427Z           "complete": true,
2026-06-23T09:38:02.8905650Z           "evidence": [
2026-06-23T09:38:02.8905955Z             {
2026-06-23T09:38:02.8906190Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8906471Z               "line": 6364
2026-06-23T09:38:02.8906690Z             }
2026-06-23T09:38:02.8906890Z           ]
2026-06-23T09:38:02.8907082Z         },
2026-06-23T09:38:02.8907272Z         "int": {
2026-06-23T09:38:02.8907481Z           "complete": false,
2026-06-23T09:38:02.8907722Z           "evidence": []
2026-06-23T09:38:02.8907938Z         },
2026-06-23T09:38:02.8908136Z         "unit": {
2026-06-23T09:38:02.8908356Z           "complete": false,
2026-06-23T09:38:02.8908589Z           "evidence": []
2026-06-23T09:38:02.8908804Z         }
2026-06-23T09:38:02.8909076Z       }
2026-06-23T09:38:02.8909266Z     },
2026-06-23T09:38:02.8909452Z     {
2026-06-23T09:38:02.8909672Z       "id": "REQ-CLI-HELP-MARKDOWN",
2026-06-23T09:38:02.8912878Z       "title": "`spt --help` (and every subcommand --help) renders the inline Markdown authored in the clap doc-comments as terminal styling, never as literal markers: `**bold**` → ANSI bold, `` `code` `` → ANSI cyan, `[text](url)` → `text`. The markers are STRIPPED either way — a raw `**` or backtick must NEVER reach the user (the operator-reported v0.12.0 defect: help text reads `**ctrl-b**` and stray backticks verbatim). Color/bold escapes are emitted ONLY when the help is going to a real terminal AND color is not suppressed (NO_COLOR unset · CLICOLOR != 0 · CLICOLOR_FORCE forces on); a pipe / redirect / CI / NO_COLOR falls back to strip-only (clean plaintext, zero escapes) so machine-readable help is byte-identical regardless of marker syntax. Pure transform over the clap-rendered help string at the single run()/bare_invocation chokepoint; preserves pre-existing ANSI (CSI sequences passed through untouched), never spans markers across a newline, leaves unmatched/empty markers literal, and does not alter the help layout. (v0.12.1)",
2026-06-23T09:38:02.8915736Z       "requiredStages": [
2026-06-23T09:38:02.8915977Z         "impl",
2026-06-23T09:38:02.8916182Z         "unit"
2026-06-23T09:38:02.8916388Z       ],
2026-06-23T09:38:02.8916582Z       "stages": {
2026-06-23T09:38:02.8916788Z         "doc": {
2026-06-23T09:38:02.8917003Z           "complete": false,
2026-06-23T09:38:02.8917245Z           "evidence": []
2026-06-23T09:38:02.8917451Z         },
2026-06-23T09:38:02.8917647Z         "impl": {
2026-06-23T09:38:02.8917865Z           "complete": true,
2026-06-23T09:38:02.8918094Z           "evidence": [
2026-06-23T09:38:02.8918305Z             {
2026-06-23T09:38:02.8918551Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8918824Z               "line": 8
2026-06-23T09:38:02.8919111Z             },
2026-06-23T09:38:02.8919307Z             {
2026-06-23T09:38:02.8919527Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8919808Z               "line": 51
2026-06-23T09:38:02.8920026Z             },
2026-06-23T09:38:02.8920223Z             {
2026-06-23T09:38:02.8920442Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8920718Z               "line": 82
2026-06-23T09:38:02.8920937Z             },
2026-06-23T09:38:02.8921132Z             {
2026-06-23T09:38:02.8921362Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8921630Z               "line": 229
2026-06-23T09:38:02.8921850Z             }
2026-06-23T09:38:02.8922040Z           ]
2026-06-23T09:38:02.8922226Z         },
2026-06-23T09:38:02.8922423Z         "int": {
2026-06-23T09:38:02.8922636Z           "complete": false,
2026-06-23T09:38:02.8922865Z           "evidence": []
2026-06-23T09:38:02.8923189Z         },
2026-06-23T09:38:02.8923386Z         "unit": {
2026-06-23T09:38:02.8923609Z           "complete": true,
2026-06-23T09:38:02.8923847Z           "evidence": [
2026-06-23T09:38:02.8924067Z             {
2026-06-23T09:38:02.8924294Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8924566Z               "line": 249
2026-06-23T09:38:02.8924787Z             },
2026-06-23T09:38:02.8925072Z             {
2026-06-23T09:38:02.8925297Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8925568Z               "line": 256
2026-06-23T09:38:02.8925787Z             },
2026-06-23T09:38:02.8925984Z             {
2026-06-23T09:38:02.8926215Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8926484Z               "line": 263
2026-06-23T09:38:02.8926700Z             },
2026-06-23T09:38:02.8926900Z             {
2026-06-23T09:38:02.8927123Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8927400Z               "line": 270
2026-06-23T09:38:02.8927611Z             },
2026-06-23T09:38:02.8927800Z             {
2026-06-23T09:38:02.8928025Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8928291Z               "line": 297
2026-06-23T09:38:02.8928498Z             },
2026-06-23T09:38:02.8928697Z             {
2026-06-23T09:38:02.8928921Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8929276Z               "line": 307
2026-06-23T09:38:02.8929486Z             },
2026-06-23T09:38:02.8929681Z             {
2026-06-23T09:38:02.8929892Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8930163Z               "line": 317
2026-06-23T09:38:02.8930377Z             },
2026-06-23T09:38:02.8930577Z             {
2026-06-23T09:38:02.8930802Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8931065Z               "line": 331
2026-06-23T09:38:02.8931288Z             },
2026-06-23T09:38:02.8931483Z             {
2026-06-23T09:38:02.8931716Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8931985Z               "line": 340
2026-06-23T09:38:02.8932200Z             },
2026-06-23T09:38:02.8932396Z             {
2026-06-23T09:38:02.8932620Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8932891Z               "line": 348
2026-06-23T09:38:02.8933111Z             }
2026-06-23T09:38:02.8933308Z           ]
2026-06-23T09:38:02.8933497Z         }
2026-06-23T09:38:02.8933688Z       }
2026-06-23T09:38:02.8933874Z     },
2026-06-23T09:38:02.8934064Z     {
2026-06-23T09:38:02.8934280Z       "id": "REQ-CLI-OUTPUT-MARKDOWN",
2026-06-23T09:38:02.8939785Z       "title": "Human-prose COMMAND OUTPUT (not just `--help`) renders the inline Markdown authored in its source strings as terminal styling, never literal markers: `` `code` `` → ANSI cyan, `**bold**` → ANSI bold, `[text](url)` → `text`, markers STRIPPED either way. REQ-CLI-HELP-MARKDOWN only hooked the clap `--help` chokepoint, so command output still printed raw Markdown (audit: `spt how-to` topic text showed `# headers`/backticks, `spt subnet`/`subnet status` hint footers showed stray backticks, the daemon-status `not running` line, the `ENDPOINT_RUN_STARTED` attach hint, and the daemon's `SUBNET_DETACHED` startup line — 13 prose surfaces). The same line-bounded pure `helpfmt::render` is applied at each emit site, color-gated by the OUTPUT STREAM's own tty (`stdout_color` for print/println, the new `stderr_color` for eprintln). HARNESS-SAFETY (binding): color is tty-gated, so an adapter (piped / non-tty / NO_COLOR) gets STRIP mode = zero ANSI + markers removed; every dual-contract MACHINE token on a rendered line (`ENDPOINT_RUN_STARTED:`, `NO_SUCH_TOPIC:`, `SUBNET_DETACHED:`) carries NO Markdown markers, so it survives strip byte-intact — the adapter parse is never perturbed. Pure-machine output (the `<EVENT …>` envelope, bringup parse-tokens SEEDED/BOUND/READY/NO_SEED, `--json`, QR) is NEVER routed through the renderer. The one spt-daemon source string (`SUBNET_DETACHED`, the bin-local renderer is unreachable from the daemon crate) is authored marker-free instead. (v0.12.2)",
2026-06-23T09:38:02.8943780Z       "requiredStages": [
2026-06-23T09:38:02.8944000Z         "impl",
2026-06-23T09:38:02.8944201Z         "unit"
2026-06-23T09:38:02.8944396Z       ],
2026-06-23T09:38:02.8944586Z       "stages": {
2026-06-23T09:38:02.8944797Z         "doc": {
2026-06-23T09:38:02.8945010Z           "complete": false,
2026-06-23T09:38:02.8945348Z           "evidence": []
2026-06-23T09:38:02.8945559Z         },
2026-06-23T09:38:02.8945759Z         "impl": {
2026-06-23T09:38:02.8945963Z           "complete": true,
2026-06-23T09:38:02.8946197Z           "evidence": [
2026-06-23T09:38:02.8946413Z             {
2026-06-23T09:38:02.8946659Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.8946950Z               "line": 141
2026-06-23T09:38:02.8947169Z             },
2026-06-23T09:38:02.8947364Z             {
2026-06-23T09:38:02.8947581Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8947853Z               "line": 1468
2026-06-23T09:38:02.8948068Z             },
2026-06-23T09:38:02.8948267Z             {
2026-06-23T09:38:02.8948482Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8948755Z               "line": 2499
2026-06-23T09:38:02.8949079Z             },
2026-06-23T09:38:02.8949285Z             {
2026-06-23T09:38:02.8949503Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8949769Z               "line": 5023
2026-06-23T09:38:02.8949981Z             },
2026-06-23T09:38:02.8950164Z             {
2026-06-23T09:38:02.8950387Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8950649Z               "line": 5121
2026-06-23T09:38:02.8950868Z             },
2026-06-23T09:38:02.8951068Z             {
2026-06-23T09:38:02.8951274Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8951536Z               "line": 5912
2026-06-23T09:38:02.8951754Z             },
2026-06-23T09:38:02.8951955Z             {
2026-06-23T09:38:02.8952185Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8952457Z               "line": 39
2026-06-23T09:38:02.8952674Z             }
2026-06-23T09:38:02.8952870Z           ]
2026-06-23T09:38:02.8953058Z         },
2026-06-23T09:38:02.8953241Z         "int": {
2026-06-23T09:38:02.8953454Z           "complete": false,
2026-06-23T09:38:02.8953687Z           "evidence": []
2026-06-23T09:38:02.8953912Z         },
2026-06-23T09:38:02.8954103Z         "unit": {
2026-06-23T09:38:02.8954307Z           "complete": true,
2026-06-23T09:38:02.8954546Z           "evidence": [
2026-06-23T09:38:02.8954757Z             {
2026-06-23T09:38:02.8954975Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8955246Z               "line": 11810
2026-06-23T09:38:02.8955461Z             },
2026-06-23T09:38:02.8955661Z             {
2026-06-23T09:38:02.8955899Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8956161Z               "line": 281
2026-06-23T09:38:02.8956390Z             },
2026-06-23T09:38:02.8956595Z             {
2026-06-23T09:38:02.8956819Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8957091Z               "line": 358
2026-06-23T09:38:02.8957312Z             },
2026-06-23T09:38:02.8957510Z             {
2026-06-23T09:38:02.8957734Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8958014Z               "line": 381
2026-06-23T09:38:02.8958232Z             },
2026-06-23T09:38:02.8958437Z             {
2026-06-23T09:38:02.8958662Z               "path": "crates/spt/src/helpfmt.rs",
2026-06-23T09:38:02.8958919Z               "line": 395
2026-06-23T09:38:02.8959206Z             }
2026-06-23T09:38:02.8959405Z           ]
2026-06-23T09:38:02.8959596Z         }
2026-06-23T09:38:02.8959786Z       }
2026-06-23T09:38:02.8959986Z     },
2026-06-23T09:38:02.8960169Z     {
2026-06-23T09:38:02.8960378Z       "id": "REQ-CONSENT-1",
2026-06-23T09:38:02.8961581Z       "title": "Consent grant store: capability x subject-agent x target-node rows, enforced at the target node, subnet-settable (replicates as security material near the trust store), revocable; gated-capability ids (remote-exec, instantiate-anywhere) reserved-but-refusing; v1 consumers are the shell spawn gates (CONTEXT Consent & security gates)",
2026-06-23T09:38:02.8962634Z       "requiredStages": [
2026-06-23T09:38:02.8962863Z         "impl",
2026-06-23T09:38:02.8963173Z         "unit"
2026-06-23T09:38:02.8963373Z       ],
2026-06-23T09:38:02.8963565Z       "stages": {
2026-06-23T09:38:02.8963771Z         "doc": {
2026-06-23T09:38:02.8963985Z           "complete": false,
2026-06-23T09:38:02.8964213Z           "evidence": []
2026-06-23T09:38:02.8964429Z         },
2026-06-23T09:38:02.8964625Z         "impl": {
2026-06-23T09:38:02.8964839Z           "complete": true,
2026-06-23T09:38:02.8965072Z           "evidence": [
2026-06-23T09:38:02.8965283Z             {
2026-06-23T09:38:02.8965535Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8965830Z               "line": 27
2026-06-23T09:38:02.8966045Z             },
2026-06-23T09:38:02.8966244Z             {
2026-06-23T09:38:02.8966483Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8966759Z               "line": 75
2026-06-23T09:38:02.8966969Z             },
2026-06-23T09:38:02.8967160Z             {
2026-06-23T09:38:02.8967388Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8967685Z               "line": 98
2026-06-23T09:38:02.8967905Z             },
2026-06-23T09:38:02.8968104Z             {
2026-06-23T09:38:02.8968342Z               "path": "crates/spt-store/src/grants.rs",
2026-06-23T09:38:02.8968611Z               "line": 82
2026-06-23T09:38:02.8968826Z             },
2026-06-23T09:38:02.8969093Z             {
2026-06-23T09:38:02.8969331Z               "path": "crates/spt-store/src/grants.rs",
2026-06-23T09:38:02.8969612Z               "line": 109
2026-06-23T09:38:02.8969836Z             },
2026-06-23T09:38:02.8970041Z             {
2026-06-23T09:38:02.8970275Z               "path": "crates/spt-store/src/grants.rs",
2026-06-23T09:38:02.8970542Z               "line": 127
2026-06-23T09:38:02.8970758Z             },
2026-06-23T09:38:02.8970957Z             {
2026-06-23T09:38:02.8971176Z               "path": "crates/spt-store/src/grants.rs",
2026-06-23T09:38:02.8971446Z               "line": 142
2026-06-23T09:38:02.8971669Z             },
2026-06-23T09:38:02.8971860Z             {
2026-06-23T09:38:02.8972075Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8972333Z               "line": 8113
2026-06-23T09:38:02.8972555Z             }
2026-06-23T09:38:02.8972742Z           ]
2026-06-23T09:38:02.8972842Z         },
2026-06-23T09:38:02.8972942Z         "int": {
2026-06-23T09:38:02.8973057Z           "complete": false,
2026-06-23T09:38:02.8973161Z           "evidence": []
2026-06-23T09:38:02.8973267Z         },
2026-06-23T09:38:02.8973386Z         "unit": {
2026-06-23T09:38:02.8973486Z           "complete": true,
2026-06-23T09:38:02.8973596Z           "evidence": [
2026-06-23T09:38:02.8973696Z             {
2026-06-23T09:38:02.8973842Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8973952Z               "line": 334
2026-06-23T09:38:02.8974046Z             },
2026-06-23T09:38:02.8974149Z             {
2026-06-23T09:38:02.8974278Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8974398Z               "line": 380
2026-06-23T09:38:02.8974497Z             },
2026-06-23T09:38:02.8974603Z             {
2026-06-23T09:38:02.8974750Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8974850Z               "line": 391
2026-06-23T09:38:02.8974946Z             },
2026-06-23T09:38:02.8975037Z             {
2026-06-23T09:38:02.8975180Z               "path": "crates/spt-store/src/grants.rs",
2026-06-23T09:38:02.8975285Z               "line": 165
2026-06-23T09:38:02.8975390Z             },
2026-06-23T09:38:02.8975494Z             {
2026-06-23T09:38:02.8975728Z               "path": "crates/spt-store/src/grants.rs",
2026-06-23T09:38:02.8975839Z               "line": 184
2026-06-23T09:38:02.8975938Z             },
2026-06-23T09:38:02.8976047Z             {
2026-06-23T09:38:02.8976182Z               "path": "crates/spt-store/src/grants.rs",
2026-06-23T09:38:02.8976295Z               "line": 204
2026-06-23T09:38:02.8976405Z             },
2026-06-23T09:38:02.8976596Z             {
2026-06-23T09:38:02.8976728Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8976833Z               "line": 9730
2026-06-23T09:38:02.8976944Z             }
2026-06-23T09:38:02.8977043Z           ]
2026-06-23T09:38:02.8977148Z         }
2026-06-23T09:38:02.8977254Z       }
2026-06-23T09:38:02.8977352Z     },
2026-06-23T09:38:02.8977454Z     {
2026-06-23T09:38:02.8977563Z       "id": "REQ-CONSENT-2",
2026-06-23T09:38:02.8978441Z       "title": "Interactive consent escalation: an ungated high-risk action routes a consent prompt to the user's most-recently-active session; allow-once / allow-always (writes a grant) / deny; pre-consent flags (can_shutdown, shell_wake_spawn_anywhere) author grants via manifest/settings (CONTEXT Consent & security gates)",
2026-06-23T09:38:02.8978559Z       "requiredStages": [
2026-06-23T09:38:02.8978660Z         "impl",
2026-06-23T09:38:02.8978771Z         "unit"
2026-06-23T09:38:02.8978873Z       ],
2026-06-23T09:38:02.8979125Z       "stages": {
2026-06-23T09:38:02.8979419Z         "doc": {
2026-06-23T09:38:02.8979552Z           "complete": false,
2026-06-23T09:38:02.8984843Z           "evidence": []
2026-06-23T09:38:02.8984967Z         },
2026-06-23T09:38:02.8985082Z         "impl": {
2026-06-23T09:38:02.8985197Z           "complete": true,
2026-06-23T09:38:02.8985306Z           "evidence": [
2026-06-23T09:38:02.8985401Z             {
2026-06-23T09:38:02.8985559Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8985663Z               "line": 140
2026-06-23T09:38:02.8985770Z             },
2026-06-23T09:38:02.8985883Z             {
2026-06-23T09:38:02.8986040Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8986150Z               "line": 165
2026-06-23T09:38:02.8986255Z             },
2026-06-23T09:38:02.8986350Z             {
2026-06-23T09:38:02.8986484Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8986598Z               "line": 199
2026-06-23T09:38:02.8986704Z             },
2026-06-23T09:38:02.8986804Z             {
2026-06-23T09:38:02.8986946Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8987053Z               "line": 241
2026-06-23T09:38:02.8987156Z             },
2026-06-23T09:38:02.8987245Z             {
2026-06-23T09:38:02.8987379Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8987485Z               "line": 269
2026-06-23T09:38:02.8987588Z             },
2026-06-23T09:38:02.8987685Z             {
2026-06-23T09:38:02.8987814Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8987922Z               "line": 300
2026-06-23T09:38:02.8988023Z             },
2026-06-23T09:38:02.8988128Z             {
2026-06-23T09:38:02.8988251Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8988367Z               "line": 7904
2026-06-23T09:38:02.8988461Z             },
2026-06-23T09:38:02.8988561Z             {
2026-06-23T09:38:02.8988691Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8988800Z               "line": 7962
2026-06-23T09:38:02.8988905Z             }
2026-06-23T09:38:02.8989095Z           ]
2026-06-23T09:38:02.8989195Z         },
2026-06-23T09:38:02.8989292Z         "int": {
2026-06-23T09:38:02.8989405Z           "complete": false,
2026-06-23T09:38:02.8989510Z           "evidence": []
2026-06-23T09:38:02.8989609Z         },
2026-06-23T09:38:02.8989709Z         "unit": {
2026-06-23T09:38:02.8989822Z           "complete": true,
2026-06-23T09:38:02.8989927Z           "evidence": [
2026-06-23T09:38:02.8990023Z             {
2026-06-23T09:38:02.8990309Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8990431Z               "line": 419
2026-06-23T09:38:02.8990532Z             },
2026-06-23T09:38:02.8990633Z             {
2026-06-23T09:38:02.8990775Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8990881Z               "line": 436
2026-06-23T09:38:02.8990985Z             },
2026-06-23T09:38:02.8991171Z             {
2026-06-23T09:38:02.8991314Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8991424Z               "line": 472
2026-06-23T09:38:02.8991525Z             },
2026-06-23T09:38:02.8991620Z             {
2026-06-23T09:38:02.8991762Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:02.8991874Z               "line": 516
2026-06-23T09:38:02.8991967Z             },
2026-06-23T09:38:02.8992068Z             {
2026-06-23T09:38:02.8992193Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8992310Z               "line": 11152
2026-06-23T09:38:02.8992405Z             },
2026-06-23T09:38:02.8992505Z             {
2026-06-23T09:38:02.8992632Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.8992731Z               "line": 11234
2026-06-23T09:38:02.8992837Z             }
2026-06-23T09:38:02.8992937Z           ]
2026-06-23T09:38:02.8993046Z         }
2026-06-23T09:38:02.8993143Z       }
2026-06-23T09:38:02.8993252Z     },
2026-06-23T09:38:02.8993356Z     {
2026-06-23T09:38:02.8993458Z       "id": "REQ-CONSENT-3",
2026-06-23T09:38:02.8995390Z       "title": "Per-capability approval gates (class-keyed): the require_approval enum may ride INDIVIDUAL [shell.capabilities] entries — gating the dangerous ACT, not just the spawn — with an optional class_key scoping the grant qualifier finer than the capability id ((owner endpoint x device class x node); a remembered HID-class attach grant never authorizes a storage-class attach). Reuses the grant store + interactive escalation + tighten-only floor (REQ-CONSENT-1/2 plumbing). Spawn gates govern EXISTENCE; capability gates govern ACTS — an explicitly distinct invariant (CONTEXT:283, ratified 2026-06-11 Gateway grill).",
2026-06-23T09:38:02.8995513Z       "requiredStages": [
2026-06-23T09:38:02.8995617Z         "doc",
2026-06-23T09:38:02.8995719Z         "impl",
2026-06-23T09:38:02.8995819Z         "unit",
2026-06-23T09:38:02.8995922Z         "int"
2026-06-23T09:38:02.8996029Z       ],
2026-06-23T09:38:02.8996129Z       "stages": {
2026-06-23T09:38:02.8996233Z         "doc": {
2026-06-23T09:38:02.8996334Z           "complete": true,
2026-06-23T09:38:02.8996433Z           "evidence": [
2026-06-23T09:38:02.8996533Z             {
2026-06-23T09:38:02.8996654Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.8996762Z               "line": 317
2026-06-23T09:38:02.8996867Z             }
2026-06-23T09:38:02.8996964Z           ]
2026-06-23T09:38:02.8997063Z         },
2026-06-23T09:38:02.8997163Z         "impl": {
2026-06-23T09:38:02.8997274Z           "complete": true,
2026-06-23T09:38:02.8997387Z           "evidence": [
2026-06-23T09:38:02.8997478Z             {
2026-06-23T09:38:02.8997636Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:02.8997739Z               "line": 123
2026-06-23T09:38:02.8997838Z             },
2026-06-23T09:38:02.8997940Z             {
2026-06-23T09:38:02.8998087Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:02.8998201Z               "line": 162
2026-06-23T09:38:02.8998293Z             },
2026-06-23T09:38:02.8998393Z             {
2026-06-23T09:38:02.8998545Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:02.8998655Z               "line": 291
2026-06-23T09:38:02.8998759Z             },
2026-06-23T09:38:02.8998859Z             {
2026-06-23T09:38:02.8999079Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.8999174Z               "line": 621
2026-06-23T09:38:02.8999280Z             },
2026-06-23T09:38:02.8999384Z             {
2026-06-23T09:38:02.8999623Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.8999732Z               "line": 871
2026-06-23T09:38:02.8999823Z             },
2026-06-23T09:38:02.8999923Z             {
2026-06-23T09:38:02.9000055Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9000160Z               "line": 8030
2026-06-23T09:38:02.9000264Z             }
2026-06-23T09:38:02.9000458Z           ]
2026-06-23T09:38:02.9000564Z         },
2026-06-23T09:38:02.9000668Z         "int": {
2026-06-23T09:38:02.9000787Z           "complete": true,
2026-06-23T09:38:02.9000892Z           "evidence": [
2026-06-23T09:38:02.9000997Z             {
2026-06-23T09:38:02.9001155Z               "path": "crates/spt/tests/shell_actgate_e2e.rs",
2026-06-23T09:38:02.9001255Z               "line": 16
2026-06-23T09:38:02.9001349Z             }
2026-06-23T09:38:02.9001446Z           ]
2026-06-23T09:38:02.9001550Z         },
2026-06-23T09:38:02.9001654Z         "unit": {
2026-06-23T09:38:02.9001770Z           "complete": true,
2026-06-23T09:38:02.9001874Z           "evidence": [
2026-06-23T09:38:02.9001969Z             {
2026-06-23T09:38:02.9002114Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:02.9002222Z               "line": 1019
2026-06-23T09:38:02.9002327Z             },
2026-06-23T09:38:02.9002419Z             {
2026-06-23T09:38:02.9002560Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:02.9002681Z               "line": 1066
2026-06-23T09:38:02.9002777Z             },
2026-06-23T09:38:02.9002880Z             {
2026-06-23T09:38:02.9003023Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.9003132Z               "line": 1441
2026-06-23T09:38:02.9003230Z             }
2026-06-23T09:38:02.9003335Z           ]
2026-06-23T09:38:02.9003440Z         }
2026-06-23T09:38:02.9003540Z       }
2026-06-23T09:38:02.9003635Z     },
2026-06-23T09:38:02.9003732Z     {
2026-06-23T09:38:02.9003854Z       "id": "REQ-CONV-1",
2026-06-23T09:38:02.9005286Z       "title": "Peer address seeding, both cold starts: durable peer-addrs.json (identity dir) maps peer pubkey → last-known dialable address; the pump's resolver consults it FIRST with id-only discovery fallback on miss or dial failure (a stale addr never strands a peer); written by the pairing ceremony (both sides, from the live connection) and by the pump on successful connect; post-join first sync and post-restart resync converge in seconds, not ~1 min (M8 decisions 14, 20)",
2026-06-23T09:38:02.9005404Z       "requiredStages": [
2026-06-23T09:38:02.9005513Z         "impl",
2026-06-23T09:38:02.9005613Z         "unit"
2026-06-23T09:38:02.9005712Z       ],
2026-06-23T09:38:02.9005820Z       "stages": {
2026-06-23T09:38:02.9005920Z         "doc": {
2026-06-23T09:38:02.9006041Z           "complete": false,
2026-06-23T09:38:02.9006140Z           "evidence": []
2026-06-23T09:38:02.9006245Z         },
2026-06-23T09:38:02.9006341Z         "impl": {
2026-06-23T09:38:02.9006459Z           "complete": true,
2026-06-23T09:38:02.9006570Z           "evidence": [
2026-06-23T09:38:02.9006660Z             {
2026-06-23T09:38:02.9006807Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9006918Z               "line": 938
2026-06-23T09:38:02.9007017Z             },
2026-06-23T09:38:02.9007113Z             {
2026-06-23T09:38:02.9007256Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:02.9007365Z               "line": 94
2026-06-23T09:38:02.9007451Z             },
2026-06-23T09:38:02.9007558Z             {
2026-06-23T09:38:02.9007699Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:02.9007810Z               "line": 345
2026-06-23T09:38:02.9007905Z             },
2026-06-23T09:38:02.9008014Z             {
2026-06-23T09:38:02.9008158Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:02.9008267Z               "line": 387
2026-06-23T09:38:02.9008366Z             },
2026-06-23T09:38:02.9008461Z             {
2026-06-23T09:38:02.9008671Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:02.9008780Z               "line": 472
2026-06-23T09:38:02.9008882Z             },
2026-06-23T09:38:02.9009052Z             {
2026-06-23T09:38:02.9009196Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9009305Z               "line": 667
2026-06-23T09:38:02.9009406Z             },
2026-06-23T09:38:02.9009606Z             {
2026-06-23T09:38:02.9009754Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9009863Z               "line": 693
2026-06-23T09:38:02.9009963Z             },
2026-06-23T09:38:02.9010059Z             {
2026-06-23T09:38:02.9010216Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:02.9010320Z               "line": 369
2026-06-23T09:38:02.9010418Z             },
2026-06-23T09:38:02.9010516Z             {
2026-06-23T09:38:02.9010658Z               "path": "crates/spt-store/src/peeraddrs.rs",
2026-06-23T09:38:02.9010768Z               "line": 19
2026-06-23T09:38:02.9010866Z             }
2026-06-23T09:38:02.9010965Z           ]
2026-06-23T09:38:02.9011066Z         },
2026-06-23T09:38:02.9011163Z         "int": {
2026-06-23T09:38:02.9011270Z           "complete": false,
2026-06-23T09:38:02.9011386Z           "evidence": []
2026-06-23T09:38:02.9011491Z         },
2026-06-23T09:38:02.9011585Z         "unit": {
2026-06-23T09:38:02.9011696Z           "complete": true,
2026-06-23T09:38:02.9011805Z           "evidence": [
2026-06-23T09:38:02.9011900Z             {
2026-06-23T09:38:02.9012039Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9012149Z               "line": 1263
2026-06-23T09:38:02.9012258Z             },
2026-06-23T09:38:02.9012349Z             {
2026-06-23T09:38:02.9012501Z               "path": "crates/spt-store/src/peeraddrs.rs",
2026-06-23T09:38:02.9012606Z               "line": 108
2026-06-23T09:38:02.9012707Z             },
2026-06-23T09:38:02.9012806Z             {
2026-06-23T09:38:02.9012956Z               "path": "crates/spt-store/src/peeraddrs.rs",
2026-06-23T09:38:02.9013069Z               "line": 134
2026-06-23T09:38:02.9013164Z             },
2026-06-23T09:38:02.9013270Z             {
2026-06-23T09:38:02.9013407Z               "path": "crates/spt-store/src/peeraddrs.rs",
2026-06-23T09:38:02.9013516Z               "line": 144
2026-06-23T09:38:02.9013625Z             }
2026-06-23T09:38:02.9013724Z           ]
2026-06-23T09:38:02.9013828Z         }
2026-06-23T09:38:02.9013924Z       }
2026-06-23T09:38:02.9014015Z     },
2026-06-23T09:38:02.9014114Z     {
2026-06-23T09:38:02.9014234Z       "id": "REQ-CONV-2",
2026-06-23T09:38:02.9015378Z       "title": "Event-driven advertisement: endpoint online/offline transitions (ready-listener start/stop, rest-state transition, perch death) trigger an immediate advertise_local + peer push as a WAKE of the existing pump loop (no second advertisement path — epoch lease + visibility gates ride unchanged); the cadence stays the steady-state floor (M8 decision 15)",
2026-06-23T09:38:02.9015488Z       "requiredStages": [
2026-06-23T09:38:02.9015589Z         "impl",
2026-06-23T09:38:02.9015687Z         "unit"
2026-06-23T09:38:02.9015793Z       ],
2026-06-23T09:38:02.9015890Z       "stages": {
2026-06-23T09:38:02.9015992Z         "doc": {
2026-06-23T09:38:02.9016110Z           "complete": false,
2026-06-23T09:38:02.9016216Z           "evidence": []
2026-06-23T09:38:02.9016328Z         },
2026-06-23T09:38:02.9016427Z         "impl": {
2026-06-23T09:38:02.9016543Z           "complete": true,
2026-06-23T09:38:02.9016643Z           "evidence": [
2026-06-23T09:38:02.9016738Z             {
2026-06-23T09:38:02.9016891Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9017000Z               "line": 617
2026-06-23T09:38:02.9017101Z             },
2026-06-23T09:38:02.9017192Z             {
2026-06-23T09:38:02.9017348Z               "path": "crates/spt-daemon/src/pump/registry.rs",
2026-06-23T09:38:02.9017568Z               "line": 119
2026-06-23T09:38:02.9017673Z             },
2026-06-23T09:38:02.9017769Z             {
2026-06-23T09:38:02.9017926Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9018030Z               "line": 841
2026-06-23T09:38:02.9018122Z             },
2026-06-23T09:38:02.9018230Z             {
2026-06-23T09:38:02.9018380Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9018554Z               "line": 852
2026-06-23T09:38:02.9018660Z             },
2026-06-23T09:38:02.9018757Z             {
2026-06-23T09:38:02.9018893Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:02.9019069Z               "line": 334
2026-06-23T09:38:02.9019179Z             },
2026-06-23T09:38:02.9019283Z             {
2026-06-23T09:38:02.9019413Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9019517Z               "line": 3724
2026-06-23T09:38:02.9019616Z             },
2026-06-23T09:38:02.9019718Z             {
2026-06-23T09:38:02.9019851Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9019956Z               "line": 3740
2026-06-23T09:38:02.9020056Z             },
2026-06-23T09:38:02.9020151Z             {
2026-06-23T09:38:02.9020270Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9020371Z               "line": 3825
2026-06-23T09:38:02.9020476Z             }
2026-06-23T09:38:02.9020580Z           ]
2026-06-23T09:38:02.9020682Z         },
2026-06-23T09:38:02.9020790Z         "int": {
2026-06-23T09:38:02.9020900Z           "complete": false,
2026-06-23T09:38:02.9021001Z           "evidence": []
2026-06-23T09:38:02.9021100Z         },
2026-06-23T09:38:02.9021199Z         "unit": {
2026-06-23T09:38:02.9021309Z           "complete": true,
2026-06-23T09:38:02.9021417Z           "evidence": [
2026-06-23T09:38:02.9021525Z             {
2026-06-23T09:38:02.9021670Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9021784Z               "line": 889
2026-06-23T09:38:02.9021884Z             },
2026-06-23T09:38:02.9021989Z             {
2026-06-23T09:38:02.9022131Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9022237Z               "line": 1014
2026-06-23T09:38:02.9022342Z             },
2026-06-23T09:38:02.9022441Z             {
2026-06-23T09:38:02.9022595Z               "path": "crates/spt-daemon/src/pump/registry.rs",
2026-06-23T09:38:02.9022704Z               "line": 215
2026-06-23T09:38:02.9022808Z             }
2026-06-23T09:38:02.9022905Z           ]
2026-06-23T09:38:02.9023009Z         }
2026-06-23T09:38:02.9023109Z       }
2026-06-23T09:38:02.9023201Z     },
2026-06-23T09:38:02.9023300Z     {
2026-06-23T09:38:02.9023414Z       "id": "REQ-DAEMON-1",
2026-06-23T09:38:02.9023610Z       "title": "One per-machine spt-daemon owning all per-machine state",
2026-06-23T09:38:02.9023720Z       "requiredStages": [
2026-06-23T09:38:02.9023820Z         "impl",
2026-06-23T09:38:02.9023916Z         "unit",
2026-06-23T09:38:02.9024024Z         "int"
2026-06-23T09:38:02.9024118Z       ],
2026-06-23T09:38:02.9024224Z       "stages": {
2026-06-23T09:38:02.9024322Z         "doc": {
2026-06-23T09:38:02.9024426Z           "complete": false,
2026-06-23T09:38:02.9024537Z           "evidence": []
2026-06-23T09:38:02.9024641Z         },
2026-06-23T09:38:02.9024736Z         "impl": {
2026-06-23T09:38:02.9024852Z           "complete": true,
2026-06-23T09:38:02.9024966Z           "evidence": [
2026-06-23T09:38:02.9025075Z             {
2026-06-23T09:38:02.9025219Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9025318Z               "line": 229
2026-06-23T09:38:02.9025423Z             },
2026-06-23T09:38:02.9025519Z             {
2026-06-23T09:38:02.9025666Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:02.9025772Z               "line": 12
2026-06-23T09:38:02.9025876Z             },
2026-06-23T09:38:02.9025967Z             {
2026-06-23T09:38:02.9026224Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9026334Z               "line": 16
2026-06-23T09:38:02.9026435Z             },
2026-06-23T09:38:02.9026543Z             {
2026-06-23T09:38:02.9026680Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9026786Z               "line": 507
2026-06-23T09:38:02.9026888Z             },
2026-06-23T09:38:02.9026983Z             {
2026-06-23T09:38:02.9027250Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9027356Z               "line": 24
2026-06-23T09:38:02.9027461Z             },
2026-06-23T09:38:02.9027560Z             {
2026-06-23T09:38:02.9027709Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9027819Z               "line": 262
2026-06-23T09:38:02.9027913Z             },
2026-06-23T09:38:02.9028014Z             {
2026-06-23T09:38:02.9028147Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9028252Z               "line": 279
2026-06-23T09:38:02.9028358Z             },
2026-06-23T09:38:02.9028462Z             {
2026-06-23T09:38:02.9028605Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9028711Z               "line": 361
2026-06-23T09:38:02.9028815Z             },
2026-06-23T09:38:02.9028915Z             {
2026-06-23T09:38:02.9029438Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9029533Z               "line": 721
2026-06-23T09:38:02.9029644Z             },
2026-06-23T09:38:02.9029744Z             {
2026-06-23T09:38:02.9029877Z               "path": "crates/spt-daemon/src/relay.rs",
2026-06-23T09:38:02.9029987Z               "line": 15
2026-06-23T09:38:02.9030082Z             },
2026-06-23T09:38:02.9030181Z             {
2026-06-23T09:38:02.9030316Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9030430Z               "line": 241
2026-06-23T09:38:02.9030535Z             },
2026-06-23T09:38:02.9030626Z             {
2026-06-23T09:38:02.9030759Z               "path": "crates/spt/src/api/live.rs",
2026-06-23T09:38:02.9030865Z               "line": 13
2026-06-23T09:38:02.9030969Z             },
2026-06-23T09:38:02.9031069Z             {
2026-06-23T09:38:02.9031204Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9031312Z               "line": 382
2026-06-23T09:38:02.9031417Z             },
2026-06-23T09:38:02.9031518Z             {
2026-06-23T09:38:02.9031650Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9031759Z               "line": 494
2026-06-23T09:38:02.9031855Z             }
2026-06-23T09:38:02.9031958Z           ]
2026-06-23T09:38:02.9032062Z         },
2026-06-23T09:38:02.9032162Z         "int": {
2026-06-23T09:38:02.9032273Z           "complete": true,
2026-06-23T09:38:02.9032372Z           "evidence": [
2026-06-23T09:38:02.9032477Z             {
2026-06-23T09:38:02.9032668Z               "path": "crates/spt-daemon/tests/daemon_lifecycle_real_brain.rs",
2026-06-23T09:38:02.9032773Z               "line": 2
2026-06-23T09:38:02.9032883Z             },
2026-06-23T09:38:02.9032982Z             {
2026-06-23T09:38:02.9033169Z               "path": "crates/spt-daemon/tests/daemon_lifecycle_real_brain.rs",
2026-06-23T09:38:02.9033278Z               "line": 16
2026-06-23T09:38:02.9033373Z             },
2026-06-23T09:38:02.9033465Z             {
2026-06-23T09:38:02.9033636Z               "path": "crates/spt/tests/live_bind_firsthost_e2e.rs",
2026-06-23T09:38:02.9033741Z               "line": 12
2026-06-23T09:38:02.9033841Z             },
2026-06-23T09:38:02.9033946Z             {
2026-06-23T09:38:02.9034100Z               "path": "crates/spt/tests/live_firsthost_e2e.rs",
2026-06-23T09:38:02.9034208Z               "line": 12
2026-06-23T09:38:02.9034318Z             },
2026-06-23T09:38:02.9034415Z             {
2026-06-23T09:38:02.9034570Z               "path": "crates/spt/tests/livehost_bootrace_e2e.rs",
2026-06-23T09:38:02.9034679Z               "line": 44
2026-06-23T09:38:02.9034784Z             }
2026-06-23T09:38:02.9034991Z           ]
2026-06-23T09:38:02.9035102Z         },
2026-06-23T09:38:02.9035206Z         "unit": {
2026-06-23T09:38:02.9035306Z           "complete": true,
2026-06-23T09:38:02.9035417Z           "evidence": [
2026-06-23T09:38:02.9035507Z             {
2026-06-23T09:38:02.9035654Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:02.9035764Z               "line": 285
2026-06-23T09:38:02.9035983Z             },
2026-06-23T09:38:02.9036089Z             {
2026-06-23T09:38:02.9036217Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:02.9036323Z               "line": 293
2026-06-23T09:38:02.9036422Z             },
2026-06-23T09:38:02.9036527Z             {
2026-06-23T09:38:02.9036666Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:02.9036775Z               "line": 309
2026-06-23T09:38:02.9036879Z             },
2026-06-23T09:38:02.9036972Z             {
2026-06-23T09:38:02.9037118Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:02.9037231Z               "line": 317
2026-06-23T09:38:02.9037331Z             },
2026-06-23T09:38:02.9037430Z             {
2026-06-23T09:38:02.9037582Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9037687Z               "line": 870
2026-06-23T09:38:02.9037791Z             },
2026-06-23T09:38:02.9037892Z             {
2026-06-23T09:38:02.9038035Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9038144Z               "line": 940
2026-06-23T09:38:02.9038245Z             },
2026-06-23T09:38:02.9038350Z             {
2026-06-23T09:38:02.9038492Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9038594Z               "line": 1314
2026-06-23T09:38:02.9038702Z             },
2026-06-23T09:38:02.9038798Z             {
2026-06-23T09:38:02.9039151Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9039262Z               "line": 1351
2026-06-23T09:38:02.9039370Z             },
2026-06-23T09:38:02.9039480Z             {
2026-06-23T09:38:02.9039623Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9039732Z               "line": 1374
2026-06-23T09:38:02.9039829Z             },
2026-06-23T09:38:02.9039943Z             {
2026-06-23T09:38:02.9040079Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9040189Z               "line": 1403
2026-06-23T09:38:02.9040304Z             },
2026-06-23T09:38:02.9040399Z             {
2026-06-23T09:38:02.9040543Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9040647Z               "line": 1451
2026-06-23T09:38:02.9040747Z             },
2026-06-23T09:38:02.9040834Z             {
2026-06-23T09:38:02.9040971Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9041081Z               "line": 1494
2026-06-23T09:38:02.9041182Z             },
2026-06-23T09:38:02.9041286Z             {
2026-06-23T09:38:02.9041430Z               "path": "crates/spt-daemon/src/relay.rs",
2026-06-23T09:38:02.9041539Z               "line": 106
2026-06-23T09:38:02.9041648Z             },
2026-06-23T09:38:02.9041740Z             {
2026-06-23T09:38:02.9041886Z               "path": "crates/spt-daemon/src/relay.rs",
2026-06-23T09:38:02.9041991Z               "line": 132
2026-06-23T09:38:02.9042093Z             },
2026-06-23T09:38:02.9042192Z             {
2026-06-23T09:38:02.9042343Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9042453Z               "line": 530
2026-06-23T09:38:02.9042542Z             }
2026-06-23T09:38:02.9042646Z           ]
2026-06-23T09:38:02.9042747Z         }
2026-06-23T09:38:02.9042847Z       }
2026-06-23T09:38:02.9042942Z     },
2026-06-23T09:38:02.9043042Z     {
2026-06-23T09:38:02.9043152Z       "id": "REQ-DAEMON-2",
2026-06-23T09:38:02.9043318Z       "title": "Broker/brain split for seamless self-update",
2026-06-23T09:38:02.9043429Z       "requiredStages": [
2026-06-23T09:38:02.9043523Z         "impl",
2026-06-23T09:38:02.9043720Z         "unit",
2026-06-23T09:38:02.9043820Z         "int"
2026-06-23T09:38:02.9043914Z       ],
2026-06-23T09:38:02.9044021Z       "stages": {
2026-06-23T09:38:02.9044115Z         "doc": {
2026-06-23T09:38:02.9044220Z           "complete": true,
2026-06-23T09:38:02.9044326Z           "evidence": [
2026-06-23T09:38:02.9044434Z             {
2026-06-23T09:38:02.9044572Z               "path": "docs/TWO-HOST-RUNBOOK.md",
2026-06-23T09:38:02.9044782Z               "line": 250
2026-06-23T09:38:02.9044892Z             }
2026-06-23T09:38:02.9044999Z           ]
2026-06-23T09:38:02.9045101Z         },
2026-06-23T09:38:02.9045205Z         "impl": {
2026-06-23T09:38:02.9045320Z           "complete": true,
2026-06-23T09:38:02.9045418Z           "evidence": [
2026-06-23T09:38:02.9045527Z             {
2026-06-23T09:38:02.9045667Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9045776Z               "line": 23
2026-06-23T09:38:02.9045885Z             },
2026-06-23T09:38:02.9045986Z             {
2026-06-23T09:38:02.9046133Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9046234Z               "line": 922
2026-06-23T09:38:02.9046339Z             },
2026-06-23T09:38:02.9046443Z             {
2026-06-23T09:38:02.9046573Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9046687Z               "line": 963
2026-06-23T09:38:02.9046791Z             },
2026-06-23T09:38:02.9046893Z             {
2026-06-23T09:38:02.9047025Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9047130Z               "line": 1227
2026-06-23T09:38:02.9047240Z             },
2026-06-23T09:38:02.9047339Z             {
2026-06-23T09:38:02.9047484Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9047588Z               "line": 32
2026-06-23T09:38:02.9047692Z             },
2026-06-23T09:38:02.9047791Z             {
2026-06-23T09:38:02.9047934Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9048042Z               "line": 1243
2026-06-23T09:38:02.9048137Z             },
2026-06-23T09:38:02.9048238Z             {
2026-06-23T09:38:02.9048366Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9048476Z               "line": 1964
2026-06-23T09:38:02.9048577Z             },
2026-06-23T09:38:02.9048681Z             {
2026-06-23T09:38:02.9048825Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9048929Z               "line": 2251
2026-06-23T09:38:02.9049116Z             },
2026-06-23T09:38:02.9049211Z             {
2026-06-23T09:38:02.9049353Z               "path": "crates/spt-daemon/src/codec.rs",
2026-06-23T09:38:02.9049459Z               "line": 11
2026-06-23T09:38:02.9049559Z             },
2026-06-23T09:38:02.9049663Z             {
2026-06-23T09:38:02.9049793Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9049906Z               "line": 153
2026-06-23T09:38:02.9050002Z             },
2026-06-23T09:38:02.9050103Z             {
2026-06-23T09:38:02.9050235Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9050346Z               "line": 343
2026-06-23T09:38:02.9050451Z             },
2026-06-23T09:38:02.9050550Z             {
2026-06-23T09:38:02.9050687Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9050788Z               "line": 13
2026-06-23T09:38:02.9050892Z             },
2026-06-23T09:38:02.9050992Z             {
2026-06-23T09:38:02.9051136Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9051245Z               "line": 27
2026-06-23T09:38:02.9051346Z             },
2026-06-23T09:38:02.9051451Z             {
2026-06-23T09:38:02.9051588Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9051699Z               "line": 147
2026-06-23T09:38:02.9051808Z             },
2026-06-23T09:38:02.9051903Z             {
2026-06-23T09:38:02.9052048Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9052256Z               "line": 632
2026-06-23T09:38:02.9052362Z             },
2026-06-23T09:38:02.9052465Z             {
2026-06-23T09:38:02.9052604Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9052710Z               "line": 853
2026-06-23T09:38:02.9052813Z             },
2026-06-23T09:38:02.9052917Z             {
2026-06-23T09:38:02.9053051Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9053264Z               "line": 1000
2026-06-23T09:38:02.9053364Z             },
2026-06-23T09:38:02.9053464Z             {
2026-06-23T09:38:02.9053612Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9053717Z               "line": 1089
2026-06-23T09:38:02.9053821Z             },
2026-06-23T09:38:02.9053912Z             {
2026-06-23T09:38:02.9054051Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9054165Z               "line": 1211
2026-06-23T09:38:02.9054256Z             },
2026-06-23T09:38:02.9054370Z             {
2026-06-23T09:38:02.9054517Z               "path": "crates/spt-daemon/src/transport.rs",
2026-06-23T09:38:02.9054628Z               "line": 10
2026-06-23T09:38:02.9054728Z             }
2026-06-23T09:38:02.9054837Z           ]
2026-06-23T09:38:02.9054934Z         },
2026-06-23T09:38:02.9055037Z         "int": {
2026-06-23T09:38:02.9055147Z           "complete": true,
2026-06-23T09:38:02.9055258Z           "evidence": [
2026-06-23T09:38:02.9055366Z             {
2026-06-23T09:38:02.9055510Z               "path": "crates/spt-daemon/tests/broker.rs",
2026-06-23T09:38:02.9055615Z               "line": 17
2026-06-23T09:38:02.9055714Z             },
2026-06-23T09:38:02.9055823Z             {
2026-06-23T09:38:02.9055988Z               "path": "crates/spt-daemon/tests/netbroker.rs",
2026-06-23T09:38:02.9056092Z               "line": 90
2026-06-23T09:38:02.9056203Z             },
2026-06-23T09:38:02.9056298Z             {
2026-06-23T09:38:02.9056455Z               "path": "crates/spt-daemon/tests/netbroker.rs",
2026-06-23T09:38:02.9056561Z               "line": 110
2026-06-23T09:38:02.9056669Z             },
2026-06-23T09:38:02.9056775Z             {
2026-06-23T09:38:02.9056918Z               "path": "crates/spt-daemon/tests/netbroker.rs",
2026-06-23T09:38:02.9057027Z               "line": 186
2026-06-23T09:38:02.9057128Z             },
2026-06-23T09:38:02.9057227Z             {
2026-06-23T09:38:02.9057375Z               "path": "crates/spt-daemon/tests/netbroker.rs",
2026-06-23T09:38:02.9057481Z               "line": 309
2026-06-23T09:38:02.9057590Z             },
2026-06-23T09:38:02.9057690Z             {
2026-06-23T09:38:02.9057839Z               "path": "crates/spt-daemon/tests/netstream.rs",
2026-06-23T09:38:02.9057947Z               "line": 128
2026-06-23T09:38:02.9058053Z             },
2026-06-23T09:38:02.9058163Z             {
2026-06-23T09:38:02.9058309Z               "path": "crates/spt/tests/brain_survive.rs",
2026-06-23T09:38:02.9058414Z               "line": 59
2026-06-23T09:38:02.9058522Z             }
2026-06-23T09:38:02.9058625Z           ]
2026-06-23T09:38:02.9058721Z         },
2026-06-23T09:38:02.9058837Z         "unit": {
2026-06-23T09:38:02.9059094Z           "complete": true,
2026-06-23T09:38:02.9059199Z           "evidence": [
2026-06-23T09:38:02.9059303Z             {
2026-06-23T09:38:02.9059437Z               "path": "crates/spt-daemon/src/codec.rs",
2026-06-23T09:38:02.9059556Z               "line": 62
2026-06-23T09:38:02.9059651Z             },
2026-06-23T09:38:02.9059752Z             {
2026-06-23T09:38:02.9059899Z               "path": "crates/spt-daemon/src/codec.rs",
2026-06-23T09:38:02.9060000Z               "line": 76
2026-06-23T09:38:02.9060095Z             },
2026-06-23T09:38:02.9060195Z             {
2026-06-23T09:38:02.9060339Z               "path": "crates/spt-daemon/src/codec.rs",
2026-06-23T09:38:02.9060480Z               "line": 88
2026-06-23T09:38:02.9060640Z             },
2026-06-23T09:38:02.9060781Z             {
2026-06-23T09:38:02.9061133Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9061295Z               "line": 347
2026-06-23T09:38:02.9061434Z             },
2026-06-23T09:38:02.9061576Z             {
2026-06-23T09:38:02.9061763Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9061921Z               "line": 937
2026-06-23T09:38:02.9062059Z             },
2026-06-23T09:38:02.9062196Z             {
2026-06-23T09:38:02.9062530Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9062683Z               "line": 945
2026-06-23T09:38:02.9062821Z             },
2026-06-23T09:38:02.9062951Z             {
2026-06-23T09:38:02.9063131Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9063289Z               "line": 962
2026-06-23T09:38:02.9063431Z             },
2026-06-23T09:38:02.9063573Z             {
2026-06-23T09:38:02.9063762Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9063915Z               "line": 1071
2026-06-23T09:38:02.9064062Z             },
2026-06-23T09:38:02.9064206Z             {
2026-06-23T09:38:02.9064410Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9064563Z               "line": 1282
2026-06-23T09:38:02.9064710Z             },
2026-06-23T09:38:02.9064840Z             {
2026-06-23T09:38:02.9065044Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9065198Z               "line": 1294
2026-06-23T09:38:02.9065354Z             },
2026-06-23T09:38:02.9065499Z             {
2026-06-23T09:38:02.9068859Z               "path": "crates/spt-daemon/src/transport.rs",
2026-06-23T09:38:02.9069143Z               "line": 110
2026-06-23T09:38:02.9069291Z             },
2026-06-23T09:38:02.9069416Z             {
2026-06-23T09:38:02.9069572Z               "path": "crates/spt-daemon/tests/resume.rs",
2026-06-23T09:38:02.9069678Z               "line": 147
2026-06-23T09:38:02.9069787Z             }
2026-06-23T09:38:02.9069887Z           ]
2026-06-23T09:38:02.9069987Z         }
2026-06-23T09:38:02.9070092Z       }
2026-06-23T09:38:02.9070192Z     },
2026-06-23T09:38:02.9070283Z     {
2026-06-23T09:38:02.9070392Z       "id": "REQ-DAEMON-3",
2026-06-23T09:38:02.9070589Z       "title": "Any api invocation auto-starts the daemon if absent",
2026-06-23T09:38:02.9070703Z       "requiredStages": [
2026-06-23T09:38:02.9070798Z         "impl",
2026-06-23T09:38:02.9070895Z         "unit",
2026-06-23T09:38:02.9070993Z         "int"
2026-06-23T09:38:02.9071079Z       ],
2026-06-23T09:38:02.9071185Z       "stages": {
2026-06-23T09:38:02.9071285Z         "doc": {
2026-06-23T09:38:02.9071399Z           "complete": false,
2026-06-23T09:38:02.9071509Z           "evidence": []
2026-06-23T09:38:02.9071600Z         },
2026-06-23T09:38:02.9071708Z         "impl": {
2026-06-23T09:38:02.9071807Z           "complete": true,
2026-06-23T09:38:02.9071918Z           "evidence": [
2026-06-23T09:38:02.9072013Z             {
2026-06-23T09:38:02.9072161Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9072275Z               "line": 14
2026-06-23T09:38:02.9072370Z             },
2026-06-23T09:38:02.9072466Z             {
2026-06-23T09:38:02.9072614Z               "path": "crates/spt-daemon/src/endpoint.rs",
2026-06-23T09:38:02.9072727Z               "line": 11
2026-06-23T09:38:02.9072833Z             },
2026-06-23T09:38:02.9072924Z             {
2026-06-23T09:38:02.9073057Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:02.9073168Z               "line": 305
2026-06-23T09:38:02.9073266Z             },
2026-06-23T09:38:02.9073371Z             {
2026-06-23T09:38:02.9073492Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9073595Z               "line": 2310
2026-06-23T09:38:02.9073686Z             },
2026-06-23T09:38:02.9073792Z             {
2026-06-23T09:38:02.9073919Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9074024Z               "line": 4890
2026-06-23T09:38:02.9074124Z             },
2026-06-23T09:38:02.9074232Z             {
2026-06-23T09:38:02.9074546Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9074660Z               "line": 4911
2026-06-23T09:38:02.9074756Z             }
2026-06-23T09:38:02.9074852Z           ]
2026-06-23T09:38:02.9074956Z         },
2026-06-23T09:38:02.9075052Z         "int": {
2026-06-23T09:38:02.9075166Z           "complete": true,
2026-06-23T09:38:02.9075270Z           "evidence": [
2026-06-23T09:38:02.9075471Z             {
2026-06-23T09:38:02.9075629Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:02.9075725Z               "line": 49
2026-06-23T09:38:02.9075829Z             },
2026-06-23T09:38:02.9075929Z             {
2026-06-23T09:38:02.9076073Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:02.9076182Z               "line": 487
2026-06-23T09:38:02.9076277Z             }
2026-06-23T09:38:02.9076383Z           ]
2026-06-23T09:38:02.9076476Z         },
2026-06-23T09:38:02.9076583Z         "unit": {
2026-06-23T09:38:02.9076708Z           "complete": true,
2026-06-23T09:38:02.9076815Z           "evidence": [
2026-06-23T09:38:02.9076914Z             {
2026-06-23T09:38:02.9077053Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9077165Z               "line": 1553
2026-06-23T09:38:02.9077261Z             },
2026-06-23T09:38:02.9077361Z             {
2026-06-23T09:38:02.9077484Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9077595Z               "line": 12253
2026-06-23T09:38:02.9077695Z             }
2026-06-23T09:38:02.9077789Z           ]
2026-06-23T09:38:02.9077895Z         }
2026-06-23T09:38:02.9077991Z       }
2026-06-23T09:38:02.9078095Z     },
2026-06-23T09:38:02.9078185Z     {
2026-06-23T09:38:02.9078296Z       "id": "REQ-DAEMON-4",
2026-06-23T09:38:02.9078448Z       "title": "Honor every KNOWN-HAZARDS invariant",
2026-06-23T09:38:02.9078558Z       "requiredStages": [
2026-06-23T09:38:02.9078662Z         "impl",
2026-06-23T09:38:02.9078762Z         "unit",
2026-06-23T09:38:02.9078873Z         "int"
2026-06-23T09:38:02.9079034Z       ],
2026-06-23T09:38:02.9079130Z       "stages": {
2026-06-23T09:38:02.9079227Z         "doc": {
2026-06-23T09:38:02.9079334Z           "complete": false,
2026-06-23T09:38:02.9079434Z           "evidence": []
2026-06-23T09:38:02.9079534Z         },
2026-06-23T09:38:02.9079642Z         "impl": {
2026-06-23T09:38:02.9079755Z           "complete": true,
2026-06-23T09:38:02.9079856Z           "evidence": [
2026-06-23T09:38:02.9079962Z             {
2026-06-23T09:38:02.9080108Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9080224Z               "line": 675
2026-06-23T09:38:02.9080319Z             },
2026-06-23T09:38:02.9080423Z             {
2026-06-23T09:38:02.9080571Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9080676Z               "line": 740
2026-06-23T09:38:02.9080772Z             },
2026-06-23T09:38:02.9080862Z             {
2026-06-23T09:38:02.9081014Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9081120Z               "line": 762
2026-06-23T09:38:02.9081225Z             }
2026-06-23T09:38:02.9081324Z           ]
2026-06-23T09:38:02.9081416Z         },
2026-06-23T09:38:02.9081525Z         "int": {
2026-06-23T09:38:02.9081635Z           "complete": true,
2026-06-23T09:38:02.9081731Z           "evidence": [
2026-06-23T09:38:02.9081821Z             {
2026-06-23T09:38:02.9081983Z               "path": "crates/spt-daemon/tests/daemon_e2e.rs",
2026-06-23T09:38:02.9082094Z               "line": 42
2026-06-23T09:38:02.9082192Z             }
2026-06-23T09:38:02.9082291Z           ]
2026-06-23T09:38:02.9082391Z         },
2026-06-23T09:38:02.9082497Z         "unit": {
2026-06-23T09:38:02.9082601Z           "complete": true,
2026-06-23T09:38:02.9082711Z           "evidence": [
2026-06-23T09:38:02.9082812Z             {
2026-06-23T09:38:02.9082954Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:02.9083060Z               "line": 428
2026-06-23T09:38:02.9083250Z             },
2026-06-23T09:38:02.9083360Z             {
2026-06-23T09:38:02.9083507Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9083607Z               "line": 1168
2026-06-23T09:38:02.9083713Z             },
2026-06-23T09:38:02.9083808Z             {
2026-06-23T09:38:02.9083946Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9084151Z               "line": 1238
2026-06-23T09:38:02.9084256Z             },
2026-06-23T09:38:02.9084353Z             {
2026-06-23T09:38:02.9084485Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9084598Z               "line": 1268
2026-06-23T09:38:02.9084689Z             },
2026-06-23T09:38:02.9084787Z             {
2026-06-23T09:38:02.9084929Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9085036Z               "line": 1301
2026-06-23T09:38:02.9085135Z             }
2026-06-23T09:38:02.9085240Z           ]
2026-06-23T09:38:02.9085346Z         }
2026-06-23T09:38:02.9085445Z       }
2026-06-23T09:38:02.9085544Z     },
2026-06-23T09:38:02.9085631Z     {
2026-06-23T09:38:02.9085746Z       "id": "REQ-DAEMON-5",
2026-06-23T09:38:02.9087177Z       "title": "Pump liveness: the peer pump writes a last-tick heartbeat consumed by daemon status / subnet status (decision 23 render legs in REQ-CLI-2/REQ-SUBNET-8); the daemon supervises the pump task — a panic is caught, logged loudly, and the pump restarts with capped backoff (≤5 min), so a 5.9-class death self-heals visibly instead of silently halving the daemon (M8 decision 23; field motivation: hfenduleam 2026-06-07 half-death)",
2026-06-23T09:38:02.9087300Z       "requiredStages": [
2026-06-23T09:38:02.9087408Z         "impl",
2026-06-23T09:38:02.9087513Z         "unit"
2026-06-23T09:38:02.9087613Z       ],
2026-06-23T09:38:02.9087706Z       "stages": {
2026-06-23T09:38:02.9087811Z         "doc": {
2026-06-23T09:38:02.9087926Z           "complete": false,
2026-06-23T09:38:02.9088035Z           "evidence": []
2026-06-23T09:38:02.9088130Z         },
2026-06-23T09:38:02.9088227Z         "impl": {
2026-06-23T09:38:02.9088340Z           "complete": true,
2026-06-23T09:38:02.9088445Z           "evidence": [
2026-06-23T09:38:02.9088551Z             {
2026-06-23T09:38:02.9088697Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9088808Z               "line": 476
2026-06-23T09:38:02.9088913Z             },
2026-06-23T09:38:02.9089084Z             {
2026-06-23T09:38:02.9089232Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9089332Z               "line": 769
2026-06-23T09:38:02.9089448Z             },
2026-06-23T09:38:02.9089561Z             {
2026-06-23T09:38:02.9089700Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9089801Z               "line": 782
2026-06-23T09:38:02.9089894Z             },
2026-06-23T09:38:02.9089994Z             {
2026-06-23T09:38:02.9090132Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9090235Z               "line": 800
2026-06-23T09:38:02.9090344Z             },
2026-06-23T09:38:02.9090445Z             {
2026-06-23T09:38:02.9090588Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9090693Z               "line": 841
2026-06-23T09:38:02.9090793Z             }
2026-06-23T09:38:02.9090893Z           ]
2026-06-23T09:38:02.9090997Z         },
2026-06-23T09:38:02.9091103Z         "int": {
2026-06-23T09:38:02.9091203Z           "complete": false,
2026-06-23T09:38:02.9091317Z           "evidence": []
2026-06-23T09:38:02.9091414Z         },
2026-06-23T09:38:02.9091546Z         "unit": {
2026-06-23T09:38:02.9091690Z           "complete": true,
2026-06-23T09:38:02.9091799Z           "evidence": [
2026-06-23T09:38:02.9091899Z             {
2026-06-23T09:38:02.9092039Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9092146Z               "line": 1189
2026-06-23T09:38:02.9092247Z             },
2026-06-23T09:38:02.9092451Z             {
2026-06-23T09:38:02.9092601Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9092711Z               "line": 1213
2026-06-23T09:38:02.9092814Z             },
2026-06-23T09:38:02.9092903Z             {
2026-06-23T09:38:02.9093034Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9093143Z               "line": 1239
2026-06-23T09:38:02.9093339Z             }
2026-06-23T09:38:02.9093443Z           ]
2026-06-23T09:38:02.9093533Z         }
2026-06-23T09:38:02.9093635Z       }
2026-06-23T09:38:02.9093730Z     },
2026-06-23T09:38:02.9093819Z     {
2026-06-23T09:38:02.9093930Z       "id": "REQ-DAEMON-6",
2026-06-23T09:38:02.9096119Z       "title": "Service-aware `daemon start`/`stop`: when an OS service manager has a registered spt-daemon for this user, `spt daemon start` and `spt daemon stop` drive THAT service (so stop doesn't IPC-kill a unit that auto-restart-fights for the broker socket — the kitsubito 2026-06-08 loop). `start` graduates from a `run` alias to a first-class background verb (ensure-up, idempotent, non-blocking); stop routes managed→manager, manual→IPC. Linux=systemd user unit (`systemctl --user start|stop|is-active spt-daemon`, detected by unit-file presence); Windows=no controllable manager (the logon task is boot-only), so start=detached spawn / stop=IPC.",
2026-06-23T09:38:02.9096244Z       "requiredStages": [
2026-06-23T09:38:02.9096353Z         "impl",
2026-06-23T09:38:02.9096458Z         "unit"
2026-06-23T09:38:02.9096563Z       ],
2026-06-23T09:38:02.9096663Z       "stages": {
2026-06-23T09:38:02.9096763Z         "doc": {
2026-06-23T09:38:02.9096864Z           "complete": false,
2026-06-23T09:38:02.9096968Z           "evidence": []
2026-06-23T09:38:02.9097068Z         },
2026-06-23T09:38:02.9097169Z         "impl": {
2026-06-23T09:38:02.9097282Z           "complete": true,
2026-06-23T09:38:02.9097383Z           "evidence": [
2026-06-23T09:38:02.9097489Z             {
2026-06-23T09:38:02.9097641Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9097756Z               "line": 495
2026-06-23T09:38:02.9097846Z             },
2026-06-23T09:38:02.9097954Z             {
2026-06-23T09:38:02.9098097Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9098201Z               "line": 526
2026-06-23T09:38:02.9098304Z             },
2026-06-23T09:38:02.9098395Z             {
2026-06-23T09:38:02.9098544Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9098647Z               "line": 55
2026-06-23T09:38:02.9098749Z             },
2026-06-23T09:38:02.9098844Z             {
2026-06-23T09:38:02.9099158Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9099267Z               "line": 70
2026-06-23T09:38:02.9099369Z             },
2026-06-23T09:38:02.9099473Z             {
2026-06-23T09:38:02.9099587Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9099698Z               "line": 2374
2026-06-23T09:38:02.9099806Z             },
2026-06-23T09:38:02.9099901Z             {
2026-06-23T09:38:02.9100022Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9100131Z               "line": 2400
2026-06-23T09:38:02.9100236Z             }
2026-06-23T09:38:02.9100332Z           ]
2026-06-23T09:38:02.9100436Z         },
2026-06-23T09:38:02.9100535Z         "int": {
2026-06-23T09:38:02.9100645Z           "complete": false,
2026-06-23T09:38:02.9100754Z           "evidence": []
2026-06-23T09:38:02.9100852Z         },
2026-06-23T09:38:02.9100948Z         "unit": {
2026-06-23T09:38:02.9101053Z           "complete": true,
2026-06-23T09:38:02.9101166Z           "evidence": [
2026-06-23T09:38:02.9101272Z             {
2026-06-23T09:38:02.9101411Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9101519Z               "line": 288
2026-06-23T09:38:02.9101611Z             },
2026-06-23T09:38:02.9101715Z             {
2026-06-23T09:38:02.9101950Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9102063Z               "line": 299
2026-06-23T09:38:02.9102159Z             },
2026-06-23T09:38:02.9102260Z             {
2026-06-23T09:38:02.9102403Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9102507Z               "line": 325
2026-06-23T09:38:02.9102608Z             },
2026-06-23T09:38:02.9102702Z             {
2026-06-23T09:38:02.9102938Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9103040Z               "line": 351
2026-06-23T09:38:02.9103137Z             }
2026-06-23T09:38:02.9103233Z           ]
2026-06-23T09:38:02.9103331Z         }
2026-06-23T09:38:02.9103435Z       }
2026-06-23T09:38:02.9103526Z     },
2026-06-23T09:38:02.9103628Z     {
2026-06-23T09:38:02.9103741Z       "id": "REQ-DAEMON-7",
2026-06-23T09:38:02.9105196Z       "title": "`daemon run` is foreground-consistent on every platform: the invoking process IS the daemon, blocks until signalled, never auto-detaches or respawns into an invisible background task. The detached/de-elevated background behavior lives ONLY in `start`. Windows: an ELEVATED `daemon run` refuses with guidance (use `start`, or an unelevated shell) instead of respawning detached/de-elevated and vanishing (KH 5.7 preserved — it still never serves elevated).",
2026-06-23T09:38:02.9105309Z       "requiredStages": [
2026-06-23T09:38:02.9105420Z         "impl",
2026-06-23T09:38:02.9105524Z         "unit"
2026-06-23T09:38:02.9105628Z       ],
2026-06-23T09:38:02.9105733Z       "stages": {
2026-06-23T09:38:02.9105828Z         "doc": {
2026-06-23T09:38:02.9105941Z           "complete": false,
2026-06-23T09:38:02.9106050Z           "evidence": []
2026-06-23T09:38:02.9106146Z         },
2026-06-23T09:38:02.9106246Z         "impl": {
2026-06-23T09:38:02.9106355Z           "complete": true,
2026-06-23T09:38:02.9106466Z           "evidence": [
2026-06-23T09:38:02.9106565Z             {
2026-06-23T09:38:02.9106703Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9106823Z               "line": 545
2026-06-23T09:38:02.9106927Z             },
2026-06-23T09:38:02.9107028Z             {
2026-06-23T09:38:02.9107180Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9107275Z               "line": 610
2026-06-23T09:38:02.9107377Z             },
2026-06-23T09:38:02.9107476Z             {
2026-06-23T09:38:02.9107618Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9107739Z               "line": 89
2026-06-23T09:38:02.9107828Z             },
2026-06-23T09:38:02.9107928Z             {
2026-06-23T09:38:02.9108053Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9108167Z               "line": 2311
2026-06-23T09:38:02.9108268Z             }
2026-06-23T09:38:02.9108368Z           ]
2026-06-23T09:38:02.9108472Z         },
2026-06-23T09:38:02.9108576Z         "int": {
2026-06-23T09:38:02.9108686Z           "complete": false,
2026-06-23T09:38:02.9108789Z           "evidence": []
2026-06-23T09:38:02.9108888Z         },
2026-06-23T09:38:02.9109065Z         "unit": {
2026-06-23T09:38:02.9109179Z           "complete": true,
2026-06-23T09:38:02.9109295Z           "evidence": [
2026-06-23T09:38:02.9109390Z             {
2026-06-23T09:38:02.9109527Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9109633Z               "line": 314
2026-06-23T09:38:02.9109733Z             },
2026-06-23T09:38:02.9109837Z             {
2026-06-23T09:38:02.9109967Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9110071Z               "line": 9496
2026-06-23T09:38:02.9110156Z             }
2026-06-23T09:38:02.9110263Z           ]
2026-06-23T09:38:02.9110357Z         }
2026-06-23T09:38:02.9110462Z       }
2026-06-23T09:38:02.9110554Z     },
2026-06-23T09:38:02.9110654Z     {
2026-06-23T09:38:02.9110763Z       "id": "REQ-DAEMON-8",
2026-06-23T09:38:02.9111871Z       "title": "Internal auto-start prefers the service: `ensure_running` (any spt command's implicit daemon start, REQ-DAEMON-3) routes through the service-aware start path — when a manager has a registered service it starts THAT, never a competing manual `spawn_detached` daemon that would fight the service for the socket.",
2026-06-23T09:38:02.9111990Z       "requiredStages": [
2026-06-23T09:38:02.9112089Z         "impl",
2026-06-23T09:38:02.9112200Z         "unit"
2026-06-23T09:38:02.9112295Z       ],
2026-06-23T09:38:02.9112404Z       "stages": {
2026-06-23T09:38:02.9112604Z         "doc": {
2026-06-23T09:38:02.9112714Z           "complete": false,
2026-06-23T09:38:02.9112825Z           "evidence": []
2026-06-23T09:38:02.9112928Z         },
2026-06-23T09:38:02.9113033Z         "impl": {
2026-06-23T09:38:02.9113139Z           "complete": true,
2026-06-23T09:38:02.9113248Z           "evidence": [
2026-06-23T09:38:02.9113348Z             {
2026-06-23T09:38:02.9113483Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9113586Z               "line": 445
2026-06-23T09:38:02.9113687Z             },
2026-06-23T09:38:02.9113803Z             {
2026-06-23T09:38:02.9113938Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9114043Z               "line": 56
2026-06-23T09:38:02.9114149Z             }
2026-06-23T09:38:02.9114239Z           ]
2026-06-23T09:38:02.9114343Z         },
2026-06-23T09:38:02.9114445Z         "int": {
2026-06-23T09:38:02.9114554Z           "complete": false,
2026-06-23T09:38:02.9114672Z           "evidence": []
2026-06-23T09:38:02.9114760Z         },
2026-06-23T09:38:02.9114869Z         "unit": {
2026-06-23T09:38:02.9114978Z           "complete": true,
2026-06-23T09:38:02.9115084Z           "evidence": [
2026-06-23T09:38:02.9115183Z             {
2026-06-23T09:38:02.9115326Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9115441Z               "line": 288
2026-06-23T09:38:02.9115545Z             },
2026-06-23T09:38:02.9115651Z             {
2026-06-23T09:38:02.9115784Z               "path": "crates/spt-daemon/src/service.rs",
2026-06-23T09:38:02.9115893Z               "line": 325
2026-06-23T09:38:02.9115995Z             }
2026-06-23T09:38:02.9116104Z           ]
2026-06-23T09:38:02.9116203Z         }
2026-06-23T09:38:02.9116303Z       }
2026-06-23T09:38:02.9116407Z     },
2026-06-23T09:38:02.9116501Z     {
2026-06-23T09:38:02.9116615Z       "id": "REQ-DAEMON-9",
2026-06-23T09:38:02.9119046Z       "title": "Net-bind boot-race resilience: a daemon that comes up net-less (NetHost::start failed — e.g. the systemd unit autostarted before the network/DNS stack was ready, `Failed to create an address lookup service`) must SELF-HEAL — retry the net bring-up in the background with capped backoff and, on success, attach net to the broker + spawn the dispatcher/peer-pump (which today are gated on `net_up` at boot and so never start, leaving the node silently unreachable until a manual restart — kitsubito 2026-06-08). Status surfaces the net-less state honestly (a net-less broker renders as 'no connection', not only a pump-STALLED line with a bogus pre-boot heartbeat age). The installer's autostart unit waits for the network (`Wants=/After=network-online.target`) as belt-and-suspenders.",
2026-06-23T09:38:02.9119179Z       "requiredStages": [
2026-06-23T09:38:02.9119283Z         "impl",
2026-06-23T09:38:02.9119387Z         "unit"
2026-06-23T09:38:02.9119487Z       ],
2026-06-23T09:38:02.9119597Z       "stages": {
2026-06-23T09:38:02.9119697Z         "doc": {
2026-06-23T09:38:02.9119816Z           "complete": false,
2026-06-23T09:38:02.9119926Z           "evidence": []
2026-06-23T09:38:02.9120025Z         },
2026-06-23T09:38:02.9120131Z         "impl": {
2026-06-23T09:38:02.9120241Z           "complete": true,
2026-06-23T09:38:02.9120354Z           "evidence": [
2026-06-23T09:38:02.9120455Z             {
2026-06-23T09:38:02.9120598Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9120707Z               "line": 276
2026-06-23T09:38:02.9120799Z             },
2026-06-23T09:38:02.9120908Z             {
2026-06-23T09:38:02.9121157Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9121275Z               "line": 1294
2026-06-23T09:38:02.9121370Z             },
2026-06-23T09:38:02.9121481Z             {
2026-06-23T09:38:02.9121627Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9121741Z               "line": 197
2026-06-23T09:38:02.9121841Z             },
2026-06-23T09:38:02.9121939Z             {
2026-06-23T09:38:02.9122169Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9122268Z               "line": 344
2026-06-23T09:38:02.9122373Z             },
2026-06-23T09:38:02.9122474Z             {
2026-06-23T09:38:02.9122606Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9122717Z               "line": 381
2026-06-23T09:38:02.9122817Z             },
2026-06-23T09:38:02.9122907Z             {
2026-06-23T09:38:02.9123037Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9123146Z               "line": 2429
2026-06-23T09:38:02.9123260Z             }
2026-06-23T09:38:02.9123351Z           ]
2026-06-23T09:38:02.9123451Z         },
2026-06-23T09:38:02.9123556Z         "int": {
2026-06-23T09:38:02.9123666Z           "complete": false,
2026-06-23T09:38:02.9123775Z           "evidence": []
2026-06-23T09:38:02.9123880Z         },
2026-06-23T09:38:02.9123981Z         "unit": {
2026-06-23T09:38:02.9124081Z           "complete": true,
2026-06-23T09:38:02.9124195Z           "evidence": [
2026-06-23T09:38:02.9124286Z             {
2026-06-23T09:38:02.9124429Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9124527Z               "line": 1158
2026-06-23T09:38:02.9124632Z             },
2026-06-23T09:38:02.9124738Z             {
2026-06-23T09:38:02.9124851Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9124962Z               "line": 12118
2026-06-23T09:38:02.9125061Z             }
2026-06-23T09:38:02.9125170Z           ]
2026-06-23T09:38:02.9125267Z         }
2026-06-23T09:38:02.9125367Z       }
2026-06-23T09:38:02.9125467Z     },
2026-06-23T09:38:02.9125562Z     {
2026-06-23T09:38:02.9125677Z       "id": "REQ-DOCS-1",
2026-06-23T09:38:02.9125901Z       "title": "Dual-audience docs (human + AI dev-agent), markdown once / two depths",
2026-06-23T09:38:02.9126025Z       "requiredStages": [
2026-06-23T09:38:02.9126124Z         "doc",
2026-06-23T09:38:02.9126231Z         "impl"
2026-06-23T09:38:02.9126340Z       ],
2026-06-23T09:38:02.9126444Z       "stages": {
2026-06-23T09:38:02.9126550Z         "doc": {
2026-06-23T09:38:02.9126659Z           "complete": true,
2026-06-23T09:38:02.9126768Z           "evidence": [
2026-06-23T09:38:02.9126868Z             {
2026-06-23T09:38:02.9126995Z               "path": "docs-site/src/index.md",
2026-06-23T09:38:02.9127104Z               "line": 50
2026-06-23T09:38:02.9127203Z             }
2026-06-23T09:38:02.9127310Z           ]
2026-06-23T09:38:02.9127408Z         },
2026-06-23T09:38:02.9127518Z         "impl": {
2026-06-23T09:38:02.9127633Z           "complete": true,
2026-06-23T09:38:02.9127742Z           "evidence": [
2026-06-23T09:38:02.9127843Z             {
2026-06-23T09:38:02.9127991Z               "path": ".github/workflows/docs-publish.yml",
2026-06-23T09:38:02.9128095Z               "line": 12
2026-06-23T09:38:02.9128187Z             },
2026-06-23T09:38:02.9128291Z             {
2026-06-23T09:38:02.9128415Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:02.9128535Z               "line": 14
2026-06-23T09:38:02.9128639Z             }
2026-06-23T09:38:02.9128734Z           ]
2026-06-23T09:38:02.9128836Z         },
2026-06-23T09:38:02.9128939Z         "int": {
2026-06-23T09:38:02.9129136Z           "complete": false,
2026-06-23T09:38:02.9129239Z           "evidence": []
2026-06-23T09:38:02.9129345Z         },
2026-06-23T09:38:02.9129480Z         "unit": {
2026-06-23T09:38:02.9129587Z           "complete": false,
2026-06-23T09:38:02.9129696Z           "evidence": []
2026-06-23T09:38:02.9129792Z         }
2026-06-23T09:38:02.9129895Z       }
2026-06-23T09:38:02.9130080Z     },
2026-06-23T09:38:02.9130191Z     {
2026-06-23T09:38:02.9130300Z       "id": "REQ-DOCS-2",
2026-06-23T09:38:02.9130482Z       "title": "Sub-10-minute runnable killer quickstart per audience",
2026-06-23T09:38:02.9130595Z       "requiredStages": [
2026-06-23T09:38:02.9130691Z         "doc",
2026-06-23T09:38:02.9130801Z         "int"
2026-06-23T09:38:02.9130900Z       ],
2026-06-23T09:38:02.9131101Z       "stages": {
2026-06-23T09:38:02.9131211Z         "doc": {
2026-06-23T09:38:02.9131320Z           "complete": true,
2026-06-23T09:38:02.9131435Z           "evidence": [
2026-06-23T09:38:02.9131534Z             {
2026-06-23T09:38:02.9131740Z               "path": "docs-site/src/harness-contract/integration-checklist.md",
2026-06-23T09:38:02.9131849Z               "line": 3
2026-06-23T09:38:02.9131945Z             },
2026-06-23T09:38:02.9132046Z             {
2026-06-23T09:38:02.9132192Z               "path": "docs-site/src/quickstart/adapter.md",
2026-06-23T09:38:02.9132306Z               "line": 3
2026-06-23T09:38:02.9132410Z             },
2026-06-23T09:38:02.9132514Z             {
2026-06-23T09:38:02.9132662Z               "path": "docs-site/src/quickstart/messaging.md",
2026-06-23T09:38:02.9132772Z               "line": 3
2026-06-23T09:38:02.9132870Z             }
2026-06-23T09:38:02.9132972Z           ]
2026-06-23T09:38:02.9133077Z         },
2026-06-23T09:38:02.9133181Z         "impl": {
2026-06-23T09:38:02.9133306Z           "complete": false,
2026-06-23T09:38:02.9133415Z           "evidence": []
2026-06-23T09:38:02.9133514Z         },
2026-06-23T09:38:02.9133612Z         "int": {
2026-06-23T09:38:02.9133725Z           "complete": true,
2026-06-23T09:38:02.9133843Z           "evidence": [
2026-06-23T09:38:02.9133950Z             {
2026-06-23T09:38:02.9134116Z               "path": "crates/spt/tests/quickstart_e2e.rs",
2026-06-23T09:38:02.9134221Z               "line": 14
2026-06-23T09:38:02.9134326Z             }
2026-06-23T09:38:02.9134431Z           ]
2026-06-23T09:38:02.9134531Z         },
2026-06-23T09:38:02.9134641Z         "unit": {
2026-06-23T09:38:02.9134740Z           "complete": false,
2026-06-23T09:38:02.9134856Z           "evidence": []
2026-06-23T09:38:02.9134947Z         }
2026-06-23T09:38:02.9135054Z       }
2026-06-23T09:38:02.9135159Z     },
2026-06-23T09:38:02.9135255Z     {
2026-06-23T09:38:02.9135369Z       "id": "REQ-DOCS-3",
2026-06-23T09:38:02.9135589Z       "title": "Diátaxis structure; one canonical way to do X",
2026-06-23T09:38:02.9135703Z       "requiredStages": [
2026-06-23T09:38:02.9135802Z         "doc"
2026-06-23T09:38:02.9135909Z       ],
2026-06-23T09:38:02.9136013Z       "stages": {
2026-06-23T09:38:02.9136122Z         "doc": {
2026-06-23T09:38:02.9136232Z           "complete": true,
2026-06-23T09:38:02.9136342Z           "evidence": [
2026-06-23T09:38:02.9136446Z             {
2026-06-23T09:38:02.9136576Z               "path": "docs-site/src/index.md",
2026-06-23T09:38:02.9136685Z               "line": 42
2026-06-23T09:38:02.9136791Z             }
2026-06-23T09:38:02.9136900Z           ]
2026-06-23T09:38:02.9137009Z         },
2026-06-23T09:38:02.9137110Z         "impl": {
2026-06-23T09:38:02.9137224Z           "complete": false,
2026-06-23T09:38:02.9137332Z           "evidence": []
2026-06-23T09:38:02.9137437Z         },
2026-06-23T09:38:02.9137528Z         "int": {
2026-06-23T09:38:02.9137630Z           "complete": false,
2026-06-23T09:38:02.9137740Z           "evidence": []
2026-06-23T09:38:02.9137841Z         },
2026-06-23T09:38:02.9137945Z         "unit": {
2026-06-23T09:38:02.9138055Z           "complete": false,
2026-06-23T09:38:02.9138170Z           "evidence": []
2026-06-23T09:38:02.9138264Z         }
2026-06-23T09:38:02.9138364Z       }
2026-06-23T09:38:02.9138470Z     },
2026-06-23T09:38:02.9138565Z     {
2026-06-23T09:38:02.9138684Z       "id": "REQ-DOCS-4",
2026-06-23T09:38:02.9138899Z       "title": "Agent-consumable layer (llms.txt, manifest schema, MCP, CLI help)",
2026-06-23T09:38:02.9139086Z       "requiredStages": [
2026-06-23T09:38:02.9139299Z         "doc",
2026-06-23T09:38:02.9139405Z         "impl",
2026-06-23T09:38:02.9139508Z         "unit"
2026-06-23T09:38:02.9139604Z       ],
2026-06-23T09:38:02.9139711Z       "stages": {
2026-06-23T09:38:02.9139814Z         "doc": {
2026-06-23T09:38:02.9139919Z           "complete": true,
2026-06-23T09:38:02.9140025Z           "evidence": [
2026-06-23T09:38:02.9140133Z             {
2026-06-23T09:38:02.9140381Z               "path": "docs/DOCS-STRATEGY.md",
2026-06-23T09:38:02.9140488Z               "line": 35
2026-06-23T09:38:02.9140592Z             }
2026-06-23T09:38:02.9140679Z           ]
2026-06-23T09:38:02.9140779Z         },
2026-06-23T09:38:02.9140879Z         "impl": {
2026-06-23T09:38:02.9140990Z           "complete": true,
2026-06-23T09:38:02.9141094Z           "evidence": [
2026-06-23T09:38:02.9141198Z             {
2026-06-23T09:38:02.9141347Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.9141451Z               "line": 793
2026-06-23T09:38:02.9141561Z             },
2026-06-23T09:38:02.9141666Z             {
2026-06-23T09:38:02.9141789Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:02.9141895Z               "line": 15
2026-06-23T09:38:02.9141995Z             }
2026-06-23T09:38:02.9142095Z           ]
2026-06-23T09:38:02.9142195Z         },
2026-06-23T09:38:02.9142301Z         "int": {
2026-06-23T09:38:02.9142409Z           "complete": false,
2026-06-23T09:38:02.9142520Z           "evidence": []
2026-06-23T09:38:02.9142620Z         },
2026-06-23T09:38:02.9142719Z         "unit": {
2026-06-23T09:38:02.9142837Z           "complete": true,
2026-06-23T09:38:02.9142942Z           "evidence": [
2026-06-23T09:38:02.9143040Z             {
2026-06-23T09:38:02.9143179Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.9143289Z               "line": 1729
2026-06-23T09:38:02.9143398Z             }
2026-06-23T09:38:02.9143493Z           ]
2026-06-23T09:38:02.9143589Z         }
2026-06-23T09:38:02.9143684Z       }
2026-06-23T09:38:02.9143779Z     },
2026-06-23T09:38:02.9143880Z     {
2026-06-23T09:38:02.9143985Z       "id": "REQ-DOCS-5",
2026-06-23T09:38:02.9144209Z       "title": "Anti-drift: rustdoc/schema/exports/CLI-help generated + CI-checked",
2026-06-23T09:38:02.9144313Z       "requiredStages": [
2026-06-23T09:38:02.9144418Z         "impl",
2026-06-23T09:38:02.9144510Z         "int"
2026-06-23T09:38:02.9144619Z       ],
2026-06-23T09:38:02.9144723Z       "stages": {
2026-06-23T09:38:02.9144830Z         "doc": {
2026-06-23T09:38:02.9144938Z           "complete": false,
2026-06-23T09:38:02.9145038Z           "evidence": []
2026-06-23T09:38:02.9145140Z         },
2026-06-23T09:38:02.9145243Z         "impl": {
2026-06-23T09:38:02.9145358Z           "complete": true,
2026-06-23T09:38:02.9145460Z           "evidence": [
2026-06-23T09:38:02.9145567Z             {
2026-06-23T09:38:02.9145714Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.9145820Z               "line": 794
2026-06-23T09:38:02.9145929Z             },
2026-06-23T09:38:02.9146024Z             {
2026-06-23T09:38:02.9146164Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:02.9146272Z               "line": 114
2026-06-23T09:38:02.9146372Z             }
2026-06-23T09:38:02.9146478Z           ]
2026-06-23T09:38:02.9146568Z         },
2026-06-23T09:38:02.9146673Z         "int": {
2026-06-23T09:38:02.9146783Z           "complete": true,
2026-06-23T09:38:02.9146897Z           "evidence": [
2026-06-23T09:38:02.9146997Z             {
2026-06-23T09:38:02.9147136Z               "path": ".github/workflows/ci.yml",
2026-06-23T09:38:02.9147250Z               "line": 198
2026-06-23T09:38:02.9147346Z             },
2026-06-23T09:38:02.9147436Z             {
2026-06-23T09:38:02.9147579Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:02.9147690Z               "line": 1766
2026-06-23T09:38:02.9147803Z             }
2026-06-23T09:38:02.9147902Z           ]
2026-06-23T09:38:02.9148002Z         },
2026-06-23T09:38:02.9148185Z         "unit": {
2026-06-23T09:38:02.9148295Z           "complete": false,
2026-06-23T09:38:02.9148401Z           "evidence": []
2026-06-23T09:38:02.9148500Z         }
2026-06-23T09:38:02.9148600Z       }
2026-06-23T09:38:02.9148707Z     },
2026-06-23T09:38:02.9148806Z     {
2026-06-23T09:38:02.9148901Z       "id": "REQ-DOCS-6",
2026-06-23T09:38:02.9149341Z       "title": "spt how-to <topic>: in-binary task-oriented agent instructions (anti-drift; quickstart prompts point agents at it)",
2026-06-23T09:38:02.9149554Z       "requiredStages": [
2026-06-23T09:38:02.9149665Z         "impl",
2026-06-23T09:38:02.9149774Z         "unit",
2026-06-23T09:38:02.9149878Z         "int"
2026-06-23T09:38:02.9149985Z       ],
2026-06-23T09:38:02.9150078Z       "stages": {
2026-06-23T09:38:02.9150184Z         "doc": {
2026-06-23T09:38:02.9150294Z           "complete": true,
2026-06-23T09:38:02.9150402Z           "evidence": [
2026-06-23T09:38:02.9150504Z             {
2026-06-23T09:38:02.9152998Z               "path": "docs-site/src/quickstart/messaging.md",
2026-06-23T09:38:02.9153138Z               "line": 4
2026-06-23T09:38:02.9153241Z             }
2026-06-23T09:38:02.9153345Z           ]
2026-06-23T09:38:02.9153440Z         },
2026-06-23T09:38:02.9153544Z         "impl": {
2026-06-23T09:38:02.9153653Z           "complete": true,
2026-06-23T09:38:02.9153762Z           "evidence": [
2026-06-23T09:38:02.9153864Z             {
2026-06-23T09:38:02.9154001Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9154107Z               "line": 5895
2026-06-23T09:38:02.9154207Z             }
2026-06-23T09:38:02.9154311Z           ]
2026-06-23T09:38:02.9154407Z         },
2026-06-23T09:38:02.9154512Z         "int": {
2026-06-23T09:38:02.9154621Z           "complete": true,
2026-06-23T09:38:02.9154727Z           "evidence": [
2026-06-23T09:38:02.9154831Z             {
2026-06-23T09:38:02.9154983Z               "path": "crates/spt/tests/quickstart_e2e.rs",
2026-06-23T09:38:02.9155094Z               "line": 39
2026-06-23T09:38:02.9155198Z             }
2026-06-23T09:38:02.9155298Z           ]
2026-06-23T09:38:02.9155413Z         },
2026-06-23T09:38:02.9155512Z         "unit": {
2026-06-23T09:38:02.9155622Z           "complete": true,
2026-06-23T09:38:02.9155733Z           "evidence": [
2026-06-23T09:38:02.9155841Z             {
2026-06-23T09:38:02.9155972Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9156090Z               "line": 12280
2026-06-23T09:38:02.9156194Z             }
2026-06-23T09:38:02.9156293Z           ]
2026-06-23T09:38:02.9156395Z         }
2026-06-23T09:38:02.9156489Z       }
2026-06-23T09:38:02.9156589Z     },
2026-06-23T09:38:02.9156685Z     {
2026-06-23T09:38:02.9156827Z       "id": "REQ-DOCS-NO-INTERNAL-CODES",
2026-06-23T09:38:02.9158595Z       "title": "Public CLI --help (the clap `///` doc-comments) and the generated `docs-site/src/cli/reference.md` MUST NOT contain internal tracker/decision codes — `REQ-*`, `F-###`, `M#-W#`, `ADR-####`. They are meaningless to an end user reading --help and ship to GH-Pages. A CI-gated scan (the `xtask check` docs gate) fails on any such token in the GENERATED reference.md (which by construction contains only clap help, so rustdoc `///` on fns/structs is OUT of scope and keeps its REQ/ADR cross-refs). Substance is kept; codes are rewritten to plain language. (v0.13.2 W6)",
2026-06-23T09:38:02.9158713Z       "requiredStages": [
2026-06-23T09:38:02.9158822Z         "doc",
2026-06-23T09:38:02.9158927Z         "impl",
2026-06-23T09:38:02.9159103Z         "unit"
2026-06-23T09:38:02.9159204Z       ],
2026-06-23T09:38:02.9159309Z       "stages": {
2026-06-23T09:38:02.9159413Z         "doc": {
2026-06-23T09:38:02.9159524Z           "complete": true,
2026-06-23T09:38:02.9159638Z           "evidence": [
2026-06-23T09:38:02.9159737Z             {
2026-06-23T09:38:02.9159872Z               "path": "docs/DOCS-STRATEGY.md",
2026-06-23T09:38:02.9159981Z               "line": 59
2026-06-23T09:38:02.9160080Z             }
2026-06-23T09:38:02.9160315Z           ]
2026-06-23T09:38:02.9160419Z         },
2026-06-23T09:38:02.9160530Z         "impl": {
2026-06-23T09:38:02.9160633Z           "complete": true,
2026-06-23T09:38:02.9160739Z           "evidence": [
2026-06-23T09:38:02.9160840Z             {
2026-06-23T09:38:02.9160977Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:02.9161083Z               "line": 200
2026-06-23T09:38:02.9161268Z             },
2026-06-23T09:38:02.9161367Z             {
2026-06-23T09:38:02.9161491Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:02.9161590Z               "line": 254
2026-06-23T09:38:02.9161689Z             }
2026-06-23T09:38:02.9161785Z           ]
2026-06-23T09:38:02.9161886Z         },
2026-06-23T09:38:02.9161994Z         "int": {
2026-06-23T09:38:02.9162100Z           "complete": false,
2026-06-23T09:38:02.9162215Z           "evidence": []
2026-06-23T09:38:02.9162304Z         },
2026-06-23T09:38:02.9162410Z         "unit": {
2026-06-23T09:38:02.9162529Z           "complete": true,
2026-06-23T09:38:02.9162633Z           "evidence": [
2026-06-23T09:38:02.9162729Z             {
2026-06-23T09:38:02.9162867Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:02.9162977Z               "line": 1398
2026-06-23T09:38:02.9163064Z             },
2026-06-23T09:38:02.9163162Z             {
2026-06-23T09:38:02.9163282Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:02.9163397Z               "line": 1419
2026-06-23T09:38:02.9163496Z             }
2026-06-23T09:38:02.9163592Z           ]
2026-06-23T09:38:02.9163693Z         }
2026-06-23T09:38:02.9163783Z       }
2026-06-23T09:38:02.9163891Z     },
2026-06-23T09:38:02.9163987Z     {
2026-06-23T09:38:02.9164105Z       "id": "REQ-ELEVATE-1",
2026-06-23T09:38:02.9167293Z       "title": "Cross-platform self-elevating re-launch for privilege-gated commands: a pure decision seam `decide_elevation_path(os, elevation, interactive_tty, has_display, has_pkexec, has_term_emulator) -> ElevatePath{AlreadyElevated, InlineSudo, UacWindow, Pkexec, TerminalEmulator, PrintHint}` selecting how to re-acquire privilege, and the per-OS impure launchers it dispatches — Windows UAC console (ShellExecuteW `runas` on the abs-exe + verbatim argv; the elevated child does the work, prints 'You can close this window', and pauses for a keypress; the original prints 'Elevated terminal launched…' and exits 0; NEVER pipes the child's stdout back across the privilege boundary), Linux desktop pkexec (preferred, native polkit GUI auth) else x-terminal-emulator -e sudo (fallback list x-terminal-emulator→gnome-terminal→konsole→xterm), the existing interactive-TTY inline sudo, and the headless/no-path floor that prints the absolute-path command. Reused by every gated command (not subnet-specific). Generalizes should_auto_elevate.",
2026-06-23T09:38:02.9167421Z       "requiredStages": [
2026-06-23T09:38:02.9167527Z         "doc",
2026-06-23T09:38:02.9167636Z         "impl",
2026-06-23T09:38:02.9167736Z         "unit"
2026-06-23T09:38:02.9167836Z       ],
2026-06-23T09:38:02.9167936Z       "stages": {
2026-06-23T09:38:02.9168045Z         "doc": {
2026-06-23T09:38:02.9168146Z           "complete": true,
2026-06-23T09:38:02.9168256Z           "evidence": [
2026-06-23T09:38:02.9168360Z             {
2026-06-23T09:38:02.9168476Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.9168580Z               "line": 705
2026-06-23T09:38:02.9168680Z             }
2026-06-23T09:38:02.9168790Z           ]
2026-06-23T09:38:02.9168885Z         },
2026-06-23T09:38:02.9169074Z         "impl": {
2026-06-23T09:38:02.9169184Z           "complete": true,
2026-06-23T09:38:02.9169282Z           "evidence": [
2026-06-23T09:38:02.9169391Z             {
2026-06-23T09:38:02.9169512Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9169626Z               "line": 4227
2026-06-23T09:38:02.9169726Z             },
2026-06-23T09:38:02.9169827Z             {
2026-06-23T09:38:02.9169954Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9170160Z               "line": 4272
2026-06-23T09:38:02.9170269Z             },
2026-06-23T09:38:02.9170355Z             {
2026-06-23T09:38:02.9170479Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9170579Z               "line": 4334
2026-06-23T09:38:02.9170684Z             },
2026-06-23T09:38:02.9170790Z             {
2026-06-23T09:38:02.9170918Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9171119Z               "line": 92
2026-06-23T09:38:02.9171218Z             },
2026-06-23T09:38:02.9171319Z             {
2026-06-23T09:38:02.9171443Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9171552Z               "line": 148
2026-06-23T09:38:02.9171653Z             }
2026-06-23T09:38:02.9171753Z           ]
2026-06-23T09:38:02.9171856Z         },
2026-06-23T09:38:02.9171951Z         "int": {
2026-06-23T09:38:02.9172066Z           "complete": false,
2026-06-23T09:38:02.9172173Z           "evidence": []
2026-06-23T09:38:02.9172273Z         },
2026-06-23T09:38:02.9172374Z         "unit": {
2026-06-23T09:38:02.9172483Z           "complete": true,
2026-06-23T09:38:02.9172597Z           "evidence": [
2026-06-23T09:38:02.9172689Z             {
2026-06-23T09:38:02.9172826Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9172926Z               "line": 442
2026-06-23T09:38:02.9173037Z             },
2026-06-23T09:38:02.9173137Z             {
2026-06-23T09:38:02.9173270Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9173366Z               "line": 460
2026-06-23T09:38:02.9173452Z             }
2026-06-23T09:38:02.9173551Z           ]
2026-06-23T09:38:02.9173648Z         }
2026-06-23T09:38:02.9173751Z       }
2026-06-23T09:38:02.9173852Z     },
2026-06-23T09:38:02.9173938Z     {
2026-06-23T09:38:02.9174070Z       "id": "REQ-ENDPOINT-LIST-MERGE-LOCAL",
2026-06-23T09:38:02.9175876Z       "title": "`spt endpoint list` always merges this node's LOCAL (unadvertised) perches into the view; the `--local` flag is REMOVED (operator decision 2026-06-17). Rationale: `spt whoami` is a thin alias of `endpoint list` — a just-online agent running `whoami` must see its OWN perch, or it gets an omitted-self view ('chaos'). FIX: drop the `--local` flag + its `--detail` conflict test + the v0.10.0 REQ-PICKER-5 hint line (cli.rs:1678) + cmd_list_local; the bare list merges local perches into the subnet view; fix the whoami alias path accordingly. Run `cargo run -p xtask -- gen` (docs-drift, DEFAULT target). (v0.12.1)",
2026-06-23T09:38:02.9176004Z       "requiredStages": [
2026-06-23T09:38:02.9176099Z         "doc",
2026-06-23T09:38:02.9176205Z         "impl",
2026-06-23T09:38:02.9176304Z         "unit"
2026-06-23T09:38:02.9176404Z       ],
2026-06-23T09:38:02.9176515Z       "stages": {
2026-06-23T09:38:02.9176623Z         "doc": {
2026-06-23T09:38:02.9176728Z           "complete": true,
2026-06-23T09:38:02.9176825Z           "evidence": [
2026-06-23T09:38:02.9176923Z             {
2026-06-23T09:38:02.9177038Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.9177144Z               "line": 732
2026-06-23T09:38:02.9177243Z             }
2026-06-23T09:38:02.9177347Z           ]
2026-06-23T09:38:02.9177457Z         },
2026-06-23T09:38:02.9177572Z         "impl": {
2026-06-23T09:38:02.9177681Z           "complete": true,
2026-06-23T09:38:02.9177791Z           "evidence": [
2026-06-23T09:38:02.9177891Z             {
2026-06-23T09:38:02.9178019Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9178121Z               "line": 2070
2026-06-23T09:38:02.9178211Z             },
2026-06-23T09:38:02.9178305Z             {
2026-06-23T09:38:02.9178421Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9178534Z               "line": 3775
2026-06-23T09:38:02.9178629Z             },
2026-06-23T09:38:02.9178731Z             {
2026-06-23T09:38:02.9178859Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9179036Z               "line": 3784
2026-06-23T09:38:02.9179131Z             }
2026-06-23T09:38:02.9179326Z           ]
2026-06-23T09:38:02.9179432Z         },
2026-06-23T09:38:02.9179521Z         "int": {
2026-06-23T09:38:02.9179644Z           "complete": false,
2026-06-23T09:38:02.9179754Z           "evidence": []
2026-06-23T09:38:02.9179842Z         },
2026-06-23T09:38:02.9179942Z         "unit": {
2026-06-23T09:38:02.9180048Z           "complete": true,
2026-06-23T09:38:02.9180152Z           "evidence": [
2026-06-23T09:38:02.9180372Z             {
2026-06-23T09:38:02.9180505Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9180615Z               "line": 9327
2026-06-23T09:38:02.9180716Z             },
2026-06-23T09:38:02.9180819Z             {
2026-06-23T09:38:02.9180944Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9181054Z               "line": 9385
2026-06-23T09:38:02.9181149Z             }
2026-06-23T09:38:02.9181254Z           ]
2026-06-23T09:38:02.9181354Z         }
2026-06-23T09:38:02.9181445Z       }
2026-06-23T09:38:02.9181554Z     },
2026-06-23T09:38:02.9181655Z     {
2026-06-23T09:38:02.9181783Z       "id": "REQ-ENDPOINT-PURGE",
2026-06-23T09:38:02.9186554Z       "title": "`spt endpoint purge <id>` fully removes an endpoint AND every record keyed on it — the formal teardown devs/CI need for clean test setup/reset. NOT consent-gated (a local dev/test op — no peer consent). OFFLINE-ONLY: refuses while the endpoint is online / daemon-hosted (deleting records out from under a live host risks the daemon re-creating or re-hosting mid-purge); `--force` STOPS it first (endpoint stop → wait for the daemon reconcile to un-host + reap the Psyche) THEN purges. Confirms interactively unless `--yes` (the CI path). Refuses purging the CALLER's OWN running id. All LOCAL — purge reaches only THIS node's records; a remote endpoint's records can't be touched, and its subnet-registry rows decay via the epoch-lease eviction (REQ-HAZARD-REGISTRY-DECAY). Removes: (1) the perch dir TREE recursively — owlery/<id>/ incl every nested {id}-psyche / {id}-w* / shells child (info.json, ready marker, sessions.log ledger, spool.db, inbox, .idle/.more-done sentinels, auth token); (2) the registry address (registry::unregister_address); (3) the context store — ContextStore::remove_endpoint(id): the a-<id> branch+worktree + the <id>/ rows from every p-<project> branch (the same fn `fork --delete-source` already uses); (4) node-local trust rows keyed on the id — access.json + visibility.json. Reuse-heavy: it is `fork --delete-source` generalized (recursive perch remove + unregister + remove_endpoint) + the trust-record cleanup; `endpoint rename` already enumerates the same record set + uses the same offline-only gate. (v0.12.0)",
2026-06-23T09:38:02.9186687Z       "requiredStages": [
2026-06-23T09:38:02.9186784Z         "doc",
2026-06-23T09:38:02.9186879Z         "impl",
2026-06-23T09:38:02.9186983Z         "unit",
2026-06-23T09:38:02.9187084Z         "int"
2026-06-23T09:38:02.9187187Z       ],
2026-06-23T09:38:02.9187298Z       "stages": {
2026-06-23T09:38:02.9187395Z         "doc": {
2026-06-23T09:38:02.9187521Z           "complete": true,
2026-06-23T09:38:02.9187623Z           "evidence": [
2026-06-23T09:38:02.9187719Z             {
2026-06-23T09:38:02.9187836Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.9187945Z               "line": 172
2026-06-23T09:38:02.9188046Z             }
2026-06-23T09:38:02.9188142Z           ]
2026-06-23T09:38:02.9188246Z         },
2026-06-23T09:38:02.9188356Z         "impl": {
2026-06-23T09:38:02.9188461Z           "complete": true,
2026-06-23T09:38:02.9188570Z           "evidence": [
2026-06-23T09:38:02.9188671Z             {
2026-06-23T09:38:02.9188832Z               "path": "crates/spt-store/src/visibility.rs",
2026-06-23T09:38:02.9189024Z               "line": 105
2026-06-23T09:38:02.9189128Z             },
2026-06-23T09:38:02.9189232Z             {
2026-06-23T09:38:02.9189362Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9189471Z               "line": 8284
2026-06-23T09:38:02.9189567Z             }
2026-06-23T09:38:02.9189771Z           ]
2026-06-23T09:38:02.9189872Z         },
2026-06-23T09:38:02.9189978Z         "int": {
2026-06-23T09:38:02.9190086Z           "complete": true,
2026-06-23T09:38:02.9190199Z           "evidence": [
2026-06-23T09:38:02.9190295Z             {
2026-06-23T09:38:02.9190426Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9190541Z               "line": 8761
2026-06-23T09:38:02.9190637Z             }
2026-06-23T09:38:02.9190831Z           ]
2026-06-23T09:38:02.9190932Z         },
2026-06-23T09:38:02.9191036Z         "unit": {
2026-06-23T09:38:02.9191141Z           "complete": true,
2026-06-23T09:38:02.9191247Z           "evidence": [
2026-06-23T09:38:02.9191351Z             {
2026-06-23T09:38:02.9191475Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9191585Z               "line": 8732
2026-06-23T09:38:02.9191685Z             }
2026-06-23T09:38:02.9191790Z           ]
2026-06-23T09:38:02.9191886Z         }
2026-06-23T09:38:02.9191986Z       }
2026-06-23T09:38:02.9192081Z     },
2026-06-23T09:38:02.9192178Z     {
2026-06-23T09:38:02.9192309Z       "id": "REQ-ENDPOINT-STOP-OFFLINE",
2026-06-23T09:38:02.9193651Z       "title": "H3: `spt endpoint stop <id>` marks the endpoint OFFLINE (alive=false), not merely de-readied. cmd_stop (cli.rs:2994-3010) removes the ready marker + unregisters the address but does NOT set status offline, so a stopped daemon-hosted endpoint still reports alive=true (status=online latch). FIX: add set_status(perch, STATUS_OFFLINE) to cmd_stop — folds with B2 (same setter). Unit: stop → is_perch_alive=false / alive=false. (v0.12.0)",
2026-06-23T09:38:02.9193781Z       "requiredStages": [
2026-06-23T09:38:02.9193890Z         "impl",
2026-06-23T09:38:02.9193989Z         "unit"
2026-06-23T09:38:02.9194091Z       ],
2026-06-23T09:38:02.9194195Z       "stages": {
2026-06-23T09:38:02.9194299Z         "doc": {
2026-06-23T09:38:02.9194410Z           "complete": false,
2026-06-23T09:38:02.9194519Z           "evidence": []
2026-06-23T09:38:02.9194619Z         },
2026-06-23T09:38:02.9194730Z         "impl": {
2026-06-23T09:38:02.9194843Z           "complete": true,
2026-06-23T09:38:02.9194948Z           "evidence": [
2026-06-23T09:38:02.9195050Z             {
2026-06-23T09:38:02.9195172Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9195281Z               "line": 3820
2026-06-23T09:38:02.9195383Z             }
2026-06-23T09:38:02.9195478Z           ]
2026-06-23T09:38:02.9195581Z         },
2026-06-23T09:38:02.9195681Z         "int": {
2026-06-23T09:38:02.9195795Z           "complete": false,
2026-06-23T09:38:02.9195893Z           "evidence": []
2026-06-23T09:38:02.9195989Z         },
2026-06-23T09:38:02.9196094Z         "unit": {
2026-06-23T09:38:02.9196199Z           "complete": true,
2026-06-23T09:38:02.9196308Z           "evidence": [
2026-06-23T09:38:02.9196405Z             {
2026-06-23T09:38:02.9196537Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9196643Z               "line": 8708
2026-06-23T09:38:02.9196738Z             }
2026-06-23T09:38:02.9196847Z           ]
2026-06-23T09:38:02.9196943Z         }
2026-06-23T09:38:02.9197048Z       }
2026-06-23T09:38:02.9197143Z     },
2026-06-23T09:38:02.9197248Z     {
2026-06-23T09:38:02.9197377Z       "id": "REQ-ENDPOINT-UNBOUND-ATTACH",
2026-06-23T09:38:02.9200199Z       "title": "An spt-hosted endpoint is ATTACHABLE between spawn and bind: gate the attach on the broker SESSION being attachable (session+PTY+OutputLog exist at spawn, before bind), not on perch STATUS_ONLINE (bind). cmd_endpoint_run + `spt rc <id>` attach to a live broker session regardless of perch status (headless bringups too; lets an operator clear a bind-gating prompt) -- replaces await_endpoint_online; preserves REQ-HAZARD-RC-ATTACH-ONLINE-RACE's 'no attach before a session' intent at the earlier session-exists point; source = the broker sessions map (ADR-0025 W3a); local-only. New on-disk status STATUS_UNBOUND (spawn->unbound, bind->online, death->offline); lifecycle reuses the existing exit-waiter/reconcile (session death->offline); unbound is attachable but NOT message-addressable (messaging stays online/bound-gated). EpDisplay gains Unbound = HOLLOW (+ hollow-controlled variant) -- amber=HarnessOnly is taken + means not-controllable (the opposite of attachable). (ADR-0027)",
2026-06-23T09:38:02.9200331Z       "requiredStages": [
2026-06-23T09:38:02.9200437Z         "doc",
2026-06-23T09:38:02.9200538Z         "impl",
2026-06-23T09:38:02.9200745Z         "unit",
2026-06-23T09:38:02.9200836Z         "int"
2026-06-23T09:38:02.9200925Z       ],
2026-06-23T09:38:02.9201030Z       "stages": {
2026-06-23T09:38:02.9201134Z         "doc": {
2026-06-23T09:38:02.9201245Z           "complete": true,
2026-06-23T09:38:02.9201339Z           "evidence": [
2026-06-23T09:38:02.9201439Z             {
2026-06-23T09:38:02.9201549Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.9201658Z               "line": 602
2026-06-23T09:38:02.9201759Z             },
2026-06-23T09:38:02.9201864Z             {
2026-06-23T09:38:02.9202103Z               "path": "docs/adr/0027-unbound-endpoint-state-and-attach-on-session.md",
2026-06-23T09:38:02.9202207Z               "line": 3
2026-06-23T09:38:02.9202307Z             }
2026-06-23T09:38:02.9202408Z           ]
2026-06-23T09:38:02.9202507Z         },
2026-06-23T09:38:02.9202607Z         "impl": {
2026-06-23T09:38:02.9202718Z           "complete": true,
2026-06-23T09:38:02.9202827Z           "evidence": [
2026-06-23T09:38:02.9202936Z             {
2026-06-23T09:38:02.9203077Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9203179Z               "line": 537
2026-06-23T09:38:02.9203280Z             },
2026-06-23T09:38:02.9203377Z             {
2026-06-23T09:38:02.9203527Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9203636Z               "line": 544
2026-06-23T09:38:02.9203737Z             },
2026-06-23T09:38:02.9203839Z             {
2026-06-23T09:38:02.9203987Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9204098Z               "line": 45
2026-06-23T09:38:02.9204187Z             },
2026-06-23T09:38:02.9204287Z             {
2026-06-23T09:38:02.9204436Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9204545Z               "line": 80
2026-06-23T09:38:02.9204646Z             },
2026-06-23T09:38:02.9204741Z             {
2026-06-23T09:38:02.9204883Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9204994Z               "line": 118
2026-06-23T09:38:02.9205093Z             },
2026-06-23T09:38:02.9205203Z             {
2026-06-23T09:38:02.9205319Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9205436Z               "line": 1769
2026-06-23T09:38:02.9205536Z             },
2026-06-23T09:38:02.9205643Z             {
2026-06-23T09:38:02.9205770Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9205876Z               "line": 1790
2026-06-23T09:38:02.9205981Z             },
2026-06-23T09:38:02.9206080Z             {
2026-06-23T09:38:02.9206222Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:02.9206322Z               "line": 151
2026-06-23T09:38:02.9206421Z             },
2026-06-23T09:38:02.9206520Z             {
2026-06-23T09:38:02.9206655Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:02.9206759Z               "line": 173
2026-06-23T09:38:02.9206854Z             },
2026-06-23T09:38:02.9206965Z             {
2026-06-23T09:38:02.9207083Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9207193Z               "line": 542
2026-06-23T09:38:02.9207298Z             },
2026-06-23T09:38:02.9207393Z             {
2026-06-23T09:38:02.9207523Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9207627Z               "line": 555
2026-06-23T09:38:02.9207731Z             },
2026-06-23T09:38:02.9207827Z             {
2026-06-23T09:38:02.9207956Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9208061Z               "line": 752
2026-06-23T09:38:02.9208238Z             },
2026-06-23T09:38:02.9208352Z             {
2026-06-23T09:38:02.9208477Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9208585Z               "line": 804
2026-06-23T09:38:02.9208676Z             }
2026-06-23T09:38:02.9208777Z           ]
2026-06-23T09:38:02.9208886Z         },
2026-06-23T09:38:02.9209061Z         "int": {
2026-06-23T09:38:02.9209171Z           "complete": true,
2026-06-23T09:38:02.9209380Z           "evidence": [
2026-06-23T09:38:02.9209486Z             {
2026-06-23T09:38:02.9209619Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:02.9209723Z               "line": 426
2026-06-23T09:38:02.9209830Z             },
2026-06-23T09:38:02.9209929Z             {
2026-06-23T09:38:02.9210092Z               "path": "crates/spt/tests/multi_subnet_bringup_e2e.rs",
2026-06-23T09:38:02.9210196Z               "line": 333
2026-06-23T09:38:02.9210291Z             }
2026-06-23T09:38:02.9210387Z           ]
2026-06-23T09:38:02.9210497Z         },
2026-06-23T09:38:02.9210606Z         "unit": {
2026-06-23T09:38:02.9210707Z           "complete": true,
2026-06-23T09:38:02.9210816Z           "evidence": [
2026-06-23T09:38:02.9210916Z             {
2026-06-23T09:38:02.9211065Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9211173Z               "line": 1033
2026-06-23T09:38:02.9211277Z             },
2026-06-23T09:38:02.9211382Z             {
2026-06-23T09:38:02.9211523Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9211636Z               "line": 224
2026-06-23T09:38:02.9211743Z             },
2026-06-23T09:38:02.9211847Z             {
2026-06-23T09:38:02.9211980Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9212095Z               "line": 262
2026-06-23T09:38:02.9212199Z             },
2026-06-23T09:38:02.9212290Z             {
2026-06-23T09:38:02.9212424Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9212538Z               "line": 9351
2026-06-23T09:38:02.9212644Z             },
2026-06-23T09:38:02.9212743Z             {
2026-06-23T09:38:02.9212862Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9212973Z               "line": 9563
2026-06-23T09:38:02.9213072Z             },
2026-06-23T09:38:02.9213177Z             {
2026-06-23T09:38:02.9213312Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:02.9213425Z               "line": 395
2026-06-23T09:38:02.9213520Z             },
2026-06-23T09:38:02.9213617Z             {
2026-06-23T09:38:02.9213758Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:02.9213864Z               "line": 957
2026-06-23T09:38:02.9213970Z             },
2026-06-23T09:38:02.9214063Z             {
2026-06-23T09:38:02.9214196Z               "path": "crates/spt/src/picker/view.rs",
2026-06-23T09:38:02.9214307Z               "line": 509
2026-06-23T09:38:02.9214399Z             }
2026-06-23T09:38:02.9214499Z           ]
2026-06-23T09:38:02.9214590Z         }
2026-06-23T09:38:02.9214691Z       }
2026-06-23T09:38:02.9214790Z     },
2026-06-23T09:38:02.9214891Z     {
2026-06-23T09:38:02.9215001Z       "id": "REQ-EP-1",
2026-06-23T09:38:02.9215152Z       "title": "Day-one endpoint types; open type system",
2026-06-23T09:38:02.9215258Z       "requiredStages": [
2026-06-23T09:38:02.9215358Z         "impl",
2026-06-23T09:38:02.9215467Z         "unit"
2026-06-23T09:38:02.9215569Z       ],
2026-06-23T09:38:02.9215682Z       "stages": {
2026-06-23T09:38:02.9215782Z         "doc": {
2026-06-23T09:38:02.9215884Z           "complete": false,
2026-06-23T09:38:02.9215992Z           "evidence": []
2026-06-23T09:38:02.9216087Z         },
2026-06-23T09:38:02.9216194Z         "impl": {
2026-06-23T09:38:02.9216306Z           "complete": true,
2026-06-23T09:38:02.9216416Z           "evidence": [
2026-06-23T09:38:02.9216518Z             {
2026-06-23T09:38:02.9216659Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9216768Z               "line": 77
2026-06-23T09:38:02.9216971Z             },
2026-06-23T09:38:02.9217080Z             {
2026-06-23T09:38:02.9217220Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9217328Z               "line": 94
2026-06-23T09:38:02.9217428Z             }
2026-06-23T09:38:02.9217525Z           ]
2026-06-23T09:38:02.9217629Z         },
2026-06-23T09:38:02.9217729Z         "int": {
2026-06-23T09:38:02.9217910Z           "complete": false,
2026-06-23T09:38:02.9218019Z           "evidence": []
2026-06-23T09:38:02.9218125Z         },
2026-06-23T09:38:02.9218230Z         "unit": {
2026-06-23T09:38:02.9218334Z           "complete": true,
2026-06-23T09:38:02.9218440Z           "evidence": [
2026-06-23T09:38:02.9218530Z             {
2026-06-23T09:38:02.9218678Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9218788Z               "line": 161
2026-06-23T09:38:02.9218892Z             },
2026-06-23T09:38:02.9219080Z             {
2026-06-23T09:38:02.9219221Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9219332Z               "line": 178
2026-06-23T09:38:02.9219423Z             }
2026-06-23T09:38:02.9219526Z           ]
2026-06-23T09:38:02.9219625Z         }
2026-06-23T09:38:02.9219726Z       }
2026-06-23T09:38:02.9219836Z     },
2026-06-23T09:38:02.9219921Z     {
2026-06-23T09:38:02.9220031Z       "id": "REQ-EP-2",
2026-06-23T09:38:02.9220212Z       "title": "Agent endpoints vs Shells distinction in the type model",
2026-06-23T09:38:02.9220332Z       "requiredStages": [
2026-06-23T09:38:02.9220437Z         "impl",
2026-06-23T09:38:02.9220541Z         "unit"
2026-06-23T09:38:02.9220637Z       ],
2026-06-23T09:38:02.9220742Z       "stages": {
2026-06-23T09:38:02.9220846Z         "doc": {
2026-06-23T09:38:02.9220947Z           "complete": false,
2026-06-23T09:38:02.9221057Z           "evidence": []
2026-06-23T09:38:02.9221157Z         },
2026-06-23T09:38:02.9221262Z         "impl": {
2026-06-23T09:38:02.9221372Z           "complete": true,
2026-06-23T09:38:02.9221486Z           "evidence": [
2026-06-23T09:38:02.9221586Z             {
2026-06-23T09:38:02.9221724Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9221837Z               "line": 114
2026-06-23T09:38:02.9221937Z             },
2026-06-23T09:38:02.9222032Z             {
2026-06-23T09:38:02.9222164Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9222274Z               "line": 131
2026-06-23T09:38:02.9222370Z             },
2026-06-23T09:38:02.9222469Z             {
2026-06-23T09:38:02.9222618Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9222722Z               "line": 138
2026-06-23T09:38:02.9222831Z             }
2026-06-23T09:38:02.9222933Z           ]
2026-06-23T09:38:02.9223028Z         },
2026-06-23T09:38:02.9223136Z         "int": {
2026-06-23T09:38:02.9223233Z           "complete": false,
2026-06-23T09:38:02.9223347Z           "evidence": []
2026-06-23T09:38:02.9223436Z         },
2026-06-23T09:38:02.9223547Z         "unit": {
2026-06-23T09:38:02.9223656Z           "complete": true,
2026-06-23T09:38:02.9223766Z           "evidence": [
2026-06-23T09:38:02.9223872Z             {
2026-06-23T09:38:02.9224014Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9224124Z               "line": 190
2026-06-23T09:38:02.9224230Z             },
2026-06-23T09:38:02.9224328Z             {
2026-06-23T09:38:02.9224478Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9224582Z               "line": 208
2026-06-23T09:38:02.9224690Z             },
2026-06-23T09:38:02.9224781Z             {
2026-06-23T09:38:02.9224923Z               "path": "crates/spt-proto/src/endpoint.rs",
2026-06-23T09:38:02.9225021Z               "line": 221
2026-06-23T09:38:02.9225126Z             }
2026-06-23T09:38:02.9225227Z           ]
2026-06-23T09:38:02.9225321Z         }
2026-06-23T09:38:02.9225422Z       }
2026-06-23T09:38:02.9225518Z     },
2026-06-23T09:38:02.9225617Z     {
2026-06-23T09:38:02.9225823Z       "id": "REQ-EP-3",
2026-06-23T09:38:02.9226047Z       "title": "Messaging payloads carry typed operation commands + file blobs",
2026-06-23T09:38:02.9226152Z       "requiredStages": [
2026-06-23T09:38:02.9226257Z         "impl",
2026-06-23T09:38:02.9226366Z         "unit"
2026-06-23T09:38:02.9226467Z       ],
2026-06-23T09:38:02.9226576Z       "stages": {
2026-06-23T09:38:02.9226768Z         "doc": {
2026-06-23T09:38:02.9226885Z           "complete": false,
2026-06-23T09:38:02.9226986Z           "evidence": []
2026-06-23T09:38:02.9227078Z         },
2026-06-23T09:38:02.9227181Z         "impl": {
2026-06-23T09:38:02.9227289Z           "complete": true,
2026-06-23T09:38:02.9227405Z           "evidence": [
2026-06-23T09:38:02.9227503Z             {
2026-06-23T09:38:02.9227645Z               "path": "crates/spt-proto/src/payload.rs",
2026-06-23T09:38:02.9227756Z               "line": 31
2026-06-23T09:38:02.9227855Z             },
2026-06-23T09:38:02.9227960Z             {
2026-06-23T09:38:02.9228094Z               "path": "crates/spt-proto/src/payload.rs",
2026-06-23T09:38:02.9228198Z               "line": 49
2026-06-23T09:38:02.9228299Z             }
2026-06-23T09:38:02.9228394Z           ]
2026-06-23T09:38:02.9228490Z         },
2026-06-23T09:38:02.9228579Z         "int": {
2026-06-23T09:38:02.9228691Z           "complete": false,
2026-06-23T09:38:02.9228799Z           "evidence": []
2026-06-23T09:38:02.9228909Z         },
2026-06-23T09:38:02.9229085Z         "unit": {
2026-06-23T09:38:02.9229195Z           "complete": true,
2026-06-23T09:38:02.9229301Z           "evidence": [
2026-06-23T09:38:02.9229395Z             {
2026-06-23T09:38:02.9229538Z               "path": "crates/spt-proto/src/payload.rs",
2026-06-23T09:38:02.9229645Z               "line": 156
2026-06-23T09:38:02.9229748Z             },
2026-06-23T09:38:02.9229849Z             {
2026-06-23T09:38:02.9229997Z               "path": "crates/spt-proto/src/payload.rs",
2026-06-23T09:38:02.9230105Z               "line": 164
2026-06-23T09:38:02.9230210Z             },
2026-06-23T09:38:02.9230316Z             {
2026-06-23T09:38:02.9230443Z               "path": "crates/spt-proto/src/payload.rs",
2026-06-23T09:38:02.9230553Z               "line": 177
2026-06-23T09:38:02.9230654Z             },
2026-06-23T09:38:02.9230758Z             {
2026-06-23T09:38:02.9230893Z               "path": "crates/spt-proto/src/payload.rs",
2026-06-23T09:38:02.9231002Z               "line": 200
2026-06-23T09:38:02.9231106Z             },
2026-06-23T09:38:02.9231212Z             {
2026-06-23T09:38:02.9231349Z               "path": "crates/spt-proto/src/payload.rs",
2026-06-23T09:38:02.9231454Z               "line": 216
2026-06-23T09:38:02.9231555Z             },
2026-06-23T09:38:02.9231650Z             {
2026-06-23T09:38:02.9231788Z               "path": "crates/spt-proto/src/payload.rs",
2026-06-23T09:38:02.9231889Z               "line": 233
2026-06-23T09:38:02.9231988Z             }
2026-06-23T09:38:02.9232093Z           ]
2026-06-23T09:38:02.9232195Z         }
2026-06-23T09:38:02.9232303Z       }
2026-06-23T09:38:02.9232393Z     },
2026-06-23T09:38:02.9232488Z     {
2026-06-23T09:38:02.9232601Z       "id": "REQ-EP-4",
2026-06-23T09:38:02.9232771Z       "title": "PresenceChannel broker endpoint (seam day-one)",
2026-06-23T09:38:02.9232882Z       "requiredStages": [
2026-06-23T09:38:02.9232982Z         "impl",
2026-06-23T09:38:02.9233086Z         "unit"
2026-06-23T09:38:02.9233188Z       ],
2026-06-23T09:38:02.9233297Z       "stages": {
2026-06-23T09:38:02.9233406Z         "doc": {
2026-06-23T09:38:02.9233517Z           "complete": false,
2026-06-23T09:38:02.9233635Z           "evidence": []
2026-06-23T09:38:02.9233725Z         },
2026-06-23T09:38:02.9233836Z         "impl": {
2026-06-23T09:38:02.9233955Z           "complete": true,
2026-06-23T09:38:02.9234059Z           "evidence": [
2026-06-23T09:38:02.9234165Z             {
2026-06-23T09:38:02.9234297Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9234404Z               "line": 778
2026-06-23T09:38:02.9234603Z             },
2026-06-23T09:38:02.9234704Z             {
2026-06-23T09:38:02.9234851Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9234960Z               "line": 1249
2026-06-23T09:38:02.9235066Z             },
2026-06-23T09:38:02.9235161Z             {
2026-06-23T09:38:02.9235302Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9235511Z               "line": 2268
2026-06-23T09:38:02.9235615Z             },
2026-06-23T09:38:02.9235720Z             {
2026-06-23T09:38:02.9235854Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9235962Z               "line": 131
2026-06-23T09:38:02.9236064Z             },
2026-06-23T09:38:02.9236169Z             {
2026-06-23T09:38:02.9236297Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9236412Z               "line": 751
2026-06-23T09:38:02.9236511Z             },
2026-06-23T09:38:02.9236607Z             {
2026-06-23T09:38:02.9236750Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9236854Z               "line": 900
2026-06-23T09:38:02.9236961Z             },
2026-06-23T09:38:02.9237060Z             {
2026-06-23T09:38:02.9237198Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9237309Z               "line": 271
2026-06-23T09:38:02.9237408Z             },
2026-06-23T09:38:02.9237513Z             {
2026-06-23T09:38:02.9237657Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9237765Z               "line": 458
2026-06-23T09:38:02.9237855Z             },
2026-06-23T09:38:02.9237950Z             {
2026-06-23T09:38:02.9238086Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9238195Z               "line": 1246
2026-06-23T09:38:02.9238302Z             }
2026-06-23T09:38:02.9238401Z           ]
2026-06-23T09:38:02.9238505Z         },
2026-06-23T09:38:02.9238603Z         "int": {
2026-06-23T09:38:02.9238716Z           "complete": false,
2026-06-23T09:38:02.9238839Z           "evidence": []
2026-06-23T09:38:02.9238941Z         },
2026-06-23T09:38:02.9239135Z         "unit": {
2026-06-23T09:38:02.9239237Z           "complete": true,
2026-06-23T09:38:02.9239355Z           "evidence": [
2026-06-23T09:38:02.9239450Z             {
2026-06-23T09:38:02.9239580Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9239693Z               "line": 991
2026-06-23T09:38:02.9239798Z             },
2026-06-23T09:38:02.9239904Z             {
2026-06-23T09:38:02.9240055Z               "path": "crates/spt-daemon/tests/presence.rs",
2026-06-23T09:38:02.9240162Z               "line": 76
2026-06-23T09:38:02.9240270Z             },
2026-06-23T09:38:02.9240366Z             {
2026-06-23T09:38:02.9240515Z               "path": "crates/spt-daemon/tests/presence.rs",
2026-06-23T09:38:02.9240618Z               "line": 147
2026-06-23T09:38:02.9243048Z             }
2026-06-23T09:38:02.9243161Z           ]
2026-06-23T09:38:02.9243260Z         }
2026-06-23T09:38:02.9243375Z       }
2026-06-23T09:38:02.9243471Z     },
2026-06-23T09:38:02.9243570Z     {
2026-06-23T09:38:02.9243685Z       "id": "REQ-EP-5",
2026-06-23T09:38:02.9244386Z       "title": "Concrete shell instantiation model: spawn-mints-instance (vs relink/online), registered-on-node permission + broadcast-is-discovery, per-shell require_approval gate, max_instances_per_owner + over_cap, instance aliasing, discovery scope",
2026-06-23T09:38:02.9244495Z       "requiredStages": [
2026-06-23T09:38:02.9244600Z         "impl",
2026-06-23T09:38:02.9244706Z         "unit",
2026-06-23T09:38:02.9244806Z         "int"
2026-06-23T09:38:02.9244910Z       ],
2026-06-23T09:38:02.9245011Z       "stages": {
2026-06-23T09:38:02.9245115Z         "doc": {
2026-06-23T09:38:02.9245230Z           "complete": false,
2026-06-23T09:38:02.9245335Z           "evidence": []
2026-06-23T09:38:02.9245430Z         },
2026-06-23T09:38:02.9245525Z         "impl": {
2026-06-23T09:38:02.9245650Z           "complete": true,
2026-06-23T09:38:02.9245886Z           "evidence": [
2026-06-23T09:38:02.9245996Z             {
2026-06-23T09:38:02.9246160Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9246280Z               "line": 367
2026-06-23T09:38:02.9246381Z             },
2026-06-23T09:38:02.9246475Z             {
2026-06-23T09:38:02.9246629Z               "path": "crates/spt-daemon/src/shelldisc.rs",
2026-06-23T09:38:02.9246823Z               "line": 18
2026-06-23T09:38:02.9246915Z             },
2026-06-23T09:38:02.9247010Z             {
2026-06-23T09:38:02.9247157Z               "path": "crates/spt-daemon/src/shelldisc.rs",
2026-06-23T09:38:02.9247273Z               "line": 63
2026-06-23T09:38:02.9247363Z             },
2026-06-23T09:38:02.9247472Z             {
2026-06-23T09:38:02.9247616Z               "path": "crates/spt-daemon/src/shelldisc.rs",
2026-06-23T09:38:02.9247720Z               "line": 92
2026-06-23T09:38:02.9247811Z             },
2026-06-23T09:38:02.9247907Z             {
2026-06-23T09:38:02.9248054Z               "path": "crates/spt-daemon/src/shelldisc.rs",
2026-06-23T09:38:02.9248160Z               "line": 167
2026-06-23T09:38:02.9248264Z             },
2026-06-23T09:38:02.9248358Z             {
2026-06-23T09:38:02.9248501Z               "path": "crates/spt-daemon/src/shelldisc.rs",
2026-06-23T09:38:02.9248605Z               "line": 179
2026-06-23T09:38:02.9248703Z             },
2026-06-23T09:38:02.9248809Z             {
2026-06-23T09:38:02.9249037Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:02.9249143Z               "line": 114
2026-06-23T09:38:02.9249238Z             },
2026-06-23T09:38:02.9249333Z             {
2026-06-23T09:38:02.9249487Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9249591Z               "line": 22
2026-06-23T09:38:02.9249705Z             },
2026-06-23T09:38:02.9249797Z             {
2026-06-23T09:38:02.9249930Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9250038Z               "line": 145
2026-06-23T09:38:02.9250140Z             },
2026-06-23T09:38:02.9250245Z             {
2026-06-23T09:38:02.9250383Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9250497Z               "line": 174
2026-06-23T09:38:02.9250597Z             },
2026-06-23T09:38:02.9250693Z             {
2026-06-23T09:38:02.9250835Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9250950Z               "line": 196
2026-06-23T09:38:02.9251056Z             },
2026-06-23T09:38:02.9251145Z             {
2026-06-23T09:38:02.9251282Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9251388Z               "line": 221
2026-06-23T09:38:02.9251484Z             },
2026-06-23T09:38:02.9251573Z             {
2026-06-23T09:38:02.9251712Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9251822Z               "line": 247
2026-06-23T09:38:02.9251912Z             },
2026-06-23T09:38:02.9252008Z             {
2026-06-23T09:38:02.9252146Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9252259Z               "line": 270
2026-06-23T09:38:02.9252356Z             },
2026-06-23T09:38:02.9252451Z             {
2026-06-23T09:38:02.9252593Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.9252695Z               "line": 104
2026-06-23T09:38:02.9252799Z             },
2026-06-23T09:38:02.9252899Z             {
2026-06-23T09:38:02.9253033Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9253146Z               "line": 7133
2026-06-23T09:38:02.9253242Z             },
2026-06-23T09:38:02.9253343Z             {
2026-06-23T09:38:02.9253470Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9253579Z               "line": 7267
2026-06-23T09:38:02.9253675Z             },
2026-06-23T09:38:02.9253768Z             {
2026-06-23T09:38:02.9253892Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9254116Z               "line": 7433
2026-06-23T09:38:02.9254221Z             },
2026-06-23T09:38:02.9254312Z             {
2026-06-23T09:38:02.9254440Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9254545Z               "line": 7961
2026-06-23T09:38:02.9254637Z             }
2026-06-23T09:38:02.9254740Z           ]
2026-06-23T09:38:02.9254841Z         },
2026-06-23T09:38:02.9254937Z         "int": {
2026-06-23T09:38:02.9255146Z           "complete": true,
2026-06-23T09:38:02.9255252Z           "evidence": [
2026-06-23T09:38:02.9255351Z             {
2026-06-23T09:38:02.9255504Z               "path": "crates/spt/tests/notify_shell_e2e.rs",
2026-06-23T09:38:02.9255609Z               "line": 16
2026-06-23T09:38:02.9255699Z             },
2026-06-23T09:38:02.9255805Z             {
2026-06-23T09:38:02.9255938Z               "path": "crates/spt/tests/shell_e2e.rs",
2026-06-23T09:38:02.9256048Z               "line": 15
2026-06-23T09:38:02.9256134Z             }
2026-06-23T09:38:02.9256234Z           ]
2026-06-23T09:38:02.9256342Z         },
2026-06-23T09:38:02.9256442Z         "unit": {
2026-06-23T09:38:02.9256547Z           "complete": true,
2026-06-23T09:38:02.9256650Z           "evidence": [
2026-06-23T09:38:02.9256754Z             {
2026-06-23T09:38:02.9256889Z               "path": "crates/spt-daemon/src/shelldisc.rs",
2026-06-23T09:38:02.9256993Z               "line": 246
2026-06-23T09:38:02.9257093Z             },
2026-06-23T09:38:02.9257199Z             {
2026-06-23T09:38:02.9257336Z               "path": "crates/spt-daemon/src/shelldisc.rs",
2026-06-23T09:38:02.9257442Z               "line": 306
2026-06-23T09:38:02.9257542Z             },
2026-06-23T09:38:02.9257632Z             {
2026-06-23T09:38:02.9257776Z               "path": "crates/spt-daemon/src/shelldisc.rs",
2026-06-23T09:38:02.9257885Z               "line": 363
2026-06-23T09:38:02.9257989Z             },
2026-06-23T09:38:02.9258091Z             {
2026-06-23T09:38:02.9258227Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9258342Z               "line": 286
2026-06-23T09:38:02.9258434Z             },
2026-06-23T09:38:02.9258538Z             {
2026-06-23T09:38:02.9258681Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9258782Z               "line": 338
2026-06-23T09:38:02.9258885Z             },
2026-06-23T09:38:02.9259057Z             {
2026-06-23T09:38:02.9259207Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.9259311Z               "line": 783
2026-06-23T09:38:02.9259417Z             },
2026-06-23T09:38:02.9259517Z             {
2026-06-23T09:38:02.9259631Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9259737Z               "line": 10289
2026-06-23T09:38:02.9259837Z             },
2026-06-23T09:38:02.9259941Z             {
2026-06-23T09:38:02.9260066Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9260170Z               "line": 10442
2026-06-23T09:38:02.9260265Z             },
2026-06-23T09:38:02.9260357Z             {
2026-06-23T09:38:02.9260480Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9260580Z               "line": 11031
2026-06-23T09:38:02.9260686Z             },
2026-06-23T09:38:02.9260775Z             {
2026-06-23T09:38:02.9260904Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9261015Z               "line": 11147
2026-06-23T09:38:02.9261108Z             }
2026-06-23T09:38:02.9261219Z           ]
2026-06-23T09:38:02.9261311Z         }
2026-06-23T09:38:02.9261405Z       }
2026-06-23T09:38:02.9261500Z     },
2026-06-23T09:38:02.9261602Z     {
2026-06-23T09:38:02.9261715Z       "id": "REQ-EP-6",
2026-06-23T09:38:02.9263340Z       "title": "Gateway type acceptance: a Gateway-typed perch binds (api bind --type, open type system — un-hardcode the live_agent default), advertises/addressable like any endpoint, owns shells (owner validation not agent-family-gated), subscribes to digests, and is the user-msg identity gate's user-backed origin (REQ-MSG-5); in-tree mock-gateway fixture (R-DOCS-2 pattern, no downstream adapter code). Cross-node WAN Gateway-origin (registry endpoint_type trust) tracked by REQ-MSG-6",
2026-06-23T09:38:02.9263464Z       "requiredStages": [
2026-06-23T09:38:02.9263565Z         "doc",
2026-06-23T09:38:02.9263668Z         "impl",
2026-06-23T09:38:02.9263774Z         "unit"
2026-06-23T09:38:02.9263871Z       ],
2026-06-23T09:38:02.9263969Z       "stages": {
2026-06-23T09:38:02.9264154Z         "doc": {
2026-06-23T09:38:02.9264272Z           "complete": true,
2026-06-23T09:38:02.9264376Z           "evidence": [
2026-06-23T09:38:02.9264471Z             {
2026-06-23T09:38:02.9264596Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.9264695Z               "line": 236
2026-06-23T09:38:02.9264795Z             }
2026-06-23T09:38:02.9264892Z           ]
2026-06-23T09:38:02.9264995Z         },
2026-06-23T09:38:02.9265101Z         "impl": {
2026-06-23T09:38:02.9265206Z           "complete": true,
2026-06-23T09:38:02.9265315Z           "evidence": [
2026-06-23T09:38:02.9265421Z             {
2026-06-23T09:38:02.9265568Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9265668Z               "line": 212
2026-06-23T09:38:02.9265769Z             }
2026-06-23T09:38:02.9265873Z           ]
2026-06-23T09:38:02.9265968Z         },
2026-06-23T09:38:02.9266074Z         "int": {
2026-06-23T09:38:02.9266178Z           "complete": true,
2026-06-23T09:38:02.9266297Z           "evidence": [
2026-06-23T09:38:02.9266399Z             {
2026-06-23T09:38:02.9266535Z               "path": "crates/spt/tests/gateway_e2e.rs",
2026-06-23T09:38:02.9266646Z               "line": 18
2026-06-23T09:38:02.9266747Z             }
2026-06-23T09:38:02.9266841Z           ]
2026-06-23T09:38:02.9266931Z         },
2026-06-23T09:38:02.9267035Z         "unit": {
2026-06-23T09:38:02.9267144Z           "complete": true,
2026-06-23T09:38:02.9267243Z           "evidence": [
2026-06-23T09:38:02.9267343Z             {
2026-06-23T09:38:02.9267496Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:02.9267595Z               "line": 558
2026-06-23T09:38:02.9267692Z             },
2026-06-23T09:38:02.9267792Z             {
2026-06-23T09:38:02.9267924Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9268031Z               "line": 904
2026-06-23T09:38:02.9268135Z             }
2026-06-23T09:38:02.9268225Z           ]
2026-06-23T09:38:02.9268326Z         }
2026-06-23T09:38:02.9268421Z       }
2026-06-23T09:38:02.9268516Z     },
2026-06-23T09:38:02.9268612Z     {
2026-06-23T09:38:02.9268717Z       "id": "REQ-EP-7",
2026-06-23T09:38:02.9270511Z       "title": "Durable live-role.md: a per-agent broad-purpose statement in tracked/agents/<id>/ beside live-context.md (replicates with the mind on the same a-<id> branch); renders FIRST at start-transition context injection (role -> live-context -> project-context); SOLE writer `spt endpoint role --overwrite <file>` — mechanical no-automated-writer guarantee (echo-commune ingest / signoff / Psyche reconcile structurally exclude it). The user-backed-origin hard gate on the writer is a deferred later tightening (rides the user-msg identity plumbing)",
2026-06-23T09:38:02.9270630Z       "requiredStages": [
2026-06-23T09:38:02.9270731Z         "doc",
2026-06-23T09:38:02.9270825Z         "impl",
2026-06-23T09:38:02.9270926Z         "unit"
2026-06-23T09:38:02.9271035Z       ],
2026-06-23T09:38:02.9271140Z       "stages": {
2026-06-23T09:38:02.9271251Z         "doc": {
2026-06-23T09:38:02.9271350Z           "complete": true,
2026-06-23T09:38:02.9271469Z           "evidence": [
2026-06-23T09:38:02.9271561Z             {
2026-06-23T09:38:02.9271688Z               "path": "CONTEXT.md",
2026-06-23T09:38:02.9271784Z               "line": 503
2026-06-23T09:38:02.9271880Z             }
2026-06-23T09:38:02.9271979Z           ]
2026-06-23T09:38:02.9272079Z         },
2026-06-23T09:38:02.9272185Z         "impl": {
2026-06-23T09:38:02.9272289Z           "complete": true,
2026-06-23T09:38:02.9272398Z           "evidence": [
2026-06-23T09:38:02.9272609Z             {
2026-06-23T09:38:02.9272741Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:02.9272842Z               "line": 505
2026-06-23T09:38:02.9272938Z             },
2026-06-23T09:38:02.9273036Z             {
2026-06-23T09:38:02.9273176Z               "path": "crates/spt-live/src/resume.rs",
2026-06-23T09:38:02.9273285Z               "line": 87
2026-06-23T09:38:02.9273476Z             },
2026-06-23T09:38:02.9273575Z             {
2026-06-23T09:38:02.9273723Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9273829Z               "line": 81
2026-06-23T09:38:02.9273934Z             },
2026-06-23T09:38:02.9274024Z             {
2026-06-23T09:38:02.9274172Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9274277Z               "line": 166
2026-06-23T09:38:02.9274372Z             },
2026-06-23T09:38:02.9274478Z             {
2026-06-23T09:38:02.9274605Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9274724Z               "line": 1994
2026-06-23T09:38:02.9274823Z             }
2026-06-23T09:38:02.9274927Z           ]
2026-06-23T09:38:02.9275022Z         },
2026-06-23T09:38:02.9275123Z         "int": {
2026-06-23T09:38:02.9275232Z           "complete": false,
2026-06-23T09:38:02.9275341Z           "evidence": []
2026-06-23T09:38:02.9275442Z         },
2026-06-23T09:38:02.9275546Z         "unit": {
2026-06-23T09:38:02.9275656Z           "complete": true,
2026-06-23T09:38:02.9275766Z           "evidence": [
2026-06-23T09:38:02.9275865Z             {
2026-06-23T09:38:02.9276010Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:02.9276114Z               "line": 623
2026-06-23T09:38:02.9276213Z             },
2026-06-23T09:38:02.9276315Z             {
2026-06-23T09:38:02.9276447Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:02.9276548Z               "line": 212
2026-06-23T09:38:02.9276634Z             },
2026-06-23T09:38:02.9276743Z             {
2026-06-23T09:38:02.9276867Z               "path": "crates/spt-live/src/resume.rs",
2026-06-23T09:38:02.9276978Z               "line": 307
2026-06-23T09:38:02.9277072Z             },
2026-06-23T09:38:02.9277172Z             {
2026-06-23T09:38:02.9277303Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9277415Z               "line": 9101
2026-06-23T09:38:02.9277519Z             },
2026-06-23T09:38:02.9277624Z             {
2026-06-23T09:38:02.9277741Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9277850Z               "line": 9128
2026-06-23T09:38:02.9277942Z             }
2026-06-23T09:38:02.9278042Z           ]
2026-06-23T09:38:02.9278137Z         }
2026-06-23T09:38:02.9278242Z       }
2026-06-23T09:38:02.9278328Z     },
2026-06-23T09:38:02.9278427Z     {
2026-06-23T09:38:02.9278538Z       "id": "REQ-EP-8",
2026-06-23T09:38:02.9281444Z       "title": "AlwaysOnEndpoint: a resident, addressable, mindless endpoint whose adapter binary the daemon supervises continuously — register-triggered by an adapter-option's `[always-on]` manifest section, one supervised binary per `<adapter>[:profile]`, running independent of agent liveness. It self-manages its `#`-addressed channel endpoints via the existing `api bind` (one connection fronts many). The SECOND class of spt-core-boot-launched third-party binary (after the shell wake-watcher); supervision reuses the wake-watcher scaffolding (backoff / give-up latch / one-per-instance lock / orphan-kill / brain-side reconcile) MINUS the offline-only flip — always online, never resting (no dormant/suspended states). Two-way: agents message it; it may call `endpoint wake <id>`, target-side authorized (REQ-INST-3/6 wake resolution + access whitelist + shell_wake_spawn_anywhere — no caller-ownership gate). First consumer downstream: spt-discord.",
2026-06-23T09:38:02.9281572Z       "requiredStages": [],
2026-06-23T09:38:02.9281681Z       "stages": {
2026-06-23T09:38:02.9281782Z         "doc": {
2026-06-23T09:38:02.9281995Z           "complete": true,
2026-06-23T09:38:02.9282102Z           "evidence": [
2026-06-23T09:38:02.9282201Z             {
2026-06-23T09:38:02.9282502Z               "path": "docs/adr/0023-always-on-endpoints-resident-supervised-binary-sigil-addressing.md",
2026-06-23T09:38:02.9282611Z               "line": 5
2026-06-23T09:38:02.9282712Z             }
2026-06-23T09:38:02.9282812Z           ]
2026-06-23T09:38:02.9283020Z         },
2026-06-23T09:38:02.9283126Z         "impl": {
2026-06-23T09:38:02.9283234Z           "complete": false,
2026-06-23T09:38:02.9283344Z           "evidence": []
2026-06-23T09:38:02.9283445Z         },
2026-06-23T09:38:02.9283540Z         "int": {
2026-06-23T09:38:02.9283644Z           "complete": false,
2026-06-23T09:38:02.9283751Z           "evidence": []
2026-06-23T09:38:02.9283841Z         },
2026-06-23T09:38:02.9283950Z         "unit": {
2026-06-23T09:38:02.9284060Z           "complete": false,
2026-06-23T09:38:02.9284165Z           "evidence": []
2026-06-23T09:38:02.9284269Z         }
2026-06-23T09:38:02.9284371Z       }
2026-06-23T09:38:02.9284469Z     },
2026-06-23T09:38:02.9284565Z     {
2026-06-23T09:38:02.9284676Z       "id": "REQ-EP-9",
2026-06-23T09:38:02.9286294Z       "title": "`#` always-on address sigil: a reserved LEADING sigil marking an AlwaysOnEndpoint, extending the REQ-INST-10 grammar to `[subnet:]#id[@node]`. Mandatory + bijective — `#name` ⟺ always-on endpoint, bare `name` ⟺ agent endpoint — so the router resolves endpoint class from the address alone, before any registry lookup. Sits ABOVE REQ-HAZARD-ID-CHARSET: the address parser strips the single leading `#` before id validation, so the bare/stored id stays charset-clean and a mid-id `#` remains rejected (the charset contract is unchanged).",
2026-06-23T09:38:02.9286417Z       "requiredStages": [],
2026-06-23T09:38:02.9286526Z       "stages": {
2026-06-23T09:38:02.9286618Z         "doc": {
2026-06-23T09:38:02.9286727Z           "complete": true,
2026-06-23T09:38:02.9286831Z           "evidence": [
2026-06-23T09:38:02.9286937Z             {
2026-06-23T09:38:02.9287233Z               "path": "docs/adr/0023-always-on-endpoints-resident-supervised-binary-sigil-addressing.md",
2026-06-23T09:38:02.9287332Z               "line": 5
2026-06-23T09:38:02.9287437Z             }
2026-06-23T09:38:02.9287543Z           ]
2026-06-23T09:38:02.9287637Z         },
2026-06-23T09:38:02.9287742Z         "impl": {
2026-06-23T09:38:02.9287853Z           "complete": false,
2026-06-23T09:38:02.9287966Z           "evidence": []
2026-06-23T09:38:02.9288061Z         },
2026-06-23T09:38:02.9288165Z         "int": {
2026-06-23T09:38:02.9288278Z           "complete": false,
2026-06-23T09:38:02.9288392Z           "evidence": []
2026-06-23T09:38:02.9288492Z         },
2026-06-23T09:38:02.9288598Z         "unit": {
2026-06-23T09:38:02.9288706Z           "complete": false,
2026-06-23T09:38:02.9288812Z           "evidence": []
2026-06-23T09:38:02.9288912Z         }
2026-06-23T09:38:02.9289103Z       }
2026-06-23T09:38:02.9289198Z     },
2026-06-23T09:38:02.9289302Z     {
2026-06-23T09:38:02.9289413Z       "id": "REQ-FRONT-1",
2026-06-23T09:38:02.9289613Z       "title": "Day-one launcher/manager frontend (list/launch/attach/init)",
2026-06-23T09:38:02.9289732Z       "requiredStages": [],
2026-06-23T09:38:02.9289828Z       "stages": {
2026-06-23T09:38:02.9289932Z         "doc": {
2026-06-23T09:38:02.9290042Z           "complete": false,
2026-06-23T09:38:02.9290157Z           "evidence": []
2026-06-23T09:38:02.9290256Z         },
2026-06-23T09:38:02.9290367Z         "impl": {
2026-06-23T09:38:02.9290472Z           "complete": false,
2026-06-23T09:38:02.9290580Z           "evidence": []
2026-06-23T09:38:02.9290679Z         },
2026-06-23T09:38:02.9290780Z         "int": {
2026-06-23T09:38:02.9290897Z           "complete": false,
2026-06-23T09:38:02.9291001Z           "evidence": []
2026-06-23T09:38:02.9291102Z         },
2026-06-23T09:38:02.9291202Z         "unit": {
2026-06-23T09:38:02.9291321Z           "complete": false,
2026-06-23T09:38:02.9291536Z           "evidence": []
2026-06-23T09:38:02.9291645Z         }
2026-06-23T09:38:02.9291746Z       }
2026-06-23T09:38:02.9291836Z     },
2026-06-23T09:38:02.9291935Z     {
2026-06-23T09:38:02.9292061Z       "id": "REQ-HAZARD-ATTACH-WEDGE",
2026-06-23T09:38:02.9297488Z       "title": "A legitimately dead PTY child (real crash/kill) + an undrained operator pump must NOT wedge the broker for all other clients. ROOT (v0.12.0 real-harness defect): loopback attach output is a blocking write_all into a bounded 64KB tokio duplex (nethost.rs:1040,1090); when the operator's rc pump stops draining (tab closed) the buffer fills and write_all blocks forever (the 'loopback never hangs' assumption at nethost.rs:1103 is false), parking a worker in the 2-worker net runtime (nethost.rs:640); a couple of these saturate BOTH workers → every new attach / `endpoint run` stalls right after 'PUMP_IPC_READER: spawned' → 30s FIRST_EVENT_GRACE → 'no output / dead or wedged'; `daemon stop` cannot join the stuck workers. DISTINCT from the removed B1 path-(c) mutex deadlock. DISPOSITION = PROVE-DON'T-CHANGE (doyle GATE-PASS @e883f45, 2026-06-18): this ROOT is the SUPERSEDED v0.12.0 hypothesis — the post-L0 code ALREADY prevents the wedge, so NO fail-fast / worker-count code was added. serve_attach forwards fire-and-forget (net_stream_send op_id=None) and the broker-side send_stream is already BROKER-QUIC-DEADLINE-bounded (bounded_block_on, 10s); the loopback duplex is drained broker-INTERNALLY by the operator row's own read pump (RecvHalf::Loopback, retentive_cap==0 → evict-not-park) so a dead rc (a dropped IPC subscriber) never backs peer_w up; bounded_block_on parks the BROKER DISPATCH thread, not a net worker → no worker-pool exhaustion (full mechanism in the required_stages comment). Folds the status=online sub-check: a dead spt-hosted endpoint is marked OFFLINE within one reconcile tick on abrupt child death (broker exit-waiter reaps the session → B2 sees it absent) — PROVEN, no change. (v0.12.1)",
2026-06-23T09:38:02.9297725Z       "requiredStages": [
2026-06-23T09:38:02.9297831Z         "int"
2026-06-23T09:38:02.9297940Z       ],
2026-06-23T09:38:02.9298040Z       "stages": {
2026-06-23T09:38:02.9298146Z         "doc": {
2026-06-23T09:38:02.9298264Z           "complete": false,
2026-06-23T09:38:02.9298375Z           "evidence": []
2026-06-23T09:38:02.9298475Z         },
2026-06-23T09:38:02.9298582Z         "impl": {
2026-06-23T09:38:02.9298697Z           "complete": false,
2026-06-23T09:38:02.9298806Z           "evidence": []
2026-06-23T09:38:02.9298899Z         },
2026-06-23T09:38:02.9299101Z         "int": {
2026-06-23T09:38:02.9299200Z           "complete": true,
2026-06-23T09:38:02.9299304Z           "evidence": [
2026-06-23T09:38:02.9299406Z             {
2026-06-23T09:38:02.9299562Z               "path": "crates/spt/tests/attach_wedge_e2e.rs",
2026-06-23T09:38:02.9299673Z               "line": 300
2026-06-23T09:38:02.9299777Z             }
2026-06-23T09:38:02.9299872Z           ]
2026-06-23T09:38:02.9299968Z         },
2026-06-23T09:38:02.9300073Z         "unit": {
2026-06-23T09:38:02.9300178Z           "complete": false,
2026-06-23T09:38:02.9300292Z           "evidence": []
2026-06-23T09:38:02.9300384Z         }
2026-06-23T09:38:02.9300482Z       }
2026-06-23T09:38:02.9300587Z     },
2026-06-23T09:38:02.9300679Z     {
2026-06-23T09:38:02.9300816Z       "id": "REQ-HAZARD-BIND-CWD-UNSET",
2026-06-23T09:38:02.9303508Z       "title": "A bound endpoint's `info.cwd` is SET at bind so a freshly-created perch appears under its own project tab. ROOT (found, v0.13.0): `info.cwd` is NEVER set on bind — `cmd_bind` (spt-hosted) and `bind_from_seed` (harness-hosted) never thread cwd into `establish_perch`/`rec.cwd`. FIX: `cmd_bind` reads its own `current_dir` (the broker spawned it in `project_cwd`); `bind_from_seed` passes `seed.cwd` (already captured at seed time, currently DISCARDED). DISTINCT from REQ-PICKER-HISTORY-FRESH (v0.12.1) — that unioned cwd-origin into picker MEMBERSHIP but tested merge_origin_project with a PROVIDED origin; it never asserted `info.cwd` is actually set on bind, so a real `endpoint run` perch still had an empty cwd and the union had nothing to union. This is the v0.12.1 P1 'appears under its own project right away' claim that was REFUTED in the changelog — delivered for real here. (v0.13.0)",
2026-06-23T09:38:02.9303645Z       "requiredStages": [
2026-06-23T09:38:02.9303741Z         "impl",
2026-06-23T09:38:02.9303847Z         "unit",
2026-06-23T09:38:02.9304050Z         "int"
2026-06-23T09:38:02.9304159Z       ],
2026-06-23T09:38:02.9304260Z       "stages": {
2026-06-23T09:38:02.9304355Z         "doc": {
2026-06-23T09:38:02.9304469Z           "complete": false,
2026-06-23T09:38:02.9304570Z           "evidence": []
2026-06-23T09:38:02.9304669Z         },
2026-06-23T09:38:02.9304779Z         "impl": {
2026-06-23T09:38:02.9304894Z           "complete": true,
2026-06-23T09:38:02.9305003Z           "evidence": [
2026-06-23T09:38:02.9305108Z             {
2026-06-23T09:38:02.9305252Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9305370Z               "line": 257
2026-06-23T09:38:02.9305476Z             }
2026-06-23T09:38:02.9305576Z           ]
2026-06-23T09:38:02.9305680Z         },
2026-06-23T09:38:02.9305782Z         "int": {
2026-06-23T09:38:02.9305890Z           "complete": true,
2026-06-23T09:38:02.9306000Z           "evidence": [
2026-06-23T09:38:02.9306102Z             {
2026-06-23T09:38:02.9306257Z               "path": "crates/spt/tests/bind_cwd_project_e2e.rs",
2026-06-23T09:38:02.9306370Z               "line": 93
2026-06-23T09:38:02.9306480Z             }
2026-06-23T09:38:02.9306579Z           ]
2026-06-23T09:38:02.9306678Z         },
2026-06-23T09:38:02.9306784Z         "unit": {
2026-06-23T09:38:02.9306898Z           "complete": true,
2026-06-23T09:38:02.9306998Z           "evidence": [
2026-06-23T09:38:02.9307099Z             {
2026-06-23T09:38:02.9307241Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9307356Z               "line": 802
2026-06-23T09:38:02.9307461Z             },
2026-06-23T09:38:02.9307565Z             {
2026-06-23T09:38:02.9307704Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9307813Z               "line": 824
2026-06-23T09:38:02.9307917Z             },
2026-06-23T09:38:02.9308015Z             {
2026-06-23T09:38:02.9308147Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9308247Z               "line": 855
2026-06-23T09:38:02.9308353Z             }
2026-06-23T09:38:02.9308457Z           ]
2026-06-23T09:38:02.9308557Z         }
2026-06-23T09:38:02.9308654Z       }
2026-06-23T09:38:02.9308758Z     },
2026-06-23T09:38:02.9308848Z     {
2026-06-23T09:38:02.9309073Z       "id": "REQ-HAZARD-BRAIN-RESPAWN-PATH",
2026-06-23T09:38:02.9311569Z       "title": "The broker respawns the brain onto the APPLIED bytes, not the renamed old binary: the candidate-binary default is the canonical exe path captured ONCE at broker start, never a per-spawn std::env::current_exe() — on Linux current_exe (readlink /proc/self/exe) is inode-tracking and follows the `apply` rename (spt -> spt.old-N), so a resident broker would respawn the brain onto OLD bytes while recording `applied` (Windows GetModuleFileName is path-at-start, so Windows was green; ADR-0018 Q3 silently assumed path-string semantics). Backstop: promotion gates on bytes — a trial promotes only if brain.ready exe_hash == the staged artifact hash for this platform, else auto-rollback + loud notif (readiness != new-bytes was the false-success that recorded applied:8 over a v0.4.0 brain on kitsubito, 2026-06-11). KNOWN-HAZARDS 6.11.",
2026-06-23T09:38:02.9311691Z       "requiredStages": [
2026-06-23T09:38:02.9311799Z         "doc",
2026-06-23T09:38:02.9311910Z         "impl",
2026-06-23T09:38:02.9312007Z         "unit",
2026-06-23T09:38:02.9312111Z         "int"
2026-06-23T09:38:02.9312213Z       ],
2026-06-23T09:38:02.9312322Z       "stages": {
2026-06-23T09:38:02.9312417Z         "doc": {
2026-06-23T09:38:02.9312528Z           "complete": true,
2026-06-23T09:38:02.9312751Z           "evidence": [
2026-06-23T09:38:02.9312857Z             {
2026-06-23T09:38:02.9312994Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9313100Z               "line": 333
2026-06-23T09:38:02.9313204Z             }
2026-06-23T09:38:02.9313290Z           ]
2026-06-23T09:38:02.9313390Z         },
2026-06-23T09:38:02.9313496Z         "impl": {
2026-06-23T09:38:02.9313600Z           "complete": true,
2026-06-23T09:38:02.9313806Z           "evidence": [
2026-06-23T09:38:02.9313900Z             {
2026-06-23T09:38:02.9314059Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9314163Z               "line": 494
2026-06-23T09:38:02.9314267Z             },
2026-06-23T09:38:02.9314369Z             {
2026-06-23T09:38:02.9314511Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9314615Z               "line": 499
2026-06-23T09:38:02.9314719Z             },
2026-06-23T09:38:02.9314826Z             {
2026-06-23T09:38:02.9314958Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9315073Z               "line": 874
2026-06-23T09:38:02.9315178Z             },
2026-06-23T09:38:02.9315273Z             {
2026-06-23T09:38:02.9315421Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9315530Z               "line": 915
2026-06-23T09:38:02.9315635Z             },
2026-06-23T09:38:02.9315736Z             {
2026-06-23T09:38:02.9315878Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9315988Z               "line": 926
2026-06-23T09:38:02.9316089Z             },
2026-06-23T09:38:02.9316193Z             {
2026-06-23T09:38:02.9316337Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:02.9316455Z               "line": 358
2026-06-23T09:38:02.9316551Z             }
2026-06-23T09:38:02.9316657Z           ]
2026-06-23T09:38:02.9316765Z         },
2026-06-23T09:38:02.9316864Z         "int": {
2026-06-23T09:38:02.9316979Z           "complete": true,
2026-06-23T09:38:02.9317092Z           "evidence": [
2026-06-23T09:38:02.9317195Z             {
2026-06-23T09:38:02.9317344Z               "path": "crates/spt/tests/brain_respawn_rename.rs",
2026-06-23T09:38:02.9317453Z               "line": 30
2026-06-23T09:38:02.9317558Z             }
2026-06-23T09:38:02.9317649Z           ]
2026-06-23T09:38:02.9317754Z         },
2026-06-23T09:38:02.9317843Z         "unit": {
2026-06-23T09:38:02.9317964Z           "complete": true,
2026-06-23T09:38:02.9318073Z           "evidence": [
2026-06-23T09:38:02.9318172Z             {
2026-06-23T09:38:02.9318321Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9318426Z               "line": 1493
2026-06-23T09:38:02.9318531Z             },
2026-06-23T09:38:02.9318636Z             {
2026-06-23T09:38:02.9318802Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9318913Z               "line": 1518
2026-06-23T09:38:02.9319089Z             },
2026-06-23T09:38:02.9319190Z             {
2026-06-23T09:38:02.9319332Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9319446Z               "line": 1535
2026-06-23T09:38:02.9319548Z             },
2026-06-23T09:38:02.9319656Z             {
2026-06-23T09:38:02.9319807Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9319917Z               "line": 1578
2026-06-23T09:38:02.9320025Z             }
2026-06-23T09:38:02.9320124Z           ]
2026-06-23T09:38:02.9320235Z         }
2026-06-23T09:38:02.9320335Z       }
2026-06-23T09:38:02.9320425Z     },
2026-06-23T09:38:02.9320517Z     {
2026-06-23T09:38:02.9320687Z       "id": "REQ-HAZARD-BRAIN-RESTART-LIFECYCLE-REHYDRATE",
2026-06-23T09:38:02.9323384Z       "title": "B4 (deepest): a bare brain restart (broker survives) REHYDRATES the live-agent lifecycle so post-restart endpoints are hosted + attachable. Today resume_sessions (brainproc.rs:186, brain.rs:797-809) re-subscribes to the broker's PTY sessions but ALL BrainLifecycle instances (lifecycle.rs:58-130; the ephemeral brain.rs:254-275) are LOST on restart → a post-restart live endpoint gets no livehost → its Psyche is never (re)hosted and new spawns die / can't attach until a FULL daemon reset (operator: perri's brain kill+restart wedged everything until a full daemon kill). FIX: on brain startup, rebuild a BrainLifecycle per resumed live-capable session — load the manifest from the adapter registry → instantiate → start the pulse — the rehydrate the resume no-op cannot do. Composes with B2 (the reconcile re-hosts from the honest on-disk status after rehydrate). (v0.12.0)",
2026-06-23T09:38:02.9323616Z       "requiredStages": [],
2026-06-23T09:38:02.9323722Z       "stages": {
2026-06-23T09:38:02.9323821Z         "doc": {
2026-06-23T09:38:02.9323936Z           "complete": false,
2026-06-23T09:38:02.9324042Z           "evidence": []
2026-06-23T09:38:02.9324146Z         },
2026-06-23T09:38:02.9324251Z         "impl": {
2026-06-23T09:38:02.9324366Z           "complete": false,
2026-06-23T09:38:02.9324479Z           "evidence": []
2026-06-23T09:38:02.9324575Z         },
2026-06-23T09:38:02.9324672Z         "int": {
2026-06-23T09:38:02.9324779Z           "complete": false,
2026-06-23T09:38:02.9324890Z           "evidence": []
2026-06-23T09:38:02.9324996Z         },
2026-06-23T09:38:02.9325099Z         "unit": {
2026-06-23T09:38:02.9325208Z           "complete": false,
2026-06-23T09:38:02.9325318Z           "evidence": []
2026-06-23T09:38:02.9325428Z         }
2026-06-23T09:38:02.9325532Z       }
2026-06-23T09:38:02.9325623Z     },
2026-06-23T09:38:02.9325729Z     {
2026-06-23T09:38:02.9325880Z       "id": "REQ-HAZARD-BRAIN-RESTART-PSYCHE-DUP",
2026-06-23T09:38:02.9329691Z       "title": "A bare brain restart leaves EXACTLY ONE `{id}-psyche` process per endpoint — no duplicate. On an abrupt brain death stop_host never runs (the LiveSet + owned child handles die with the brain) and Breap's job/group only reaps at DAEMON stop, so the PRIOR brain's Psyche stays ALIVE; the respawned brain's reconcile re-hosts a SECOND Psyche and overwrites the `{id}-psyche` perch pid, leaving the old one untracked + alive = a duplicate that lingers until daemon-stop (the operator's 'brain kill+restart wedged everything'). FIX: at brain start, BEFORE the first reconcile re-hosts, reap any pre-existing `{id}-psyche` orphan — ID-SPECIFICALLY (recycle-safe on the shared box, where sibling agents share the `claude` basename): scoped-kill the recorded pid ONLY IF it is alive AND its exe basename == the adapter's psyche program (normalize_basename) AND its COMMAND LINE contains the full psyche id `<id>-psyche` (baked via {id}); a sibling never carries THIS id, and any unreadable signal FAILS SAFE (decline to reap — a missed dup is bounded by Breap, a wrong-kill is catastrophic). CAVEAT: the cmdline carries `<id>-psyche` only when the adapter's psyche_init.command uses {id} (the norm); a non-{id} adapter safely MISSES the reap (today's behavior, Breap bounds it) — never a wrong-kill. (v0.12.0)",
2026-06-23T09:38:02.9329816Z       "requiredStages": [
2026-06-23T09:38:02.9329925Z         "impl",
2026-06-23T09:38:02.9330026Z         "unit",
2026-06-23T09:38:02.9330131Z         "int"
2026-06-23T09:38:02.9330235Z       ],
2026-06-23T09:38:02.9330339Z       "stages": {
2026-06-23T09:38:02.9330449Z         "doc": {
2026-06-23T09:38:02.9330556Z           "complete": false,
2026-06-23T09:38:02.9330665Z           "evidence": []
2026-06-23T09:38:02.9330771Z         },
2026-06-23T09:38:02.9330909Z         "impl": {
2026-06-23T09:38:02.9331028Z           "complete": true,
2026-06-23T09:38:02.9331148Z           "evidence": [
2026-06-23T09:38:02.9331248Z             {
2026-06-23T09:38:02.9331401Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9331548Z               "line": 585
2026-06-23T09:38:02.9331653Z             },
2026-06-23T09:38:02.9331763Z             {
2026-06-23T09:38:02.9331919Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9332021Z               "line": 609
2026-06-23T09:38:02.9332225Z             },
2026-06-23T09:38:02.9332322Z             {
2026-06-23T09:38:02.9332473Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9332588Z               "line": 635
2026-06-23T09:38:02.9332684Z             },
2026-06-23T09:38:02.9332792Z             {
2026-06-23T09:38:02.9332929Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9333147Z               "line": 654
2026-06-23T09:38:02.9333251Z             },
2026-06-23T09:38:02.9333348Z             {
2026-06-23T09:38:02.9333489Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9333600Z               "line": 730
2026-06-23T09:38:02.9333700Z             },
2026-06-23T09:38:02.9333804Z             {
2026-06-23T09:38:02.9333944Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:02.9334053Z               "line": 89
2026-06-23T09:38:02.9334162Z             },
2026-06-23T09:38:02.9334263Z             {
2026-06-23T09:38:02.9334401Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:02.9334506Z               "line": 134
2026-06-23T09:38:02.9334607Z             }
2026-06-23T09:38:02.9334711Z           ]
2026-06-23T09:38:02.9334816Z         },
2026-06-23T09:38:02.9334922Z         "int": {
2026-06-23T09:38:02.9335034Z           "complete": true,
2026-06-23T09:38:02.9335145Z           "evidence": [
2026-06-23T09:38:02.9335246Z             {
2026-06-23T09:38:02.9335426Z               "path": "crates/spt/tests/brain_restart_psyche_dup_e2e.rs",
2026-06-23T09:38:02.9335537Z               "line": 20
2026-06-23T09:38:02.9335641Z             }
2026-06-23T09:38:02.9335745Z           ]
2026-06-23T09:38:02.9335854Z         },
2026-06-23T09:38:02.9335956Z         "unit": {
2026-06-23T09:38:02.9336064Z           "complete": true,
2026-06-23T09:38:02.9336169Z           "evidence": [
2026-06-23T09:38:02.9336269Z             {
2026-06-23T09:38:02.9336412Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9336528Z               "line": 1148
2026-06-23T09:38:02.9336641Z             },
2026-06-23T09:38:02.9336745Z             {
2026-06-23T09:38:02.9336884Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:02.9336993Z               "line": 445
2026-06-23T09:38:02.9337104Z             }
2026-06-23T09:38:02.9337204Z           ]
2026-06-23T09:38:02.9337308Z         }
2026-06-23T09:38:02.9337404Z       }
2026-06-23T09:38:02.9337510Z     },
2026-06-23T09:38:02.9337613Z     {
2026-06-23T09:38:02.9337758Z       "id": "REQ-HAZARD-BROKER-PROCESS-ISOLATION",
2026-06-23T09:38:02.9340480Z       "title": "Broker and brain are separate processes: the broker runs as its own long-lived per-machine process that survives every brain restart, so a routine (brain-only) self-update restarts the brain onto the swapped binary while every hosted endpoint (PTY child, live QUIC conn, listening socket) stays untouched at the PROCESS level. The in-process-thread broker (daemon.rs:165-170) is a regression that silently unrealizes REQ-UPD-3 — apply degrades to an in-process Brain::handoff no-op and new code does not run until an unrelated restart (KNOWN-HAZARDS 6.7). Evidence must prove process-level survival (SPIKE-01/03 productionized as int: PTY child + live QUIC survive a brain-PROCESS restart onto a swapped binary), re-pointing the regression-masked in-process int tags currently on REQ-DAEMON-2 / REQ-UPD-3 (ADR-0018).",
2026-06-23T09:38:02.9340606Z       "requiredStages": [
2026-06-23T09:38:02.9340711Z         "doc",
2026-06-23T09:38:02.9340809Z         "impl",
2026-06-23T09:38:02.9340923Z         "unit",
2026-06-23T09:38:02.9341018Z         "int"
2026-06-23T09:38:02.9341131Z       ],
2026-06-23T09:38:02.9341245Z       "stages": {
2026-06-23T09:38:02.9341351Z         "doc": {
2026-06-23T09:38:02.9341465Z           "complete": true,
2026-06-23T09:38:02.9341569Z           "evidence": [
2026-06-23T09:38:02.9341680Z             {
2026-06-23T09:38:02.9341808Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9342028Z               "line": 302
2026-06-23T09:38:02.9342141Z             }
2026-06-23T09:38:02.9348441Z           ]
2026-06-23T09:38:02.9348568Z         },
2026-06-23T09:38:02.9348673Z         "impl": {
2026-06-23T09:38:02.9348804Z           "complete": true,
2026-06-23T09:38:02.9348918Z           "evidence": [
2026-06-23T09:38:02.9349101Z             {
2026-06-23T09:38:02.9349267Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:02.9349529Z               "line": 108
2026-06-23T09:38:02.9349635Z             },
2026-06-23T09:38:02.9349735Z             {
2026-06-23T09:38:02.9349892Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9350002Z               "line": 921
2026-06-23T09:38:02.9350111Z             },
2026-06-23T09:38:02.9350236Z             {
2026-06-23T09:38:02.9350373Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9350478Z               "line": 1165
2026-06-23T09:38:02.9350584Z             },
2026-06-23T09:38:02.9350688Z             {
2026-06-23T09:38:02.9350846Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9350951Z               "line": 23
2026-06-23T09:38:02.9351055Z             },
2026-06-23T09:38:02.9351156Z             {
2026-06-23T09:38:02.9351317Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9351421Z               "line": 113
2026-06-23T09:38:02.9351531Z             },
2026-06-23T09:38:02.9351644Z             {
2026-06-23T09:38:02.9351785Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9351901Z               "line": 158
2026-06-23T09:38:02.9352020Z             },
2026-06-23T09:38:02.9352124Z             {
2026-06-23T09:38:02.9352273Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9352382Z               "line": 218
2026-06-23T09:38:02.9352483Z             },
2026-06-23T09:38:02.9352588Z             {
2026-06-23T09:38:02.9352730Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9352841Z               "line": 261
2026-06-23T09:38:02.9352950Z             },
2026-06-23T09:38:02.9353054Z             {
2026-06-23T09:38:02.9353188Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9353293Z               "line": 275
2026-06-23T09:38:02.9353383Z             },
2026-06-23T09:38:02.9353485Z             {
2026-06-23T09:38:02.9353621Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9353737Z               "line": 320
2026-06-23T09:38:02.9353842Z             },
2026-06-23T09:38:02.9353950Z             {
2026-06-23T09:38:02.9354098Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9354211Z               "line": 347
2026-06-23T09:38:02.9354314Z             },
2026-06-23T09:38:02.9354430Z             {
2026-06-23T09:38:02.9354582Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9354687Z               "line": 359
2026-06-23T09:38:02.9354792Z             },
2026-06-23T09:38:02.9354906Z             {
2026-06-23T09:38:02.9355045Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9355150Z               "line": 373
2026-06-23T09:38:02.9355254Z             },
2026-06-23T09:38:02.9355360Z             {
2026-06-23T09:38:02.9355493Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9355597Z               "line": 400
2026-06-23T09:38:02.9355708Z             },
2026-06-23T09:38:02.9355803Z             {
2026-06-23T09:38:02.9355950Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9356056Z               "line": 643
2026-06-23T09:38:02.9356164Z             },
2026-06-23T09:38:02.9356270Z             {
2026-06-23T09:38:02.9356409Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9356523Z               "line": 989
2026-06-23T09:38:02.9356624Z             },
2026-06-23T09:38:02.9356733Z             {
2026-06-23T09:38:02.9356989Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9357109Z               "line": 275
2026-06-23T09:38:02.9357208Z             },
2026-06-23T09:38:02.9357308Z             {
2026-06-23T09:38:02.9357447Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9357546Z               "line": 1284
2026-06-23T09:38:02.9357648Z             },
2026-06-23T09:38:02.9357748Z             {
2026-06-23T09:38:02.9357972Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9358081Z               "line": 1386
2026-06-23T09:38:02.9358176Z             },
2026-06-23T09:38:02.9358277Z             {
2026-06-23T09:38:02.9358471Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9358577Z               "line": 1398
2026-06-23T09:38:02.9358682Z             },
2026-06-23T09:38:02.9358786Z             {
2026-06-23T09:38:02.9358931Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9359115Z               "line": 1993
2026-06-23T09:38:02.9359229Z             },
2026-06-23T09:38:02.9359328Z             {
2026-06-23T09:38:02.9359469Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9359589Z               "line": 188
2026-06-23T09:38:02.9359698Z             },
2026-06-23T09:38:02.9359808Z             {
2026-06-23T09:38:02.9359937Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9360046Z               "line": 265
2026-06-23T09:38:02.9360157Z             },
2026-06-23T09:38:02.9360252Z             {
2026-06-23T09:38:02.9360394Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9360500Z               "line": 276
2026-06-23T09:38:02.9360609Z             },
2026-06-23T09:38:02.9360709Z             {
2026-06-23T09:38:02.9360853Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9360958Z               "line": 329
2026-06-23T09:38:02.9361062Z             },
2026-06-23T09:38:02.9361159Z             {
2026-06-23T09:38:02.9361320Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9361426Z               "line": 56
2026-06-23T09:38:02.9361521Z             },
2026-06-23T09:38:02.9361625Z             {
2026-06-23T09:38:02.9361759Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9361868Z               "line": 188
2026-06-23T09:38:02.9361963Z             },
2026-06-23T09:38:02.9362067Z             {
2026-06-23T09:38:02.9362218Z               "path": "crates/spt-daemon/src/endpoint.rs",
2026-06-23T09:38:02.9362327Z               "line": 82
2026-06-23T09:38:02.9362428Z             },
2026-06-23T09:38:02.9362528Z             {
2026-06-23T09:38:02.9362675Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9362776Z               "line": 506
2026-06-23T09:38:02.9362876Z             },
2026-06-23T09:38:02.9362985Z             {
2026-06-23T09:38:02.9363124Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:02.9363228Z               "line": 424
2026-06-23T09:38:02.9363324Z             },
2026-06-23T09:38:02.9363434Z             {
2026-06-23T09:38:02.9363567Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9363677Z               "line": 2360
2026-06-23T09:38:02.9363786Z             }
2026-06-23T09:38:02.9363886Z           ]
2026-06-23T09:38:02.9363992Z         },
2026-06-23T09:38:02.9364092Z         "int": {
2026-06-23T09:38:02.9364211Z           "complete": true,
2026-06-23T09:38:02.9364336Z           "evidence": [
2026-06-23T09:38:02.9364426Z             {
2026-06-23T09:38:02.9364567Z               "path": "crates/spt/tests/brain_survive.rs",
2026-06-23T09:38:02.9364672Z               "line": 57
2026-06-23T09:38:02.9364785Z             },
2026-06-23T09:38:02.9364874Z             {
2026-06-23T09:38:02.9365013Z               "path": "crates/spt/tests/n1_pairing.rs",
2026-06-23T09:38:02.9365118Z               "line": 41
2026-06-23T09:38:02.9365213Z             }
2026-06-23T09:38:02.9365319Z           ]
2026-06-23T09:38:02.9365424Z         },
2026-06-23T09:38:02.9365653Z         "unit": {
2026-06-23T09:38:02.9365771Z           "complete": true,
2026-06-23T09:38:02.9365871Z           "evidence": [
2026-06-23T09:38:02.9365972Z             {
2026-06-23T09:38:02.9366119Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:02.9366234Z               "line": 532
2026-06-23T09:38:02.9366339Z             },
2026-06-23T09:38:02.9366444Z             {
2026-06-23T09:38:02.9366692Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:02.9366801Z               "line": 759
2026-06-23T09:38:02.9366912Z             },
2026-06-23T09:38:02.9367006Z             {
2026-06-23T09:38:02.9367150Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9367260Z               "line": 1067
2026-06-23T09:38:02.9367368Z             },
2026-06-23T09:38:02.9367458Z             {
2026-06-23T09:38:02.9367602Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9367716Z               "line": 1101
2026-06-23T09:38:02.9367811Z             },
2026-06-23T09:38:02.9367922Z             {
2026-06-23T09:38:02.9368063Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9368170Z               "line": 1143
2026-06-23T09:38:02.9368269Z             },
2026-06-23T09:38:02.9368374Z             {
2026-06-23T09:38:02.9368522Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9368636Z               "line": 1215
2026-06-23T09:38:02.9368736Z             },
2026-06-23T09:38:02.9368832Z             {
2026-06-23T09:38:02.9369075Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9369181Z               "line": 1228
2026-06-23T09:38:02.9369284Z             },
2026-06-23T09:38:02.9369395Z             {
2026-06-23T09:38:02.9369533Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9369641Z               "line": 1251
2026-06-23T09:38:02.9369741Z             },
2026-06-23T09:38:02.9369841Z             {
2026-06-23T09:38:02.9369982Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9370092Z               "line": 1277
2026-06-23T09:38:02.9370193Z             },
2026-06-23T09:38:02.9370291Z             {
2026-06-23T09:38:02.9370440Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9370550Z               "line": 1291
2026-06-23T09:38:02.9370654Z             },
2026-06-23T09:38:02.9370765Z             {
2026-06-23T09:38:02.9370898Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9371007Z               "line": 1315
2026-06-23T09:38:02.9371104Z             },
2026-06-23T09:38:02.9371208Z             {
2026-06-23T09:38:02.9371341Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9371456Z               "line": 1447
2026-06-23T09:38:02.9371560Z             },
2026-06-23T09:38:02.9371656Z             {
2026-06-23T09:38:02.9371785Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9371898Z               "line": 1623
2026-06-23T09:38:02.9372014Z             },
2026-06-23T09:38:02.9372114Z             {
2026-06-23T09:38:02.9372262Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9372372Z               "line": 1678
2026-06-23T09:38:02.9372466Z             },
2026-06-23T09:38:02.9372575Z             {
2026-06-23T09:38:02.9372709Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9372825Z               "line": 1724
2026-06-23T09:38:02.9372930Z             },
2026-06-23T09:38:02.9373040Z             {
2026-06-23T09:38:02.9373178Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9373283Z               "line": 1769
2026-06-23T09:38:02.9373393Z             },
2026-06-23T09:38:02.9373497Z             {
2026-06-23T09:38:02.9373647Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9373760Z               "line": 1813
2026-06-23T09:38:02.9373865Z             },
2026-06-23T09:38:02.9374075Z             {
2026-06-23T09:38:02.9374218Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9374328Z               "line": 1855
2026-06-23T09:38:02.9374427Z             },
2026-06-23T09:38:02.9374518Z             {
2026-06-23T09:38:02.9374652Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9374761Z               "line": 2423
2026-06-23T09:38:02.9374990Z             },
2026-06-23T09:38:02.9375094Z             {
2026-06-23T09:38:02.9375247Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9375354Z               "line": 217
2026-06-23T09:38:02.9375458Z             },
2026-06-23T09:38:02.9375555Z             {
2026-06-23T09:38:02.9375692Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9375802Z               "line": 233
2026-06-23T09:38:02.9375908Z             },
2026-06-23T09:38:02.9376007Z             {
2026-06-23T09:38:02.9376155Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9376270Z               "line": 254
2026-06-23T09:38:02.9376379Z             },
2026-06-23T09:38:02.9376480Z             {
2026-06-23T09:38:02.9376622Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9376732Z               "line": 265
2026-06-23T09:38:02.9376843Z             },
2026-06-23T09:38:02.9376947Z             {
2026-06-23T09:38:02.9377095Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9377200Z               "line": 278
2026-06-23T09:38:02.9377299Z             },
2026-06-23T09:38:02.9377410Z             {
2026-06-23T09:38:02.9377538Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9377648Z               "line": 289
2026-06-23T09:38:02.9377744Z             },
2026-06-23T09:38:02.9377848Z             {
2026-06-23T09:38:02.9377994Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9378095Z               "line": 301
2026-06-23T09:38:02.9378210Z             },
2026-06-23T09:38:02.9378304Z             {
2026-06-23T09:38:02.9378443Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9378544Z               "line": 312
2026-06-23T09:38:02.9378647Z             },
2026-06-23T09:38:02.9378744Z             {
2026-06-23T09:38:02.9378873Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9379092Z               "line": 323
2026-06-23T09:38:02.9379201Z             },
2026-06-23T09:38:02.9379296Z             {
2026-06-23T09:38:02.9379430Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9379535Z               "line": 332
2026-06-23T09:38:02.9379645Z             },
2026-06-23T09:38:02.9379745Z             {
2026-06-23T09:38:02.9379888Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9379988Z               "line": 342
2026-06-23T09:38:02.9380098Z             },
2026-06-23T09:38:02.9380196Z             {
2026-06-23T09:38:02.9380340Z               "path": "crates/spt-daemon/src/deadline.rs",
2026-06-23T09:38:02.9380453Z               "line": 358
2026-06-23T09:38:02.9380547Z             },
2026-06-23T09:38:02.9380647Z             {
2026-06-23T09:38:02.9380782Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9380890Z               "line": 969
2026-06-23T09:38:02.9380986Z             },
2026-06-23T09:38:02.9381081Z             {
2026-06-23T09:38:02.9381233Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9381344Z               "line": 1005
2026-06-23T09:38:02.9381448Z             },
2026-06-23T09:38:02.9381548Z             {
2026-06-23T09:38:02.9381687Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:02.9381792Z               "line": 966
2026-06-23T09:38:02.9381896Z             },
2026-06-23T09:38:02.9382002Z             {
2026-06-23T09:38:02.9382139Z               "path": "crates/spt-daemon/tests/resume.rs",
2026-06-23T09:38:02.9382250Z               "line": 147
2026-06-23T09:38:02.9382454Z             },
2026-06-23T09:38:02.9382561Z             {
2026-06-23T09:38:02.9382702Z               "path": "crates/spt-daemon/tests/resume.rs",
2026-06-23T09:38:02.9382807Z               "line": 226
2026-06-23T09:38:02.9382908Z             },
2026-06-23T09:38:02.9383003Z             {
2026-06-23T09:38:02.9383154Z               "path": "crates/spt-daemon/tests/resume.rs",
2026-06-23T09:38:02.9383353Z               "line": 295
2026-06-23T09:38:02.9383457Z             },
2026-06-23T09:38:02.9383557Z             {
2026-06-23T09:38:02.9383696Z               "path": "crates/spt/tests/brain_split.rs",
2026-06-23T09:38:02.9383809Z               "line": 17
2026-06-23T09:38:02.9383911Z             },
2026-06-23T09:38:02.9384020Z             {
2026-06-23T09:38:02.9384159Z               "path": "crates/spt/tests/brain_split.rs",
2026-06-23T09:38:02.9384272Z               "line": 104
2026-06-23T09:38:02.9384367Z             }
2026-06-23T09:38:02.9384454Z           ]
2026-06-23T09:38:02.9384550Z         }
2026-06-23T09:38:02.9384659Z       }
2026-06-23T09:38:02.9384763Z     },
2026-06-23T09:38:02.9384855Z     {
2026-06-23T09:38:02.9384997Z       "id": "REQ-HAZARD-BROKER-QUIC-DEADLINE",
2026-06-23T09:38:02.9388140Z       "title": "The broker bounds every brain-waiting QUIC op (dial / open_stream / send_stream) so a black-holed or dead peer fails PROMPTLY with an ORDINARY error the broker REPLIES, never an unbounded await. The bound (< the brain's 30s PUMP_PEER_IO_TIMEOUT so the BROKER fires first) surfaces to the pump as a normal broker error reply → peer_outcome's non-TimedOut arm → drop conn + redial next tick, the round CONTINUES and the heartbeat keeps advancing — it must NEVER manifest as the brain's own read-deadline (the A-half poison → supervised-restart path REQ-HAZARD-PUMP-IPC-DEADLINE guards). Exactly-once is preserved: a timed-out journaled op fails INSIDE its apply_once closure so no phantom conn_id/stream_id is recorded and a fresh tick re-dials cleanly. The happy path is unchanged (a live peer completes with zero added latency; the bound only bites a non-responsive peer). This is the ROOT-cause cure for the 2.2h hfenduleam pump wedge — a dead roster peer whose QUIC path the broker awaited unbounded — recurring on hfenduleam 2026-06-16.",
2026-06-23T09:38:02.9388265Z       "requiredStages": [
2026-06-23T09:38:02.9388371Z         "doc",
2026-06-23T09:38:02.9388478Z         "impl",
2026-06-23T09:38:02.9388592Z         "unit",
2026-06-23T09:38:02.9388703Z         "int"
2026-06-23T09:38:02.9388803Z       ],
2026-06-23T09:38:02.9388912Z       "stages": {
2026-06-23T09:38:02.9389104Z         "doc": {
2026-06-23T09:38:02.9389217Z           "complete": true,
2026-06-23T09:38:02.9389337Z           "evidence": [
2026-06-23T09:38:02.9389437Z             {
2026-06-23T09:38:02.9389571Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9389675Z               "line": 388
2026-06-23T09:38:02.9389790Z             }
2026-06-23T09:38:02.9389895Z           ]
2026-06-23T09:38:02.9389986Z         },
2026-06-23T09:38:02.9390109Z         "impl": {
2026-06-23T09:38:02.9390219Z           "complete": true,
2026-06-23T09:38:02.9390329Z           "evidence": [
2026-06-23T09:38:02.9390428Z             {
2026-06-23T09:38:02.9390583Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9390690Z               "line": 773
2026-06-23T09:38:02.9390795Z             },
2026-06-23T09:38:02.9390905Z             {
2026-06-23T09:38:02.9391045Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9391150Z               "line": 796
2026-06-23T09:38:02.9391250Z             }
2026-06-23T09:38:02.9391355Z           ]
2026-06-23T09:38:02.9391464Z         },
2026-06-23T09:38:02.9391565Z         "int": {
2026-06-23T09:38:02.9391679Z           "complete": true,
2026-06-23T09:38:02.9391784Z           "evidence": [
2026-06-23T09:38:02.9391890Z             {
2026-06-23T09:38:02.9392051Z               "path": "crates/spt-daemon/tests/netbroker.rs",
2026-06-23T09:38:02.9392285Z               "line": 228
2026-06-23T09:38:02.9392394Z             },
2026-06-23T09:38:02.9392496Z             {
2026-06-23T09:38:02.9392638Z               "path": "crates/spt-daemon/tests/pump.rs",
2026-06-23T09:38:02.9392747Z               "line": 468
2026-06-23T09:38:02.9392848Z             }
2026-06-23T09:38:02.9392952Z           ]
2026-06-23T09:38:02.9393052Z         },
2026-06-23T09:38:02.9393159Z         "unit": {
2026-06-23T09:38:02.9393367Z           "complete": true,
2026-06-23T09:38:02.9393478Z           "evidence": [
2026-06-23T09:38:02.9393582Z             {
2026-06-23T09:38:02.9393728Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:02.9393843Z               "line": 1495
2026-06-23T09:38:02.9393941Z             }
2026-06-23T09:38:02.9394050Z           ]
2026-06-23T09:38:02.9394142Z         }
2026-06-23T09:38:02.9394251Z       }
2026-06-23T09:38:02.9394351Z     },
2026-06-23T09:38:02.9394457Z     {
2026-06-23T09:38:02.9394594Z       "id": "REQ-HAZARD-BROKER-SEED-WIRE-SKEW",
2026-06-23T09:38:02.9398249Z       "title": "A daemon-state wire-format change (e.g. the v0.9.0 adapter-agnostic Seed) does NOT take effect until a DELIBERATE full broker restart: the broker serves the seed-control channel and is RESIDENT across a brain-only self-update (ADR-0004 no-terminate-during-update forbids auto-killing it), so a NEW-version CLI talking to a still-resident OLD broker fails the seed handshake — the old broker cannot deserialize the new Seed (its formerly-required `adapter` field is gone) and drops the conn without an ack, which surfaces to the CLI as a raw UnexpectedEof 'failed to fill whole buffer'. spt-core must (a) surface an ACTIONABLE diagnostic on that seed-ack EOF (name the stale-broker cause + the `spt daemon stop` fix — the broker restarts on the next api call), never the cryptic io error; and (b) document the operational rule (a deliberate broker restart is required on any daemon-state wire change — NOT automatic) + the FORWARD discipline (daemon-state/Seed schema changes stay additive + serde-default so a resident OLD broker tolerates a NEW CLI across a brain-only update; note this would NOT have rescued 0.9.0 itself, since the old broker's `adapter` was a required field). perri PREP-4 FINDING 1 (v0.9.0 CLI vs stale 0.8.x broker).",
2026-06-23T09:38:02.9398372Z       "requiredStages": [
2026-06-23T09:38:02.9398482Z         "doc",
2026-06-23T09:38:02.9398583Z         "impl",
2026-06-23T09:38:02.9398691Z         "unit"
2026-06-23T09:38:02.9398801Z       ],
2026-06-23T09:38:02.9398903Z       "stages": {
2026-06-23T09:38:02.9399082Z         "doc": {
2026-06-23T09:38:02.9399191Z           "complete": true,
2026-06-23T09:38:02.9399297Z           "evidence": [
2026-06-23T09:38:02.9399401Z             {
2026-06-23T09:38:02.9399573Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9399687Z               "line": 395
2026-06-23T09:38:02.9399782Z             }
2026-06-23T09:38:02.9399888Z           ]
2026-06-23T09:38:02.9399993Z         },
2026-06-23T09:38:02.9400106Z         "impl": {
2026-06-23T09:38:02.9400213Z           "complete": true,
2026-06-23T09:38:02.9400321Z           "evidence": [
2026-06-23T09:38:02.9400416Z             {
2026-06-23T09:38:02.9400565Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9400679Z               "line": 75
2026-06-23T09:38:02.9400780Z             }
2026-06-23T09:38:02.9400894Z           ]
2026-06-23T09:38:02.9400998Z         },
2026-06-23T09:38:02.9401104Z         "int": {
2026-06-23T09:38:02.9401213Z           "complete": false,
2026-06-23T09:38:02.9401317Z           "evidence": []
2026-06-23T09:38:02.9401421Z         },
2026-06-23T09:38:02.9401531Z         "unit": {
2026-06-23T09:38:02.9401648Z           "complete": true,
2026-06-23T09:38:02.9401753Z           "evidence": [
2026-06-23T09:38:02.9401854Z             {
2026-06-23T09:38:02.9401996Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9402106Z               "line": 632
2026-06-23T09:38:02.9402221Z             }
2026-06-23T09:38:02.9402440Z           ]
2026-06-23T09:38:02.9402554Z         }
2026-06-23T09:38:02.9402653Z       }
2026-06-23T09:38:02.9402765Z     },
2026-06-23T09:38:02.9402869Z     {
2026-06-23T09:38:02.9402998Z       "id": "REQ-HAZARD-CASCADE-WIPE-GUARD",
2026-06-23T09:38:02.9403203Z       "title": "No hard-delete of a parent hosting non-empty children (6.3)",
2026-06-23T09:38:02.9403312Z       "requiredStages": [
2026-06-23T09:38:02.9403522Z         "impl",
2026-06-23T09:38:02.9403622Z         "unit"
2026-06-23T09:38:02.9403719Z       ],
2026-06-23T09:38:02.9403832Z       "stages": {
2026-06-23T09:38:02.9403932Z         "doc": {
2026-06-23T09:38:02.9404057Z           "complete": false,
2026-06-23T09:38:02.9404166Z           "evidence": []
2026-06-23T09:38:02.9404265Z         },
2026-06-23T09:38:02.9404370Z         "impl": {
2026-06-23T09:38:02.9404487Z           "complete": true,
2026-06-23T09:38:02.9404601Z           "evidence": [
2026-06-23T09:38:02.9404702Z             {
2026-06-23T09:38:02.9404858Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.9404969Z               "line": 172
2026-06-23T09:38:02.9405069Z             },
2026-06-23T09:38:02.9405173Z             {
2026-06-23T09:38:02.9405317Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.9405427Z               "line": 18
2026-06-23T09:38:02.9405530Z             },
2026-06-23T09:38:02.9405636Z             {
2026-06-23T09:38:02.9405770Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.9405879Z               "line": 100
2026-06-23T09:38:02.9405980Z             }
2026-06-23T09:38:02.9406088Z           ]
2026-06-23T09:38:02.9406199Z         },
2026-06-23T09:38:02.9406300Z         "int": {
2026-06-23T09:38:02.9406422Z           "complete": false,
2026-06-23T09:38:02.9406533Z           "evidence": []
2026-06-23T09:38:02.9406638Z         },
2026-06-23T09:38:02.9406736Z         "unit": {
2026-06-23T09:38:02.9406850Z           "complete": true,
2026-06-23T09:38:02.9406970Z           "evidence": [
2026-06-23T09:38:02.9407072Z             {
2026-06-23T09:38:02.9407220Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:02.9407331Z               "line": 857
2026-06-23T09:38:02.9407439Z             },
2026-06-23T09:38:02.9407540Z             {
2026-06-23T09:38:02.9407679Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.9407788Z               "line": 161
2026-06-23T09:38:02.9407898Z             },
2026-06-23T09:38:02.9408003Z             {
2026-06-23T09:38:02.9408136Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.9408237Z               "line": 233
2026-06-23T09:38:02.9408332Z             }
2026-06-23T09:38:02.9408432Z           ]
2026-06-23T09:38:02.9408542Z         }
2026-06-23T09:38:02.9408647Z       }
2026-06-23T09:38:02.9408756Z     },
2026-06-23T09:38:02.9408852Z     {
2026-06-23T09:38:02.9409075Z       "id": "REQ-HAZARD-CHILD-CONSOLE-FLASH",
2026-06-23T09:38:02.9409539Z       "title": "Console-subsystem children of the console-less daemon spawn with CREATE_NO_WINDOW, or each spawn flashes a visible blank window on the user's desktop (5.8)",
2026-06-23T09:38:02.9409661Z       "requiredStages": [
2026-06-23T09:38:02.9409770Z         "impl",
2026-06-23T09:38:02.9409862Z         "unit"
2026-06-23T09:38:02.9409965Z       ],
2026-06-23T09:38:02.9410076Z       "stages": {
2026-06-23T09:38:02.9410185Z         "doc": {
2026-06-23T09:38:02.9410294Z           "complete": true,
2026-06-23T09:38:02.9410405Z           "evidence": [
2026-06-23T09:38:02.9410514Z             {
2026-06-23T09:38:02.9410638Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9410749Z               "line": 220
2026-06-23T09:38:02.9410848Z             }
2026-06-23T09:38:02.9410957Z           ]
2026-06-23T09:38:02.9411049Z         },
2026-06-23T09:38:02.9411158Z         "impl": {
2026-06-23T09:38:02.9411277Z           "complete": true,
2026-06-23T09:38:02.9411378Z           "evidence": [
2026-06-23T09:38:02.9411487Z             {
2026-06-23T09:38:02.9411746Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:02.9411854Z               "line": 318
2026-06-23T09:38:02.9411957Z             },
2026-06-23T09:38:02.9412063Z             {
2026-06-23T09:38:02.9412209Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:02.9412313Z               "line": 359
2026-06-23T09:38:02.9412424Z             },
2026-06-23T09:38:02.9412619Z             {
2026-06-23T09:38:02.9412767Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:02.9412876Z               "line": 581
2026-06-23T09:38:02.9412987Z             },
2026-06-23T09:38:02.9413096Z             {
2026-06-23T09:38:02.9413233Z               "path": "crates/spt-store/src/gitrun.rs",
2026-06-23T09:38:02.9413344Z               "line": 77
2026-06-23T09:38:02.9413443Z             }
2026-06-23T09:38:02.9413553Z           ]
2026-06-23T09:38:02.9413654Z         },
2026-06-23T09:38:02.9413763Z         "int": {
2026-06-23T09:38:02.9413892Z           "complete": false,
2026-06-23T09:38:02.9414002Z           "evidence": []
2026-06-23T09:38:02.9414106Z         },
2026-06-23T09:38:02.9414202Z         "unit": {
2026-06-23T09:38:02.9414312Z           "complete": true,
2026-06-23T09:38:02.9414421Z           "evidence": [
2026-06-23T09:38:02.9414517Z             {
2026-06-23T09:38:02.9414660Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:02.9414768Z               "line": 750
2026-06-23T09:38:02.9414877Z             },
2026-06-23T09:38:02.9414981Z             {
2026-06-23T09:38:02.9415127Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:02.9415238Z               "line": 788
2026-06-23T09:38:02.9415334Z             },
2026-06-23T09:38:02.9415442Z             {
2026-06-23T09:38:02.9415572Z               "path": "crates/spt-store/src/gitrun.rs",
2026-06-23T09:38:02.9415686Z               "line": 166
2026-06-23T09:38:02.9415790Z             }
2026-06-23T09:38:02.9415896Z           ]
2026-06-23T09:38:02.9415992Z         }
2026-06-23T09:38:02.9416105Z       }
2026-06-23T09:38:02.9416211Z     },
2026-06-23T09:38:02.9416310Z     {
2026-06-23T09:38:02.9416463Z       "id": "REQ-HAZARD-CONFLICT-BOTH-PRESERVED",
2026-06-23T09:38:02.9417054Z       "title": "A surfaced concurrent context pair is durably preserved (both versions, tracked artifacts) until a strictly dominating write clears it; no reconcile failure path discards an unmerged version (6.6, ADR-0013)",
2026-06-23T09:38:02.9417179Z       "requiredStages": [
2026-06-23T09:38:02.9417288Z         "impl",
2026-06-23T09:38:02.9417392Z         "unit"
2026-06-23T09:38:02.9417496Z       ],
2026-06-23T09:38:02.9417604Z       "stages": {
2026-06-23T09:38:02.9417709Z         "doc": {
2026-06-23T09:38:02.9417824Z           "complete": false,
2026-06-23T09:38:02.9417924Z           "evidence": []
2026-06-23T09:38:02.9418028Z         },
2026-06-23T09:38:02.9418134Z         "impl": {
2026-06-23T09:38:02.9418253Z           "complete": true,
2026-06-23T09:38:02.9418362Z           "evidence": [
2026-06-23T09:38:02.9418463Z             {
2026-06-23T09:38:02.9418615Z               "path": "crates/spt-daemon/src/reconcile.rs",
2026-06-23T09:38:02.9418726Z               "line": 22
2026-06-23T09:38:02.9418835Z             },
2026-06-23T09:38:02.9419020Z             {
2026-06-23T09:38:02.9419163Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:02.9419272Z               "line": 487
2026-06-23T09:38:02.9419384Z             },
2026-06-23T09:38:02.9419473Z             {
2026-06-23T09:38:02.9419616Z               "path": "crates/spt-live/src/reconcile.rs",
2026-06-23T09:38:02.9419722Z               "line": 17
2026-06-23T09:38:02.9419826Z             },
2026-06-23T09:38:02.9419931Z             {
2026-06-23T09:38:02.9420075Z               "path": "crates/spt-live/src/reconcile.rs",
2026-06-23T09:38:02.9420192Z               "line": 147
2026-06-23T09:38:02.9420297Z             },
2026-06-23T09:38:02.9420402Z             {
2026-06-23T09:38:02.9420869Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9420980Z               "line": 226
2026-06-23T09:38:02.9421089Z             },
2026-06-23T09:38:02.9421188Z             {
2026-06-23T09:38:02.9421342Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9421456Z               "line": 251
2026-06-23T09:38:02.9421556Z             },
2026-06-23T09:38:02.9421657Z             {
2026-06-23T09:38:02.9421905Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9422014Z               "line": 277
2026-06-23T09:38:02.9422114Z             },
2026-06-23T09:38:02.9422219Z             {
2026-06-23T09:38:02.9422357Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:02.9422466Z               "line": 124
2026-06-23T09:38:02.9422566Z             },
2026-06-23T09:38:02.9422670Z             {
2026-06-23T09:38:02.9422820Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:02.9422921Z               "line": 224
2026-06-23T09:38:02.9423036Z             }
2026-06-23T09:38:02.9423145Z           ]
2026-06-23T09:38:02.9423251Z         },
2026-06-23T09:38:02.9423360Z         "int": {
2026-06-23T09:38:02.9423473Z           "complete": false,
2026-06-23T09:38:02.9423594Z           "evidence": []
2026-06-23T09:38:02.9423684Z         },
2026-06-23T09:38:02.9423798Z         "unit": {
2026-06-23T09:38:02.9423918Z           "complete": true,
2026-06-23T09:38:02.9424022Z           "evidence": [
2026-06-23T09:38:02.9424132Z             {
2026-06-23T09:38:02.9424285Z               "path": "crates/spt-daemon/src/reconcile.rs",
2026-06-23T09:38:02.9424394Z               "line": 63
2026-06-23T09:38:02.9424496Z             },
2026-06-23T09:38:02.9424594Z             {
2026-06-23T09:38:02.9424742Z               "path": "crates/spt-daemon/src/reconcile.rs",
2026-06-23T09:38:02.9424849Z               "line": 73
2026-06-23T09:38:02.9424957Z             },
2026-06-23T09:38:02.9425057Z             {
2026-06-23T09:38:02.9425206Z               "path": "crates/spt-daemon/src/reconcile.rs",
2026-06-23T09:38:02.9425309Z               "line": 85
2026-06-23T09:38:02.9425419Z             },
2026-06-23T09:38:02.9425528Z             {
2026-06-23T09:38:02.9425659Z               "path": "crates/spt-daemon/tests/sync.rs",
2026-06-23T09:38:02.9425779Z               "line": 346
2026-06-23T09:38:02.9425880Z             },
2026-06-23T09:38:02.9425993Z             {
2026-06-23T09:38:02.9426142Z               "path": "crates/spt-live/src/reconcile.rs",
2026-06-23T09:38:02.9426251Z               "line": 281
2026-06-23T09:38:02.9426360Z             },
2026-06-23T09:38:02.9426471Z             {
2026-06-23T09:38:02.9426618Z               "path": "crates/spt-live/src/reconcile.rs",
2026-06-23T09:38:02.9426723Z               "line": 322
2026-06-23T09:38:02.9426837Z             },
2026-06-23T09:38:02.9426937Z             {
2026-06-23T09:38:02.9427086Z               "path": "crates/spt-live/src/reconcile.rs",
2026-06-23T09:38:02.9427199Z               "line": 360
2026-06-23T09:38:02.9427309Z             },
2026-06-23T09:38:02.9427420Z             {
2026-06-23T09:38:02.9427557Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9427668Z               "line": 688
2026-06-23T09:38:02.9427763Z             },
2026-06-23T09:38:02.9427876Z             {
2026-06-23T09:38:02.9428024Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:02.9428132Z               "line": 397
2026-06-23T09:38:02.9428230Z             },
2026-06-23T09:38:02.9428336Z             {
2026-06-23T09:38:02.9428484Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:02.9428588Z               "line": 440
2026-06-23T09:38:02.9428685Z             }
2026-06-23T09:38:02.9428790Z           ]
2026-06-23T09:38:02.9428883Z         }
2026-06-23T09:38:02.9429066Z       }
2026-06-23T09:38:02.9429175Z     },
2026-06-23T09:38:02.9429276Z     {
2026-06-23T09:38:02.9429404Z       "id": "REQ-HAZARD-CONPTY-DSR",
2026-06-23T09:38:02.9429752Z       "title": "ConPTY reader must auto-answer DSR (ESC[6n) or all child output stalls (5.5)",
2026-06-23T09:38:02.9429886Z       "requiredStages": [
2026-06-23T09:38:02.9429987Z         "impl",
2026-06-23T09:38:02.9430100Z         "unit"
2026-06-23T09:38:02.9430196Z       ],
2026-06-23T09:38:02.9430306Z       "stages": {
2026-06-23T09:38:02.9430409Z         "doc": {
2026-06-23T09:38:02.9430521Z           "complete": false,
2026-06-23T09:38:02.9430738Z           "evidence": []
2026-06-23T09:38:02.9430838Z         },
2026-06-23T09:38:02.9430949Z         "impl": {
2026-06-23T09:38:02.9431058Z           "complete": true,
2026-06-23T09:38:02.9431162Z           "evidence": [
2026-06-23T09:38:02.9431273Z             {
2026-06-23T09:38:02.9431419Z               "path": "crates/spt-term/src/reader.rs",
2026-06-23T09:38:02.9431526Z               "line": 169
2026-06-23T09:38:02.9431625Z             }
2026-06-23T09:38:02.9431730Z           ]
2026-06-23T09:38:02.9431830Z         },
2026-06-23T09:38:02.9431940Z         "int": {
2026-06-23T09:38:02.9432058Z           "complete": true,
2026-06-23T09:38:02.9432170Z           "evidence": [
2026-06-23T09:38:02.9432265Z             {
2026-06-23T09:38:02.9435231Z               "path": "crates/spt-term/tests/dsr.rs",
2026-06-23T09:38:02.9435370Z               "line": 44
2026-06-23T09:38:02.9435474Z             },
2026-06-23T09:38:02.9435584Z             {
2026-06-23T09:38:02.9435724Z               "path": "crates/spt-term/tests/dsr.rs",
2026-06-23T09:38:02.9435855Z               "line": 66
2026-06-23T09:38:02.9435954Z             }
2026-06-23T09:38:02.9436050Z           ]
2026-06-23T09:38:02.9436153Z         },
2026-06-23T09:38:02.9436257Z         "unit": {
2026-06-23T09:38:02.9436373Z           "complete": true,
2026-06-23T09:38:02.9436486Z           "evidence": [
2026-06-23T09:38:02.9436596Z             {
2026-06-23T09:38:02.9436744Z               "path": "crates/spt-term/src/reader.rs",
2026-06-23T09:38:02.9436853Z               "line": 186
2026-06-23T09:38:02.9436954Z             },
2026-06-23T09:38:02.9437059Z             {
2026-06-23T09:38:02.9437202Z               "path": "crates/spt-term/src/reader.rs",
2026-06-23T09:38:02.9437313Z               "line": 238
2026-06-23T09:38:02.9437416Z             },
2026-06-23T09:38:02.9437521Z             {
2026-06-23T09:38:02.9437647Z               "path": "crates/spt-term/src/reader.rs",
2026-06-23T09:38:02.9437759Z               "line": 266
2026-06-23T09:38:02.9437855Z             }
2026-06-23T09:38:02.9437952Z           ]
2026-06-23T09:38:02.9438055Z         }
2026-06-23T09:38:02.9438156Z       }
2026-06-23T09:38:02.9438252Z     },
2026-06-23T09:38:02.9438347Z     {
2026-06-23T09:38:02.9438492Z       "id": "REQ-HAZARD-CONTROLLER-GAP-RESUME",
2026-06-23T09:38:02.9445310Z       "title": "A serving CONTROLLER whose serve-brain hits a b4 drop-don't-block FORWARD output gap must RESUME-FROM-FLOOR (re-subscribe from delivered_through and re-fetch the dropped frames from the ring), NOT snap-above and NOT fatal. ROOT (v0.13.0 forkpty re-run, post-keystone): b4 made the controller a non-blocking try_send that DROPS frames when its bounded channel fills (a controller that falls behind its OWN echo under a hard flood), so the next read is a forward gap the strict reject-gap (brain.rs:624/628, B2 exactly-once) FATALS — wedged_viewer_does_not_stall_controller (attach.rs:1048) drove ctrl.read_event() raw and fataled on `output gap got 6134 want 4643`. Pre-b4 the inline sleep-poll BLOCKED the drain to the controller's rate (no drops, no gaps); this is a b4 SIDE-EFFECT, not a new class. A controller CANNOT snap (it is authoritative — advances delivered_through; skipping rolled frames = not-exactly-once = B2 violation), so REQ-HAZARD-VIEWER-RING-ROLL-SNAP does NOT apply. B2 INVARIANT (doyle, broker.rs:327-330): the ring trim is delivered_through-BLIND (`while ring.len() > cap_chunks { pop_front() }`), so re-fetch is exactly-once IFF tail - delivered_through <= cap_chunks (4096) — NOT guaranteed in general, but the common case (burst < ring; wedged_viewer ~1492 < 4096) holds. FIX: serve_attach catches the output-gap on the controller path (does not ?-propagate) and re-subscribes from Brain::controller_resume_floor (= delivered_through = the gap's `want`; NO mid-stream KIND_SESSIONS round-trip — sessions() loops on read_event and would re-fatal on the same gap + discard Output); the broker replays the dropped frames. The IRRECOVERABLE edge (floor unchanged across two resumes = ring rolled past delivered_through = frames gone) surfaces a MARKED truncation to the operator (never silent-skip = B2 lie, never spin) and ends cleanly — full graceful handling deferred to REQ-HAZARD-CONTROLLER-IRRECOVERABLE-BEHIND. Do NOT make the ring trim delivered_through-aware (that risks an unbounded ring under a stuck controller; the 5s eviction + 4096 ring is the practical bound). (v0.13.0)",
2026-06-23T09:38:02.9445553Z       "requiredStages": [
2026-06-23T09:38:02.9445649Z         "impl",
2026-06-23T09:38:02.9445767Z         "unit",
2026-06-23T09:38:02.9445873Z         "int"
2026-06-23T09:38:02.9445983Z       ],
2026-06-23T09:38:02.9446091Z       "stages": {
2026-06-23T09:38:02.9446202Z         "doc": {
2026-06-23T09:38:02.9446317Z           "complete": false,
2026-06-23T09:38:02.9446434Z           "evidence": []
2026-06-23T09:38:02.9446539Z         },
2026-06-23T09:38:02.9446644Z         "impl": {
2026-06-23T09:38:02.9446761Z           "complete": true,
2026-06-23T09:38:02.9446861Z           "evidence": [
2026-06-23T09:38:02.9446971Z             {
2026-06-23T09:38:02.9447123Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:02.9447229Z               "line": 109
2026-06-23T09:38:02.9447334Z             },
2026-06-23T09:38:02.9447433Z             {
2026-06-23T09:38:02.9447582Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:02.9447691Z               "line": 156
2026-06-23T09:38:02.9447795Z             },
2026-06-23T09:38:02.9447892Z             {
2026-06-23T09:38:02.9448033Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:02.9448129Z               "line": 261
2026-06-23T09:38:02.9448226Z             },
2026-06-23T09:38:02.9448329Z             {
2026-06-23T09:38:02.9448469Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9448573Z               "line": 954
2026-06-23T09:38:02.9448668Z             }
2026-06-23T09:38:02.9448764Z           ]
2026-06-23T09:38:02.9448874Z         },
2026-06-23T09:38:02.9449039Z         "int": {
2026-06-23T09:38:02.9449153Z           "complete": true,
2026-06-23T09:38:02.9449261Z           "evidence": [
2026-06-23T09:38:02.9449370Z             {
2026-06-23T09:38:02.9449514Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:02.9449623Z               "line": 1057
2026-06-23T09:38:02.9449733Z             }
2026-06-23T09:38:02.9449829Z           ]
2026-06-23T09:38:02.9449933Z         },
2026-06-23T09:38:02.9450042Z         "unit": {
2026-06-23T09:38:02.9450148Z           "complete": true,
2026-06-23T09:38:02.9450253Z           "evidence": [
2026-06-23T09:38:02.9450347Z             {
2026-06-23T09:38:02.9450486Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9450586Z               "line": 1526
2026-06-23T09:38:02.9450691Z             }
2026-06-23T09:38:02.9450792Z           ]
2026-06-23T09:38:02.9450901Z         }
2026-06-23T09:38:02.9451001Z       }
2026-06-23T09:38:02.9451088Z     },
2026-06-23T09:38:02.9451191Z     {
2026-06-23T09:38:02.9451360Z       "id": "REQ-HAZARD-CONTROLLER-IRRECOVERABLE-BEHIND",
2026-06-23T09:38:02.9454341Z       "title": "DEFERRED EDGE of REQ-HAZARD-CONTROLLER-GAP-RESUME: when a serving controller falls behind the live ring FURTHER than the ring holds (tail - delivered_through > cap_chunks, the ring trim being delivered_through-blind, broker.rs:327-330), the dropped frames have rolled OUT of the ring and an exactly-once re-fetch is IMPOSSIBLE. v0.13.0 DETECTS this (resume floor unchanged across two consecutive resumes) and surfaces a MARKED truncation notice to the operator then ends the attach cleanly — it never silent-skips (a B2 lie) and never spins. FULL graceful handling (a clearly-marked snap-with-data-loss that keeps the operator on the live tail, or a structured truncation record the rc renders distinctly, plus the controller-too-slow + ring-too-small backpressure/sizing policy) is DEFERRED — staging it needs a netsplit / deep-behind harness (the in-process loopback rig keeps up; wedged_viewer's gap is recoverable at ~1492 < 4096). (v0.13.0+)",
2026-06-23T09:38:02.9454559Z       "requiredStages": [],
2026-06-23T09:38:02.9454664Z       "stages": {
2026-06-23T09:38:02.9454763Z         "doc": {
2026-06-23T09:38:02.9454873Z           "complete": false,
2026-06-23T09:38:02.9454979Z           "evidence": []
2026-06-23T09:38:02.9455088Z         },
2026-06-23T09:38:02.9455183Z         "impl": {
2026-06-23T09:38:02.9455298Z           "complete": false,
2026-06-23T09:38:02.9455407Z           "evidence": []
2026-06-23T09:38:02.9455513Z         },
2026-06-23T09:38:02.9455618Z         "int": {
2026-06-23T09:38:02.9455736Z           "complete": false,
2026-06-23T09:38:02.9455842Z           "evidence": []
2026-06-23T09:38:02.9455942Z         },
2026-06-23T09:38:02.9456051Z         "unit": {
2026-06-23T09:38:02.9456162Z           "complete": false,
2026-06-23T09:38:02.9456271Z           "evidence": []
2026-06-23T09:38:02.9456371Z         }
2026-06-23T09:38:02.9456472Z       }
2026-06-23T09:38:02.9456576Z     },
2026-06-23T09:38:02.9456676Z     {
2026-06-23T09:38:02.9456825Z       "id": "REQ-HAZARD-CONTROLLER-RETAKE-FLOOR",
2026-06-23T09:38:02.9461156Z       "title": "`become_controller` should STRUCTURALLY refuse a controller re-take whose `from_seq` falls below the connection's already-delivered contiguous floor — making the P1c reorder invariant un-reintroducible by a future caller, not just removed at the one caller. ROOT/SCOPE (doyle proposed, P1c gate dialogue): P1c fixes REQ-HAZARD-CONTROLLER-WRITER-REORDER three ways (handoff single-take + epoch-gate-under-lock + session_cursors seed), removing the one decreasing-floor double-take and bounding any other to already-committed-only. A self-enforcing broker guard would refuse the bad SHAPE outright. BLOCKER: the obvious predicate (`from_seq >= delivered_through`) is UNSAFE because `delivered_through` is SESSION-WIDE (the `Arc<AtomicU64>` on `OutputLog`, shared by all controllers/viewers, advanced monotonic-MAX; `resume_seq` reads it) — a normal fresh-operator `from_seq=0` attach to a producing session legitimately sits below it (full ring replay + consumer dedup-below/snap-above), and monotonic-MAX can't distinguish the hazard (a `seq1`-without-`seq0` write reads as `2`). The structurally-correct guard needs a NEW per-connection contiguous-sent cursor (the true highest-contiguous seq this socket has received) that does not exist today; the guard then refuses a re-take below THAT. Bigger than P1c; no live gap (P1c fully fixes the actual bug). Mint/refine stages when the per-connection cursor is built. (v0.13.0 follow-up, post-ship)",
2026-06-23T09:38:02.9461285Z       "requiredStages": [],
2026-06-23T09:38:02.9461394Z       "stages": {
2026-06-23T09:38:02.9461504Z         "doc": {
2026-06-23T09:38:02.9461615Z           "complete": false,
2026-06-23T09:38:02.9461718Z           "evidence": []
2026-06-23T09:38:02.9461818Z         },
2026-06-23T09:38:02.9461925Z         "impl": {
2026-06-23T09:38:02.9462042Z           "complete": false,
2026-06-23T09:38:02.9462148Z           "evidence": []
2026-06-23T09:38:02.9462259Z         },
2026-06-23T09:38:02.9462357Z         "int": {
2026-06-23T09:38:02.9462471Z           "complete": false,
2026-06-23T09:38:02.9462576Z           "evidence": []
2026-06-23T09:38:02.9462682Z         },
2026-06-23T09:38:02.9462781Z         "unit": {
2026-06-23T09:38:02.9462891Z           "complete": false,
2026-06-23T09:38:02.9463001Z           "evidence": []
2026-06-23T09:38:02.9463100Z         }
2026-06-23T09:38:02.9463206Z       }
2026-06-23T09:38:02.9463301Z     },
2026-06-23T09:38:02.9463410Z     {
2026-06-23T09:38:02.9463564Z       "id": "REQ-HAZARD-CONTROLLER-WRITER-REORDER",
2026-06-23T09:38:02.9477678Z       "title": "Two `controller_writer` threads must never race ONE brain↔broker connection's socket. ROOT (doyle, instrumented RACEDIAG repro on kitsubito): on a brain-restart re-serve the handoff brain registers as controller on the SAME session TWICE over the SAME `Brain::conn` socket — (1) `Brain::handoff` eagerly `subscribe(prior.session_id, prior.next_seq=1)` → `become_controller(from_seq=1)`, initial=[1], spawns writer-A (writes seq 1); (2) `serve_attach` re-handles the replayed `Request{from_seq:0}` → `attach_as(sid,0)` → `become_controller(from_seq=0)`, initial=[0,1], spawns writer-B (writes 0 then 1). `become_controller` (broker.rs) drops the prior `ControllerSink` (its `tx`) but does NOT stop the prior writer thread — writer-A keeps flushing its owned `initial` batch, and both writers hold clones of the same `SharedSend` (`Arc<Mutex<socket>>`) with NO inter-thread ordering. When writer-A's seq 1 wins the socket before writer-B's seq 0, the strict legacy consumer (brain.rs read_event reject-gap path) sees `output gap: got seq 1 want 0` → the test `attach_survives_target_brain_restart_exactly_once` panics at `.expect(\"re-serve\")` OR HANGS in `render_until` (serve thread died on the gap → MARKER_TWO never reaches the wire). `prior.next_seq` is life1's CONSUMPTION cursor, NOT life2's connection state — life2's socket has been sent NOTHING, so a `from_seq=0` full replay on a connection that already streamed seq 1 is contradictory. Snap-above tolerance ALONE can't fix it (it would dedup-drop the late seq 0 → byte loss → the exactly-once byte-identity assert fails). PRE-EXISTING, surfaced by the v0.13.0 green-both-runners release gate; P1b is INNOCENT (its diff touches only input-ack machinery, proven mechanically + the test passes post-P1b in isolation). Sibling flaky cluster: `inject_control_wedge::g2`, `broker::spawn_env_reaches_child`. INVARIANT: on a single brain↔broker connection the controller output-frame stream is monotonic non-decreasing in seq (modulo dedup re-sends); exactly ONE `controller_writer` is ever live per connection; a SUPERSEDED writer writes NO further frames; a re-serve never replays a seq below what the connection already received. FIX (doyle design, corrected at the gate 2026-06-20): fix #1 as designed ('drop handoff's eager subscribe so serve_attach's attach_as is the sole registration') was REVERTED — handoff's `subscribe(prior.next_seq)` IS the standalone-resume mechanism (the brain-only update engine `apply_brain_only` + the `handoff`/`idempotent`/`daemon_e2e` int tests replay output through it with NO `serve_attach`; dropping it hung every resume-via-handoff test). The shipped fix is three parts: (1) CORRECTNESS — `Brain::handoff` seeds `session_cursors` at `prior.next_seq` so the consumer runs the production dedup-below+snap-above path, never the strict reject-gap legacy trap; this is COMPLETE (not merely tolerant) because every `controller_writer` emits an ASCENDING seq stream and the surviving writer (serve_attach's attach_as(sid,0)) offers the complete `[0,end]` range, so a snap-above merge of ascending writers delivers `[K,end]` with no skip/dup (first sighting of any seq>M is preceded by M on that writer). (2) INVARIANT — `controller_writer`'s INITIAL-BATCH replay is epoch-gated: `controller_epoch` is a shared `Arc<AtomicU64>`, the writer re-reads it UNDER `send.lock()` (atomically with `write_frame`) and returns the instant it is superseded — no check-then-block-then-write window, no superseded replay (W1-safe: never blocks the drain under `Mutex<OutputLog>`). The LIVE loop is NOT gated (new output only flows to the current controller; a superseded writer must still deliver its terminal `Displaced` kick — gating it suppressed the loud-take notice; it ends on `tx`-drop). (3) EXPLICIT-RESUME / OPERATOR-STREAM BOUNDARY (the LOAD-BEARING fix — kitsubito RACEDIAG ~33% repro the keystones missed) — `Brain::subscribe_with` (shared by attach/attach_as) resets the resume-mode dedup cursor to `from_seq`. The handoff eager subscribe makes serve_attach's brain receive the replay's seq K BEFORE the operator Request is processed (`attached`=false); that frame is dropped by the if-attached forward gate but the snap-above cursor already advanced past K, and `attach_as(sid,0)`'s re-subscribe used to leave the cursor advanced → the broker's re-send of seq K arrives below it, deduped, never forwarded → operator viewport forward-gap (silent content loss in the real rc consumer). Resetting to from_seq on the attach_as re-subscribe re-delivers from 0 (operator dedups the overlap) so seq K reaches the viewport. The epoch gate (2) is sound (RACEDIAG: zero socket interleaving above K); cold-start brains (empty map — production dispatch serve) keep the legacy next_seq path, so production is unaffected. (v0.13.0)",
2026-06-23T09:38:02.9478053Z       "requiredStages": [
2026-06-23T09:38:02.9478148Z         "doc",
2026-06-23T09:38:02.9478263Z         "impl",
2026-06-23T09:38:02.9478361Z         "unit",
2026-06-23T09:38:02.9478474Z         "int"
2026-06-23T09:38:02.9478575Z       ],
2026-06-23T09:38:02.9478680Z       "stages": {
2026-06-23T09:38:02.9478784Z         "doc": {
2026-06-23T09:38:02.9478895Z           "complete": true,
2026-06-23T09:38:02.9479090Z           "evidence": [
2026-06-23T09:38:02.9479195Z             {
2026-06-23T09:38:02.9479323Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9479428Z               "line": 468
2026-06-23T09:38:02.9479534Z             }
2026-06-23T09:38:02.9479638Z           ]
2026-06-23T09:38:02.9479729Z         },
2026-06-23T09:38:02.9479834Z         "impl": {
2026-06-23T09:38:02.9479944Z           "complete": true,
2026-06-23T09:38:02.9480053Z           "evidence": [
2026-06-23T09:38:02.9480154Z             {
2026-06-23T09:38:02.9480301Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9480410Z               "line": 348
2026-06-23T09:38:02.9480512Z             },
2026-06-23T09:38:02.9480620Z             {
2026-06-23T09:38:02.9480757Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9480867Z               "line": 1310
2026-06-23T09:38:02.9480975Z             },
2026-06-23T09:38:02.9481079Z             {
2026-06-23T09:38:02.9481218Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9481317Z               "line": 760
2026-06-23T09:38:02.9481418Z             }
2026-06-23T09:38:02.9481514Z           ]
2026-06-23T09:38:02.9481619Z         },
2026-06-23T09:38:02.9481723Z         "int": {
2026-06-23T09:38:02.9481829Z           "complete": true,
2026-06-23T09:38:02.9481933Z           "evidence": [
2026-06-23T09:38:02.9482033Z             {
2026-06-23T09:38:02.9482181Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:02.9482285Z               "line": 1212
2026-06-23T09:38:02.9482386Z             },
2026-06-23T09:38:02.9482491Z             {
2026-06-23T09:38:02.9482638Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:02.9482749Z               "line": 1313
2026-06-23T09:38:02.9482844Z             },
2026-06-23T09:38:02.9482958Z             {
2026-06-23T09:38:02.9483088Z               "path": "crates/spt-daemon/tests/broker.rs",
2026-06-23T09:38:02.9483196Z               "line": 1177
2026-06-23T09:38:02.9483302Z             }
2026-06-23T09:38:02.9483398Z           ]
2026-06-23T09:38:02.9483501Z         },
2026-06-23T09:38:02.9483605Z         "unit": {
2026-06-23T09:38:02.9483715Z           "complete": true,
2026-06-23T09:38:02.9483821Z           "evidence": [
2026-06-23T09:38:02.9483915Z             {
2026-06-23T09:38:02.9484059Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9484168Z               "line": 3067
2026-06-23T09:38:02.9484277Z             }
2026-06-23T09:38:02.9484379Z           ]
2026-06-23T09:38:02.9484474Z         }
2026-06-23T09:38:02.9484578Z       }
2026-06-23T09:38:02.9484675Z     },
2026-06-23T09:38:02.9484778Z     {
2026-06-23T09:38:02.9484916Z       "id": "REQ-HAZARD-DAEMON-HOSTED-LIVENESS",
2026-06-23T09:38:02.9485479Z       "title": "Daemon-hosted perches (Psyche, spt-hosted Self) derive liveness from the daemon endpoint table + info.json status, never is_process_alive(info.pid) (2.5)",
2026-06-23T09:38:02.9485590Z       "requiredStages": [
2026-06-23T09:38:02.9485699Z         "impl",
2026-06-23T09:38:02.9485803Z         "unit",
2026-06-23T09:38:02.9485912Z         "int"
2026-06-23T09:38:02.9486016Z       ],
2026-06-23T09:38:02.9486125Z       "stages": {
2026-06-23T09:38:02.9486345Z         "doc": {
2026-06-23T09:38:02.9486458Z           "complete": false,
2026-06-23T09:38:02.9486568Z           "evidence": []
2026-06-23T09:38:02.9486673Z         },
2026-06-23T09:38:02.9486782Z         "impl": {
2026-06-23T09:38:02.9486893Z           "complete": true,
2026-06-23T09:38:02.9486998Z           "evidence": [
2026-06-23T09:38:02.9487102Z             {
2026-06-23T09:38:02.9487251Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9487360Z               "line": 370
2026-06-23T09:38:02.9487459Z             },
2026-06-23T09:38:02.9487570Z             {
2026-06-23T09:38:02.9487727Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9487832Z               "line": 424
2026-06-23T09:38:02.9487932Z             },
2026-06-23T09:38:02.9488037Z             {
2026-06-23T09:38:02.9488191Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:02.9488298Z               "line": 79
2026-06-23T09:38:02.9488404Z             },
2026-06-23T09:38:02.9488510Z             {
2026-06-23T09:38:02.9488637Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:02.9488746Z               "line": 52
2026-06-23T09:38:02.9488846Z             },
2026-06-23T09:38:02.9489034Z             {
2026-06-23T09:38:02.9489188Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9489292Z               "line": 263
2026-06-23T09:38:02.9489402Z             },
2026-06-23T09:38:02.9489503Z             {
2026-06-23T09:38:02.9489654Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9489755Z               "line": 27
2026-06-23T09:38:02.9489865Z             },
2026-06-23T09:38:02.9489964Z             {
2026-06-23T09:38:02.9490104Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9490208Z               "line": 94
2026-06-23T09:38:02.9490312Z             },
2026-06-23T09:38:02.9490414Z             {
2026-06-23T09:38:02.9490551Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9490660Z               "line": 117
2026-06-23T09:38:02.9490762Z             },
2026-06-23T09:38:02.9490861Z             {
2026-06-23T09:38:02.9491000Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9491105Z               "line": 116
2026-06-23T09:38:02.9491213Z             }
2026-06-23T09:38:02.9491313Z           ]
2026-06-23T09:38:02.9491417Z         },
2026-06-23T09:38:02.9491530Z         "int": {
2026-06-23T09:38:02.9491634Z           "complete": true,
2026-06-23T09:38:02.9491745Z           "evidence": [
2026-06-23T09:38:02.9491850Z             {
2026-06-23T09:38:02.9492012Z               "path": "crates/spt-daemon/tests/daemon_e2e.rs",
2026-06-23T09:38:02.9492116Z               "line": 43
2026-06-23T09:38:02.9492221Z             }
2026-06-23T09:38:02.9492332Z           ]
2026-06-23T09:38:02.9492431Z         },
2026-06-23T09:38:02.9492540Z         "unit": {
2026-06-23T09:38:02.9492656Z           "complete": true,
2026-06-23T09:38:02.9492770Z           "evidence": [
2026-06-23T09:38:02.9492874Z             {
2026-06-23T09:38:02.9493028Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9493142Z               "line": 889
2026-06-23T09:38:02.9493237Z             },
2026-06-23T09:38:02.9493343Z             {
2026-06-23T09:38:02.9493466Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9493576Z               "line": 495
2026-06-23T09:38:02.9493681Z             },
2026-06-23T09:38:02.9493785Z             {
2026-06-23T09:38:02.9494024Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9494137Z               "line": 142
2026-06-23T09:38:02.9494237Z             },
2026-06-23T09:38:02.9494328Z             {
2026-06-23T09:38:02.9494461Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9494562Z               "line": 161
2026-06-23T09:38:02.9494671Z             },
2026-06-23T09:38:02.9494775Z             {
2026-06-23T09:38:02.9495005Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9495119Z               "line": 178
2026-06-23T09:38:02.9495220Z             },
2026-06-23T09:38:02.9495329Z             {
2026-06-23T09:38:02.9495467Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9495569Z               "line": 205
2026-06-23T09:38:02.9495667Z             },
2026-06-23T09:38:02.9495763Z             {
2026-06-23T09:38:02.9495907Z               "path": "crates/spt-store/src/liveness.rs",
2026-06-23T09:38:02.9496020Z               "line": 285
2026-06-23T09:38:02.9496125Z             },
2026-06-23T09:38:02.9496241Z             {
2026-06-23T09:38:02.9496415Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9496549Z               "line": 229
2026-06-23T09:38:02.9496651Z             }
2026-06-23T09:38:02.9496760Z           ]
2026-06-23T09:38:02.9496857Z         }
2026-06-23T09:38:02.9496961Z       }
2026-06-23T09:38:02.9497061Z     },
2026-06-23T09:38:02.9497167Z     {
2026-06-23T09:38:02.9497318Z       "id": "REQ-HAZARD-DAEMON-SCHED-NONBLOCKING",
2026-06-23T09:38:02.9497991Z       "title": "Per-agent pulse/psyche/echo-commune scheduling must not serialize across agents: each agent's bounded LLM call (echo-commune summarizer, Psyche turn) runs off the shared scheduler so one slow/hung call cannot stall another agent's tick (7.4)",
2026-06-23T09:38:02.9498116Z       "requiredStages": [
2026-06-23T09:38:02.9498220Z         "impl",
2026-06-23T09:38:02.9498330Z         "unit"
2026-06-23T09:38:02.9498436Z       ],
2026-06-23T09:38:02.9498539Z       "stages": {
2026-06-23T09:38:02.9498649Z         "doc": {
2026-06-23T09:38:02.9498761Z           "complete": false,
2026-06-23T09:38:02.9498868Z           "evidence": []
2026-06-23T09:38:02.9499032Z         },
2026-06-23T09:38:02.9499145Z         "impl": {
2026-06-23T09:38:02.9499254Z           "complete": true,
2026-06-23T09:38:02.9499358Z           "evidence": [
2026-06-23T09:38:02.9499462Z             {
2026-06-23T09:38:02.9499608Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9499719Z               "line": 1315
2026-06-23T09:38:02.9499810Z             },
2026-06-23T09:38:02.9499909Z             {
2026-06-23T09:38:02.9500058Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9500167Z               "line": 1577
2026-06-23T09:38:02.9500276Z             }
2026-06-23T09:38:02.9500377Z           ]
2026-06-23T09:38:02.9500482Z         },
2026-06-23T09:38:02.9500576Z         "int": {
2026-06-23T09:38:02.9500688Z           "complete": false,
2026-06-23T09:38:02.9500792Z           "evidence": []
2026-06-23T09:38:02.9500896Z         },
2026-06-23T09:38:02.9500998Z         "unit": {
2026-06-23T09:38:02.9501120Z           "complete": true,
2026-06-23T09:38:02.9501225Z           "evidence": [
2026-06-23T09:38:02.9501336Z             {
2026-06-23T09:38:02.9501488Z               "path": "crates/spt-daemon/tests/shellchan.rs",
2026-06-23T09:38:02.9501594Z               "line": 161
2026-06-23T09:38:02.9501703Z             }
2026-06-23T09:38:02.9501802Z           ]
2026-06-23T09:38:02.9501911Z         }
2026-06-23T09:38:02.9502011Z       }
2026-06-23T09:38:02.9502119Z     },
2026-06-23T09:38:02.9502223Z     {
2026-06-23T09:38:02.9502363Z       "id": "REQ-HAZARD-DAEMON-STOP-BARRIER",
2026-06-23T09:38:02.9504227Z       "title": "B3: `spt daemon stop` then an immediate `spt daemon start` does NOT race — stop fully completes before it returns. Today request_stop (seedmap.rs:240-255) returns on the KIND_STOPPING ack (sent seedmap.rs:174-176) BEFORE the seed socket unbinds, so a following is_running ping (daemon.rs:375) wins the exit window and start reports ALREADY_RUNNING (operator: daemon stop → STOPPED then start → ALREADY_RUNNING). FIX: unbind/stop-gate the seed socket BEFORE acking KIND_STOPPING, OR request_stop waits for a ping-to-fail before returning. Unit: stop then immediate is_running()==false. (v0.12.0)",
2026-06-23T09:38:02.9504365Z       "requiredStages": [
2026-06-23T09:38:02.9504556Z         "impl",
2026-06-23T09:38:02.9504659Z         "unit"
2026-06-23T09:38:02.9504764Z       ],
2026-06-23T09:38:02.9504870Z       "stages": {
2026-06-23T09:38:02.9504974Z         "doc": {
2026-06-23T09:38:02.9505092Z           "complete": false,
2026-06-23T09:38:02.9505189Z           "evidence": []
2026-06-23T09:38:02.9505294Z         },
2026-06-23T09:38:02.9505403Z         "impl": {
2026-06-23T09:38:02.9505509Z           "complete": true,
2026-06-23T09:38:02.9505623Z           "evidence": [
2026-06-23T09:38:02.9505722Z             {
2026-06-23T09:38:02.9505880Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:02.9505998Z               "line": 257
2026-06-23T09:38:02.9506104Z             }
2026-06-23T09:38:02.9506209Z           ]
2026-06-23T09:38:02.9506308Z         },
2026-06-23T09:38:02.9506419Z         "int": {
2026-06-23T09:38:02.9506533Z           "complete": false,
2026-06-23T09:38:02.9506642Z           "evidence": []
2026-06-23T09:38:02.9506739Z         },
2026-06-23T09:38:02.9506843Z         "unit": {
2026-06-23T09:38:02.9506957Z           "complete": true,
2026-06-23T09:38:02.9507052Z           "evidence": [
2026-06-23T09:38:02.9507160Z             {
2026-06-23T09:38:02.9507302Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:02.9507412Z               "line": 360
2026-06-23T09:38:02.9507522Z             }
2026-06-23T09:38:02.9507621Z           ]
2026-06-23T09:38:02.9507727Z         }
2026-06-23T09:38:02.9507827Z       }
2026-06-23T09:38:02.9507926Z     },
2026-06-23T09:38:02.9508023Z     {
2026-06-23T09:38:02.9508166Z       "id": "REQ-HAZARD-DAEMON-STOP-REAP",
2026-06-23T09:38:02.9510065Z       "title": "Breap: `spt daemon stop` REAPS the spt-hosted children it spawned — no orphaned psyche/harness processes. Today a stop leaves ~8 orphaned claude-spt-psyche.exe + spt.exe: Psyches are spawned DETACHED (runtime.rs:342-356, the Child is dropped — 'Detached' ~349) and the livehost stop flag Arc<AtomicBool> is NEVER raised (brainproc.rs:227-230 holds it 'for symmetry'). FIX: on stop, raise the livehost stop flag AND kill the spawned psyche/spt-hosted children — via a Windows job object / Unix process-group so the children die with the daemon (not detached-immortal). Folds with B3 (both the stop path). (v0.12.0)",
2026-06-23T09:38:02.9510192Z       "requiredStages": [
2026-06-23T09:38:02.9510299Z         "impl",
2026-06-23T09:38:02.9510403Z         "unit"
2026-06-23T09:38:02.9510502Z       ],
2026-06-23T09:38:02.9510613Z       "stages": {
2026-06-23T09:38:02.9510718Z         "doc": {
2026-06-23T09:38:02.9510831Z           "complete": false,
2026-06-23T09:38:02.9510942Z           "evidence": []
2026-06-23T09:38:02.9511047Z         },
2026-06-23T09:38:02.9511156Z         "impl": {
2026-06-23T09:38:02.9511262Z           "complete": true,
2026-06-23T09:38:02.9511362Z           "evidence": [
2026-06-23T09:38:02.9511466Z             {
2026-06-23T09:38:02.9511619Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9511733Z               "line": 1018
2026-06-23T09:38:02.9511839Z             },
2026-06-23T09:38:02.9511953Z             {
2026-06-23T09:38:02.9512086Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9512197Z               "line": 283
2026-06-23T09:38:02.9512300Z             },
2026-06-23T09:38:02.9512399Z             {
2026-06-23T09:38:02.9512533Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9512650Z               "line": 316
2026-06-23T09:38:02.9512754Z             },
2026-06-23T09:38:02.9512855Z             {
2026-06-23T09:38:02.9513122Z               "path": "crates/spt-daemon/src/reap.rs",
2026-06-23T09:38:02.9513228Z               "line": 26
2026-06-23T09:38:02.9513332Z             }
2026-06-23T09:38:02.9513432Z           ]
2026-06-23T09:38:02.9513542Z         },
2026-06-23T09:38:02.9513646Z         "int": {
2026-06-23T09:38:02.9513752Z           "complete": false,
2026-06-23T09:38:02.9513862Z           "evidence": []
2026-06-23T09:38:02.9513952Z         },
2026-06-23T09:38:02.9514157Z         "unit": {
2026-06-23T09:38:02.9514295Z           "complete": true,
2026-06-23T09:38:02.9514411Z           "evidence": [
2026-06-23T09:38:02.9514519Z             {
2026-06-23T09:38:02.9514657Z               "path": "crates/spt-daemon/src/reap.rs",
2026-06-23T09:38:02.9514768Z               "line": 271
2026-06-23T09:38:02.9514872Z             },
2026-06-23T09:38:02.9514972Z             {
2026-06-23T09:38:02.9515102Z               "path": "crates/spt-daemon/src/reap.rs",
2026-06-23T09:38:02.9515210Z               "line": 348
2026-06-23T09:38:02.9515314Z             }
2026-06-23T09:38:02.9515410Z           ]
2026-06-23T09:38:02.9515520Z         }
2026-06-23T09:38:02.9515614Z       }
2026-06-23T09:38:02.9515715Z     },
2026-06-23T09:38:02.9515816Z     {
2026-06-23T09:38:02.9515943Z       "id": "REQ-HAZARD-DEFERRED-DRAIN",
2026-06-23T09:38:02.9516159Z       "title": "Deferred spool rows excluded from the event-stream drain (1.4)",
2026-06-23T09:38:02.9516268Z       "requiredStages": [
2026-06-23T09:38:02.9516374Z         "impl",
2026-06-23T09:38:02.9516478Z         "unit"
2026-06-23T09:38:02.9516583Z       ],
2026-06-23T09:38:02.9516689Z       "stages": {
2026-06-23T09:38:02.9516792Z         "doc": {
2026-06-23T09:38:02.9516912Z           "complete": false,
2026-06-23T09:38:02.9517013Z           "evidence": []
2026-06-23T09:38:02.9517117Z         },
2026-06-23T09:38:02.9517222Z         "impl": {
2026-06-23T09:38:02.9517342Z           "complete": true,
2026-06-23T09:38:02.9517450Z           "evidence": [
2026-06-23T09:38:02.9517550Z             {
2026-06-23T09:38:02.9517697Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9517805Z               "line": 40
2026-06-23T09:38:02.9517915Z             },
2026-06-23T09:38:02.9518015Z             {
2026-06-23T09:38:02.9518157Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9518263Z               "line": 103
2026-06-23T09:38:02.9518368Z             },
2026-06-23T09:38:02.9518462Z             {
2026-06-23T09:38:02.9518602Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9518712Z               "line": 218
2026-06-23T09:38:02.9518815Z             },
2026-06-23T09:38:02.9518922Z             {
2026-06-23T09:38:02.9519173Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9519284Z               "line": 323
2026-06-23T09:38:02.9519388Z             }
2026-06-23T09:38:02.9519493Z           ]
2026-06-23T09:38:02.9519604Z         },
2026-06-23T09:38:02.9519703Z         "int": {
2026-06-23T09:38:02.9519823Z           "complete": false,
2026-06-23T09:38:02.9519937Z           "evidence": []
2026-06-23T09:38:02.9520037Z         },
2026-06-23T09:38:02.9520143Z         "unit": {
2026-06-23T09:38:02.9520257Z           "complete": true,
2026-06-23T09:38:02.9520365Z           "evidence": [
2026-06-23T09:38:02.9520465Z             {
2026-06-23T09:38:02.9520607Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9520710Z               "line": 361
2026-06-23T09:38:02.9520820Z             },
2026-06-23T09:38:02.9520931Z             {
2026-06-23T09:38:02.9521063Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9521179Z               "line": 433
2026-06-23T09:38:02.9521283Z             },
2026-06-23T09:38:02.9521387Z             {
2026-06-23T09:38:02.9521517Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9521626Z               "line": 496
2026-06-23T09:38:02.9521731Z             },
2026-06-23T09:38:02.9521832Z             {
2026-06-23T09:38:02.9522060Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9522161Z               "line": 517
2026-06-23T09:38:02.9522265Z             }
2026-06-23T09:38:02.9522360Z           ]
2026-06-23T09:38:02.9522462Z         }
2026-06-23T09:38:02.9522560Z       }
2026-06-23T09:38:02.9522665Z     },
2026-06-23T09:38:02.9522772Z     {
2026-06-23T09:38:02.9522908Z       "id": "REQ-HAZARD-DEFERRED-MANIFEST",
2026-06-23T09:38:02.9525252Z       "title": "A pointer-mode (delegated / GhReleaseManaged) adapter whose binary/manifest is not yet extracted is reported with a CLEAR diagnostic, never silently dropped. Today such an adapter reads its manifest LIVE from source_dir (registry.rs manifest_dir ~146/149); a deferred / un-extracted install makes load_manifest fail → registered() (~410, filter_map(.ok())) SILENTLY DROPS the row → downstream ADAPTER_UNRESOLVED + a cryptic os-error-2 on `spt adapter use`. FIX: surface a clear diagnostic at the resolver + at `adapter use` (name the adapter + the deferred/missing-manifest cause + the fix), not a silent filter-drop and not a bare os-error-2; consider an eager manifest copy at register time so host_binaries survive before the binary download completes. doyle Finding A. (post-v0.10.0)",
2026-06-23T09:38:02.9525480Z       "requiredStages": [
2026-06-23T09:38:02.9525586Z         "impl",
2026-06-23T09:38:02.9525695Z         "unit"
2026-06-23T09:38:02.9525799Z       ],
2026-06-23T09:38:02.9525908Z       "stages": {
2026-06-23T09:38:02.9526023Z         "doc": {
2026-06-23T09:38:02.9526132Z           "complete": false,
2026-06-23T09:38:02.9526242Z           "evidence": []
2026-06-23T09:38:02.9526347Z         },
2026-06-23T09:38:02.9526461Z         "impl": {
2026-06-23T09:38:02.9526577Z           "complete": true,
2026-06-23T09:38:02.9526686Z           "evidence": [
2026-06-23T09:38:02.9526795Z             {
2026-06-23T09:38:02.9526943Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:02.9527058Z               "line": 402
2026-06-23T09:38:02.9527147Z             },
2026-06-23T09:38:02.9527258Z             {
2026-06-23T09:38:02.9527415Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:02.9527521Z               "line": 446
2026-06-23T09:38:02.9527630Z             }
2026-06-23T09:38:02.9527725Z           ]
2026-06-23T09:38:02.9527825Z         },
2026-06-23T09:38:02.9527930Z         "int": {
2026-06-23T09:38:02.9528048Z           "complete": false,
2026-06-23T09:38:02.9528162Z           "evidence": []
2026-06-23T09:38:02.9528262Z         },
2026-06-23T09:38:02.9528356Z         "unit": {
2026-06-23T09:38:02.9528465Z           "complete": true,
2026-06-23T09:38:02.9528566Z           "evidence": [
2026-06-23T09:38:02.9528671Z             {
2026-06-23T09:38:02.9528814Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:02.9528923Z               "line": 910
2026-06-23T09:38:02.9529094Z             }
2026-06-23T09:38:02.9529196Z           ]
2026-06-23T09:38:02.9529295Z         }
2026-06-23T09:38:02.9529400Z       }
2026-06-23T09:38:02.9529491Z     },
2026-06-23T09:38:02.9529601Z     {
2026-06-23T09:38:02.9529738Z       "id": "REQ-HAZARD-DEFERRED-SURVIVE-DRAIN",
2026-06-23T09:38:02.9529886Z       "title": "Deferred rows survive poll drain (4.4)",
2026-06-23T09:38:02.9530000Z       "requiredStages": [
2026-06-23T09:38:02.9530106Z         "impl",
2026-06-23T09:38:02.9530211Z         "unit"
2026-06-23T09:38:02.9530315Z       ],
2026-06-23T09:38:02.9530421Z       "stages": {
2026-06-23T09:38:02.9530530Z         "doc": {
2026-06-23T09:38:02.9530644Z           "complete": false,
2026-06-23T09:38:02.9530750Z           "evidence": []
2026-06-23T09:38:02.9530854Z         },
2026-06-23T09:38:02.9530958Z         "impl": {
2026-06-23T09:38:02.9531067Z           "complete": true,
2026-06-23T09:38:02.9531176Z           "evidence": [
2026-06-23T09:38:02.9531260Z             {
2026-06-23T09:38:02.9531399Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9531505Z               "line": 116
2026-06-23T09:38:02.9531604Z             },
2026-06-23T09:38:02.9531820Z             {
2026-06-23T09:38:02.9531961Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9532077Z               "line": 211
2026-06-23T09:38:02.9532186Z             }
2026-06-23T09:38:02.9532286Z           ]
2026-06-23T09:38:02.9532397Z         },
2026-06-23T09:38:02.9532506Z         "int": {
2026-06-23T09:38:02.9532615Z           "complete": false,
2026-06-23T09:38:02.9532815Z           "evidence": []
2026-06-23T09:38:02.9532925Z         },
2026-06-23T09:38:02.9533036Z         "unit": {
2026-06-23T09:38:02.9533139Z           "complete": true,
2026-06-23T09:38:02.9533250Z           "evidence": [
2026-06-23T09:38:02.9533351Z             {
2026-06-23T09:38:02.9533492Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9533592Z               "line": 388
2026-06-23T09:38:02.9533701Z             },
2026-06-23T09:38:02.9533809Z             {
2026-06-23T09:38:02.9533947Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9534057Z               "line": 469
2026-06-23T09:38:02.9534156Z             }
2026-06-23T09:38:02.9534267Z           ]
2026-06-23T09:38:02.9534367Z         }
2026-06-23T09:38:02.9534461Z       }
2026-06-23T09:38:02.9534567Z     },
2026-06-23T09:38:02.9534662Z     {
2026-06-23T09:38:02.9534805Z       "id": "REQ-HAZARD-DETACHED-PIPE-INHERIT",
2026-06-23T09:38:02.9535922Z       "title": "Windows detached long-lived children must not inherit a captured caller's pipe: every detach-spawn of an immortal child (daemon, shell binary) runs bInheritHandles=FALSE, or a caller capturing output anywhere up the process chain hangs forever on a pipe that never EOFs — std-handle flag stripping is NOT sufficient (grandparent strays still flow) (5.6)",
2026-06-23T09:38:02.9536045Z       "requiredStages": [
2026-06-23T09:38:02.9536160Z         "impl",
2026-06-23T09:38:02.9536260Z         "unit"
2026-06-23T09:38:02.9536368Z       ],
2026-06-23T09:38:02.9536473Z       "stages": {
2026-06-23T09:38:02.9536579Z         "doc": {
2026-06-23T09:38:02.9536673Z           "complete": true,
2026-06-23T09:38:02.9536783Z           "evidence": [
2026-06-23T09:38:02.9536893Z             {
2026-06-23T09:38:02.9537026Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9537132Z               "line": 206
2026-06-23T09:38:02.9537232Z             }
2026-06-23T09:38:02.9537336Z           ]
2026-06-23T09:38:02.9537441Z         },
2026-06-23T09:38:02.9537556Z         "impl": {
2026-06-23T09:38:02.9537660Z           "complete": true,
2026-06-23T09:38:02.9537776Z           "evidence": [
2026-06-23T09:38:02.9537880Z             {
2026-06-23T09:38:02.9538027Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9538143Z               "line": 691
2026-06-23T09:38:02.9538237Z             },
2026-06-23T09:38:02.9538332Z             {
2026-06-23T09:38:02.9538486Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9538589Z               "line": 791
2026-06-23T09:38:02.9538694Z             },
2026-06-23T09:38:02.9538799Z             {
2026-06-23T09:38:02.9539016Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9539127Z               "line": 1120
2026-06-23T09:38:02.9539231Z             },
2026-06-23T09:38:02.9539340Z             {
2026-06-23T09:38:02.9539483Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:02.9539592Z               "line": 184
2026-06-23T09:38:02.9539689Z             }
2026-06-23T09:38:02.9539784Z           ]
2026-06-23T09:38:02.9539884Z         },
2026-06-23T09:38:02.9539989Z         "int": {
2026-06-23T09:38:02.9540099Z           "complete": false,
2026-06-23T09:38:02.9540208Z           "evidence": []
2026-06-23T09:38:02.9540313Z         },
2026-06-23T09:38:02.9540418Z         "unit": {
2026-06-23T09:38:02.9540523Z           "complete": true,
2026-06-23T09:38:02.9540633Z           "evidence": [
2026-06-23T09:38:02.9540728Z             {
2026-06-23T09:38:02.9540866Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9541081Z               "line": 1169
2026-06-23T09:38:02.9541176Z             },
2026-06-23T09:38:02.9541282Z             {
2026-06-23T09:38:02.9541433Z               "path": "crates/spt/tests/notify_shell_e2e.rs",
2026-06-23T09:38:02.9541537Z               "line": 44
2026-06-23T09:38:02.9541642Z             },
2026-06-23T09:38:02.9541750Z             {
2026-06-23T09:38:02.9541897Z               "path": "crates/spt/tests/shell_actgate_e2e.rs",
2026-06-23T09:38:02.9542121Z               "line": 52
2026-06-23T09:38:02.9542226Z             },
2026-06-23T09:38:02.9542332Z             {
2026-06-23T09:38:02.9542459Z               "path": "crates/spt/tests/shell_e2e.rs",
2026-06-23T09:38:02.9542570Z               "line": 57
2026-06-23T09:38:02.9542670Z             },
2026-06-23T09:38:02.9542770Z             {
2026-06-23T09:38:02.9542933Z               "path": "crates/spt/tests/shell_sleepwake_e2e.rs",
2026-06-23T09:38:02.9543042Z               "line": 54
2026-06-23T09:38:02.9543152Z             }
2026-06-23T09:38:02.9543257Z           ]
2026-06-23T09:38:02.9543365Z         }
2026-06-23T09:38:02.9543471Z       }
2026-06-23T09:38:02.9543567Z     },
2026-06-23T09:38:02.9543671Z     {
2026-06-23T09:38:02.9543815Z       "id": "REQ-HAZARD-DIRECT-WRITE-PRECEDENCE",
2026-06-23T09:38:02.9544056Z       "title": "Direct-write precedence marker (with node id) guards stale overwrite (6.5)",
2026-06-23T09:38:02.9544171Z       "requiredStages": [
2026-06-23T09:38:02.9544280Z         "impl",
2026-06-23T09:38:02.9544387Z         "unit"
2026-06-23T09:38:02.9544488Z       ],
2026-06-23T09:38:02.9544594Z       "stages": {
2026-06-23T09:38:02.9544697Z         "doc": {
2026-06-23T09:38:02.9547434Z           "complete": false,
2026-06-23T09:38:02.9547576Z           "evidence": []
2026-06-23T09:38:02.9547677Z         },
2026-06-23T09:38:02.9547787Z         "impl": {
2026-06-23T09:38:02.9547896Z           "complete": true,
2026-06-23T09:38:02.9548006Z           "evidence": [
2026-06-23T09:38:02.9548111Z             {
2026-06-23T09:38:02.9548263Z               "path": "crates/spt-live/src/context.rs",
2026-06-23T09:38:02.9548369Z               "line": 26
2026-06-23T09:38:02.9548478Z             },
2026-06-23T09:38:02.9548578Z             {
2026-06-23T09:38:02.9548717Z               "path": "crates/spt-live/src/context.rs",
2026-06-23T09:38:02.9548821Z               "line": 135
2026-06-23T09:38:02.9548921Z             },
2026-06-23T09:38:02.9549107Z             {
2026-06-23T09:38:02.9549263Z               "path": "crates/spt-store/src/contextmark.rs",
2026-06-23T09:38:02.9549373Z               "line": 26
2026-06-23T09:38:02.9549481Z             },
2026-06-23T09:38:02.9549581Z             {
2026-06-23T09:38:02.9549739Z               "path": "crates/spt-store/src/contextmark.rs",
2026-06-23T09:38:02.9549847Z               "line": 237
2026-06-23T09:38:02.9549948Z             }
2026-06-23T09:38:02.9550053Z           ]
2026-06-23T09:38:02.9550148Z         },
2026-06-23T09:38:02.9550249Z         "int": {
2026-06-23T09:38:02.9550359Z           "complete": false,
2026-06-23T09:38:02.9550463Z           "evidence": []
2026-06-23T09:38:02.9550559Z         },
2026-06-23T09:38:02.9550668Z         "unit": {
2026-06-23T09:38:02.9550773Z           "complete": true,
2026-06-23T09:38:02.9550888Z           "evidence": [
2026-06-23T09:38:02.9550992Z             {
2026-06-23T09:38:02.9551130Z               "path": "crates/spt-live/src/context.rs",
2026-06-23T09:38:02.9551255Z               "line": 161
2026-06-23T09:38:02.9551359Z             },
2026-06-23T09:38:02.9551464Z             {
2026-06-23T09:38:02.9551608Z               "path": "crates/spt-live/src/context.rs",
2026-06-23T09:38:02.9551712Z               "line": 170
2026-06-23T09:38:02.9551813Z             },
2026-06-23T09:38:02.9551909Z             {
2026-06-23T09:38:02.9552049Z               "path": "crates/spt-live/src/context.rs",
2026-06-23T09:38:02.9552159Z               "line": 179
2026-06-23T09:38:02.9552254Z             },
2026-06-23T09:38:02.9552348Z             {
2026-06-23T09:38:02.9552611Z               "path": "crates/spt-live/src/context.rs",
2026-06-23T09:38:02.9552729Z               "line": 190
2026-06-23T09:38:02.9552835Z             },
2026-06-23T09:38:02.9552940Z             {
2026-06-23T09:38:02.9553077Z               "path": "crates/spt-live/src/context.rs",
2026-06-23T09:38:02.9553188Z               "line": 199
2026-06-23T09:38:02.9553288Z             },
2026-06-23T09:38:02.9553387Z             {
2026-06-23T09:38:02.9553626Z               "path": "crates/spt-live/src/context.rs",
2026-06-23T09:38:02.9553731Z               "line": 216
2026-06-23T09:38:02.9553841Z             },
2026-06-23T09:38:02.9553940Z             {
2026-06-23T09:38:02.9554075Z               "path": "crates/spt-live/src/context.rs",
2026-06-23T09:38:02.9554189Z               "line": 242
2026-06-23T09:38:02.9554289Z             },
2026-06-23T09:38:02.9554395Z             {
2026-06-23T09:38:02.9554532Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:02.9554640Z               "line": 295
2026-06-23T09:38:02.9554731Z             },
2026-06-23T09:38:02.9554835Z             {
2026-06-23T09:38:02.9554976Z               "path": "crates/spt-live/src/signoff.rs",
2026-06-23T09:38:02.9555086Z               "line": 244
2026-06-23T09:38:02.9555187Z             },
2026-06-23T09:38:02.9555286Z             {
2026-06-23T09:38:02.9555449Z               "path": "crates/spt-store/src/contextmark.rs",
2026-06-23T09:38:02.9555553Z               "line": 265
2026-06-23T09:38:02.9555658Z             },
2026-06-23T09:38:02.9555764Z             {
2026-06-23T09:38:02.9555906Z               "path": "crates/spt-store/src/contextmark.rs",
2026-06-23T09:38:02.9556021Z               "line": 293
2026-06-23T09:38:02.9556125Z             },
2026-06-23T09:38:02.9556230Z             {
2026-06-23T09:38:02.9556384Z               "path": "crates/spt-store/src/contextmark.rs",
2026-06-23T09:38:02.9556498Z               "line": 317
2026-06-23T09:38:02.9556602Z             },
2026-06-23T09:38:02.9556699Z             {
2026-06-23T09:38:02.9556850Z               "path": "crates/spt-store/src/contextmark.rs",
2026-06-23T09:38:02.9556952Z               "line": 327
2026-06-23T09:38:02.9557061Z             },
2026-06-23T09:38:02.9557161Z             {
2026-06-23T09:38:02.9557309Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:02.9557422Z               "line": 540
2026-06-23T09:38:02.9557526Z             }
2026-06-23T09:38:02.9557636Z           ]
2026-06-23T09:38:02.9557737Z         }
2026-06-23T09:38:02.9557841Z       }
2026-06-23T09:38:02.9557941Z     },
2026-06-23T09:38:02.9558042Z     {
2026-06-23T09:38:02.9558198Z       "id": "REQ-HAZARD-DRIVEN-BY-IDLE-REMOTE-EVICT",
2026-06-23T09:38:02.9563242Z       "title": "An spt-hosted endpoint driven by a REMOTE controller whose remote is gone but whose broker connection stays OPEN (a wedged/lost pump that never delivers the detach) AND whose session is IDLE (no output) stays latched ONLINE+CONTROLLED forever: the W1 drain-evict only fires on OUTPUT (CONTROLLER_WRITE_DEADLINE on a backed-up write), a clean disconnect self-heals via detach_if→clear_controller, but an idle session with a half-open/wedged controller connection produces neither signal. PROVED repro-first on a real broker (v0.13.0 W5, inject_control_wedge.rs w5_a2): controller_by STAYS Some(origin) and driven_by STAYS Some after the remote is abandoned without a clean EOF on an idle session — so the brain reconcile CANNOT detect it from KIND_SESSIONS controller_by (the broker still reports it controlled). FIX DIRECTION (doyle ruling 2026-06-19, broker-side single-writer — the broker owns driven_by/clear_controller): wire the EXISTING D4c NetPresence connection-disconnect event → clear_controller for any session whose controller identity == the dead origin (become_controller already stores Some(origin); presence events already exist — modest wiring, NOT a new probe). The liveness ORACLE is QUIC's own keepalive/idle-timeout: a presence-disconnect IS a real QUIC conn close, already tolerant of transient blips within the keepalive window, so NO heavy partition ADR is needed UNLESS the QUIC timeout proves too slow for the UX (then mint an ADR for a faster controller-heartbeat + its false-evict bound). Composes with W1 (output path) + W5 Gap B (no-session) — this is the third, idle-remote, leg. (v0.13.0 follow-up)",
2026-06-23T09:38:02.9563386Z       "requiredStages": [],
2026-06-23T09:38:02.9563495Z       "stages": {
2026-06-23T09:38:02.9563696Z         "doc": {
2026-06-23T09:38:02.9563805Z           "complete": false,
2026-06-23T09:38:02.9563914Z           "evidence": []
2026-06-23T09:38:02.9564015Z         },
2026-06-23T09:38:02.9564129Z         "impl": {
2026-06-23T09:38:02.9564233Z           "complete": false,
2026-06-23T09:38:02.9564345Z           "evidence": []
2026-06-23T09:38:02.9564448Z         },
2026-06-23T09:38:02.9564544Z         "int": {
2026-06-23T09:38:02.9564659Z           "complete": false,
2026-06-23T09:38:02.9564758Z           "evidence": []
2026-06-23T09:38:02.9564868Z         },
2026-06-23T09:38:02.9564984Z         "unit": {
2026-06-23T09:38:02.9565087Z           "complete": false,
2026-06-23T09:38:02.9565196Z           "evidence": []
2026-06-23T09:38:02.9565286Z         }
2026-06-23T09:38:02.9565381Z       }
2026-06-23T09:38:02.9565475Z     },
2026-06-23T09:38:02.9565565Z     {
2026-06-23T09:38:02.9565699Z       "id": "REQ-HAZARD-DRIVEN-BY-SELFHEAL",
2026-06-23T09:38:02.9567273Z       "title": "An spt-hosted endpoint's ONLINE+CONTROLLED state (`driven_by`) must CLEAR even when the detach IPC is lost — do NOT rely on the detach signal (same lesson as REQ-HAZARD-HOSTED-LIVENESS-RECONCILE B2): the reconcile loop clears `driven_by` when the endpoint has no live controller/session. Today a wedged or lost pump never delivers the detach, so the endpoint stays latched CONTROLLED forever. Composes with W1 (the wedge no longer blocks the detach) and rides the same pull-primary reconcile substrate as B2. (v0.13.0)",
2026-06-23T09:38:02.9567401Z       "requiredStages": [
2026-06-23T09:38:02.9567492Z         "impl",
2026-06-23T09:38:02.9567607Z         "unit",
2026-06-23T09:38:02.9567711Z         "int"
2026-06-23T09:38:02.9567812Z       ],
2026-06-23T09:38:02.9567917Z       "stages": {
2026-06-23T09:38:02.9568020Z         "doc": {
2026-06-23T09:38:02.9568134Z           "complete": false,
2026-06-23T09:38:02.9568235Z           "evidence": []
2026-06-23T09:38:02.9568326Z         },
2026-06-23T09:38:02.9568434Z         "impl": {
2026-06-23T09:38:02.9568541Z           "complete": true,
2026-06-23T09:38:02.9568650Z           "evidence": [
2026-06-23T09:38:02.9568744Z             {
2026-06-23T09:38:02.9568898Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9569074Z               "line": 553
2026-06-23T09:38:02.9569180Z             },
2026-06-23T09:38:02.9569284Z             {
2026-06-23T09:38:02.9569422Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9569532Z               "line": 677
2026-06-23T09:38:02.9569636Z             },
2026-06-23T09:38:02.9569742Z             {
2026-06-23T09:38:02.9569912Z               "path": "crates/spt-daemon/tests/driven_by_selfheal.rs",
2026-06-23T09:38:02.9570023Z               "line": 21
2026-06-23T09:38:02.9570134Z             }
2026-06-23T09:38:02.9570222Z           ]
2026-06-23T09:38:02.9570326Z         },
2026-06-23T09:38:02.9570417Z         "int": {
2026-06-23T09:38:02.9570535Z           "complete": true,
2026-06-23T09:38:02.9570644Z           "evidence": [
2026-06-23T09:38:02.9570754Z             {
2026-06-23T09:38:02.9570925Z               "path": "crates/spt-daemon/tests/driven_by_selfheal.rs",
2026-06-23T09:38:02.9571030Z               "line": 238
2026-06-23T09:38:02.9571140Z             },
2026-06-23T09:38:02.9571230Z             {
2026-06-23T09:38:02.9571398Z               "path": "crates/spt-daemon/tests/driven_by_selfheal.rs",
2026-06-23T09:38:02.9571508Z               "line": 398
2026-06-23T09:38:02.9571607Z             },
2026-06-23T09:38:02.9571708Z             {
2026-06-23T09:38:02.9571984Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:02.9572103Z               "line": 1621
2026-06-23T09:38:02.9572208Z             },
2026-06-23T09:38:02.9572314Z             {
2026-06-23T09:38:02.9572489Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:02.9572599Z               "line": 1799
2026-06-23T09:38:02.9572710Z             }
2026-06-23T09:38:02.9572803Z           ]
2026-06-23T09:38:02.9573001Z         },
2026-06-23T09:38:02.9573108Z         "unit": {
2026-06-23T09:38:02.9573222Z           "complete": true,
2026-06-23T09:38:02.9573337Z           "evidence": [
2026-06-23T09:38:02.9573430Z             {
2026-06-23T09:38:02.9573583Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9573693Z               "line": 938
2026-06-23T09:38:02.9573797Z             }
2026-06-23T09:38:02.9573897Z           ]
2026-06-23T09:38:02.9574003Z         }
2026-06-23T09:38:02.9574111Z       }
2026-06-23T09:38:02.9574197Z     },
2026-06-23T09:38:02.9574303Z     {
2026-06-23T09:38:02.9574436Z       "id": "REQ-HAZARD-DROP-FILE-SINGLE-WRITER",
2026-06-23T09:38:02.9574613Z       "title": "Drop files are daemon-owned single-writer (6.4)",
2026-06-23T09:38:02.9574722Z       "requiredStages": [
2026-06-23T09:38:02.9574827Z         "impl",
2026-06-23T09:38:02.9574937Z         "unit"
2026-06-23T09:38:02.9575037Z       ],
2026-06-23T09:38:02.9575141Z       "stages": {
2026-06-23T09:38:02.9575248Z         "doc": {
2026-06-23T09:38:02.9575361Z           "complete": false,
2026-06-23T09:38:02.9575466Z           "evidence": []
2026-06-23T09:38:02.9575572Z         },
2026-06-23T09:38:02.9575680Z         "impl": {
2026-06-23T09:38:02.9575789Z           "complete": true,
2026-06-23T09:38:02.9575894Z           "evidence": [
2026-06-23T09:38:02.9575988Z             {
2026-06-23T09:38:02.9576130Z               "path": "crates/spt-live/src/echo.rs",
2026-06-23T09:38:02.9576241Z               "line": 25
2026-06-23T09:38:02.9576350Z             },
2026-06-23T09:38:02.9576454Z             {
2026-06-23T09:38:02.9576593Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:02.9576702Z               "line": 26
2026-06-23T09:38:02.9576798Z             },
2026-06-23T09:38:02.9576908Z             {
2026-06-23T09:38:02.9577040Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:02.9577151Z               "line": 159
2026-06-23T09:38:02.9577256Z             }
2026-06-23T09:38:02.9577351Z           ]
2026-06-23T09:38:02.9577457Z         },
2026-06-23T09:38:02.9577561Z         "int": {
2026-06-23T09:38:02.9577670Z           "complete": false,
2026-06-23T09:38:02.9577772Z           "evidence": []
2026-06-23T09:38:02.9577880Z         },
2026-06-23T09:38:02.9577985Z         "unit": {
2026-06-23T09:38:02.9578091Z           "complete": true,
2026-06-23T09:38:02.9578204Z           "evidence": [
2026-06-23T09:38:02.9578300Z             {
2026-06-23T09:38:02.9578434Z               "path": "crates/spt-live/src/echo.rs",
2026-06-23T09:38:02.9578538Z               "line": 188
2026-06-23T09:38:02.9578646Z             },
2026-06-23T09:38:02.9578756Z             {
2026-06-23T09:38:02.9578881Z               "path": "crates/spt-live/src/echo.rs",
2026-06-23T09:38:02.9579062Z               "line": 240
2026-06-23T09:38:02.9579157Z             },
2026-06-23T09:38:02.9579261Z             {
2026-06-23T09:38:02.9579396Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:02.9579506Z               "line": 186
2026-06-23T09:38:02.9579614Z             }
2026-06-23T09:38:02.9579706Z           ]
2026-06-23T09:38:02.9579805Z         }
2026-06-23T09:38:02.9579910Z       }
2026-06-23T09:38:02.9580016Z     },
2026-06-23T09:38:02.9580120Z     {
2026-06-23T09:38:02.9580244Z       "id": "REQ-HAZARD-EBUSY-RENAME",
2026-06-23T09:38:02.9580440Z       "title": "tmp-write + atomic-rename + retry on Windows EBUSY (5.2)",
2026-06-23T09:38:02.9580544Z       "requiredStages": [
2026-06-23T09:38:02.9580651Z         "impl",
2026-06-23T09:38:02.9580755Z         "unit"
2026-06-23T09:38:02.9580959Z       ],
2026-06-23T09:38:02.9581063Z       "stages": {
2026-06-23T09:38:02.9581166Z         "doc": {
2026-06-23T09:38:02.9581281Z           "complete": false,
2026-06-23T09:38:02.9581391Z           "evidence": []
2026-06-23T09:38:02.9581494Z         },
2026-06-23T09:38:02.9581605Z         "impl": {
2026-06-23T09:38:02.9581714Z           "complete": true,
2026-06-23T09:38:02.9581819Z           "evidence": [
2026-06-23T09:38:02.9582034Z             {
2026-06-23T09:38:02.9582181Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:02.9582278Z               "line": 48
2026-06-23T09:38:02.9582387Z             },
2026-06-23T09:38:02.9582486Z             {
2026-06-23T09:38:02.9582621Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:02.9582726Z               "line": 55
2026-06-23T09:38:02.9582825Z             },
2026-06-23T09:38:02.9582927Z             {
2026-06-23T09:38:02.9583054Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:02.9583164Z               "line": 74
2026-06-23T09:38:02.9583270Z             },
2026-06-23T09:38:02.9583368Z             {
2026-06-23T09:38:02.9583494Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:02.9583603Z               "line": 91
2026-06-23T09:38:02.9583711Z             }
2026-06-23T09:38:02.9583811Z           ]
2026-06-23T09:38:02.9583907Z         },
2026-06-23T09:38:02.9584009Z         "int": {
2026-06-23T09:38:02.9584123Z           "complete": false,
2026-06-23T09:38:02.9584229Z           "evidence": []
2026-06-23T09:38:02.9584333Z         },
2026-06-23T09:38:02.9584443Z         "unit": {
2026-06-23T09:38:02.9584544Z           "complete": true,
2026-06-23T09:38:02.9584657Z           "evidence": [
2026-06-23T09:38:02.9584757Z             {
2026-06-23T09:38:02.9584891Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:02.9584996Z               "line": 149
2026-06-23T09:38:02.9585106Z             },
2026-06-23T09:38:02.9585211Z             {
2026-06-23T09:38:02.9585354Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:02.9585465Z               "line": 166
2026-06-23T09:38:02.9585559Z             },
2026-06-23T09:38:02.9585664Z             {
2026-06-23T09:38:02.9585799Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:02.9585911Z               "line": 176
2026-06-23T09:38:02.9586017Z             },
2026-06-23T09:38:02.9586123Z             {
2026-06-23T09:38:02.9586264Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:02.9586368Z               "line": 194
2026-06-23T09:38:02.9586478Z             },
2026-06-23T09:38:02.9586571Z             {
2026-06-23T09:38:02.9586704Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:02.9586815Z               "line": 207
2026-06-23T09:38:02.9586919Z             }
2026-06-23T09:38:02.9587029Z           ]
2026-06-23T09:38:02.9587120Z         }
2026-06-23T09:38:02.9587229Z       }
2026-06-23T09:38:02.9587315Z     },
2026-06-23T09:38:02.9587416Z     {
2026-06-23T09:38:02.9587558Z       "id": "REQ-HAZARD-ECHO-BEFORE-SIGNOFF",
2026-06-23T09:38:02.9587773Z       "title": "Echo-commune fires before INIT_SIGNOFF on orphan teardown (3.3)",
2026-06-23T09:38:02.9587887Z       "requiredStages": [
2026-06-23T09:38:02.9587987Z         "impl",
2026-06-23T09:38:02.9588092Z         "unit"
2026-06-23T09:38:02.9588188Z       ],
2026-06-23T09:38:02.9588293Z       "stages": {
2026-06-23T09:38:02.9588398Z         "doc": {
2026-06-23T09:38:02.9588512Z           "complete": false,
2026-06-23T09:38:02.9588627Z           "evidence": []
2026-06-23T09:38:02.9588718Z         },
2026-06-23T09:38:02.9588821Z         "impl": {
2026-06-23T09:38:02.9588932Z           "complete": true,
2026-06-23T09:38:02.9589126Z           "evidence": [
2026-06-23T09:38:02.9589230Z             {
2026-06-23T09:38:02.9589375Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9589484Z               "line": 677
2026-06-23T09:38:02.9589583Z             },
2026-06-23T09:38:02.9589789Z             {
2026-06-23T09:38:02.9589933Z               "path": "crates/spt-live/src/signoff.rs",
2026-06-23T09:38:02.9590042Z               "line": 26
2026-06-23T09:38:02.9590151Z             }
2026-06-23T09:38:02.9590247Z           ]
2026-06-23T09:38:02.9590352Z         },
2026-06-23T09:38:02.9590451Z         "int": {
2026-06-23T09:38:02.9590562Z           "complete": false,
2026-06-23T09:38:02.9590776Z           "evidence": []
2026-06-23T09:38:02.9590877Z         },
2026-06-23T09:38:02.9590986Z         "unit": {
2026-06-23T09:38:02.9591095Z           "complete": true,
2026-06-23T09:38:02.9591196Z           "evidence": [
2026-06-23T09:38:02.9591301Z             {
2026-06-23T09:38:02.9591442Z               "path": "crates/spt-live/src/signoff.rs",
2026-06-23T09:38:02.9591547Z               "line": 150
2026-06-23T09:38:02.9591651Z             },
2026-06-23T09:38:02.9591759Z             {
2026-06-23T09:38:02.9591893Z               "path": "crates/spt-live/src/signoff.rs",
2026-06-23T09:38:02.9592003Z               "line": 208
2026-06-23T09:38:02.9592102Z             }
2026-06-23T09:38:02.9592203Z           ]
2026-06-23T09:38:02.9592304Z         }
2026-06-23T09:38:02.9592403Z       }
2026-06-23T09:38:02.9592514Z     },
2026-06-23T09:38:02.9592618Z     {
2026-06-23T09:38:02.9592775Z       "id": "REQ-HAZARD-EFFECT-JOURNAL-PTY-WEDGE",
2026-06-23T09:38:02.9601983Z       "title": "The effect journal serializes EVERY PTY effect under one mutex held ACROSS two fsyncs AND the blocking PTY write — so interactive input stutters and ultimately wedges the daemon hard. ROOT (doyle /diagnose, code-grounded + MEASURED on the operator's real Windows box, 2026-06-19): EffectJournal::apply_once (effect.rs:168-188) takes `inner.lock()` and holds it across `write_line(PENDING)` → `effect()` → `write_line(DONE)`, where write_line (effect.rs:235-239) does flush()+sync_all() (a full FlushFileBuffers) — so each effect pays TWO fsyncs under a GLOBAL lock, and the closure `effect()` (the actual PTY write, broker.rs:1257 EffectKind::PtyWrite via attach.rs:197 send_effect) runs while the lock is held. Two operator-visible facets, ONE root: (A) STUTTER/LAG — every keystroke is a PtyWrite effect = 2× sync_all serialized; measured fsync on %LOCALAPPDATA%\\spt-core = median 6.5ms, spikes to 198ms (C: was recently at 100%), so ~13ms+ per keystroke best case, hundreds under contention → 'many but not all keypresses take 100s of ms, choppy, worsens with volume'. (B) HARD PERMANENT WEDGE — when a PtyWrite `effect()` blocks (ConPTY input buffer full / harness not draining stdin), the journal lock is held INDEFINITELY → the single-threaded inbound-stream dispatch (dispatch.rs serve_attach, which both applies input effects AND opens attaches) can never progress → EVERY subsequent attach (`spt rc --view`/`--take`) fails with 'attach request: brain IPC read deadline elapsed' (confirmed: two retries deadline identically; broker control-plane KIND queries still answer — different thread). This REFUTES the W2-deferred ruling that park-(b)/(c) is 'Windows-benign because ConPTY absorbs 4MiB' — on the real box the input path wedges regardless. DISTINCT from W1 (REQ-HAZARD-INJECT-CONTROL-COEXIST = the OUTPUT drain, correctly fixed @8b5583e; output uses broker.rs:1106 append, NOT the fsync journal). This is the INPUT/effect-journal path W1 never touched, and it is THE wedge the operator hits with --take/--view. FIX DIRECTION (candidates, repro-first — extend inject_control_wedge.rs to a REAL backed-up-PTY-consumer + a real rc-client attach assertion, the gap W1's gate missed): (1) do NOT hold the journal lock across effect() — reserve the key + fsync PENDING under lock, RELEASE, run effect(), re-acquire to fsync DONE + mark applied (preserve crash-idempotency via the per-key reservation, not a global hold); (2) bound/fail-fast the PtyWrite itself (the W2-deferred park bound — write_input must never block indefinitely, DSR-answer must not hold the writer mutex across a blocking write); (3) drop per-keystroke fsync on the interactive path — PtyWrite effects are EPHEMERAL (a keystroke lost on a broker crash is retyped; PTY state is not reconstructed from keystroke replay), so in-memory applied-set dedup suffices (the broker survives the brain — that IS the dedup anchor), with async/batched fsync or no-fsync for EffectKind::PtyWrite while durable kinds (NetSend/NetDial/Registry/Spool) keep their fsync. Combine (1)+(3) at minimum. Add a KNOWN-HAZARDS.md entry on landing. (v0.13.0)",
2026-06-23T09:38:02.9602253Z       "requiredStages": [
2026-06-23T09:38:02.9602362Z         "impl",
2026-06-23T09:38:02.9602463Z         "unit",
2026-06-23T09:38:02.9602568Z         "int"
2026-06-23T09:38:02.9602662Z       ],
2026-06-23T09:38:02.9602768Z       "stages": {
2026-06-23T09:38:02.9602878Z         "doc": {
2026-06-23T09:38:02.9602987Z           "complete": false,
2026-06-23T09:38:02.9603098Z           "evidence": []
2026-06-23T09:38:02.9603197Z         },
2026-06-23T09:38:02.9603311Z         "impl": {
2026-06-23T09:38:02.9603417Z           "complete": true,
2026-06-23T09:38:02.9603536Z           "evidence": [
2026-06-23T09:38:02.9603641Z             {
2026-06-23T09:38:02.9603788Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9603898Z               "line": 99
2026-06-23T09:38:02.9604004Z             },
2026-06-23T09:38:02.9604108Z             {
2026-06-23T09:38:02.9604245Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9604357Z               "line": 201
2026-06-23T09:38:02.9604465Z             }
2026-06-23T09:38:02.9604570Z           ]
2026-06-23T09:38:02.9604676Z         },
2026-06-23T09:38:02.9604771Z         "int": {
2026-06-23T09:38:02.9604888Z           "complete": true,
2026-06-23T09:38:02.9604998Z           "evidence": [
2026-06-23T09:38:02.9605097Z             {
2026-06-23T09:38:02.9605273Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:02.9605383Z               "line": 855
2026-06-23T09:38:02.9605486Z             }
2026-06-23T09:38:02.9605582Z           ]
2026-06-23T09:38:02.9605692Z         },
2026-06-23T09:38:02.9605797Z         "unit": {
2026-06-23T09:38:02.9605912Z           "complete": true,
2026-06-23T09:38:02.9606017Z           "evidence": [
2026-06-23T09:38:02.9606121Z             {
2026-06-23T09:38:02.9606270Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9606378Z               "line": 517
2026-06-23T09:38:02.9606488Z             },
2026-06-23T09:38:02.9606599Z             {
2026-06-23T09:38:02.9606736Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9606841Z               "line": 576
2026-06-23T09:38:02.9606933Z             }
2026-06-23T09:38:02.9607041Z           ]
2026-06-23T09:38:02.9607137Z         }
2026-06-23T09:38:02.9607234Z       }
2026-06-23T09:38:02.9607327Z     },
2026-06-23T09:38:02.9607436Z     {
2026-06-23T09:38:02.9607575Z       "id": "REQ-HAZARD-ELEVATED-DAEMON-SPAWN",
2026-06-23T09:38:02.9608921Z       "title": "The daemon always runs unelevated in the invoking user's universe, regardless of which command spawns it: an elevated spawner de-elevates (Windows: UAC linked token via CreateProcessWithTokenW; Linux: drop to SUDO_UID/SUDO_GID + the invoker's HOME) — an elevated daemon's pipes deny unelevated clients (every later spt reads not-running→spawn→bind Access-denied) and a sudo'd daemon roots the user's state universe (5.7)",
2026-06-23T09:38:02.9609108Z       "requiredStages": [
2026-06-23T09:38:02.9609213Z         "doc",
2026-06-23T09:38:02.9609313Z         "impl",
2026-06-23T09:38:02.9609423Z         "unit"
2026-06-23T09:38:02.9609523Z       ],
2026-06-23T09:38:02.9609627Z       "stages": {
2026-06-23T09:38:02.9609733Z         "doc": {
2026-06-23T09:38:02.9609843Z           "complete": true,
2026-06-23T09:38:02.9609947Z           "evidence": [
2026-06-23T09:38:02.9610053Z             {
2026-06-23T09:38:02.9610185Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9610289Z               "line": 214
2026-06-23T09:38:02.9610394Z             }
2026-06-23T09:38:02.9610490Z           ]
2026-06-23T09:38:02.9610694Z         },
2026-06-23T09:38:02.9610810Z         "impl": {
2026-06-23T09:38:02.9610918Z           "complete": true,
2026-06-23T09:38:02.9611038Z           "evidence": [
2026-06-23T09:38:02.9611143Z             {
2026-06-23T09:38:02.9611290Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9611387Z               "line": 56
2026-06-23T09:38:02.9611591Z             },
2026-06-23T09:38:02.9611697Z             {
2026-06-23T09:38:02.9611829Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:02.9611938Z               "line": 580
2026-06-23T09:38:02.9612040Z             },
2026-06-23T09:38:02.9612144Z             {
2026-06-23T09:38:02.9612297Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9612407Z               "line": 36
2026-06-23T09:38:02.9612510Z             },
2026-06-23T09:38:02.9612619Z             {
2026-06-23T09:38:02.9612771Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9612884Z               "line": 59
2026-06-23T09:38:02.9612994Z             },
2026-06-23T09:38:02.9613100Z             {
2026-06-23T09:38:02.9613242Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9613357Z               "line": 83
2026-06-23T09:38:02.9613452Z             },
2026-06-23T09:38:02.9613556Z             {
2026-06-23T09:38:02.9613696Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9613809Z               "line": 140
2026-06-23T09:38:02.9613910Z             },
2026-06-23T09:38:02.9614015Z             {
2026-06-23T09:38:02.9614166Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9614273Z               "line": 159
2026-06-23T09:38:02.9614377Z             },
2026-06-23T09:38:02.9614472Z             {
2026-06-23T09:38:02.9614616Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9614720Z               "line": 384
2026-06-23T09:38:02.9614830Z             },
2026-06-23T09:38:02.9614936Z             {
2026-06-23T09:38:02.9615073Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9615184Z               "line": 535
2026-06-23T09:38:02.9615279Z             },
2026-06-23T09:38:02.9615391Z             {
2026-06-23T09:38:02.9615530Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9615638Z               "line": 581
2026-06-23T09:38:02.9615746Z             },
2026-06-23T09:38:02.9615842Z             {
2026-06-23T09:38:02.9615981Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9616080Z               "line": 300
2026-06-23T09:38:02.9616186Z             },
2026-06-23T09:38:02.9616291Z             {
2026-06-23T09:38:02.9616423Z               "path": "crates/spt/src/main.rs",
2026-06-23T09:38:02.9616539Z               "line": 42
2026-06-23T09:38:02.9616630Z             }
2026-06-23T09:38:02.9616728Z           ]
2026-06-23T09:38:02.9616820Z         },
2026-06-23T09:38:02.9616925Z         "int": {
2026-06-23T09:38:02.9617043Z           "complete": false,
2026-06-23T09:38:02.9617154Z           "evidence": []
2026-06-23T09:38:02.9617263Z         },
2026-06-23T09:38:02.9617358Z         "unit": {
2026-06-23T09:38:02.9617479Z           "complete": true,
2026-06-23T09:38:02.9617587Z           "evidence": [
2026-06-23T09:38:02.9617692Z             {
2026-06-23T09:38:02.9617846Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9617958Z               "line": 813
2026-06-23T09:38:02.9618063Z             },
2026-06-23T09:38:02.9618163Z             {
2026-06-23T09:38:02.9618308Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9618409Z               "line": 854
2026-06-23T09:38:02.9618520Z             },
2026-06-23T09:38:02.9618618Z             {
2026-06-23T09:38:02.9618753Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:02.9618863Z               "line": 928
2026-06-23T09:38:02.9619034Z             }
2026-06-23T09:38:02.9619262Z           ]
2026-06-23T09:38:02.9619363Z         }
2026-06-23T09:38:02.9619467Z       }
2026-06-23T09:38:02.9619572Z     },
2026-06-23T09:38:02.9619668Z     {
2026-06-23T09:38:02.9619820Z       "id": "REQ-HAZARD-ENDPOINT-RUN-ATTACH-OUTPUT",
2026-06-23T09:38:02.9624741Z       "title": "A clean `spt rc` attach to a LIVE spt-hosted (`endpoint run`) harness must DELIVER the harness's PTY output. KEYSTONE — the operator's central 'attach shows no output' symptom, reproduced on the real dummy-harness fixture (v0.12.1 Wave 1) with NO death and NO wedge: bringup succeeds (online, harness pid alive + heartbeating, psyche hosted), the attach CONNECTS (PUMP_IPC_READER spawned, no RC_FAIL, holds the full window) — but receives EXACTLY 0 bytes over 10s of the harness's flushed [session.self] stdout. DISTINCT from REQ-HAZARD-VIEWER-CLOSE-DETACH (death) and REQ-HAZARD-ATTACH-WEDGE (dead-child backpressure): here the harness is ALIVE and the attach is a clean first subscribe. This BLOCKS the 'view is independent' invariant — re-attach is meaningless if a live endpoint-run harness shows nothing. KNOWN-GOOD (rules out 'no drain'): attach.rs `local_attach_via_loopback_conn_rides_the_same_pump` + `broker_spawns_the_pty_child_in_the_requested_cwd` prove the broker DOES drain+fan a `spawn_session` PTY child to a loopback attach over the SAME transport rc uses. Both spawn_session and endpoint-run's spawn_session_pid send KIND_SPAWN → the same dispatch_spawn (broker.rs:706/835) which starts the per-session drain+OutputLog — so the gap is NARROWER than 'no drain', endpoint-run-specific. Root candidates: (a) spawn_session_pid's SpawnReq stdio/env/cwd differs so the dummy's stdout isn't the captured ConPTY; (b) the harness stdout WRITE BLOCKS because the ConPTY buffer fills (drain not reading THIS pty) — explains alive-but-0-bytes; (c) ConPTY reader-park (KH 7.6) on this path; (d) `spt rc` resolve_session/subscribe for an endpoint-run session subscribes to the wrong/empty log. (v0.12.1)",
2026-06-23T09:38:02.9624994Z       "requiredStages": [
2026-06-23T09:38:02.9625100Z         "impl",
2026-06-23T09:38:02.9625209Z         "unit",
2026-06-23T09:38:02.9625309Z         "int"
2026-06-23T09:38:02.9625405Z       ],
2026-06-23T09:38:02.9625500Z       "stages": {
2026-06-23T09:38:02.9625609Z         "doc": {
2026-06-23T09:38:02.9625734Z           "complete": false,
2026-06-23T09:38:02.9625839Z           "evidence": []
2026-06-23T09:38:02.9625952Z         },
2026-06-23T09:38:02.9626056Z         "impl": {
2026-06-23T09:38:02.9626175Z           "complete": true,
2026-06-23T09:38:02.9626278Z           "evidence": [
2026-06-23T09:38:02.9626383Z             {
2026-06-23T09:38:02.9626541Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:02.9626650Z               "line": 204
2026-06-23T09:38:02.9626751Z             }
2026-06-23T09:38:02.9626851Z           ]
2026-06-23T09:38:02.9626959Z         },
2026-06-23T09:38:02.9627061Z         "int": {
2026-06-23T09:38:02.9627170Z           "complete": true,
2026-06-23T09:38:02.9627284Z           "evidence": [
2026-06-23T09:38:02.9627395Z             {
2026-06-23T09:38:02.9627547Z               "path": "crates/spt/tests/dummy_harness_e2e.rs",
2026-06-23T09:38:02.9627656Z               "line": 296
2026-06-23T09:38:02.9627762Z             }
2026-06-23T09:38:02.9627866Z           ]
2026-06-23T09:38:02.9627967Z         },
2026-06-23T09:38:02.9628077Z         "unit": {
2026-06-23T09:38:02.9628195Z           "complete": true,
2026-06-23T09:38:02.9628296Z           "evidence": [
2026-06-23T09:38:02.9628401Z             {
2026-06-23T09:38:02.9628557Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:02.9628666Z               "line": 469
2026-06-23T09:38:02.9628775Z             }
2026-06-23T09:38:02.9628883Z           ]
2026-06-23T09:38:02.9629060Z         }
2026-06-23T09:38:02.9629155Z       }
2026-06-23T09:38:02.9629255Z     },
2026-06-23T09:38:02.9629361Z     {
2026-06-23T09:38:02.9629488Z       "id": "REQ-HAZARD-ENV-SUBST",
2026-06-23T09:38:02.9632969Z       "title": "`spt endpoint run` HONORS manifest [env.<VAR>] direction=inject values (with {key} substitution) on the spt-hosted spawn. Today only the [session.self] command ARGV is {id}-substituted; the [env] inject value is NEITHER substituted NOR applied — manifest.schema.json promises EnvVar.value = 'Value to inject (with substitution)' but prepare_harness_spawn fills only argv and SpawnReq carries no env, so a [env.SPT_ENDPOINT_ID].value='{id}' arrives EMPTY. A FLAGLESS harness (bare `claude`, no argv slot for {id}) then routes the id via [env] → empty → SessionStart sees empty $SPT_ENDPOINT_ID → seeds-by-PPID instead of binding → ZERO perch → NO_PERCH (the actual wall-b bind blocker; perri hard-repro'd). SILENT failure (empty inject, no error). FIX (doyle ruled a): fill every [env] inject value from the SAME {key} catalog as argv/role (mirror F-009 TEMPLATE fill, whole-string fill_template for an env value), thread it through SpawnReq.env → the broker sets it on the spawned PTY child. Correctness fix — schema already promises it, NO manifest change, NO new binary. PAIRS with REQ-SEND-SPT-HOSTED to make endpoint run fully work. doyle F-013. (post-v0.10.0)",
2026-06-23T09:38:02.9633198Z       "requiredStages": [
2026-06-23T09:38:02.9633307Z         "impl",
2026-06-23T09:38:02.9633412Z         "unit",
2026-06-23T09:38:02.9633518Z         "int"
2026-06-23T09:38:02.9633617Z       ],
2026-06-23T09:38:02.9633725Z       "stages": {
2026-06-23T09:38:02.9633835Z         "doc": {
2026-06-23T09:38:02.9633943Z           "complete": false,
2026-06-23T09:38:02.9634052Z           "evidence": []
2026-06-23T09:38:02.9634158Z         },
2026-06-23T09:38:02.9634262Z         "impl": {
2026-06-23T09:38:02.9634372Z           "complete": true,
2026-06-23T09:38:02.9634477Z           "evidence": [
2026-06-23T09:38:02.9634582Z             {
2026-06-23T09:38:02.9634745Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:02.9634849Z               "line": 123
2026-06-23T09:38:02.9634953Z             },
2026-06-23T09:38:02.9635064Z             {
2026-06-23T09:38:02.9635197Z               "path": "crates/spt-term/src/pty.rs",
2026-06-23T09:38:02.9635316Z               "line": 134
2026-06-23T09:38:02.9635422Z             }
2026-06-23T09:38:02.9635521Z           ]
2026-06-23T09:38:02.9635630Z         },
2026-06-23T09:38:02.9635727Z         "int": {
2026-06-23T09:38:02.9635845Z           "complete": true,
2026-06-23T09:38:02.9635950Z           "evidence": [
2026-06-23T09:38:02.9636065Z             {
2026-06-23T09:38:02.9636213Z               "path": "crates/spt-daemon/tests/broker.rs",
2026-06-23T09:38:02.9636318Z               "line": 314
2026-06-23T09:38:02.9636427Z             },
2026-06-23T09:38:02.9636526Z             {
2026-06-23T09:38:02.9636669Z               "path": "crates/spt-daemon/tests/broker.rs",
2026-06-23T09:38:02.9636777Z               "line": 531
2026-06-23T09:38:02.9636885Z             }
2026-06-23T09:38:02.9636996Z           ]
2026-06-23T09:38:02.9637097Z         },
2026-06-23T09:38:02.9637205Z         "unit": {
2026-06-23T09:38:02.9637325Z           "complete": true,
2026-06-23T09:38:02.9637426Z           "evidence": [
2026-06-23T09:38:02.9637529Z             {
2026-06-23T09:38:02.9637683Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:02.9637792Z               "line": 256
2026-06-23T09:38:02.9637888Z             }
2026-06-23T09:38:02.9637988Z           ]
2026-06-23T09:38:02.9638093Z         }
2026-06-23T09:38:02.9638202Z       }
2026-06-23T09:38:02.9638308Z     },
2026-06-23T09:38:02.9638411Z     {
2026-06-23T09:38:02.9638556Z       "id": "REQ-HAZARD-ENVELOPE-CR-LINESAFE",
2026-06-23T09:38:02.9640517Z       "title": "Envelope CR-linesafety (4.1): the line-framed EVENT codec must neutralize raw carriage returns — `event_body_escape` folds CRLF/lone-CR to the codec's representable linebreak (`\\n`→`<br>`) BEFORE framing, so a body carrying `\\r` (Windows `echo`/CRLF text crossing nodes) cannot survive into the single-line envelope and trigger a receiver terminal CR→col0 overwrite that corrupts the frame. Robustness on unrepresentable input, NOT a wire-format change (decoder untouched, amp-last invariant held). Belt-and-suspenders: `spt send`/`ring` also trim stdin (parity with `notify`).",
2026-06-23T09:38:02.9640655Z       "requiredStages": [
2026-06-23T09:38:02.9640764Z         "impl",
2026-06-23T09:38:02.9640865Z         "unit"
2026-06-23T09:38:02.9640974Z       ],
2026-06-23T09:38:02.9641175Z       "stages": {
2026-06-23T09:38:02.9641283Z         "doc": {
2026-06-23T09:38:02.9641394Z           "complete": false,
2026-06-23T09:38:02.9641505Z           "evidence": []
2026-06-23T09:38:02.9641598Z         },
2026-06-23T09:38:02.9641704Z         "impl": {
2026-06-23T09:38:02.9641814Z           "complete": true,
2026-06-23T09:38:02.9641913Z           "evidence": [
2026-06-23T09:38:02.9642022Z             {
2026-06-23T09:38:02.9642161Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9642270Z               "line": 31
2026-06-23T09:38:02.9642365Z             }
2026-06-23T09:38:02.9642462Z           ]
2026-06-23T09:38:02.9642566Z         },
2026-06-23T09:38:02.9642670Z         "int": {
2026-06-23T09:38:02.9642781Z           "complete": false,
2026-06-23T09:38:02.9642886Z           "evidence": []
2026-06-23T09:38:02.9642985Z         },
2026-06-23T09:38:02.9643086Z         "unit": {
2026-06-23T09:38:02.9643190Z           "complete": true,
2026-06-23T09:38:02.9643295Z           "evidence": [
2026-06-23T09:38:02.9643401Z             {
2026-06-23T09:38:02.9643534Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9643648Z               "line": 181
2026-06-23T09:38:02.9643745Z             }
2026-06-23T09:38:02.9643852Z           ]
2026-06-23T09:38:02.9643953Z         }
2026-06-23T09:38:02.9644060Z       }
2026-06-23T09:38:02.9644162Z     },
2026-06-23T09:38:02.9644266Z     {
2026-06-23T09:38:02.9644405Z       "id": "REQ-HAZARD-ENVELOPE-DECODE-ORDER",
2026-06-23T09:38:02.9644593Z       "title": "Envelope decode order, ampersand decoded last (4.1)",
2026-06-23T09:38:02.9644718Z       "requiredStages": [
2026-06-23T09:38:02.9644827Z         "impl",
2026-06-23T09:38:02.9644932Z         "unit"
2026-06-23T09:38:02.9645023Z       ],
2026-06-23T09:38:02.9645127Z       "stages": {
2026-06-23T09:38:02.9645222Z         "doc": {
2026-06-23T09:38:02.9645338Z           "complete": false,
2026-06-23T09:38:02.9645442Z           "evidence": []
2026-06-23T09:38:02.9645551Z         },
2026-06-23T09:38:02.9645658Z         "impl": {
2026-06-23T09:38:02.9645771Z           "complete": true,
2026-06-23T09:38:02.9645881Z           "evidence": [
2026-06-23T09:38:02.9645977Z             {
2026-06-23T09:38:02.9646129Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9646249Z               "line": 49
2026-06-23T09:38:02.9646353Z             },
2026-06-23T09:38:02.9646462Z             {
2026-06-23T09:38:02.9646607Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9646720Z               "line": 81
2026-06-23T09:38:02.9646825Z             }
2026-06-23T09:38:02.9646932Z           ]
2026-06-23T09:38:02.9647039Z         },
2026-06-23T09:38:02.9647143Z         "int": {
2026-06-23T09:38:02.9647263Z           "complete": false,
2026-06-23T09:38:02.9647375Z           "evidence": []
2026-06-23T09:38:02.9647479Z         },
2026-06-23T09:38:02.9647575Z         "unit": {
2026-06-23T09:38:02.9647694Z           "complete": true,
2026-06-23T09:38:02.9647808Z           "evidence": [
2026-06-23T09:38:02.9647914Z             {
2026-06-23T09:38:02.9648052Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9648162Z               "line": 156
2026-06-23T09:38:02.9648272Z             },
2026-06-23T09:38:02.9648371Z             {
2026-06-23T09:38:02.9648516Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9651234Z               "line": 173
2026-06-23T09:38:02.9651358Z             },
2026-06-23T09:38:02.9651468Z             {
2026-06-23T09:38:02.9651773Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9651883Z               "line": 196
2026-06-23T09:38:02.9651978Z             }
2026-06-23T09:38:02.9652083Z           ]
2026-06-23T09:38:02.9652187Z         }
2026-06-23T09:38:02.9652288Z       }
2026-06-23T09:38:02.9652394Z     },
2026-06-23T09:38:02.9652492Z     {
2026-06-23T09:38:02.9652644Z       "id": "REQ-HAZARD-ENVELOPE-PARSER-SAFE",
2026-06-23T09:38:02.9652849Z       "title": "Two-slice envelope parser is panic-free and tolerant (4.2)",
2026-06-23T09:38:02.9653073Z       "requiredStages": [
2026-06-23T09:38:02.9653182Z         "impl",
2026-06-23T09:38:02.9653274Z         "unit"
2026-06-23T09:38:02.9653384Z       ],
2026-06-23T09:38:02.9653488Z       "stages": {
2026-06-23T09:38:02.9653593Z         "doc": {
2026-06-23T09:38:02.9653703Z           "complete": false,
2026-06-23T09:38:02.9653803Z           "evidence": []
2026-06-23T09:38:02.9653908Z         },
2026-06-23T09:38:02.9654004Z         "impl": {
2026-06-23T09:38:02.9654113Z           "complete": true,
2026-06-23T09:38:02.9654223Z           "evidence": [
2026-06-23T09:38:02.9654328Z             {
2026-06-23T09:38:02.9654479Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9654586Z               "line": 120
2026-06-23T09:38:02.9654690Z             }
2026-06-23T09:38:02.9654784Z           ]
2026-06-23T09:38:02.9654894Z         },
2026-06-23T09:38:02.9654993Z         "int": {
2026-06-23T09:38:02.9655111Z           "complete": false,
2026-06-23T09:38:02.9655216Z           "evidence": []
2026-06-23T09:38:02.9655322Z         },
2026-06-23T09:38:02.9655435Z         "unit": {
2026-06-23T09:38:02.9655545Z           "complete": true,
2026-06-23T09:38:02.9655655Z           "evidence": [
2026-06-23T09:38:02.9655749Z             {
2026-06-23T09:38:02.9655908Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9656012Z               "line": 212
2026-06-23T09:38:02.9656116Z             },
2026-06-23T09:38:02.9656223Z             {
2026-06-23T09:38:02.9656364Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9656475Z               "line": 221
2026-06-23T09:38:02.9656580Z             },
2026-06-23T09:38:02.9656689Z             {
2026-06-23T09:38:02.9656828Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9656941Z               "line": 229
2026-06-23T09:38:02.9657046Z             },
2026-06-23T09:38:02.9657148Z             {
2026-06-23T09:38:02.9657289Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9657390Z               "line": 239
2026-06-23T09:38:02.9657501Z             },
2026-06-23T09:38:02.9657599Z             {
2026-06-23T09:38:02.9657742Z               "path": "crates/spt-proto/src/envelope.rs",
2026-06-23T09:38:02.9657851Z               "line": 249
2026-06-23T09:38:02.9657954Z             }
2026-06-23T09:38:02.9658059Z           ]
2026-06-23T09:38:02.9658164Z         }
2026-06-23T09:38:02.9658269Z       }
2026-06-23T09:38:02.9658368Z     },
2026-06-23T09:38:02.9658469Z     {
2026-06-23T09:38:02.9658612Z       "id": "REQ-HAZARD-EPHEMERAL-CLEANUP",
2026-06-23T09:38:02.9658798Z       "title": "Ephemeral perch cleanup on every ring exit path (3.1)",
2026-06-23T09:38:02.9658907Z       "requiredStages": [
2026-06-23T09:38:02.9659095Z         "impl",
2026-06-23T09:38:02.9659203Z         "unit"
2026-06-23T09:38:02.9659308Z       ],
2026-06-23T09:38:02.9659410Z       "stages": {
2026-06-23T09:38:02.9659522Z         "doc": {
2026-06-23T09:38:02.9659632Z           "complete": false,
2026-06-23T09:38:02.9659738Z           "evidence": []
2026-06-23T09:38:02.9659837Z         },
2026-06-23T09:38:02.9659942Z         "impl": {
2026-06-23T09:38:02.9660049Z           "complete": true,
2026-06-23T09:38:02.9660161Z           "evidence": [
2026-06-23T09:38:02.9660265Z             {
2026-06-23T09:38:02.9660399Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:02.9660507Z               "line": 14
2026-06-23T09:38:02.9660611Z             },
2026-06-23T09:38:02.9660712Z             {
2026-06-23T09:38:02.9660964Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:02.9661074Z               "line": 63
2026-06-23T09:38:02.9661183Z             }
2026-06-23T09:38:02.9661274Z           ]
2026-06-23T09:38:02.9661375Z         },
2026-06-23T09:38:02.9661474Z         "int": {
2026-06-23T09:38:02.9661594Z           "complete": false,
2026-06-23T09:38:02.9661684Z           "evidence": []
2026-06-23T09:38:02.9661880Z         },
2026-06-23T09:38:02.9661985Z         "unit": {
2026-06-23T09:38:02.9662099Z           "complete": true,
2026-06-23T09:38:02.9662209Z           "evidence": [
2026-06-23T09:38:02.9662305Z             {
2026-06-23T09:38:02.9662428Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:02.9662538Z               "line": 164
2026-06-23T09:38:02.9662643Z             },
2026-06-23T09:38:02.9662752Z             {
2026-06-23T09:38:02.9662877Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:02.9662991Z               "line": 198
2026-06-23T09:38:02.9663085Z             },
2026-06-23T09:38:02.9663190Z             {
2026-06-23T09:38:02.9663320Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:02.9663423Z               "line": 220
2026-06-23T09:38:02.9663529Z             }
2026-06-23T09:38:02.9663625Z           ]
2026-06-23T09:38:02.9663724Z         }
2026-06-23T09:38:02.9663814Z       }
2026-06-23T09:38:02.9663920Z     },
2026-06-23T09:38:02.9664020Z     {
2026-06-23T09:38:02.9664148Z       "id": "REQ-HAZARD-EPOCH-RESET",
2026-06-23T09:38:02.9665539Z       "title": "Advertisement-epoch reset strands a node: peers' higher last-seen epoch drops the reset node's fresh advertisements as Stale until the counter outruns history. Common case (full reinstall/re-pair) is mitigated by REQ-SUBNET-7's ceremony eviction (peer-side epoch memory dies with the deleted row — acceptance-verified); the residual narrow slice (epoch file lost, identity kept) is documented, guard deferred to a field hit (4.11)",
2026-06-23T09:38:02.9665666Z       "requiredStages": [],
2026-06-23T09:38:02.9665776Z       "stages": {
2026-06-23T09:38:02.9665887Z         "doc": {
2026-06-23T09:38:02.9665999Z           "complete": true,
2026-06-23T09:38:02.9666109Z           "evidence": [
2026-06-23T09:38:02.9666210Z             {
2026-06-23T09:38:02.9666352Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9666454Z               "line": 165
2026-06-23T09:38:02.9666568Z             }
2026-06-23T09:38:02.9666667Z           ]
2026-06-23T09:38:02.9666764Z         },
2026-06-23T09:38:02.9666863Z         "impl": {
2026-06-23T09:38:02.9666977Z           "complete": false,
2026-06-23T09:38:02.9667088Z           "evidence": []
2026-06-23T09:38:02.9667187Z         },
2026-06-23T09:38:02.9667287Z         "int": {
2026-06-23T09:38:02.9667403Z           "complete": false,
2026-06-23T09:38:02.9667515Z           "evidence": []
2026-06-23T09:38:02.9667616Z         },
2026-06-23T09:38:02.9667713Z         "unit": {
2026-06-23T09:38:02.9667826Z           "complete": false,
2026-06-23T09:38:02.9667936Z           "evidence": []
2026-06-23T09:38:02.9668042Z         }
2026-06-23T09:38:02.9668150Z       }
2026-06-23T09:38:02.9668249Z     },
2026-06-23T09:38:02.9668354Z     {
2026-06-23T09:38:02.9668495Z       "id": "REQ-HAZARD-EVENTPART-REASSEMBLY",
2026-06-23T09:38:02.9668739Z       "title": "EVENT-PART split/reassembly is byte-exact; orphan parts dropped silently",
2026-06-23T09:38:02.9668857Z       "requiredStages": [
2026-06-23T09:38:02.9669191Z         "impl",
2026-06-23T09:38:02.9669292Z         "unit"
2026-06-23T09:38:02.9669396Z       ],
2026-06-23T09:38:02.9669505Z       "stages": {
2026-06-23T09:38:02.9669606Z         "doc": {
2026-06-23T09:38:02.9669720Z           "complete": false,
2026-06-23T09:38:02.9669830Z           "evidence": []
2026-06-23T09:38:02.9669931Z         },
2026-06-23T09:38:02.9670044Z         "impl": {
2026-06-23T09:38:02.9670149Z           "complete": true,
2026-06-23T09:38:02.9670260Z           "evidence": [
2026-06-23T09:38:02.9670364Z             {
2026-06-23T09:38:02.9670619Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9670726Z               "line": 76
2026-06-23T09:38:02.9670830Z             },
2026-06-23T09:38:02.9670921Z             {
2026-06-23T09:38:02.9671067Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9671176Z               "line": 167
2026-06-23T09:38:02.9671282Z             },
2026-06-23T09:38:02.9671476Z             {
2026-06-23T09:38:02.9671611Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9671710Z               "line": 233
2026-06-23T09:38:02.9671820Z             },
2026-06-23T09:38:02.9671920Z             {
2026-06-23T09:38:02.9672048Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9672159Z               "line": 272
2026-06-23T09:38:02.9672264Z             }
2026-06-23T09:38:02.9672359Z           ]
2026-06-23T09:38:02.9672454Z         },
2026-06-23T09:38:02.9672559Z         "int": {
2026-06-23T09:38:02.9672664Z           "complete": false,
2026-06-23T09:38:02.9672774Z           "evidence": []
2026-06-23T09:38:02.9672874Z         },
2026-06-23T09:38:02.9672983Z         "unit": {
2026-06-23T09:38:02.9673099Z           "complete": true,
2026-06-23T09:38:02.9673203Z           "evidence": [
2026-06-23T09:38:02.9673307Z             {
2026-06-23T09:38:02.9673437Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9673546Z               "line": 321
2026-06-23T09:38:02.9673650Z             },
2026-06-23T09:38:02.9673740Z             {
2026-06-23T09:38:02.9673880Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9673984Z               "line": 329
2026-06-23T09:38:02.9674084Z             },
2026-06-23T09:38:02.9674180Z             {
2026-06-23T09:38:02.9674312Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9674424Z               "line": 356
2026-06-23T09:38:02.9674523Z             },
2026-06-23T09:38:02.9674623Z             {
2026-06-23T09:38:02.9674766Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9674875Z               "line": 395
2026-06-23T09:38:02.9674980Z             },
2026-06-23T09:38:02.9675086Z             {
2026-06-23T09:38:02.9675214Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9675329Z               "line": 406
2026-06-23T09:38:02.9675425Z             },
2026-06-23T09:38:02.9675519Z             {
2026-06-23T09:38:02.9675667Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9675777Z               "line": 418
2026-06-23T09:38:02.9675885Z             },
2026-06-23T09:38:02.9675980Z             {
2026-06-23T09:38:02.9676113Z               "path": "crates/spt-proto/src/chunk.rs",
2026-06-23T09:38:02.9676221Z               "line": 442
2026-06-23T09:38:02.9676327Z             }
2026-06-23T09:38:02.9676432Z           ]
2026-06-23T09:38:02.9676531Z         }
2026-06-23T09:38:02.9676631Z       }
2026-06-23T09:38:02.9676728Z     },
2026-06-23T09:38:02.9676837Z     {
2026-06-23T09:38:02.9676971Z       "id": "REQ-HAZARD-GEN-START-NOW",
2026-06-23T09:38:02.9677142Z       "title": "gen_start = now() on cold-start and handoff (2.4)",
2026-06-23T09:38:02.9677251Z       "requiredStages": [
2026-06-23T09:38:02.9677357Z         "impl",
2026-06-23T09:38:02.9677461Z         "int"
2026-06-23T09:38:02.9677562Z       ],
2026-06-23T09:38:02.9677672Z       "stages": {
2026-06-23T09:38:02.9677776Z         "doc": {
2026-06-23T09:38:02.9677890Z           "complete": false,
2026-06-23T09:38:02.9677996Z           "evidence": []
2026-06-23T09:38:02.9678100Z         },
2026-06-23T09:38:02.9678201Z         "impl": {
2026-06-23T09:38:02.9678306Z           "complete": true,
2026-06-23T09:38:02.9678414Z           "evidence": [
2026-06-23T09:38:02.9678506Z             {
2026-06-23T09:38:02.9678654Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9678752Z               "line": 22
2026-06-23T09:38:02.9678857Z             }
2026-06-23T09:38:02.9679041Z           ]
2026-06-23T09:38:02.9679236Z         },
2026-06-23T09:38:02.9679342Z         "int": {
2026-06-23T09:38:02.9679455Z           "complete": true,
2026-06-23T09:38:02.9679571Z           "evidence": [
2026-06-23T09:38:02.9679671Z             {
2026-06-23T09:38:02.9679823Z               "path": "crates/spt-daemon/tests/handoff.rs",
2026-06-23T09:38:02.9679933Z               "line": 18
2026-06-23T09:38:02.9680033Z             }
2026-06-23T09:38:02.9680229Z           ]
2026-06-23T09:38:02.9680329Z         },
2026-06-23T09:38:02.9680438Z         "unit": {
2026-06-23T09:38:02.9680558Z           "complete": false,
2026-06-23T09:38:02.9680662Z           "evidence": []
2026-06-23T09:38:02.9680762Z         }
2026-06-23T09:38:02.9680868Z       }
2026-06-23T09:38:02.9680967Z     },
2026-06-23T09:38:02.9681058Z     {
2026-06-23T09:38:02.9681202Z       "id": "REQ-HAZARD-GRACE-BEFORE-SIGNOFF",
2026-06-23T09:38:02.9681424Z       "title": "Grace-period wait completes before composing INIT_SIGNOFF (1.1)",
2026-06-23T09:38:02.9681533Z       "requiredStages": [
2026-06-23T09:38:02.9681636Z         "impl",
2026-06-23T09:38:02.9681736Z         "unit"
2026-06-23T09:38:02.9681842Z       ],
2026-06-23T09:38:02.9681946Z       "stages": {
2026-06-23T09:38:02.9682051Z         "doc": {
2026-06-23T09:38:02.9682166Z           "complete": false,
2026-06-23T09:38:02.9682270Z           "evidence": []
2026-06-23T09:38:02.9682375Z         },
2026-06-23T09:38:02.9682471Z         "impl": {
2026-06-23T09:38:02.9682580Z           "complete": true,
2026-06-23T09:38:02.9682685Z           "evidence": [
2026-06-23T09:38:02.9682791Z             {
2026-06-23T09:38:02.9682947Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9683048Z               "line": 676
2026-06-23T09:38:02.9683153Z             },
2026-06-23T09:38:02.9683252Z             {
2026-06-23T09:38:02.9683392Z               "path": "crates/spt-live/src/signoff.rs",
2026-06-23T09:38:02.9683496Z               "line": 27
2026-06-23T09:38:02.9683601Z             }
2026-06-23T09:38:02.9683702Z           ]
2026-06-23T09:38:02.9683796Z         },
2026-06-23T09:38:02.9683892Z         "int": {
2026-06-23T09:38:02.9684002Z           "complete": false,
2026-06-23T09:38:02.9684120Z           "evidence": []
2026-06-23T09:38:02.9684220Z         },
2026-06-23T09:38:02.9684324Z         "unit": {
2026-06-23T09:38:02.9684431Z           "complete": true,
2026-06-23T09:38:02.9684539Z           "evidence": [
2026-06-23T09:38:02.9684649Z             {
2026-06-23T09:38:02.9684797Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:02.9684910Z               "line": 1201
2026-06-23T09:38:02.9685007Z             },
2026-06-23T09:38:02.9685112Z             {
2026-06-23T09:38:02.9685260Z               "path": "crates/spt-live/src/signoff.rs",
2026-06-23T09:38:02.9685359Z               "line": 181
2026-06-23T09:38:02.9685464Z             }
2026-06-23T09:38:02.9685564Z           ]
2026-06-23T09:38:02.9685660Z         }
2026-06-23T09:38:02.9685755Z       }
2026-06-23T09:38:02.9685859Z     },
2026-06-23T09:38:02.9685966Z     {
2026-06-23T09:38:02.9686103Z       "id": "REQ-HAZARD-HANDOFF-ARGV-COMPAT",
2026-06-23T09:38:02.9686300Z       "title": "Broker/brain IPC + handoff argv version-tolerant (2.3)",
2026-06-23T09:38:02.9686408Z       "requiredStages": [
2026-06-23T09:38:02.9686498Z         "impl",
2026-06-23T09:38:02.9686594Z         "unit"
2026-06-23T09:38:02.9686701Z       ],
2026-06-23T09:38:02.9686810Z       "stages": {
2026-06-23T09:38:02.9686911Z         "doc": {
2026-06-23T09:38:02.9687021Z           "complete": false,
2026-06-23T09:38:02.9687129Z           "evidence": []
2026-06-23T09:38:02.9687230Z         },
2026-06-23T09:38:02.9687330Z         "impl": {
2026-06-23T09:38:02.9687444Z           "complete": true,
2026-06-23T09:38:02.9687559Z           "evidence": [
2026-06-23T09:38:02.9687659Z             {
2026-06-23T09:38:02.9687802Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9687908Z               "line": 73
2026-06-23T09:38:02.9688012Z             },
2026-06-23T09:38:02.9688185Z             {
2026-06-23T09:38:02.9688336Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9688441Z               "line": 972
2026-06-23T09:38:02.9688542Z             },
2026-06-23T09:38:02.9688641Z             {
2026-06-23T09:38:02.9688771Z               "path": "crates/spt-daemon/src/frame.rs",
2026-06-23T09:38:02.9688876Z               "line": 20
2026-06-23T09:38:02.9689148Z             },
2026-06-23T09:38:02.9689252Z             {
2026-06-23T09:38:02.9689389Z               "path": "crates/spt-daemon/src/frame.rs",
2026-06-23T09:38:02.9689493Z               "line": 100
2026-06-23T09:38:02.9689597Z             },
2026-06-23T09:38:02.9689696Z             {
2026-06-23T09:38:02.9689821Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9689930Z               "line": 655
2026-06-23T09:38:02.9690035Z             },
2026-06-23T09:38:02.9690131Z             {
2026-06-23T09:38:02.9690278Z               "path": "crates/spt-daemon/src/transport.rs",
2026-06-23T09:38:02.9690383Z               "line": 68
2026-06-23T09:38:02.9690489Z             },
2026-06-23T09:38:02.9690593Z             {
2026-06-23T09:38:02.9690741Z               "path": "crates/spt-daemon/src/transport.rs",
2026-06-23T09:38:02.9690850Z               "line": 80
2026-06-23T09:38:02.9690955Z             }
2026-06-23T09:38:02.9691047Z           ]
2026-06-23T09:38:02.9691137Z         },
2026-06-23T09:38:02.9691251Z         "int": {
2026-06-23T09:38:02.9691367Z           "complete": true,
2026-06-23T09:38:02.9691480Z           "evidence": [
2026-06-23T09:38:02.9691580Z             {
2026-06-23T09:38:02.9691719Z               "path": "crates/spt/tests/n1_pairing.rs",
2026-06-23T09:38:02.9691832Z               "line": 44
2026-06-23T09:38:02.9691936Z             }
2026-06-23T09:38:02.9692022Z           ]
2026-06-23T09:38:02.9692126Z         },
2026-06-23T09:38:02.9692234Z         "unit": {
2026-06-23T09:38:02.9692344Z           "complete": true,
2026-06-23T09:38:02.9692460Z           "evidence": [
2026-06-23T09:38:02.9692558Z             {
2026-06-23T09:38:02.9692689Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9692793Z               "line": 1181
2026-06-23T09:38:02.9692902Z             },
2026-06-23T09:38:02.9693008Z             {
2026-06-23T09:38:02.9693145Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:02.9693260Z               "line": 1197
2026-06-23T09:38:02.9693370Z             },
2026-06-23T09:38:02.9693469Z             {
2026-06-23T09:38:02.9693613Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9693717Z               "line": 2648
2026-06-23T09:38:02.9693812Z             },
2026-06-23T09:38:02.9693914Z             {
2026-06-23T09:38:02.9694060Z               "path": "crates/spt-daemon/src/frame.rs",
2026-06-23T09:38:02.9694171Z               "line": 152
2026-06-23T09:38:02.9694277Z             },
2026-06-23T09:38:02.9694380Z             {
2026-06-23T09:38:02.9694529Z               "path": "crates/spt-daemon/src/frame.rs",
2026-06-23T09:38:02.9694644Z               "line": 175
2026-06-23T09:38:02.9694746Z             },
2026-06-23T09:38:02.9694851Z             {
2026-06-23T09:38:02.9694986Z               "path": "crates/spt-daemon/src/frame.rs",
2026-06-23T09:38:02.9695099Z               "line": 186
2026-06-23T09:38:02.9695204Z             },
2026-06-23T09:38:02.9695309Z             {
2026-06-23T09:38:02.9695461Z               "path": "crates/spt-daemon/src/frame.rs",
2026-06-23T09:38:02.9695568Z               "line": 202
2026-06-23T09:38:02.9695677Z             },
2026-06-23T09:38:02.9695781Z             {
2026-06-23T09:38:02.9695915Z               "path": "crates/spt-daemon/src/frame.rs",
2026-06-23T09:38:02.9696020Z               "line": 216
2026-06-23T09:38:02.9696129Z             },
2026-06-23T09:38:02.9696225Z             {
2026-06-23T09:38:02.9696367Z               "path": "crates/spt-daemon/src/transport.rs",
2026-06-23T09:38:02.9696469Z               "line": 137
2026-06-23T09:38:02.9696672Z             },
2026-06-23T09:38:02.9696773Z             {
2026-06-23T09:38:02.9696944Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9697058Z               "line": 9546
2026-06-23T09:38:02.9697163Z             },
2026-06-23T09:38:02.9697261Z             {
2026-06-23T09:38:02.9697403Z               "path": "crates/spt/tests/n1_compat.rs",
2026-06-23T09:38:02.9697509Z               "line": 30
2026-06-23T09:38:02.9697708Z             },
2026-06-23T09:38:02.9697800Z             {
2026-06-23T09:38:02.9697943Z               "path": "crates/spt/tests/n1_compat.rs",
2026-06-23T09:38:02.9698047Z               "line": 73
2026-06-23T09:38:02.9698153Z             }
2026-06-23T09:38:02.9698262Z           ]
2026-06-23T09:38:02.9698367Z         }
2026-06-23T09:38:02.9698472Z       }
2026-06-23T09:38:02.9698567Z     },
2026-06-23T09:38:02.9698667Z     {
2026-06-23T09:38:02.9698820Z       "id": "REQ-HAZARD-HOSTED-LIVENESS-RECONCILE",
2026-06-23T09:38:02.9702972Z       "title": "B2 KEYSTONE: a daemon-hosted (spt-hosted) endpoint's info.json status is RECONCILED to real liveness, not left latched online. The broker exit-waiter (broker.rs:889-910) reaps its in-mem session table + emits ExitEvent but NEVER touches info.json; lifecycle::mark_offline only fires on Psyche teardown — so a dead/exited harness (operator closed the tab) stays status=online forever (is_perch_alive returns ONLINE for daemon-hosted, liveness.rs:80-93). FIX (doyle ruled PULL-PRIMARY — the live-status analog of REQ-HAZARD-ROSTER-GHOST): the livehost reconcile loop (reconcile_once livehost.rs:226-313) queries the broker's live session set (KIND_SESSIONS) each tick and, for any status=online live_agent perch PAST the boot grace whose endpoint has NO live broker session, marks it offline (lifecycle::mark_offline → status=offline → is_perch_alive=false). GATED on spt-hosted (controllable==Some(true)) so a HARNESS-HOSTED relay live agent (api listen, legitimately online with no broker session) is NEVER mis-marked. Crash-robust + self-healing on the next tick (clear-on-event is not crash-robust alone). PUSH (brain ExitEvent→mark_offline) is an OPTIONAL fast-path only if the daemon brain is reliably subscribed to all hosted sessions; correctness rides the pull. Broker stays stateless (ADR-0004 §B — brain owns the info.json write). (v0.12.0)",
2026-06-23T09:38:02.9703099Z       "requiredStages": [
2026-06-23T09:38:02.9703210Z         "impl",
2026-06-23T09:38:02.9703319Z         "unit",
2026-06-23T09:38:02.9703423Z         "int"
2026-06-23T09:38:02.9703530Z       ],
2026-06-23T09:38:02.9703639Z       "stages": {
2026-06-23T09:38:02.9703738Z         "doc": {
2026-06-23T09:38:02.9703859Z           "complete": false,
2026-06-23T09:38:02.9703963Z           "evidence": []
2026-06-23T09:38:02.9704067Z         },
2026-06-23T09:38:02.9704178Z         "impl": {
2026-06-23T09:38:02.9704282Z           "complete": true,
2026-06-23T09:38:02.9704396Z           "evidence": [
2026-06-23T09:38:02.9704488Z             {
2026-06-23T09:38:02.9704649Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9704759Z               "line": 518
2026-06-23T09:38:02.9704866Z             },
2026-06-23T09:38:02.9704963Z             {
2026-06-23T09:38:02.9705114Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9705223Z               "line": 755
2026-06-23T09:38:02.9705326Z             }
2026-06-23T09:38:02.9705426Z           ]
2026-06-23T09:38:02.9705522Z         },
2026-06-23T09:38:02.9705631Z         "int": {
2026-06-23T09:38:02.9705740Z           "complete": true,
2026-06-23T09:38:02.9705851Z           "evidence": [
2026-06-23T09:38:02.9705959Z             {
2026-06-23T09:38:02.9706104Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9706213Z               "line": 1220
2026-06-23T09:38:02.9706317Z             },
2026-06-23T09:38:02.9706423Z             {
2026-06-23T09:38:02.9706566Z               "path": "crates/spt/tests/attach_wedge_e2e.rs",
2026-06-23T09:38:02.9706675Z               "line": 312
2026-06-23T09:38:02.9706880Z             }
2026-06-23T09:38:02.9706985Z           ]
2026-06-23T09:38:02.9707096Z         },
2026-06-23T09:38:02.9707199Z         "unit": {
2026-06-23T09:38:02.9707319Z           "complete": true,
2026-06-23T09:38:02.9707420Z           "evidence": [
2026-06-23T09:38:02.9707523Z             {
2026-06-23T09:38:02.9707675Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9707873Z               "line": 872
2026-06-23T09:38:02.9707983Z             }
2026-06-23T09:38:02.9708084Z           ]
2026-06-23T09:38:02.9708183Z         }
2026-06-23T09:38:02.9708288Z       }
2026-06-23T09:38:02.9708389Z     },
2026-06-23T09:38:02.9708493Z     {
2026-06-23T09:38:02.9708612Z       "id": "REQ-HAZARD-ID-CHARSET",
2026-06-23T09:38:02.9708879Z       "title": "Addressable-id charset reserves :/@ delimiters; validated at every creation seam (4.6)",
2026-06-23T09:38:02.9709075Z       "requiredStages": [
2026-06-23T09:38:02.9709189Z         "impl",
2026-06-23T09:38:02.9709285Z         "unit"
2026-06-23T09:38:02.9709389Z       ],
2026-06-23T09:38:02.9709499Z       "stages": {
2026-06-23T09:38:02.9709600Z         "doc": {
2026-06-23T09:38:02.9709709Z           "complete": true,
2026-06-23T09:38:02.9709819Z           "evidence": [
2026-06-23T09:38:02.9709925Z             {
2026-06-23T09:38:02.9710057Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9710162Z               "line": 133
2026-06-23T09:38:02.9710264Z             }
2026-06-23T09:38:02.9710362Z           ]
2026-06-23T09:38:02.9710457Z         },
2026-06-23T09:38:02.9710561Z         "impl": {
2026-06-23T09:38:02.9710670Z           "complete": true,
2026-06-23T09:38:02.9710778Z           "evidence": [
2026-06-23T09:38:02.9710874Z             {
2026-06-23T09:38:02.9711013Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:02.9711126Z               "line": 65
2026-06-23T09:38:02.9711237Z             },
2026-06-23T09:38:02.9711327Z             {
2026-06-23T09:38:02.9711469Z               "path": "crates/spt-proto/src/id.rs",
2026-06-23T09:38:02.9711575Z               "line": 17
2026-06-23T09:38:02.9711685Z             },
2026-06-23T09:38:02.9711784Z             {
2026-06-23T09:38:02.9711928Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9712047Z               "line": 146
2026-06-23T09:38:02.9712138Z             },
2026-06-23T09:38:02.9712233Z             {
2026-06-23T09:38:02.9712386Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9712492Z               "line": 310
2026-06-23T09:38:02.9712600Z             },
2026-06-23T09:38:02.9712701Z             {
2026-06-23T09:38:02.9712840Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:02.9712953Z               "line": 441
2026-06-23T09:38:02.9713061Z             },
2026-06-23T09:38:02.9713166Z             {
2026-06-23T09:38:02.9713293Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:02.9713407Z               "line": 32
2026-06-23T09:38:02.9713498Z             },
2026-06-23T09:38:02.9713603Z             {
2026-06-23T09:38:02.9713731Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9713837Z               "line": 1360
2026-06-23T09:38:02.9713946Z             },
2026-06-23T09:38:02.9714046Z             {
2026-06-23T09:38:02.9714176Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9714285Z               "line": 7226
2026-06-23T09:38:02.9714395Z             },
2026-06-23T09:38:02.9714495Z             {
2026-06-23T09:38:02.9714623Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9714734Z               "line": 7508
2026-06-23T09:38:02.9714838Z             }
2026-06-23T09:38:02.9714947Z           ]
2026-06-23T09:38:02.9715039Z         },
2026-06-23T09:38:02.9715148Z         "int": {
2026-06-23T09:38:02.9715253Z           "complete": false,
2026-06-23T09:38:02.9715364Z           "evidence": []
2026-06-23T09:38:02.9715472Z         },
2026-06-23T09:38:02.9715568Z         "unit": {
2026-06-23T09:38:02.9715787Z           "complete": true,
2026-06-23T09:38:02.9715895Z           "evidence": [
2026-06-23T09:38:02.9716005Z             {
2026-06-23T09:38:02.9716135Z               "path": "crates/spt-proto/src/id.rs",
2026-06-23T09:38:02.9716238Z               "line": 94
2026-06-23T09:38:02.9716348Z             },
2026-06-23T09:38:02.9716439Z             {
2026-06-23T09:38:02.9716582Z               "path": "crates/spt-proto/src/id.rs",
2026-06-23T09:38:02.9716783Z               "line": 111
2026-06-23T09:38:02.9716891Z             },
2026-06-23T09:38:02.9716993Z             {
2026-06-23T09:38:02.9717126Z               "path": "crates/spt-proto/src/id.rs",
2026-06-23T09:38:02.9717240Z               "line": 124
2026-06-23T09:38:02.9717341Z             },
2026-06-23T09:38:02.9717445Z             {
2026-06-23T09:38:02.9717569Z               "path": "crates/spt-proto/src/id.rs",
2026-06-23T09:38:02.9717684Z               "line": 134
2026-06-23T09:38:02.9717788Z             },
2026-06-23T09:38:02.9717893Z             {
2026-06-23T09:38:02.9718032Z               "path": "crates/spt-proto/src/id.rs",
2026-06-23T09:38:02.9718140Z               "line": 144
2026-06-23T09:38:02.9718250Z             },
2026-06-23T09:38:02.9718344Z             {
2026-06-23T09:38:02.9718476Z               "path": "crates/spt-proto/src/id.rs",
2026-06-23T09:38:02.9718581Z               "line": 156
2026-06-23T09:38:02.9718687Z             },
2026-06-23T09:38:02.9718800Z             {
2026-06-23T09:38:02.9719035Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9719153Z               "line": 746
2026-06-23T09:38:02.9719250Z             },
2026-06-23T09:38:02.9719359Z             {
2026-06-23T09:38:02.9719507Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:02.9719616Z               "line": 309
2026-06-23T09:38:02.9719721Z             }
2026-06-23T09:38:02.9719826Z           ]
2026-06-23T09:38:02.9719926Z         }
2026-06-23T09:38:02.9720026Z       }
2026-06-23T09:38:02.9720136Z     },
2026-06-23T09:38:02.9720237Z     {
2026-06-23T09:38:02.9720374Z       "id": "REQ-HAZARD-INBOX-NO-DOUBLE",
2026-06-23T09:38:02.9720538Z       "title": "No double-delivery via legacy inbox (4.5)",
2026-06-23T09:38:02.9720645Z       "requiredStages": [
2026-06-23T09:38:02.9720751Z         "impl",
2026-06-23T09:38:02.9720857Z         "unit"
2026-06-23T09:38:02.9720965Z       ],
2026-06-23T09:38:02.9721064Z       "stages": {
2026-06-23T09:38:02.9721174Z         "doc": {
2026-06-23T09:38:02.9721296Z           "complete": false,
2026-06-23T09:38:02.9721395Z           "evidence": []
2026-06-23T09:38:02.9721501Z         },
2026-06-23T09:38:02.9721615Z         "impl": {
2026-06-23T09:38:02.9721725Z           "complete": true,
2026-06-23T09:38:02.9721835Z           "evidence": [
2026-06-23T09:38:02.9721930Z             {
2026-06-23T09:38:02.9722073Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:02.9722183Z               "line": 128
2026-06-23T09:38:02.9722292Z             }
2026-06-23T09:38:02.9722388Z           ]
2026-06-23T09:38:02.9722488Z         },
2026-06-23T09:38:02.9722593Z         "int": {
2026-06-23T09:38:02.9722708Z           "complete": false,
2026-06-23T09:38:02.9722817Z           "evidence": []
2026-06-23T09:38:02.9722922Z         },
2026-06-23T09:38:02.9723032Z         "unit": {
2026-06-23T09:38:02.9723146Z           "complete": true,
2026-06-23T09:38:02.9723251Z           "evidence": [
2026-06-23T09:38:02.9723357Z             {
2026-06-23T09:38:02.9723499Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:02.9723598Z               "line": 205
2026-06-23T09:38:02.9723698Z             }
2026-06-23T09:38:02.9723806Z           ]
2026-06-23T09:38:02.9723900Z         }
2026-06-23T09:38:02.9724006Z       }
2026-06-23T09:38:02.9724097Z     },
2026-06-23T09:38:02.9724187Z     {
2026-06-23T09:38:02.9724325Z       "id": "REQ-HAZARD-INFO-JSON-TORN-READ",
2026-06-23T09:38:02.9724497Z       "title": "State-file reads tolerate concurrent writes (1.2)",
2026-06-23T09:38:02.9724707Z       "requiredStages": [
2026-06-23T09:38:02.9724812Z         "impl",
2026-06-23T09:38:02.9724921Z         "unit"
2026-06-23T09:38:02.9725022Z       ],
2026-06-23T09:38:02.9725131Z       "stages": {
2026-06-23T09:38:02.9725241Z         "doc": {
2026-06-23T09:38:02.9725346Z           "complete": false,
2026-06-23T09:38:02.9725455Z           "evidence": []
2026-06-23T09:38:02.9725555Z         },
2026-06-23T09:38:02.9725779Z         "impl": {
2026-06-23T09:38:02.9725890Z           "complete": true,
2026-06-23T09:38:02.9726000Z           "evidence": [
2026-06-23T09:38:02.9726103Z             {
2026-06-23T09:38:02.9726243Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9726361Z               "line": 367
2026-06-23T09:38:02.9726465Z             },
2026-06-23T09:38:02.9726565Z             {
2026-06-23T09:38:02.9726709Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9726822Z               "line": 378
2026-06-23T09:38:02.9726928Z             },
2026-06-23T09:38:02.9727024Z             {
2026-06-23T09:38:02.9727161Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9727267Z               "line": 396
2026-06-23T09:38:02.9727376Z             }
2026-06-23T09:38:02.9727476Z           ]
2026-06-23T09:38:02.9727577Z         },
2026-06-23T09:38:02.9727686Z         "int": {
2026-06-23T09:38:02.9727805Z           "complete": false,
2026-06-23T09:38:02.9727925Z           "evidence": []
2026-06-23T09:38:02.9728030Z         },
2026-06-23T09:38:02.9728134Z         "unit": {
2026-06-23T09:38:02.9728240Z           "complete": true,
2026-06-23T09:38:02.9728348Z           "evidence": [
2026-06-23T09:38:02.9728449Z             {
2026-06-23T09:38:02.9728583Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9728686Z               "line": 420
2026-06-23T09:38:02.9728786Z             },
2026-06-23T09:38:02.9728900Z             {
2026-06-23T09:38:02.9729118Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9729228Z               "line": 441
2026-06-23T09:38:02.9729336Z             },
2026-06-23T09:38:02.9729437Z             {
2026-06-23T09:38:02.9729581Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9729685Z               "line": 811
2026-06-23T09:38:02.9729791Z             },
2026-06-23T09:38:02.9729881Z             {
2026-06-23T09:38:02.9730023Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9730139Z               "line": 822
2026-06-23T09:38:02.9730239Z             },
2026-06-23T09:38:02.9730343Z             {
2026-06-23T09:38:02.9730473Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9730582Z               "line": 835
2026-06-23T09:38:02.9730677Z             }
2026-06-23T09:38:02.9730773Z           ]
2026-06-23T09:38:02.9730881Z         }
2026-06-23T09:38:02.9730982Z       }
2026-06-23T09:38:02.9731084Z     },
2026-06-23T09:38:02.9731186Z     {
2026-06-23T09:38:02.9731331Z       "id": "REQ-HAZARD-INJECT-CONTROL-COEXIST",
2026-06-23T09:38:02.9741503Z       "title": "SPINE INVARIANT (v0.13.0 keystone): the broker must accept INJECTED keystrokes into an spt-hosted PTY (the v0.11.0 raw direct-inject today; the ADR-0022 translation-binary choreography tomorrow) WHILE a live `spt rc` controller is attached to the SAME PTY, without (a) the operator losing control, (b) the endpoint latching ONLINE+CONTROLLED, or (c) the broker wedging. The injection inlet is PERMANENT — spt-claude-code requires keystroke injection — so this is root-caused + fixed at the PTY-injection layer, IN STEP with the ADR-0022 delivery redesign that formalizes the inlet. REOPENS the wedge facet of REQ-HAZARD-ATTACH-WEDGE: the v0.12.1 prove-don't-change covered only DEAD-CHILD backpressure, NOT the injection trigger (operator's signal — one injected keystroke succeeds, the next wedges → the single-threaded broker parks on a blocking PTY/loopback write after injection-induced harness output). REPRO-FIRST on the real dummy-harness fixture (NO theory): instrument to nail the exact blocking call before any fix. Fix candidates: non-blocking/fail-fast PTY write, split input/output, bounded-evicting. Mechanism shared with W2 — spt-core owns EVERY PTY write and applies an injected sequence ATOMICALLY (controller input buffered during the sequence, flushed after) so a stash/restore can't be clobbered. CONFIRMED ROOT (doyle /diagnose 2026-06-19, code-grounded): Broker::append (broker.rs:205-227) fans each live output chunk to the CONTROLLER on a SYNCHRONOUS BLOCKING write_frame held inline in the session's drain thread (the 'authoritative, advances delivered_through' path, D4-1), while VIEWERS use a dedicated writer thread + bounded evicting sync_channel (add_viewer:273 / viewer_writer) that can never stall the drain. So a slow/backed-up controller socket — or the full 64KB loopback duplex (the ATTACH-WEDGE buffer) — BLOCKS the drain thread → output stalls → keystroke echoes stall (PERCEIVED input lag) → unrecoverable wedge when the consumer never drains. TRIGGERS ON NORMAL INTERACTIVE rc USE under heavy harness output (TUI redraw), NOT only message injection — same root, wider repro. FIX DIRECTION: move controller delivery off the drain thread onto a dedicated writer (the viewer_writer pattern) BUT preserve the authoritative cursor — block the WRITER thread (not the drain), bound the wedge (deadline → detach/mark-gone, never park forever), never silently evict the operator's authoritative view. (v0.13.0)",
2026-06-23T09:38:02.9741780Z       "requiredStages": [
2026-06-23T09:38:02.9741886Z         "impl",
2026-06-23T09:38:02.9741997Z         "unit",
2026-06-23T09:38:02.9742099Z         "int"
2026-06-23T09:38:02.9742203Z       ],
2026-06-23T09:38:02.9742314Z       "stages": {
2026-06-23T09:38:02.9742416Z         "doc": {
2026-06-23T09:38:02.9742535Z           "complete": false,
2026-06-23T09:38:02.9742631Z           "evidence": []
2026-06-23T09:38:02.9742735Z         },
2026-06-23T09:38:02.9742840Z         "impl": {
2026-06-23T09:38:02.9742965Z           "complete": true,
2026-06-23T09:38:02.9743083Z           "evidence": [
2026-06-23T09:38:02.9743189Z             {
2026-06-23T09:38:02.9743337Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9743446Z               "line": 322
2026-06-23T09:38:02.9743547Z             },
2026-06-23T09:38:02.9743632Z             {
2026-06-23T09:38:02.9743765Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9743876Z               "line": 759
2026-06-23T09:38:02.9743975Z             },
2026-06-23T09:38:02.9744080Z             {
2026-06-23T09:38:02.9744205Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9744318Z               "line": 1098
2026-06-23T09:38:02.9744414Z             }
2026-06-23T09:38:02.9744511Z           ]
2026-06-23T09:38:02.9744619Z         },
2026-06-23T09:38:02.9744722Z         "int": {
2026-06-23T09:38:02.9744847Z           "complete": true,
2026-06-23T09:38:02.9744950Z           "evidence": [
2026-06-23T09:38:02.9745058Z             {
2026-06-23T09:38:02.9745241Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:02.9745340Z               "line": 343
2026-06-23T09:38:02.9745440Z             },
2026-06-23T09:38:02.9745546Z             {
2026-06-23T09:38:02.9745721Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:02.9745818Z               "line": 469
2026-06-23T09:38:02.9745927Z             }
2026-06-23T09:38:02.9746031Z           ]
2026-06-23T09:38:02.9746133Z         },
2026-06-23T09:38:02.9746246Z         "unit": {
2026-06-23T09:38:02.9746351Z           "complete": true,
2026-06-23T09:38:02.9746462Z           "evidence": [
2026-06-23T09:38:02.9746561Z             {
2026-06-23T09:38:02.9746710Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9746814Z               "line": 2775
2026-06-23T09:38:02.9746919Z             }
2026-06-23T09:38:02.9747024Z           ]
2026-06-23T09:38:02.9747129Z         }
2026-06-23T09:38:02.9747233Z       }
2026-06-23T09:38:02.9747335Z     },
2026-06-23T09:38:02.9747519Z     {
2026-06-23T09:38:02.9747680Z       "id": "REQ-HAZARD-INPUT-ACK-BACKPRESSURE",
2026-06-23T09:38:02.9754989Z       "title": "A FLOOD of operator input on one brain↔broker connection deadlocks the broker PERMANENTLY (entire broker — no new/existing attach; the controller stays latched because the per-conn handler can't process the detach). ROOT (doyle /diagnose, code-grounded + HITL capture, the v0.13.0 P1 ctrl+V re-open): `serve_attach` processes a whole `NetStreamData` batch of N operator `Input` records in its inner `for rec in decoder.push()` loop, calling `brain.send_effect(op_id, &bytes)` N times WITHOUT returning to `read_event()` — so the brain writes N `KIND_INPUT` frames back-to-back and drains nothing. The broker's single-threaded per-conn handler answers EACH with `send_frame(applied_envelope)` on the SAME conn (B5 exactly-once ack, KNOWN-HAZARDS 7.2). With the brain not reading, the broker→brain return direction fills (~10 frames = the IPC pipe buffer) → `send_frame` BLOCKS → the handler stops reading → the brain's writes block too → mutual full-duplex DEADLOCK. Capture pinned it: 11 input frames, write_input 11/11 (P0 holds — the PTY write is fine), ack send START=11 / END=10 (frame #11's applied-ack never returns). Same class as the v0.12.1 L0 two-conn split. Windows Terminal's ctrl+V paste accelerator was the trigger (injects the clipboard as a char-by-char key flood) but the deadlock is generic to ANY input flood, NOT ctrl+V-specific and NOT a P0 (PTY-write) or W1 (output-drain) regression. The applied-ack is load-bearing ONLY for `shellchan` (one-at-a-time spool delivery WAITS on `BrokerEvent::Applied`); `serve_attach` DISCARDS it (the operator/rc path is fire-and-forward, op_id for dedup only, never gates on the ack). FIX (doyle-approved): CONDITIONAL ACK — `InputReq` gains `ack: bool` (serde default = true, N-1-safe: an older brain's input still acks = today's behavior). `serve_attach`'s operator path calls `send_effect_no_ack` (ack=false) → `dispatch_input` writes NO applied frame → the per-conn handler never writes back while servicing the flood → it always drains → no deadlock (cures ANY input flood). `shellchan` keeps `send_effect` (ack=true) and its `Applied`-wait. Exactly-once PRESERVED: the broker still dedups by (session, op_id) at the applied-set regardless of the ack. N-1 caveat: an OLD resident broker (self-update window) ignores `ack=false` → still acks → the deadlock persists until a broker restart (inherent KNOWN-HAZARDS 7.9 broker-resident-wire-change class). (v0.13.0)",
2026-06-23T09:38:02.9755274Z       "requiredStages": [
2026-06-23T09:38:02.9755373Z         "doc",
2026-06-23T09:38:02.9755477Z         "impl",
2026-06-23T09:38:02.9755581Z         "unit",
2026-06-23T09:38:02.9755681Z         "int"
2026-06-23T09:38:02.9755782Z       ],
2026-06-23T09:38:02.9755881Z       "stages": {
2026-06-23T09:38:02.9755986Z         "doc": {
2026-06-23T09:38:02.9756106Z           "complete": true,
2026-06-23T09:38:02.9756215Z           "evidence": [
2026-06-23T09:38:02.9756316Z             {
2026-06-23T09:38:02.9756454Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9756563Z               "line": 454
2026-06-23T09:38:02.9756669Z             }
2026-06-23T09:38:02.9756763Z           ]
2026-06-23T09:38:02.9756873Z         },
2026-06-23T09:38:02.9756984Z         "impl": {
2026-06-23T09:38:02.9757092Z           "complete": true,
2026-06-23T09:38:02.9757212Z           "evidence": [
2026-06-23T09:38:02.9757304Z             {
2026-06-23T09:38:02.9757450Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:02.9757560Z               "line": 355
2026-06-23T09:38:02.9757661Z             },
2026-06-23T09:38:02.9757769Z             {
2026-06-23T09:38:02.9757909Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9758023Z               "line": 493
2026-06-23T09:38:02.9758122Z             },
2026-06-23T09:38:02.9758226Z             {
2026-06-23T09:38:02.9758366Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9758575Z               "line": 1839
2026-06-23T09:38:02.9758685Z             },
2026-06-23T09:38:02.9758789Z             {
2026-06-23T09:38:02.9758924Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9759113Z               "line": 383
2026-06-23T09:38:02.9759219Z             }
2026-06-23T09:38:02.9759324Z           ]
2026-06-23T09:38:02.9759428Z         },
2026-06-23T09:38:02.9759629Z         "int": {
2026-06-23T09:38:02.9759733Z           "complete": true,
2026-06-23T09:38:02.9759839Z           "evidence": [
2026-06-23T09:38:02.9759944Z             {
2026-06-23T09:38:02.9760095Z               "path": "crates/spt-daemon/tests/broker.rs",
2026-06-23T09:38:02.9760197Z               "line": 745
2026-06-23T09:38:02.9760295Z             },
2026-06-23T09:38:02.9760395Z             {
2026-06-23T09:38:02.9760542Z               "path": "crates/spt-daemon/tests/broker.rs",
2026-06-23T09:38:02.9760650Z               "line": 862
2026-06-23T09:38:02.9760750Z             },
2026-06-23T09:38:02.9760860Z             {
2026-06-23T09:38:02.9761026Z               "path": "crates/spt-daemon/tests/input_ack_deadlock.rs",
2026-06-23T09:38:02.9761137Z               "line": 268
2026-06-23T09:38:02.9761246Z             }
2026-06-23T09:38:02.9761351Z           ]
2026-06-23T09:38:02.9761437Z         },
2026-06-23T09:38:02.9761542Z         "unit": {
2026-06-23T09:38:02.9761656Z           "complete": true,
2026-06-23T09:38:02.9761767Z           "evidence": [
2026-06-23T09:38:02.9761871Z             {
2026-06-23T09:38:02.9762004Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9762101Z               "line": 1082
2026-06-23T09:38:02.9762210Z             },
2026-06-23T09:38:02.9762309Z             {
2026-06-23T09:38:02.9762449Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:02.9762562Z               "line": 1116
2026-06-23T09:38:02.9762667Z             }
2026-06-23T09:38:02.9762773Z           ]
2026-06-23T09:38:02.9762867Z         }
2026-06-23T09:38:02.9762977Z       }
2026-06-23T09:38:02.9763078Z     },
2026-06-23T09:38:02.9763177Z     {
2026-06-23T09:38:02.9763314Z       "id": "REQ-HAZARD-INSTANT-UNDERFLOW",
2026-06-23T09:38:02.9763922Z       "title": "Scheduling never subtracts a Duration from Instant::now() (underflow-panics on a host booted more recently than the offset); 'due now / never run' is Option<Instant>=None gated on forward duration_since only (5.9)",
2026-06-23T09:38:02.9764047Z       "requiredStages": [
2026-06-23T09:38:02.9764148Z         "impl",
2026-06-23T09:38:02.9764256Z         "unit"
2026-06-23T09:38:02.9764357Z       ],
2026-06-23T09:38:02.9764462Z       "stages": {
2026-06-23T09:38:02.9764575Z         "doc": {
2026-06-23T09:38:02.9764681Z           "complete": false,
2026-06-23T09:38:02.9764790Z           "evidence": []
2026-06-23T09:38:02.9764895Z         },
2026-06-23T09:38:02.9764996Z         "impl": {
2026-06-23T09:38:02.9765105Z           "complete": true,
2026-06-23T09:38:02.9765210Z           "evidence": [
2026-06-23T09:38:02.9765306Z             {
2026-06-23T09:38:02.9765452Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9765559Z               "line": 759
2026-06-23T09:38:02.9765664Z             }
2026-06-23T09:38:02.9765767Z           ]
2026-06-23T09:38:02.9765871Z         },
2026-06-23T09:38:02.9765981Z         "int": {
2026-06-23T09:38:02.9766098Z           "complete": false,
2026-06-23T09:38:02.9766212Z           "evidence": []
2026-06-23T09:38:02.9766318Z         },
2026-06-23T09:38:02.9766418Z         "unit": {
2026-06-23T09:38:02.9766537Z           "complete": true,
2026-06-23T09:38:02.9766642Z           "evidence": [
2026-06-23T09:38:02.9766737Z             {
2026-06-23T09:38:02.9766881Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9766985Z               "line": 873
2026-06-23T09:38:02.9767094Z             }
2026-06-23T09:38:02.9767191Z           ]
2026-06-23T09:38:02.9767300Z         }
2026-06-23T09:38:02.9767390Z       }
2026-06-23T09:38:02.9767615Z     },
2026-06-23T09:38:02.9767719Z     {
2026-06-23T09:38:02.9767873Z       "id": "REQ-HAZARD-LIVEHOST-BOOT-LIVENESS-GATE",
2026-06-23T09:38:02.9770360Z       "title": "B5: `spt daemon start` does NOT revive phantom Psyches for dead-but-online-latched perches. Today reconcile_once (livehost.rs:285) spawns a Psyche per status=online live_agent perch at boot WITHOUT verifying the harness child / {id}-psyche is actually alive — so a Cold start after an unclean stop revives N psyches for N dead-but-latched perches (3 psyches for 3 dead perches). FIX: gate the boot psyche-spawn on real child-liveness — a perch with NO live broker session (the B2 reconcile signal) is marked OFFLINE at boot instead of hosted, so a dead-harness perch is never revived. Shares the B2 reconcile loop (this is its boot-gate arm); composes with B2's honest latch. Also closes wall-a's psyche_host_error gap (residency-confirm does not run at boot tick-1, livehost.rs:395-441 / 257-263). (v0.12.0)",
2026-06-23T09:38:02.9770598Z       "requiredStages": [
2026-06-23T09:38:02.9770704Z         "impl",
2026-06-23T09:38:02.9770813Z         "unit",
2026-06-23T09:38:02.9770917Z         "int"
2026-06-23T09:38:02.9771022Z       ],
2026-06-23T09:38:02.9771131Z       "stages": {
2026-06-23T09:38:02.9771234Z         "doc": {
2026-06-23T09:38:02.9771339Z           "complete": false,
2026-06-23T09:38:02.9771445Z           "evidence": []
2026-06-23T09:38:02.9771549Z         },
2026-06-23T09:38:02.9771649Z         "impl": {
2026-06-23T09:38:02.9771755Z           "complete": true,
2026-06-23T09:38:02.9771859Z           "evidence": [
2026-06-23T09:38:02.9771963Z             {
2026-06-23T09:38:02.9772117Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9772226Z               "line": 756
2026-06-23T09:38:02.9772327Z             }
2026-06-23T09:38:02.9772431Z           ]
2026-06-23T09:38:02.9772536Z         },
2026-06-23T09:38:02.9772641Z         "int": {
2026-06-23T09:38:02.9772755Z           "complete": true,
2026-06-23T09:38:02.9772860Z           "evidence": [
2026-06-23T09:38:02.9772961Z             {
2026-06-23T09:38:02.9773127Z               "path": "crates/spt/tests/livehost_bootgate_e2e.rs",
2026-06-23T09:38:02.9773237Z               "line": 24
2026-06-23T09:38:02.9773342Z             }
2026-06-23T09:38:02.9773437Z           ]
2026-06-23T09:38:02.9773542Z         },
2026-06-23T09:38:02.9773648Z         "unit": {
2026-06-23T09:38:02.9773761Z           "complete": true,
2026-06-23T09:38:02.9773870Z           "evidence": [
2026-06-23T09:38:02.9773970Z             {
2026-06-23T09:38:02.9774116Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9774230Z               "line": 969
2026-06-23T09:38:02.9774331Z             }
2026-06-23T09:38:02.9774440Z           ]
2026-06-23T09:38:02.9774535Z         }
2026-06-23T09:38:02.9774641Z       }
2026-06-23T09:38:02.9774736Z     },
2026-06-23T09:38:02.9774835Z     {
2026-06-23T09:38:02.9774965Z       "id": "REQ-HAZARD-LIVEHOST-BOOT-RACE",
2026-06-23T09:38:02.9778656Z       "title": "The brain's daemon-hosted Psyche lifecycle surfaces a host-FAILURE on the live perch (harness-diagnosable) and runs net-INDEPENDENTLY. When reconcile_once→host_one→spawn_psyche fails for a state=live_agent+status=online endpoint (e.g. the adapter's psyche binary absent from its install dir, REQ-INSTALL-11), the failure MUST be written to the perch info.json as a CURRENT-STATE field (reason + ts + attempt count; overwritten each 5s retry, CLEARED on successful host) and surfaced by `spt endpoint list`/status — never left as an eprintln on the brain's invisible stderr where a harness reading only perch state is blind. status=online stays authoritative (agent reachable; only the Psyche is missing — brain-restart rehydrate legitimately has online-without-Psyche windows), so this is a SEPARATE psyche-host-health field, never a status de-stamp. Net-independence is a locked-in invariant: spawn_live_host (brainproc.rs:230) reaches the reconcile and hosts the Psyche on a net-less/unpaired/peer-pump-STALLED node, proven by a REAL detached-daemon E2E (real broker→brain-child, real api seed+listen, real install-dir psyche binary). spt-core SURFACES the failure; the adapter owns fixing its packaging.",
2026-06-23T09:38:02.9778791Z       "requiredStages": [
2026-06-23T09:38:02.9778899Z         "impl",
2026-06-23T09:38:02.9779072Z         "unit",
2026-06-23T09:38:02.9779176Z         "int"
2026-06-23T09:38:02.9779380Z       ],
2026-06-23T09:38:02.9779486Z       "stages": {
2026-06-23T09:38:02.9779590Z         "doc": {
2026-06-23T09:38:02.9779695Z           "complete": false,
2026-06-23T09:38:02.9779805Z           "evidence": []
2026-06-23T09:38:02.9779895Z         },
2026-06-23T09:38:02.9780005Z         "impl": {
2026-06-23T09:38:02.9780115Z           "complete": true,
2026-06-23T09:38:02.9780224Z           "evidence": [
2026-06-23T09:38:02.9780325Z             {
2026-06-23T09:38:02.9780477Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9780586Z               "line": 396
2026-06-23T09:38:02.9780688Z             },
2026-06-23T09:38:02.9780796Z             {
2026-06-23T09:38:02.9780940Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9781045Z               "line": 343
2026-06-23T09:38:02.9781154Z             },
2026-06-23T09:38:02.9781254Z             {
2026-06-23T09:38:02.9781383Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9781492Z               "line": 2104
2026-06-23T09:38:02.9781601Z             },
2026-06-23T09:38:02.9781710Z             {
2026-06-23T09:38:02.9781832Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9781947Z               "line": 3846
2026-06-23T09:38:02.9782048Z             }
2026-06-23T09:38:02.9782152Z           ]
2026-06-23T09:38:02.9782242Z         },
2026-06-23T09:38:02.9782339Z         "int": {
2026-06-23T09:38:02.9782452Z           "complete": true,
2026-06-23T09:38:02.9782557Z           "evidence": [
2026-06-23T09:38:02.9782667Z             {
2026-06-23T09:38:02.9782824Z               "path": "crates/spt/tests/livehost_bootrace_e2e.rs",
2026-06-23T09:38:02.9782935Z               "line": 353
2026-06-23T09:38:02.9783039Z             },
2026-06-23T09:38:02.9783148Z             {
2026-06-23T09:38:02.9783315Z               "path": "crates/spt/tests/livehost_psyche_fail_e2e.rs",
2026-06-23T09:38:02.9783425Z               "line": 23
2026-06-23T09:38:02.9783531Z             }
2026-06-23T09:38:02.9783635Z           ]
2026-06-23T09:38:02.9783735Z         },
2026-06-23T09:38:02.9783841Z         "unit": {
2026-06-23T09:38:02.9783954Z           "complete": true,
2026-06-23T09:38:02.9784064Z           "evidence": [
2026-06-23T09:38:02.9784165Z             {
2026-06-23T09:38:02.9784307Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9784410Z               "line": 743
2026-06-23T09:38:02.9784516Z             },
2026-06-23T09:38:02.9784614Z             {
2026-06-23T09:38:02.9784742Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9784852Z               "line": 9240
2026-06-23T09:38:02.9784953Z             }
2026-06-23T09:38:02.9785056Z           ]
2026-06-23T09:38:02.9785149Z         }
2026-06-23T09:38:02.9785248Z       }
2026-06-23T09:38:02.9785348Z     },
2026-06-23T09:38:02.9785449Z     {
2026-06-23T09:38:02.9785582Z       "id": "REQ-HAZARD-LIVEHOST-NONRESIDENT",
2026-06-23T09:38:02.9789060Z       "title": "A daemon-hosted Psyche that spawns then EXITS IMMEDIATELY is a host failure, surfaced like a spawn failure (closes the v0.8.1 residual masking): the REQ-HAZARD-LIVEHOST-BOOT-RACE signal stamps `psyche_host_error` only when `spawn_psyche` returns Err, NOT when the detached spawn() returns Ok but the child dies within moments (e.g. a bad-argv child exiting 2 — the F-009 case). That leaves the residual 'online + no Psyche + no cause' gap: the nested `{id}-psyche` info.json is written status=online with a real-but-DEAD pid and the PARENT perch carries NO psyche_host_error (perri's F-010: tasklist showed 0 host procs across the window while info.json read online). The host MUST confirm RESIDENCY — a hosted child not alive (or whose `{id}-psyche` perch never re-registers / has a dead pid) within N seconds of spawn is treated as a host failure: stamp the parent perch `psyche_host_error{reason:\"host not resident within <n>s (psyche perch missing/dead pid)\"}` (and do not leave a phantom online nested perch). Closes the last masking gap the v0.8.1 fix left open. perri's F-010 (v0.8.1 dogfood). Sibling of REQ-HAZARD-LIVEHOST-BOOT-RACE.",
2026-06-23T09:38:02.9789294Z       "requiredStages": [
2026-06-23T09:38:02.9789403Z         "impl",
2026-06-23T09:38:02.9789507Z         "unit",
2026-06-23T09:38:02.9789614Z         "int"
2026-06-23T09:38:02.9789722Z       ],
2026-06-23T09:38:02.9789826Z       "stages": {
2026-06-23T09:38:02.9789926Z         "doc": {
2026-06-23T09:38:02.9790032Z           "complete": false,
2026-06-23T09:38:02.9790140Z           "evidence": []
2026-06-23T09:38:02.9790241Z         },
2026-06-23T09:38:02.9790346Z         "impl": {
2026-06-23T09:38:02.9790464Z           "complete": true,
2026-06-23T09:38:02.9790570Z           "evidence": [
2026-06-23T09:38:02.9790670Z             {
2026-06-23T09:38:02.9790822Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9790928Z               "line": 64
2026-06-23T09:38:02.9791032Z             },
2026-06-23T09:38:02.9791137Z             {
2026-06-23T09:38:02.9791286Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9791390Z               "line": 78
2026-06-23T09:38:02.9791495Z             },
2026-06-23T09:38:02.9791601Z             {
2026-06-23T09:38:02.9791742Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9791853Z               "line": 170
2026-06-23T09:38:02.9791953Z             },
2026-06-23T09:38:02.9792061Z             {
2026-06-23T09:38:02.9792195Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9792307Z               "line": 185
2026-06-23T09:38:02.9792411Z             },
2026-06-23T09:38:02.9792517Z             {
2026-06-23T09:38:02.9792655Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9792769Z               "line": 195
2026-06-23T09:38:02.9792875Z             },
2026-06-23T09:38:02.9792974Z             {
2026-06-23T09:38:02.9793122Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9793227Z               "line": 205
2026-06-23T09:38:02.9793341Z             },
2026-06-23T09:38:02.9793437Z             {
2026-06-23T09:38:02.9793580Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9793689Z               "line": 299
2026-06-23T09:38:02.9793791Z             },
2026-06-23T09:38:02.9793899Z             {
2026-06-23T09:38:02.9794042Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9794153Z               "line": 313
2026-06-23T09:38:02.9794257Z             },
2026-06-23T09:38:02.9794357Z             {
2026-06-23T09:38:02.9794510Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9794615Z               "line": 382
2026-06-23T09:38:02.9794720Z             },
2026-06-23T09:38:02.9794815Z             {
2026-06-23T09:38:02.9794957Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9795071Z               "line": 442
2026-06-23T09:38:02.9795170Z             },
2026-06-23T09:38:02.9795278Z             {
2026-06-23T09:38:02.9795427Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9795541Z               "line": 460
2026-06-23T09:38:02.9795636Z             }
2026-06-23T09:38:02.9795742Z           ]
2026-06-23T09:38:02.9795846Z         },
2026-06-23T09:38:02.9795941Z         "int": {
2026-06-23T09:38:02.9796057Z           "complete": true,
2026-06-23T09:38:02.9796161Z           "evidence": [
2026-06-23T09:38:02.9796270Z             {
2026-06-23T09:38:02.9796433Z               "path": "crates/spt/tests/livehost_bootrace_e2e.rs",
2026-06-23T09:38:02.9796547Z               "line": 45
2026-06-23T09:38:02.9796762Z             },
2026-06-23T09:38:02.9796867Z             {
2026-06-23T09:38:02.9797034Z               "path": "crates/spt/tests/livehost_bootrace_e2e.rs",
2026-06-23T09:38:02.9797147Z               "line": 354
2026-06-23T09:38:02.9797254Z             },
2026-06-23T09:38:02.9797358Z             {
2026-06-23T09:38:02.9797533Z               "path": "crates/spt/tests/livehost_nonresident_e2e.rs",
2026-06-23T09:38:02.9797718Z               "line": 31
2026-06-23T09:38:02.9797817Z             }
2026-06-23T09:38:02.9797922Z           ]
2026-06-23T09:38:02.9798023Z         },
2026-06-23T09:38:02.9798132Z         "unit": {
2026-06-23T09:38:02.9798251Z           "complete": true,
2026-06-23T09:38:02.9798361Z           "evidence": [
2026-06-23T09:38:02.9798465Z             {
2026-06-23T09:38:02.9798609Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:02.9798723Z               "line": 778
2026-06-23T09:38:02.9798822Z             }
2026-06-23T09:38:02.9798928Z           ]
2026-06-23T09:38:02.9799128Z         }
2026-06-23T09:38:02.9799234Z       }
2026-06-23T09:38:02.9799338Z     },
2026-06-23T09:38:02.9799438Z     {
2026-06-23T09:38:02.9799572Z       "id": "REQ-HAZARD-LOCAL-API-AUTH",
2026-06-23T09:38:02.9799815Z       "title": "Every local `api` mutation authenticated to an endpoint/session (codex #13)",
2026-06-23T09:38:02.9799935Z       "requiredStages": [
2026-06-23T09:38:02.9800039Z         "impl",
2026-06-23T09:38:02.9800145Z         "unit"
2026-06-23T09:38:02.9800250Z       ],
2026-06-23T09:38:02.9800353Z       "stages": {
2026-06-23T09:38:02.9800462Z         "doc": {
2026-06-23T09:38:02.9800573Z           "complete": false,
2026-06-23T09:38:02.9800681Z           "evidence": []
2026-06-23T09:38:02.9800776Z         },
2026-06-23T09:38:02.9800883Z         "impl": {
2026-06-23T09:38:02.9800992Z           "complete": true,
2026-06-23T09:38:02.9801101Z           "evidence": [
2026-06-23T09:38:02.9801207Z             {
2026-06-23T09:38:02.9801344Z               "path": "crates/spt/src/api/auth.rs",
2026-06-23T09:38:02.9801450Z               "line": 14
2026-06-23T09:38:02.9801545Z             },
2026-06-23T09:38:02.9801654Z             {
2026-06-23T09:38:02.9801784Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:02.9801893Z               "line": 566
2026-06-23T09:38:02.9801997Z             }
2026-06-23T09:38:02.9802094Z           ]
2026-06-23T09:38:02.9802198Z         },
2026-06-23T09:38:02.9802307Z         "int": {
2026-06-23T09:38:02.9802423Z           "complete": false,
2026-06-23T09:38:02.9802536Z           "evidence": []
2026-06-23T09:38:02.9802636Z         },
2026-06-23T09:38:02.9802745Z         "unit": {
2026-06-23T09:38:02.9802854Z           "complete": true,
2026-06-23T09:38:02.9802962Z           "evidence": [
2026-06-23T09:38:02.9803067Z             {
2026-06-23T09:38:02.9803201Z               "path": "crates/spt/src/api/auth.rs",
2026-06-23T09:38:02.9803319Z               "line": 130
2026-06-23T09:38:02.9803416Z             },
2026-06-23T09:38:02.9803516Z             {
2026-06-23T09:38:02.9803648Z               "path": "crates/spt/src/api/auth.rs",
2026-06-23T09:38:02.9803768Z               "line": 138
2026-06-23T09:38:02.9803873Z             },
2026-06-23T09:38:02.9803978Z             {
2026-06-23T09:38:02.9804116Z               "path": "crates/spt/src/api/auth.rs",
2026-06-23T09:38:02.9804216Z               "line": 146
2026-06-23T09:38:02.9804317Z             },
2026-06-23T09:38:02.9804426Z             {
2026-06-23T09:38:02.9804559Z               "path": "crates/spt/src/api/auth.rs",
2026-06-23T09:38:02.9804666Z               "line": 154
2026-06-23T09:38:02.9804764Z             },
2026-06-23T09:38:02.9804869Z             {
2026-06-23T09:38:02.9805000Z               "path": "crates/spt/src/api/auth.rs",
2026-06-23T09:38:02.9805107Z               "line": 162
2026-06-23T09:38:02.9805213Z             },
2026-06-23T09:38:02.9805319Z             {
2026-06-23T09:38:02.9805451Z               "path": "crates/spt/src/api/auth.rs",
2026-06-23T09:38:02.9805559Z               "line": 170
2026-06-23T09:38:02.9805791Z             }
2026-06-23T09:38:02.9805896Z           ]
2026-06-23T09:38:02.9805992Z         }
2026-06-23T09:38:02.9806091Z       }
2026-06-23T09:38:02.9806201Z     },
2026-06-23T09:38:02.9806293Z     {
2026-06-23T09:38:02.9806425Z       "id": "REQ-HAZARD-PAIR-RATE-LIMIT",
2026-06-23T09:38:02.9807355Z       "title": "Subnet-global pairing rate limit: one active ceremony per subnet, shared attempt counter, exponential backoff — a public pre-trust relay + multiple seed-holders otherwise enables distributed SPAKE2 guessing (and ±1 TOTP window triples the valid-password space) (ADR-0005 #11)",
2026-06-23T09:38:02.9807576Z       "requiredStages": [
2026-06-23T09:38:02.9807674Z         "impl",
2026-06-23T09:38:02.9807780Z         "unit"
2026-06-23T09:38:02.9807886Z       ],
2026-06-23T09:38:02.9807989Z       "stages": {
2026-06-23T09:38:02.9808093Z         "doc": {
2026-06-23T09:38:02.9808208Z           "complete": false,
2026-06-23T09:38:02.9808315Z           "evidence": []
2026-06-23T09:38:02.9808419Z         },
2026-06-23T09:38:02.9808525Z         "impl": {
2026-06-23T09:38:02.9808635Z           "complete": true,
2026-06-23T09:38:02.9808743Z           "evidence": [
2026-06-23T09:38:02.9808845Z             {
2026-06-23T09:38:02.9809082Z               "path": "crates/spt-net/src/net/pairing/ratelimit.rs",
2026-06-23T09:38:02.9809183Z               "line": 34
2026-06-23T09:38:02.9809288Z             }
2026-06-23T09:38:02.9809392Z           ]
2026-06-23T09:38:02.9809498Z         },
2026-06-23T09:38:02.9809607Z         "int": {
2026-06-23T09:38:02.9809712Z           "complete": false,
2026-06-23T09:38:02.9809827Z           "evidence": []
2026-06-23T09:38:02.9809927Z         },
2026-06-23T09:38:02.9810027Z         "unit": {
2026-06-23T09:38:02.9810137Z           "complete": true,
2026-06-23T09:38:02.9810241Z           "evidence": [
2026-06-23T09:38:02.9810341Z             {
2026-06-23T09:38:02.9810509Z               "path": "crates/spt-net/src/net/pairing/ratelimit.rs",
2026-06-23T09:38:02.9810618Z               "line": 188
2026-06-23T09:38:02.9810719Z             },
2026-06-23T09:38:02.9810824Z             {
2026-06-23T09:38:02.9810989Z               "path": "crates/spt-net/src/net/pairing/ratelimit.rs",
2026-06-23T09:38:02.9811099Z               "line": 200
2026-06-23T09:38:02.9811209Z             },
2026-06-23T09:38:02.9811303Z             {
2026-06-23T09:38:02.9811476Z               "path": "crates/spt-net/src/net/pairing/ratelimit.rs",
2026-06-23T09:38:02.9811585Z               "line": 211
2026-06-23T09:38:02.9811691Z             },
2026-06-23T09:38:02.9811791Z             {
2026-06-23T09:38:02.9811957Z               "path": "crates/spt-net/src/net/pairing/ratelimit.rs",
2026-06-23T09:38:02.9812067Z               "line": 253
2026-06-23T09:38:02.9812162Z             },
2026-06-23T09:38:02.9812271Z             {
2026-06-23T09:38:02.9812430Z               "path": "crates/spt-net/src/net/pairing/ratelimit.rs",
2026-06-23T09:38:02.9812539Z               "line": 277
2026-06-23T09:38:02.9812645Z             },
2026-06-23T09:38:02.9812749Z             {
2026-06-23T09:38:02.9812906Z               "path": "crates/spt-net/src/net/pairing/ratelimit.rs",
2026-06-23T09:38:02.9813017Z               "line": 300
2026-06-23T09:38:02.9813120Z             },
2026-06-23T09:38:02.9813215Z             {
2026-06-23T09:38:02.9813381Z               "path": "crates/spt-net/src/net/pairing/ratelimit.rs",
2026-06-23T09:38:02.9813489Z               "line": 316
2026-06-23T09:38:02.9813594Z             }
2026-06-23T09:38:02.9813699Z           ]
2026-06-23T09:38:02.9813803Z         }
2026-06-23T09:38:02.9813908Z       }
2026-06-23T09:38:02.9814005Z     },
2026-06-23T09:38:02.9814114Z     {
2026-06-23T09:38:02.9814248Z       "id": "REQ-HAZARD-PAIR-SEED-ROTATION",
2026-06-23T09:38:02.9814814Z       "title": "Removing a node rotates the subnet seed (epoch bump) so an old node/old seed cannot rejoin; trust-store delete alone is NOT revocation because the seed is replicated to every trusted node (ADR-0005 #10)",
2026-06-23T09:38:02.9815039Z       "requiredStages": [
2026-06-23T09:38:02.9815143Z         "impl",
2026-06-23T09:38:02.9815250Z         "unit"
2026-06-23T09:38:02.9815339Z       ],
2026-06-23T09:38:02.9815453Z       "stages": {
2026-06-23T09:38:02.9815560Z         "doc": {
2026-06-23T09:38:02.9815668Z           "complete": false,
2026-06-23T09:38:02.9815773Z           "evidence": []
2026-06-23T09:38:02.9815865Z         },
2026-06-23T09:38:02.9816068Z         "impl": {
2026-06-23T09:38:02.9816182Z           "complete": true,
2026-06-23T09:38:02.9816295Z           "evidence": [
2026-06-23T09:38:02.9816399Z             {
2026-06-23T09:38:02.9816548Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9816671Z               "line": 29
2026-06-23T09:38:02.9816770Z             },
2026-06-23T09:38:02.9816881Z             {
2026-06-23T09:38:02.9817023Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9817124Z               "line": 174
2026-06-23T09:38:02.9817229Z             },
2026-06-23T09:38:02.9817338Z             {
2026-06-23T09:38:02.9817482Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9817591Z               "line": 194
2026-06-23T09:38:02.9817701Z             },
2026-06-23T09:38:02.9817802Z             {
2026-06-23T09:38:02.9817944Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9818049Z               "line": 222
2026-06-23T09:38:02.9818159Z             }
2026-06-23T09:38:02.9818268Z           ]
2026-06-23T09:38:02.9818369Z         },
2026-06-23T09:38:02.9818474Z         "int": {
2026-06-23T09:38:02.9818587Z           "complete": false,
2026-06-23T09:38:02.9818696Z           "evidence": []
2026-06-23T09:38:02.9818801Z         },
2026-06-23T09:38:02.9818909Z         "unit": {
2026-06-23T09:38:02.9819114Z           "complete": true,
2026-06-23T09:38:02.9819218Z           "evidence": [
2026-06-23T09:38:02.9819318Z             {
2026-06-23T09:38:02.9819448Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9819557Z               "line": 329
2026-06-23T09:38:02.9819662Z             },
2026-06-23T09:38:02.9819762Z             {
2026-06-23T09:38:02.9819890Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9819991Z               "line": 344
2026-06-23T09:38:02.9820096Z             },
2026-06-23T09:38:02.9820187Z             {
2026-06-23T09:38:02.9820330Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9820449Z               "line": 417
2026-06-23T09:38:02.9820539Z             },
2026-06-23T09:38:02.9820645Z             {
2026-06-23T09:38:02.9820773Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9820883Z               "line": 433
2026-06-23T09:38:02.9820994Z             },
2026-06-23T09:38:02.9821092Z             {
2026-06-23T09:38:02.9821226Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9821337Z               "line": 492
2026-06-23T09:38:02.9821440Z             },
2026-06-23T09:38:02.9821544Z             {
2026-06-23T09:38:02.9821684Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9821797Z               "line": 506
2026-06-23T09:38:02.9821892Z             },
2026-06-23T09:38:02.9821989Z             {
2026-06-23T09:38:02.9822121Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9822226Z               "line": 517
2026-06-23T09:38:02.9822332Z             },
2026-06-23T09:38:02.9822436Z             {
2026-06-23T09:38:02.9822575Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:02.9822680Z               "line": 528
2026-06-23T09:38:02.9822784Z             }
2026-06-23T09:38:02.9822885Z           ]
2026-06-23T09:38:02.9822990Z         }
2026-06-23T09:38:02.9823099Z       }
2026-06-23T09:38:02.9823200Z     },
2026-06-23T09:38:02.9823305Z     {
2026-06-23T09:38:02.9823447Z       "id": "REQ-HAZARD-PAIR-TRANSCRIPT-BIND",
2026-06-23T09:38:02.9824241Z       "title": "Pairing transcript binds roles, both node pubkeys, subnet ID, seed epoch, TOTP time-step, and confirmation MACs — or unknown-key-share/reflection/wrong-subnet/replay pairing remain possible (ADR-0005 #12)",
2026-06-23T09:38:02.9824359Z       "requiredStages": [
2026-06-23T09:38:02.9824464Z         "impl",
2026-06-23T09:38:02.9824565Z         "unit"
2026-06-23T09:38:02.9824674Z       ],
2026-06-23T09:38:02.9824783Z       "stages": {
2026-06-23T09:38:02.9824894Z         "doc": {
2026-06-23T09:38:02.9825098Z           "complete": false,
2026-06-23T09:38:02.9825208Z           "evidence": []
2026-06-23T09:38:02.9825313Z         },
2026-06-23T09:38:02.9825422Z         "impl": {
2026-06-23T09:38:02.9825537Z           "complete": true,
2026-06-23T09:38:02.9825647Z           "evidence": [
2026-06-23T09:38:02.9825747Z             {
2026-06-23T09:38:02.9825913Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9826018Z               "line": 27
2026-06-23T09:38:02.9826129Z             },
2026-06-23T09:38:02.9826233Z             {
2026-06-23T09:38:02.9826401Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9826510Z               "line": 110
2026-06-23T09:38:02.9826613Z             },
2026-06-23T09:38:02.9826718Z             {
2026-06-23T09:38:02.9826869Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9826978Z               "line": 153
2026-06-23T09:38:02.9827083Z             },
2026-06-23T09:38:02.9827189Z             {
2026-06-23T09:38:02.9827345Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9827455Z               "line": 182
2026-06-23T09:38:02.9827550Z             },
2026-06-23T09:38:02.9827650Z             {
2026-06-23T09:38:02.9827833Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:02.9827936Z               "line": 31
2026-06-23T09:38:02.9828042Z             },
2026-06-23T09:38:02.9828141Z             {
2026-06-23T09:38:02.9828309Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:02.9828419Z               "line": 113
2026-06-23T09:38:02.9828528Z             },
2026-06-23T09:38:02.9828634Z             {
2026-06-23T09:38:02.9828794Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:02.9828895Z               "line": 138
2026-06-23T09:38:02.9829072Z             }
2026-06-23T09:38:02.9829176Z           ]
2026-06-23T09:38:02.9829276Z         },
2026-06-23T09:38:02.9829380Z         "int": {
2026-06-23T09:38:02.9829497Z           "complete": false,
2026-06-23T09:38:02.9829612Z           "evidence": []
2026-06-23T09:38:02.9829713Z         },
2026-06-23T09:38:02.9829821Z         "unit": {
2026-06-23T09:38:02.9829931Z           "complete": true,
2026-06-23T09:38:02.9830036Z           "evidence": [
2026-06-23T09:38:02.9830136Z             {
2026-06-23T09:38:02.9830295Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9830408Z               "line": 261
2026-06-23T09:38:02.9830508Z             },
2026-06-23T09:38:02.9830619Z             {
2026-06-23T09:38:02.9830770Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9830885Z               "line": 276
2026-06-23T09:38:02.9830985Z             },
2026-06-23T09:38:02.9831094Z             {
2026-06-23T09:38:02.9831244Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9831347Z               "line": 293
2026-06-23T09:38:02.9831457Z             },
2026-06-23T09:38:02.9831559Z             {
2026-06-23T09:38:02.9831714Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9831816Z               "line": 310
2026-06-23T09:38:02.9831911Z             },
2026-06-23T09:38:02.9832019Z             {
2026-06-23T09:38:02.9832171Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9832282Z               "line": 327
2026-06-23T09:38:02.9832386Z             },
2026-06-23T09:38:02.9832496Z             {
2026-06-23T09:38:02.9832752Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:02.9832858Z               "line": 366
2026-06-23T09:38:02.9832968Z             },
2026-06-23T09:38:02.9833067Z             {
2026-06-23T09:38:02.9833235Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:02.9833344Z               "line": 179
2026-06-23T09:38:02.9833450Z             },
2026-06-23T09:38:02.9833554Z             {
2026-06-23T09:38:02.9833831Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:02.9833945Z               "line": 194
2026-06-23T09:38:02.9834050Z             },
2026-06-23T09:38:02.9834156Z             {
2026-06-23T09:38:02.9834316Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:02.9834426Z               "line": 204
2026-06-23T09:38:02.9834534Z             },
2026-06-23T09:38:02.9834633Z             {
2026-06-23T09:38:02.9834801Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:02.9834915Z               "line": 259
2026-06-23T09:38:02.9835019Z             },
2026-06-23T09:38:02.9835120Z             {
2026-06-23T09:38:02.9835290Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:02.9835401Z               "line": 269
2026-06-23T09:38:02.9838007Z             },
2026-06-23T09:38:02.9838143Z             {
2026-06-23T09:38:02.9838335Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:02.9838463Z               "line": 283
2026-06-23T09:38:02.9838564Z             }
2026-06-23T09:38:02.9838669Z           ]
2026-06-23T09:38:02.9838773Z         }
2026-06-23T09:38:02.9838874Z       }
2026-06-23T09:38:02.9839049Z     },
2026-06-23T09:38:02.9839150Z     {
2026-06-23T09:38:02.9839294Z       "id": "REQ-HAZARD-PARENT-PID-PREFER",
2026-06-23T09:38:02.9839519Z       "title": "Prefer stable parent PID / broker handle over ephemeral PID (2.1)",
2026-06-23T09:38:02.9839642Z       "requiredStages": [],
2026-06-23T09:38:02.9839750Z       "stages": {
2026-06-23T09:38:02.9839850Z         "doc": {
2026-06-23T09:38:02.9839959Z           "complete": false,
2026-06-23T09:38:02.9840062Z           "evidence": []
2026-06-23T09:38:02.9840167Z         },
2026-06-23T09:38:02.9840268Z         "impl": {
2026-06-23T09:38:02.9840376Z           "complete": false,
2026-06-23T09:38:02.9840482Z           "evidence": []
2026-06-23T09:38:02.9840578Z         },
2026-06-23T09:38:02.9840682Z         "int": {
2026-06-23T09:38:02.9840787Z           "complete": false,
2026-06-23T09:38:02.9840902Z           "evidence": []
2026-06-23T09:38:02.9841001Z         },
2026-06-23T09:38:02.9841107Z         "unit": {
2026-06-23T09:38:02.9841221Z           "complete": false,
2026-06-23T09:38:02.9841325Z           "evidence": []
2026-06-23T09:38:02.9841426Z         }
2026-06-23T09:38:02.9841518Z       }
2026-06-23T09:38:02.9841622Z     },
2026-06-23T09:38:02.9841721Z     {
2026-06-23T09:38:02.9841874Z       "id": "REQ-HAZARD-PSYCHE-OUTBOUND-PROXY",
2026-06-23T09:38:02.9842775Z       "title": "Psyche outbound captured + sanitized: the live-Psyche turn driver captures stdout (never Stdio::null), and the daemon strips/re-stamps Psyche-supplied from=/target and constrains routing (reply→__REPLY_TO__ sender, notify→own user/subnet) (7.3)",
2026-06-23T09:38:02.9842879Z       "requiredStages": [
2026-06-23T09:38:02.9842993Z         "impl",
2026-06-23T09:38:02.9843095Z         "unit"
2026-06-23T09:38:02.9843208Z       ],
2026-06-23T09:38:02.9843308Z       "stages": {
2026-06-23T09:38:02.9843414Z         "doc": {
2026-06-23T09:38:02.9843523Z           "complete": false,
2026-06-23T09:38:02.9843632Z           "evidence": []
2026-06-23T09:38:02.9843734Z         },
2026-06-23T09:38:02.9843833Z         "impl": {
2026-06-23T09:38:02.9843952Z           "complete": true,
2026-06-23T09:38:02.9844058Z           "evidence": [
2026-06-23T09:38:02.9844162Z             {
2026-06-23T09:38:02.9844320Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9844429Z               "line": 26
2026-06-23T09:38:02.9844679Z             },
2026-06-23T09:38:02.9844781Z             {
2026-06-23T09:38:02.9844938Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9845043Z               "line": 95
2026-06-23T09:38:02.9845146Z             },
2026-06-23T09:38:02.9845250Z             {
2026-06-23T09:38:02.9845390Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9845584Z               "line": 166
2026-06-23T09:38:02.9845695Z             },
2026-06-23T09:38:02.9845789Z             {
2026-06-23T09:38:02.9845933Z               "path": "crates/spt-live/src/outbound.rs",
2026-06-23T09:38:02.9846038Z               "line": 19
2026-06-23T09:38:02.9846142Z             },
2026-06-23T09:38:02.9846228Z             {
2026-06-23T09:38:02.9846372Z               "path": "crates/spt-live/src/outbound.rs",
2026-06-23T09:38:02.9846485Z               "line": 50
2026-06-23T09:38:02.9846582Z             },
2026-06-23T09:38:02.9846686Z             {
2026-06-23T09:38:02.9846828Z               "path": "crates/spt-live/src/turn.rs",
2026-06-23T09:38:02.9846925Z               "line": 18
2026-06-23T09:38:02.9847020Z             },
2026-06-23T09:38:02.9847129Z             {
2026-06-23T09:38:02.9847263Z               "path": "crates/spt-live/src/turn.rs",
2026-06-23T09:38:02.9847372Z               "line": 71
2026-06-23T09:38:02.9847478Z             },
2026-06-23T09:38:02.9847574Z             {
2026-06-23T09:38:02.9847710Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.9847819Z               "line": 87
2026-06-23T09:38:02.9847929Z             }
2026-06-23T09:38:02.9848032Z           ]
2026-06-23T09:38:02.9848122Z         },
2026-06-23T09:38:02.9848228Z         "int": {
2026-06-23T09:38:02.9848342Z           "complete": false,
2026-06-23T09:38:02.9848451Z           "evidence": []
2026-06-23T09:38:02.9848548Z         },
2026-06-23T09:38:02.9848657Z         "unit": {
2026-06-23T09:38:02.9848776Z           "complete": true,
2026-06-23T09:38:02.9848881Z           "evidence": [
2026-06-23T09:38:02.9849042Z             {
2026-06-23T09:38:02.9849186Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9849291Z               "line": 289
2026-06-23T09:38:02.9849386Z             },
2026-06-23T09:38:02.9849492Z             {
2026-06-23T09:38:02.9849634Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9849739Z               "line": 314
2026-06-23T09:38:02.9849845Z             },
2026-06-23T09:38:02.9849948Z             {
2026-06-23T09:38:02.9850088Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9850193Z               "line": 350
2026-06-23T09:38:02.9850300Z             },
2026-06-23T09:38:02.9850405Z             {
2026-06-23T09:38:02.9850547Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9850651Z               "line": 418
2026-06-23T09:38:02.9850751Z             },
2026-06-23T09:38:02.9850862Z             {
2026-06-23T09:38:02.9850999Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9851105Z               "line": 429
2026-06-23T09:38:02.9851200Z             },
2026-06-23T09:38:02.9851299Z             {
2026-06-23T09:38:02.9851443Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9851534Z               "line": 460
2026-06-23T09:38:02.9851643Z             },
2026-06-23T09:38:02.9851744Z             {
2026-06-23T09:38:02.9851890Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:02.9851986Z               "line": 471
2026-06-23T09:38:02.9852087Z             },
2026-06-23T09:38:02.9852182Z             {
2026-06-23T09:38:02.9852316Z               "path": "crates/spt-live/src/outbound.rs",
2026-06-23T09:38:02.9852425Z               "line": 77
2026-06-23T09:38:02.9852530Z             },
2026-06-23T09:38:02.9852636Z             {
2026-06-23T09:38:02.9852782Z               "path": "crates/spt-live/src/outbound.rs",
2026-06-23T09:38:02.9852882Z               "line": 97
2026-06-23T09:38:02.9853092Z             },
2026-06-23T09:38:02.9853196Z             {
2026-06-23T09:38:02.9853335Z               "path": "crates/spt-live/src/outbound.rs",
2026-06-23T09:38:02.9853449Z               "line": 112
2026-06-23T09:38:02.9853549Z             },
2026-06-23T09:38:02.9853655Z             {
2026-06-23T09:38:02.9853796Z               "path": "crates/spt-live/src/outbound.rs",
2026-06-23T09:38:02.9853998Z               "line": 123
2026-06-23T09:38:02.9854097Z             },
2026-06-23T09:38:02.9854202Z             {
2026-06-23T09:38:02.9854341Z               "path": "crates/spt-live/src/outbound.rs",
2026-06-23T09:38:02.9854436Z               "line": 130
2026-06-23T09:38:02.9854541Z             },
2026-06-23T09:38:02.9854642Z             {
2026-06-23T09:38:02.9854774Z               "path": "crates/spt-live/src/outbound.rs",
2026-06-23T09:38:02.9854876Z               "line": 145
2026-06-23T09:38:02.9854980Z             },
2026-06-23T09:38:02.9855079Z             {
2026-06-23T09:38:02.9855219Z               "path": "crates/spt-live/src/turn.rs",
2026-06-23T09:38:02.9855327Z               "line": 115
2026-06-23T09:38:02.9855431Z             },
2026-06-23T09:38:02.9855536Z             {
2026-06-23T09:38:02.9855668Z               "path": "crates/spt-live/src/turn.rs",
2026-06-23T09:38:02.9855772Z               "line": 130
2026-06-23T09:38:02.9855873Z             },
2026-06-23T09:38:02.9855969Z             {
2026-06-23T09:38:02.9856105Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:02.9856217Z               "line": 428
2026-06-23T09:38:02.9856321Z             }
2026-06-23T09:38:02.9856420Z           ]
2026-06-23T09:38:02.9856527Z         }
2026-06-23T09:38:02.9856631Z       }
2026-06-23T09:38:02.9856726Z     },
2026-06-23T09:38:02.9856827Z     {
2026-06-23T09:38:02.9856969Z       "id": "REQ-HAZARD-PTY-INPUT-WRITER-WEDGE",
2026-06-23T09:38:02.9863239Z       "title": "Pasting into an `spt rc` session WEDGES the broker — after a paste the operator can no longer type AND can no longer attach to NEW or EXISTING sessions (`brain IPC read deadline`). ROOT (doyle /diagnose, code-grounded): the operator-keystroke path rc -> net-stream Input -> serve_attach (attach.rs:197 brain.send_effect) -> KIND_INPUT -> broker dispatch loop (broker.rs:1091) -> dispatch_input (broker.rs:1459) -> session.write_input(&bytes) runs SYNCHRONOUSLY on the broker request-handling thread. W1b (REQ-HAZARD-EFFECT-JOURNAL-PTY-WEDGE) released the journal lock across the effect (fix 1) + made PtyWrite ephemeral/no-fsync (fix 3) but EXPLICITLY DEFERRED fix (2) — bound/fail-fast the PtyWrite itself. A single keystroke never fills the ConPTY input buffer; a PASTE BURST does -> write_input blocks -> the dispatch thread cannot service the next frame (a re-attach subscribe, a become_controller restore-write, an inject-floor flush) -> wedge. Not a bug-2 regression (the byte path funnels to the same write_input; paste just reliably fills the buffer). FIX (doyle design, V0.13.0-P0-PTY-INPUT-WRITER-DESIGN.md, CONTEXT L33 broker-owns-PTY/minimal + L435 SessionSurface + single-writer pattern): one dedicated per-session INPUT-WRITER THREAD = the SOLE caller of the blocking write_input, fed by a BOUNDED FIFO channel; every caller (dispatch_input, serve_attach->send_effect, inject-floor flush) ENQUEUES + returns immediately, never blocks. A blocked/slow harness blocks ONLY its own writer thread, never the broker dispatch. Backpressure (operator ruling): queue full => DROP excess input + stamp the session INPUT_BACKPRESSURE (visible health signal); the daemon NEVER wedges; a merely-slow harness self-heals as the writer drains. Exactly-once preserved (PtyWrite ephemeral: apply_once effect = the non-blocking enqueue => Applied; ack now means accepted+ordered, benign — rc does not gate on landing); order preserved (single FIFO + single writer); inject-floor (W2 Layer C) choreography moves to the lone writer. Completes the W1b-deferred fix (2), cross-platform (cfg(unix) forkpty park folds in). (v0.13.0)",
2026-06-23T09:38:02.9863491Z       "requiredStages": [
2026-06-23T09:38:02.9863601Z         "impl",
2026-06-23T09:38:02.9863704Z         "unit",
2026-06-23T09:38:02.9863813Z         "int"
2026-06-23T09:38:02.9863919Z       ],
2026-06-23T09:38:02.9864019Z       "stages": {
2026-06-23T09:38:02.9864123Z         "doc": {
2026-06-23T09:38:02.9864230Z           "complete": false,
2026-06-23T09:38:02.9864352Z           "evidence": []
2026-06-23T09:38:02.9864539Z         },
2026-06-23T09:38:02.9864649Z         "impl": {
2026-06-23T09:38:02.9864762Z           "complete": true,
2026-06-23T09:38:02.9864868Z           "evidence": [
2026-06-23T09:38:02.9864973Z             {
2026-06-23T09:38:02.9865126Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9865230Z               "line": 952
2026-06-23T09:38:02.9865339Z             },
2026-06-23T09:38:02.9865436Z             {
2026-06-23T09:38:02.9865568Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:02.9865678Z               "line": 322
2026-06-23T09:38:02.9865784Z             }
2026-06-23T09:38:02.9865883Z           ]
2026-06-23T09:38:02.9865987Z         },
2026-06-23T09:38:02.9866087Z         "int": {
2026-06-23T09:38:02.9866196Z           "complete": true,
2026-06-23T09:38:02.9866309Z           "evidence": [
2026-06-23T09:38:02.9866409Z             {
2026-06-23T09:38:02.9866585Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:02.9866690Z               "line": 2150
2026-06-23T09:38:02.9866796Z             }
2026-06-23T09:38:02.9866900Z           ]
2026-06-23T09:38:02.9867004Z         },
2026-06-23T09:38:02.9867110Z         "unit": {
2026-06-23T09:38:02.9867224Z           "complete": true,
2026-06-23T09:38:02.9867334Z           "evidence": [
2026-06-23T09:38:02.9867435Z             {
2026-06-23T09:38:02.9867577Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9867687Z               "line": 2819
2026-06-23T09:38:02.9867791Z             },
2026-06-23T09:38:02.9867892Z             {
2026-06-23T09:38:02.9868036Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9868144Z               "line": 2883
2026-06-23T09:38:02.9868245Z             },
2026-06-23T09:38:02.9868356Z             {
2026-06-23T09:38:02.9868487Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9868593Z               "line": 2938
2026-06-23T09:38:02.9868704Z             }
2026-06-23T09:38:02.9868807Z           ]
2026-06-23T09:38:02.9868911Z         }
2026-06-23T09:38:02.9869086Z       }
2026-06-23T09:38:02.9869185Z     },
2026-06-23T09:38:02.9869290Z     {
2026-06-23T09:38:02.9869424Z       "id": "REQ-HAZARD-PUMP-IPC-DEADLINE",
2026-06-23T09:38:02.9870293Z       "title": "The single-threaded peer pump's brain-IPC reads are deadline-bounded (PUMP_PEER_IO_TIMEOUT, total-wait per call); a TimedOut read POISONS the client and escalates to a SUPERVISED RESTART, never a per-peer retry — a black-holed peer must never wedge the whole pump",
2026-06-23T09:38:02.9870401Z       "requiredStages": [
2026-06-23T09:38:02.9870511Z         "doc",
2026-06-23T09:38:02.9870617Z         "impl",
2026-06-23T09:38:02.9870716Z         "unit"
2026-06-23T09:38:02.9870821Z       ],
2026-06-23T09:38:02.9870913Z       "stages": {
2026-06-23T09:38:02.9871026Z         "doc": {
2026-06-23T09:38:02.9871136Z           "complete": true,
2026-06-23T09:38:02.9871247Z           "evidence": [
2026-06-23T09:38:02.9871355Z             {
2026-06-23T09:38:02.9871492Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9871597Z               "line": 374
2026-06-23T09:38:02.9871695Z             }
2026-06-23T09:38:02.9871799Z           ]
2026-06-23T09:38:02.9871890Z         },
2026-06-23T09:38:02.9871996Z         "impl": {
2026-06-23T09:38:02.9872104Z           "complete": true,
2026-06-23T09:38:02.9872201Z           "evidence": [
2026-06-23T09:38:02.9872291Z             {
2026-06-23T09:38:02.9872434Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9872540Z               "line": 206
2026-06-23T09:38:02.9872753Z             },
2026-06-23T09:38:02.9872859Z             {
2026-06-23T09:38:02.9872997Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9873106Z               "line": 310
2026-06-23T09:38:02.9873216Z             },
2026-06-23T09:38:02.9873317Z             {
2026-06-23T09:38:02.9873451Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9873669Z               "line": 568
2026-06-23T09:38:02.9873766Z             },
2026-06-23T09:38:02.9873870Z             {
2026-06-23T09:38:02.9873998Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9874104Z               "line": 583
2026-06-23T09:38:02.9874208Z             },
2026-06-23T09:38:02.9874316Z             {
2026-06-23T09:38:02.9874445Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9874556Z               "line": 1346
2026-06-23T09:38:02.9874650Z             },
2026-06-23T09:38:02.9874755Z             {
2026-06-23T09:38:02.9874903Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9875012Z               "line": 443
2026-06-23T09:38:02.9875109Z             },
2026-06-23T09:38:02.9875214Z             {
2026-06-23T09:38:02.9875351Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9875462Z               "line": 590
2026-06-23T09:38:02.9875561Z             },
2026-06-23T09:38:02.9875656Z             {
2026-06-23T09:38:02.9875795Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9875899Z               "line": 731
2026-06-23T09:38:02.9876001Z             }
2026-06-23T09:38:02.9876105Z           ]
2026-06-23T09:38:02.9876210Z         },
2026-06-23T09:38:02.9876310Z         "int": {
2026-06-23T09:38:02.9876420Z           "complete": false,
2026-06-23T09:38:02.9876528Z           "evidence": []
2026-06-23T09:38:02.9876628Z         },
2026-06-23T09:38:02.9876728Z         "unit": {
2026-06-23T09:38:02.9876845Z           "complete": true,
2026-06-23T09:38:02.9876945Z           "evidence": [
2026-06-23T09:38:02.9877046Z             {
2026-06-23T09:38:02.9877183Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:02.9877289Z               "line": 1155
2026-06-23T09:38:02.9877398Z             },
2026-06-23T09:38:02.9877488Z             {
2026-06-23T09:38:02.9877652Z               "path": "crates/spt-daemon/tests/pumpdeadline.rs",
2026-06-23T09:38:02.9877766Z               "line": 30
2026-06-23T09:38:02.9877870Z             }
2026-06-23T09:38:02.9877976Z           ]
2026-06-23T09:38:02.9878071Z         }
2026-06-23T09:38:02.9878175Z       }
2026-06-23T09:38:02.9878267Z     },
2026-06-23T09:38:02.9878371Z     {
2026-06-23T09:38:02.9878504Z       "id": "REQ-HAZARD-RC-ATTACH-FAILFAST",
2026-06-23T09:38:02.9881919Z       "title": "B1: `spt rc <id>` to a DEAD or non-streaming session fails fast with a clear message, never an INFINITE blank screen. Today rc.rs run_attach (209-231) + pump spawns PUMP_IPC_READER and blocks: the poll times out each slice but the stream never produces output, so the operator sees a permanent blank (operator: fresh wall-f attached, closed tab, then `spt rc wall-f` HUNG — the broker still resolved a session for it). FIX: (a) once B2 lands, gate attach on is_online/status — an offline endpoint yields a clean 'endpoint offline, start it' not an attach; (b) fail-fast — if the attach-open ack / first output does not arrive within a bound, surface a clear message, never an infinite blank; (c) the broker EOFs the attach stream when the session's child is dead, so rc's existing PumpEnd::BrokerGone graceful path (REQ-HAZARD-RC-EOF) catches it. PIN the exact sub-mechanism with a repro test FIRST (dead-session-lingers-in-broker vs reaped-but-rc-waits vs alive-resting-no-wake — the wall-f Windows tab-close: child alive-silent vs dead-not-reaped). (v0.12.0)",
2026-06-23T09:38:02.9882047Z       "requiredStages": [
2026-06-23T09:38:02.9882148Z         "impl",
2026-06-23T09:38:02.9882255Z         "unit",
2026-06-23T09:38:02.9882359Z         "int"
2026-06-23T09:38:02.9882561Z       ],
2026-06-23T09:38:02.9882664Z       "stages": {
2026-06-23T09:38:02.9882766Z         "doc": {
2026-06-23T09:38:02.9882880Z           "complete": false,
2026-06-23T09:38:02.9882984Z           "evidence": []
2026-06-23T09:38:02.9883081Z         },
2026-06-23T09:38:02.9883180Z         "impl": {
2026-06-23T09:38:02.9883294Z           "complete": true,
2026-06-23T09:38:02.9883405Z           "evidence": [
2026-06-23T09:38:02.9883604Z             {
2026-06-23T09:38:02.9883739Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9883848Z               "line": 780
2026-06-23T09:38:02.9883957Z             },
2026-06-23T09:38:02.9884058Z             {
2026-06-23T09:38:02.9884186Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9884292Z               "line": 968
2026-06-23T09:38:02.9884392Z             }
2026-06-23T09:38:02.9884496Z           ]
2026-06-23T09:38:02.9884597Z         },
2026-06-23T09:38:02.9884702Z         "int": {
2026-06-23T09:38:02.9884815Z           "complete": true,
2026-06-23T09:38:02.9884934Z           "evidence": [
2026-06-23T09:38:02.9885030Z             {
2026-06-23T09:38:02.9885186Z               "path": "crates/spt-daemon/tests/broker.rs",
2026-06-23T09:38:02.9885292Z               "line": 424
2026-06-23T09:38:02.9885388Z             }
2026-06-23T09:38:02.9885492Z           ]
2026-06-23T09:38:02.9885592Z         },
2026-06-23T09:38:02.9885702Z         "unit": {
2026-06-23T09:38:02.9885816Z           "complete": true,
2026-06-23T09:38:02.9885931Z           "evidence": [
2026-06-23T09:38:02.9886036Z             {
2026-06-23T09:38:02.9886159Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9886270Z               "line": 1153
2026-06-23T09:38:02.9886369Z             },
2026-06-23T09:38:02.9886478Z             {
2026-06-23T09:38:02.9886604Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9886717Z               "line": 1177
2026-06-23T09:38:02.9886822Z             }
2026-06-23T09:38:02.9886923Z           ]
2026-06-23T09:38:02.9887036Z         }
2026-06-23T09:38:02.9887141Z       }
2026-06-23T09:38:02.9887245Z     },
2026-06-23T09:38:02.9887340Z     {
2026-06-23T09:38:02.9887490Z       "id": "REQ-HAZARD-RC-ATTACH-ONLINE-RACE",
2026-06-23T09:38:02.9891350Z       "title": "`spt endpoint run` in an ATTACH/VIEW terminal action attaches BEFORE the freshly-spawned endpoint is online, so the attach races (or outright loses to) the harness bind. ROOT (doyle /diagnose, code-grounded): cmd_endpoint_run (cli.rs) does launch_harness_brokered_in -> (if start: return) -> run_attach with NO await-online between them. launch_harness_brokered_in returns once the harness PROCESS is spawned, but the broker-PTY bind (info status -> STATUS_ONLINE + the live session) lands ASYNC. Both picker attach paths route here with start=false (RunMode::Attach -> cmd_endpoint_run start=false,view=false): Start-now catches the endpoint mid-bringup -> run_attach attempts + loses the handshake race; Resume-from-history catches it still fully OFFLINE -> run_attach's status-gate (REQ-HAZARD-RC-ATTACH-FAILFAST) short-circuits 'offline - nothing to attach' and NEVER attempts. SAME root, two faces (the W4 attach-by-default surfaced both; an online endpoint is unaffected - the picker returns Outcome::Attach, not Run). FIX: in cmd_endpoint_run, when the terminal action is attach/view (NOT start), AWAIT the endpoint online between launch_harness_brokered_in success and run_attach - poll spt_store::info read_info().status to STATUS_ONLINE with a bounded harness-boot deadline (~25s) at a tight interval; on online -> run_attach; on timeout -> ENDPOINT_RUN_ONLINE_TIMEOUT err (do NOT attach a dead bringup). (v0.13.0)",
2026-06-23T09:38:02.9891474Z       "requiredStages": [
2026-06-23T09:38:02.9891583Z         "impl",
2026-06-23T09:38:02.9891689Z         "unit",
2026-06-23T09:38:02.9891789Z         "int"
2026-06-23T09:38:02.9891888Z       ],
2026-06-23T09:38:02.9891990Z       "stages": {
2026-06-23T09:38:02.9892085Z         "doc": {
2026-06-23T09:38:02.9892295Z           "complete": false,
2026-06-23T09:38:02.9892400Z           "evidence": []
2026-06-23T09:38:02.9892503Z         },
2026-06-23T09:38:02.9892612Z         "impl": {
2026-06-23T09:38:02.9892722Z           "complete": true,
2026-06-23T09:38:02.9892834Z           "evidence": [
2026-06-23T09:38:02.9892944Z             {
2026-06-23T09:38:02.9893074Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9893282Z               "line": 1769
2026-06-23T09:38:02.9893388Z             },
2026-06-23T09:38:02.9893482Z             {
2026-06-23T09:38:02.9893612Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9893731Z               "line": 1790
2026-06-23T09:38:02.9893840Z             }
2026-06-23T09:38:02.9893937Z           ]
2026-06-23T09:38:02.9894045Z         },
2026-06-23T09:38:02.9894145Z         "int": {
2026-06-23T09:38:02.9894261Z           "complete": true,
2026-06-23T09:38:02.9894370Z           "evidence": [
2026-06-23T09:38:02.9894479Z             {
2026-06-23T09:38:02.9894642Z               "path": "crates/spt/tests/dummy_harness_e2e.rs",
2026-06-23T09:38:02.9894751Z               "line": 330
2026-06-23T09:38:02.9894857Z             }
2026-06-23T09:38:02.9894952Z           ]
2026-06-23T09:38:02.9895056Z         },
2026-06-23T09:38:02.9895147Z         "unit": {
2026-06-23T09:38:02.9895258Z           "complete": true,
2026-06-23T09:38:02.9895375Z           "evidence": [
2026-06-23T09:38:02.9895479Z             {
2026-06-23T09:38:02.9895605Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9895714Z               "line": 9563
2026-06-23T09:38:02.9895823Z             }
2026-06-23T09:38:02.9895924Z           ]
2026-06-23T09:38:02.9896028Z         }
2026-06-23T09:38:02.9896133Z       }
2026-06-23T09:38:02.9896224Z     },
2026-06-23T09:38:02.9896329Z     {
2026-06-23T09:38:02.9896438Z       "id": "REQ-HAZARD-RC-EOF",
2026-06-23T09:38:02.9900408Z       "title": "A severed broker stream during a live rc session surfaces GRACEFULLY, never as a raw io error that crashes the PTY. The rc read-loop (rc.rs:352-362) continues only on WouldBlock/TimedOut; ANY other read_event_until error — including UnexpectedEof 'failed to fill whole buffer' — returns Err → RC_FAIL → the PTY 'crashes' from the user's view. Confirmed trigger: a deliberate `spt daemon stop` (broker bounce) severs an active rc (perri stopped the daemon to release owlery watch handles). Same severed-broker-stream EOF class as the v0.9.1 seed fix (seed_fail_message) and the listener-death case — spt-core must classify a broker-gone EOF and (a) surface a CLEAR actionable message ('daemon stopped/restarted — re-run / reconnect'), never the raw buffer error, and ideally (b) AUTO-REATTACH to the same session on the fresh broker (the broker is the daemon-lifetime anchor; it returns on the next `spt api` call). FOLD two side-observations: (1) `spt daemon stop` SILENTLY drops active rc/live sessions — warn ('N active session(s) will drop') or graceful-detach on stop; (2) the daemon holds owlery WATCH HANDLES on perch dirs so a torn-down perch dir stays 'Device busy' until a full daemon stop releases them (perri's rt-* cleanup) — a torn-down perch's handle should release without a daemon stop. doyle Finding C, root-caused. (post-v0.10.0)",
2026-06-23T09:38:02.9900539Z       "requiredStages": [
2026-06-23T09:38:02.9900644Z         "impl",
2026-06-23T09:38:02.9900748Z         "unit"
2026-06-23T09:38:02.9900851Z       ],
2026-06-23T09:38:02.9900962Z       "stages": {
2026-06-23T09:38:02.9901071Z         "doc": {
2026-06-23T09:38:02.9901180Z           "complete": false,
2026-06-23T09:38:02.9901281Z           "evidence": []
2026-06-23T09:38:02.9901386Z         },
2026-06-23T09:38:02.9901485Z         "impl": {
2026-06-23T09:38:02.9901601Z           "complete": true,
2026-06-23T09:38:02.9901705Z           "evidence": [
2026-06-23T09:38:02.9901814Z             {
2026-06-23T09:38:02.9901935Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9902048Z               "line": 991
2026-06-23T09:38:02.9902153Z             }
2026-06-23T09:38:02.9902358Z           ]
2026-06-23T09:38:02.9902463Z         },
2026-06-23T09:38:02.9902574Z         "int": {
2026-06-23T09:38:02.9902687Z           "complete": false,
2026-06-23T09:38:02.9902792Z           "evidence": []
2026-06-23T09:38:02.9902898Z         },
2026-06-23T09:38:02.9903011Z         "unit": {
2026-06-23T09:38:02.9903116Z           "complete": true,
2026-06-23T09:38:02.9903220Z           "evidence": [
2026-06-23T09:38:02.9903423Z             {
2026-06-23T09:38:02.9903562Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9903667Z               "line": 1193
2026-06-23T09:38:02.9903776Z             }
2026-06-23T09:38:02.9903882Z           ]
2026-06-23T09:38:02.9903986Z         }
2026-06-23T09:38:02.9904095Z       }
2026-06-23T09:38:02.9904192Z     },
2026-06-23T09:38:02.9904296Z     {
2026-06-23T09:38:02.9904443Z       "id": "REQ-HAZARD-RC-INPUT-KEY-ENCODING",
2026-06-23T09:38:02.9909065Z       "title": "An `spt rc` session forwards the Backspace key as the VT DEL byte (0x7f), so the hosted TUI (Claude Code) deletes ONE character — never a whole word. SYMPTOM (operator dogfooding): Backspace in an rc session always behaves like ctrl+Backspace — deletes the entire last word. ROOT (doyle /diagnose, code-grounded, byte PENDING HITL confirm): rc is a RAW VERBATIM byte pump — spawn_stdin_reader (rc.rs:152) reads std::io::stdin() bytes under crossterm raw mode and forwards them unchanged (parse_stdin_chunk only intercepts the ctrl-b detach prefix); there is NO key-event encoding and NO 0x08↔0x7f normalization ANYWHERE in the tree (grep: zero SetConsoleMode / ENABLE_VIRTUAL_TERMINAL_INPUT). On Windows, crossterm enable_raw_mode does NOT set ENABLE_VIRTUAL_TERMINAL_INPUT, so the LEGACY console delivers ^H (0x08, ctrl+h) for Backspace instead of VT DEL (0x7f); Claude Code maps ^H → backward-kill-word → the observed whole-word delete. CONFIRM-FIRST (build the loop): an env-gated hexdump in spawn_stdin_reader (SPT_RC_DEBUG_KEYS) prints the forwarded byte; operator presses Backspace + ctrl+Backspace in a real rc session. FIX CANDIDATES: (a) enable ENABLE_VIRTUAL_TERMINAL_INPUT on the rc stdin console on Windows so the console emits proper VT (Backspace→0x7f, arrows/Home/End as CSI) — cleanest, fixes the whole key map not just Backspace; (b) narrow normalize bare 0x08→0x7f in the rc input path (riskier — a real ctrl+h is also 0x08). Prefer (a) unless it regresses other keys. Add a KNOWN-HAZARDS.md entry on landing. (v0.13.0)",
2026-06-23T09:38:02.9909202Z       "requiredStages": [
2026-06-23T09:38:02.9909308Z         "impl",
2026-06-23T09:38:02.9909417Z         "unit"
2026-06-23T09:38:02.9909517Z       ],
2026-06-23T09:38:02.9909623Z       "stages": {
2026-06-23T09:38:02.9909728Z         "doc": {
2026-06-23T09:38:02.9909832Z           "complete": false,
2026-06-23T09:38:02.9909938Z           "evidence": []
2026-06-23T09:38:02.9910042Z         },
2026-06-23T09:38:02.9910147Z         "impl": {
2026-06-23T09:38:02.9910253Z           "complete": true,
2026-06-23T09:38:02.9910361Z           "evidence": [
2026-06-23T09:38:02.9910466Z             {
2026-06-23T09:38:02.9910596Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9910704Z               "line": 264
2026-06-23T09:38:02.9910804Z             }
2026-06-23T09:38:02.9910902Z           ]
2026-06-23T09:38:02.9910996Z         },
2026-06-23T09:38:02.9911109Z         "int": {
2026-06-23T09:38:02.9911219Z           "complete": false,
2026-06-23T09:38:02.9911327Z           "evidence": []
2026-06-23T09:38:02.9911430Z         },
2026-06-23T09:38:02.9911531Z         "unit": {
2026-06-23T09:38:02.9911636Z           "complete": true,
2026-06-23T09:38:02.9911745Z           "evidence": [
2026-06-23T09:38:02.9911851Z             {
2026-06-23T09:38:02.9911980Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9912079Z               "line": 1175
2026-06-23T09:38:02.9912185Z             },
2026-06-23T09:38:02.9912289Z             {
2026-06-23T09:38:02.9912408Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9912637Z               "line": 1306
2026-06-23T09:38:02.9912742Z             },
2026-06-23T09:38:02.9912838Z             {
2026-06-23T09:38:02.9912965Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:02.9913076Z               "line": 1308
2026-06-23T09:38:02.9913172Z             }
2026-06-23T09:38:02.9913280Z           ]
2026-06-23T09:38:02.9913381Z         }
2026-06-23T09:38:02.9913482Z       }
2026-06-23T09:38:02.9913681Z     },
2026-06-23T09:38:02.9913771Z     {
2026-06-23T09:38:02.9913908Z       "id": "REQ-HAZARD-REGISTRY-CONCURRENT",
2026-06-23T09:38:02.9914179Z       "title": "Concurrent SQLite openers (registry/spool) must not fail with 'database is locked' (4.7)",
2026-06-23T09:38:02.9914297Z       "requiredStages": [
2026-06-23T09:38:02.9914403Z         "impl",
2026-06-23T09:38:02.9914508Z         "unit"
2026-06-23T09:38:02.9914612Z       ],
2026-06-23T09:38:02.9914718Z       "stages": {
2026-06-23T09:38:02.9914823Z         "doc": {
2026-06-23T09:38:02.9914936Z           "complete": true,
2026-06-23T09:38:02.9915052Z           "evidence": [
2026-06-23T09:38:02.9915156Z             {
2026-06-23T09:38:02.9915294Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9915405Z               "line": 139
2026-06-23T09:38:02.9915504Z             }
2026-06-23T09:38:02.9915609Z           ]
2026-06-23T09:38:02.9915701Z         },
2026-06-23T09:38:02.9915814Z         "impl": {
2026-06-23T09:38:02.9915924Z           "complete": true,
2026-06-23T09:38:02.9916030Z           "evidence": [
2026-06-23T09:38:02.9916138Z             {
2026-06-23T09:38:02.9916272Z               "path": "crates/spt-store/src/db.rs",
2026-06-23T09:38:02.9916383Z               "line": 29
2026-06-23T09:38:02.9916490Z             },
2026-06-23T09:38:02.9916594Z             {
2026-06-23T09:38:02.9916725Z               "path": "crates/spt-store/src/db.rs",
2026-06-23T09:38:02.9916848Z               "line": 67
2026-06-23T09:38:02.9916953Z             },
2026-06-23T09:38:02.9917058Z             {
2026-06-23T09:38:02.9917205Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:02.9917316Z               "line": 101
2026-06-23T09:38:02.9917416Z             },
2026-06-23T09:38:02.9917520Z             {
2026-06-23T09:38:02.9917659Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9917768Z               "line": 30
2026-06-23T09:38:02.9917877Z             },
2026-06-23T09:38:02.9917988Z             {
2026-06-23T09:38:02.9918126Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9918236Z               "line": 48
2026-06-23T09:38:02.9918331Z             }
2026-06-23T09:38:02.9918435Z           ]
2026-06-23T09:38:02.9918541Z         },
2026-06-23T09:38:02.9918646Z         "int": {
2026-06-23T09:38:02.9918769Z           "complete": false,
2026-06-23T09:38:02.9918873Z           "evidence": []
2026-06-23T09:38:02.9919052Z         },
2026-06-23T09:38:02.9919161Z         "unit": {
2026-06-23T09:38:02.9919282Z           "complete": true,
2026-06-23T09:38:02.9919391Z           "evidence": [
2026-06-23T09:38:02.9919496Z             {
2026-06-23T09:38:02.9919644Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9919748Z               "line": 162
2026-06-23T09:38:02.9919854Z             }
2026-06-23T09:38:02.9919949Z           ]
2026-06-23T09:38:02.9920044Z         }
2026-06-23T09:38:02.9920149Z       }
2026-06-23T09:38:02.9920249Z     },
2026-06-23T09:38:02.9920354Z     {
2026-06-23T09:38:02.9920483Z       "id": "REQ-HAZARD-REGISTRY-DIR-CREATE",
2026-06-23T09:38:02.9920889Z       "title": "SQLite store opens create their parent dir themselves — a fresh-home registry op must not SQLITE_CANTOPEN (4.9)",
2026-06-23T09:38:02.9920998Z       "requiredStages": [
2026-06-23T09:38:02.9921108Z         "doc",
2026-06-23T09:38:02.9921218Z         "impl",
2026-06-23T09:38:02.9921312Z         "unit"
2026-06-23T09:38:02.9921418Z       ],
2026-06-23T09:38:02.9921523Z       "stages": {
2026-06-23T09:38:02.9921636Z         "doc": {
2026-06-23T09:38:02.9921859Z           "complete": true,
2026-06-23T09:38:02.9921972Z           "evidence": [
2026-06-23T09:38:02.9922072Z             {
2026-06-23T09:38:02.9922206Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9922314Z               "line": 151
2026-06-23T09:38:02.9922416Z             }
2026-06-23T09:38:02.9922521Z           ]
2026-06-23T09:38:02.9922620Z         },
2026-06-23T09:38:02.9922726Z         "impl": {
2026-06-23T09:38:02.9922944Z           "complete": true,
2026-06-23T09:38:02.9923055Z           "evidence": [
2026-06-23T09:38:02.9923159Z             {
2026-06-23T09:38:02.9923297Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9923413Z               "line": 22
2026-06-23T09:38:02.9923502Z             }
2026-06-23T09:38:02.9923607Z           ]
2026-06-23T09:38:02.9923709Z         },
2026-06-23T09:38:02.9923817Z         "int": {
2026-06-23T09:38:02.9923927Z           "complete": false,
2026-06-23T09:38:02.9924038Z           "evidence": []
2026-06-23T09:38:02.9924142Z         },
2026-06-23T09:38:02.9924250Z         "unit": {
2026-06-23T09:38:02.9924359Z           "complete": true,
2026-06-23T09:38:02.9924468Z           "evidence": [
2026-06-23T09:38:02.9924572Z             {
2026-06-23T09:38:02.9924716Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9924820Z               "line": 298
2026-06-23T09:38:02.9924929Z             }
2026-06-23T09:38:02.9925036Z           ]
2026-06-23T09:38:02.9925131Z         }
2026-06-23T09:38:02.9925230Z       }
2026-06-23T09:38:02.9925331Z     },
2026-06-23T09:38:02.9925431Z     {
2026-06-23T09:38:02.9925578Z       "id": "REQ-HAZARD-REGISTRY-EPOCH-LEASE",
2026-06-23T09:38:02.9926059Z       "title": "Registry merge ordered by per-node monotonic epoch, never wall-clock — a stale Active can't clobber a newer Offline (4.8, red-team #8)",
2026-06-23T09:38:02.9926184Z       "requiredStages": [
2026-06-23T09:38:02.9926294Z         "impl",
2026-06-23T09:38:02.9926402Z         "unit"
2026-06-23T09:38:02.9926503Z       ],
2026-06-23T09:38:02.9926609Z       "stages": {
2026-06-23T09:38:02.9926703Z         "doc": {
2026-06-23T09:38:02.9926818Z           "complete": true,
2026-06-23T09:38:02.9926919Z           "evidence": [
2026-06-23T09:38:02.9927023Z             {
2026-06-23T09:38:02.9927159Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9927275Z               "line": 145
2026-06-23T09:38:02.9927379Z             }
2026-06-23T09:38:02.9927479Z           ]
2026-06-23T09:38:02.9927585Z         },
2026-06-23T09:38:02.9927694Z         "impl": {
2026-06-23T09:38:02.9927818Z           "complete": true,
2026-06-23T09:38:02.9927924Z           "evidence": [
2026-06-23T09:38:02.9928028Z             {
2026-06-23T09:38:02.9928186Z               "path": "crates/spt-daemon/src/pump/update.rs",
2026-06-23T09:38:02.9928290Z               "line": 160
2026-06-23T09:38:02.9928390Z             },
2026-06-23T09:38:02.9928491Z             {
2026-06-23T09:38:02.9928648Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9928762Z               "line": 200
2026-06-23T09:38:02.9928864Z             },
2026-06-23T09:38:02.9929043Z             {
2026-06-23T09:38:02.9929197Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:02.9929310Z               "line": 298
2026-06-23T09:38:02.9929404Z             },
2026-06-23T09:38:02.9929510Z             {
2026-06-23T09:38:02.9929651Z               "path": "crates/spt-store/src/epoch.rs",
2026-06-23T09:38:02.9929760Z               "line": 20
2026-06-23T09:38:02.9929871Z             }
2026-06-23T09:38:02.9929970Z           ]
2026-06-23T09:38:02.9930075Z         },
2026-06-23T09:38:02.9930181Z         "int": {
2026-06-23T09:38:02.9930289Z           "complete": false,
2026-06-23T09:38:02.9930395Z           "evidence": []
2026-06-23T09:38:02.9930495Z         },
2026-06-23T09:38:02.9930604Z         "unit": {
2026-06-23T09:38:02.9930705Z           "complete": true,
2026-06-23T09:38:02.9930824Z           "evidence": [
2026-06-23T09:38:02.9930933Z             {
2026-06-23T09:38:02.9931186Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9931291Z               "line": 937
2026-06-23T09:38:02.9931392Z             },
2026-06-23T09:38:02.9931496Z             {
2026-06-23T09:38:02.9931644Z               "path": "crates/spt-daemon/tests/replicate.rs",
2026-06-23T09:38:02.9931759Z               "line": 88
2026-06-23T09:38:02.9931867Z             },
2026-06-23T09:38:02.9932064Z             {
2026-06-23T09:38:02.9932215Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:02.9932319Z               "line": 851
2026-06-23T09:38:02.9932428Z             },
2026-06-23T09:38:02.9932528Z             {
2026-06-23T09:38:02.9932680Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:02.9932799Z               "line": 870
2026-06-23T09:38:02.9932894Z             },
2026-06-23T09:38:02.9933005Z             {
2026-06-23T09:38:02.9933152Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:02.9933266Z               "line": 279
2026-06-23T09:38:02.9933376Z             },
2026-06-23T09:38:02.9933481Z             {
2026-06-23T09:38:02.9933625Z               "path": "crates/spt-store/src/epoch.rs",
2026-06-23T09:38:02.9933724Z               "line": 82
2026-06-23T09:38:02.9933834Z             },
2026-06-23T09:38:02.9933935Z             {
2026-06-23T09:38:02.9934081Z               "path": "crates/spt-store/src/epoch.rs",
2026-06-23T09:38:02.9934186Z               "line": 99
2026-06-23T09:38:02.9934292Z             },
2026-06-23T09:38:02.9934396Z             {
2026-06-23T09:38:02.9934531Z               "path": "crates/spt-store/src/epoch.rs",
2026-06-23T09:38:02.9934636Z               "line": 119
2026-06-23T09:38:02.9934739Z             }
2026-06-23T09:38:02.9934848Z           ]
2026-06-23T09:38:02.9934939Z         }
2026-06-23T09:38:02.9935047Z       }
2026-06-23T09:38:02.9935151Z     },
2026-06-23T09:38:02.9935242Z     {
2026-06-23T09:38:02.9935380Z       "id": "REQ-HAZARD-REGISTRY-GHOST-ROWS",
2026-06-23T09:38:02.9936705Z       "title": "A dead node identity's registry rows must decay: only the per-(endpoint,node) epoch lease supersedes rows, so without eviction a vanished node's rows are immortal and poison bare-id resolution with phantom AcrossNodes ambiguity — evict rows whose author node has not been heard (admitted inbound feed) within the eviction window; own rows never decay; a revived node re-inserts from its durable epoch within one pump cadence (4.10)",
2026-06-23T09:38:02.9936830Z       "requiredStages": [
2026-06-23T09:38:02.9936935Z         "doc",
2026-06-23T09:38:02.9937039Z         "impl",
2026-06-23T09:38:02.9939809Z         "unit"
2026-06-23T09:38:02.9939931Z       ],
2026-06-23T09:38:02.9940041Z       "stages": {
2026-06-23T09:38:02.9940149Z         "doc": {
2026-06-23T09:38:02.9940272Z           "complete": true,
2026-06-23T09:38:02.9940392Z           "evidence": [
2026-06-23T09:38:02.9940492Z             {
2026-06-23T09:38:02.9940630Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9940736Z               "line": 157
2026-06-23T09:38:02.9940844Z             }
2026-06-23T09:38:02.9940940Z           ]
2026-06-23T09:38:02.9941046Z         },
2026-06-23T09:38:02.9941150Z         "impl": {
2026-06-23T09:38:02.9941265Z           "complete": true,
2026-06-23T09:38:02.9941374Z           "evidence": [
2026-06-23T09:38:02.9941469Z             {
2026-06-23T09:38:02.9941652Z               "path": "crates/spt-daemon/src/pump/registry.rs",
2026-06-23T09:38:02.9941756Z               "line": 137
2026-06-23T09:38:02.9941865Z             },
2026-06-23T09:38:02.9941967Z             {
2026-06-23T09:38:02.9942118Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9942229Z               "line": 564
2026-06-23T09:38:02.9942333Z             },
2026-06-23T09:38:02.9942437Z             {
2026-06-23T09:38:02.9942587Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9942690Z               "line": 571
2026-06-23T09:38:02.9942937Z             },
2026-06-23T09:38:02.9943035Z             {
2026-06-23T09:38:02.9943188Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:02.9943293Z               "line": 227
2026-06-23T09:38:02.9943402Z             }
2026-06-23T09:38:02.9943507Z           ]
2026-06-23T09:38:02.9943613Z         },
2026-06-23T09:38:02.9943716Z         "int": {
2026-06-23T09:38:02.9943836Z           "complete": false,
2026-06-23T09:38:02.9944050Z           "evidence": []
2026-06-23T09:38:02.9944151Z         },
2026-06-23T09:38:02.9944256Z         "unit": {
2026-06-23T09:38:02.9944365Z           "complete": true,
2026-06-23T09:38:02.9944475Z           "evidence": [
2026-06-23T09:38:02.9944580Z             {
2026-06-23T09:38:02.9944723Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9944834Z               "line": 1622
2026-06-23T09:38:02.9944937Z             },
2026-06-23T09:38:02.9945043Z             {
2026-06-23T09:38:02.9945191Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9945300Z               "line": 1680
2026-06-23T09:38:02.9945399Z             },
2026-06-23T09:38:02.9945503Z             {
2026-06-23T09:38:02.9945645Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:02.9945744Z               "line": 883
2026-06-23T09:38:02.9945846Z             }
2026-06-23T09:38:02.9945950Z           ]
2026-06-23T09:38:02.9946055Z         }
2026-06-23T09:38:02.9946156Z       }
2026-06-23T09:38:02.9946255Z     },
2026-06-23T09:38:02.9946355Z     {
2026-06-23T09:38:02.9946489Z       "id": "REQ-HAZARD-REGISTRY-STALE-CLEAN",
2026-06-23T09:38:02.9946713Z       "title": "Stale registry entries degrade to fallback, never hard-fail (4.3)",
2026-06-23T09:38:02.9946818Z       "requiredStages": [
2026-06-23T09:38:02.9946918Z         "impl",
2026-06-23T09:38:02.9947023Z         "unit"
2026-06-23T09:38:02.9947123Z       ],
2026-06-23T09:38:02.9947238Z       "stages": {
2026-06-23T09:38:02.9947338Z         "doc": {
2026-06-23T09:38:02.9947457Z           "complete": false,
2026-06-23T09:38:02.9947562Z           "evidence": []
2026-06-23T09:38:02.9947657Z         },
2026-06-23T09:38:02.9947763Z         "impl": {
2026-06-23T09:38:02.9947876Z           "complete": true,
2026-06-23T09:38:02.9947982Z           "evidence": [
2026-06-23T09:38:02.9948087Z             {
2026-06-23T09:38:02.9948228Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:02.9948343Z               "line": 15
2026-06-23T09:38:02.9948444Z             },
2026-06-23T09:38:02.9948552Z             {
2026-06-23T09:38:02.9948691Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9948801Z               "line": 55
2026-06-23T09:38:02.9948905Z             },
2026-06-23T09:38:02.9949068Z             {
2026-06-23T09:38:02.9949214Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9949325Z               "line": 66
2026-06-23T09:38:02.9949434Z             },
2026-06-23T09:38:02.9949524Z             {
2026-06-23T09:38:02.9949678Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9949783Z               "line": 115
2026-06-23T09:38:02.9949892Z             },
2026-06-23T09:38:02.9949998Z             {
2026-06-23T09:38:02.9950145Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9950251Z               "line": 138
2026-06-23T09:38:02.9950351Z             }
2026-06-23T09:38:02.9950459Z           ]
2026-06-23T09:38:02.9950554Z         },
2026-06-23T09:38:02.9950663Z         "int": {
2026-06-23T09:38:02.9950780Z           "complete": false,
2026-06-23T09:38:02.9950890Z           "evidence": []
2026-06-23T09:38:02.9950991Z         },
2026-06-23T09:38:02.9951095Z         "unit": {
2026-06-23T09:38:02.9951205Z           "complete": true,
2026-06-23T09:38:02.9951310Z           "evidence": [
2026-06-23T09:38:02.9951414Z             {
2026-06-23T09:38:02.9951563Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:02.9951796Z               "line": 363
2026-06-23T09:38:02.9951892Z             },
2026-06-23T09:38:02.9951997Z             {
2026-06-23T09:38:02.9952125Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:02.9952236Z               "line": 369
2026-06-23T09:38:02.9952340Z             },
2026-06-23T09:38:02.9952444Z             {
2026-06-23T09:38:02.9952569Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:02.9952769Z               "line": 383
2026-06-23T09:38:02.9952861Z             },
2026-06-23T09:38:02.9952968Z             {
2026-06-23T09:38:02.9953094Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:02.9953195Z               "line": 392
2026-06-23T09:38:02.9953302Z             },
2026-06-23T09:38:02.9953406Z             {
2026-06-23T09:38:02.9953549Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9953657Z               "line": 195
2026-06-23T09:38:02.9953753Z             },
2026-06-23T09:38:02.9953848Z             {
2026-06-23T09:38:02.9953991Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9954096Z               "line": 208
2026-06-23T09:38:02.9954191Z             },
2026-06-23T09:38:02.9954296Z             {
2026-06-23T09:38:02.9954426Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9954530Z               "line": 271
2026-06-23T09:38:02.9954629Z             },
2026-06-23T09:38:02.9954721Z             {
2026-06-23T09:38:02.9954863Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9954973Z               "line": 290
2026-06-23T09:38:02.9955084Z             },
2026-06-23T09:38:02.9955183Z             {
2026-06-23T09:38:02.9955316Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:02.9955422Z               "line": 319
2026-06-23T09:38:02.9955511Z             }
2026-06-23T09:38:02.9955617Z           ]
2026-06-23T09:38:02.9955719Z         }
2026-06-23T09:38:02.9955831Z       }
2026-06-23T09:38:02.9955930Z     },
2026-06-23T09:38:02.9956031Z     {
2026-06-23T09:38:02.9956171Z       "id": "REQ-HAZARD-RESTART-IDEMPOTENT",
2026-06-23T09:38:02.9956472Z       "title": "Idempotent/exactly-once delivery across brain restart at every broker boundary (codex #14)",
2026-06-23T09:38:02.9956576Z       "requiredStages": [
2026-06-23T09:38:02.9956673Z         "impl",
2026-06-23T09:38:02.9956773Z         "unit",
2026-06-23T09:38:02.9956872Z         "int"
2026-06-23T09:38:02.9956983Z       ],
2026-06-23T09:38:02.9957083Z       "stages": {
2026-06-23T09:38:02.9957187Z         "doc": {
2026-06-23T09:38:02.9957303Z           "complete": false,
2026-06-23T09:38:02.9957416Z           "evidence": []
2026-06-23T09:38:02.9957521Z         },
2026-06-23T09:38:02.9957622Z         "impl": {
2026-06-23T09:38:02.9957774Z           "complete": true,
2026-06-23T09:38:02.9957878Z           "evidence": [
2026-06-23T09:38:02.9957984Z             {
2026-06-23T09:38:02.9958131Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9958285Z               "line": 480
2026-06-23T09:38:02.9958393Z             },
2026-06-23T09:38:02.9958484Z             {
2026-06-23T09:38:02.9958623Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9958750Z               "line": 1038
2026-06-23T09:38:02.9958850Z             },
2026-06-23T09:38:02.9959041Z             {
2026-06-23T09:38:02.9959170Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9959285Z               "line": 1083
2026-06-23T09:38:02.9959384Z             },
2026-06-23T09:38:02.9959489Z             {
2026-06-23T09:38:02.9959633Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:02.9959737Z               "line": 1108
2026-06-23T09:38:02.9959832Z             },
2026-06-23T09:38:02.9959938Z             {
2026-06-23T09:38:02.9960080Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9960186Z               "line": 1777
2026-06-23T09:38:02.9960295Z             },
2026-06-23T09:38:02.9960399Z             {
2026-06-23T09:38:02.9960638Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9960753Z               "line": 2022
2026-06-23T09:38:02.9960849Z             },
2026-06-23T09:38:02.9960953Z             {
2026-06-23T09:38:02.9961085Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9961195Z               "line": 2153
2026-06-23T09:38:02.9961293Z             },
2026-06-23T09:38:02.9961484Z             {
2026-06-23T09:38:02.9961622Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:02.9961731Z               "line": 2201
2026-06-23T09:38:02.9961837Z             },
2026-06-23T09:38:02.9961942Z             {
2026-06-23T09:38:02.9962085Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9962194Z               "line": 46
2026-06-23T09:38:02.9962284Z             },
2026-06-23T09:38:02.9962390Z             {
2026-06-23T09:38:02.9962528Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9962646Z               "line": 200
2026-06-23T09:38:02.9962743Z             },
2026-06-23T09:38:02.9962847Z             {
2026-06-23T09:38:02.9962981Z               "path": "crates/spt-daemon/src/wan.rs",
2026-06-23T09:38:02.9963092Z               "line": 132
2026-06-23T09:38:02.9963195Z             },
2026-06-23T09:38:02.9963300Z             {
2026-06-23T09:38:02.9963449Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9963553Z               "line": 137
2026-06-23T09:38:02.9963654Z             },
2026-06-23T09:38:02.9963764Z             {
2026-06-23T09:38:02.9963900Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9964010Z               "line": 183
2026-06-23T09:38:02.9964105Z             }
2026-06-23T09:38:02.9964203Z           ]
2026-06-23T09:38:02.9964308Z         },
2026-06-23T09:38:02.9964408Z         "int": {
2026-06-23T09:38:02.9964527Z           "complete": true,
2026-06-23T09:38:02.9964637Z           "evidence": [
2026-06-23T09:38:02.9964742Z             {
2026-06-23T09:38:02.9964894Z               "path": "crates/spt-daemon/tests/idempotent.rs",
2026-06-23T09:38:02.9965000Z               "line": 27
2026-06-23T09:38:02.9965110Z             },
2026-06-23T09:38:02.9965209Z             {
2026-06-23T09:38:02.9965367Z               "path": "crates/spt-daemon/tests/netbroker.rs",
2026-06-23T09:38:02.9965471Z               "line": 148
2026-06-23T09:38:02.9965576Z             },
2026-06-23T09:38:02.9965673Z             {
2026-06-23T09:38:02.9965819Z               "path": "crates/spt-daemon/tests/netstream.rs",
2026-06-23T09:38:02.9965925Z               "line": 200
2026-06-23T09:38:02.9966020Z             }
2026-06-23T09:38:02.9966129Z           ]
2026-06-23T09:38:02.9966245Z         },
2026-06-23T09:38:02.9966354Z         "unit": {
2026-06-23T09:38:02.9966462Z           "complete": true,
2026-06-23T09:38:02.9966567Z           "evidence": [
2026-06-23T09:38:02.9966671Z             {
2026-06-23T09:38:02.9966817Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9966932Z               "line": 366
2026-06-23T09:38:02.9967032Z             },
2026-06-23T09:38:02.9967136Z             {
2026-06-23T09:38:02.9967271Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9967380Z               "line": 398
2026-06-23T09:38:02.9967489Z             },
2026-06-23T09:38:02.9967595Z             {
2026-06-23T09:38:02.9967742Z               "path": "crates/spt-daemon/src/effect.rs",
2026-06-23T09:38:02.9967848Z               "line": 419
2026-06-23T09:38:02.9967952Z             },
2026-06-23T09:38:02.9968052Z             {
2026-06-23T09:38:02.9968197Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:02.9968310Z               "line": 637
2026-06-23T09:38:02.9968410Z             },
2026-06-23T09:38:02.9968516Z             {
2026-06-23T09:38:02.9968653Z               "path": "crates/spt-daemon/tests/wanmsg.rs",
2026-06-23T09:38:02.9968763Z               "line": 289
2026-06-23T09:38:02.9968869Z             },
2026-06-23T09:38:02.9969151Z             {
2026-06-23T09:38:02.9969301Z               "path": "crates/spt-daemon/tests/xfer.rs",
2026-06-23T09:38:02.9969410Z               "line": 230
2026-06-23T09:38:02.9969516Z             },
2026-06-23T09:38:02.9969620Z             {
2026-06-23T09:38:02.9969753Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9969859Z               "line": 526
2026-06-23T09:38:02.9970054Z             },
2026-06-23T09:38:02.9970164Z             {
2026-06-23T09:38:02.9970287Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:02.9970392Z               "line": 556
2026-06-23T09:38:02.9970488Z             }
2026-06-23T09:38:02.9970588Z           ]
2026-06-23T09:38:02.9970683Z         }
2026-06-23T09:38:02.9970784Z       }
2026-06-23T09:38:02.9970874Z     },
2026-06-23T09:38:02.9970964Z     {
2026-06-23T09:38:02.9971113Z       "id": "REQ-HAZARD-ROLLBACK-STATE-COMPAT",
2026-06-23T09:38:02.9972882Z       "title": "A brain must not irreversibly migrate durable state before update ready-promotion: the readiness-gated auto-rollback (ADR-0018 Q7) spawns the N-1 binary against durable state the new brain may have written, so every pre-ready write must stay N-1-readable (schema migrations gated behind ready-promotion, or written N-1-tolerant/additive). Else the first in-place schema migration silently bricks rollback (KNOWN-HAZARDS 6.8). Free now — a 2026-06-09 audit confirmed zero state-migration code exists; unmintable retroactively once a migration ships.",
2026-06-23T09:38:02.9973008Z       "requiredStages": [
2026-06-23T09:38:02.9973117Z         "doc",
2026-06-23T09:38:02.9973216Z         "impl",
2026-06-23T09:38:02.9973322Z         "unit"
2026-06-23T09:38:02.9973426Z       ],
2026-06-23T09:38:02.9973536Z       "stages": {
2026-06-23T09:38:02.9973637Z         "doc": {
2026-06-23T09:38:02.9973732Z           "complete": true,
2026-06-23T09:38:02.9973846Z           "evidence": [
2026-06-23T09:38:02.9973943Z             {
2026-06-23T09:38:02.9974089Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:02.9974195Z               "line": 314
2026-06-23T09:38:02.9974300Z             }
2026-06-23T09:38:02.9974403Z           ]
2026-06-23T09:38:02.9974493Z         },
2026-06-23T09:38:02.9974603Z         "impl": {
2026-06-23T09:38:02.9974707Z           "complete": true,
2026-06-23T09:38:02.9974820Z           "evidence": [
2026-06-23T09:38:02.9974920Z             {
2026-06-23T09:38:02.9975096Z               "path": "crates/spt-daemon/src/rollback_compat.rs",
2026-06-23T09:38:02.9975212Z               "line": 33
2026-06-23T09:38:02.9975311Z             },
2026-06-23T09:38:02.9975406Z             {
2026-06-23T09:38:02.9975555Z               "path": "crates/spt-daemon/src/rollback_compat.rs",
2026-06-23T09:38:02.9975665Z               "line": 39
2026-06-23T09:38:02.9975769Z             }
2026-06-23T09:38:02.9975884Z           ]
2026-06-23T09:38:02.9976013Z         },
2026-06-23T09:38:02.9976122Z         "int": {
2026-06-23T09:38:02.9976237Z           "complete": false,
2026-06-23T09:38:02.9976346Z           "evidence": []
2026-06-23T09:38:02.9976456Z         },
2026-06-23T09:38:02.9976557Z         "unit": {
2026-06-23T09:38:02.9976670Z           "complete": true,
2026-06-23T09:38:02.9976771Z           "evidence": [
2026-06-23T09:38:02.9976872Z             {
2026-06-23T09:38:02.9977037Z               "path": "crates/spt-daemon/src/rollback_compat.rs",
2026-06-23T09:38:02.9977141Z               "line": 95
2026-06-23T09:38:02.9977250Z             }
2026-06-23T09:38:02.9977339Z           ]
2026-06-23T09:38:02.9977444Z         }
2026-06-23T09:38:02.9977545Z       }
2026-06-23T09:38:02.9977644Z     },
2026-06-23T09:38:02.9977740Z     {
2026-06-23T09:38:02.9977864Z       "id": "REQ-HAZARD-ROSTER-GHOST",
2026-06-23T09:38:02.9980542Z       "title": "A LOCAL subnet roster entry whose backing perch is erased does NOT keep advertising Active (no phantom perch-less endpoint). `api session-end <id> --erase` removes the perch (owlery dir gone) but the subnet roster (identity/registry/<subnet>.json) keeps the endpoint's instance row ACTIVE with no backing perch; `endpoint stop` says 'address unregistered' yet the line persists; no CLI verb forgets a roster entry, and a hand-edit is re-added by the single-writer daemon advertiser. FIX: daemon-side self-heal — the advertiser DROPS/forgets a LOCAL roster entry whose backing perch no longer exists (stops advertising it Active), and/or a `forget`/evict verb; verify whether the epoch lease eventually evicts it (slow-self-heal) vs a real leak and scope accordingly. doyle secondary finding (perri). (post-v0.10.0)",
2026-06-23T09:38:02.9980781Z       "requiredStages": [
2026-06-23T09:38:02.9980886Z         "impl",
2026-06-23T09:38:02.9980982Z         "unit"
2026-06-23T09:38:02.9981082Z       ],
2026-06-23T09:38:02.9981191Z       "stages": {
2026-06-23T09:38:02.9981287Z         "doc": {
2026-06-23T09:38:02.9981401Z           "complete": false,
2026-06-23T09:38:02.9981506Z           "evidence": []
2026-06-23T09:38:02.9981607Z         },
2026-06-23T09:38:02.9981725Z         "impl": {
2026-06-23T09:38:02.9981840Z           "complete": true,
2026-06-23T09:38:02.9981936Z           "evidence": [
2026-06-23T09:38:02.9982044Z             {
2026-06-23T09:38:02.9982201Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9982315Z               "line": 488
2026-06-23T09:38:02.9982418Z             }
2026-06-23T09:38:02.9982527Z           ]
2026-06-23T09:38:02.9982633Z         },
2026-06-23T09:38:02.9982738Z         "int": {
2026-06-23T09:38:02.9982866Z           "complete": false,
2026-06-23T09:38:02.9982977Z           "evidence": []
2026-06-23T09:38:02.9983081Z         },
2026-06-23T09:38:02.9983185Z         "unit": {
2026-06-23T09:38:02.9983305Z           "complete": true,
2026-06-23T09:38:02.9983410Z           "evidence": [
2026-06-23T09:38:02.9983505Z             {
2026-06-23T09:38:02.9983662Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:02.9983771Z               "line": 1466
2026-06-23T09:38:02.9983882Z             }
2026-06-23T09:38:02.9983973Z           ]
2026-06-23T09:38:02.9984082Z         }
2026-06-23T09:38:02.9984188Z       }
2026-06-23T09:38:02.9984287Z     },
2026-06-23T09:38:02.9984392Z     {
2026-06-23T09:38:02.9984517Z       "id": "REQ-HAZARD-SELF-ELEVATE",
2026-06-23T09:38:02.9986711Z       "title": "Self-elevation (REQ-ELEVATE-1) re-runs the EXACT original invocation with the binary's ABSOLUTE exe path — never widening privilege scope, never adding/altering args, never via a PATH-resolved bare name, never via a shell-interpolated command string (argv-array only, no `sh -c`); the elevated child drops state back to the user (composes with the 5.7 de-elevation) and NEVER re-elevates (loop-safe: decide_elevation_path returns AlreadyElevated whenever the process is already Elevated, on every OS). The user's UAC/polkit/sudo prompt is the only consent gate — we never bypass it; the print-hint floor prints the absolute-path command too. The unprivileged parent never depends on (pipes/captures) the privileged child's stdout.",
2026-06-23T09:38:02.9986831Z       "requiredStages": [
2026-06-23T09:38:02.9986930Z         "unit"
2026-06-23T09:38:02.9987036Z       ],
2026-06-23T09:38:02.9987141Z       "stages": {
2026-06-23T09:38:02.9987245Z         "doc": {
2026-06-23T09:38:02.9987351Z           "complete": false,
2026-06-23T09:38:02.9987460Z           "evidence": []
2026-06-23T09:38:02.9987568Z         },
2026-06-23T09:38:02.9987678Z         "impl": {
2026-06-23T09:38:02.9987792Z           "complete": true,
2026-06-23T09:38:02.9987899Z           "evidence": [
2026-06-23T09:38:02.9988005Z             {
2026-06-23T09:38:02.9988144Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9988252Z               "line": 4175
2026-06-23T09:38:02.9988348Z             },
2026-06-23T09:38:02.9988443Z             {
2026-06-23T09:38:02.9988576Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9988682Z               "line": 4227
2026-06-23T09:38:02.9988787Z             },
2026-06-23T09:38:02.9989054Z             {
2026-06-23T09:38:02.9989181Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:02.9989292Z               "line": 4272
2026-06-23T09:38:02.9989392Z             },
2026-06-23T09:38:02.9989496Z             {
2026-06-23T09:38:02.9989631Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9989735Z               "line": 92
2026-06-23T09:38:02.9989835Z             },
2026-06-23T09:38:02.9990031Z             {
2026-06-23T09:38:02.9990169Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9990280Z               "line": 148
2026-06-23T09:38:02.9990388Z             },
2026-06-23T09:38:02.9990487Z             {
2026-06-23T09:38:02.9990617Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9990726Z               "line": 192
2026-06-23T09:38:02.9990830Z             },
2026-06-23T09:38:02.9990937Z             {
2026-06-23T09:38:02.9991069Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9991184Z               "line": 200
2026-06-23T09:38:02.9991284Z             },
2026-06-23T09:38:02.9991389Z             {
2026-06-23T09:38:02.9991527Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9991627Z               "line": 211
2026-06-23T09:38:02.9991741Z             },
2026-06-23T09:38:02.9991842Z             {
2026-06-23T09:38:02.9991980Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9992090Z               "line": 265
2026-06-23T09:38:02.9992191Z             },
2026-06-23T09:38:02.9992295Z             {
2026-06-23T09:38:02.9992423Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9992535Z               "line": 279
2026-06-23T09:38:02.9992633Z             }
2026-06-23T09:38:02.9992727Z           ]
2026-06-23T09:38:02.9992823Z         },
2026-06-23T09:38:02.9992931Z         "int": {
2026-06-23T09:38:02.9993054Z           "complete": false,
2026-06-23T09:38:02.9993165Z           "evidence": []
2026-06-23T09:38:02.9993274Z         },
2026-06-23T09:38:02.9993378Z         "unit": {
2026-06-23T09:38:02.9993498Z           "complete": true,
2026-06-23T09:38:02.9993607Z           "evidence": [
2026-06-23T09:38:02.9993716Z             {
2026-06-23T09:38:02.9993856Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9993965Z               "line": 419
2026-06-23T09:38:02.9994070Z             },
2026-06-23T09:38:02.9994166Z             {
2026-06-23T09:38:02.9994303Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9994419Z               "line": 470
2026-06-23T09:38:02.9994523Z             },
2026-06-23T09:38:02.9994633Z             {
2026-06-23T09:38:02.9994763Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9994876Z               "line": 499
2026-06-23T09:38:02.9994976Z             },
2026-06-23T09:38:02.9995073Z             {
2026-06-23T09:38:02.9995195Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:02.9995305Z               "line": 526
2026-06-23T09:38:02.9995411Z             }
2026-06-23T09:38:02.9995514Z           ]
2026-06-23T09:38:02.9995618Z         }
2026-06-23T09:38:02.9995714Z       }
2026-06-23T09:38:02.9995813Z     },
2026-06-23T09:38:02.9995916Z     {
2026-06-23T09:38:02.9996055Z       "id": "REQ-HAZARD-SINGLE-PATH-SOURCE",
2026-06-23T09:38:02.9996279Z       "title": "Single path/registry source of truth; no layout ambiguity (6.1)",
2026-06-23T09:38:02.9996418Z       "requiredStages": [
2026-06-23T09:38:02.9996546Z         "impl",
2026-06-23T09:38:02.9996642Z         "unit"
2026-06-23T09:38:02.9996752Z       ],
2026-06-23T09:38:02.9996861Z       "stages": {
2026-06-23T09:38:02.9996966Z         "doc": {
2026-06-23T09:38:02.9997076Z           "complete": false,
2026-06-23T09:38:02.9997185Z           "evidence": []
2026-06-23T09:38:02.9997291Z         },
2026-06-23T09:38:02.9997395Z         "impl": {
2026-06-23T09:38:02.9997509Z           "complete": true,
2026-06-23T09:38:02.9997625Z           "evidence": [
2026-06-23T09:38:02.9997715Z             {
2026-06-23T09:38:02.9997973Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9998086Z               "line": 62
2026-06-23T09:38:02.9998195Z             },
2026-06-23T09:38:02.9998295Z             {
2026-06-23T09:38:02.9998450Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9998550Z               "line": 71
2026-06-23T09:38:02.9998651Z             },
2026-06-23T09:38:02.9998850Z             {
2026-06-23T09:38:02.9999075Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9999184Z               "line": 80
2026-06-23T09:38:02.9999285Z             },
2026-06-23T09:38:02.9999380Z             {
2026-06-23T09:38:02.9999533Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:02.9999633Z               "line": 88
2026-06-23T09:38:02.9999742Z             },
2026-06-23T09:38:02.9999838Z             {
2026-06-23T09:38:02.9999985Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0000090Z               "line": 33
2026-06-23T09:38:03.0000196Z             },
2026-06-23T09:38:03.0000304Z             {
2026-06-23T09:38:03.0000443Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0000550Z               "line": 65
2026-06-23T09:38:03.0000657Z             },
2026-06-23T09:38:03.0000749Z             {
2026-06-23T09:38:03.0000883Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0000990Z               "line": 74
2026-06-23T09:38:03.0001095Z             },
2026-06-23T09:38:03.0001201Z             {
2026-06-23T09:38:03.0001348Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0001453Z               "line": 93
2026-06-23T09:38:03.0001558Z             },
2026-06-23T09:38:03.0001653Z             {
2026-06-23T09:38:03.0001793Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0001897Z               "line": 102
2026-06-23T09:38:03.0002001Z             },
2026-06-23T09:38:03.0002107Z             {
2026-06-23T09:38:03.0002235Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0002349Z               "line": 111
2026-06-23T09:38:03.0002451Z             },
2026-06-23T09:38:03.0002554Z             {
2026-06-23T09:38:03.0002693Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0002803Z               "line": 122
2026-06-23T09:38:03.0002907Z             },
2026-06-23T09:38:03.0003012Z             {
2026-06-23T09:38:03.0003146Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0003255Z               "line": 140
2026-06-23T09:38:03.0003354Z             },
2026-06-23T09:38:03.0003459Z             {
2026-06-23T09:38:03.0003591Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0003700Z               "line": 149
2026-06-23T09:38:03.0003806Z             },
2026-06-23T09:38:03.0003915Z             {
2026-06-23T09:38:03.0004054Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0004158Z               "line": 158
2026-06-23T09:38:03.0004267Z             },
2026-06-23T09:38:03.0004369Z             {
2026-06-23T09:38:03.0004501Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0004606Z               "line": 169
2026-06-23T09:38:03.0004716Z             },
2026-06-23T09:38:03.0004821Z             {
2026-06-23T09:38:03.0004959Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0005078Z               "line": 177
2026-06-23T09:38:03.0005178Z             },
2026-06-23T09:38:03.0005279Z             {
2026-06-23T09:38:03.0005402Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0005507Z               "line": 186
2026-06-23T09:38:03.0005614Z             },
2026-06-23T09:38:03.0005713Z             {
2026-06-23T09:38:03.0005846Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0005953Z               "line": 195
2026-06-23T09:38:03.0006056Z             },
2026-06-23T09:38:03.0006159Z             {
2026-06-23T09:38:03.0006391Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0006505Z               "line": 204
2026-06-23T09:38:03.0006606Z             },
2026-06-23T09:38:03.0006702Z             {
2026-06-23T09:38:03.0006839Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0006950Z               "line": 216
2026-06-23T09:38:03.0007054Z             },
2026-06-23T09:38:03.0007255Z             {
2026-06-23T09:38:03.0007397Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0007507Z               "line": 223
2026-06-23T09:38:03.0007603Z             },
2026-06-23T09:38:03.0007698Z             {
2026-06-23T09:38:03.0007831Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0007941Z               "line": 232
2026-06-23T09:38:03.0008046Z             },
2026-06-23T09:38:03.0008151Z             {
2026-06-23T09:38:03.0008289Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0008394Z               "line": 239
2026-06-23T09:38:03.0008495Z             },
2026-06-23T09:38:03.0008590Z             {
2026-06-23T09:38:03.0008726Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0008836Z               "line": 306
2026-06-23T09:38:03.0009010Z             },
2026-06-23T09:38:03.0009105Z             {
2026-06-23T09:38:03.0009235Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0009348Z               "line": 318
2026-06-23T09:38:03.0009459Z             },
2026-06-23T09:38:03.0009559Z             {
2026-06-23T09:38:03.0009701Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0009807Z               "line": 405
2026-06-23T09:38:03.0009912Z             }
2026-06-23T09:38:03.0010016Z           ]
2026-06-23T09:38:03.0010117Z         },
2026-06-23T09:38:03.0010212Z         "int": {
2026-06-23T09:38:03.0010321Z           "complete": false,
2026-06-23T09:38:03.0010432Z           "evidence": []
2026-06-23T09:38:03.0010536Z         },
2026-06-23T09:38:03.0010631Z         "unit": {
2026-06-23T09:38:03.0010747Z           "complete": true,
2026-06-23T09:38:03.0010851Z           "evidence": [
2026-06-23T09:38:03.0010955Z             {
2026-06-23T09:38:03.0011081Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0011189Z               "line": 487
2026-06-23T09:38:03.0011299Z             },
2026-06-23T09:38:03.0011400Z             {
2026-06-23T09:38:03.0011541Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0011645Z               "line": 528
2026-06-23T09:38:03.0011752Z             },
2026-06-23T09:38:03.0011861Z             {
2026-06-23T09:38:03.0011989Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0012099Z               "line": 541
2026-06-23T09:38:03.0012199Z             },
2026-06-23T09:38:03.0012309Z             {
2026-06-23T09:38:03.0012442Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0012551Z               "line": 627
2026-06-23T09:38:03.0012662Z             }
2026-06-23T09:38:03.0012752Z           ]
2026-06-23T09:38:03.0012852Z         }
2026-06-23T09:38:03.0012953Z       }
2026-06-23T09:38:03.0013058Z     },
2026-06-23T09:38:03.0013158Z     {
2026-06-23T09:38:03.0013283Z       "id": "REQ-HAZARD-SOFT-CLEANUP",
2026-06-23T09:38:03.0013505Z       "title": "Soft-cleanup preserves state, removes only the ready marker (6.2)",
2026-06-23T09:38:03.0013616Z       "requiredStages": [
2026-06-23T09:38:03.0013720Z         "impl",
2026-06-23T09:38:03.0013829Z         "unit"
2026-06-23T09:38:03.0013924Z       ],
2026-06-23T09:38:03.0014028Z       "stages": {
2026-06-23T09:38:03.0014137Z         "doc": {
2026-06-23T09:38:03.0014251Z           "complete": false,
2026-06-23T09:38:03.0014362Z           "evidence": []
2026-06-23T09:38:03.0014465Z         },
2026-06-23T09:38:03.0014561Z         "impl": {
2026-06-23T09:38:03.0014676Z           "complete": true,
2026-06-23T09:38:03.0014785Z           "evidence": [
2026-06-23T09:38:03.0014890Z             {
2026-06-23T09:38:03.0015210Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.0015324Z               "line": 175
2026-06-23T09:38:03.0015428Z             },
2026-06-23T09:38:03.0015524Z             {
2026-06-23T09:38:03.0015677Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.0015791Z               "line": 171
2026-06-23T09:38:03.0015897Z             }
2026-06-23T09:38:03.0016101Z           ]
2026-06-23T09:38:03.0016203Z         },
2026-06-23T09:38:03.0016310Z         "int": {
2026-06-23T09:38:03.0016421Z           "complete": false,
2026-06-23T09:38:03.0016537Z           "evidence": []
2026-06-23T09:38:03.0016634Z         },
2026-06-23T09:38:03.0016743Z         "unit": {
2026-06-23T09:38:03.0016863Z           "complete": true,
2026-06-23T09:38:03.0016961Z           "evidence": [
2026-06-23T09:38:03.0017060Z             {
2026-06-23T09:38:03.0017195Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.0017309Z               "line": 297
2026-06-23T09:38:03.0017413Z             },
2026-06-23T09:38:03.0017519Z             {
2026-06-23T09:38:03.0017657Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.0017767Z               "line": 836
2026-06-23T09:38:03.0017877Z             },
2026-06-23T09:38:03.0017971Z             {
2026-06-23T09:38:03.0018111Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.0018224Z               "line": 849
2026-06-23T09:38:03.0018315Z             }
2026-06-23T09:38:03.0018421Z           ]
2026-06-23T09:38:03.0018515Z         }
2026-06-23T09:38:03.0018615Z       }
2026-06-23T09:38:03.0018711Z     },
2026-06-23T09:38:03.0018821Z     {
2026-06-23T09:38:03.0019036Z       "id": "REQ-HAZARD-STALE-INDEX-LOCK",
2026-06-23T09:38:03.0019206Z       "title": "Sweep stale lockfiles on daemon boot (1.3)",
2026-06-23T09:38:03.0019315Z       "requiredStages": [
2026-06-23T09:38:03.0019424Z         "impl",
2026-06-23T09:38:03.0019528Z         "unit"
2026-06-23T09:38:03.0019632Z       ],
2026-06-23T09:38:03.0019737Z       "stages": {
2026-06-23T09:38:03.0019833Z         "doc": {
2026-06-23T09:38:03.0019956Z           "complete": false,
2026-06-23T09:38:03.0020067Z           "evidence": []
2026-06-23T09:38:03.0020167Z         },
2026-06-23T09:38:03.0020271Z         "impl": {
2026-06-23T09:38:03.0020377Z           "complete": true,
2026-06-23T09:38:03.0020496Z           "evidence": [
2026-06-23T09:38:03.0020595Z             {
2026-06-23T09:38:03.0020744Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0020853Z               "line": 116
2026-06-23T09:38:03.0020948Z             },
2026-06-23T09:38:03.0021049Z             {
2026-06-23T09:38:03.0021196Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0023727Z               "line": 507
2026-06-23T09:38:03.0023857Z             }
2026-06-23T09:38:03.0023966Z           ]
2026-06-23T09:38:03.0024061Z         },
2026-06-23T09:38:03.0024157Z         "int": {
2026-06-23T09:38:03.0024285Z           "complete": false,
2026-06-23T09:38:03.0024389Z           "evidence": []
2026-06-23T09:38:03.0024489Z         },
2026-06-23T09:38:03.0024594Z         "unit": {
2026-06-23T09:38:03.0024711Z           "complete": true,
2026-06-23T09:38:03.0024825Z           "evidence": [
2026-06-23T09:38:03.0024922Z             {
2026-06-23T09:38:03.0025092Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0025207Z               "line": 541
2026-06-23T09:38:03.0025311Z             }
2026-06-23T09:38:03.0025411Z           ]
2026-06-23T09:38:03.0025508Z         }
2026-06-23T09:38:03.0025603Z       }
2026-06-23T09:38:03.0025698Z     },
2026-06-23T09:38:03.0025799Z     {
2026-06-23T09:38:03.0025937Z       "id": "REQ-HAZARD-STALE-SIGNOFF-SENTINEL",
2026-06-23T09:38:03.0026133Z       "title": "Stale signoff sentinel does not kill a fresh start (3.2)",
2026-06-23T09:38:03.0026252Z       "requiredStages": [
2026-06-23T09:38:03.0026361Z         "impl",
2026-06-23T09:38:03.0026467Z         "unit"
2026-06-23T09:38:03.0026710Z       ],
2026-06-23T09:38:03.0026824Z       "stages": {
2026-06-23T09:38:03.0026919Z         "doc": {
2026-06-23T09:38:03.0027034Z           "complete": false,
2026-06-23T09:38:03.0027143Z           "evidence": []
2026-06-23T09:38:03.0027252Z         },
2026-06-23T09:38:03.0027366Z         "impl": {
2026-06-23T09:38:03.0027474Z           "complete": true,
2026-06-23T09:38:03.0027583Z           "evidence": [
2026-06-23T09:38:03.0027779Z             {
2026-06-23T09:38:03.0027935Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0028042Z               "line": 763
2026-06-23T09:38:03.0028141Z             },
2026-06-23T09:38:03.0028250Z             {
2026-06-23T09:38:03.0028380Z               "path": "crates/spt-live/src/signoff.rs",
2026-06-23T09:38:03.0028498Z               "line": 28
2026-06-23T09:38:03.0028598Z             }
2026-06-23T09:38:03.0028700Z           ]
2026-06-23T09:38:03.0028799Z         },
2026-06-23T09:38:03.0028908Z         "int": {
2026-06-23T09:38:03.0029104Z           "complete": false,
2026-06-23T09:38:03.0029214Z           "evidence": []
2026-06-23T09:38:03.0029320Z         },
2026-06-23T09:38:03.0029423Z         "unit": {
2026-06-23T09:38:03.0029533Z           "complete": true,
2026-06-23T09:38:03.0029640Z           "evidence": [
2026-06-23T09:38:03.0029733Z             {
2026-06-23T09:38:03.0029875Z               "path": "crates/spt-live/src/signoff.rs",
2026-06-23T09:38:03.0029980Z               "line": 229
2026-06-23T09:38:03.0030078Z             }
2026-06-23T09:38:03.0030182Z           ]
2026-06-23T09:38:03.0030279Z         }
2026-06-23T09:38:03.0030384Z       }
2026-06-23T09:38:03.0030474Z     },
2026-06-23T09:38:03.0030569Z     {
2026-06-23T09:38:03.0030708Z       "id": "REQ-HAZARD-STDIN-SESSION-ID",
2026-06-23T09:38:03.0030874Z       "title": "Stdin session_id precedence over env (2.2)",
2026-06-23T09:38:03.0030980Z       "requiredStages": [],
2026-06-23T09:38:03.0031084Z       "stages": {
2026-06-23T09:38:03.0031180Z         "doc": {
2026-06-23T09:38:03.0031294Z           "complete": false,
2026-06-23T09:38:03.0031408Z           "evidence": []
2026-06-23T09:38:03.0031509Z         },
2026-06-23T09:38:03.0031614Z         "impl": {
2026-06-23T09:38:03.0031723Z           "complete": false,
2026-06-23T09:38:03.0031833Z           "evidence": []
2026-06-23T09:38:03.0031929Z         },
2026-06-23T09:38:03.0032038Z         "int": {
2026-06-23T09:38:03.0032148Z           "complete": false,
2026-06-23T09:38:03.0032258Z           "evidence": []
2026-06-23T09:38:03.0032362Z         },
2026-06-23T09:38:03.0032463Z         "unit": {
2026-06-23T09:38:03.0032577Z           "complete": false,
2026-06-23T09:38:03.0032676Z           "evidence": []
2026-06-23T09:38:03.0032776Z         }
2026-06-23T09:38:03.0032872Z       }
2026-06-23T09:38:03.0032972Z     },
2026-06-23T09:38:03.0033076Z     {
2026-06-23T09:38:03.0033229Z       "id": "REQ-HAZARD-STOP-PATH-PSYCHE-ORPHAN-REAP",
2026-06-23T09:38:03.0036272Z       "title": "Endpoint-stop and brain-death reconcile MUST reap a brain-less perch's orphan detached Psyche via the cmdline-scoped guard (`psyche_orphan_should_reap`) — the handle-reap (`LiveSet::stop_host`, REQ-HAZARD-UNHOST-PSYCHE-REAP) CANNOT, because the owning brain is gone (its `psyche_child` handle died with it), and the brain-start scoped-reap (REQ-HAZARD-BRAIN-RESTART-PSYCHE-DUP) never fires for a perch being STOPPED rather than re-hosted. So the live-host calls the scoped reap after `stop_host` at the reconcile stop-side AND in `confirm_residency_or_unhost`. Preserves fail-safe-decline (pid-alive AND exe-basename==psyche-program AND cmdline contains `<id>-psyche`; any unreadable signal DECLINES — a missed dup is bounded, a wrong-kill is catastrophic). This is the orphan-leak half of the perri F-010xF-015 field bug (the unsupervised install-dir Psyche that locked an update); the other half is the psyche own-copy (ADR-0025 amendment). (v0.13.2 W3 (a))",
2026-06-23T09:38:03.0036402Z       "requiredStages": [
2026-06-23T09:38:03.0036511Z         "doc",
2026-06-23T09:38:03.0036722Z         "impl",
2026-06-23T09:38:03.0036831Z         "unit",
2026-06-23T09:38:03.0036930Z         "int"
2026-06-23T09:38:03.0037037Z       ],
2026-06-23T09:38:03.0037140Z       "stages": {
2026-06-23T09:38:03.0037250Z         "doc": {
2026-06-23T09:38:03.0037366Z           "complete": true,
2026-06-23T09:38:03.0037469Z           "evidence": [
2026-06-23T09:38:03.0037575Z             {
2026-06-23T09:38:03.0037807Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:03.0037917Z               "line": 531
2026-06-23T09:38:03.0038021Z             },
2026-06-23T09:38:03.0038124Z             {
2026-06-23T09:38:03.0038334Z               "path": "docs/adr/0025-live-daemon-coordinated-adapter-update.md",
2026-06-23T09:38:03.0038443Z               "line": 45
2026-06-23T09:38:03.0038548Z             }
2026-06-23T09:38:03.0038644Z           ]
2026-06-23T09:38:03.0038748Z         },
2026-06-23T09:38:03.0038843Z         "impl": {
2026-06-23T09:38:03.0039045Z           "complete": true,
2026-06-23T09:38:03.0039158Z           "evidence": [
2026-06-23T09:38:03.0039269Z             {
2026-06-23T09:38:03.0039416Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:03.0039522Z               "line": 292
2026-06-23T09:38:03.0039621Z             },
2026-06-23T09:38:03.0039712Z             {
2026-06-23T09:38:03.0039861Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:03.0039974Z               "line": 483
2026-06-23T09:38:03.0040079Z             },
2026-06-23T09:38:03.0040185Z             {
2026-06-23T09:38:03.0040321Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:03.0040435Z               "line": 655
2026-06-23T09:38:03.0040531Z             },
2026-06-23T09:38:03.0040620Z             {
2026-06-23T09:38:03.0040766Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:03.0040867Z               "line": 708
2026-06-23T09:38:03.0040972Z             }
2026-06-23T09:38:03.0041076Z           ]
2026-06-23T09:38:03.0041173Z         },
2026-06-23T09:38:03.0041282Z         "int": {
2026-06-23T09:38:03.0041386Z           "complete": true,
2026-06-23T09:38:03.0041488Z           "evidence": [
2026-06-23T09:38:03.0041592Z             {
2026-06-23T09:38:03.0041764Z               "path": "crates/spt/tests/live_adapt_psyche_lock_e2e.rs",
2026-06-23T09:38:03.0041864Z               "line": 95
2026-06-23T09:38:03.0041964Z             },
2026-06-23T09:38:03.0042069Z             {
2026-06-23T09:38:03.0042236Z               "path": "crates/spt/tests/live_adapt_psyche_lock_e2e.rs",
2026-06-23T09:38:03.0042336Z               "line": 372
2026-06-23T09:38:03.0042437Z             }
2026-06-23T09:38:03.0042541Z           ]
2026-06-23T09:38:03.0042641Z         },
2026-06-23T09:38:03.0042747Z         "unit": {
2026-06-23T09:38:03.0042860Z           "complete": true,
2026-06-23T09:38:03.0042965Z           "evidence": [
2026-06-23T09:38:03.0043067Z             {
2026-06-23T09:38:03.0043207Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:03.0043316Z               "line": 1619
2026-06-23T09:38:03.0043412Z             },
2026-06-23T09:38:03.0043518Z             {
2026-06-23T09:38:03.0043670Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:03.0043771Z               "line": 1685
2026-06-23T09:38:03.0043875Z             }
2026-06-23T09:38:03.0043970Z           ]
2026-06-23T09:38:03.0044081Z         }
2026-06-23T09:38:03.0044180Z       }
2026-06-23T09:38:03.0044285Z     },
2026-06-23T09:38:03.0044376Z     {
2026-06-23T09:38:03.0044509Z       "id": "REQ-HAZARD-SUBPROCESS-TIMEOUT",
2026-06-23T09:38:03.0044686Z       "title": "Every harness/git subprocess has a timeout (5.3)",
2026-06-23T09:38:03.0044795Z       "requiredStages": [
2026-06-23T09:38:03.0044914Z         "impl",
2026-06-23T09:38:03.0045010Z         "unit"
2026-06-23T09:38:03.0045119Z       ],
2026-06-23T09:38:03.0045229Z       "stages": {
2026-06-23T09:38:03.0045330Z         "doc": {
2026-06-23T09:38:03.0045548Z           "complete": false,
2026-06-23T09:38:03.0045662Z           "evidence": []
2026-06-23T09:38:03.0045765Z         },
2026-06-23T09:38:03.0045869Z         "impl": {
2026-06-23T09:38:03.0045974Z           "complete": true,
2026-06-23T09:38:03.0046089Z           "evidence": [
2026-06-23T09:38:03.0046188Z             {
2026-06-23T09:38:03.0046328Z               "path": "crates/spt-live/src/turn.rs",
2026-06-23T09:38:03.0046537Z               "line": 19
2026-06-23T09:38:03.0046643Z             },
2026-06-23T09:38:03.0046742Z             {
2026-06-23T09:38:03.0046886Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0047000Z               "line": 466
2026-06-23T09:38:03.0047104Z             },
2026-06-23T09:38:03.0047210Z             {
2026-06-23T09:38:03.0047347Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0047457Z               "line": 502
2026-06-23T09:38:03.0047549Z             },
2026-06-23T09:38:03.0047658Z             {
2026-06-23T09:38:03.0047806Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0047911Z               "line": 550
2026-06-23T09:38:03.0048014Z             },
2026-06-23T09:38:03.0048111Z             {
2026-06-23T09:38:03.0048245Z               "path": "crates/spt-store/src/gitrun.rs",
2026-06-23T09:38:03.0048357Z               "line": 15
2026-06-23T09:38:03.0048462Z             },
2026-06-23T09:38:03.0048558Z             {
2026-06-23T09:38:03.0048693Z               "path": "crates/spt-store/src/gitrun.rs",
2026-06-23T09:38:03.0048799Z               "line": 48
2026-06-23T09:38:03.0048899Z             },
2026-06-23T09:38:03.0049084Z             {
2026-06-23T09:38:03.0049218Z               "path": "crates/spt-store/src/gitrun.rs",
2026-06-23T09:38:03.0049327Z               "line": 119
2026-06-23T09:38:03.0049433Z             },
2026-06-23T09:38:03.0049533Z             {
2026-06-23T09:38:03.0049661Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0049762Z               "line": 4603
2026-06-23T09:38:03.0049862Z             }
2026-06-23T09:38:03.0049966Z           ]
2026-06-23T09:38:03.0050067Z         },
2026-06-23T09:38:03.0050173Z         "int": {
2026-06-23T09:38:03.0050286Z           "complete": false,
2026-06-23T09:38:03.0050397Z           "evidence": []
2026-06-23T09:38:03.0050497Z         },
2026-06-23T09:38:03.0050601Z         "unit": {
2026-06-23T09:38:03.0050707Z           "complete": true,
2026-06-23T09:38:03.0050826Z           "evidence": [
2026-06-23T09:38:03.0050939Z             {
2026-06-23T09:38:03.0051077Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0051185Z               "line": 768
2026-06-23T09:38:03.0051284Z             },
2026-06-23T09:38:03.0051389Z             {
2026-06-23T09:38:03.0051518Z               "path": "crates/spt-store/src/gitrun.rs",
2026-06-23T09:38:03.0051636Z               "line": 165
2026-06-23T09:38:03.0051738Z             },
2026-06-23T09:38:03.0051842Z             {
2026-06-23T09:38:03.0051985Z               "path": "crates/spt-store/src/gitrun.rs",
2026-06-23T09:38:03.0052090Z               "line": 175
2026-06-23T09:38:03.0052190Z             }
2026-06-23T09:38:03.0052285Z           ]
2026-06-23T09:38:03.0052387Z         }
2026-06-23T09:38:03.0052491Z       }
2026-06-23T09:38:03.0052590Z     },
2026-06-23T09:38:03.0052692Z     {
2026-06-23T09:38:03.0052820Z       "id": "REQ-HAZARD-SUDO-SECURE-PATH",
2026-06-23T09:38:03.0053730Z       "title": "Elevation guidance on Unix names the binary's ABSOLUTE path under sudo (a user-local install ~/.local/bin · ~/.cargo/bin is not on sudo's secure_path, so bare `sudo spt` dies 'command not found'); gated commands auto-elevate on an interactive TTY, else print the runnable hint (5.10)",
2026-06-23T09:38:03.0053853Z       "requiredStages": [
2026-06-23T09:38:03.0053954Z         "impl",
2026-06-23T09:38:03.0054064Z         "unit"
2026-06-23T09:38:03.0054158Z       ],
2026-06-23T09:38:03.0054264Z       "stages": {
2026-06-23T09:38:03.0054359Z         "doc": {
2026-06-23T09:38:03.0054584Z           "complete": false,
2026-06-23T09:38:03.0054693Z           "evidence": []
2026-06-23T09:38:03.0054792Z         },
2026-06-23T09:38:03.0054898Z         "impl": {
2026-06-23T09:38:03.0055003Z           "complete": true,
2026-06-23T09:38:03.0055112Z           "evidence": [
2026-06-23T09:38:03.0055213Z             {
2026-06-23T09:38:03.0055355Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:03.0055571Z               "line": 192
2026-06-23T09:38:03.0055674Z             },
2026-06-23T09:38:03.0055770Z             {
2026-06-23T09:38:03.0055905Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:03.0056018Z               "line": 279
2026-06-23T09:38:03.0056117Z             }
2026-06-23T09:38:03.0056222Z           ]
2026-06-23T09:38:03.0056325Z         },
2026-06-23T09:38:03.0056424Z         "int": {
2026-06-23T09:38:03.0056534Z           "complete": false,
2026-06-23T09:38:03.0056631Z           "evidence": []
2026-06-23T09:38:03.0056734Z         },
2026-06-23T09:38:03.0056840Z         "unit": {
2026-06-23T09:38:03.0056954Z           "complete": true,
2026-06-23T09:38:03.0057063Z           "evidence": [
2026-06-23T09:38:03.0057169Z             {
2026-06-23T09:38:03.0057307Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:03.0057417Z               "line": 470
2026-06-23T09:38:03.0057522Z             },
2026-06-23T09:38:03.0057612Z             {
2026-06-23T09:38:03.0057750Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:03.0057860Z               "line": 526
2026-06-23T09:38:03.0057955Z             }
2026-06-23T09:38:03.0058060Z           ]
2026-06-23T09:38:03.0058152Z         }
2026-06-23T09:38:03.0058241Z       }
2026-06-23T09:38:03.0058341Z     },
2026-06-23T09:38:03.0058443Z     {
2026-06-23T09:38:03.0058579Z       "id": "REQ-HAZARD-TEMPLATE-ARGV-FILL",
2026-06-23T09:38:03.0062565Z       "title": "Command-template substitution fills argv ELEMENTS, not a re-tokenized string: spt-core currently `fill_template`s {key} values INTO the command STRING and THEN `tokenize`s the filled string (runtime.rs:94/122), so a multi-word {key} value whitespace-SPLITS into multiple argv tokens unless the adapter hand-quotes the placeholder, and a value containing a `\"` (or `;`) injects/breaks tokenization (shell-injection-adjacent). A filled value MUST become exactly ONE argv element regardless of spaces/quotes in the value. Fix: tokenize the TEMPLATE into argv FIRST, then `fill_template` EACH token, so a `{key}` slot resolves to a single element and the value never participates in tokenization (no whitespace-split, no quote/semicolon injection); preserve the missing-key / empty-command errors and `{{`/`}}` non-interpretation. perri's F-009 (v0.8.1 dogfood, argv-capture-confirmed): a multi-word `{psyche_prompt}` = \"PSYCHE REVIVAL time: epoch-ms:… incoming event: (none)\" arrived as argv[6..12] (7 stray tokens), the harness runner strict-parsed `--prompt` against the 2nd word, exited 2 within ~1s → phantom hosted perch. Applies to EVERY [session.<role>] template (psyche_init, extractor, notif, …); digest survives today only because its fills ({session_id}/{source}) are single-token.",
2026-06-23T09:38:03.0062688Z       "requiredStages": [
2026-06-23T09:38:03.0062793Z         "impl",
2026-06-23T09:38:03.0062899Z         "unit",
2026-06-23T09:38:03.0062993Z         "int"
2026-06-23T09:38:03.0063084Z       ],
2026-06-23T09:38:03.0063194Z       "stages": {
2026-06-23T09:38:03.0063304Z         "doc": {
2026-06-23T09:38:03.0063408Z           "complete": false,
2026-06-23T09:38:03.0063524Z           "evidence": []
2026-06-23T09:38:03.0063623Z         },
2026-06-23T09:38:03.0063732Z         "impl": {
2026-06-23T09:38:03.0063843Z           "complete": true,
2026-06-23T09:38:03.0063947Z           "evidence": [
2026-06-23T09:38:03.0064047Z             {
2026-06-23T09:38:03.0064206Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.0064318Z               "line": 116
2026-06-23T09:38:03.0064413Z             },
2026-06-23T09:38:03.0064614Z             {
2026-06-23T09:38:03.0064766Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.0064876Z               "line": 132
2026-06-23T09:38:03.0064981Z             },
2026-06-23T09:38:03.0065080Z             {
2026-06-23T09:38:03.0065229Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.0065324Z               "line": 434
2026-06-23T09:38:03.0065515Z             },
2026-06-23T09:38:03.0065620Z             {
2026-06-23T09:38:03.0065759Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0065868Z               "line": 139
2026-06-23T09:38:03.0065968Z             },
2026-06-23T09:38:03.0066073Z             {
2026-06-23T09:38:03.0066220Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0066321Z               "line": 329
2026-06-23T09:38:03.0066422Z             },
2026-06-23T09:38:03.0066517Z             {
2026-06-23T09:38:03.0066663Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0066773Z               "line": 558
2026-06-23T09:38:03.0066880Z             }
2026-06-23T09:38:03.0066989Z           ]
2026-06-23T09:38:03.0067090Z         },
2026-06-23T09:38:03.0067199Z         "int": {
2026-06-23T09:38:03.0067308Z           "complete": true,
2026-06-23T09:38:03.0067429Z           "evidence": [
2026-06-23T09:38:03.0067519Z             {
2026-06-23T09:38:03.0067696Z               "path": "crates/spt/tests/livehost_nonresident_e2e.rs",
2026-06-23T09:38:03.0067801Z               "line": 32
2026-06-23T09:38:03.0067905Z             }
2026-06-23T09:38:03.0068001Z           ]
2026-06-23T09:38:03.0068101Z         },
2026-06-23T09:38:03.0068210Z         "unit": {
2026-06-23T09:38:03.0068315Z           "complete": true,
2026-06-23T09:38:03.0068425Z           "evidence": [
2026-06-23T09:38:03.0068530Z             {
2026-06-23T09:38:03.0068665Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0068778Z               "line": 628
2026-06-23T09:38:03.0068892Z             },
2026-06-23T09:38:03.0069064Z             {
2026-06-23T09:38:03.0069207Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0069313Z               "line": 649
2026-06-23T09:38:03.0069417Z             },
2026-06-23T09:38:03.0069506Z             {
2026-06-23T09:38:03.0069645Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0069748Z               "line": 665
2026-06-23T09:38:03.0069856Z             },
2026-06-23T09:38:03.0069957Z             {
2026-06-23T09:38:03.0070095Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0070210Z               "line": 683
2026-06-23T09:38:03.0070306Z             },
2026-06-23T09:38:03.0070410Z             {
2026-06-23T09:38:03.0070548Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0070658Z               "line": 707
2026-06-23T09:38:03.0070758Z             }
2026-06-23T09:38:03.0070863Z           ]
2026-06-23T09:38:03.0070973Z         }
2026-06-23T09:38:03.0071078Z       }
2026-06-23T09:38:03.0071182Z     },
2026-06-23T09:38:03.0071283Z     {
2026-06-23T09:38:03.0071411Z       "id": "REQ-HAZARD-UNC-PATH-STRIP",
2026-06-23T09:38:03.0071593Z       "title": "Strip Windows UNC prefix on serialized paths (5.4)",
2026-06-23T09:38:03.0071711Z       "requiredStages": [
2026-06-23T09:38:03.0071822Z         "impl",
2026-06-23T09:38:03.0071927Z         "unit"
2026-06-23T09:38:03.0072039Z       ],
2026-06-23T09:38:03.0072130Z       "stages": {
2026-06-23T09:38:03.0072235Z         "doc": {
2026-06-23T09:38:03.0072347Z           "complete": false,
2026-06-23T09:38:03.0072456Z           "evidence": []
2026-06-23T09:38:03.0072563Z         },
2026-06-23T09:38:03.0072662Z         "impl": {
2026-06-23T09:38:03.0072781Z           "complete": true,
2026-06-23T09:38:03.0072887Z           "evidence": [
2026-06-23T09:38:03.0072996Z             {
2026-06-23T09:38:03.0073130Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:03.0073239Z               "line": 35
2026-06-23T09:38:03.0073445Z             }
2026-06-23T09:38:03.0073535Z           ]
2026-06-23T09:38:03.0073644Z         },
2026-06-23T09:38:03.0073734Z         "int": {
2026-06-23T09:38:03.0073850Z           "complete": false,
2026-06-23T09:38:03.0073959Z           "evidence": []
2026-06-23T09:38:03.0074064Z         },
2026-06-23T09:38:03.0074170Z         "unit": {
2026-06-23T09:38:03.0074279Z           "complete": true,
2026-06-23T09:38:03.0074485Z           "evidence": [
2026-06-23T09:38:03.0074588Z             {
2026-06-23T09:38:03.0074728Z               "path": "crates/spt-store/src/atomic.rs",
2026-06-23T09:38:03.0074837Z               "line": 220
2026-06-23T09:38:03.0074935Z             }
2026-06-23T09:38:03.0075045Z           ]
2026-06-23T09:38:03.0075131Z         }
2026-06-23T09:38:03.0075231Z       }
2026-06-23T09:38:03.0075326Z     },
2026-06-23T09:38:03.0075432Z     {
2026-06-23T09:38:03.0075559Z       "id": "REQ-HAZARD-UNHOST-PSYCHE-REAP",
2026-06-23T09:38:03.0078732Z       "title": "On un-host, the detached `{id}-psyche` HARNESS PROCESS is reaped — not just its in-brain pulse-driver thread. Today stop_host (livehost.rs:203) trips the HostedLife stop flag + JOINS the driver thread, but the Psyche is a detached harness process (spawn_psyche → ManifestRuntime detached spawn, runtime.rs:341-356; its pid is untracked in HostedLife though stamped on the `{id}-psyche` perch, where residency-confirm already reads it). So endpoint-stop / mid-life agent-death / a B2/B5 offline-then-unhost leaves the psyche process ORPHANED, alive until the next daemon-stop (where Breap's job/group reaps the whole brain subtree). The Psyche STAYS a harness process by design (CONTEXT.md 97/203/251 — headless harness session, its own perch) — the fix does NOT move it in-brain; it SCOPED-kills the `{id}-psyche` pid on un-host (never machine-wide — shared box). Track the pid in HostedLife at host_one (cleanest) or read the `{id}-psyche` perch pid at stop_host. Composes with H3 (endpoint stop → offline → reconcile un-host → reap) and B2/B5 (the offline arms that trigger un-host). (v0.12.0)",
2026-06-23T09:38:03.0078866Z       "requiredStages": [
2026-06-23T09:38:03.0079042Z         "impl",
2026-06-23T09:38:03.0079151Z         "unit",
2026-06-23T09:38:03.0079258Z         "int"
2026-06-23T09:38:03.0079357Z       ],
2026-06-23T09:38:03.0079466Z       "stages": {
2026-06-23T09:38:03.0079577Z         "doc": {
2026-06-23T09:38:03.0079690Z           "complete": false,
2026-06-23T09:38:03.0079806Z           "evidence": []
2026-06-23T09:38:03.0079911Z         },
2026-06-23T09:38:03.0080015Z         "impl": {
2026-06-23T09:38:03.0080123Z           "complete": true,
2026-06-23T09:38:03.0080238Z           "evidence": [
2026-06-23T09:38:03.0080341Z             {
2026-06-23T09:38:03.0080484Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0080590Z               "line": 398
2026-06-23T09:38:03.0080693Z             },
2026-06-23T09:38:03.0080793Z             {
2026-06-23T09:38:03.0080932Z               "path": "crates/spt-live/src/psyche.rs",
2026-06-23T09:38:03.0081036Z               "line": 107
2026-06-23T09:38:03.0081138Z             },
2026-06-23T09:38:03.0081242Z             {
2026-06-23T09:38:03.0081389Z               "path": "crates/spt-live/src/psyche.rs",
2026-06-23T09:38:03.0081490Z               "line": 138
2026-06-23T09:38:03.0081581Z             },
2026-06-23T09:38:03.0081680Z             {
2026-06-23T09:38:03.0081834Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0081937Z               "line": 209
2026-06-23T09:38:03.0082038Z             },
2026-06-23T09:38:03.0082144Z             {
2026-06-23T09:38:03.0082281Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0082402Z               "line": 246
2026-06-23T09:38:03.0082502Z             },
2026-06-23T09:38:03.0082600Z             {
2026-06-23T09:38:03.0082738Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0082842Z               "line": 382
2026-06-23T09:38:03.0083051Z             }
2026-06-23T09:38:03.0083156Z           ]
2026-06-23T09:38:03.0083260Z         },
2026-06-23T09:38:03.0083360Z         "int": {
2026-06-23T09:38:03.0083470Z           "complete": true,
2026-06-23T09:38:03.0083584Z           "evidence": [
2026-06-23T09:38:03.0083685Z             {
2026-06-23T09:38:03.0083847Z               "path": "crates/spt/tests/unhost_psyche_reap_e2e.rs",
2026-06-23T09:38:03.0084048Z               "line": 17
2026-06-23T09:38:03.0084156Z             }
2026-06-23T09:38:03.0084261Z           ]
2026-06-23T09:38:03.0084363Z         },
2026-06-23T09:38:03.0084462Z         "unit": {
2026-06-23T09:38:03.0084566Z           "complete": true,
2026-06-23T09:38:03.0084677Z           "evidence": [
2026-06-23T09:38:03.0084777Z             {
2026-06-23T09:38:03.0084925Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:03.0085035Z               "line": 1083
2026-06-23T09:38:03.0085143Z             }
2026-06-23T09:38:03.0085249Z           ]
2026-06-23T09:38:03.0085350Z         }
2026-06-23T09:38:03.0085453Z       }
2026-06-23T09:38:03.0085557Z     },
2026-06-23T09:38:03.0085663Z     {
2026-06-23T09:38:03.0085791Z       "id": "REQ-HAZARD-UPDATE-ROLLBACK",
2026-06-23T09:38:03.0086087Z       "title": "Self-update rejects version rollback; metadata expiry + adapter content signing (codex #5)",
2026-06-23T09:38:03.0086215Z       "requiredStages": [
2026-06-23T09:38:03.0086321Z         "impl",
2026-06-23T09:38:03.0086416Z         "unit"
2026-06-23T09:38:03.0086511Z       ],
2026-06-23T09:38:03.0086622Z       "stages": {
2026-06-23T09:38:03.0086721Z         "doc": {
2026-06-23T09:38:03.0086835Z           "complete": false,
2026-06-23T09:38:03.0086946Z           "evidence": []
2026-06-23T09:38:03.0087045Z         },
2026-06-23T09:38:03.0087155Z         "impl": {
2026-06-23T09:38:03.0087266Z           "complete": true,
2026-06-23T09:38:03.0087374Z           "evidence": [
2026-06-23T09:38:03.0087479Z             {
2026-06-23T09:38:03.0087637Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.0087745Z               "line": 405
2026-06-23T09:38:03.0087841Z             },
2026-06-23T09:38:03.0087940Z             {
2026-06-23T09:38:03.0088086Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.0088191Z               "line": 419
2026-06-23T09:38:03.0088297Z             },
2026-06-23T09:38:03.0088401Z             {
2026-06-23T09:38:03.0088554Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.0088663Z               "line": 156
2026-06-23T09:38:03.0088762Z             }
2026-06-23T09:38:03.0088855Z           ]
2026-06-23T09:38:03.0089035Z         },
2026-06-23T09:38:03.0089150Z         "int": {
2026-06-23T09:38:03.0089269Z           "complete": false,
2026-06-23T09:38:03.0089378Z           "evidence": []
2026-06-23T09:38:03.0089479Z         },
2026-06-23T09:38:03.0089578Z         "unit": {
2026-06-23T09:38:03.0089688Z           "complete": true,
2026-06-23T09:38:03.0089794Z           "evidence": [
2026-06-23T09:38:03.0089898Z             {
2026-06-23T09:38:03.0090046Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.0090147Z               "line": 875
2026-06-23T09:38:03.0090250Z             },
2026-06-23T09:38:03.0090356Z             {
2026-06-23T09:38:03.0090490Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.0090603Z               "line": 889
2026-06-23T09:38:03.0090708Z             },
2026-06-23T09:38:03.0090812Z             {
2026-06-23T09:38:03.0090958Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.0091063Z               "line": 908
2026-06-23T09:38:03.0091169Z             },
2026-06-23T09:38:03.0091268Z             {
2026-06-23T09:38:03.0091407Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.0091516Z               "line": 925
2026-06-23T09:38:03.0091625Z             },
2026-06-23T09:38:03.0091731Z             {
2026-06-23T09:38:03.0092002Z               "path": "crates/spt-daemon/tests/propagate.rs",
2026-06-23T09:38:03.0092121Z               "line": 441
2026-06-23T09:38:03.0092226Z             }
2026-06-23T09:38:03.0092332Z           ]
2026-06-23T09:38:03.0092432Z         }
2026-06-23T09:38:03.0092531Z       }
2026-06-23T09:38:03.0092628Z     },
2026-06-23T09:38:03.0092723Z     {
2026-06-23T09:38:03.0092856Z       "id": "REQ-HAZARD-VIEWER-CLOSE-DETACH",
2026-06-23T09:38:03.0102686Z       "title": "A VIEW is independent from the endpoint: closing the tab/window where `spt endpoint run` was invoked must detach ONLY the `spt rc` attach pump — the daemon-hosted harness keeps running and stays re-attachable via `spt rc <id>`. ROOT (Windows, v0.12.0 real-harness defect): the daemon never breaks away from the launching terminal's Job Object. Windows Terminal / VS Code place the launched shell AND every descendant into a Job Object with JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; closing the tab drops the terminal's last job handle → the OS terminates every process still in that job. A child escapes only with CREATE_BREAKAWAY_FROM_JOB — used NOWHERE in the tree. Both daemon spawn paths (daemon.rs:707 detached_no_inherit = DETACHED_PROCESS|CREATE_NEW_PROCESS_GROUP|CREATE_NO_WINDOW; deelevate.rs:519 elevated = CREATE_NEW_CONSOLE|...) drop the CONSOLE but NOT job membership, so the daemon's freshly broker-spawned ConPTY harness subtree is reaped on tab-close. The ConPTY/pseudoconsole isolation itself is CORRECT (portable-pty builds the pseudoconsole in the daemon; no console signal / handle leak) — the leaking lifetime binding is the Job Object, not the console. FIX: add CREATE_BREAKAWAY_FROM_JOB to both daemon spawn paths AND pin each broker-spawned harness into a DAEMON-OWNED Job Object (mirror reap.rs/Breap) as backstop (survives even where a terminal sets SILENT_BREAKAWAY_OK=false). Unix: the daemon's own session detachment (new session, no controlling terminal) already keeps a closing terminal's SIGHUP off its children — verify, add a guard test, no code expected. FIX UPDATE (v0.12.1 L1.5, doyle re-scope operator-approved 2026-06-18): job-neutral daemon launch is now PRIMARY, breakaway DEMOTED to a fallback rung. ROOT reframed — the daemon INHERITS the terminal's Job because spawn_detached runs FROM the terminal-child CLI (DETACHED_PROCESS detaches the console, not the job); breakaway tried to claw back out but a job CAN deny it (the L1 finding). FIX: launch the cold-started daemon via a job-NEUTRAL creator so it is WmiPrvSE/Task-Scheduler-owned, OUTSIDE any terminal job from birth (why Task-Scheduler-autostarted daemons never had this bug). Launcher ladder (first-success-wins, daemon.rs spawn_detached → BOTH cold-start AND `spt daemon start`): (1) WMI Win32_Process.Create via ABSOLUTE powershell -EncodedCommand (KH 5.12 abs path; base64-UTF16LE dodges all quoting; success requires BOTH ReturnValue==0 AND a parsed ProcessId, else fall-through — never a silent launched), forwarding SPT_* env via a `cmd /c set … & start /b` wrapper because a WMI/scheduler child does NOT inherit transient shell env (verified — SPT_HOME would be lost, wrong universe); (2) schtasks one-shot (same env wrapper; best-effort fallback); (3) CREATE_BREAKAWAY_FROM_JOB (the L1 code, reordered below); (4) in-job last resort (logs DETACH_IN_JOB + tab-close caveat). detached_no_inherit (breakaway-then-in-job) is UNCHANGED for its other caller shellhost::launch_shell (a daemon-spawned shell is already job-neutral once the daemon is). The elevated deelevate path keeps its L1 breakaway for now (elevated-case WMI-reparent = FOLLOW-UP). (v0.12.1)",
2026-06-23T09:38:03.0102963Z       "requiredStages": [
2026-06-23T09:38:03.0103096Z         "doc",
2026-06-23T09:38:03.0103207Z         "impl",
2026-06-23T09:38:03.0103316Z         "unit",
2026-06-23T09:38:03.0103430Z         "int"
2026-06-23T09:38:03.0103561Z       ],
2026-06-23T09:38:03.0103668Z       "stages": {
2026-06-23T09:38:03.0103772Z         "doc": {
2026-06-23T09:38:03.0103887Z           "complete": true,
2026-06-23T09:38:03.0103999Z           "evidence": [
2026-06-23T09:38:03.0104195Z             {
2026-06-23T09:38:03.0104319Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0104427Z               "line": 433
2026-06-23T09:38:03.0104529Z             },
2026-06-23T09:38:03.0104634Z             {
2026-06-23T09:38:03.0104771Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:03.0104877Z               "line": 402
2026-06-23T09:38:03.0104986Z             }
2026-06-23T09:38:03.0105154Z           ]
2026-06-23T09:38:03.0105263Z         },
2026-06-23T09:38:03.0105367Z         "impl": {
2026-06-23T09:38:03.0105483Z           "complete": true,
2026-06-23T09:38:03.0105587Z           "evidence": [
2026-06-23T09:38:03.0105687Z             {
2026-06-23T09:38:03.0105845Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0105954Z               "line": 797
2026-06-23T09:38:03.0106060Z             },
2026-06-23T09:38:03.0106169Z             {
2026-06-23T09:38:03.0106317Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0106475Z               "line": 822
2026-06-23T09:38:03.0106573Z             },
2026-06-23T09:38:03.0106677Z             {
2026-06-23T09:38:03.0106808Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0106921Z               "line": 839
2026-06-23T09:38:03.0107025Z             },
2026-06-23T09:38:03.0107132Z             {
2026-06-23T09:38:03.0107264Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0107380Z               "line": 854
2026-06-23T09:38:03.0107489Z             },
2026-06-23T09:38:03.0107588Z             {
2026-06-23T09:38:03.0107737Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0107846Z               "line": 874
2026-06-23T09:38:03.0107951Z             },
2026-06-23T09:38:03.0108057Z             {
2026-06-23T09:38:03.0108195Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0108299Z               "line": 964
2026-06-23T09:38:03.0108400Z             },
2026-06-23T09:38:03.0108503Z             {
2026-06-23T09:38:03.0108648Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0108766Z               "line": 1016
2026-06-23T09:38:03.0108880Z             },
2026-06-23T09:38:03.0109047Z             {
2026-06-23T09:38:03.0109192Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0109297Z               "line": 1075
2026-06-23T09:38:03.0109393Z             },
2026-06-23T09:38:03.0109492Z             {
2026-06-23T09:38:03.0109655Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:03.0109774Z               "line": 527
2026-06-23T09:38:03.0109874Z             }
2026-06-23T09:38:03.0109980Z           ]
2026-06-23T09:38:03.0110070Z         },
2026-06-23T09:38:03.0110179Z         "int": {
2026-06-23T09:38:03.0110285Z           "complete": true,
2026-06-23T09:38:03.0110389Z           "evidence": [
2026-06-23T09:38:03.0110498Z             {
2026-06-23T09:38:03.0110643Z               "path": "crates/spt/tests/job_escape_e2e.rs",
2026-06-23T09:38:03.0110761Z               "line": 35
2026-06-23T09:38:03.0110851Z             },
2026-06-23T09:38:03.0110948Z             {
2026-06-23T09:38:03.0111081Z               "path": "crates/spt/tests/job_escape_e2e.rs",
2026-06-23T09:38:03.0111191Z               "line": 569
2026-06-23T09:38:03.0111296Z             },
2026-06-23T09:38:03.0111400Z             {
2026-06-23T09:38:03.0111539Z               "path": "crates/spt/tests/job_escape_e2e.rs",
2026-06-23T09:38:03.0111648Z               "line": 590
2026-06-23T09:38:03.0111747Z             }
2026-06-23T09:38:03.0111847Z           ]
2026-06-23T09:38:03.0111951Z         },
2026-06-23T09:38:03.0112059Z         "unit": {
2026-06-23T09:38:03.0112169Z           "complete": true,
2026-06-23T09:38:03.0112279Z           "evidence": [
2026-06-23T09:38:03.0112378Z             {
2026-06-23T09:38:03.0112518Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0112628Z               "line": 1202
2026-06-23T09:38:03.0112736Z             },
2026-06-23T09:38:03.0112947Z             {
2026-06-23T09:38:03.0113079Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0113186Z               "line": 1246
2026-06-23T09:38:03.0113285Z             },
2026-06-23T09:38:03.0113394Z             {
2026-06-23T09:38:03.0113533Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0113647Z               "line": 1260
2026-06-23T09:38:03.0113857Z             },
2026-06-23T09:38:03.0113962Z             {
2026-06-23T09:38:03.0114101Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0114205Z               "line": 1278
2026-06-23T09:38:03.0114304Z             },
2026-06-23T09:38:03.0114408Z             {
2026-06-23T09:38:03.0114550Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0114668Z               "line": 1302
2026-06-23T09:38:03.0114774Z             },
2026-06-23T09:38:03.0114879Z             {
2026-06-23T09:38:03.0115012Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0115127Z               "line": 1529
2026-06-23T09:38:03.0115231Z             }
2026-06-23T09:38:03.0115336Z           ]
2026-06-23T09:38:03.0115441Z         }
2026-06-23T09:38:03.0115542Z       }
2026-06-23T09:38:03.0115651Z     },
2026-06-23T09:38:03.0115747Z     {
2026-06-23T09:38:03.0115875Z       "id": "REQ-HAZARD-VIEWER-ISOLATION",
2026-06-23T09:38:03.0118073Z       "title": "A slow / dead / hostile VIEWER must NEVER stall the controller, the PTY child, or the session drain thread. The broker drain fans output to the controller on the authoritative blocking bounded path (advances delivered_through) but to each viewer via a bounded per-viewer channel with a dedicated writer thread; the drain `try_send`s under the log lock and a viewer whose bounded queue OVERFLOWS (can't keep up) is EVICTED (queue dropped, writer thread ends, removed from the viewers map) — the drain thread NEVER touches a viewer socket, so no viewer write can backpressure or block it. A soft viewer cap bounds the thread count. Viewer eviction never perturbs the controller stream, the delivered_through cursor, or the child.",
2026-06-23T09:38:03.0118201Z       "requiredStages": [
2026-06-23T09:38:03.0118302Z         "unit",
2026-06-23T09:38:03.0118396Z         "int"
2026-06-23T09:38:03.0118501Z       ],
2026-06-23T09:38:03.0118607Z       "stages": {
2026-06-23T09:38:03.0118711Z         "doc": {
2026-06-23T09:38:03.0118830Z           "complete": true,
2026-06-23T09:38:03.0119026Z           "evidence": [
2026-06-23T09:38:03.0119135Z             {
2026-06-23T09:38:03.0119275Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:03.0119383Z               "line": 381
2026-06-23T09:38:03.0119487Z             }
2026-06-23T09:38:03.0119587Z           ]
2026-06-23T09:38:03.0119691Z         },
2026-06-23T09:38:03.0119795Z         "impl": {
2026-06-23T09:38:03.0119915Z           "complete": true,
2026-06-23T09:38:03.0120024Z           "evidence": [
2026-06-23T09:38:03.0120124Z             {
2026-06-23T09:38:03.0120277Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.0120390Z               "line": 101
2026-06-23T09:38:03.0120492Z             }
2026-06-23T09:38:03.0123765Z           ]
2026-06-23T09:38:03.0123902Z         },
2026-06-23T09:38:03.0124008Z         "int": {
2026-06-23T09:38:03.0124131Z           "complete": true,
2026-06-23T09:38:03.0124235Z           "evidence": [
2026-06-23T09:38:03.0124346Z             {
2026-06-23T09:38:03.0124497Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.0124603Z               "line": 1051
2026-06-23T09:38:03.0124705Z             }
2026-06-23T09:38:03.0124802Z           ]
2026-06-23T09:38:03.0124897Z         },
2026-06-23T09:38:03.0125007Z         "unit": {
2026-06-23T09:38:03.0125124Z           "complete": true,
2026-06-23T09:38:03.0125233Z           "evidence": [
2026-06-23T09:38:03.0125325Z             {
2026-06-23T09:38:03.0125482Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.0125740Z               "line": 2464
2026-06-23T09:38:03.0125853Z             }
2026-06-23T09:38:03.0125960Z           ]
2026-06-23T09:38:03.0126054Z         }
2026-06-23T09:38:03.0126158Z       }
2026-06-23T09:38:03.0126260Z     },
2026-06-23T09:38:03.0126364Z     {
2026-06-23T09:38:03.0126511Z       "id": "REQ-HAZARD-VIEWER-RING-ROLL-SNAP",
2026-06-23T09:38:03.0130889Z       "title": "A read-only rc --view VIEWER whose serving brain falls behind the live ring under a hard flood and receives a FORWARD Output seq gap (the ring rolled frames out between reads, BEFORE any channel-overflow eviction → NO KIND_VIEWER_EVICTED marker) must SNAP TO LIVE (accept-and-advance via dedup-below + snap-above), NOT fatal with output gap (brain.rs:624/628 legacy reject-gap). ROOT (v0.13.0 forkpty, post-b4+skip-to-live): serve_attach subscribes a viewer via brain.attach_as(Viewer) leaving session_cursors EMPTY → the viewer serve-brain uses the LEGACY reject-gap → a PRE-eviction ring-roll forward-gap FATALS read_event → serve_attach returns → forwarding stops → attach_received_pty_output=FALSE (a_journaled / p0_paste / attach.rs:1071 wedged_viewer, Linux forkpty; Windows ConPTY floods slower → MASKED false-green). DISTINCT from REQ-VIEWER-SKIP-TO-LIVE-ON-EVICT (the POST-eviction re-subscribe-from-floor): this is PRE-eviction gap-tolerance while STILL subscribed. VIEWER-only → B2-SAFE (a viewer never advances delivered_through / is not authoritative); the CONTROLLER keeps strict reject-gap (exactly-once resume). FIX: arm snap-above at initial viewer attach (attach_as_viewer_snap = attach_as(Viewer) + session_cursors.insert(session_id, from_seq)); the two viewer-survival mechanisms COMPOSE — this tolerates pre-eviction ring-roll gaps, REQ-VIEWER-SKIP-TO-LIVE-ON-EVICT recovers post-eviction. (v0.13.0)",
2026-06-23T09:38:03.0131157Z       "requiredStages": [
2026-06-23T09:38:03.0131266Z         "doc",
2026-06-23T09:38:03.0131367Z         "impl",
2026-06-23T09:38:03.0131472Z         "unit",
2026-06-23T09:38:03.0131581Z         "int"
2026-06-23T09:38:03.0131686Z       ],
2026-06-23T09:38:03.0131781Z       "stages": {
2026-06-23T09:38:03.0131886Z         "doc": {
2026-06-23T09:38:03.0131996Z           "complete": true,
2026-06-23T09:38:03.0132106Z           "evidence": [
2026-06-23T09:38:03.0132211Z             {
2026-06-23T09:38:03.0132331Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0132425Z               "line": 355
2026-06-23T09:38:03.0132535Z             }
2026-06-23T09:38:03.0132640Z           ]
2026-06-23T09:38:03.0132745Z         },
2026-06-23T09:38:03.0132853Z         "impl": {
2026-06-23T09:38:03.0132967Z           "complete": true,
2026-06-23T09:38:03.0133076Z           "evidence": [
2026-06-23T09:38:03.0133179Z             {
2026-06-23T09:38:03.0133327Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:03.0133438Z               "line": 333
2026-06-23T09:38:03.0133541Z             },
2026-06-23T09:38:03.0133643Z             {
2026-06-23T09:38:03.0133790Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.0133909Z               "line": 892
2026-06-23T09:38:03.0134010Z             }
2026-06-23T09:38:03.0134114Z           ]
2026-06-23T09:38:03.0134209Z         },
2026-06-23T09:38:03.0134315Z         "int": {
2026-06-23T09:38:03.0134429Z           "complete": true,
2026-06-23T09:38:03.0134543Z           "evidence": [
2026-06-23T09:38:03.0134649Z             {
2026-06-23T09:38:03.0134825Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:03.0134940Z               "line": 872
2026-06-23T09:38:03.0135048Z             },
2026-06-23T09:38:03.0135154Z             {
2026-06-23T09:38:03.0135335Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:03.0135448Z               "line": 2168
2026-06-23T09:38:03.0135558Z             }
2026-06-23T09:38:03.0135657Z           ]
2026-06-23T09:38:03.0135760Z         },
2026-06-23T09:38:03.0135865Z         "unit": {
2026-06-23T09:38:03.0135981Z           "complete": true,
2026-06-23T09:38:03.0136190Z           "evidence": [
2026-06-23T09:38:03.0136305Z             {
2026-06-23T09:38:03.0136456Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.0136567Z               "line": 1710
2026-06-23T09:38:03.0136671Z             }
2026-06-23T09:38:03.0136771Z           ]
2026-06-23T09:38:03.0136877Z         }
2026-06-23T09:38:03.0136977Z       }
2026-06-23T09:38:03.0137072Z     },
2026-06-23T09:38:03.0137243Z     {
2026-06-23T09:38:03.0137449Z       "id": "REQ-HAZARD-VIEWER-STARVE-UNDER-CONTROLLER-BACKPRESSURE",
2026-06-23T09:38:03.0142891Z       "title": "A SLOW controller must not starve a concurrent `rc --view` VIEWER. W1 (REQ-HAZARD-INJECT-CONTROL-COEXIST) moved the controller SOCKET WRITE off the drain thread onto controller_writer, but left the bounded HANDOFF (ControllerJob::deliver) as an INLINE try_send SLEEP-POLL on the drain (broker.rs:1450-1457 → deliver:669-685, up to CONTROLLER_WRITE_DEADLINE=5s). So when a controller drains slower than the PTY floods, its CONTROLLER_CHANNEL_DEPTH(4096) channel fills, deliver() polls inline, and the DRAIN THREAD is throttled to the controller's read rate → OutputLog::append's viewer fan-out (try_send) stops running → a concurrent VIEWER receives only the initial replay then nothing (root 'b4', warm forkpty: a_journaled c1=0/EVICT=0/got_output=FALSE; steady-state-near-full = no recovery; forkpty-only, floods harder than Windows ConPTY). The viewer-not-starved-by-a-busy-session property is legitimate (rc --view of a noisy session must show LIVE output). FIX: the controller becomes a SINGLE NON-BLOCKING try_send (like a viewer), done IN append() under the log lock; deliver()'s sleep-poll DELETED; the drain NEVER sleeps. ControllerSink gains a stateful last_ok deadline → a TRULY-stalled controller (continuous-Full past CONTROLLER_WRITE_DEADLINE) is evicted (bounded-wedge preserved); a slow-but-alive controller DROPS frames + falls behind the ring (resume-from-floor, the existing reconnect case). B2 GAPLESS-HANDOFF PRESERVED via a CONTIGUOUS delivered_through: controller_writer advances the cursor ONLY when the written seq == cursor (next expected); a gap from a drop FREEZES the cursor at last-contiguous so a re-attaching brain's resume_seq never skips a dropped chunk (a high-watermark advance past the gap would be a not-exactly-once resume = B2 violation, doyle's gate). (v0.13.0)",
2026-06-23T09:38:03.0143027Z       "requiredStages": [
2026-06-23T09:38:03.0143133Z         "impl",
2026-06-23T09:38:03.0143239Z         "unit",
2026-06-23T09:38:03.0143342Z         "int"
2026-06-23T09:38:03.0143451Z       ],
2026-06-23T09:38:03.0143552Z       "stages": {
2026-06-23T09:38:03.0143659Z         "doc": {
2026-06-23T09:38:03.0143763Z           "complete": false,
2026-06-23T09:38:03.0143874Z           "evidence": []
2026-06-23T09:38:03.0143984Z         },
2026-06-23T09:38:03.0144087Z         "impl": {
2026-06-23T09:38:03.0144203Z           "complete": true,
2026-06-23T09:38:03.0144303Z           "evidence": [
2026-06-23T09:38:03.0144406Z             {
2026-06-23T09:38:03.0144556Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.0144660Z               "line": 323
2026-06-23T09:38:03.0144770Z             },
2026-06-23T09:38:03.0144870Z             {
2026-06-23T09:38:03.0145013Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.0145123Z               "line": 745
2026-06-23T09:38:03.0145237Z             }
2026-06-23T09:38:03.0145342Z           ]
2026-06-23T09:38:03.0145448Z         },
2026-06-23T09:38:03.0145552Z         "int": {
2026-06-23T09:38:03.0145652Z           "complete": true,
2026-06-23T09:38:03.0145763Z           "evidence": [
2026-06-23T09:38:03.0145858Z             {
2026-06-23T09:38:03.0146046Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:03.0146166Z               "line": 871
2026-06-23T09:38:03.0146259Z             }
2026-06-23T09:38:03.0146359Z           ]
2026-06-23T09:38:03.0146459Z         },
2026-06-23T09:38:03.0146574Z         "unit": {
2026-06-23T09:38:03.0146794Z           "complete": true,
2026-06-23T09:38:03.0146912Z           "evidence": [
2026-06-23T09:38:03.0147016Z             {
2026-06-23T09:38:03.0147165Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.0147269Z               "line": 2679
2026-06-23T09:38:03.0147371Z             },
2026-06-23T09:38:03.0147470Z             {
2026-06-23T09:38:03.0147622Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.0147827Z               "line": 2748
2026-06-23T09:38:03.0147932Z             }
2026-06-23T09:38:03.0148033Z           ]
2026-06-23T09:38:03.0148133Z         }
2026-06-23T09:38:03.0148232Z       }
2026-06-23T09:38:03.0148339Z     },
2026-06-23T09:38:03.0148438Z     {
2026-06-23T09:38:03.0148576Z       "id": "REQ-HAZARD-WAN-ORIGIN-AUTH",
2026-06-23T09:38:03.0149566Z       "title": "WAN-inbound origin is transport truth, never payload: the access gate's subject (ADR-0009 origin-node whitelist) is the QUIC handshake-proven remote node id from the broker's conn/stream table — a forged origin/node field inside record bytes is inert (7.5)",
2026-06-23T09:38:03.0149686Z       "requiredStages": [
2026-06-23T09:38:03.0149795Z         "doc",
2026-06-23T09:38:03.0149891Z         "impl",
2026-06-23T09:38:03.0150001Z         "unit"
2026-06-23T09:38:03.0150106Z       ],
2026-06-23T09:38:03.0150210Z       "stages": {
2026-06-23T09:38:03.0150312Z         "doc": {
2026-06-23T09:38:03.0150421Z           "complete": true,
2026-06-23T09:38:03.0150535Z           "evidence": [
2026-06-23T09:38:03.0150636Z             {
2026-06-23T09:38:03.0150782Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:03.0150888Z               "line": 366
2026-06-23T09:38:03.0150988Z             }
2026-06-23T09:38:03.0151092Z           ]
2026-06-23T09:38:03.0151192Z         },
2026-06-23T09:38:03.0151301Z         "impl": {
2026-06-23T09:38:03.0151409Z           "complete": true,
2026-06-23T09:38:03.0151514Z           "evidence": [
2026-06-23T09:38:03.0151610Z             {
2026-06-23T09:38:03.0151757Z               "path": "crates/spt-daemon/src/access.rs",
2026-06-23T09:38:03.0151872Z               "line": 87
2026-06-23T09:38:03.0151972Z             },
2026-06-23T09:38:03.0152076Z             {
2026-06-23T09:38:03.0152225Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:03.0152329Z               "line": 203
2026-06-23T09:38:03.0152429Z             },
2026-06-23T09:38:03.0152535Z             {
2026-06-23T09:38:03.0152687Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0152792Z               "line": 55
2026-06-23T09:38:03.0152897Z             },
2026-06-23T09:38:03.0152996Z             {
2026-06-23T09:38:03.0153151Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.0153264Z               "line": 31
2026-06-23T09:38:03.0153359Z             },
2026-06-23T09:38:03.0153465Z             {
2026-06-23T09:38:03.0153602Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.0153717Z               "line": 446
2026-06-23T09:38:03.0153823Z             },
2026-06-23T09:38:03.0153921Z             {
2026-06-23T09:38:03.0154082Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0154191Z               "line": 95
2026-06-23T09:38:03.0154295Z             },
2026-06-23T09:38:03.0154381Z             {
2026-06-23T09:38:03.0154534Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.0154652Z               "line": 29
2026-06-23T09:38:03.0154749Z             },
2026-06-23T09:38:03.0154858Z             {
2026-06-23T09:38:03.0154990Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.0155101Z               "line": 104
2026-06-23T09:38:03.0155192Z             },
2026-06-23T09:38:03.0155286Z             {
2026-06-23T09:38:03.0155445Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0155554Z               "line": 208
2026-06-23T09:38:03.0155654Z             },
2026-06-23T09:38:03.0155854Z             {
2026-06-23T09:38:03.0156008Z               "path": "crates/spt-daemon/src/resthost.rs",
2026-06-23T09:38:03.0156136Z               "line": 28
2026-06-23T09:38:03.0156240Z             },
2026-06-23T09:38:03.0156342Z             {
2026-06-23T09:38:03.0156488Z               "path": "crates/spt-daemon/src/resthost.rs",
2026-06-23T09:38:03.0156602Z               "line": 74
2026-06-23T09:38:03.0156796Z             },
2026-06-23T09:38:03.0156904Z             {
2026-06-23T09:38:03.0157044Z               "path": "crates/spt-daemon/src/serveprobe.rs",
2026-06-23T09:38:03.0157153Z               "line": 32
2026-06-23T09:38:03.0157257Z             },
2026-06-23T09:38:03.0157363Z             {
2026-06-23T09:38:03.0157500Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0157611Z               "line": 40
2026-06-23T09:38:03.0157716Z             },
2026-06-23T09:38:03.0157815Z             {
2026-06-23T09:38:03.0157945Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0158058Z               "line": 184
2026-06-23T09:38:03.0158158Z             },
2026-06-23T09:38:03.0158260Z             {
2026-06-23T09:38:03.0158383Z               "path": "crates/spt-daemon/src/wan.rs",
2026-06-23T09:38:03.0158492Z               "line": 61
2026-06-23T09:38:03.0158593Z             },
2026-06-23T09:38:03.0158698Z             {
2026-06-23T09:38:03.0158831Z               "path": "crates/spt-daemon/src/wan.rs",
2026-06-23T09:38:03.0159026Z               "line": 131
2026-06-23T09:38:03.0159126Z             },
2026-06-23T09:38:03.0159228Z             {
2026-06-23T09:38:03.0159369Z               "path": "crates/spt-daemon/src/xfer.rs",
2026-06-23T09:38:03.0159478Z               "line": 223
2026-06-23T09:38:03.0159584Z             },
2026-06-23T09:38:03.0159684Z             {
2026-06-23T09:38:03.0159816Z               "path": "crates/spt-net/src/net/sync.rs",
2026-06-23T09:38:03.0159923Z               "line": 37
2026-06-23T09:38:03.0160027Z             },
2026-06-23T09:38:03.0160131Z             {
2026-06-23T09:38:03.0160270Z               "path": "crates/spt-net/src/net/update.rs",
2026-06-23T09:38:03.0160379Z               "line": 38
2026-06-23T09:38:03.0160480Z             },
2026-06-23T09:38:03.0160580Z             {
2026-06-23T09:38:03.0160727Z               "path": "crates/spt-net/src/net/wanmsg.rs",
2026-06-23T09:38:03.0160834Z               "line": 36
2026-06-23T09:38:03.0160947Z             },
2026-06-23T09:38:03.0161052Z             {
2026-06-23T09:38:03.0161192Z               "path": "crates/spt-net/src/net/xfer.rs",
2026-06-23T09:38:03.0161304Z               "line": 40
2026-06-23T09:38:03.0161400Z             }
2026-06-23T09:38:03.0161497Z           ]
2026-06-23T09:38:03.0161600Z         },
2026-06-23T09:38:03.0161699Z         "int": {
2026-06-23T09:38:03.0161809Z           "complete": false,
2026-06-23T09:38:03.0161912Z           "evidence": []
2026-06-23T09:38:03.0162012Z         },
2026-06-23T09:38:03.0162117Z         "unit": {
2026-06-23T09:38:03.0162227Z           "complete": true,
2026-06-23T09:38:03.0162336Z           "evidence": [
2026-06-23T09:38:03.0162446Z             {
2026-06-23T09:38:03.0162598Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0162698Z               "line": 212
2026-06-23T09:38:03.0162804Z             },
2026-06-23T09:38:03.0162899Z             {
2026-06-23T09:38:03.0163052Z               "path": "crates/spt-daemon/tests/notifsync.rs",
2026-06-23T09:38:03.0163161Z               "line": 136
2026-06-23T09:38:03.0163265Z             },
2026-06-23T09:38:03.0163357Z             {
2026-06-23T09:38:03.0163499Z               "path": "crates/spt-daemon/tests/propagate.rs",
2026-06-23T09:38:03.0163600Z               "line": 685
2026-06-23T09:38:03.0163706Z             },
2026-06-23T09:38:03.0163804Z             {
2026-06-23T09:38:03.0163948Z               "path": "crates/spt-daemon/tests/sync.rs",
2026-06-23T09:38:03.0164059Z               "line": 224
2026-06-23T09:38:03.0164171Z             },
2026-06-23T09:38:03.0164379Z             {
2026-06-23T09:38:03.0164529Z               "path": "crates/spt-daemon/tests/wanmsg.rs",
2026-06-23T09:38:03.0164638Z               "line": 206
2026-06-23T09:38:03.0164737Z             },
2026-06-23T09:38:03.0164836Z             {
2026-06-23T09:38:03.0164979Z               "path": "crates/spt-net/src/net/notif.rs",
2026-06-23T09:38:03.0165085Z               "line": 112
2026-06-23T09:38:03.0165189Z             },
2026-06-23T09:38:03.0165394Z             {
2026-06-23T09:38:03.0165527Z               "path": "crates/spt-net/src/net/sync.rs",
2026-06-23T09:38:03.0165643Z               "line": 157
2026-06-23T09:38:03.0165743Z             },
2026-06-23T09:38:03.0165851Z             {
2026-06-23T09:38:03.0165995Z               "path": "crates/spt-net/src/net/update.rs",
2026-06-23T09:38:03.0166100Z               "line": 215
2026-06-23T09:38:03.0166209Z             },
2026-06-23T09:38:03.0166301Z             {
2026-06-23T09:38:03.0166438Z               "path": "crates/spt-net/src/net/wanmsg.rs",
2026-06-23T09:38:03.0166539Z               "line": 141
2026-06-23T09:38:03.0166644Z             },
2026-06-23T09:38:03.0166752Z             {
2026-06-23T09:38:03.0166892Z               "path": "crates/spt-net/src/net/xfer.rs",
2026-06-23T09:38:03.0167001Z               "line": 162
2026-06-23T09:38:03.0167104Z             }
2026-06-23T09:38:03.0167209Z           ]
2026-06-23T09:38:03.0167304Z         }
2026-06-23T09:38:03.0167412Z       }
2026-06-23T09:38:03.0167507Z     },
2026-06-23T09:38:03.0167599Z     {
2026-06-23T09:38:03.0167750Z       "id": "REQ-HAZARD-WIN-PTY-PROGRAM-RESOLVE",
2026-06-23T09:38:03.0169706Z       "title": "Native-PTY spawn must resolve a bare program name with PATHEXT precedence and run a non-PE target through its interpreter: portable-pty's own `which` takes the FIRST PATH match — an extensionless shebang shim (e.g. a node CLI `ccs` shipped beside `ccs.cmd`) — and CreateProcessW then rejects the non-PE file with os error 193 ('not a valid Win32 application'); spt-term resolves the program itself (PATHEXT order prefers .EXE over .CMD; .cmd/.bat → cmd.exe /d /c, .ps1 → powershell -NoProfile -File) so a bare harness/shell [session.self] command actually launches on Windows. Unix is a passthrough (execve honours the shebang).",
2026-06-23T09:38:03.0169831Z       "requiredStages": [
2026-06-23T09:38:03.0169939Z         "doc",
2026-06-23T09:38:03.0170043Z         "impl",
2026-06-23T09:38:03.0170149Z         "unit",
2026-06-23T09:38:03.0170258Z         "int"
2026-06-23T09:38:03.0170363Z       ],
2026-06-23T09:38:03.0170459Z       "stages": {
2026-06-23T09:38:03.0170559Z         "doc": {
2026-06-23T09:38:03.0170672Z           "complete": true,
2026-06-23T09:38:03.0170779Z           "evidence": [
2026-06-23T09:38:03.0170884Z             {
2026-06-23T09:38:03.0171016Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:03.0171122Z               "line": 250
2026-06-23T09:38:03.0171227Z             }
2026-06-23T09:38:03.0171331Z           ]
2026-06-23T09:38:03.0171432Z         },
2026-06-23T09:38:03.0171541Z         "impl": {
2026-06-23T09:38:03.0171665Z           "complete": true,
2026-06-23T09:38:03.0171766Z           "evidence": [
2026-06-23T09:38:03.0171869Z             {
2026-06-23T09:38:03.0172009Z               "path": "crates/spt-term/src/pty.rs",
2026-06-23T09:38:03.0172118Z               "line": 135
2026-06-23T09:38:03.0172222Z             },
2026-06-23T09:38:03.0172322Z             {
2026-06-23T09:38:03.0172459Z               "path": "crates/spt-term/src/pty.rs",
2026-06-23T09:38:03.0172567Z               "line": 157
2026-06-23T09:38:03.0172672Z             }
2026-06-23T09:38:03.0172783Z           ]
2026-06-23T09:38:03.0172872Z         },
2026-06-23T09:38:03.0172977Z         "int": {
2026-06-23T09:38:03.0173092Z           "complete": true,
2026-06-23T09:38:03.0173206Z           "evidence": [
2026-06-23T09:38:03.0173307Z             {
2026-06-23T09:38:03.0173459Z               "path": "crates/spt-term/tests/winspawn.rs",
2026-06-23T09:38:03.0173573Z               "line": 15
2026-06-23T09:38:03.0173774Z             }
2026-06-23T09:38:03.0173878Z           ]
2026-06-23T09:38:03.0173980Z         },
2026-06-23T09:38:03.0174089Z         "unit": {
2026-06-23T09:38:03.0174198Z           "complete": true,
2026-06-23T09:38:03.0174309Z           "evidence": [
2026-06-23T09:38:03.0174417Z             {
2026-06-23T09:38:03.0174557Z               "path": "crates/spt-term/src/winprog.rs",
2026-06-23T09:38:03.0174765Z               "line": 233
2026-06-23T09:38:03.0174876Z             }
2026-06-23T09:38:03.0174981Z           ]
2026-06-23T09:38:03.0175084Z         }
2026-06-23T09:38:03.0175184Z       }
2026-06-23T09:38:03.0175284Z     },
2026-06-23T09:38:03.0175382Z     {
2026-06-23T09:38:03.0175530Z       "id": "REQ-HAZARD-WINDOWS-PID-RECYCLE",
2026-06-23T09:38:03.0175711Z       "title": "Windows PID-recycling false positives guarded (5.1)",
2026-06-23T09:38:03.0175835Z       "requiredStages": [
2026-06-23T09:38:03.0175940Z         "impl",
2026-06-23T09:38:03.0176044Z         "unit"
2026-06-23T09:38:03.0176150Z       ],
2026-06-23T09:38:03.0176259Z       "stages": {
2026-06-23T09:38:03.0176368Z         "doc": {
2026-06-23T09:38:03.0176484Z           "complete": false,
2026-06-23T09:38:03.0176593Z           "evidence": []
2026-06-23T09:38:03.0176693Z         },
2026-06-23T09:38:03.0176803Z         "impl": {
2026-06-23T09:38:03.0176908Z           "complete": true,
2026-06-23T09:38:03.0177012Z           "evidence": [
2026-06-23T09:38:03.0177123Z             {
2026-06-23T09:38:03.0177260Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0177375Z               "line": 95
2026-06-23T09:38:03.0177472Z             },
2026-06-23T09:38:03.0177585Z             {
2026-06-23T09:38:03.0177717Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.0177827Z               "line": 117
2026-06-23T09:38:03.0177939Z             }
2026-06-23T09:38:03.0178039Z           ]
2026-06-23T09:38:03.0178149Z         },
2026-06-23T09:38:03.0178254Z         "int": {
2026-06-23T09:38:03.0178358Z           "complete": false,
2026-06-23T09:38:03.0178474Z           "evidence": []
2026-06-23T09:38:03.0178569Z         },
2026-06-23T09:38:03.0178678Z         "unit": {
2026-06-23T09:38:03.0178784Z           "complete": true,
2026-06-23T09:38:03.0178888Z           "evidence": [
2026-06-23T09:38:03.0179061Z             {
2026-06-23T09:38:03.0179203Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0179317Z               "line": 250
2026-06-23T09:38:03.0179418Z             },
2026-06-23T09:38:03.0179518Z             {
2026-06-23T09:38:03.0179651Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:03.0179761Z               "line": 412
2026-06-23T09:38:03.0179851Z             },
2026-06-23T09:38:03.0179951Z             {
2026-06-23T09:38:03.0180086Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.0180194Z               "line": 611
2026-06-23T09:38:03.0180291Z             },
2026-06-23T09:38:03.0180391Z             {
2026-06-23T09:38:03.0180532Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.0180646Z               "line": 669
2026-06-23T09:38:03.0180747Z             }
2026-06-23T09:38:03.0180861Z           ]
2026-06-23T09:38:03.0180961Z         }
2026-06-23T09:38:03.0181067Z       }
2026-06-23T09:38:03.0181157Z     },
2026-06-23T09:38:03.0181261Z     {
2026-06-23T09:38:03.0181391Z       "id": "REQ-HAZARD-WMI-DAEMON-WINDOW",
2026-06-23T09:38:03.0183991Z       "title": "`spt daemon start` launches the daemon with NO visible console window. REGRESSION (v0.12.1 L1.5): the WMI job-neutral launch (spawn_daemon_via_wmi) set CREATE_NO_WINDOW on the launching powershell but NOT on the Win32_Process.Create call — Win32_Process.Create does not inherit it, so the spawned cmd.exe env-forwarding wrapper popped a console window on every cold-start (violating REQ-INSTALL-10's v0.7.4 no-persistent-window invariant; the old detached_no_inherit path set DETACHED_PROCESS|CREATE_NO_WINDOW). FIX: pass a Win32_ProcessStartup with CreateFlags=DETACHED_PROCESS (0x8 — no console so no window; CREATE_NO_WINDOW 0x08000000 is NOT a valid Win32_ProcessStartup flag → ReturnValue 21 invalid-param, which is why the naive port fails) + ShowWindow=SW_HIDE(0) belt, via the ProcessStartupInformation argument. (v0.12.2)",
2026-06-23T09:38:03.0184114Z       "requiredStages": [
2026-06-23T09:38:03.0184225Z         "impl",
2026-06-23T09:38:03.0184325Z         "unit",
2026-06-23T09:38:03.0184525Z         "int"
2026-06-23T09:38:03.0184619Z       ],
2026-06-23T09:38:03.0184734Z       "stages": {
2026-06-23T09:38:03.0184835Z         "doc": {
2026-06-23T09:38:03.0184948Z           "complete": false,
2026-06-23T09:38:03.0185063Z           "evidence": []
2026-06-23T09:38:03.0185160Z         },
2026-06-23T09:38:03.0185273Z         "impl": {
2026-06-23T09:38:03.0185388Z           "complete": true,
2026-06-23T09:38:03.0185489Z           "evidence": [
2026-06-23T09:38:03.0185592Z             {
2026-06-23T09:38:03.0185749Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0185872Z               "line": 925
2026-06-23T09:38:03.0185975Z             },
2026-06-23T09:38:03.0186076Z             {
2026-06-23T09:38:03.0186220Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0186333Z               "line": 994
2026-06-23T09:38:03.0186434Z             }
2026-06-23T09:38:03.0186544Z           ]
2026-06-23T09:38:03.0186647Z         },
2026-06-23T09:38:03.0186758Z         "int": {
2026-06-23T09:38:03.0186877Z           "complete": true,
2026-06-23T09:38:03.0186991Z           "evidence": [
2026-06-23T09:38:03.0187092Z             {
2026-06-23T09:38:03.0187239Z               "path": "crates/spt/tests/job_escape_e2e.rs",
2026-06-23T09:38:03.0187354Z               "line": 187
2026-06-23T09:38:03.0187463Z             },
2026-06-23T09:38:03.0187558Z             {
2026-06-23T09:38:03.0187703Z               "path": "crates/spt/tests/job_escape_e2e.rs",
2026-06-23T09:38:03.0187811Z               "line": 348
2026-06-23T09:38:03.0187916Z             }
2026-06-23T09:38:03.0188022Z           ]
2026-06-23T09:38:03.0188131Z         },
2026-06-23T09:38:03.0188235Z         "unit": {
2026-06-23T09:38:03.0188339Z           "complete": true,
2026-06-23T09:38:03.0188448Z           "evidence": [
2026-06-23T09:38:03.0188538Z             {
2026-06-23T09:38:03.0188686Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0188795Z               "line": 1206
2026-06-23T09:38:03.0188899Z             },
2026-06-23T09:38:03.0189081Z             {
2026-06-23T09:38:03.0189205Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0189321Z               "line": 9510
2026-06-23T09:38:03.0189425Z             }
2026-06-23T09:38:03.0189529Z           ]
2026-06-23T09:38:03.0189630Z         }
2026-06-23T09:38:03.0189739Z       }
2026-06-23T09:38:03.0189844Z     },
2026-06-23T09:38:03.0189950Z     {
2026-06-23T09:38:03.0190083Z       "id": "REQ-HAZARD-WORKER-PATH",
2026-06-23T09:38:03.0190289Z       "title": "Single source of truth for Worker/Psyche perch location (1.5)",
2026-06-23T09:38:03.0190411Z       "requiredStages": [
2026-06-23T09:38:03.0190516Z         "impl",
2026-06-23T09:38:03.0190618Z         "unit"
2026-06-23T09:38:03.0190721Z       ],
2026-06-23T09:38:03.0190826Z       "stages": {
2026-06-23T09:38:03.0190928Z         "doc": {
2026-06-23T09:38:03.0191035Z           "complete": false,
2026-06-23T09:38:03.0191144Z           "evidence": []
2026-06-23T09:38:03.0191250Z         },
2026-06-23T09:38:03.0191364Z         "impl": {
2026-06-23T09:38:03.0191473Z           "complete": true,
2026-06-23T09:38:03.0191579Z           "evidence": [
2026-06-23T09:38:03.0191689Z             {
2026-06-23T09:38:03.0191826Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0191937Z               "line": 262
2026-06-23T09:38:03.0192036Z             },
2026-06-23T09:38:03.0192141Z             {
2026-06-23T09:38:03.0192290Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0192399Z               "line": 307
2026-06-23T09:38:03.0192604Z             },
2026-06-23T09:38:03.0192713Z             {
2026-06-23T09:38:03.0192857Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0192971Z               "line": 319
2026-06-23T09:38:03.0193071Z             }
2026-06-23T09:38:03.0193182Z           ]
2026-06-23T09:38:03.0193271Z         },
2026-06-23T09:38:03.0193385Z         "int": {
2026-06-23T09:38:03.0193593Z           "complete": false,
2026-06-23T09:38:03.0193701Z           "evidence": []
2026-06-23T09:38:03.0193807Z         },
2026-06-23T09:38:03.0193913Z         "unit": {
2026-06-23T09:38:03.0194026Z           "complete": true,
2026-06-23T09:38:03.0194136Z           "evidence": [
2026-06-23T09:38:03.0194241Z             {
2026-06-23T09:38:03.0194379Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0194490Z               "line": 455
2026-06-23T09:38:03.0194589Z             },
2026-06-23T09:38:03.0194694Z             {
2026-06-23T09:38:03.0194823Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0194923Z               "line": 499
2026-06-23T09:38:03.0195027Z             }
2026-06-23T09:38:03.0195133Z           ]
2026-06-23T09:38:03.0195228Z         }
2026-06-23T09:38:03.0195328Z       }
2026-06-23T09:38:03.0195429Z     },
2026-06-23T09:38:03.0195532Z     {
2026-06-23T09:38:03.0195652Z       "id": "REQ-HOST-RUN-1",
2026-06-23T09:38:03.0198089Z       "title": "spt-hosted harness bringup: `spt endpoint run` spawns an adapter's `[session.self]` command template into a broker-held PTY (the spawn-session seam, brain.rs spawn_session_pid — same broker path shellhost.rs launch_shell_brokered_in uses for shells, now for kind=\"harness\" self-role), registers the perch under the given endpoint id, returns the id. Reverses today's harness-hosted-only launch (external launcher → `api bind`). Non-interactive flag set (--adapter <a[:profile]> --id <id> --create --resume <session> --attach|--start|--view) covers every terminal action of the W2 interactive picker so shortcuts (cc-<id>) bake fully non-interactive launches; composite adapter:profile resolves via registry::resolve_option leaf-replace overlay.",
2026-06-23T09:38:03.0198219Z       "requiredStages": [
2026-06-23T09:38:03.0198325Z         "impl",
2026-06-23T09:38:03.0198433Z         "unit",
2026-06-23T09:38:03.0198544Z         "int"
2026-06-23T09:38:03.0198640Z       ],
2026-06-23T09:38:03.0198752Z       "stages": {
2026-06-23T09:38:03.0198866Z         "doc": {
2026-06-23T09:38:03.0199054Z           "complete": false,
2026-06-23T09:38:03.0199168Z           "evidence": []
2026-06-23T09:38:03.0199270Z         },
2026-06-23T09:38:03.0199403Z         "impl": {
2026-06-23T09:38:03.0199517Z           "complete": true,
2026-06-23T09:38:03.0199623Z           "evidence": [
2026-06-23T09:38:03.0199722Z             {
2026-06-23T09:38:03.0199881Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.0199990Z               "line": 30
2026-06-23T09:38:03.0200099Z             },
2026-06-23T09:38:03.0200210Z             {
2026-06-23T09:38:03.0200347Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.0200461Z               "line": 76
2026-06-23T09:38:03.0200567Z             },
2026-06-23T09:38:03.0200671Z             {
2026-06-23T09:38:03.0200820Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.0200928Z               "line": 181
2026-06-23T09:38:03.0201038Z             },
2026-06-23T09:38:03.0201139Z             {
2026-06-23T09:38:03.0201276Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0201382Z               "line": 1336
2026-06-23T09:38:03.0201488Z             }
2026-06-23T09:38:03.0201591Z           ]
2026-06-23T09:38:03.0201695Z         },
2026-06-23T09:38:03.0201796Z         "int": {
2026-06-23T09:38:03.0201896Z           "complete": true,
2026-06-23T09:38:03.0202009Z           "evidence": [
2026-06-23T09:38:03.0202110Z             {
2026-06-23T09:38:03.0202263Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.0202497Z               "line": 290
2026-06-23T09:38:03.0202606Z             }
2026-06-23T09:38:03.0202711Z           ]
2026-06-23T09:38:03.0202811Z         },
2026-06-23T09:38:03.0202921Z         "unit": {
2026-06-23T09:38:03.0203031Z           "complete": true,
2026-06-23T09:38:03.0203141Z           "evidence": [
2026-06-23T09:38:03.0203240Z             {
2026-06-23T09:38:03.0203399Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.0203603Z               "line": 235
2026-06-23T09:38:03.0203699Z             },
2026-06-23T09:38:03.0203807Z             {
2026-06-23T09:38:03.0203950Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.0204054Z               "line": 302
2026-06-23T09:38:03.0204153Z             },
2026-06-23T09:38:03.0204266Z             {
2026-06-23T09:38:03.0204420Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.0204529Z               "line": 425
2026-06-23T09:38:03.0204633Z             }
2026-06-23T09:38:03.0204735Z           ]
2026-06-23T09:38:03.0204839Z         }
2026-06-23T09:38:03.0204939Z       }
2026-06-23T09:38:03.0205050Z     },
2026-06-23T09:38:03.0205139Z     {
2026-06-23T09:38:03.0205259Z       "id": "REQ-HOST-RUN-2",
2026-06-23T09:38:03.0207034Z       "title": "Project-scoped working directory for spt-hosted bringup: `spt endpoint run` lands the broker-spawned harness PTY in the user's PROJECT cwd, not the daemon's, via an additive `SpawnReq.cwd` field carried through the broker PTY spawn (portable-pty CommandBuilder cwd). N-1-safe wire change (additive, defaulted). Required because the consumer (Claude Code) is project-scoped: broker-inherited cwd = the daemon's cwd = the wrong `.claude`, wrong session history, wrong digest source; `cc <id>` at a project root MUST land the harness in that project. W1 ships broker-inherited cwd as a bringup-proof shortcut only; this REQ must land before the M12 gate (doyle, 2026-06-14).",
2026-06-23T09:38:03.0207157Z       "requiredStages": [
2026-06-23T09:38:03.0207263Z         "impl",
2026-06-23T09:38:03.0207377Z         "unit",
2026-06-23T09:38:03.0207477Z         "int"
2026-06-23T09:38:03.0207578Z       ],
2026-06-23T09:38:03.0207692Z       "stages": {
2026-06-23T09:38:03.0207796Z         "doc": {
2026-06-23T09:38:03.0207912Z           "complete": false,
2026-06-23T09:38:03.0208021Z           "evidence": []
2026-06-23T09:38:03.0208130Z         },
2026-06-23T09:38:03.0208236Z         "impl": {
2026-06-23T09:38:03.0208350Z           "complete": true,
2026-06-23T09:38:03.0208464Z           "evidence": [
2026-06-23T09:38:03.0208570Z             {
2026-06-23T09:38:03.0208726Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.0208832Z               "line": 182
2026-06-23T09:38:03.0209036Z             },
2026-06-23T09:38:03.0209133Z             {
2026-06-23T09:38:03.0209279Z               "path": "crates/spt-term/src/pty.rs",
2026-06-23T09:38:03.0209397Z               "line": 113
2026-06-23T09:38:03.0209503Z             }
2026-06-23T09:38:03.0209606Z           ]
2026-06-23T09:38:03.0209705Z         },
2026-06-23T09:38:03.0209801Z         "int": {
2026-06-23T09:38:03.0209911Z           "complete": true,
2026-06-23T09:38:03.0210029Z           "evidence": [
2026-06-23T09:38:03.0210136Z             {
2026-06-23T09:38:03.0210282Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.0210402Z               "line": 579
2026-06-23T09:38:03.0210506Z             }
2026-06-23T09:38:03.0210611Z           ]
2026-06-23T09:38:03.0210712Z         },
2026-06-23T09:38:03.0210821Z         "unit": {
2026-06-23T09:38:03.0210930Z           "complete": true,
2026-06-23T09:38:03.0211036Z           "evidence": [
2026-06-23T09:38:03.0211132Z             {
2026-06-23T09:38:03.0211279Z               "path": "crates/spt-term/tests/surface.rs",
2026-06-23T09:38:03.0211390Z               "line": 86
2026-06-23T09:38:03.0211488Z             }
2026-06-23T09:38:03.0211593Z           ]
2026-06-23T09:38:03.0211699Z         }
2026-06-23T09:38:03.0211913Z       }
2026-06-23T09:38:03.0212024Z     },
2026-06-23T09:38:03.0212123Z     {
2026-06-23T09:38:03.0212241Z       "id": "REQ-INFRA-1",
2026-06-23T09:38:03.0212447Z       "title": "GitHub issue tracking for v1; tangled.org as migration target",
2026-06-23T09:38:03.0212570Z       "requiredStages": [],
2026-06-23T09:38:03.0212680Z       "stages": {
2026-06-23T09:38:03.0212785Z         "doc": {
2026-06-23T09:38:03.0213005Z           "complete": false,
2026-06-23T09:38:03.0213119Z           "evidence": []
2026-06-23T09:38:03.0213223Z         },
2026-06-23T09:38:03.0213329Z         "impl": {
2026-06-23T09:38:03.0213448Z           "complete": false,
2026-06-23T09:38:03.0213561Z           "evidence": []
2026-06-23T09:38:03.0213658Z         },
2026-06-23T09:38:03.0213767Z         "int": {
2026-06-23T09:38:03.0213871Z           "complete": false,
2026-06-23T09:38:03.0213987Z           "evidence": []
2026-06-23T09:38:03.0214091Z         },
2026-06-23T09:38:03.0214201Z         "unit": {
2026-06-23T09:38:03.0214311Z           "complete": false,
2026-06-23T09:38:03.0214415Z           "evidence": []
2026-06-23T09:38:03.0214519Z         }
2026-06-23T09:38:03.0214610Z       }
2026-06-23T09:38:03.0214718Z     },
2026-06-23T09:38:03.0214817Z     {
2026-06-23T09:38:03.0214932Z       "id": "REQ-INST-1",
2026-06-23T09:38:03.0215117Z       "title": "endpoint ID vs instance split (adapter-agnostic ID)",
2026-06-23T09:38:03.0215242Z       "requiredStages": [],
2026-06-23T09:38:03.0215347Z       "stages": {
2026-06-23T09:38:03.0215451Z         "doc": {
2026-06-23T09:38:03.0215567Z           "complete": false,
2026-06-23T09:38:03.0215676Z           "evidence": []
2026-06-23T09:38:03.0215775Z         },
2026-06-23T09:38:03.0215886Z         "impl": {
2026-06-23T09:38:03.0216000Z           "complete": false,
2026-06-23T09:38:03.0216119Z           "evidence": []
2026-06-23T09:38:03.0216220Z         },
2026-06-23T09:38:03.0216329Z         "int": {
2026-06-23T09:38:03.0216438Z           "complete": false,
2026-06-23T09:38:03.0216559Z           "evidence": []
2026-06-23T09:38:03.0216657Z         },
2026-06-23T09:38:03.0216768Z         "unit": {
2026-06-23T09:38:03.0216878Z           "complete": false,
2026-06-23T09:38:03.0216991Z           "evidence": []
2026-06-23T09:38:03.0217098Z         }
2026-06-23T09:38:03.0217198Z       }
2026-06-23T09:38:03.0217301Z     },
2026-06-23T09:38:03.0217396Z     {
2026-06-23T09:38:03.0220119Z       "id": "REQ-INST-10",
2026-06-23T09:38:03.0220380Z       "title": "Qualified addressing [subnet:]id[@node] + ambiguity forces qualification",
2026-06-23T09:38:03.0220500Z       "requiredStages": [
2026-06-23T09:38:03.0220608Z         "impl",
2026-06-23T09:38:03.0220715Z         "unit"
2026-06-23T09:38:03.0220810Z       ],
2026-06-23T09:38:03.0220914Z       "stages": {
2026-06-23T09:38:03.0221010Z         "doc": {
2026-06-23T09:38:03.0221129Z           "complete": false,
2026-06-23T09:38:03.0221238Z           "evidence": []
2026-06-23T09:38:03.0221339Z         },
2026-06-23T09:38:03.0221453Z         "impl": {
2026-06-23T09:38:03.0221567Z           "complete": true,
2026-06-23T09:38:03.0221683Z           "evidence": [
2026-06-23T09:38:03.0221792Z             {
2026-06-23T09:38:03.0221945Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0222049Z               "line": 648
2026-06-23T09:38:03.0222153Z             },
2026-06-23T09:38:03.0222250Z             {
2026-06-23T09:38:03.0222406Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0222512Z               "line": 725
2026-06-23T09:38:03.0222618Z             },
2026-06-23T09:38:03.0222720Z             {
2026-06-23T09:38:03.0222858Z               "path": "crates/spt-proto/src/addr.rs",
2026-06-23T09:38:03.0222969Z               "line": 13
2026-06-23T09:38:03.0223059Z             },
2026-06-23T09:38:03.0223158Z             {
2026-06-23T09:38:03.0223288Z               "path": "crates/spt-proto/src/addr.rs",
2026-06-23T09:38:03.0223401Z               "line": 67
2026-06-23T09:38:03.0223636Z             },
2026-06-23T09:38:03.0223740Z             {
2026-06-23T09:38:03.0223880Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.0223993Z               "line": 18
2026-06-23T09:38:03.0224098Z             },
2026-06-23T09:38:03.0224195Z             {
2026-06-23T09:38:03.0224327Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.0224441Z               "line": 444
2026-06-23T09:38:03.0224636Z             }
2026-06-23T09:38:03.0224742Z           ]
2026-06-23T09:38:03.0224839Z         },
2026-06-23T09:38:03.0224946Z         "int": {
2026-06-23T09:38:03.0225060Z           "complete": false,
2026-06-23T09:38:03.0225170Z           "evidence": []
2026-06-23T09:38:03.0225273Z         },
2026-06-23T09:38:03.0225372Z         "unit": {
2026-06-23T09:38:03.0225488Z           "complete": true,
2026-06-23T09:38:03.0225593Z           "evidence": [
2026-06-23T09:38:03.0225696Z             {
2026-06-23T09:38:03.0225845Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0225959Z               "line": 932
2026-06-23T09:38:03.0226069Z             },
2026-06-23T09:38:03.0226160Z             {
2026-06-23T09:38:03.0226312Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0226423Z               "line": 1309
2026-06-23T09:38:03.0226527Z             },
2026-06-23T09:38:03.0226631Z             {
2026-06-23T09:38:03.0226771Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0226894Z               "line": 1320
2026-06-23T09:38:03.0226993Z             },
2026-06-23T09:38:03.0227100Z             {
2026-06-23T09:38:03.0227237Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0227348Z               "line": 1336
2026-06-23T09:38:03.0227452Z             },
2026-06-23T09:38:03.0227551Z             {
2026-06-23T09:38:03.0227701Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0227809Z               "line": 1352
2026-06-23T09:38:03.0227913Z             },
2026-06-23T09:38:03.0228018Z             {
2026-06-23T09:38:03.0228164Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0228273Z               "line": 1374
2026-06-23T09:38:03.0228374Z             },
2026-06-23T09:38:03.0228474Z             {
2026-06-23T09:38:03.0228607Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0228713Z               "line": 1679
2026-06-23T09:38:03.0228817Z             },
2026-06-23T09:38:03.0228926Z             {
2026-06-23T09:38:03.0229146Z               "path": "crates/spt-proto/src/addr.rs",
2026-06-23T09:38:03.0229256Z               "line": 130
2026-06-23T09:38:03.0229361Z             },
2026-06-23T09:38:03.0229456Z             {
2026-06-23T09:38:03.0229585Z               "path": "crates/spt-proto/src/addr.rs",
2026-06-23T09:38:03.0229695Z               "line": 167
2026-06-23T09:38:03.0229804Z             },
2026-06-23T09:38:03.0229914Z             {
2026-06-23T09:38:03.0230047Z               "path": "crates/spt-proto/src/addr.rs",
2026-06-23T09:38:03.0230148Z               "line": 175
2026-06-23T09:38:03.0230253Z             },
2026-06-23T09:38:03.0230348Z             {
2026-06-23T09:38:03.0230485Z               "path": "crates/spt-proto/src/addr.rs",
2026-06-23T09:38:03.0230590Z               "line": 183
2026-06-23T09:38:03.0230693Z             },
2026-06-23T09:38:03.0230787Z             {
2026-06-23T09:38:03.0230930Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.0231036Z               "line": 896
2026-06-23T09:38:03.0231145Z             }
2026-06-23T09:38:03.0231236Z           ]
2026-06-23T09:38:03.0231341Z         }
2026-06-23T09:38:03.0231440Z       }
2026-06-23T09:38:03.0231537Z     },
2026-06-23T09:38:03.0231637Z     {
2026-06-23T09:38:03.0231746Z       "id": "REQ-INST-11",
2026-06-23T09:38:03.0231993Z       "title": "spt rename <id> rippled to all instances (collision-checked, 6.5-reconciled)",
2026-06-23T09:38:03.0232103Z       "requiredStages": [
2026-06-23T09:38:03.0232205Z         "impl",
2026-06-23T09:38:03.0232399Z         "unit"
2026-06-23T09:38:03.0232496Z       ],
2026-06-23T09:38:03.0232595Z       "stages": {
2026-06-23T09:38:03.0232690Z         "doc": {
2026-06-23T09:38:03.0232811Z           "complete": false,
2026-06-23T09:38:03.0232910Z           "evidence": []
2026-06-23T09:38:03.0233010Z         },
2026-06-23T09:38:03.0233116Z         "impl": {
2026-06-23T09:38:03.0233225Z           "complete": true,
2026-06-23T09:38:03.0233423Z           "evidence": [
2026-06-23T09:38:03.0233524Z             {
2026-06-23T09:38:03.0233671Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0233781Z               "line": 514
2026-06-23T09:38:03.0233876Z             },
2026-06-23T09:38:03.0233976Z             {
2026-06-23T09:38:03.0234130Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.0234240Z               "line": 297
2026-06-23T09:38:03.0234334Z             },
2026-06-23T09:38:03.0234435Z             {
2026-06-23T09:38:03.0234573Z               "path": "crates/spt-store/src/rename.rs",
2026-06-23T09:38:03.0234668Z               "line": 59
2026-06-23T09:38:03.0234769Z             },
2026-06-23T09:38:03.0234868Z             {
2026-06-23T09:38:03.0235002Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0235098Z               "line": 5946
2026-06-23T09:38:03.0235206Z             },
2026-06-23T09:38:03.0235312Z             {
2026-06-23T09:38:03.0235442Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0235545Z               "line": 8202
2026-06-23T09:38:03.0235634Z             }
2026-06-23T09:38:03.0235740Z           ]
2026-06-23T09:38:03.0235838Z         },
2026-06-23T09:38:03.0235942Z         "int": {
2026-06-23T09:38:03.0236052Z           "complete": false,
2026-06-23T09:38:03.0236162Z           "evidence": []
2026-06-23T09:38:03.0236271Z         },
2026-06-23T09:38:03.0236377Z         "unit": {
2026-06-23T09:38:03.0236491Z           "complete": true,
2026-06-23T09:38:03.0236595Z           "evidence": [
2026-06-23T09:38:03.0236697Z             {
2026-06-23T09:38:03.0236843Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0236949Z               "line": 1479
2026-06-23T09:38:03.0237044Z             },
2026-06-23T09:38:03.0237149Z             {
2026-06-23T09:38:03.0237292Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0237401Z               "line": 1512
2026-06-23T09:38:03.0237506Z             },
2026-06-23T09:38:03.0237612Z             {
2026-06-23T09:38:03.0237759Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.0237864Z               "line": 527
2026-06-23T09:38:03.0237966Z             },
2026-06-23T09:38:03.0238068Z             {
2026-06-23T09:38:03.0238193Z               "path": "crates/spt-store/src/rename.rs",
2026-06-23T09:38:03.0238313Z               "line": 160
2026-06-23T09:38:03.0238421Z             },
2026-06-23T09:38:03.0238516Z             {
2026-06-23T09:38:03.0238658Z               "path": "crates/spt-store/src/rename.rs",
2026-06-23T09:38:03.0238767Z               "line": 190
2026-06-23T09:38:03.0238876Z             },
2026-06-23T09:38:03.0239062Z             {
2026-06-23T09:38:03.0239196Z               "path": "crates/spt-store/src/rename.rs",
2026-06-23T09:38:03.0239301Z               "line": 225
2026-06-23T09:38:03.0239405Z             },
2026-06-23T09:38:03.0239506Z             {
2026-06-23T09:38:03.0239635Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0239749Z               "line": 9388
2026-06-23T09:38:03.0239844Z             }
2026-06-23T09:38:03.0239945Z           ]
2026-06-23T09:38:03.0240049Z         }
2026-06-23T09:38:03.0240150Z       }
2026-06-23T09:38:03.0240245Z     },
2026-06-23T09:38:03.0240335Z     {
2026-06-23T09:38:03.0240455Z       "id": "REQ-INST-12",
2026-06-23T09:38:03.0240765Z       "title": "Endpoint visibility per-(endpoint,subnet): excluded semantics, OR-of-defaults + override, gates sync",
2026-06-23T09:38:03.0240875Z       "requiredStages": [
2026-06-23T09:38:03.0241097Z         "impl",
2026-06-23T09:38:03.0241207Z         "unit"
2026-06-23T09:38:03.0241310Z       ],
2026-06-23T09:38:03.0241414Z       "stages": {
2026-06-23T09:38:03.0241520Z         "doc": {
2026-06-23T09:38:03.0241634Z           "complete": false,
2026-06-23T09:38:03.0241739Z           "evidence": []
2026-06-23T09:38:03.0241840Z         },
2026-06-23T09:38:03.0241939Z         "impl": {
2026-06-23T09:38:03.0242149Z           "complete": true,
2026-06-23T09:38:03.0242259Z           "evidence": [
2026-06-23T09:38:03.0242353Z             {
2026-06-23T09:38:03.0242497Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0242611Z               "line": 566
2026-06-23T09:38:03.0242716Z             },
2026-06-23T09:38:03.0242817Z             {
2026-06-23T09:38:03.0242964Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0243070Z               "line": 659
2026-06-23T09:38:03.0243174Z             },
2026-06-23T09:38:03.0243274Z             {
2026-06-23T09:38:03.0243423Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0243536Z               "line": 739
2026-06-23T09:38:03.0243642Z             },
2026-06-23T09:38:03.0243742Z             {
2026-06-23T09:38:03.0243874Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0243978Z               "line": 96
2026-06-23T09:38:03.0244075Z             },
2026-06-23T09:38:03.0244184Z             {
2026-06-23T09:38:03.0244317Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0244427Z               "line": 269
2026-06-23T09:38:03.0244532Z             },
2026-06-23T09:38:03.0244632Z             {
2026-06-23T09:38:03.0244775Z               "path": "crates/spt-store/src/visibility.rs",
2026-06-23T09:38:03.0244884Z               "line": 148
2026-06-23T09:38:03.0244976Z             }
2026-06-23T09:38:03.0245085Z           ]
2026-06-23T09:38:03.0245175Z         },
2026-06-23T09:38:03.0245286Z         "int": {
2026-06-23T09:38:03.0245395Z           "complete": false,
2026-06-23T09:38:03.0245509Z           "evidence": []
2026-06-23T09:38:03.0245611Z         },
2026-06-23T09:38:03.0245715Z         "unit": {
2026-06-23T09:38:03.0245828Z           "complete": true,
2026-06-23T09:38:03.0245935Z           "evidence": [
2026-06-23T09:38:03.0246039Z             {
2026-06-23T09:38:03.0246171Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0246290Z               "line": 1554
2026-06-23T09:38:03.0246380Z             },
2026-06-23T09:38:03.0246474Z             {
2026-06-23T09:38:03.0246622Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0246732Z               "line": 1577
2026-06-23T09:38:03.0246836Z             },
2026-06-23T09:38:03.0246932Z             {
2026-06-23T09:38:03.0247084Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0247194Z               "line": 1614
2026-06-23T09:38:03.0247285Z             },
2026-06-23T09:38:03.0247389Z             {
2026-06-23T09:38:03.0247528Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0247642Z               "line": 457
2026-06-23T09:38:03.0247737Z             },
2026-06-23T09:38:03.0247843Z             {
2026-06-23T09:38:03.0247990Z               "path": "crates/spt-store/src/visibility.rs",
2026-06-23T09:38:03.0248100Z               "line": 185
2026-06-23T09:38:03.0248206Z             },
2026-06-23T09:38:03.0248309Z             {
2026-06-23T09:38:03.0248458Z               "path": "crates/spt-store/src/visibility.rs",
2026-06-23T09:38:03.0248564Z               "line": 206
2026-06-23T09:38:03.0248672Z             },
2026-06-23T09:38:03.0248773Z             {
2026-06-23T09:38:03.0248916Z               "path": "crates/spt-store/src/visibility.rs",
2026-06-23T09:38:03.0249100Z               "line": 232
2026-06-23T09:38:03.0249200Z             }
2026-06-23T09:38:03.0249303Z           ]
2026-06-23T09:38:03.0249393Z         }
2026-06-23T09:38:03.0249499Z       }
2026-06-23T09:38:03.0249698Z     },
2026-06-23T09:38:03.0249805Z     {
2026-06-23T09:38:03.0249914Z       "id": "REQ-INST-13",
2026-06-23T09:38:03.0250124Z       "title": "Subnet-exclusive sync + per-endpoint subnet-membership list",
2026-06-23T09:38:03.0250233Z       "requiredStages": [
2026-06-23T09:38:03.0250342Z         "impl",
2026-06-23T09:38:03.0250444Z         "unit"
2026-06-23T09:38:03.0250533Z       ],
2026-06-23T09:38:03.0250734Z       "stages": {
2026-06-23T09:38:03.0250843Z         "doc": {
2026-06-23T09:38:03.0250957Z           "complete": false,
2026-06-23T09:38:03.0251064Z           "evidence": []
2026-06-23T09:38:03.0251163Z         },
2026-06-23T09:38:03.0251272Z         "impl": {
2026-06-23T09:38:03.0251378Z           "complete": true,
2026-06-23T09:38:03.0251482Z           "evidence": [
2026-06-23T09:38:03.0251590Z             {
2026-06-23T09:38:03.0251724Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0251832Z               "line": 100
2026-06-23T09:38:03.0251936Z             },
2026-06-23T09:38:03.0252032Z             {
2026-06-23T09:38:03.0252175Z               "path": "crates/spt-store/src/visibility.rs",
2026-06-23T09:38:03.0252274Z               "line": 171
2026-06-23T09:38:03.0252376Z             }
2026-06-23T09:38:03.0252471Z           ]
2026-06-23T09:38:03.0252570Z         },
2026-06-23T09:38:03.0252672Z         "int": {
2026-06-23T09:38:03.0252785Z           "complete": false,
2026-06-23T09:38:03.0252894Z           "evidence": []
2026-06-23T09:38:03.0252991Z         },
2026-06-23T09:38:03.0253095Z         "unit": {
2026-06-23T09:38:03.0253205Z           "complete": true,
2026-06-23T09:38:03.0253311Z           "evidence": [
2026-06-23T09:38:03.0253410Z             {
2026-06-23T09:38:03.0253557Z               "path": "crates/spt-store/src/visibility.rs",
2026-06-23T09:38:03.0253668Z               "line": 261
2026-06-23T09:38:03.0253772Z             },
2026-06-23T09:38:03.0253872Z             {
2026-06-23T09:38:03.0254007Z               "path": "crates/spt-store/src/visibility.rs",
2026-06-23T09:38:03.0254120Z               "line": 279
2026-06-23T09:38:03.0254221Z             }
2026-06-23T09:38:03.0254326Z           ]
2026-06-23T09:38:03.0254430Z         }
2026-06-23T09:38:03.0254529Z       }
2026-06-23T09:38:03.0254630Z     },
2026-06-23T09:38:03.0254730Z     {
2026-06-23T09:38:03.0254844Z       "id": "REQ-INST-14",
2026-06-23T09:38:03.0255240Z       "title": "Resource advertisement (subnet resource registry): free-text blurb, both-authored, registry projection, visibility/whitelist-gated",
2026-06-23T09:38:03.0255365Z       "requiredStages": [
2026-06-23T09:38:03.0255458Z         "doc",
2026-06-23T09:38:03.0255560Z         "impl",
2026-06-23T09:38:03.0255659Z         "unit"
2026-06-23T09:38:03.0255754Z       ],
2026-06-23T09:38:03.0255861Z       "stages": {
2026-06-23T09:38:03.0255965Z         "doc": {
2026-06-23T09:38:03.0256074Z           "complete": true,
2026-06-23T09:38:03.0256176Z           "evidence": [
2026-06-23T09:38:03.0256271Z             {
2026-06-23T09:38:03.0256398Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0256505Z               "line": 606
2026-06-23T09:38:03.0256608Z             },
2026-06-23T09:38:03.0256712Z             {
2026-06-23T09:38:03.0256831Z               "path": "docs/STORAGE.md",
2026-06-23T09:38:03.0256945Z               "line": 49
2026-06-23T09:38:03.0257039Z             }
2026-06-23T09:38:03.0257144Z           ]
2026-06-23T09:38:03.0257240Z         },
2026-06-23T09:38:03.0257353Z         "impl": {
2026-06-23T09:38:03.0257459Z           "complete": true,
2026-06-23T09:38:03.0257563Z           "evidence": [
2026-06-23T09:38:03.0257672Z             {
2026-06-23T09:38:03.0257831Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0257945Z               "line": 410
2026-06-23T09:38:03.0258045Z             },
2026-06-23T09:38:03.0258151Z             {
2026-06-23T09:38:03.0258293Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0258398Z               "line": 367
2026-06-23T09:38:03.0258580Z             },
2026-06-23T09:38:03.0258679Z             {
2026-06-23T09:38:03.0258828Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.0258932Z               "line": 293
2026-06-23T09:38:03.0259129Z             },
2026-06-23T09:38:03.0259237Z             {
2026-06-23T09:38:03.0259362Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0259467Z               "line": 1926
2026-06-23T09:38:03.0259665Z             }
2026-06-23T09:38:03.0259770Z           ]
2026-06-23T09:38:03.0259858Z         },
2026-06-23T09:38:03.0259967Z         "int": {
2026-06-23T09:38:03.0260078Z           "complete": false,
2026-06-23T09:38:03.0260187Z           "evidence": []
2026-06-23T09:38:03.0260292Z         },
2026-06-23T09:38:03.0260393Z         "unit": {
2026-06-23T09:38:03.0260497Z           "complete": true,
2026-06-23T09:38:03.0260602Z           "evidence": [
2026-06-23T09:38:03.0260708Z             {
2026-06-23T09:38:03.0260869Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0260974Z               "line": 1163
2026-06-23T09:38:03.0261083Z             },
2026-06-23T09:38:03.0261184Z             {
2026-06-23T09:38:03.0261323Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0261432Z               "line": 944
2026-06-23T09:38:03.0261542Z             },
2026-06-23T09:38:03.0261648Z             {
2026-06-23T09:38:03.0261794Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0261910Z               "line": 1205
2026-06-23T09:38:03.0262014Z             },
2026-06-23T09:38:03.0262118Z             {
2026-06-23T09:38:03.0262250Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.0262359Z               "line": 659
2026-06-23T09:38:03.0262468Z             },
2026-06-23T09:38:03.0262563Z             {
2026-06-23T09:38:03.0262693Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0262797Z               "line": 9464
2026-06-23T09:38:03.0262897Z             }
2026-06-23T09:38:03.0262998Z           ]
2026-06-23T09:38:03.0263102Z         }
2026-06-23T09:38:03.0263207Z       }
2026-06-23T09:38:03.0263307Z     },
2026-06-23T09:38:03.0263412Z     {
2026-06-23T09:38:03.0263517Z       "id": "REQ-INST-15",
2026-06-23T09:38:03.0264266Z       "title": "Immutable home subnet (assigned at creation: auto-if-one/ask-if-many) + spt fork (cross-subnet clone to a new identity, copy-then-diverge, not re-home); adapter chosen at creation from registered hostable adapters, changed only via launch/resume-under-new (ADR-0010)",
2026-06-23T09:38:03.0264394Z       "requiredStages": [
2026-06-23T09:38:03.0264505Z         "doc",
2026-06-23T09:38:03.0264613Z         "impl",
2026-06-23T09:38:03.0264714Z         "unit"
2026-06-23T09:38:03.0264820Z       ],
2026-06-23T09:38:03.0264924Z       "stages": {
2026-06-23T09:38:03.0265032Z         "doc": {
2026-06-23T09:38:03.0265142Z           "complete": true,
2026-06-23T09:38:03.0265262Z           "evidence": [
2026-06-23T09:38:03.0265365Z             {
2026-06-23T09:38:03.0265576Z               "path": "docs/adr/0010-immutable-home-subnet-fork-not-rehome.md",
2026-06-23T09:38:03.0265680Z               "line": 3
2026-06-23T09:38:03.0265772Z             }
2026-06-23T09:38:03.0265882Z           ]
2026-06-23T09:38:03.0265986Z         },
2026-06-23T09:38:03.0266091Z         "impl": {
2026-06-23T09:38:03.0266211Z           "complete": true,
2026-06-23T09:38:03.0266315Z           "evidence": [
2026-06-23T09:38:03.0266426Z             {
2026-06-23T09:38:03.0266577Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0266692Z               "line": 353
2026-06-23T09:38:03.0266797Z             },
2026-06-23T09:38:03.0266901Z             {
2026-06-23T09:38:03.0267040Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.0267150Z               "line": 60
2026-06-23T09:38:03.0267253Z             },
2026-06-23T09:38:03.0267358Z             {
2026-06-23T09:38:03.0267509Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.0267709Z               "line": 368
2026-06-23T09:38:03.0267815Z             },
2026-06-23T09:38:03.0267923Z             {
2026-06-23T09:38:03.0268077Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.0268186Z               "line": 417
2026-06-23T09:38:03.0268290Z             },
2026-06-23T09:38:03.0268396Z             {
2026-06-23T09:38:03.0268624Z               "path": "crates/spt-store/src/home.rs",
2026-06-23T09:38:03.0268734Z               "line": 19
2026-06-23T09:38:03.0268839Z             },
2026-06-23T09:38:03.0268939Z             {
2026-06-23T09:38:03.0269163Z               "path": "crates/spt-store/src/home.rs",
2026-06-23T09:38:03.0269268Z               "line": 70
2026-06-23T09:38:03.0269369Z             },
2026-06-23T09:38:03.0269473Z             {
2026-06-23T09:38:03.0269608Z               "path": "crates/spt-store/src/home.rs",
2026-06-23T09:38:03.0269712Z               "line": 96
2026-06-23T09:38:03.0269812Z             },
2026-06-23T09:38:03.0269927Z             {
2026-06-23T09:38:03.0270055Z               "path": "crates/spt-store/src/home.rs",
2026-06-23T09:38:03.0270163Z               "line": 121
2026-06-23T09:38:03.0270273Z             },
2026-06-23T09:38:03.0270372Z             {
2026-06-23T09:38:03.0270504Z               "path": "crates/spt-store/src/home.rs",
2026-06-23T09:38:03.0270609Z               "line": 172
2026-06-23T09:38:03.0270710Z             },
2026-06-23T09:38:03.0270814Z             {
2026-06-23T09:38:03.0270949Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.0271053Z               "line": 178
2026-06-23T09:38:03.0271157Z             },
2026-06-23T09:38:03.0271263Z             {
2026-06-23T09:38:03.0271391Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0271501Z               "line": 1818
2026-06-23T09:38:03.0271592Z             }
2026-06-23T09:38:03.0271692Z           ]
2026-06-23T09:38:03.0271787Z         },
2026-06-23T09:38:03.0271888Z         "int": {
2026-06-23T09:38:03.0272001Z           "complete": false,
2026-06-23T09:38:03.0272102Z           "evidence": []
2026-06-23T09:38:03.0272208Z         },
2026-06-23T09:38:03.0272306Z         "unit": {
2026-06-23T09:38:03.0272416Z           "complete": true,
2026-06-23T09:38:03.0272532Z           "evidence": [
2026-06-23T09:38:03.0272635Z             {
2026-06-23T09:38:03.0272792Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.0272901Z               "line": 577
2026-06-23T09:38:03.0272999Z             },
2026-06-23T09:38:03.0273099Z             {
2026-06-23T09:38:03.0273249Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.0273357Z               "line": 638
2026-06-23T09:38:03.0273452Z             },
2026-06-23T09:38:03.0273562Z             {
2026-06-23T09:38:03.0273695Z               "path": "crates/spt-store/src/home.rs",
2026-06-23T09:38:03.0273806Z               "line": 213
2026-06-23T09:38:03.0273911Z             },
2026-06-23T09:38:03.0274020Z             {
2026-06-23T09:38:03.0274150Z               "path": "crates/spt-store/src/home.rs",
2026-06-23T09:38:03.0274254Z               "line": 249
2026-06-23T09:38:03.0274358Z             },
2026-06-23T09:38:03.0274460Z             {
2026-06-23T09:38:03.0274587Z               "path": "crates/spt-store/src/home.rs",
2026-06-23T09:38:03.0274692Z               "line": 262
2026-06-23T09:38:03.0274798Z             },
2026-06-23T09:38:03.0274902Z             {
2026-06-23T09:38:03.0275022Z               "path": "crates/spt-store/src/home.rs",
2026-06-23T09:38:03.0275136Z               "line": 338
2026-06-23T09:38:03.0275240Z             },
2026-06-23T09:38:03.0275342Z             {
2026-06-23T09:38:03.0275479Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.0275588Z               "line": 690
2026-06-23T09:38:03.0275702Z             },
2026-06-23T09:38:03.0275803Z             {
2026-06-23T09:38:03.0275940Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0276146Z               "line": 9401
2026-06-23T09:38:03.0276255Z             },
2026-06-23T09:38:03.0276347Z             {
2026-06-23T09:38:03.0276480Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0276598Z               "line": 11375
2026-06-23T09:38:03.0276704Z             }
2026-06-23T09:38:03.0276808Z           ]
2026-06-23T09:38:03.0276903Z         }
2026-06-23T09:38:03.0277005Z       }
2026-06-23T09:38:03.0277199Z     },
2026-06-23T09:38:03.0277306Z     {
2026-06-23T09:38:03.0277423Z       "id": "REQ-INST-2",
2026-06-23T09:38:03.0277571Z       "title": "Per-node files, synced Psyche mind",
2026-06-23T09:38:03.0277686Z       "requiredStages": [
2026-06-23T09:38:03.0277790Z         "impl",
2026-06-23T09:38:03.0277894Z         "unit"
2026-06-23T09:38:03.0278009Z       ],
2026-06-23T09:38:03.0278112Z       "stages": {
2026-06-23T09:38:03.0278221Z         "doc": {
2026-06-23T09:38:03.0278322Z           "complete": false,
2026-06-23T09:38:03.0278436Z           "evidence": []
2026-06-23T09:38:03.0278545Z         },
2026-06-23T09:38:03.0278656Z         "impl": {
2026-06-23T09:38:03.0278769Z           "complete": true,
2026-06-23T09:38:03.0278874Z           "evidence": [
2026-06-23T09:38:03.0279065Z             {
2026-06-23T09:38:03.0279214Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0279323Z               "line": 197
2026-06-23T09:38:03.0279427Z             },
2026-06-23T09:38:03.0279533Z             {
2026-06-23T09:38:03.0279680Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:03.0279789Z               "line": 28
2026-06-23T09:38:03.0279891Z             },
2026-06-23T09:38:03.0279986Z             {
2026-06-23T09:38:03.0280119Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:03.0280225Z               "line": 74
2026-06-23T09:38:03.0280328Z             },
2026-06-23T09:38:03.0280434Z             {
2026-06-23T09:38:03.0280568Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:03.0280676Z               "line": 96
2026-06-23T09:38:03.0280780Z             },
2026-06-23T09:38:03.0280890Z             {
2026-06-23T09:38:03.0281016Z               "path": "crates/spt-live/src/resume.rs",
2026-06-23T09:38:03.0281122Z               "line": 86
2026-06-23T09:38:03.0281232Z             },
2026-06-23T09:38:03.0281331Z             {
2026-06-23T09:38:03.0281475Z               "path": "crates/spt-live/src/signoff.rs",
2026-06-23T09:38:03.0281580Z               "line": 118
2026-06-23T09:38:03.0281688Z             }
2026-06-23T09:38:03.0281790Z           ]
2026-06-23T09:38:03.0281894Z         },
2026-06-23T09:38:03.0281993Z         "int": {
2026-06-23T09:38:03.0282100Z           "complete": false,
2026-06-23T09:38:03.0282209Z           "evidence": []
2026-06-23T09:38:03.0282308Z         },
2026-06-23T09:38:03.0282420Z         "unit": {
2026-06-23T09:38:03.0282533Z           "complete": true,
2026-06-23T09:38:03.0282647Z           "evidence": [
2026-06-23T09:38:03.0282753Z             {
2026-06-23T09:38:03.0282885Z               "path": "crates/spt-live/src/ingest.rs",
2026-06-23T09:38:03.0282996Z               "line": 250
2026-06-23T09:38:03.0283092Z             },
2026-06-23T09:38:03.0283200Z             {
2026-06-23T09:38:03.0283332Z               "path": "crates/spt-live/src/resume.rs",
2026-06-23T09:38:03.0283443Z               "line": 280
2026-06-23T09:38:03.0283540Z             }
2026-06-23T09:38:03.0283640Z           ]
2026-06-23T09:38:03.0283751Z         }
2026-06-23T09:38:03.0283846Z       }
2026-06-23T09:38:03.0283950Z     },
2026-06-23T09:38:03.0284042Z     {
2026-06-23T09:38:03.0284152Z       "id": "REQ-INST-3",
2026-06-23T09:38:03.0284337Z       "title": "Dormant (warm) / suspended (cold) resting states",
2026-06-23T09:38:03.0284442Z       "requiredStages": [
2026-06-23T09:38:03.0284551Z         "doc",
2026-06-23T09:38:03.0284652Z         "impl",
2026-06-23T09:38:03.0284766Z         "unit"
2026-06-23T09:38:03.0284870Z       ],
2026-06-23T09:38:03.0284972Z       "stages": {
2026-06-23T09:38:03.0285081Z         "doc": {
2026-06-23T09:38:03.0285291Z           "complete": true,
2026-06-23T09:38:03.0285405Z           "evidence": [
2026-06-23T09:38:03.0285500Z             {
2026-06-23T09:38:03.0285635Z               "path": "docs/DORMANCY-BUDGET.md",
2026-06-23T09:38:03.0285743Z               "line": 3
2026-06-23T09:38:03.0285848Z             }
2026-06-23T09:38:03.0285945Z           ]
2026-06-23T09:38:03.0286049Z         },
2026-06-23T09:38:03.0286252Z         "impl": {
2026-06-23T09:38:03.0286364Z           "complete": true,
2026-06-23T09:38:03.0286462Z           "evidence": [
2026-06-23T09:38:03.0286567Z             {
2026-06-23T09:38:03.0286706Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:03.0286820Z               "line": 60
2026-06-23T09:38:03.0286917Z             },
2026-06-23T09:38:03.0287026Z             {
2026-06-23T09:38:03.0287173Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0287288Z               "line": 480
2026-06-23T09:38:03.0287388Z             },
2026-06-23T09:38:03.0287497Z             {
2026-06-23T09:38:03.0287650Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0287755Z               "line": 452
2026-06-23T09:38:03.0287856Z             },
2026-06-23T09:38:03.0287946Z             {
2026-06-23T09:38:03.0288093Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0288195Z               "line": 592
2026-06-23T09:38:03.0288302Z             },
2026-06-23T09:38:03.0288402Z             {
2026-06-23T09:38:03.0288531Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0288643Z               "line": 626
2026-06-23T09:38:03.0288747Z             },
2026-06-23T09:38:03.0288849Z             {
2026-06-23T09:38:03.0289062Z               "path": "crates/spt-daemon/src/pump/sync.rs",
2026-06-23T09:38:03.0289173Z               "line": 74
2026-06-23T09:38:03.0289282Z             },
2026-06-23T09:38:03.0289377Z             {
2026-06-23T09:38:03.0289531Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0289639Z               "line": 234
2026-06-23T09:38:03.0289745Z             },
2026-06-23T09:38:03.0289845Z             {
2026-06-23T09:38:03.0289997Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0290103Z               "line": 396
2026-06-23T09:38:03.0290202Z             },
2026-06-23T09:38:03.0290307Z             {
2026-06-23T09:38:03.0290456Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0290560Z               "line": 45
2026-06-23T09:38:03.0290664Z             },
2026-06-23T09:38:03.0290761Z             {
2026-06-23T09:38:03.0290898Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0291009Z               "line": 114
2026-06-23T09:38:03.0291119Z             },
2026-06-23T09:38:03.0291213Z             {
2026-06-23T09:38:03.0291350Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0291455Z               "line": 152
2026-06-23T09:38:03.0291558Z             },
2026-06-23T09:38:03.0291667Z             {
2026-06-23T09:38:03.0291801Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0291915Z               "line": 168
2026-06-23T09:38:03.0292021Z             },
2026-06-23T09:38:03.0292125Z             {
2026-06-23T09:38:03.0292268Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0292369Z               "line": 178
2026-06-23T09:38:03.0292484Z             },
2026-06-23T09:38:03.0292587Z             {
2026-06-23T09:38:03.0292732Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0292841Z               "line": 210
2026-06-23T09:38:03.0292945Z             },
2026-06-23T09:38:03.0293056Z             {
2026-06-23T09:38:03.0293188Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0293300Z               "line": 287
2026-06-23T09:38:03.0293399Z             },
2026-06-23T09:38:03.0293508Z             {
2026-06-23T09:38:03.0293747Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0293860Z               "line": 311
2026-06-23T09:38:03.0293964Z             },
2026-06-23T09:38:03.0294068Z             {
2026-06-23T09:38:03.0294201Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0294296Z               "line": 389
2026-06-23T09:38:03.0294407Z             },
2026-06-23T09:38:03.0294501Z             {
2026-06-23T09:38:03.0294749Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0294863Z               "line": 438
2026-06-23T09:38:03.0294964Z             },
2026-06-23T09:38:03.0295060Z             {
2026-06-23T09:38:03.0295203Z               "path": "crates/spt-daemon/tests/budget.rs",
2026-06-23T09:38:03.0295308Z               "line": 37
2026-06-23T09:38:03.0295412Z             },
2026-06-23T09:38:03.0295512Z             {
2026-06-23T09:38:03.0295660Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0295774Z               "line": 62
2026-06-23T09:38:03.0295880Z             },
2026-06-23T09:38:03.0298291Z             {
2026-06-23T09:38:03.0298478Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.0298586Z               "line": 279
2026-06-23T09:38:03.0298682Z             },
2026-06-23T09:38:03.0298784Z             {
2026-06-23T09:38:03.0298920Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0299115Z               "line": 2202
2026-06-23T09:38:03.0299222Z             }
2026-06-23T09:38:03.0299331Z           ]
2026-06-23T09:38:03.0299432Z         },
2026-06-23T09:38:03.0299537Z         "int": {
2026-06-23T09:38:03.0299651Z           "complete": false,
2026-06-23T09:38:03.0299766Z           "evidence": []
2026-06-23T09:38:03.0299871Z         },
2026-06-23T09:38:03.0299975Z         "unit": {
2026-06-23T09:38:03.0300081Z           "complete": true,
2026-06-23T09:38:03.0300185Z           "evidence": [
2026-06-23T09:38:03.0300290Z             {
2026-06-23T09:38:03.0300448Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:03.0300557Z               "line": 360
2026-06-23T09:38:03.0300648Z             },
2026-06-23T09:38:03.0300748Z             {
2026-06-23T09:38:03.0300900Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0301012Z               "line": 1048
2026-06-23T09:38:03.0301120Z             },
2026-06-23T09:38:03.0301225Z             {
2026-06-23T09:38:03.0301378Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0301477Z               "line": 1105
2026-06-23T09:38:03.0301579Z             },
2026-06-23T09:38:03.0301679Z             {
2026-06-23T09:38:03.0301839Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:03.0301944Z               "line": 889
2026-06-23T09:38:03.0302052Z             },
2026-06-23T09:38:03.0302146Z             {
2026-06-23T09:38:03.0302299Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:03.0302409Z               "line": 1014
2026-06-23T09:38:03.0302518Z             },
2026-06-23T09:38:03.0302624Z             {
2026-06-23T09:38:03.0302781Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0302891Z               "line": 1264
2026-06-23T09:38:03.0302991Z             },
2026-06-23T09:38:03.0303086Z             {
2026-06-23T09:38:03.0303239Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0303348Z               "line": 1405
2026-06-23T09:38:03.0303453Z             },
2026-06-23T09:38:03.0303550Z             {
2026-06-23T09:38:03.0303691Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0303791Z               "line": 449
2026-06-23T09:38:03.0303897Z             },
2026-06-23T09:38:03.0303996Z             {
2026-06-23T09:38:03.0304140Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0304250Z               "line": 485
2026-06-23T09:38:03.0304353Z             },
2026-06-23T09:38:03.0304453Z             {
2026-06-23T09:38:03.0304703Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0304823Z               "line": 540
2026-06-23T09:38:03.0304929Z             },
2026-06-23T09:38:03.0305027Z             {
2026-06-23T09:38:03.0305162Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0305272Z               "line": 697
2026-06-23T09:38:03.0305380Z             },
2026-06-23T09:38:03.0305467Z             {
2026-06-23T09:38:03.0305724Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0305839Z               "line": 931
2026-06-23T09:38:03.0305934Z             },
2026-06-23T09:38:03.0306044Z             {
2026-06-23T09:38:03.0306182Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0306292Z               "line": 945
2026-06-23T09:38:03.0306392Z             },
2026-06-23T09:38:03.0306493Z             {
2026-06-23T09:38:03.0306644Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0306750Z               "line": 1290
2026-06-23T09:38:03.0306864Z             },
2026-06-23T09:38:03.0306964Z             {
2026-06-23T09:38:03.0307103Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.0307211Z               "line": 609
2026-06-23T09:38:03.0307311Z             },
2026-06-23T09:38:03.0307416Z             {
2026-06-23T09:38:03.0307540Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0307644Z               "line": 9425
2026-06-23T09:38:03.0307746Z             }
2026-06-23T09:38:03.0307846Z           ]
2026-06-23T09:38:03.0307945Z         }
2026-06-23T09:38:03.0308051Z       }
2026-06-23T09:38:03.0308151Z     },
2026-06-23T09:38:03.0308250Z     {
2026-06-23T09:38:03.0308361Z       "id": "REQ-INST-4",
2026-06-23T09:38:03.0308550Z       "title": "active to dormant/suspended fires a transition echo commune",
2026-06-23T09:38:03.0308666Z       "requiredStages": [
2026-06-23T09:38:03.0308770Z         "impl",
2026-06-23T09:38:03.0308865Z         "unit"
2026-06-23T09:38:03.0309038Z       ],
2026-06-23T09:38:03.0309146Z       "stages": {
2026-06-23T09:38:03.0309238Z         "doc": {
2026-06-23T09:38:03.0309349Z           "complete": false,
2026-06-23T09:38:03.0309456Z           "evidence": []
2026-06-23T09:38:03.0309560Z         },
2026-06-23T09:38:03.0309666Z         "impl": {
2026-06-23T09:38:03.0309773Z           "complete": true,
2026-06-23T09:38:03.0309877Z           "evidence": [
2026-06-23T09:38:03.0309983Z             {
2026-06-23T09:38:03.0310154Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0310259Z               "line": 593
2026-06-23T09:38:03.0310360Z             },
2026-06-23T09:38:03.0310464Z             {
2026-06-23T09:38:03.0310613Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0310713Z               "line": 202
2026-06-23T09:38:03.0310817Z             },
2026-06-23T09:38:03.0310918Z             {
2026-06-23T09:38:03.0311056Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0311160Z               "line": 234
2026-06-23T09:38:03.0311271Z             },
2026-06-23T09:38:03.0311371Z             {
2026-06-23T09:38:03.0311504Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0311604Z               "line": 274
2026-06-23T09:38:03.0311699Z             }
2026-06-23T09:38:03.0311799Z           ]
2026-06-23T09:38:03.0311901Z         },
2026-06-23T09:38:03.0312004Z         "int": {
2026-06-23T09:38:03.0312119Z           "complete": false,
2026-06-23T09:38:03.0312234Z           "evidence": []
2026-06-23T09:38:03.0312333Z         },
2026-06-23T09:38:03.0312437Z         "unit": {
2026-06-23T09:38:03.0312556Z           "complete": true,
2026-06-23T09:38:03.0312664Z           "evidence": [
2026-06-23T09:38:03.0312768Z             {
2026-06-23T09:38:03.0312922Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0313036Z               "line": 1100
2026-06-23T09:38:03.0313141Z             },
2026-06-23T09:38:03.0313236Z             {
2026-06-23T09:38:03.0313494Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0313604Z               "line": 561
2026-06-23T09:38:03.0313698Z             },
2026-06-23T09:38:03.0313800Z             {
2026-06-23T09:38:03.0313937Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0314042Z               "line": 668
2026-06-23T09:38:03.0314143Z             },
2026-06-23T09:38:03.0314337Z             {
2026-06-23T09:38:03.0314476Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0314590Z               "line": 750
2026-06-23T09:38:03.0314696Z             }
2026-06-23T09:38:03.0314796Z           ]
2026-06-23T09:38:03.0314900Z         }
2026-06-23T09:38:03.0314989Z       }
2026-06-23T09:38:03.0315085Z     },
2026-06-23T09:38:03.0315184Z     {
2026-06-23T09:38:03.0315292Z       "id": "REQ-INST-5",
2026-06-23T09:38:03.0315503Z       "title": "Two-tier context sync (live to all, project to same-project)",
2026-06-23T09:38:03.0315611Z       "requiredStages": [
2026-06-23T09:38:03.0315727Z         "impl",
2026-06-23T09:38:03.0315827Z         "unit",
2026-06-23T09:38:03.0315935Z         "int"
2026-06-23T09:38:03.0316037Z       ],
2026-06-23T09:38:03.0316146Z       "stages": {
2026-06-23T09:38:03.0316250Z         "doc": {
2026-06-23T09:38:03.0316361Z           "complete": false,
2026-06-23T09:38:03.0316470Z           "evidence": []
2026-06-23T09:38:03.0316565Z         },
2026-06-23T09:38:03.0316681Z         "impl": {
2026-06-23T09:38:03.0316794Z           "complete": true,
2026-06-23T09:38:03.0316909Z           "evidence": [
2026-06-23T09:38:03.0317010Z             {
2026-06-23T09:38:03.0317162Z               "path": "crates/spt-daemon/src/pump/sync.rs",
2026-06-23T09:38:03.0317272Z               "line": 85
2026-06-23T09:38:03.0317372Z             },
2026-06-23T09:38:03.0317471Z             {
2026-06-23T09:38:03.0317606Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0317711Z               "line": 68
2026-06-23T09:38:03.0317818Z             },
2026-06-23T09:38:03.0317919Z             {
2026-06-23T09:38:03.0318049Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0318161Z               "line": 99
2026-06-23T09:38:03.0318267Z             },
2026-06-23T09:38:03.0318358Z             {
2026-06-23T09:38:03.0318490Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0318601Z               "line": 183
2026-06-23T09:38:03.0318696Z             },
2026-06-23T09:38:03.0318805Z             {
2026-06-23T09:38:03.0318935Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0319124Z               "line": 314
2026-06-23T09:38:03.0319217Z             }
2026-06-23T09:38:03.0319326Z           ]
2026-06-23T09:38:03.0319421Z         },
2026-06-23T09:38:03.0319527Z         "int": {
2026-06-23T09:38:03.0319641Z           "complete": true,
2026-06-23T09:38:03.0319749Z           "evidence": [
2026-06-23T09:38:03.0319856Z             {
2026-06-23T09:38:03.0320011Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.0320129Z               "line": 156
2026-06-23T09:38:03.0320226Z             },
2026-06-23T09:38:03.0320328Z             {
2026-06-23T09:38:03.0320471Z               "path": "crates/spt-daemon/tests/pump.rs",
2026-06-23T09:38:03.0320581Z               "line": 145
2026-06-23T09:38:03.0320686Z             },
2026-06-23T09:38:03.0320791Z             {
2026-06-23T09:38:03.0320939Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0321043Z               "line": 709
2026-06-23T09:38:03.0321144Z             },
2026-06-23T09:38:03.0321249Z             {
2026-06-23T09:38:03.0321391Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0321502Z               "line": 1071
2026-06-23T09:38:03.0321611Z             }
2026-06-23T09:38:03.0321701Z           ]
2026-06-23T09:38:03.0321807Z         },
2026-06-23T09:38:03.0321911Z         "unit": {
2026-06-23T09:38:03.0322030Z           "complete": true,
2026-06-23T09:38:03.0322235Z           "evidence": [
2026-06-23T09:38:03.0322345Z             {
2026-06-23T09:38:03.0322485Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0322593Z               "line": 552
2026-06-23T09:38:03.0322699Z             },
2026-06-23T09:38:03.0322795Z             {
2026-06-23T09:38:03.0322926Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0323126Z               "line": 595
2026-06-23T09:38:03.0323233Z             },
2026-06-23T09:38:03.0323338Z             {
2026-06-23T09:38:03.0323473Z               "path": "crates/spt-daemon/tests/sync.rs",
2026-06-23T09:38:03.0323576Z               "line": 219
2026-06-23T09:38:03.0323667Z             }
2026-06-23T09:38:03.0323773Z           ]
2026-06-23T09:38:03.0323872Z         }
2026-06-23T09:38:03.0323977Z       }
2026-06-23T09:38:03.0324087Z     },
2026-06-23T09:38:03.0324182Z     {
2026-06-23T09:38:03.0324287Z       "id": "REQ-INST-6",
2026-06-23T09:38:03.0324492Z       "title": "Deferred messages not delivered to dormant/suspended instances",
2026-06-23T09:38:03.0324611Z       "requiredStages": [
2026-06-23T09:38:03.0324712Z         "impl",
2026-06-23T09:38:03.0324821Z         "unit",
2026-06-23T09:38:03.0324926Z         "int"
2026-06-23T09:38:03.0325023Z       ],
2026-06-23T09:38:03.0325131Z       "stages": {
2026-06-23T09:38:03.0325236Z         "doc": {
2026-06-23T09:38:03.0325352Z           "complete": true,
2026-06-23T09:38:03.0325460Z           "evidence": [
2026-06-23T09:38:03.0325559Z             {
2026-06-23T09:38:03.0325688Z               "path": "docs/DEFERRED.md",
2026-06-23T09:38:03.0325786Z               "line": 13
2026-06-23T09:38:03.0325890Z             }
2026-06-23T09:38:03.0325991Z           ]
2026-06-23T09:38:03.0326096Z         },
2026-06-23T09:38:03.0326205Z         "impl": {
2026-06-23T09:38:03.0326316Z           "complete": true,
2026-06-23T09:38:03.0326425Z           "evidence": [
2026-06-23T09:38:03.0326525Z             {
2026-06-23T09:38:03.0326678Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0326787Z               "line": 391
2026-06-23T09:38:03.0326893Z             },
2026-06-23T09:38:03.0326997Z             {
2026-06-23T09:38:03.0327126Z               "path": "crates/spt-daemon/src/resthost.rs",
2026-06-23T09:38:03.0327237Z               "line": 27
2026-06-23T09:38:03.0327345Z             },
2026-06-23T09:38:03.0327450Z             {
2026-06-23T09:38:03.0327589Z               "path": "crates/spt-daemon/src/resthost.rs",
2026-06-23T09:38:03.0327702Z               "line": 73
2026-06-23T09:38:03.0327808Z             },
2026-06-23T09:38:03.0327904Z             {
2026-06-23T09:38:03.0328041Z               "path": "crates/spt-daemon/src/resthost.rs",
2026-06-23T09:38:03.0328147Z               "line": 182
2026-06-23T09:38:03.0328243Z             },
2026-06-23T09:38:03.0328341Z             {
2026-06-23T09:38:03.0328474Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0328585Z               "line": 426
2026-06-23T09:38:03.0328689Z             },
2026-06-23T09:38:03.0328784Z             {
2026-06-23T09:38:03.0328913Z               "path": "crates/spt-net/src/net/rest.rs",
2026-06-23T09:38:03.0329108Z               "line": 31
2026-06-23T09:38:03.0329209Z             },
2026-06-23T09:38:03.0329314Z             {
2026-06-23T09:38:03.0329457Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.0329562Z               "line": 202
2026-06-23T09:38:03.0329671Z             },
2026-06-23T09:38:03.0329767Z             {
2026-06-23T09:38:03.0329905Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:03.0330004Z               "line": 83
2026-06-23T09:38:03.0330111Z             },
2026-06-23T09:38:03.0330206Z             {
2026-06-23T09:38:03.0330328Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0330435Z               "line": 2203
2026-06-23T09:38:03.0330539Z             },
2026-06-23T09:38:03.0330643Z             {
2026-06-23T09:38:03.0330866Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.0330988Z               "line": 179
2026-06-23T09:38:03.0331089Z             },
2026-06-23T09:38:03.0331195Z             {
2026-06-23T09:38:03.0331327Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.0331428Z               "line": 215
2026-06-23T09:38:03.0331532Z             }
2026-06-23T09:38:03.0331632Z           ]
2026-06-23T09:38:03.0331738Z         },
2026-06-23T09:38:03.0331937Z         "int": {
2026-06-23T09:38:03.0332048Z           "complete": true,
2026-06-23T09:38:03.0332167Z           "evidence": [
2026-06-23T09:38:03.0332261Z             {
2026-06-23T09:38:03.0332410Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0332515Z               "line": 723
2026-06-23T09:38:03.0332619Z             },
2026-06-23T09:38:03.0332711Z             {
2026-06-23T09:38:03.0332853Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0332964Z               "line": 1116
2026-06-23T09:38:03.0333064Z             },
2026-06-23T09:38:03.0333163Z             {
2026-06-23T09:38:03.0333293Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.0333402Z               "line": 726
2026-06-23T09:38:03.0333505Z             }
2026-06-23T09:38:03.0333596Z           ]
2026-06-23T09:38:03.0333691Z         },
2026-06-23T09:38:03.0333793Z         "unit": {
2026-06-23T09:38:03.0333908Z           "complete": true,
2026-06-23T09:38:03.0334018Z           "evidence": [
2026-06-23T09:38:03.0334118Z             {
2026-06-23T09:38:03.0334252Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0334356Z               "line": 661
2026-06-23T09:38:03.0334451Z             },
2026-06-23T09:38:03.0334552Z             {
2026-06-23T09:38:03.0334690Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.0334794Z               "line": 899
2026-06-23T09:38:03.0334900Z             },
2026-06-23T09:38:03.0334995Z             {
2026-06-23T09:38:03.0335133Z               "path": "crates/spt-net/src/net/rest.rs",
2026-06-23T09:38:03.0335244Z               "line": 66
2026-06-23T09:38:03.0335348Z             },
2026-06-23T09:38:03.0335448Z             {
2026-06-23T09:38:03.0335573Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.0335681Z               "line": 297
2026-06-23T09:38:03.0335782Z             },
2026-06-23T09:38:03.0335884Z             {
2026-06-23T09:38:03.0336025Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:03.0336133Z               "line": 203
2026-06-23T09:38:03.0336239Z             }
2026-06-23T09:38:03.0336332Z           ]
2026-06-23T09:38:03.0336436Z         }
2026-06-23T09:38:03.0336537Z       }
2026-06-23T09:38:03.0336642Z     },
2026-06-23T09:38:03.0336741Z     {
2026-06-23T09:38:03.0336852Z       "id": "REQ-INST-7",
2026-06-23T09:38:03.0337013Z       "title": "Subnet registry + bare-id resolution policy",
2026-06-23T09:38:03.0337119Z       "requiredStages": [
2026-06-23T09:38:03.0337219Z         "impl",
2026-06-23T09:38:03.0337323Z         "unit",
2026-06-23T09:38:03.0337429Z         "int"
2026-06-23T09:38:03.0337524Z       ],
2026-06-23T09:38:03.0337629Z       "stages": {
2026-06-23T09:38:03.0337738Z         "doc": {
2026-06-23T09:38:03.0337848Z           "complete": false,
2026-06-23T09:38:03.0337958Z           "evidence": []
2026-06-23T09:38:03.0338048Z         },
2026-06-23T09:38:03.0338149Z         "impl": {
2026-06-23T09:38:03.0338263Z           "complete": true,
2026-06-23T09:38:03.0338368Z           "evidence": [
2026-06-23T09:38:03.0338460Z             {
2026-06-23T09:38:03.0338601Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0338717Z               "line": 436
2026-06-23T09:38:03.0338821Z             },
2026-06-23T09:38:03.0338920Z             {
2026-06-23T09:38:03.0339154Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0339263Z               "line": 27
2026-06-23T09:38:03.0339368Z             },
2026-06-23T09:38:03.0339469Z             {
2026-06-23T09:38:03.0339736Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0339855Z               "line": 207
2026-06-23T09:38:03.0339959Z             },
2026-06-23T09:38:03.0340060Z             {
2026-06-23T09:38:03.0340212Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0340317Z               "line": 344
2026-06-23T09:38:03.0340418Z             },
2026-06-23T09:38:03.0340613Z             {
2026-06-23T09:38:03.0340761Z               "path": "crates/spt-net/src/net/ndjson.rs",
2026-06-23T09:38:03.0340865Z               "line": 59
2026-06-23T09:38:03.0340971Z             },
2026-06-23T09:38:03.0341061Z             {
2026-06-23T09:38:03.0341212Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0341317Z               "line": 41
2026-06-23T09:38:03.0341416Z             },
2026-06-23T09:38:03.0341525Z             {
2026-06-23T09:38:03.0341668Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.0341778Z               "line": 27
2026-06-23T09:38:03.0341882Z             },
2026-06-23T09:38:03.0341983Z             {
2026-06-23T09:38:03.0342130Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.0342235Z               "line": 119
2026-06-23T09:38:03.0342341Z             },
2026-06-23T09:38:03.0342440Z             {
2026-06-23T09:38:03.0342589Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.0342693Z               "line": 134
2026-06-23T09:38:03.0342802Z             },
2026-06-23T09:38:03.0342899Z             {
2026-06-23T09:38:03.0343046Z               "path": "crates/spt-store/src/registry.rs",
2026-06-23T09:38:03.0343160Z               "line": 139
2026-06-23T09:38:03.0343261Z             }
2026-06-23T09:38:03.0343355Z           ]
2026-06-23T09:38:03.0343460Z         },
2026-06-23T09:38:03.0343567Z         "int": {
2026-06-23T09:38:03.0343684Z           "complete": true,
2026-06-23T09:38:03.0343790Z           "evidence": [
2026-06-23T09:38:03.0343901Z             {
2026-06-23T09:38:03.0344046Z               "path": "crates/spt-daemon/tests/pump.rs",
2026-06-23T09:38:03.0344156Z               "line": 145
2026-06-23T09:38:03.0344256Z             },
2026-06-23T09:38:03.0344358Z             {
2026-06-23T09:38:03.0344497Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0344612Z               "line": 667
2026-06-23T09:38:03.0344720Z             },
2026-06-23T09:38:03.0344812Z             {
2026-06-23T09:38:03.0344960Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0345059Z               "line": 966
2026-06-23T09:38:03.0345156Z             }
2026-06-23T09:38:03.0345250Z           ]
2026-06-23T09:38:03.0345354Z         },
2026-06-23T09:38:03.0345461Z         "unit": {
2026-06-23T09:38:03.0345569Z           "complete": true,
2026-06-23T09:38:03.0345679Z           "evidence": [
2026-06-23T09:38:03.0345771Z             {
2026-06-23T09:38:03.0345931Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0346037Z               "line": 1134
2026-06-23T09:38:03.0346143Z             },
2026-06-23T09:38:03.0346260Z             {
2026-06-23T09:38:03.0346410Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0346528Z               "line": 1521
2026-06-23T09:38:03.0346618Z             },
2026-06-23T09:38:03.0346718Z             {
2026-06-23T09:38:03.0346878Z               "path": "crates/spt-daemon/tests/replicate.rs",
2026-06-23T09:38:03.0346977Z               "line": 84
2026-06-23T09:38:03.0347078Z             },
2026-06-23T09:38:03.0347170Z             {
2026-06-23T09:38:03.0347316Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0347422Z               "line": 812
2026-06-23T09:38:03.0347522Z             },
2026-06-23T09:38:03.0347621Z             {
2026-06-23T09:38:03.0347751Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0347865Z               "line": 823
2026-06-23T09:38:03.0348042Z             },
2026-06-23T09:38:03.0348151Z             {
2026-06-23T09:38:03.0348293Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0348404Z               "line": 838
2026-06-23T09:38:03.0348513Z             },
2026-06-23T09:38:03.0348613Z             {
2026-06-23T09:38:03.0348765Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.0349029Z               "line": 166
2026-06-23T09:38:03.0349137Z             },
2026-06-23T09:38:03.0349238Z             {
2026-06-23T09:38:03.0349386Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.0349495Z               "line": 181
2026-06-23T09:38:03.0349590Z             },
2026-06-23T09:38:03.0349686Z             {
2026-06-23T09:38:03.0349818Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.0349928Z               "line": 214
2026-06-23T09:38:03.0350034Z             }
2026-06-23T09:38:03.0350138Z           ]
2026-06-23T09:38:03.0350243Z         }
2026-06-23T09:38:03.0350343Z       }
2026-06-23T09:38:03.0350438Z     },
2026-06-23T09:38:03.0350529Z     {
2026-06-23T09:38:03.0350644Z       "id": "REQ-INST-8",
2026-06-23T09:38:03.0350819Z       "title": "Remote-control mode distinct from local operation",
2026-06-23T09:38:03.0350931Z       "requiredStages": [
2026-06-23T09:38:03.0351030Z         "impl",
2026-06-23T09:38:03.0351130Z         "unit",
2026-06-23T09:38:03.0351241Z         "int"
2026-06-23T09:38:03.0351330Z       ],
2026-06-23T09:38:03.0351440Z       "stages": {
2026-06-23T09:38:03.0351541Z         "doc": {
2026-06-23T09:38:03.0351654Z           "complete": false,
2026-06-23T09:38:03.0351763Z           "evidence": []
2026-06-23T09:38:03.0351863Z         },
2026-06-23T09:38:03.0351976Z         "impl": {
2026-06-23T09:38:03.0352075Z           "complete": true,
2026-06-23T09:38:03.0352185Z           "evidence": [
2026-06-23T09:38:03.0352286Z             {
2026-06-23T09:38:03.0352437Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:03.0352543Z               "line": 202
2026-06-23T09:38:03.0352638Z             },
2026-06-23T09:38:03.0352742Z             {
2026-06-23T09:38:03.0352882Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:03.0352995Z               "line": 504
2026-06-23T09:38:03.0353096Z             },
2026-06-23T09:38:03.0353206Z             {
2026-06-23T09:38:03.0353339Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:03.0353444Z               "line": 544
2026-06-23T09:38:03.0353554Z             },
2026-06-23T09:38:03.0353654Z             {
2026-06-23T09:38:03.0353807Z               "path": "crates/spt-net/src/net/attach.rs",
2026-06-23T09:38:03.0353920Z               "line": 62
2026-06-23T09:38:03.0354015Z             }
2026-06-23T09:38:03.0354127Z           ]
2026-06-23T09:38:03.0354226Z         },
2026-06-23T09:38:03.0354335Z         "int": {
2026-06-23T09:38:03.0354446Z           "complete": true,
2026-06-23T09:38:03.0354550Z           "evidence": [
2026-06-23T09:38:03.0354658Z             {
2026-06-23T09:38:03.0354797Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.0354905Z               "line": 415
2026-06-23T09:38:03.0355009Z             },
2026-06-23T09:38:03.0355115Z             {
2026-06-23T09:38:03.0355257Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0355372Z               "line": 1030
2026-06-23T09:38:03.0355477Z             }
2026-06-23T09:38:03.0355572Z           ]
2026-06-23T09:38:03.0355682Z         },
2026-06-23T09:38:03.0355787Z         "unit": {
2026-06-23T09:38:03.0355905Z           "complete": true,
2026-06-23T09:38:03.0356011Z           "evidence": [
2026-06-23T09:38:03.0356121Z             {
2026-06-23T09:38:03.0356268Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.0356374Z               "line": 371
2026-06-23T09:38:03.0356477Z             },
2026-06-23T09:38:03.0356583Z             {
2026-06-23T09:38:03.0356825Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.0356936Z               "line": 642
2026-06-23T09:38:03.0357046Z             },
2026-06-23T09:38:03.0357149Z             {
2026-06-23T09:38:03.0357292Z               "path": "crates/spt-net/src/net/attach.rs",
2026-06-23T09:38:03.0357401Z               "line": 116
2026-06-23T09:38:03.0357504Z             },
2026-06-23T09:38:03.0357610Z             {
2026-06-23T09:38:03.0357852Z               "path": "crates/spt-net/src/net/attach.rs",
2026-06-23T09:38:03.0357958Z               "line": 160
2026-06-23T09:38:03.0358063Z             }
2026-06-23T09:38:03.0358162Z           ]
2026-06-23T09:38:03.0358268Z         }
2026-06-23T09:38:03.0358368Z       }
2026-06-23T09:38:03.0358457Z     },
2026-06-23T09:38:03.0358559Z     {
2026-06-23T09:38:03.0358673Z       "id": "REQ-INST-9",
2026-06-23T09:38:03.0358883Z       "title": "Multi-subnet membership (same-user N subnets; cross-user seam)",
2026-06-23T09:38:03.0359073Z       "requiredStages": [
2026-06-23T09:38:03.0359173Z         "impl",
2026-06-23T09:38:03.0359275Z         "unit"
2026-06-23T09:38:03.0359378Z       ],
2026-06-23T09:38:03.0359483Z       "stages": {
2026-06-23T09:38:03.0359590Z         "doc": {
2026-06-23T09:38:03.0359702Z           "complete": false,
2026-06-23T09:38:03.0359808Z           "evidence": []
2026-06-23T09:38:03.0359904Z         },
2026-06-23T09:38:03.0360011Z         "impl": {
2026-06-23T09:38:03.0360125Z           "complete": true,
2026-06-23T09:38:03.0360236Z           "evidence": [
2026-06-23T09:38:03.0360345Z             {
2026-06-23T09:38:03.0360498Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0360608Z               "line": 449
2026-06-23T09:38:03.0360712Z             }
2026-06-23T09:38:03.0360813Z           ]
2026-06-23T09:38:03.0360918Z         },
2026-06-23T09:38:03.0361017Z         "int": {
2026-06-23T09:38:03.0361132Z           "complete": false,
2026-06-23T09:38:03.0361242Z           "evidence": []
2026-06-23T09:38:03.0361346Z         },
2026-06-23T09:38:03.0361457Z         "unit": {
2026-06-23T09:38:03.0361566Z           "complete": true,
2026-06-23T09:38:03.0361680Z           "evidence": [
2026-06-23T09:38:03.0361767Z             {
2026-06-23T09:38:03.0361904Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0362019Z               "line": 1397
2026-06-23T09:38:03.0362106Z             },
2026-06-23T09:38:03.0362214Z             {
2026-06-23T09:38:03.0362361Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0362471Z               "line": 1406
2026-06-23T09:38:03.0362560Z             },
2026-06-23T09:38:03.0362663Z             {
2026-06-23T09:38:03.0362813Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0362917Z               "line": 1422
2026-06-23T09:38:03.0363031Z             },
2026-06-23T09:38:03.0363132Z             {
2026-06-23T09:38:03.0363279Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0363390Z               "line": 1434
2026-06-23T09:38:03.0363499Z             },
2026-06-23T09:38:03.0363608Z             {
2026-06-23T09:38:03.0363742Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0363852Z               "line": 1454
2026-06-23T09:38:03.0363956Z             }
2026-06-23T09:38:03.0364053Z           ]
2026-06-23T09:38:03.0364157Z         }
2026-06-23T09:38:03.0364266Z       }
2026-06-23T09:38:03.0364372Z     },
2026-06-23T09:38:03.0364462Z     {
2026-06-23T09:38:03.0364571Z       "id": "REQ-INSTALL-1",
2026-06-23T09:38:03.0364790Z       "title": "Two install paths; signed one-line script; OS-service registration",
2026-06-23T09:38:03.0364905Z       "requiredStages": [
2026-06-23T09:38:03.0365011Z         "doc",
2026-06-23T09:38:03.0365115Z         "impl",
2026-06-23T09:38:03.0365223Z         "int"
2026-06-23T09:38:03.0365319Z       ],
2026-06-23T09:38:03.0365422Z       "stages": {
2026-06-23T09:38:03.0365526Z         "doc": {
2026-06-23T09:38:03.0365637Z           "complete": true,
2026-06-23T09:38:03.0365845Z           "evidence": [
2026-06-23T09:38:03.0365956Z             {
2026-06-23T09:38:03.0366085Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0366189Z               "line": 775
2026-06-23T09:38:03.0366300Z             }
2026-06-23T09:38:03.0366400Z           ]
2026-06-23T09:38:03.0366503Z         },
2026-06-23T09:38:03.0366609Z         "impl": {
2026-06-23T09:38:03.0366818Z           "complete": true,
2026-06-23T09:38:03.0366924Z           "evidence": [
2026-06-23T09:38:03.0367024Z             {
2026-06-23T09:38:03.0367162Z               "path": "installer/install.ps1",
2026-06-23T09:38:03.0367273Z               "line": 57
2026-06-23T09:38:03.0367376Z             },
2026-06-23T09:38:03.0367477Z             {
2026-06-23T09:38:03.0367606Z               "path": "installer/install.sh",
2026-06-23T09:38:03.0367719Z               "line": 52
2026-06-23T09:38:03.0367823Z             }
2026-06-23T09:38:03.0367933Z           ]
2026-06-23T09:38:03.0368027Z         },
2026-06-23T09:38:03.0368140Z         "int": {
2026-06-23T09:38:03.0368247Z           "complete": true,
2026-06-23T09:38:03.0368355Z           "evidence": [
2026-06-23T09:38:03.0368450Z             {
2026-06-23T09:38:03.0368589Z               "path": "crates/spt/tests/oneliner_e2e.rs",
2026-06-23T09:38:03.0368694Z               "line": 21
2026-06-23T09:38:03.0368794Z             }
2026-06-23T09:38:03.0368904Z           ]
2026-06-23T09:38:03.0369080Z         },
2026-06-23T09:38:03.0369191Z         "unit": {
2026-06-23T09:38:03.0369310Z           "complete": false,
2026-06-23T09:38:03.0369414Z           "evidence": []
2026-06-23T09:38:03.0369515Z         }
2026-06-23T09:38:03.0369620Z       }
2026-06-23T09:38:03.0369719Z     },
2026-06-23T09:38:03.0369811Z     {
2026-06-23T09:38:03.0369928Z       "id": "REQ-INSTALL-10",
2026-06-23T09:38:03.0371364Z       "title": "Windows at-logon autostart runs the daemon in the background with no persistent window: the scheduled task launches `spt daemon start` (which spawn_detaches a console-less DETACHED_PROCESS daemon and exits) rather than the foreground `spt daemon run` — Task Scheduler's interactive ONLOGON launch of a long-lived console process otherwise leaves a visible console window for the daemon's whole lifetime (v0.7.4)",
2026-06-23T09:38:03.0371478Z       "requiredStages": [
2026-06-23T09:38:03.0371587Z         "impl",
2026-06-23T09:38:03.0371693Z         "unit"
2026-06-23T09:38:03.0371797Z       ],
2026-06-23T09:38:03.0371906Z       "stages": {
2026-06-23T09:38:03.0372003Z         "doc": {
2026-06-23T09:38:03.0372121Z           "complete": false,
2026-06-23T09:38:03.0372231Z           "evidence": []
2026-06-23T09:38:03.0372337Z         },
2026-06-23T09:38:03.0372432Z         "impl": {
2026-06-23T09:38:03.0372545Z           "complete": true,
2026-06-23T09:38:03.0372656Z           "evidence": [
2026-06-23T09:38:03.0372742Z             {
2026-06-23T09:38:03.0372883Z               "path": "installer/install.ps1",
2026-06-23T09:38:03.0372988Z               "line": 191
2026-06-23T09:38:03.0373096Z             }
2026-06-23T09:38:03.0373200Z           ]
2026-06-23T09:38:03.0373310Z         },
2026-06-23T09:38:03.0373421Z         "int": {
2026-06-23T09:38:03.0373529Z           "complete": false,
2026-06-23T09:38:03.0373639Z           "evidence": []
2026-06-23T09:38:03.0373735Z         },
2026-06-23T09:38:03.0373844Z         "unit": {
2026-06-23T09:38:03.0373950Z           "complete": true,
2026-06-23T09:38:03.0374064Z           "evidence": [
2026-06-23T09:38:03.0376497Z             {
2026-06-23T09:38:03.0376682Z               "path": "crates/spt/tests/oneliner_e2e.rs",
2026-06-23T09:38:03.0376792Z               "line": 211
2026-06-23T09:38:03.0376884Z             }
2026-06-23T09:38:03.0376993Z           ]
2026-06-23T09:38:03.0377088Z         }
2026-06-23T09:38:03.0377193Z       }
2026-06-23T09:38:03.0377303Z     },
2026-06-23T09:38:03.0377398Z     {
2026-06-23T09:38:03.0377522Z       "id": "REQ-INSTALL-11",
2026-06-23T09:38:03.0379664Z       "title": "Adapter command templates resolve their program against the adapter's install dir BEFORE PATH: a `.spt`-shipped binary (dropped to adapters/_github/<safe>/ by --release/--github acquisition, or kept in the source_dir under copy-mode where only manifest+strings/ are copied to adapters/<name>) runs without any PATH placement — a bare-name template token (e.g. `claude-spt-digest ...`) is rewritten to <install_dir>/<program>(.exe on Windows) when that file exists, else left bare for the PATH fallback. Makes a `.spt` self-contained (closes the --release bundled-binary gap perri confirmed) (v0.7.4)",
2026-06-23T09:38:03.0379898Z       "requiredStages": [
2026-06-23T09:38:03.0380008Z         "doc",
2026-06-23T09:38:03.0380099Z         "impl",
2026-06-23T09:38:03.0380204Z         "unit"
2026-06-23T09:38:03.0380308Z       ],
2026-06-23T09:38:03.0380414Z       "stages": {
2026-06-23T09:38:03.0380513Z         "doc": {
2026-06-23T09:38:03.0380618Z           "complete": true,
2026-06-23T09:38:03.0380724Z           "evidence": [
2026-06-23T09:38:03.0380832Z             {
2026-06-23T09:38:03.0380948Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0381058Z               "line": 147
2026-06-23T09:38:03.0381160Z             },
2026-06-23T09:38:03.0381265Z             {
2026-06-23T09:38:03.0381380Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:03.0381484Z               "line": 90
2026-06-23T09:38:03.0381579Z             }
2026-06-23T09:38:03.0381686Z           ]
2026-06-23T09:38:03.0381785Z         },
2026-06-23T09:38:03.0381890Z         "impl": {
2026-06-23T09:38:03.0382010Z           "complete": true,
2026-06-23T09:38:03.0382119Z           "evidence": [
2026-06-23T09:38:03.0382224Z             {
2026-06-23T09:38:03.0382372Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.0382481Z               "line": 223
2026-06-23T09:38:03.0382582Z             },
2026-06-23T09:38:03.0382677Z             {
2026-06-23T09:38:03.0382834Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0382945Z               "line": 115
2026-06-23T09:38:03.0383038Z             },
2026-06-23T09:38:03.0383129Z             {
2026-06-23T09:38:03.0383288Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0383391Z               "line": 188
2026-06-23T09:38:03.0383500Z             },
2026-06-23T09:38:03.0383591Z             {
2026-06-23T09:38:03.0383732Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0383842Z               "line": 206
2026-06-23T09:38:03.0383942Z             },
2026-06-23T09:38:03.0384047Z             {
2026-06-23T09:38:03.0384185Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0384295Z               "line": 327
2026-06-23T09:38:03.0384399Z             },
2026-06-23T09:38:03.0384495Z             {
2026-06-23T09:38:03.0384634Z               "path": "crates/spt-daemon/src/livehost.rs",
2026-06-23T09:38:03.0384743Z               "line": 337
2026-06-23T09:38:03.0384849Z             },
2026-06-23T09:38:03.0384953Z             {
2026-06-23T09:38:03.0385100Z               "path": "crates/spt-live/src/digest.rs",
2026-06-23T09:38:03.0385206Z               "line": 88
2026-06-23T09:38:03.0385305Z             },
2026-06-23T09:38:03.0385415Z             {
2026-06-23T09:38:03.0385549Z               "path": "crates/spt-live/src/digest.rs",
2026-06-23T09:38:03.0385654Z               "line": 104
2026-06-23T09:38:03.0385750Z             },
2026-06-23T09:38:03.0385854Z             {
2026-06-23T09:38:03.0386007Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0386113Z               "line": 300
2026-06-23T09:38:03.0386221Z             },
2026-06-23T09:38:03.0386320Z             {
2026-06-23T09:38:03.0386468Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0386570Z               "line": 335
2026-06-23T09:38:03.0386670Z             },
2026-06-23T09:38:03.0386771Z             {
2026-06-23T09:38:03.0386904Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0387091Z               "line": 526
2026-06-23T09:38:03.0387196Z             },
2026-06-23T09:38:03.0387295Z             {
2026-06-23T09:38:03.0387429Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0387539Z               "line": 549
2026-06-23T09:38:03.0387648Z             },
2026-06-23T09:38:03.0387753Z             {
2026-06-23T09:38:03.0387891Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0388064Z               "line": 564
2026-06-23T09:38:03.0388168Z             },
2026-06-23T09:38:03.0388277Z             {
2026-06-23T09:38:03.0388402Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:03.0388515Z               "line": 492
2026-06-23T09:38:03.0388612Z             }
2026-06-23T09:38:03.0388712Z           ]
2026-06-23T09:38:03.0388806Z         },
2026-06-23T09:38:03.0388910Z         "int": {
2026-06-23T09:38:03.0389100Z           "complete": false,
2026-06-23T09:38:03.0389213Z           "evidence": []
2026-06-23T09:38:03.0389324Z         },
2026-06-23T09:38:03.0389415Z         "unit": {
2026-06-23T09:38:03.0389527Z           "complete": true,
2026-06-23T09:38:03.0389634Z           "evidence": [
2026-06-23T09:38:03.0389729Z             {
2026-06-23T09:38:03.0389881Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0389987Z               "line": 1571
2026-06-23T09:38:03.0390091Z             },
2026-06-23T09:38:03.0390195Z             {
2026-06-23T09:38:03.0390334Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0390444Z               "line": 1624
2026-06-23T09:38:03.0390549Z             },
2026-06-23T09:38:03.0390649Z             {
2026-06-23T09:38:03.0390782Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.0390888Z               "line": 1676
2026-06-23T09:38:03.0390988Z             },
2026-06-23T09:38:03.0391088Z             {
2026-06-23T09:38:03.0391232Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0391340Z               "line": 802
2026-06-23T09:38:03.0391445Z             },
2026-06-23T09:38:03.0391542Z             {
2026-06-23T09:38:03.0391683Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0391787Z               "line": 814
2026-06-23T09:38:03.0391892Z             },
2026-06-23T09:38:03.0391993Z             {
2026-06-23T09:38:03.0392126Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.0392241Z               "line": 823
2026-06-23T09:38:03.0392336Z             }
2026-06-23T09:38:03.0392426Z           ]
2026-06-23T09:38:03.0392522Z         }
2026-06-23T09:38:03.0392627Z       }
2026-06-23T09:38:03.0392721Z     },
2026-06-23T09:38:03.0392813Z     {
2026-06-23T09:38:03.0392936Z       "id": "REQ-INSTALL-12",
2026-06-23T09:38:03.0395574Z       "title": "Durable active-profile pointer for bind-time profile selection (ADR-0021): adapters/active-profiles.toml at the registry ROOT (sibling to the per-adapter <name>/ dirs, so adapter add/update/remove — which only rewrite a <name>/ subdir — can never clobber it), a flat host_binary → \"adapter[:profile]\" map. Read at bind as the PRIMARY profile selector; unset → the registered_at_ms fallback (REQ-START-5). Written ONLY by `spt adapter use <adapter>[:profile]` (resolves the adapter's host_binaries → sets each binary→adapter[:profile]); `spt adapter use --clear <adapter|binary>` drops. NEVER auto-written by install/update/adapter add (that is precisely what would let an update silently flip the active profile). A stale pointer (uninstalled adapter / deleted profile) self-heals: ignored, fall back, warn once. Pruned on adapter remove. Atomic write (spt_store atomic). (v0.9.0)",
2026-06-23T09:38:03.0395704Z       "requiredStages": [
2026-06-23T09:38:03.0395813Z         "doc",
2026-06-23T09:38:03.0395918Z         "impl",
2026-06-23T09:38:03.0396019Z         "unit",
2026-06-23T09:38:03.0396114Z         "int"
2026-06-23T09:38:03.0396218Z       ],
2026-06-23T09:38:03.0396324Z       "stages": {
2026-06-23T09:38:03.0396533Z         "doc": {
2026-06-23T09:38:03.0396649Z           "complete": true,
2026-06-23T09:38:03.0396758Z           "evidence": [
2026-06-23T09:38:03.0396857Z             {
2026-06-23T09:38:03.0396975Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0397089Z               "line": 194
2026-06-23T09:38:03.0397192Z             }
2026-06-23T09:38:03.0397293Z           ]
2026-06-23T09:38:03.0397394Z         },
2026-06-23T09:38:03.0397588Z         "impl": {
2026-06-23T09:38:03.0397708Z           "complete": true,
2026-06-23T09:38:03.0397817Z           "evidence": [
2026-06-23T09:38:03.0397908Z             {
2026-06-23T09:38:03.0398066Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0398175Z               "line": 27
2026-06-23T09:38:03.0398266Z             },
2026-06-23T09:38:03.0398365Z             {
2026-06-23T09:38:03.0398513Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0398620Z               "line": 223
2026-06-23T09:38:03.0398732Z             },
2026-06-23T09:38:03.0398837Z             {
2026-06-23T09:38:03.0399042Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0399157Z               "line": 6363
2026-06-23T09:38:03.0399249Z             }
2026-06-23T09:38:03.0399352Z           ]
2026-06-23T09:38:03.0399451Z         },
2026-06-23T09:38:03.0399557Z         "int": {
2026-06-23T09:38:03.0399665Z           "complete": true,
2026-06-23T09:38:03.0399778Z           "evidence": [
2026-06-23T09:38:03.0399884Z             {
2026-06-23T09:38:03.0400041Z               "path": "crates/spt/tests/live_resolve_e2e.rs",
2026-06-23T09:38:03.0400155Z               "line": 19
2026-06-23T09:38:03.0400246Z             }
2026-06-23T09:38:03.0400351Z           ]
2026-06-23T09:38:03.0400455Z         },
2026-06-23T09:38:03.0400556Z         "unit": {
2026-06-23T09:38:03.0400670Z           "complete": true,
2026-06-23T09:38:03.0400775Z           "evidence": [
2026-06-23T09:38:03.0400880Z             {
2026-06-23T09:38:03.0401023Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0401133Z               "line": 395
2026-06-23T09:38:03.0401238Z             },
2026-06-23T09:38:03.0401333Z             {
2026-06-23T09:38:03.0401477Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0401586Z               "line": 421
2026-06-23T09:38:03.0401686Z             },
2026-06-23T09:38:03.0401787Z             {
2026-06-23T09:38:03.0401938Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0402039Z               "line": 440
2026-06-23T09:38:03.0402135Z             },
2026-06-23T09:38:03.0402238Z             {
2026-06-23T09:38:03.0402376Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0402487Z               "line": 475
2026-06-23T09:38:03.0402591Z             },
2026-06-23T09:38:03.0402695Z             {
2026-06-23T09:38:03.0402825Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0402929Z               "line": 10203
2026-06-23T09:38:03.0403039Z             }
2026-06-23T09:38:03.0403126Z           ]
2026-06-23T09:38:03.0403230Z         }
2026-06-23T09:38:03.0403330Z       }
2026-06-23T09:38:03.0403426Z     },
2026-06-23T09:38:03.0403530Z     {
2026-06-23T09:38:03.0403639Z       "id": "REQ-INSTALL-2",
2026-06-23T09:38:03.0403802Z       "title": "Marketplace-repackaging-friendly install",
2026-06-23T09:38:03.0403911Z       "requiredStages": [
2026-06-23T09:38:03.0404018Z         "doc"
2026-06-23T09:38:03.0404117Z       ],
2026-06-23T09:38:03.0404217Z       "stages": {
2026-06-23T09:38:03.0404322Z         "doc": {
2026-06-23T09:38:03.0404427Z           "complete": true,
2026-06-23T09:38:03.0404540Z           "evidence": [
2026-06-23T09:38:03.0404640Z             {
2026-06-23T09:38:03.0404754Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0404862Z               "line": 776
2026-06-23T09:38:03.0404962Z             }
2026-06-23T09:38:03.0405062Z           ]
2026-06-23T09:38:03.0405162Z         },
2026-06-23T09:38:03.0405267Z         "impl": {
2026-06-23T09:38:03.0405477Z           "complete": false,
2026-06-23T09:38:03.0405586Z           "evidence": []
2026-06-23T09:38:03.0405678Z         },
2026-06-23T09:38:03.0405787Z         "int": {
2026-06-23T09:38:03.0405901Z           "complete": false,
2026-06-23T09:38:03.0406002Z           "evidence": []
2026-06-23T09:38:03.0406107Z         },
2026-06-23T09:38:03.0406202Z         "unit": {
2026-06-23T09:38:03.0406426Z           "complete": false,
2026-06-23T09:38:03.0406535Z           "evidence": []
2026-06-23T09:38:03.0406637Z         }
2026-06-23T09:38:03.0406740Z       }
2026-06-23T09:38:03.0406836Z     },
2026-06-23T09:38:03.0406937Z     {
2026-06-23T09:38:03.0407050Z       "id": "REQ-INSTALL-3",
2026-06-23T09:38:03.0407214Z       "title": "Idempotent + interactive-optional first run",
2026-06-23T09:38:03.0407318Z       "requiredStages": [
2026-06-23T09:38:03.0407421Z         "impl",
2026-06-23T09:38:03.0407526Z         "int"
2026-06-23T09:38:03.0407621Z       ],
2026-06-23T09:38:03.0407729Z       "stages": {
2026-06-23T09:38:03.0407839Z         "doc": {
2026-06-23T09:38:03.0407949Z           "complete": false,
2026-06-23T09:38:03.0408057Z           "evidence": []
2026-06-23T09:38:03.0408163Z         },
2026-06-23T09:38:03.0408268Z         "impl": {
2026-06-23T09:38:03.0408372Z           "complete": true,
2026-06-23T09:38:03.0408483Z           "evidence": [
2026-06-23T09:38:03.0408578Z             {
2026-06-23T09:38:03.0408715Z               "path": "installer/install.ps1",
2026-06-23T09:38:03.0408826Z               "line": 100
2026-06-23T09:38:03.0408930Z             },
2026-06-23T09:38:03.0409102Z             {
2026-06-23T09:38:03.0409231Z               "path": "installer/install.ps1",
2026-06-23T09:38:03.0409340Z               "line": 111
2026-06-23T09:38:03.0409442Z             },
2026-06-23T09:38:03.0409546Z             {
2026-06-23T09:38:03.0409670Z               "path": "installer/install.sh",
2026-06-23T09:38:03.0409775Z               "line": 79
2026-06-23T09:38:03.0409870Z             }
2026-06-23T09:38:03.0409964Z           ]
2026-06-23T09:38:03.0410069Z         },
2026-06-23T09:38:03.0410174Z         "int": {
2026-06-23T09:38:03.0410277Z           "complete": true,
2026-06-23T09:38:03.0410376Z           "evidence": [
2026-06-23T09:38:03.0410477Z             {
2026-06-23T09:38:03.0410629Z               "path": "crates/spt/tests/oneliner_e2e.rs",
2026-06-23T09:38:03.0410739Z               "line": 167
2026-06-23T09:38:03.0410840Z             }
2026-06-23T09:38:03.0410925Z           ]
2026-06-23T09:38:03.0411025Z         },
2026-06-23T09:38:03.0411121Z         "unit": {
2026-06-23T09:38:03.0411235Z           "complete": false,
2026-06-23T09:38:03.0411340Z           "evidence": []
2026-06-23T09:38:03.0411431Z         }
2026-06-23T09:38:03.0411531Z       }
2026-06-23T09:38:03.0411630Z     },
2026-06-23T09:38:03.0411727Z     {
2026-06-23T09:38:03.0411836Z       "id": "REQ-INSTALL-4",
2026-06-23T09:38:03.0412503Z       "title": "Adapter registration lifecycle: spt adapter add (--github, manifest-first, install-is-first-update) + soft-deregister remove + optional manifest uninstall template; node-local registered-adapter set self-update ripples over",
2026-06-23T09:38:03.0412609Z       "requiredStages": [
2026-06-23T09:38:03.0412714Z         "impl",
2026-06-23T09:38:03.0412808Z         "unit"
2026-06-23T09:38:03.0412902Z       ],
2026-06-23T09:38:03.0413008Z       "stages": {
2026-06-23T09:38:03.0413109Z         "doc": {
2026-06-23T09:38:03.0413217Z           "complete": false,
2026-06-23T09:38:03.0413323Z           "evidence": []
2026-06-23T09:38:03.0413418Z         },
2026-06-23T09:38:03.0413522Z         "impl": {
2026-06-23T09:38:03.0413629Z           "complete": true,
2026-06-23T09:38:03.0413742Z           "evidence": [
2026-06-23T09:38:03.0413842Z             {
2026-06-23T09:38:03.0414009Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.0414119Z               "line": 165
2026-06-23T09:38:03.0414219Z             },
2026-06-23T09:38:03.0414324Z             {
2026-06-23T09:38:03.0414568Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0414682Z               "line": 29
2026-06-23T09:38:03.0414777Z             },
2026-06-23T09:38:03.0414877Z             {
2026-06-23T09:38:03.0415024Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0415133Z               "line": 288
2026-06-23T09:38:03.0415238Z             },
2026-06-23T09:38:03.0415426Z             {
2026-06-23T09:38:03.0415584Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0415684Z               "line": 356
2026-06-23T09:38:03.0415789Z             },
2026-06-23T09:38:03.0415894Z             {
2026-06-23T09:38:03.0416033Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0416142Z               "line": 386
2026-06-23T09:38:03.0416243Z             },
2026-06-23T09:38:03.0416347Z             {
2026-06-23T09:38:03.0416476Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0416576Z               "line": 434
2026-06-23T09:38:03.0416676Z             },
2026-06-23T09:38:03.0416776Z             {
2026-06-23T09:38:03.0416905Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0417015Z               "line": 6051
2026-06-23T09:38:03.0417110Z             }
2026-06-23T09:38:03.0417220Z           ]
2026-06-23T09:38:03.0417320Z         },
2026-06-23T09:38:03.0417420Z         "int": {
2026-06-23T09:38:03.0417526Z           "complete": false,
2026-06-23T09:38:03.0417639Z           "evidence": []
2026-06-23T09:38:03.0417730Z         },
2026-06-23T09:38:03.0417836Z         "unit": {
2026-06-23T09:38:03.0417939Z           "complete": true,
2026-06-23T09:38:03.0418034Z           "evidence": [
2026-06-23T09:38:03.0418134Z             {
2026-06-23T09:38:03.0418289Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.0418394Z               "line": 381
2026-06-23T09:38:03.0418499Z             },
2026-06-23T09:38:03.0418603Z             {
2026-06-23T09:38:03.0418762Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0418862Z               "line": 808
2026-06-23T09:38:03.0419038Z             },
2026-06-23T09:38:03.0419134Z             {
2026-06-23T09:38:03.0419280Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0419386Z               "line": 849
2026-06-23T09:38:03.0419481Z             },
2026-06-23T09:38:03.0419590Z             {
2026-06-23T09:38:03.0419730Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0419838Z               "line": 869
2026-06-23T09:38:03.0419939Z             },
2026-06-23T09:38:03.0420045Z             {
2026-06-23T09:38:03.0420172Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0420278Z               "line": 9799
2026-06-23T09:38:03.0420379Z             }
2026-06-23T09:38:03.0420477Z           ]
2026-06-23T09:38:03.0420581Z         }
2026-06-23T09:38:03.0420677Z       }
2026-06-23T09:38:03.0420780Z     },
2026-06-23T09:38:03.0420865Z     {
2026-06-23T09:38:03.0420984Z       "id": "REQ-INSTALL-5",
2026-06-23T09:38:03.0421504Z       "title": "Non-interactive install path: the canonical one-liner doubles as every adapter's pack-in on-demand install (no second mechanism); sha256-verified fetch; user-PATH registration",
2026-06-23T09:38:03.0421614Z       "requiredStages": [
2026-06-23T09:38:03.0421719Z         "impl",
2026-06-23T09:38:03.0421823Z         "int"
2026-06-23T09:38:03.0421929Z       ],
2026-06-23T09:38:03.0422029Z       "stages": {
2026-06-23T09:38:03.0422124Z         "doc": {
2026-06-23T09:38:03.0422244Z           "complete": false,
2026-06-23T09:38:03.0422353Z           "evidence": []
2026-06-23T09:38:03.0422453Z         },
2026-06-23T09:38:03.0422559Z         "impl": {
2026-06-23T09:38:03.0422677Z           "complete": true,
2026-06-23T09:38:03.0422791Z           "evidence": [
2026-06-23T09:38:03.0422888Z             {
2026-06-23T09:38:03.0423020Z               "path": "installer/install.ps1",
2026-06-23T09:38:03.0423222Z               "line": 5
2026-06-23T09:38:03.0423330Z             },
2026-06-23T09:38:03.0423434Z             {
2026-06-23T09:38:03.0423564Z               "path": "installer/install.sh",
2026-06-23T09:38:03.0423669Z               "line": 6
2026-06-23T09:38:03.0423777Z             }
2026-06-23T09:38:03.0423878Z           ]
2026-06-23T09:38:03.0423979Z         },
2026-06-23T09:38:03.0424068Z         "int": {
2026-06-23T09:38:03.0424279Z           "complete": true,
2026-06-23T09:38:03.0424388Z           "evidence": [
2026-06-23T09:38:03.0424488Z             {
2026-06-23T09:38:03.0424646Z               "path": "crates/spt/tests/oneliner_e2e.rs",
2026-06-23T09:38:03.0424755Z               "line": 22
2026-06-23T09:38:03.0424856Z             }
2026-06-23T09:38:03.0424960Z           ]
2026-06-23T09:38:03.0425046Z         },
2026-06-23T09:38:03.0425152Z         "unit": {
2026-06-23T09:38:03.0425261Z           "complete": false,
2026-06-23T09:38:03.0425370Z           "evidence": []
2026-06-23T09:38:03.0425477Z         }
2026-06-23T09:38:03.0425575Z       }
2026-06-23T09:38:03.0425674Z     },
2026-06-23T09:38:03.0425765Z     {
2026-06-23T09:38:03.0425879Z       "id": "REQ-INSTALL-6",
2026-06-23T09:38:03.0427108Z       "title": "Linux elevation install leg: install.sh symlinks the binary into a sudo-reachable path (/usr/local/bin; graceful print-the-one-liner when unelevated) so sudo spt resolves; first sudo spt detects elevation and prompts ONCE for the default user account — thereafter any elevated daemon launch runs daemon + state under that account, never root (KH 5.7 interplay verified) (M8 decision 8)",
2026-06-23T09:38:03.0427227Z       "requiredStages": [
2026-06-23T09:38:03.0427327Z         "impl",
2026-06-23T09:38:03.0427427Z         "unit"
2026-06-23T09:38:03.0427527Z       ],
2026-06-23T09:38:03.0427641Z       "stages": {
2026-06-23T09:38:03.0427738Z         "doc": {
2026-06-23T09:38:03.0427846Z           "complete": false,
2026-06-23T09:38:03.0427956Z           "evidence": []
2026-06-23T09:38:03.0428062Z         },
2026-06-23T09:38:03.0428156Z         "impl": {
2026-06-23T09:38:03.0428266Z           "complete": true,
2026-06-23T09:38:03.0428377Z           "evidence": [
2026-06-23T09:38:03.0428480Z             {
2026-06-23T09:38:03.0428627Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0428737Z               "line": 61
2026-06-23T09:38:03.0428830Z             },
2026-06-23T09:38:03.0429021Z             {
2026-06-23T09:38:03.0429168Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.0429283Z               "line": 641
2026-06-23T09:38:03.0429388Z             },
2026-06-23T09:38:03.0429493Z             {
2026-06-23T09:38:03.0429641Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:03.0429746Z               "line": 191
2026-06-23T09:38:03.0429845Z             },
2026-06-23T09:38:03.0429951Z             {
2026-06-23T09:38:03.0430094Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:03.0430199Z               "line": 276
2026-06-23T09:38:03.0430305Z             },
2026-06-23T09:38:03.0430403Z             {
2026-06-23T09:38:03.0430542Z               "path": "crates/spt/src/main.rs",
2026-06-23T09:38:03.0430638Z               "line": 43
2026-06-23T09:38:03.0430741Z             },
2026-06-23T09:38:03.0430847Z             {
2026-06-23T09:38:03.0430977Z               "path": "installer/install.sh",
2026-06-23T09:38:03.0431084Z               "line": 104
2026-06-23T09:38:03.0431189Z             }
2026-06-23T09:38:03.0431290Z           ]
2026-06-23T09:38:03.0431387Z         },
2026-06-23T09:38:03.0431487Z         "int": {
2026-06-23T09:38:03.0431602Z           "complete": false,
2026-06-23T09:38:03.0431711Z           "evidence": []
2026-06-23T09:38:03.0431816Z         },
2026-06-23T09:38:03.0431922Z         "unit": {
2026-06-23T09:38:03.0432036Z           "complete": true,
2026-06-23T09:38:03.0432140Z           "evidence": [
2026-06-23T09:38:03.0432246Z             {
2026-06-23T09:38:03.0432499Z               "path": "crates/spt-daemon/src/deelevate.rs",
2026-06-23T09:38:03.0432612Z               "line": 894
2026-06-23T09:38:03.0432722Z             }
2026-06-23T09:38:03.0432818Z           ]
2026-06-23T09:38:03.0432913Z         }
2026-06-23T09:38:03.0433013Z       }
2026-06-23T09:38:03.0433114Z     },
2026-06-23T09:38:03.0433210Z     {
2026-06-23T09:38:03.0433319Z       "id": "REQ-INSTALL-7",
2026-06-23T09:38:03.0434567Z       "title": "Windows inbound reachability: the elevated install leg registers the inbound-UDP firewall rule (New-NetFirewallRule); the daemon self-detects blocked inbound and renders it as the no-connection state in subnet status + the coming-online banner (covers user-scope installs that skip the elevated leg — never a silent NO_SEED_HOLDER dead-end) (M8 root cause 3)",
2026-06-23T09:38:03.0434680Z       "requiredStages": [
2026-06-23T09:38:03.0434787Z         "impl"
2026-06-23T09:38:03.0434896Z       ],
2026-06-23T09:38:03.0434995Z       "stages": {
2026-06-23T09:38:03.0435102Z         "doc": {
2026-06-23T09:38:03.0435215Z           "complete": false,
2026-06-23T09:38:03.0435329Z           "evidence": []
2026-06-23T09:38:03.0435431Z         },
2026-06-23T09:38:03.0435535Z         "impl": {
2026-06-23T09:38:03.0435644Z           "complete": true,
2026-06-23T09:38:03.0435755Z           "evidence": [
2026-06-23T09:38:03.0435859Z             {
2026-06-23T09:38:03.0435988Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0436107Z               "line": 4575
2026-06-23T09:38:03.0436206Z             },
2026-06-23T09:38:03.0436315Z             {
2026-06-23T09:38:03.0436453Z               "path": "installer/install.ps1",
2026-06-23T09:38:03.0436556Z               "line": 157
2026-06-23T09:38:03.0436661Z             }
2026-06-23T09:38:03.0436762Z           ]
2026-06-23T09:38:03.0436866Z         },
2026-06-23T09:38:03.0436966Z         "int": {
2026-06-23T09:38:03.0437086Z           "complete": false,
2026-06-23T09:38:03.0437200Z           "evidence": []
2026-06-23T09:38:03.0437301Z         },
2026-06-23T09:38:03.0437415Z         "unit": {
2026-06-23T09:38:03.0437524Z           "complete": false,
2026-06-23T09:38:03.0437640Z           "evidence": []
2026-06-23T09:38:03.0437740Z         }
2026-06-23T09:38:03.0437848Z       }
2026-06-23T09:38:03.0437955Z     },
2026-06-23T09:38:03.0438054Z     {
2026-06-23T09:38:03.0438177Z       "id": "REQ-INSTALL-8",
2026-06-23T09:38:03.0439339Z       "title": "OS-service registration (REQ-INSTALL-1's deferred third leg): Linux systemd USER service + loginctl enable-linger (linger rides the elevated install leg; daemon starts at boot pre-login, user universe per KH 5.7, systemctl --user managed); Windows scheduled task at-logon (interactive session, no stored credentials); a node is reachable after reboot without any manual spt invocation (M8 decision 17)",
2026-06-23T09:38:03.0439461Z       "requiredStages": [
2026-06-23T09:38:03.0439571Z         "impl"
2026-06-23T09:38:03.0439672Z       ],
2026-06-23T09:38:03.0439776Z       "stages": {
2026-06-23T09:38:03.0439877Z         "doc": {
2026-06-23T09:38:03.0439992Z           "complete": false,
2026-06-23T09:38:03.0440100Z           "evidence": []
2026-06-23T09:38:03.0440206Z         },
2026-06-23T09:38:03.0440311Z         "impl": {
2026-06-23T09:38:03.0440415Z           "complete": true,
2026-06-23T09:38:03.0440521Z           "evidence": [
2026-06-23T09:38:03.0440625Z             {
2026-06-23T09:38:03.0440754Z               "path": "installer/install.ps1",
2026-06-23T09:38:03.0440865Z               "line": 184
2026-06-23T09:38:03.0440968Z             },
2026-06-23T09:38:03.0441069Z             {
2026-06-23T09:38:03.0441198Z               "path": "installer/install.sh",
2026-06-23T09:38:03.0441306Z               "line": 121
2026-06-23T09:38:03.0441408Z             }
2026-06-23T09:38:03.0441513Z           ]
2026-06-23T09:38:03.0441607Z         },
2026-06-23T09:38:03.0441716Z         "int": {
2026-06-23T09:38:03.0441830Z           "complete": false,
2026-06-23T09:38:03.0441938Z           "evidence": []
2026-06-23T09:38:03.0442143Z         },
2026-06-23T09:38:03.0442253Z         "unit": {
2026-06-23T09:38:03.0442357Z           "complete": false,
2026-06-23T09:38:03.0442459Z           "evidence": []
2026-06-23T09:38:03.0442564Z         }
2026-06-23T09:38:03.0442667Z       }
2026-06-23T09:38:03.0442759Z     },
2026-06-23T09:38:03.0442868Z     {
2026-06-23T09:38:03.0442982Z       "id": "REQ-INSTALL-9",
2026-06-23T09:38:03.0444226Z       "title": "Adapter add from a GitHub release archive: `spt adapter add --release <user/repo> [--tag <tag>] [--asset <name>]` fetches a `.spt` tar asset over HTTPS+GitHub trust, extracts it to the durable adapters/_github home, and registers the root — ships built binaries source-free and versioned (the distribution path for an adapter whose dev repo is a monorepo subdir, where --github root-only clone does not fit)",
2026-06-23T09:38:03.0444470Z       "requiredStages": [
2026-06-23T09:38:03.0444578Z         "doc",
2026-06-23T09:38:03.0444679Z         "impl",
2026-06-23T09:38:03.0444780Z         "unit"
2026-06-23T09:38:03.0444888Z       ],
2026-06-23T09:38:03.0444993Z       "stages": {
2026-06-23T09:38:03.0445099Z         "doc": {
2026-06-23T09:38:03.0445208Z           "complete": true,
2026-06-23T09:38:03.0445314Z           "evidence": [
2026-06-23T09:38:03.0445423Z             {
2026-06-23T09:38:03.0445537Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0445638Z               "line": 792
2026-06-23T09:38:03.0445742Z             }
2026-06-23T09:38:03.0445846Z           ]
2026-06-23T09:38:03.0445943Z         },
2026-06-23T09:38:03.0446047Z         "impl": {
2026-06-23T09:38:03.0446161Z           "complete": true,
2026-06-23T09:38:03.0446272Z           "evidence": [
2026-06-23T09:38:03.0446376Z             {
2026-06-23T09:38:03.0446505Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0446611Z               "line": 3081
2026-06-23T09:38:03.0446719Z             },
2026-06-23T09:38:03.0446818Z             {
2026-06-23T09:38:03.0446952Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0447064Z               "line": 3150
2026-06-23T09:38:03.0447168Z             },
2026-06-23T09:38:03.0447260Z             {
2026-06-23T09:38:03.0447379Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0447493Z               "line": 3217
2026-06-23T09:38:03.0447584Z             }
2026-06-23T09:38:03.0447679Z           ]
2026-06-23T09:38:03.0447784Z         },
2026-06-23T09:38:03.0447886Z         "int": {
2026-06-23T09:38:03.0447994Z           "complete": false,
2026-06-23T09:38:03.0448103Z           "evidence": []
2026-06-23T09:38:03.0448210Z         },
2026-06-23T09:38:03.0448319Z         "unit": {
2026-06-23T09:38:03.0448423Z           "complete": true,
2026-06-23T09:38:03.0448534Z           "evidence": [
2026-06-23T09:38:03.0448638Z             {
2026-06-23T09:38:03.0448766Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0448867Z               "line": 8968
2026-06-23T09:38:03.0449062Z             },
2026-06-23T09:38:03.0449159Z             {
2026-06-23T09:38:03.0449295Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0449401Z               "line": 9829
2026-06-23T09:38:03.0449502Z             }
2026-06-23T09:38:03.0449605Z           ]
2026-06-23T09:38:03.0449709Z         }
2026-06-23T09:38:03.0449810Z       }
2026-06-23T09:38:03.0449903Z     },
2026-06-23T09:38:03.0449998Z     {
2026-06-23T09:38:03.0450113Z       "id": "REQ-KICK-1",
2026-06-23T09:38:03.0452737Z       "title": "Explicit, loud controller displacement: `spt rc kick <target>` / `--take` (Take intent) kicks the incumbent controller and becomes controller; the displaced controller receives a LOUD `Displaced{by}` notice and is FULLY DETACHED (not demoted to a viewer). A default attach to a controlled endpoint is NEVER a silent displace (it is the Control busy-refusal). An old (N-1) rc omits intent → Control, so it can drive a free endpoint but CANNOT `--take` — it can never silently steal, and gets a clean busy-refusal instead. Taking control rides the same access_check(endpoint, origin, Unsolicited) as a normal control attach (if you may drive, you may take — no elevated kick policy). The picker surfaces 'Kick <node> and attach' (Take) only on a controlled (blue ■) endpoint, via the existing attach dispatch (single-bringup-path: intent is a parameter).",
2026-06-23T09:38:03.0452865Z       "requiredStages": [
2026-06-23T09:38:03.0452965Z         "doc",
2026-06-23T09:38:03.0453071Z         "impl",
2026-06-23T09:38:03.0453265Z         "unit",
2026-06-23T09:38:03.0453366Z         "int"
2026-06-23T09:38:03.0453471Z       ],
2026-06-23T09:38:03.0453576Z       "stages": {
2026-06-23T09:38:03.0453681Z         "doc": {
2026-06-23T09:38:03.0453786Z           "complete": true,
2026-06-23T09:38:03.0453895Z           "evidence": [
2026-06-23T09:38:03.0453992Z             {
2026-06-23T09:38:03.0454115Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0454219Z               "line": 355
2026-06-23T09:38:03.0454321Z             }
2026-06-23T09:38:03.0454424Z           ]
2026-06-23T09:38:03.0454530Z         },
2026-06-23T09:38:03.0454636Z         "impl": {
2026-06-23T09:38:03.0454743Z           "complete": true,
2026-06-23T09:38:03.0454859Z           "evidence": [
2026-06-23T09:38:03.0454965Z             {
2026-06-23T09:38:03.0455115Z               "path": "crates/spt-net/src/net/attach.rs",
2026-06-23T09:38:03.0455220Z               "line": 41
2026-06-23T09:38:03.0455326Z             },
2026-06-23T09:38:03.0455434Z             {
2026-06-23T09:38:03.0455563Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0455669Z               "line": 738
2026-06-23T09:38:03.0455768Z             }
2026-06-23T09:38:03.0455869Z           ]
2026-06-23T09:38:03.0455973Z         },
2026-06-23T09:38:03.0456077Z         "int": {
2026-06-23T09:38:03.0456188Z           "complete": true,
2026-06-23T09:38:03.0456297Z           "evidence": [
2026-06-23T09:38:03.0456402Z             {
2026-06-23T09:38:03.0456556Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.0456660Z               "line": 922
2026-06-23T09:38:03.0456769Z             }
2026-06-23T09:38:03.0456871Z           ]
2026-06-23T09:38:03.0456964Z         },
2026-06-23T09:38:03.0457070Z         "unit": {
2026-06-23T09:38:03.0457176Z           "complete": true,
2026-06-23T09:38:03.0457288Z           "evidence": [
2026-06-23T09:38:03.0457383Z             {
2026-06-23T09:38:03.0457531Z               "path": "crates/spt-net/src/net/attach.rs",
2026-06-23T09:38:03.0457634Z               "line": 205
2026-06-23T09:38:03.0457743Z             }
2026-06-23T09:38:03.0457839Z           ]
2026-06-23T09:38:03.0457934Z         }
2026-06-23T09:38:03.0458034Z       }
2026-06-23T09:38:03.0458130Z     },
2026-06-23T09:38:03.0458235Z     {
2026-06-23T09:38:03.0458344Z       "id": "REQ-MANIFEST-1",
2026-06-23T09:38:03.0458569Z       "title": "Per-adapter manifest with adapter_name and min_spt_core_version",
2026-06-23T09:38:03.0458673Z       "requiredStages": [
2026-06-23T09:38:03.0458779Z         "doc",
2026-06-23T09:38:03.0458884Z         "impl",
2026-06-23T09:38:03.0459055Z         "unit"
2026-06-23T09:38:03.0459159Z       ],
2026-06-23T09:38:03.0459264Z       "stages": {
2026-06-23T09:38:03.0459370Z         "doc": {
2026-06-23T09:38:03.0459484Z           "complete": true,
2026-06-23T09:38:03.0459589Z           "evidence": [
2026-06-23T09:38:03.0459695Z             {
2026-06-23T09:38:03.0459822Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:03.0459928Z               "line": 19
2026-06-23T09:38:03.0460029Z             }
2026-06-23T09:38:03.0460132Z           ]
2026-06-23T09:38:03.0460232Z         },
2026-06-23T09:38:03.0460331Z         "impl": {
2026-06-23T09:38:03.0460449Z           "complete": true,
2026-06-23T09:38:03.0460553Z           "evidence": [
2026-06-23T09:38:03.0460658Z             {
2026-06-23T09:38:03.0460811Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0460920Z               "line": 18
2026-06-23T09:38:03.0461026Z             }
2026-06-23T09:38:03.0461131Z           ]
2026-06-23T09:38:03.0461336Z         },
2026-06-23T09:38:03.0461446Z         "int": {
2026-06-23T09:38:03.0461564Z           "complete": false,
2026-06-23T09:38:03.0461670Z           "evidence": []
2026-06-23T09:38:03.0464102Z         },
2026-06-23T09:38:03.0464237Z         "unit": {
2026-06-23T09:38:03.0464346Z           "complete": true,
2026-06-23T09:38:03.0464460Z           "evidence": [
2026-06-23T09:38:03.0464566Z             {
2026-06-23T09:38:03.0464871Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0464979Z               "line": 1076
2026-06-23T09:38:03.0465085Z             },
2026-06-23T09:38:03.0465181Z             {
2026-06-23T09:38:03.0465338Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0465448Z               "line": 1372
2026-06-23T09:38:03.0465539Z             },
2026-06-23T09:38:03.0465646Z             {
2026-06-23T09:38:03.0465785Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0465900Z               "line": 1384
2026-06-23T09:38:03.0466008Z             },
2026-06-23T09:38:03.0466114Z             {
2026-06-23T09:38:03.0466267Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0466371Z               "line": 1395
2026-06-23T09:38:03.0466482Z             },
2026-06-23T09:38:03.0466582Z             {
2026-06-23T09:38:03.0466719Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0466830Z               "line": 1412
2026-06-23T09:38:03.0466920Z             },
2026-06-23T09:38:03.0467029Z             {
2026-06-23T09:38:03.0467172Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0467281Z               "line": 1426
2026-06-23T09:38:03.0467378Z             },
2026-06-23T09:38:03.0467478Z             {
2026-06-23T09:38:03.0467630Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0467736Z               "line": 1542
2026-06-23T09:38:03.0467839Z             },
2026-06-23T09:38:03.0467943Z             {
2026-06-23T09:38:03.0468096Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0468199Z               "line": 1557
2026-06-23T09:38:03.0468303Z             },
2026-06-23T09:38:03.0468409Z             {
2026-06-23T09:38:03.0468542Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0468647Z               "line": 1668
2026-06-23T09:38:03.0468738Z             },
2026-06-23T09:38:03.0468851Z             {
2026-06-23T09:38:03.0469076Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0469190Z               "line": 1679
2026-06-23T09:38:03.0469296Z             }
2026-06-23T09:38:03.0469386Z           ]
2026-06-23T09:38:03.0469491Z         }
2026-06-23T09:38:03.0469591Z       }
2026-06-23T09:38:03.0469692Z     },
2026-06-23T09:38:03.0469787Z     {
2026-06-23T09:38:03.0469906Z       "id": "REQ-MANIFEST-2",
2026-06-23T09:38:03.0470473Z       "title": "Adapter profiles — sparse leaf-replace overlays (shipped + local), composite <adapter>:<profile> addressing, shadow-refusal, tighten-only consent floors",
2026-06-23T09:38:03.0470589Z       "requiredStages": [
2026-06-23T09:38:03.0470702Z         "doc",
2026-06-23T09:38:03.0470806Z         "impl",
2026-06-23T09:38:03.0470911Z         "unit"
2026-06-23T09:38:03.0471010Z       ],
2026-06-23T09:38:03.0471099Z       "stages": {
2026-06-23T09:38:03.0471209Z         "doc": {
2026-06-23T09:38:03.0471319Z           "complete": true,
2026-06-23T09:38:03.0471433Z           "evidence": [
2026-06-23T09:38:03.0471538Z             {
2026-06-23T09:38:03.0471653Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0471762Z               "line": 75
2026-06-23T09:38:03.0471868Z             }
2026-06-23T09:38:03.0471967Z           ]
2026-06-23T09:38:03.0472067Z         },
2026-06-23T09:38:03.0472177Z         "impl": {
2026-06-23T09:38:03.0472286Z           "complete": true,
2026-06-23T09:38:03.0472396Z           "evidence": [
2026-06-23T09:38:03.0472497Z             {
2026-06-23T09:38:03.0472768Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0472883Z               "line": 82
2026-06-23T09:38:03.0472987Z             },
2026-06-23T09:38:03.0473093Z             {
2026-06-23T09:38:03.0473241Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0473344Z               "line": 15
2026-06-23T09:38:03.0473449Z             },
2026-06-23T09:38:03.0473553Z             {
2026-06-23T09:38:03.0473795Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0473896Z               "line": 65
2026-06-23T09:38:03.0474004Z             },
2026-06-23T09:38:03.0474105Z             {
2026-06-23T09:38:03.0474248Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0474357Z               "line": 83
2026-06-23T09:38:03.0474463Z             },
2026-06-23T09:38:03.0474567Z             {
2026-06-23T09:38:03.0474701Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0474811Z               "line": 183
2026-06-23T09:38:03.0474911Z             },
2026-06-23T09:38:03.0475020Z             {
2026-06-23T09:38:03.0475154Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0475263Z               "line": 527
2026-06-23T09:38:03.0475369Z             },
2026-06-23T09:38:03.0475469Z             {
2026-06-23T09:38:03.0475611Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0475723Z               "line": 553
2026-06-23T09:38:03.0475826Z             },
2026-06-23T09:38:03.0475917Z             {
2026-06-23T09:38:03.0476061Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0476169Z               "line": 671
2026-06-23T09:38:03.0476268Z             },
2026-06-23T09:38:03.0476369Z             {
2026-06-23T09:38:03.0476507Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0476616Z               "line": 696
2026-06-23T09:38:03.0476718Z             },
2026-06-23T09:38:03.0476813Z             {
2026-06-23T09:38:03.0476955Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0477056Z               "line": 719
2026-06-23T09:38:03.0477165Z             },
2026-06-23T09:38:03.0477265Z             {
2026-06-23T09:38:03.0477404Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0477513Z               "line": 734
2026-06-23T09:38:03.0477614Z             },
2026-06-23T09:38:03.0477714Z             {
2026-06-23T09:38:03.0477846Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0477953Z               "line": 6231
2026-06-23T09:38:03.0478043Z             },
2026-06-23T09:38:03.0478147Z             {
2026-06-23T09:38:03.0478282Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0478390Z               "line": 6245
2026-06-23T09:38:03.0478494Z             },
2026-06-23T09:38:03.0478594Z             {
2026-06-23T09:38:03.0478712Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0478821Z               "line": 6279
2026-06-23T09:38:03.0478931Z             }
2026-06-23T09:38:03.0479116Z           ]
2026-06-23T09:38:03.0479217Z         },
2026-06-23T09:38:03.0479326Z         "int": {
2026-06-23T09:38:03.0479435Z           "complete": false,
2026-06-23T09:38:03.0479541Z           "evidence": []
2026-06-23T09:38:03.0479641Z         },
2026-06-23T09:38:03.0479750Z         "unit": {
2026-06-23T09:38:03.0479856Z           "complete": true,
2026-06-23T09:38:03.0479970Z           "evidence": [
2026-06-23T09:38:03.0480065Z             {
2026-06-23T09:38:03.0480209Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.0480323Z               "line": 921
2026-06-23T09:38:03.0480423Z             },
2026-06-23T09:38:03.0480529Z             {
2026-06-23T09:38:03.0480671Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0480771Z               "line": 211
2026-06-23T09:38:03.0480877Z             },
2026-06-23T09:38:03.0480966Z             {
2026-06-23T09:38:03.0481230Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0481338Z               "line": 272
2026-06-23T09:38:03.0481447Z             },
2026-06-23T09:38:03.0481552Z             {
2026-06-23T09:38:03.0481693Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0481803Z               "line": 313
2026-06-23T09:38:03.0481904Z             },
2026-06-23T09:38:03.0482007Z             {
2026-06-23T09:38:03.0482233Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0482341Z               "line": 325
2026-06-23T09:38:03.0482442Z             },
2026-06-23T09:38:03.0482542Z             {
2026-06-23T09:38:03.0482684Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0482791Z               "line": 336
2026-06-23T09:38:03.0482895Z             },
2026-06-23T09:38:03.0482999Z             {
2026-06-23T09:38:03.0483138Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0483238Z               "line": 345
2026-06-23T09:38:03.0483343Z             },
2026-06-23T09:38:03.0483448Z             {
2026-06-23T09:38:03.0483591Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0483701Z               "line": 361
2026-06-23T09:38:03.0483796Z             },
2026-06-23T09:38:03.0483890Z             {
2026-06-23T09:38:03.0484028Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0484136Z               "line": 444
2026-06-23T09:38:03.0484245Z             },
2026-06-23T09:38:03.0484345Z             {
2026-06-23T09:38:03.0484503Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0484612Z               "line": 958
2026-06-23T09:38:03.0484704Z             },
2026-06-23T09:38:03.0484804Z             {
2026-06-23T09:38:03.0484936Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0485046Z               "line": 982
2026-06-23T09:38:03.0485141Z             },
2026-06-23T09:38:03.0485236Z             {
2026-06-23T09:38:03.0485385Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0485494Z               "line": 1008
2026-06-23T09:38:03.0485600Z             },
2026-06-23T09:38:03.0485700Z             {
2026-06-23T09:38:03.0485833Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0485939Z               "line": 1027
2026-06-23T09:38:03.0486043Z             },
2026-06-23T09:38:03.0486148Z             {
2026-06-23T09:38:03.0486288Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0486386Z               "line": 1058
2026-06-23T09:38:03.0486487Z             },
2026-06-23T09:38:03.0486588Z             {
2026-06-23T09:38:03.0486724Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:03.0486828Z               "line": 309
2026-06-23T09:38:03.0486934Z             },
2026-06-23T09:38:03.0487025Z             {
2026-06-23T09:38:03.0487162Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:03.0487268Z               "line": 606
2026-06-23T09:38:03.0487377Z             },
2026-06-23T09:38:03.0487476Z             {
2026-06-23T09:38:03.0487602Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0487711Z               "line": 10148
2026-06-23T09:38:03.0487811Z             },
2026-06-23T09:38:03.0487907Z             {
2026-06-23T09:38:03.0488035Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0488140Z               "line": 11096
2026-06-23T09:38:03.0488245Z             }
2026-06-23T09:38:03.0488340Z           ]
2026-06-23T09:38:03.0488440Z         }
2026-06-23T09:38:03.0488541Z       }
2026-06-23T09:38:03.0488640Z     },
2026-06-23T09:38:03.0488731Z     {
2026-06-23T09:38:03.0488842Z       "id": "REQ-MANIFEST-3",
2026-06-23T09:38:03.0489592Z       "title": "Adapter strings — [strings] KV tree, dot-path get-string resolving through the profile leaf-replace overlay, set-string editing a local profile's [strings] only; data-only (nothing executes a string)",
2026-06-23T09:38:03.0489810Z       "requiredStages": [
2026-06-23T09:38:03.0489920Z         "doc",
2026-06-23T09:38:03.0490015Z         "impl",
2026-06-23T09:38:03.0490116Z         "unit"
2026-06-23T09:38:03.0490211Z       ],
2026-06-23T09:38:03.0490320Z       "stages": {
2026-06-23T09:38:03.0490417Z         "doc": {
2026-06-23T09:38:03.0490526Z           "complete": true,
2026-06-23T09:38:03.0490635Z           "evidence": [
2026-06-23T09:38:03.0490831Z             {
2026-06-23T09:38:03.0490950Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0491061Z               "line": 81
2026-06-23T09:38:03.0491160Z             }
2026-06-23T09:38:03.0491265Z           ]
2026-06-23T09:38:03.0491356Z         },
2026-06-23T09:38:03.0491461Z         "impl": {
2026-06-23T09:38:03.0491570Z           "complete": true,
2026-06-23T09:38:03.0491680Z           "evidence": [
2026-06-23T09:38:03.0491781Z             {
2026-06-23T09:38:03.0491931Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0492045Z               "line": 92
2026-06-23T09:38:03.0492144Z             },
2026-06-23T09:38:03.0492248Z             {
2026-06-23T09:38:03.0492392Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0492501Z               "line": 101
2026-06-23T09:38:03.0492596Z             },
2026-06-23T09:38:03.0492707Z             {
2026-06-23T09:38:03.0492849Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0492954Z               "line": 132
2026-06-23T09:38:03.0493055Z             },
2026-06-23T09:38:03.0493150Z             {
2026-06-23T09:38:03.0493298Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0493397Z               "line": 577
2026-06-23T09:38:03.0493502Z             },
2026-06-23T09:38:03.0493608Z             {
2026-06-23T09:38:03.0493745Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0493855Z               "line": 633
2026-06-23T09:38:03.0493956Z             },
2026-06-23T09:38:03.0494060Z             {
2026-06-23T09:38:03.0494189Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0494295Z               "line": 6292
2026-06-23T09:38:03.0494393Z             },
2026-06-23T09:38:03.0494484Z             {
2026-06-23T09:38:03.0494612Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0494720Z               "line": 6340
2026-06-23T09:38:03.0494824Z             }
2026-06-23T09:38:03.0494915Z           ]
2026-06-23T09:38:03.0495021Z         },
2026-06-23T09:38:03.0495120Z         "int": {
2026-06-23T09:38:03.0495230Z           "complete": false,
2026-06-23T09:38:03.0495345Z           "evidence": []
2026-06-23T09:38:03.0495444Z         },
2026-06-23T09:38:03.0495550Z         "unit": {
2026-06-23T09:38:03.0495654Z           "complete": true,
2026-06-23T09:38:03.0495768Z           "evidence": [
2026-06-23T09:38:03.0495870Z             {
2026-06-23T09:38:03.0496012Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0496121Z               "line": 371
2026-06-23T09:38:03.0496223Z             },
2026-06-23T09:38:03.0496332Z             {
2026-06-23T09:38:03.0496475Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0496593Z               "line": 429
2026-06-23T09:38:03.0496689Z             },
2026-06-23T09:38:03.0496785Z             {
2026-06-23T09:38:03.0496922Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0497032Z               "line": 1082
2026-06-23T09:38:03.0497128Z             },
2026-06-23T09:38:03.0497233Z             {
2026-06-23T09:38:03.0497360Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0497470Z               "line": 10241
2026-06-23T09:38:03.0497561Z             }
2026-06-23T09:38:03.0497665Z           ]
2026-06-23T09:38:03.0497761Z         }
2026-06-23T09:38:03.0497866Z       }
2026-06-23T09:38:03.0497961Z     },
2026-06-23T09:38:03.0498071Z     {
2026-06-23T09:38:03.0498190Z       "id": "REQ-MANIFEST-4",
2026-06-23T09:38:03.0499078Z       "title": "Keyword hints — [[hints]] {keywords (literal/regex), text}; spt api hint --session emits at most one matched hint per message, once per session (seen-set), declaration-order first match; profiles overlay [[hints]] by leaf-replace",
2026-06-23T09:38:03.0499200Z       "requiredStages": [
2026-06-23T09:38:03.0499301Z         "doc",
2026-06-23T09:38:03.0499407Z         "impl",
2026-06-23T09:38:03.0499505Z         "unit"
2026-06-23T09:38:03.0499776Z       ],
2026-06-23T09:38:03.0499880Z       "stages": {
2026-06-23T09:38:03.0499984Z         "doc": {
2026-06-23T09:38:03.0500095Z           "complete": true,
2026-06-23T09:38:03.0500199Z           "evidence": [
2026-06-23T09:38:03.0500308Z             {
2026-06-23T09:38:03.0500424Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0500532Z               "line": 88
2026-06-23T09:38:03.0500637Z             }
2026-06-23T09:38:03.0500734Z           ]
2026-06-23T09:38:03.0500837Z         },
2026-06-23T09:38:03.0500938Z         "impl": {
2026-06-23T09:38:03.0501053Z           "complete": true,
2026-06-23T09:38:03.0501162Z           "evidence": [
2026-06-23T09:38:03.0501262Z             {
2026-06-23T09:38:03.0501420Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0501524Z               "line": 100
2026-06-23T09:38:03.0501630Z             },
2026-06-23T09:38:03.0501729Z             {
2026-06-23T09:38:03.0501882Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0501997Z               "line": 183
2026-06-23T09:38:03.0502101Z             },
2026-06-23T09:38:03.0502197Z             {
2026-06-23T09:38:03.0502336Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0502443Z               "line": 83
2026-06-23T09:38:03.0502538Z             },
2026-06-23T09:38:03.0502639Z             {
2026-06-23T09:38:03.0502779Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.0502932Z               "line": 629
2026-06-23T09:38:03.0503033Z             },
2026-06-23T09:38:03.0503132Z             {
2026-06-23T09:38:03.0503281Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.0503390Z               "line": 654
2026-06-23T09:38:03.0503495Z             }
2026-06-23T09:38:03.0503601Z           ]
2026-06-23T09:38:03.0503696Z         },
2026-06-23T09:38:03.0503795Z         "int": {
2026-06-23T09:38:03.0503906Z           "complete": false,
2026-06-23T09:38:03.0504015Z           "evidence": []
2026-06-23T09:38:03.0504120Z         },
2026-06-23T09:38:03.0504226Z         "unit": {
2026-06-23T09:38:03.0504338Z           "complete": true,
2026-06-23T09:38:03.0504439Z           "evidence": [
2026-06-23T09:38:03.0504545Z             {
2026-06-23T09:38:03.0504687Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0504793Z               "line": 1492
2026-06-23T09:38:03.0504893Z             },
2026-06-23T09:38:03.0504996Z             {
2026-06-23T09:38:03.0505139Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0505248Z               "line": 1525
2026-06-23T09:38:03.0505346Z             },
2026-06-23T09:38:03.0505452Z             {
2026-06-23T09:38:03.0505591Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.0505704Z               "line": 988
2026-06-23T09:38:03.0505795Z             }
2026-06-23T09:38:03.0505895Z           ]
2026-06-23T09:38:03.0505999Z         }
2026-06-23T09:38:03.0506105Z       }
2026-06-23T09:38:03.0506210Z     },
2026-06-23T09:38:03.0506309Z     {
2026-06-23T09:38:03.0506425Z       "id": "REQ-MANIFEST-5",
2026-06-23T09:38:03.0509527Z       "title": "File-backed adapter [strings] (M12-W3-T3.1): a [strings] dot-path value MAY be an inline-table FILE POINTER `key = { file = \"rel/path\" }` resolved to the file's contents at get-string time, keeping large bodies (skill-instructions, hint text) out of the manifest. A value-position table with a `file` key IS the pointer form (reserved — cannot double as data). Per-adapter aux storage `adapters/<adapter>/strings/`; pointers resolve relative to it with CONTAINMENT (reject `..`/absolute escaping the dir). UPDATE-SAFETY: a LOCAL profile's file-pointers resolve relative to the user-owned local-profile dir (NOT adapter-shipped strings/, which adapter updates overwrite), or the local profile inlines. Validate-at-register (fail-fast on a bad/escaping/missing pointer) + LAZY read at get-string (live file edits reflect, no re-register) + skip-diagnostics on missing-at-read (no hard-crash, mirrors [digest]). Rides the same leaf-replace profile overlay as the rest of [strings].",
2026-06-23T09:38:03.0509746Z       "requiredStages": [
2026-06-23T09:38:03.0509851Z         "doc",
2026-06-23T09:38:03.0509948Z         "impl",
2026-06-23T09:38:03.0510051Z         "unit"
2026-06-23T09:38:03.0510151Z       ],
2026-06-23T09:38:03.0510260Z       "stages": {
2026-06-23T09:38:03.0510360Z         "doc": {
2026-06-23T09:38:03.0510477Z           "complete": true,
2026-06-23T09:38:03.0510592Z           "evidence": [
2026-06-23T09:38:03.0510693Z             {
2026-06-23T09:38:03.0510815Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0510921Z               "line": 83
2026-06-23T09:38:03.0511026Z             }
2026-06-23T09:38:03.0511121Z           ]
2026-06-23T09:38:03.0511232Z         },
2026-06-23T09:38:03.0511341Z         "impl": {
2026-06-23T09:38:03.0511454Z           "complete": true,
2026-06-23T09:38:03.0511570Z           "evidence": [
2026-06-23T09:38:03.0511665Z             {
2026-06-23T09:38:03.0511817Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0511928Z               "line": 120
2026-06-23T09:38:03.0512023Z             }
2026-06-23T09:38:03.0512122Z           ]
2026-06-23T09:38:03.0512223Z         },
2026-06-23T09:38:03.0512327Z         "int": {
2026-06-23T09:38:03.0512432Z           "complete": false,
2026-06-23T09:38:03.0512538Z           "evidence": []
2026-06-23T09:38:03.0512642Z         },
2026-06-23T09:38:03.0512752Z         "unit": {
2026-06-23T09:38:03.0512858Z           "complete": true,
2026-06-23T09:38:03.0512971Z           "evidence": [
2026-06-23T09:38:03.0513075Z             {
2026-06-23T09:38:03.0513213Z               "path": "crates/spt-runtime/src/profile.rs",
2026-06-23T09:38:03.0513321Z               "line": 404
2026-06-23T09:38:03.0513425Z             },
2026-06-23T09:38:03.0513532Z             {
2026-06-23T09:38:03.0513682Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0513789Z               "line": 1155
2026-06-23T09:38:03.0513893Z             },
2026-06-23T09:38:03.0513997Z             {
2026-06-23T09:38:03.0514146Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0514265Z               "line": 1184
2026-06-23T09:38:03.0514370Z             },
2026-06-23T09:38:03.0514471Z             {
2026-06-23T09:38:03.0514613Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0514723Z               "line": 1224
2026-06-23T09:38:03.0514828Z             },
2026-06-23T09:38:03.0514933Z             {
2026-06-23T09:38:03.0515086Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0515195Z               "line": 1239
2026-06-23T09:38:03.0515299Z             }
2026-06-23T09:38:03.0515401Z           ]
2026-06-23T09:38:03.0515510Z         }
2026-06-23T09:38:03.0515609Z       }
2026-06-23T09:38:03.0515713Z     },
2026-06-23T09:38:03.0515817Z     {
2026-06-23T09:38:03.0515954Z       "id": "REQ-MANIFEST-6",
2026-06-23T09:38:03.0518259Z       "title": "Cross-adapter fallback target addressing (M12-W3-T3.2): a cross-adapter fallback target is addressed as `<adapter>:<profile>` (not just a bare adapter_name), resolved through the one composite-addressing resolver (registry::resolve_option) at every adapter-option read site so a fallback may select a shipped/local profile (e.g. a `ccs` profile). CONTEXT.md §cross-adapter-fallback reconciled (\"ccs is a profile; cross-adapter fallback may target <adapter>:<profile>\"). Contract-only this milestone: the node-wide fallback SETTING + its rate-limit invocation are deferred to the consuming milestone (the runtime path does not exist yet); this REQ guarantees the ADDRESSING resolves.",
2026-06-23T09:38:03.0518386Z       "requiredStages": [
2026-06-23T09:38:03.0518476Z         "doc",
2026-06-23T09:38:03.0518585Z         "unit"
2026-06-23T09:38:03.0518687Z       ],
2026-06-23T09:38:03.0518795Z       "stages": {
2026-06-23T09:38:03.0518905Z         "doc": {
2026-06-23T09:38:03.0519095Z           "complete": true,
2026-06-23T09:38:03.0519310Z           "evidence": [
2026-06-23T09:38:03.0519410Z             {
2026-06-23T09:38:03.0519525Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0519634Z               "line": 150
2026-06-23T09:38:03.0519734Z             }
2026-06-23T09:38:03.0519835Z           ]
2026-06-23T09:38:03.0519935Z         },
2026-06-23T09:38:03.0520044Z         "impl": {
2026-06-23T09:38:03.0520150Z           "complete": false,
2026-06-23T09:38:03.0520255Z           "evidence": []
2026-06-23T09:38:03.0520359Z         },
2026-06-23T09:38:03.0520464Z         "int": {
2026-06-23T09:38:03.0520574Z           "complete": false,
2026-06-23T09:38:03.0520683Z           "evidence": []
2026-06-23T09:38:03.0520777Z         },
2026-06-23T09:38:03.0520882Z         "unit": {
2026-06-23T09:38:03.0521000Z           "complete": true,
2026-06-23T09:38:03.0521104Z           "evidence": [
2026-06-23T09:38:03.0521215Z             {
2026-06-23T09:38:03.0521362Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.0521477Z               "line": 1261
2026-06-23T09:38:03.0521586Z             }
2026-06-23T09:38:03.0521676Z           ]
2026-06-23T09:38:03.0521782Z         }
2026-06-23T09:38:03.0521877Z       }
2026-06-23T09:38:03.0521986Z     },
2026-06-23T09:38:03.0522087Z     {
2026-06-23T09:38:03.0522192Z       "id": "REQ-MANIFEST-7",
2026-06-23T09:38:03.0525235Z       "title": "Adapter-declared shortcut basename (M12-W2 follow-on): an optional `[adapter] shortcut_basename` manifest field names the basename the `spt endpoint run` picker bakes into the generated `<basename>-<id>` launcher shortcut (REQ-RUN-SHORTCUT). Absent ⇒ the harness-agnostic default `spt` (→ `spt-<id>`); an adapter sets it to brand its shortcuts (claude-spt → `cc` → `cc-<id>`), so the Claude-Code-ness lives in the PUBLISHED adapter manifest, never hardcoded in spt-core. The picker reads it from the RESOLVED manifest of the selected adapter (registry::resolve_option), falling back to `spt` when absent/empty/unresolvable. Additive + N-1-safe (serde-default Option, omitted from serialization when absent; old manifests parse clean); manifest.schema.json regenerated from the derive (ADR-0001, CI drift-gated). Documented in docs/MANIFEST.md `[adapter]` section + the claude-spt worked example — the adapter-author contract perri builds spt-claude-code against.",
2026-06-23T09:38:03.0525364Z       "requiredStages": [
2026-06-23T09:38:03.0525468Z         "doc",
2026-06-23T09:38:03.0525574Z         "impl",
2026-06-23T09:38:03.0525679Z         "unit"
2026-06-23T09:38:03.0525778Z       ],
2026-06-23T09:38:03.0525884Z       "stages": {
2026-06-23T09:38:03.0525990Z         "doc": {
2026-06-23T09:38:03.0526107Z           "complete": true,
2026-06-23T09:38:03.0526221Z           "evidence": [
2026-06-23T09:38:03.0526321Z             {
2026-06-23T09:38:03.0526452Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:03.0526552Z               "line": 43
2026-06-23T09:38:03.0526663Z             }
2026-06-23T09:38:03.0526767Z           ]
2026-06-23T09:38:03.0526876Z         },
2026-06-23T09:38:03.0526978Z         "impl": {
2026-06-23T09:38:03.0527082Z           "complete": true,
2026-06-23T09:38:03.0527186Z           "evidence": [
2026-06-23T09:38:03.0527287Z             {
2026-06-23T09:38:03.0527434Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.0527545Z               "line": 54
2026-06-23T09:38:03.0527654Z             }
2026-06-23T09:38:03.0527758Z           ]
2026-06-23T09:38:03.0527855Z         },
2026-06-23T09:38:03.0527969Z         "int": {
2026-06-23T09:38:03.0528073Z           "complete": false,
2026-06-23T09:38:03.0528288Z           "evidence": []
2026-06-23T09:38:03.0528388Z         },
2026-06-23T09:38:03.0528499Z         "unit": {
2026-06-23T09:38:03.0528608Z           "complete": true,
2026-06-23T09:38:03.0528717Z           "evidence": [
2026-06-23T09:38:03.0528824Z             {
2026-06-23T09:38:03.0529041Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0529257Z               "line": 1685
2026-06-23T09:38:03.0529350Z             }
2026-06-23T09:38:03.0529451Z           ]
2026-06-23T09:38:03.0529546Z         }
2026-06-23T09:38:03.0529646Z       }
2026-06-23T09:38:03.0529751Z     },
2026-06-23T09:38:03.0529852Z     {
2026-06-23T09:38:03.0529956Z       "id": "REQ-MANIFEST-8",
2026-06-23T09:38:03.0532161Z       "title": "[adapter] host_binaries declares the harness executable basenames a kind=\"harness\" adapter hosts agents inside (e.g. host_binaries = [\"claude\"]); bind-time pid→exe-basename match (case-insensitive, .exe-stripped) over the seed's parent_pid selects the candidate adapter set; zero matches → a friendly error naming the binary + the --adapter escape hatch. Additive + N-1-safe: optional Vec<String>, #[serde(default, skip_serializing_if = \"Vec::is_empty\")] (omitted-serialized like shortcut_basename, old manifests parse clean); manifest.schema.json regenerated from the derive (ADR-0001, CI drift-gated). The match-key for ADR-0021 adapter-agnostic bind-time resolution. (v0.9.0)",
2026-06-23T09:38:03.0532284Z       "requiredStages": [
2026-06-23T09:38:03.0532390Z         "doc",
2026-06-23T09:38:03.0532499Z         "impl",
2026-06-23T09:38:03.0532599Z         "unit",
2026-06-23T09:38:03.0532705Z         "int"
2026-06-23T09:38:03.0532809Z       ],
2026-06-23T09:38:03.0532909Z       "stages": {
2026-06-23T09:38:03.0533015Z         "doc": {
2026-06-23T09:38:03.0533124Z           "complete": true,
2026-06-23T09:38:03.0533238Z           "evidence": [
2026-06-23T09:38:03.0533340Z             {
2026-06-23T09:38:03.0533462Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0533562Z               "line": 193
2026-06-23T09:38:03.0533669Z             },
2026-06-23T09:38:03.0533762Z             {
2026-06-23T09:38:03.0533892Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:03.0534002Z               "line": 54
2026-06-23T09:38:03.0534096Z             }
2026-06-23T09:38:03.0534195Z           ]
2026-06-23T09:38:03.0534291Z         },
2026-06-23T09:38:03.0534398Z         "impl": {
2026-06-23T09:38:03.0534512Z           "complete": true,
2026-06-23T09:38:03.0534623Z           "evidence": [
2026-06-23T09:38:03.0534732Z             {
2026-06-23T09:38:03.0534875Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0534985Z               "line": 222
2026-06-23T09:38:03.0535089Z             },
2026-06-23T09:38:03.0535190Z             {
2026-06-23T09:38:03.0535324Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:03.0535437Z               "line": 306
2026-06-23T09:38:03.0535543Z             }
2026-06-23T09:38:03.0535647Z           ]
2026-06-23T09:38:03.0535752Z         },
2026-06-23T09:38:03.0535853Z         "int": {
2026-06-23T09:38:03.0535972Z           "complete": true,
2026-06-23T09:38:03.0536081Z           "evidence": [
2026-06-23T09:38:03.0536188Z             {
2026-06-23T09:38:03.0536343Z               "path": "crates/spt/tests/live_resolve_e2e.rs",
2026-06-23T09:38:03.0536449Z               "line": 18
2026-06-23T09:38:03.0536554Z             }
2026-06-23T09:38:03.0536658Z           ]
2026-06-23T09:38:03.0536752Z         },
2026-06-23T09:38:03.0536857Z         "unit": {
2026-06-23T09:38:03.0536965Z           "complete": true,
2026-06-23T09:38:03.0537074Z           "evidence": [
2026-06-23T09:38:03.0537170Z             {
2026-06-23T09:38:03.0537323Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0537432Z               "line": 1703
2026-06-23T09:38:03.0537538Z             },
2026-06-23T09:38:03.0537633Z             {
2026-06-23T09:38:03.0537886Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0537995Z               "line": 316
2026-06-23T09:38:03.0538096Z             },
2026-06-23T09:38:03.0538205Z             {
2026-06-23T09:38:03.0538347Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0538458Z               "line": 332
2026-06-23T09:38:03.0538557Z             },
2026-06-23T09:38:03.0538657Z             {
2026-06-23T09:38:03.0538877Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.0539055Z               "line": 345
2026-06-23T09:38:03.0539163Z             },
2026-06-23T09:38:03.0539259Z             {
2026-06-23T09:38:03.0539407Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:03.0539502Z               "line": 422
2026-06-23T09:38:03.0539601Z             },
2026-06-23T09:38:03.0539706Z             {
2026-06-23T09:38:03.0539840Z               "path": "crates/spt-store/src/proc.rs",
2026-06-23T09:38:03.0539948Z               "line": 436
2026-06-23T09:38:03.0540049Z             }
2026-06-23T09:38:03.0540155Z           ]
2026-06-23T09:38:03.0540249Z         }
2026-06-23T09:38:03.0540355Z       }
2026-06-23T09:38:03.0540459Z     },
2026-06-23T09:38:03.0540558Z     {
2026-06-23T09:38:03.0540665Z       "id": "REQ-MESH-1",
2026-06-23T09:38:03.0542768Z       "title": "Membership proof (seed-proof): symmetric current-epoch seed-knowledge replaces is_trusted at EVERY inbound gate (registry apply, WAN receive, sync, notif, connection accept). MK = HKDF(seed, domain ‖ subnet_id ‖ seed_epoch); mutual channel-bound challenge-response at connect (transcript binds both handshake-proven node pubkeys, both nonces, subnet_id, seed_epoch, role); verified once per connection, cached on the broker ConnEntry, kept warm via QUIC keep-alive so re-proof is restart/partition/rotation-only. Exact-epoch match (re-seed is the sole N-1 exception). SECURITY INVARIANTS: channel-bound (no cross-connection replay), mutual, accepts a member it never paired (the mesh property).",
2026-06-23T09:38:03.0542902Z       "requiredStages": [
2026-06-23T09:38:03.0543007Z         "impl",
2026-06-23T09:38:03.0543106Z         "unit",
2026-06-23T09:38:03.0543217Z         "int"
2026-06-23T09:38:03.0543307Z       ],
2026-06-23T09:38:03.0543416Z       "stages": {
2026-06-23T09:38:03.0543522Z         "doc": {
2026-06-23T09:38:03.0543636Z           "complete": false,
2026-06-23T09:38:03.0543750Z           "evidence": []
2026-06-23T09:38:03.0543861Z         },
2026-06-23T09:38:03.0543965Z         "impl": {
2026-06-23T09:38:03.0544070Z           "complete": true,
2026-06-23T09:38:03.0544181Z           "evidence": [
2026-06-23T09:38:03.0544285Z             {
2026-06-23T09:38:03.0544418Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.0544534Z               "line": 922
2026-06-23T09:38:03.0544637Z             },
2026-06-23T09:38:03.0544741Z             {
2026-06-23T09:38:03.0544894Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0545001Z               "line": 38
2026-06-23T09:38:03.0545106Z             },
2026-06-23T09:38:03.0545207Z             {
2026-06-23T09:38:03.0545359Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0545469Z               "line": 161
2026-06-23T09:38:03.0545574Z             },
2026-06-23T09:38:03.0545678Z             {
2026-06-23T09:38:03.0545822Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0545931Z               "line": 206
2026-06-23T09:38:03.0546035Z             },
2026-06-23T09:38:03.0546137Z             {
2026-06-23T09:38:03.0546274Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0546394Z               "line": 57
2026-06-23T09:38:03.0546499Z             },
2026-06-23T09:38:03.0546598Z             {
2026-06-23T09:38:03.0546767Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0546875Z               "line": 24
2026-06-23T09:38:03.0546980Z             },
2026-06-23T09:38:03.0547087Z             {
2026-06-23T09:38:03.0547346Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0547455Z               "line": 142
2026-06-23T09:38:03.0547559Z             },
2026-06-23T09:38:03.0547653Z             {
2026-06-23T09:38:03.0547802Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0547911Z               "line": 162
2026-06-23T09:38:03.0548006Z             }
2026-06-23T09:38:03.0548221Z           ]
2026-06-23T09:38:03.0548326Z         },
2026-06-23T09:38:03.0548436Z         "int": {
2026-06-23T09:38:03.0548550Z           "complete": true,
2026-06-23T09:38:03.0548661Z           "evidence": [
2026-06-23T09:38:03.0548765Z             {
2026-06-23T09:38:03.0548922Z               "path": "crates/spt-daemon/tests/seedproofx.rs",
2026-06-23T09:38:03.0549113Z               "line": 67
2026-06-23T09:38:03.0549217Z             },
2026-06-23T09:38:03.0549319Z             {
2026-06-23T09:38:03.0549465Z               "path": "crates/spt-daemon/tests/seedproofx.rs",
2026-06-23T09:38:03.0549561Z               "line": 93
2026-06-23T09:38:03.0549672Z             },
2026-06-23T09:38:03.0549780Z             {
2026-06-23T09:38:03.0549929Z               "path": "crates/spt-daemon/tests/seedproofx.rs",
2026-06-23T09:38:03.0550038Z               "line": 117
2026-06-23T09:38:03.0550141Z             },
2026-06-23T09:38:03.0550246Z             {
2026-06-23T09:38:03.0550395Z               "path": "crates/spt-daemon/tests/seedproofx.rs",
2026-06-23T09:38:03.0550508Z               "line": 134
2026-06-23T09:38:03.0550600Z             }
2026-06-23T09:38:03.0550700Z           ]
2026-06-23T09:38:03.0550809Z         },
2026-06-23T09:38:03.0550915Z         "unit": {
2026-06-23T09:38:03.0551019Z           "complete": true,
2026-06-23T09:38:03.0551128Z           "evidence": [
2026-06-23T09:38:03.0551235Z             {
2026-06-23T09:38:03.0551382Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0551491Z               "line": 427
2026-06-23T09:38:03.0551602Z             },
2026-06-23T09:38:03.0551701Z             {
2026-06-23T09:38:03.0551855Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0551959Z               "line": 376
2026-06-23T09:38:03.0554474Z             },
2026-06-23T09:38:03.0554602Z             {
2026-06-23T09:38:03.0554784Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0554906Z               "line": 412
2026-06-23T09:38:03.0555017Z             },
2026-06-23T09:38:03.0555113Z             {
2026-06-23T09:38:03.0555278Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0555387Z               "line": 427
2026-06-23T09:38:03.0555491Z             },
2026-06-23T09:38:03.0555585Z             {
2026-06-23T09:38:03.0555738Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0555834Z               "line": 438
2026-06-23T09:38:03.0555938Z             },
2026-06-23T09:38:03.0556039Z             {
2026-06-23T09:38:03.0556195Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0556310Z               "line": 449
2026-06-23T09:38:03.0556406Z             },
2026-06-23T09:38:03.0556510Z             {
2026-06-23T09:38:03.0556649Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0556753Z               "line": 460
2026-06-23T09:38:03.0556848Z             },
2026-06-23T09:38:03.0556959Z             {
2026-06-23T09:38:03.0557111Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0557216Z               "line": 496
2026-06-23T09:38:03.0557322Z             },
2026-06-23T09:38:03.0557421Z             {
2026-06-23T09:38:03.0557574Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0557680Z               "line": 519
2026-06-23T09:38:03.0557778Z             },
2026-06-23T09:38:03.0557882Z             {
2026-06-23T09:38:03.0558034Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0558266Z               "line": 546
2026-06-23T09:38:03.0558372Z             }
2026-06-23T09:38:03.0558476Z           ]
2026-06-23T09:38:03.0558576Z         }
2026-06-23T09:38:03.0558682Z       }
2026-06-23T09:38:03.0558786Z     },
2026-06-23T09:38:03.0558882Z     {
2026-06-23T09:38:03.0559091Z       "id": "REQ-MESH-2",
2026-06-23T09:38:03.0561732Z       "title": "Member roster: node-level union-merge grow-set (per member: pubkey, label, machine_id, last-known address, last-seen — NOT the seed), the discovery directory the mesh dials by. Seeded IN FULL at pairing (seed-holder hands joiner the whole current roster, incl. offline members — folds in deferred pairing-time hostname capture + post-join address seeding); each node authors its own entry stamped with its lease_epoch, merged strictly-greater-wins (the node_label lease); exchanged only over seed-proof'd member connections; forgery-inert (a fake entry names a pubkey that still can't seed-proof). Removal needs a TOMBSTONE — a per-pubkey revoked marker that propagates, dominates the entry, gates admission (seed-proof ∧ ¬tombstoned), and prevents reinsert; cleared by a completed re-pair of that pubkey. Persists through silence (offline member keeps its entry).",
2026-06-23T09:38:03.0561961Z       "requiredStages": [
2026-06-23T09:38:03.0562071Z         "impl",
2026-06-23T09:38:03.0562171Z         "unit",
2026-06-23T09:38:03.0562281Z         "int"
2026-06-23T09:38:03.0562390Z       ],
2026-06-23T09:38:03.0562491Z       "stages": {
2026-06-23T09:38:03.0562604Z         "doc": {
2026-06-23T09:38:03.0562710Z           "complete": false,
2026-06-23T09:38:03.0562820Z           "evidence": []
2026-06-23T09:38:03.0562918Z         },
2026-06-23T09:38:03.0563018Z         "impl": {
2026-06-23T09:38:03.0563123Z           "complete": true,
2026-06-23T09:38:03.0563231Z           "evidence": [
2026-06-23T09:38:03.0563330Z             {
2026-06-23T09:38:03.0563484Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.0563592Z               "line": 757
2026-06-23T09:38:03.0563698Z             },
2026-06-23T09:38:03.0563808Z             {
2026-06-23T09:38:03.0563960Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.0564066Z               "line": 118
2026-06-23T09:38:03.0564175Z             },
2026-06-23T09:38:03.0564274Z             {
2026-06-23T09:38:03.0564414Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.0564523Z               "line": 347
2026-06-23T09:38:03.0564627Z             },
2026-06-23T09:38:03.0564724Z             {
2026-06-23T09:38:03.0564857Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.0564967Z               "line": 389
2026-06-23T09:38:03.0565072Z             },
2026-06-23T09:38:03.0565176Z             {
2026-06-23T09:38:03.0565311Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.0565419Z               "line": 403
2026-06-23T09:38:03.0565524Z             },
2026-06-23T09:38:03.0565626Z             {
2026-06-23T09:38:03.0565776Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.0565880Z               "line": 492
2026-06-23T09:38:03.0565981Z             },
2026-06-23T09:38:03.0566084Z             {
2026-06-23T09:38:03.0566226Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.0566336Z               "line": 507
2026-06-23T09:38:03.0566436Z             },
2026-06-23T09:38:03.0566536Z             {
2026-06-23T09:38:03.0566679Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.0566793Z               "line": 534
2026-06-23T09:38:03.0566899Z             },
2026-06-23T09:38:03.0566999Z             {
2026-06-23T09:38:03.0567156Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0567248Z               "line": 207
2026-06-23T09:38:03.0567351Z             },
2026-06-23T09:38:03.0567456Z             {
2026-06-23T09:38:03.0567596Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0567814Z               "line": 755
2026-06-23T09:38:03.0567911Z             },
2026-06-23T09:38:03.0568009Z             {
2026-06-23T09:38:03.0568159Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0568277Z               "line": 816
2026-06-23T09:38:03.0568381Z             },
2026-06-23T09:38:03.0568486Z             {
2026-06-23T09:38:03.0568636Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0568812Z               "line": 869
2026-06-23T09:38:03.0568913Z             },
2026-06-23T09:38:03.0569093Z             {
2026-06-23T09:38:03.0569237Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0569341Z               "line": 891
2026-06-23T09:38:03.0569447Z             },
2026-06-23T09:38:03.0569551Z             {
2026-06-23T09:38:03.0569694Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0569800Z               "line": 122
2026-06-23T09:38:03.0569904Z             },
2026-06-23T09:38:03.0570014Z             {
2026-06-23T09:38:03.0570148Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0570262Z               "line": 44
2026-06-23T09:38:03.0570362Z             },
2026-06-23T09:38:03.0570463Z             {
2026-06-23T09:38:03.0570600Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0570711Z               "line": 184
2026-06-23T09:38:03.0570811Z             },
2026-06-23T09:38:03.0570905Z             {
2026-06-23T09:38:03.0571045Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0571144Z               "line": 211
2026-06-23T09:38:03.0571248Z             },
2026-06-23T09:38:03.0571357Z             {
2026-06-23T09:38:03.0571487Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0571591Z               "line": 251
2026-06-23T09:38:03.0571691Z             },
2026-06-23T09:38:03.0571797Z             {
2026-06-23T09:38:03.0571925Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0572026Z               "line": 275
2026-06-23T09:38:03.0572130Z             },
2026-06-23T09:38:03.0572230Z             {
2026-06-23T09:38:03.0572365Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0572473Z               "line": 289
2026-06-23T09:38:03.0572582Z             },
2026-06-23T09:38:03.0572679Z             {
2026-06-23T09:38:03.0572807Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0572921Z               "line": 300
2026-06-23T09:38:03.0573022Z             },
2026-06-23T09:38:03.0573131Z             {
2026-06-23T09:38:03.0573260Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0573370Z               "line": 313
2026-06-23T09:38:03.0573474Z             }
2026-06-23T09:38:03.0573573Z           ]
2026-06-23T09:38:03.0573673Z         },
2026-06-23T09:38:03.0573763Z         "int": {
2026-06-23T09:38:03.0573871Z           "complete": true,
2026-06-23T09:38:03.0573977Z           "evidence": [
2026-06-23T09:38:03.0574082Z             {
2026-06-23T09:38:03.0574238Z               "path": "crates/spt-daemon/tests/rosterprop.rs",
2026-06-23T09:38:03.0574349Z               "line": 116
2026-06-23T09:38:03.0574453Z             },
2026-06-23T09:38:03.0574544Z             {
2026-06-23T09:38:03.0574697Z               "path": "crates/spt-daemon/tests/rosterprop.rs",
2026-06-23T09:38:03.0574806Z               "line": 181
2026-06-23T09:38:03.0574908Z             }
2026-06-23T09:38:03.0575012Z           ]
2026-06-23T09:38:03.0575107Z         },
2026-06-23T09:38:03.0575207Z         "unit": {
2026-06-23T09:38:03.0575321Z           "complete": true,
2026-06-23T09:38:03.0575426Z           "evidence": [
2026-06-23T09:38:03.0575532Z             {
2026-06-23T09:38:03.0575679Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0575793Z               "line": 999
2026-06-23T09:38:03.0575885Z             },
2026-06-23T09:38:03.0575993Z             {
2026-06-23T09:38:03.0576238Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0576360Z               "line": 1016
2026-06-23T09:38:03.0576469Z             },
2026-06-23T09:38:03.0576569Z             {
2026-06-23T09:38:03.0576714Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0576825Z               "line": 1024
2026-06-23T09:38:03.0576930Z             },
2026-06-23T09:38:03.0577024Z             {
2026-06-23T09:38:03.0577264Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0577377Z               "line": 1048
2026-06-23T09:38:03.0577469Z             },
2026-06-23T09:38:03.0577573Z             {
2026-06-23T09:38:03.0577731Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0577841Z               "line": 1499
2026-06-23T09:38:03.0577941Z             },
2026-06-23T09:38:03.0578050Z             {
2026-06-23T09:38:03.0578185Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0578293Z               "line": 347
2026-06-23T09:38:03.0578394Z             },
2026-06-23T09:38:03.0578500Z             {
2026-06-23T09:38:03.0578636Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0578743Z               "line": 370
2026-06-23T09:38:03.0578847Z             },
2026-06-23T09:38:03.0579031Z             {
2026-06-23T09:38:03.0579169Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0579277Z               "line": 407
2026-06-23T09:38:03.0579377Z             },
2026-06-23T09:38:03.0579473Z             {
2026-06-23T09:38:03.0579601Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0579706Z               "line": 431
2026-06-23T09:38:03.0579811Z             },
2026-06-23T09:38:03.0579911Z             {
2026-06-23T09:38:03.0580046Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0580145Z               "line": 483
2026-06-23T09:38:03.0580249Z             },
2026-06-23T09:38:03.0580355Z             {
2026-06-23T09:38:03.0580483Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0580588Z               "line": 499
2026-06-23T09:38:03.0580685Z             },
2026-06-23T09:38:03.0580788Z             {
2026-06-23T09:38:03.0580913Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0581019Z               "line": 514
2026-06-23T09:38:03.0581117Z             },
2026-06-23T09:38:03.0581213Z             {
2026-06-23T09:38:03.0581357Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0581470Z               "line": 531
2026-06-23T09:38:03.0581571Z             }
2026-06-23T09:38:03.0581663Z           ]
2026-06-23T09:38:03.0581765Z         }
2026-06-23T09:38:03.0581869Z       }
2026-06-23T09:38:03.0581966Z     },
2026-06-23T09:38:03.0582071Z     {
2026-06-23T09:38:03.0582180Z       "id": "REQ-MESH-3",
2026-06-23T09:38:03.0583889Z       "title": "Mesh row fan-out: registry rows stay OWN-AUTHORED; the only change is the push target widens from directly-paired peers to ALL roster members (a wider DIRECT fan-out, never a third-party relay). Every row/message still arrives from its author over a handshake → KNOWN-HAZARDS 7.5 (origin = handshake node) and 4.10 (eviction lease: any future update comes from that node itself, alive) PRESERVED VERBATIM. Closes the staggered A→B→C repro: C (roster-seeded with A at pairing) initiates to A, seed-proof admits C unpaired, A learns C, both push directly.",
2026-06-23T09:38:03.0584020Z       "requiredStages": [
2026-06-23T09:38:03.0584119Z         "impl",
2026-06-23T09:38:03.0584224Z         "unit",
2026-06-23T09:38:03.0584318Z         "int"
2026-06-23T09:38:03.0584422Z       ],
2026-06-23T09:38:03.0584518Z       "stages": {
2026-06-23T09:38:03.0584628Z         "doc": {
2026-06-23T09:38:03.0584746Z           "complete": false,
2026-06-23T09:38:03.0584861Z           "evidence": []
2026-06-23T09:38:03.0584961Z         },
2026-06-23T09:38:03.0585060Z         "impl": {
2026-06-23T09:38:03.0585172Z           "complete": true,
2026-06-23T09:38:03.0585375Z           "evidence": [
2026-06-23T09:38:03.0585477Z             {
2026-06-23T09:38:03.0585638Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:03.0585743Z               "line": 641
2026-06-23T09:38:03.0585844Z             }
2026-06-23T09:38:03.0585939Z           ]
2026-06-23T09:38:03.0586043Z         },
2026-06-23T09:38:03.0586144Z         "int": {
2026-06-23T09:38:03.0586262Z           "complete": true,
2026-06-23T09:38:03.0586488Z           "evidence": [
2026-06-23T09:38:03.0586582Z             {
2026-06-23T09:38:03.0586731Z               "path": "crates/spt-daemon/tests/mesh.rs",
2026-06-23T09:38:03.0586826Z               "line": 373
2026-06-23T09:38:03.0586934Z             },
2026-06-23T09:38:03.0587029Z             {
2026-06-23T09:38:03.0587176Z               "path": "crates/spt-daemon/tests/mesh.rs",
2026-06-23T09:38:03.0587279Z               "line": 436
2026-06-23T09:38:03.0587380Z             }
2026-06-23T09:38:03.0587485Z           ]
2026-06-23T09:38:03.0587589Z         },
2026-06-23T09:38:03.0587700Z         "unit": {
2026-06-23T09:38:03.0587809Z           "complete": true,
2026-06-23T09:38:03.0587914Z           "evidence": [
2026-06-23T09:38:03.0588020Z             {
2026-06-23T09:38:03.0588163Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:03.0588266Z               "line": 910
2026-06-23T09:38:03.0588368Z             }
2026-06-23T09:38:03.0588458Z           ]
2026-06-23T09:38:03.0588562Z         }
2026-06-23T09:38:03.0588664Z       }
2026-06-23T09:38:03.0588768Z     },
2026-06-23T09:38:03.0588868Z     {
2026-06-23T09:38:03.0589045Z       "id": "REQ-MESH-4",
2026-06-23T09:38:03.0591254Z       "title": "Revoke + timeboxed seed rotation + re-seed grace: `spt subnet revoke <node>...` (list, elevation-gated, revoke-only) writes roster tombstones immediately, then schedules ONE seed rotation (re-mint seed, bump seed_epoch, push new seed CONFIDENTIALLY over member-auth'd TLS connections — never in roster/registry gossip — force-drop revokees) at the close of a coalescing window (default 1h); further revokes in the window join the same rotation (one epoch bump). `--force-rotate-seed` rotates immediately (compromised-node path). RE-SEED GRACE: a node proving the immediately-prior epoch (N-1) AND still on the roster gets a re-seed-only restricted connection (auto-heals a benign offliner); revoked/off-roster denied; ≥2 stale → re-pair.",
2026-06-23T09:38:03.0591373Z       "requiredStages": [
2026-06-23T09:38:03.0591478Z         "impl",
2026-06-23T09:38:03.0591569Z         "unit",
2026-06-23T09:38:03.0591672Z         "int"
2026-06-23T09:38:03.0591778Z       ],
2026-06-23T09:38:03.0591884Z       "stages": {
2026-06-23T09:38:03.0591987Z         "doc": {
2026-06-23T09:38:03.0592102Z           "complete": false,
2026-06-23T09:38:03.0592208Z           "evidence": []
2026-06-23T09:38:03.0592307Z         },
2026-06-23T09:38:03.0592416Z         "impl": {
2026-06-23T09:38:03.0592530Z           "complete": true,
2026-06-23T09:38:03.0592640Z           "evidence": [
2026-06-23T09:38:03.0592749Z             {
2026-06-23T09:38:03.0592893Z               "path": "crates/spt-daemon/src/pump/registry.rs",
2026-06-23T09:38:03.0593006Z               "line": 33
2026-06-23T09:38:03.0593107Z             },
2026-06-23T09:38:03.0593208Z             {
2026-06-23T09:38:03.0593364Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0593470Z               "line": 68
2026-06-23T09:38:03.0593584Z             },
2026-06-23T09:38:03.0593688Z             {
2026-06-23T09:38:03.0593833Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0593932Z               "line": 111
2026-06-23T09:38:03.0594032Z             },
2026-06-23T09:38:03.0594134Z             {
2026-06-23T09:38:03.0594280Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0594390Z               "line": 462
2026-06-23T09:38:03.0594491Z             },
2026-06-23T09:38:03.0594594Z             {
2026-06-23T09:38:03.0594836Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0594949Z               "line": 711
2026-06-23T09:38:03.0595054Z             },
2026-06-23T09:38:03.0595155Z             {
2026-06-23T09:38:03.0595297Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0595407Z               "line": 725
2026-06-23T09:38:03.0595512Z             },
2026-06-23T09:38:03.0595607Z             {
2026-06-23T09:38:03.0595846Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.0595959Z               "line": 132
2026-06-23T09:38:03.0596056Z             },
2026-06-23T09:38:03.0596165Z             {
2026-06-23T09:38:03.0596308Z               "path": "crates/spt-store/src/rotation.rs",
2026-06-23T09:38:03.0596418Z               "line": 26
2026-06-23T09:38:03.0596518Z             },
2026-06-23T09:38:03.0596618Z             {
2026-06-23T09:38:03.0596766Z               "path": "crates/spt-store/src/rotation.rs",
2026-06-23T09:38:03.0596866Z               "line": 97
2026-06-23T09:38:03.0596967Z             },
2026-06-23T09:38:03.0597067Z             {
2026-06-23T09:38:03.0597205Z               "path": "crates/spt-store/src/rotation.rs",
2026-06-23T09:38:03.0597301Z               "line": 119
2026-06-23T09:38:03.0597410Z             },
2026-06-23T09:38:03.0597513Z             {
2026-06-23T09:38:03.0597642Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0597755Z               "line": 82
2026-06-23T09:38:03.0597858Z             },
2026-06-23T09:38:03.0597965Z             {
2026-06-23T09:38:03.0598093Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0598202Z               "line": 111
2026-06-23T09:38:03.0598303Z             },
2026-06-23T09:38:03.0598408Z             {
2026-06-23T09:38:03.0598546Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0598651Z               "line": 232
2026-06-23T09:38:03.0598751Z             },
2026-06-23T09:38:03.0598861Z             {
2026-06-23T09:38:03.0599061Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0599185Z               "line": 245
2026-06-23T09:38:03.0599285Z             },
2026-06-23T09:38:03.0599394Z             {
2026-06-23T09:38:03.0599514Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0599629Z               "line": 5320
2026-06-23T09:38:03.0599733Z             }
2026-06-23T09:38:03.0599834Z           ]
2026-06-23T09:38:03.0599944Z         },
2026-06-23T09:38:03.0600042Z         "int": {
2026-06-23T09:38:03.0600156Z           "complete": true,
2026-06-23T09:38:03.0600266Z           "evidence": [
2026-06-23T09:38:03.0600373Z             {
2026-06-23T09:38:03.0600521Z               "path": "crates/spt-daemon/tests/reseed.rs",
2026-06-23T09:38:03.0600627Z               "line": 98
2026-06-23T09:38:03.0600740Z             },
2026-06-23T09:38:03.0600836Z             {
2026-06-23T09:38:03.0600989Z               "path": "crates/spt-daemon/tests/reseed.rs",
2026-06-23T09:38:03.0601093Z               "line": 140
2026-06-23T09:38:03.0601190Z             }
2026-06-23T09:38:03.0601294Z           ]
2026-06-23T09:38:03.0601398Z         },
2026-06-23T09:38:03.0601504Z         "unit": {
2026-06-23T09:38:03.0601613Z           "complete": true,
2026-06-23T09:38:03.0601723Z           "evidence": [
2026-06-23T09:38:03.0601824Z             {
2026-06-23T09:38:03.0601976Z               "path": "crates/spt-daemon/src/pump/registry.rs",
2026-06-23T09:38:03.0602086Z               "line": 178
2026-06-23T09:38:03.0602191Z             },
2026-06-23T09:38:03.0602300Z             {
2026-06-23T09:38:03.0602449Z               "path": "crates/spt-daemon/src/pump/registry.rs",
2026-06-23T09:38:03.0602557Z               "line": 242
2026-06-23T09:38:03.0602652Z             },
2026-06-23T09:38:03.0602754Z             {
2026-06-23T09:38:03.0602900Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0603013Z               "line": 1079
2026-06-23T09:38:03.0603120Z             },
2026-06-23T09:38:03.0603215Z             {
2026-06-23T09:38:03.0603467Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0603586Z               "line": 1109
2026-06-23T09:38:03.0603692Z             },
2026-06-23T09:38:03.0603801Z             {
2026-06-23T09:38:03.0603939Z               "path": "crates/spt-daemon/src/seedproofx.rs",
2026-06-23T09:38:03.0604050Z               "line": 1129
2026-06-23T09:38:03.0604153Z             },
2026-06-23T09:38:03.0604369Z             {
2026-06-23T09:38:03.0604526Z               "path": "crates/spt-net/src/net/mesh/seedproof.rs",
2026-06-23T09:38:03.0604641Z               "line": 602
2026-06-23T09:38:03.0604746Z             },
2026-06-23T09:38:03.0604850Z             {
2026-06-23T09:38:03.0604994Z               "path": "crates/spt-store/src/rotation.rs",
2026-06-23T09:38:03.0605093Z               "line": 148
2026-06-23T09:38:03.0605192Z             },
2026-06-23T09:38:03.0605297Z             {
2026-06-23T09:38:03.0605433Z               "path": "crates/spt-store/src/rotation.rs",
2026-06-23T09:38:03.0605552Z               "line": 169
2026-06-23T09:38:03.0605653Z             },
2026-06-23T09:38:03.0605753Z             {
2026-06-23T09:38:03.0605895Z               "path": "crates/spt-store/src/rotation.rs",
2026-06-23T09:38:03.0606010Z               "line": 181
2026-06-23T09:38:03.0606115Z             },
2026-06-23T09:38:03.0606214Z             {
2026-06-23T09:38:03.0606363Z               "path": "crates/spt-store/src/rotation.rs",
2026-06-23T09:38:03.0606477Z               "line": 202
2026-06-23T09:38:03.0606573Z             },
2026-06-23T09:38:03.0606678Z             {
2026-06-23T09:38:03.0606815Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0606922Z               "line": 375
2026-06-23T09:38:03.0607025Z             },
2026-06-23T09:38:03.0607130Z             {
2026-06-23T09:38:03.0607265Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0607373Z               "line": 407
2026-06-23T09:38:03.0607474Z             },
2026-06-23T09:38:03.0607571Z             {
2026-06-23T09:38:03.0607707Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0607813Z               "line": 11590
2026-06-23T09:38:03.0607909Z             }
2026-06-23T09:38:03.0608002Z           ]
2026-06-23T09:38:03.0608106Z         }
2026-06-23T09:38:03.0608198Z       }
2026-06-23T09:38:03.0608305Z     },
2026-06-23T09:38:03.0608409Z     {
2026-06-23T09:38:03.0608520Z       "id": "REQ-MESH-5",
2026-06-23T09:38:03.0610035Z       "title": "Hard cutover from pairwise trust: delete peers.json + the is_trusted authorization path (no migration — expendable test fleet, re-pairs fresh under the new model, user decision 2026-06-08). Warn-on-change DEMOTED from a gate to an awareness notice anchored on machine_id (not label): 'machine M, last seen as K1, now presents K2' — fires the same event as the REQ-SUBNET-7 re-pair overwrite. The TrustStore/peers.json code and its call sites are removed, not left dead.",
2026-06-23T09:38:03.0610146Z       "requiredStages": [
2026-06-23T09:38:03.0610260Z         "impl",
2026-06-23T09:38:03.0610365Z         "unit"
2026-06-23T09:38:03.0610457Z       ],
2026-06-23T09:38:03.0610565Z       "stages": {
2026-06-23T09:38:03.0610668Z         "doc": {
2026-06-23T09:38:03.0610783Z           "complete": false,
2026-06-23T09:38:03.0610886Z           "evidence": []
2026-06-23T09:38:03.0610990Z         },
2026-06-23T09:38:03.0611096Z         "impl": {
2026-06-23T09:38:03.0611215Z           "complete": true,
2026-06-23T09:38:03.0611324Z           "evidence": [
2026-06-23T09:38:03.0611425Z             {
2026-06-23T09:38:03.0611572Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0611677Z               "line": 61
2026-06-23T09:38:03.0611783Z             },
2026-06-23T09:38:03.0611883Z             {
2026-06-23T09:38:03.0612031Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0612140Z               "line": 109
2026-06-23T09:38:03.0612240Z             },
2026-06-23T09:38:03.0612341Z             {
2026-06-23T09:38:03.0612583Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.0612699Z               "line": 104
2026-06-23T09:38:03.0612807Z             },
2026-06-23T09:38:03.0612903Z             {
2026-06-23T09:38:03.0613056Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.0613165Z               "line": 105
2026-06-23T09:38:03.0613271Z             },
2026-06-23T09:38:03.0613474Z             {
2026-06-23T09:38:03.0613627Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0613738Z               "line": 85
2026-06-23T09:38:03.0613836Z             },
2026-06-23T09:38:03.0613937Z             {
2026-06-23T09:38:03.0614085Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0614198Z               "line": 250
2026-06-23T09:38:03.0614295Z             },
2026-06-23T09:38:03.0614400Z             {
2026-06-23T09:38:03.0614552Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0614662Z               "line": 314
2026-06-23T09:38:03.0614771Z             },
2026-06-23T09:38:03.0614871Z             {
2026-06-23T09:38:03.0615024Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0615138Z               "line": 767
2026-06-23T09:38:03.0615234Z             },
2026-06-23T09:38:03.0615334Z             {
2026-06-23T09:38:03.0615462Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0615573Z               "line": 101
2026-06-23T09:38:03.0615667Z             },
2026-06-23T09:38:03.0615767Z             {
2026-06-23T09:38:03.0615914Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0616017Z               "line": 193
2026-06-23T09:38:03.0616121Z             }
2026-06-23T09:38:03.0616217Z           ]
2026-06-23T09:38:03.0616318Z         },
2026-06-23T09:38:03.0616427Z         "int": {
2026-06-23T09:38:03.0616537Z           "complete": false,
2026-06-23T09:38:03.0616638Z           "evidence": []
2026-06-23T09:38:03.0616741Z         },
2026-06-23T09:38:03.0616848Z         "unit": {
2026-06-23T09:38:03.0616962Z           "complete": true,
2026-06-23T09:38:03.0617075Z           "evidence": [
2026-06-23T09:38:03.0617177Z             {
2026-06-23T09:38:03.0617328Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0617443Z               "line": 1009
2026-06-23T09:38:03.0617543Z             },
2026-06-23T09:38:03.0617652Z             {
2026-06-23T09:38:03.0617787Z               "path": "crates/spt-store/src/roster.rs",
2026-06-23T09:38:03.0617900Z               "line": 462
2026-06-23T09:38:03.0618000Z             }
2026-06-23T09:38:03.0618111Z           ]
2026-06-23T09:38:03.0618210Z         }
2026-06-23T09:38:03.0618315Z       }
2026-06-23T09:38:03.0618421Z     },
2026-06-23T09:38:03.0618521Z     {
2026-06-23T09:38:03.0618634Z       "id": "REQ-MESH-6",
2026-06-23T09:38:03.0619971Z       "title": "Concurrent liveness probes: `spt subnet status --nodes` fans out its offline/serve-probes (REQ-SUBNET-5) CONCURRENTLY — total wall-time bounded by the single-probe ceiling (~3s), never k×ceiling. The mesh makes a node see ALL members (many possibly offline), so a serial probe loop would be offline_count×3s. (Planning verifies the current REQ-SUBNET-5 probe loop's behavior and fixes it if serial.)",
2026-06-23T09:38:03.0620081Z       "requiredStages": [
2026-06-23T09:38:03.0620191Z         "impl",
2026-06-23T09:38:03.0620295Z         "unit"
2026-06-23T09:38:03.0620406Z       ],
2026-06-23T09:38:03.0620495Z       "stages": {
2026-06-23T09:38:03.0620596Z         "doc": {
2026-06-23T09:38:03.0620716Z           "complete": false,
2026-06-23T09:38:03.0620824Z           "evidence": []
2026-06-23T09:38:03.0620930Z         },
2026-06-23T09:38:03.0621036Z         "impl": {
2026-06-23T09:38:03.0621149Z           "complete": true,
2026-06-23T09:38:03.0621252Z           "evidence": [
2026-06-23T09:38:03.0621357Z             {
2026-06-23T09:38:03.0621494Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0621747Z               "line": 4836
2026-06-23T09:38:03.0621855Z             }
2026-06-23T09:38:03.0621942Z           ]
2026-06-23T09:38:03.0622047Z         },
2026-06-23T09:38:03.0622152Z         "int": {
2026-06-23T09:38:03.0622272Z           "complete": false,
2026-06-23T09:38:03.0622381Z           "evidence": []
2026-06-23T09:38:03.0622481Z         },
2026-06-23T09:38:03.0622592Z         "unit": {
2026-06-23T09:38:03.0622800Z           "complete": true,
2026-06-23T09:38:03.0622916Z           "evidence": [
2026-06-23T09:38:03.0623015Z             {
2026-06-23T09:38:03.0623148Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0623259Z               "line": 12140
2026-06-23T09:38:03.0623353Z             },
2026-06-23T09:38:03.0623449Z             {
2026-06-23T09:38:03.0623574Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0623682Z               "line": 12167
2026-06-23T09:38:03.0623778Z             },
2026-06-23T09:38:03.0623884Z             {
2026-06-23T09:38:03.0624015Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0624124Z               "line": 12191
2026-06-23T09:38:03.0624230Z             }
2026-06-23T09:38:03.0624335Z           ]
2026-06-23T09:38:03.0624439Z         }
2026-06-23T09:38:03.0624540Z       }
2026-06-23T09:38:03.0624645Z     },
2026-06-23T09:38:03.0624744Z     {
2026-06-23T09:38:03.0624850Z       "id": "REQ-MIGRATE-1",
2026-06-23T09:38:03.0625054Z       "title": "Auto-detect and migrate a legacy claude_skill_owl install",
2026-06-23T09:38:03.0625160Z       "requiredStages": [],
2026-06-23T09:38:03.0625274Z       "stages": {
2026-06-23T09:38:03.0625378Z         "doc": {
2026-06-23T09:38:03.0625489Z           "complete": false,
2026-06-23T09:38:03.0625603Z           "evidence": []
2026-06-23T09:38:03.0625698Z         },
2026-06-23T09:38:03.0625804Z         "impl": {
2026-06-23T09:38:03.0625913Z           "complete": false,
2026-06-23T09:38:03.0626017Z           "evidence": []
2026-06-23T09:38:03.0626124Z         },
2026-06-23T09:38:03.0626223Z         "int": {
2026-06-23T09:38:03.0626336Z           "complete": false,
2026-06-23T09:38:03.0626441Z           "evidence": []
2026-06-23T09:38:03.0626550Z         },
2026-06-23T09:38:03.0626653Z         "unit": {
2026-06-23T09:38:03.0626768Z           "complete": false,
2026-06-23T09:38:03.0626869Z           "evidence": []
2026-06-23T09:38:03.0626972Z         }
2026-06-23T09:38:03.0627078Z       }
2026-06-23T09:38:03.0627173Z     },
2026-06-23T09:38:03.0627277Z     {
2026-06-23T09:38:03.0627388Z       "id": "REQ-MSG-1",
2026-06-23T09:38:03.0627865Z       "title": "Local message delivery: TCP-first to a registered address, spool fallback when offline; id->address via registry (stale-clean first); reply routing (__REPLY_TO__)",
2026-06-23T09:38:03.0627979Z       "requiredStages": [
2026-06-23T09:38:03.0628090Z         "impl",
2026-06-23T09:38:03.0628194Z         "unit",
2026-06-23T09:38:03.0628294Z         "int"
2026-06-23T09:38:03.0628405Z       ],
2026-06-23T09:38:03.0628503Z       "stages": {
2026-06-23T09:38:03.0628604Z         "doc": {
2026-06-23T09:38:03.0628714Z           "complete": false,
2026-06-23T09:38:03.0628827Z           "evidence": []
2026-06-23T09:38:03.0628933Z         },
2026-06-23T09:38:03.0629109Z         "impl": {
2026-06-23T09:38:03.0629227Z           "complete": true,
2026-06-23T09:38:03.0629332Z           "evidence": [
2026-06-23T09:38:03.0629435Z             {
2026-06-23T09:38:03.0629587Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0629688Z               "line": 28
2026-06-23T09:38:03.0629797Z             },
2026-06-23T09:38:03.0629887Z             {
2026-06-23T09:38:03.0630031Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0630125Z               "line": 94
2026-06-23T09:38:03.0630231Z             },
2026-06-23T09:38:03.0630336Z             {
2026-06-23T09:38:03.0630469Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0630570Z               "line": 127
2026-06-23T09:38:03.0630660Z             },
2026-06-23T09:38:03.0630870Z             {
2026-06-23T09:38:03.0631003Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0631118Z               "line": 149
2026-06-23T09:38:03.0631214Z             },
2026-06-23T09:38:03.0631318Z             {
2026-06-23T09:38:03.0631457Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0631553Z               "line": 174
2026-06-23T09:38:03.0631756Z             },
2026-06-23T09:38:03.0631860Z             {
2026-06-23T09:38:03.0632006Z               "path": "crates/spt-msg/src/listener.rs",
2026-06-23T09:38:03.0632120Z               "line": 18
2026-06-23T09:38:03.0632226Z             },
2026-06-23T09:38:03.0632331Z             {
2026-06-23T09:38:03.0632459Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:03.0632569Z               "line": 13
2026-06-23T09:38:03.0632664Z             },
2026-06-23T09:38:03.0632773Z             {
2026-06-23T09:38:03.0632908Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:03.0633017Z               "line": 62
2026-06-23T09:38:03.0633122Z             },
2026-06-23T09:38:03.0633208Z             {
2026-06-23T09:38:03.0633336Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0633442Z               "line": 13
2026-06-23T09:38:03.0633551Z             }
2026-06-23T09:38:03.0633656Z           ]
2026-06-23T09:38:03.0633757Z         },
2026-06-23T09:38:03.0633866Z         "int": {
2026-06-23T09:38:03.0633976Z           "complete": true,
2026-06-23T09:38:03.0634086Z           "evidence": [
2026-06-23T09:38:03.0634190Z             {
2026-06-23T09:38:03.0634357Z               "path": "crates/spt-msg/tests/killer_quickstart.rs",
2026-06-23T09:38:03.0634463Z               "line": 9
2026-06-23T09:38:03.0634561Z             },
2026-06-23T09:38:03.0634670Z             {
2026-06-23T09:38:03.0634829Z               "path": "crates/spt-msg/tests/killer_quickstart.rs",
2026-06-23T09:38:03.0634942Z               "line": 56
2026-06-23T09:38:03.0635037Z             },
2026-06-23T09:38:03.0635148Z             {
2026-06-23T09:38:03.0635299Z               "path": "crates/spt-msg/tests/killer_quickstart.rs",
2026-06-23T09:38:03.0635406Z               "line": 113
2026-06-23T09:38:03.0635505Z             }
2026-06-23T09:38:03.0635609Z           ]
2026-06-23T09:38:03.0635721Z         },
2026-06-23T09:38:03.0635825Z         "unit": {
2026-06-23T09:38:03.0635934Z           "complete": true,
2026-06-23T09:38:03.0636045Z           "evidence": [
2026-06-23T09:38:03.0636144Z             {
2026-06-23T09:38:03.0636292Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0636398Z               "line": 203
2026-06-23T09:38:03.0636506Z             },
2026-06-23T09:38:03.0636602Z             {
2026-06-23T09:38:03.0636750Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0636863Z               "line": 232
2026-06-23T09:38:03.0636963Z             },
2026-06-23T09:38:03.0637072Z             {
2026-06-23T09:38:03.0637209Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0637323Z               "line": 277
2026-06-23T09:38:03.0637425Z             },
2026-06-23T09:38:03.0637532Z             {
2026-06-23T09:38:03.0637672Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0637776Z               "line": 300
2026-06-23T09:38:03.0637885Z             },
2026-06-23T09:38:03.0637987Z             {
2026-06-23T09:38:03.0638119Z               "path": "crates/spt-msg/src/deliver.rs",
2026-06-23T09:38:03.0638220Z               "line": 325
2026-06-23T09:38:03.0638325Z             },
2026-06-23T09:38:03.0640883Z             {
2026-06-23T09:38:03.0641067Z               "path": "crates/spt-msg/src/listener.rs",
2026-06-23T09:38:03.0641188Z               "line": 204
2026-06-23T09:38:03.0641292Z             },
2026-06-23T09:38:03.0641397Z             {
2026-06-23T09:38:03.0641545Z               "path": "crates/spt-msg/src/listener.rs",
2026-06-23T09:38:03.0641659Z               "line": 237
2026-06-23T09:38:03.0641906Z             },
2026-06-23T09:38:03.0642012Z             {
2026-06-23T09:38:03.0642156Z               "path": "crates/spt-msg/src/listener.rs",
2026-06-23T09:38:03.0642264Z               "line": 251
2026-06-23T09:38:03.0642372Z             },
2026-06-23T09:38:03.0642469Z             {
2026-06-23T09:38:03.0642609Z               "path": "crates/spt-msg/src/listener.rs",
2026-06-23T09:38:03.0642719Z               "line": 263
2026-06-23T09:38:03.0642914Z             },
2026-06-23T09:38:03.0643024Z             {
2026-06-23T09:38:03.0643158Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:03.0643262Z               "line": 162
2026-06-23T09:38:03.0643368Z             },
2026-06-23T09:38:03.0643468Z             {
2026-06-23T09:38:03.0643601Z               "path": "crates/spt-msg/src/ring.rs",
2026-06-23T09:38:03.0643712Z               "line": 242
2026-06-23T09:38:03.0643811Z             },
2026-06-23T09:38:03.0643910Z             {
2026-06-23T09:38:03.0644046Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0644159Z               "line": 134
2026-06-23T09:38:03.0644254Z             },
2026-06-23T09:38:03.0644360Z             {
2026-06-23T09:38:03.0644483Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0644593Z               "line": 153
2026-06-23T09:38:03.0644690Z             }
2026-06-23T09:38:03.0644792Z           ]
2026-06-23T09:38:03.0644898Z         }
2026-06-23T09:38:03.0644995Z       }
2026-06-23T09:38:03.0645103Z     },
2026-06-23T09:38:03.0645202Z     {
2026-06-23T09:38:03.0645312Z       "id": "REQ-MSG-2",
2026-06-23T09:38:03.0645617Z       "title": "spt binary CLI surface: send/ring/ready(+--once)/list/stop/whoami, stable arg shapes + exit codes",
2026-06-23T09:38:03.0645737Z       "requiredStages": [
2026-06-23T09:38:03.0645846Z         "impl",
2026-06-23T09:38:03.0645947Z         "unit"
2026-06-23T09:38:03.0646051Z       ],
2026-06-23T09:38:03.0646156Z       "stages": {
2026-06-23T09:38:03.0646266Z         "doc": {
2026-06-23T09:38:03.0646371Z           "complete": false,
2026-06-23T09:38:03.0646489Z           "evidence": []
2026-06-23T09:38:03.0646596Z         },
2026-06-23T09:38:03.0646699Z         "impl": {
2026-06-23T09:38:03.0646814Z           "complete": true,
2026-06-23T09:38:03.0646925Z           "evidence": [
2026-06-23T09:38:03.0647028Z             {
2026-06-23T09:38:03.0647162Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0647268Z               "line": 11
2026-06-23T09:38:03.0647371Z             },
2026-06-23T09:38:03.0647471Z             {
2026-06-23T09:38:03.0647599Z               "path": "crates/spt/src/main.rs",
2026-06-23T09:38:03.0647702Z               "line": 8
2026-06-23T09:38:03.0647802Z             }
2026-06-23T09:38:03.0647902Z           ]
2026-06-23T09:38:03.0648007Z         },
2026-06-23T09:38:03.0648116Z         "int": {
2026-06-23T09:38:03.0648232Z           "complete": false,
2026-06-23T09:38:03.0648341Z           "evidence": []
2026-06-23T09:38:03.0648441Z         },
2026-06-23T09:38:03.0648552Z         "unit": {
2026-06-23T09:38:03.0648661Z           "complete": true,
2026-06-23T09:38:03.0648765Z           "evidence": [
2026-06-23T09:38:03.0648876Z             {
2026-06-23T09:38:03.0649080Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0649190Z               "line": 9094
2026-06-23T09:38:03.0649295Z             },
2026-06-23T09:38:03.0649399Z             {
2026-06-23T09:38:03.0649529Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0649638Z               "line": 9136
2026-06-23T09:38:03.0649743Z             },
2026-06-23T09:38:03.0649830Z             {
2026-06-23T09:38:03.0649952Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0650058Z               "line": 9185
2026-06-23T09:38:03.0650149Z             },
2026-06-23T09:38:03.0650248Z             {
2026-06-23T09:38:03.0650371Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0650481Z               "line": 9208
2026-06-23T09:38:03.0650584Z             },
2026-06-23T09:38:03.0650875Z             {
2026-06-23T09:38:03.0651008Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0651123Z               "line": 11345
2026-06-23T09:38:03.0651223Z             },
2026-06-23T09:38:03.0651327Z             {
2026-06-23T09:38:03.0651448Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0651547Z               "line": 11354
2026-06-23T09:38:03.0651656Z             },
2026-06-23T09:38:03.0651852Z             {
2026-06-23T09:38:03.0651985Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0652091Z               "line": 11368
2026-06-23T09:38:03.0652190Z             }
2026-06-23T09:38:03.0652296Z           ]
2026-06-23T09:38:03.0652392Z         }
2026-06-23T09:38:03.0652490Z       }
2026-06-23T09:38:03.0652581Z     },
2026-06-23T09:38:03.0652683Z     {
2026-06-23T09:38:03.0652791Z       "id": "REQ-MSG-3",
2026-06-23T09:38:03.0653212Z       "title": "Ready-agent lifecycle: register perch (info.json + listener + registry address) on ready, drain spooled backlog on startup, clean teardown",
2026-06-23T09:38:03.0653327Z       "requiredStages": [
2026-06-23T09:38:03.0653428Z         "impl",
2026-06-23T09:38:03.0653536Z         "unit",
2026-06-23T09:38:03.0653637Z         "int"
2026-06-23T09:38:03.0653742Z       ],
2026-06-23T09:38:03.0653836Z       "stages": {
2026-06-23T09:38:03.0653937Z         "doc": {
2026-06-23T09:38:03.0654052Z           "complete": false,
2026-06-23T09:38:03.0654156Z           "evidence": []
2026-06-23T09:38:03.0654252Z         },
2026-06-23T09:38:03.0654347Z         "impl": {
2026-06-23T09:38:03.0654466Z           "complete": true,
2026-06-23T09:38:03.0654567Z           "evidence": [
2026-06-23T09:38:03.0654667Z             {
2026-06-23T09:38:03.0654809Z               "path": "crates/spt-msg/src/listener.rs",
2026-06-23T09:38:03.0654916Z               "line": 19
2026-06-23T09:38:03.0655024Z             },
2026-06-23T09:38:03.0655119Z             {
2026-06-23T09:38:03.0655259Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.0655367Z               "line": 21
2026-06-23T09:38:03.0655473Z             },
2026-06-23T09:38:03.0655574Z             {
2026-06-23T09:38:03.0655705Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.0655814Z               "line": 48
2026-06-23T09:38:03.0655915Z             },
2026-06-23T09:38:03.0656006Z             {
2026-06-23T09:38:03.0656139Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.0656254Z               "line": 174
2026-06-23T09:38:03.0656358Z             }
2026-06-23T09:38:03.0656453Z           ]
2026-06-23T09:38:03.0656559Z         },
2026-06-23T09:38:03.0656659Z         "int": {
2026-06-23T09:38:03.0656778Z           "complete": true,
2026-06-23T09:38:03.0656888Z           "evidence": [
2026-06-23T09:38:03.0656993Z             {
2026-06-23T09:38:03.0657166Z               "path": "crates/spt-msg/tests/killer_quickstart.rs",
2026-06-23T09:38:03.0657269Z               "line": 10
2026-06-23T09:38:03.0657374Z             },
2026-06-23T09:38:03.0657466Z             {
2026-06-23T09:38:03.0657626Z               "path": "crates/spt-msg/tests/killer_quickstart.rs",
2026-06-23T09:38:03.0657727Z               "line": 56
2026-06-23T09:38:03.0657824Z             }
2026-06-23T09:38:03.0657931Z           ]
2026-06-23T09:38:03.0658031Z         },
2026-06-23T09:38:03.0658136Z         "unit": {
2026-06-23T09:38:03.0658244Z           "complete": true,
2026-06-23T09:38:03.0658362Z           "evidence": [
2026-06-23T09:38:03.0658463Z             {
2026-06-23T09:38:03.0658596Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.0658706Z               "line": 228
2026-06-23T09:38:03.0658797Z             },
2026-06-23T09:38:03.0658901Z             {
2026-06-23T09:38:03.0659112Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.0659221Z               "line": 247
2026-06-23T09:38:03.0659325Z             },
2026-06-23T09:38:03.0659426Z             {
2026-06-23T09:38:03.0659674Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.0659784Z               "line": 270
2026-06-23T09:38:03.0659888Z             }
2026-06-23T09:38:03.0659989Z           ]
2026-06-23T09:38:03.0660089Z         }
2026-06-23T09:38:03.0660193Z       }
2026-06-23T09:38:03.0660299Z     },
2026-06-23T09:38:03.0660399Z     {
2026-06-23T09:38:03.0660508Z       "id": "REQ-MSG-4",
2026-06-23T09:38:03.0661402Z       "title": "Listener stream stdout emits EVENT envelope lines (sister-format, ADR-0001): parse the __REPLY_TO__ frame, pass pre-formed typed envelopes through verbatim (no double-wrap), compose <EVENT type=\"msg\" from=…> otherwise, chunk oversized lines into EVENT-PART",
2026-06-23T09:38:03.0661611Z       "requiredStages": [
2026-06-23T09:38:03.0661721Z         "impl",
2026-06-23T09:38:03.0661825Z         "unit",
2026-06-23T09:38:03.0661926Z         "int"
2026-06-23T09:38:03.0662031Z       ],
2026-06-23T09:38:03.0662126Z       "stages": {
2026-06-23T09:38:03.0662231Z         "doc": {
2026-06-23T09:38:03.0662341Z           "complete": false,
2026-06-23T09:38:03.0662450Z           "evidence": []
2026-06-23T09:38:03.0662550Z         },
2026-06-23T09:38:03.0662656Z         "impl": {
2026-06-23T09:38:03.0662770Z           "complete": true,
2026-06-23T09:38:03.0662880Z           "evidence": [
2026-06-23T09:38:03.0662976Z             {
2026-06-23T09:38:03.0663108Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0663219Z               "line": 19
2026-06-23T09:38:03.0663319Z             },
2026-06-23T09:38:03.0663412Z             {
2026-06-23T09:38:03.0663546Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0663650Z               "line": 46
2026-06-23T09:38:03.0663762Z             },
2026-06-23T09:38:03.0663859Z             {
2026-06-23T09:38:03.0664002Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.0664111Z               "line": 532
2026-06-23T09:38:03.0664212Z             },
2026-06-23T09:38:03.0664322Z             {
2026-06-23T09:38:03.0664454Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0664560Z               "line": 3760
2026-06-23T09:38:03.0664655Z             }
2026-06-23T09:38:03.0664764Z           ]
2026-06-23T09:38:03.0664870Z         },
2026-06-23T09:38:03.0664974Z         "int": {
2026-06-23T09:38:03.0665084Z           "complete": true,
2026-06-23T09:38:03.0665195Z           "evidence": [
2026-06-23T09:38:03.0665299Z             {
2026-06-23T09:38:03.0665437Z               "path": "crates/spt/tests/quickstart_e2e.rs",
2026-06-23T09:38:03.0665547Z               "line": 98
2026-06-23T09:38:03.0665651Z             },
2026-06-23T09:38:03.0665752Z             {
2026-06-23T09:38:03.0665894Z               "path": "crates/spt/tests/quickstart_e2e.rs",
2026-06-23T09:38:03.0665999Z               "line": 128
2026-06-23T09:38:03.0666105Z             }
2026-06-23T09:38:03.0666205Z           ]
2026-06-23T09:38:03.0666313Z         },
2026-06-23T09:38:03.0666418Z         "unit": {
2026-06-23T09:38:03.0666529Z           "complete": true,
2026-06-23T09:38:03.0666637Z           "evidence": [
2026-06-23T09:38:03.0666733Z             {
2026-06-23T09:38:03.0666872Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0666980Z               "line": 68
2026-06-23T09:38:03.0667086Z             },
2026-06-23T09:38:03.0667191Z             {
2026-06-23T09:38:03.0667319Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0667420Z               "line": 79
2026-06-23T09:38:03.0667524Z             },
2026-06-23T09:38:03.0667629Z             {
2026-06-23T09:38:03.0667759Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0667872Z               "line": 90
2026-06-23T09:38:03.0667977Z             },
2026-06-23T09:38:03.0668074Z             {
2026-06-23T09:38:03.0668206Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0668316Z               "line": 151
2026-06-23T09:38:03.0668421Z             }
2026-06-23T09:38:03.0668520Z           ]
2026-06-23T09:38:03.0668624Z         }
2026-06-23T09:38:03.0668808Z       }
2026-06-23T09:38:03.0668907Z     },
2026-06-23T09:38:03.0669086Z     {
2026-06-23T09:38:03.0669199Z       "id": "REQ-MSG-5",
2026-06-23T09:38:03.0669968Z       "title": "user-msg envelope kind + daemon identity gate: a Gateway endpoint / the local user's CLI author user-msg (the user's authority); agent-family senders re-stamped to plain msg; identity-gated never payload-trusted (KH 7.3/7.5); wire-additive (N-1 receivers tolerate the new type)",
2026-06-23T09:38:03.0670181Z       "requiredStages": [
2026-06-23T09:38:03.0670287Z         "doc",
2026-06-23T09:38:03.0670386Z         "impl",
2026-06-23T09:38:03.0670482Z         "unit"
2026-06-23T09:38:03.0670578Z       ],
2026-06-23T09:38:03.0670682Z       "stages": {
2026-06-23T09:38:03.0670787Z         "doc": {
2026-06-23T09:38:03.0670903Z           "complete": true,
2026-06-23T09:38:03.0671011Z           "evidence": [
2026-06-23T09:38:03.0671111Z             {
2026-06-23T09:38:03.0671227Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0671331Z               "line": 240
2026-06-23T09:38:03.0671434Z             }
2026-06-23T09:38:03.0671534Z           ]
2026-06-23T09:38:03.0671638Z         },
2026-06-23T09:38:03.0671742Z         "impl": {
2026-06-23T09:38:03.0671842Z           "complete": true,
2026-06-23T09:38:03.0671943Z           "evidence": [
2026-06-23T09:38:03.0672038Z             {
2026-06-23T09:38:03.0672181Z               "path": "crates/spt-daemon/src/wan.rs",
2026-06-23T09:38:03.0672286Z               "line": 60
2026-06-23T09:38:03.0672390Z             },
2026-06-23T09:38:03.0672491Z             {
2026-06-23T09:38:03.0672620Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:03.0672729Z               "line": 126
2026-06-23T09:38:03.0672835Z             },
2026-06-23T09:38:03.0672934Z             {
2026-06-23T09:38:03.0673077Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:03.0673188Z               "line": 135
2026-06-23T09:38:03.0673287Z             },
2026-06-23T09:38:03.0673382Z             {
2026-06-23T09:38:03.0673512Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:03.0673620Z               "line": 149
2026-06-23T09:38:03.0673716Z             },
2026-06-23T09:38:03.0673817Z             {
2026-06-23T09:38:03.0673954Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:03.0674058Z               "line": 178
2026-06-23T09:38:03.0674163Z             },
2026-06-23T09:38:03.0674266Z             {
2026-06-23T09:38:03.0674399Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0674505Z               "line": 3452
2026-06-23T09:38:03.0674605Z             }
2026-06-23T09:38:03.0674704Z           ]
2026-06-23T09:38:03.0674810Z         },
2026-06-23T09:38:03.0674919Z         "int": {
2026-06-23T09:38:03.0675014Z           "complete": true,
2026-06-23T09:38:03.0675125Z           "evidence": [
2026-06-23T09:38:03.0675225Z             {
2026-06-23T09:38:03.0675363Z               "path": "crates/spt/tests/gateway_e2e.rs",
2026-06-23T09:38:03.0675473Z               "line": 19
2026-06-23T09:38:03.0675577Z             }
2026-06-23T09:38:03.0675682Z           ]
2026-06-23T09:38:03.0675773Z         },
2026-06-23T09:38:03.0675878Z         "unit": {
2026-06-23T09:38:03.0675992Z           "complete": true,
2026-06-23T09:38:03.0676102Z           "evidence": [
2026-06-23T09:38:03.0676207Z             {
2026-06-23T09:38:03.0676341Z               "path": "crates/spt-daemon/src/wan.rs",
2026-06-23T09:38:03.0676455Z               "line": 192
2026-06-23T09:38:03.0676541Z             },
2026-06-23T09:38:03.0676642Z             {
2026-06-23T09:38:03.0676779Z               "path": "crates/spt-daemon/tests/wanmsg.rs",
2026-06-23T09:38:03.0676887Z               "line": 154
2026-06-23T09:38:03.0676978Z             },
2026-06-23T09:38:03.0677069Z             {
2026-06-23T09:38:03.0677206Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0677316Z               "line": 122
2026-06-23T09:38:03.0677427Z             },
2026-06-23T09:38:03.0677632Z             {
2026-06-23T09:38:03.0677766Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:03.0677869Z               "line": 452
2026-06-23T09:38:03.0677971Z             },
2026-06-23T09:38:03.0678065Z             {
2026-06-23T09:38:03.0678194Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:03.0678305Z               "line": 501
2026-06-23T09:38:03.0678413Z             },
2026-06-23T09:38:03.0678586Z             {
2026-06-23T09:38:03.0678722Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:03.0678828Z               "line": 517
2026-06-23T09:38:03.0678934Z             },
2026-06-23T09:38:03.0679113Z             {
2026-06-23T09:38:03.0679251Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:03.0679364Z               "line": 536
2026-06-23T09:38:03.0679459Z             },
2026-06-23T09:38:03.0679554Z             {
2026-06-23T09:38:03.0679688Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0679806Z               "line": 9037
2026-06-23T09:38:03.0679903Z             }
2026-06-23T09:38:03.0680007Z           ]
2026-06-23T09:38:03.0680112Z         }
2026-06-23T09:38:03.0680213Z       }
2026-06-23T09:38:03.0680313Z     },
2026-06-23T09:38:03.0680407Z     {
2026-06-23T09:38:03.0680518Z       "id": "REQ-MSG-6",
2026-06-23T09:38:03.0682152Z       "title": "cross-node Gateway user-msg honored via advertised endpoint_type: a user-msg from a Gateway-typed origin survives the receive_wan funnel as user-msg (vs the fail-closed re-stamp), keyed on the QUIC-handshake-proven origin node (never wire `from`). Trust boundary = subnet membership (operator-ratified 2026-06-13); no defense against an in-subnet member forging the type. Instance.endpoint_type is an additive serde-default field extending REQ-INST-7's data model. Absent/unknown type → re-stamp (N-1 rollout grace)",
2026-06-23T09:38:03.0682269Z       "requiredStages": [
2026-06-23T09:38:03.0682373Z         "doc",
2026-06-23T09:38:03.0682479Z         "impl",
2026-06-23T09:38:03.0682583Z         "unit"
2026-06-23T09:38:03.0682688Z       ],
2026-06-23T09:38:03.0682794Z       "stages": {
2026-06-23T09:38:03.0682884Z         "doc": {
2026-06-23T09:38:03.0682997Z           "complete": true,
2026-06-23T09:38:03.0683108Z           "evidence": [
2026-06-23T09:38:03.0683209Z             {
2026-06-23T09:38:03.0683332Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0683437Z               "line": 243
2026-06-23T09:38:03.0683542Z             }
2026-06-23T09:38:03.0683642Z           ]
2026-06-23T09:38:03.0683743Z         },
2026-06-23T09:38:03.0683847Z         "impl": {
2026-06-23T09:38:03.0683961Z           "complete": true,
2026-06-23T09:38:03.0684067Z           "evidence": [
2026-06-23T09:38:03.0684171Z             {
2026-06-23T09:38:03.0684325Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0684425Z               "line": 177
2026-06-23T09:38:03.0684523Z             },
2026-06-23T09:38:03.0684628Z             {
2026-06-23T09:38:03.0684779Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0684897Z               "line": 428
2026-06-23T09:38:03.0684998Z             },
2026-06-23T09:38:03.0685094Z             {
2026-06-23T09:38:03.0685240Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0685351Z               "line": 451
2026-06-23T09:38:03.0685456Z             },
2026-06-23T09:38:03.0685560Z             {
2026-06-23T09:38:03.0685694Z               "path": "crates/spt-daemon/src/wan.rs",
2026-06-23T09:38:03.0685799Z               "line": 89
2026-06-23T09:38:03.0685904Z             },
2026-06-23T09:38:03.0686009Z             {
2026-06-23T09:38:03.0686151Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0686262Z               "line": 155
2026-06-23T09:38:03.0686367Z             }
2026-06-23T09:38:03.0686471Z           ]
2026-06-23T09:38:03.0686572Z         },
2026-06-23T09:38:03.0686672Z         "int": {
2026-06-23T09:38:03.0686887Z           "complete": false,
2026-06-23T09:38:03.0687001Z           "evidence": []
2026-06-23T09:38:03.0687110Z         },
2026-06-23T09:38:03.0687216Z         "unit": {
2026-06-23T09:38:03.0687320Z           "complete": true,
2026-06-23T09:38:03.0687433Z           "evidence": [
2026-06-23T09:38:03.0687528Z             {
2026-06-23T09:38:03.0687687Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0687891Z               "line": 1746
2026-06-23T09:38:03.0688006Z             },
2026-06-23T09:38:03.0688105Z             {
2026-06-23T09:38:03.0688240Z               "path": "crates/spt-daemon/src/wan.rs",
2026-06-23T09:38:03.0688359Z               "line": 219
2026-06-23T09:38:03.0688454Z             }
2026-06-23T09:38:03.0688564Z           ]
2026-06-23T09:38:03.0688664Z         }
2026-06-23T09:38:03.0688768Z       }
2026-06-23T09:38:03.0688870Z     },
2026-06-23T09:38:03.0689044Z     {
2026-06-23T09:38:03.0689170Z       "id": "REQ-MSG-ENVELOPE",
2026-06-23T09:38:03.0692919Z       "title": "The <EVENT type=\"msg\" from=…>body</EVENT> envelope (spt-proto::event, the ADR-0001 grammar) is the SOLE canonical arriving-message format at EVERY harness arriving-message surface on an AGENT perch — api listen AND api poll/worker-poll, byte-identical (reverses REQ-MSG-4's 'hook drains keep the raw frame by contract'). SCOPE CARVE-OUT: the shell-command relay (api poll <shell-id> --link, cmd_poll_shell) is a distinct internal transport carrying RAW MAC'd stamped frames the shell child consumes verbatim — NOT an arriving-message surface, deliberately EXEMPT from <EVENT> composition (notify_shell_e2e guards this boundary). __REPLY_TO__ — mis-elevated during the clean-room port to a fake ADR-0001 'stable wire format' (spt-msg/wire.rs, lib.rs) — is REMOVED entirely (spool format_row, the spt-msg TCP frame, emit parse_frame); (from, body) carried structurally, <EVENT> composed once at the delivery boundary. No legacy sister-interop (spt-core never required it). Reply-correlation rebinds onto the structural from / <EVENT from=…> attribute (ADR-0009 access-gate + ADR-0012 Psyche/spt-live reply-target). Self-delimiting by construction → finding F-002 (non-self-delimiting multi-message poll) dissolves. ADR-0020.",
2026-06-23T09:38:03.0693049Z       "requiredStages": [
2026-06-23T09:38:03.0693153Z         "doc",
2026-06-23T09:38:03.0693262Z         "impl",
2026-06-23T09:38:03.0693363Z         "unit",
2026-06-23T09:38:03.0693477Z         "int"
2026-06-23T09:38:03.0693572Z       ],
2026-06-23T09:38:03.0693678Z       "stages": {
2026-06-23T09:38:03.0693778Z         "doc": {
2026-06-23T09:38:03.0693892Z           "complete": true,
2026-06-23T09:38:03.0694002Z           "evidence": [
2026-06-23T09:38:03.0694102Z             {
2026-06-23T09:38:03.0694360Z               "path": "docs/adr/0020-event-envelope-sole-arriving-format-reply-to-removed.md",
2026-06-23T09:38:03.0694469Z               "line": 47
2026-06-23T09:38:03.0694580Z             }
2026-06-23T09:38:03.0694684Z           ]
2026-06-23T09:38:03.0694779Z         },
2026-06-23T09:38:03.0694890Z         "impl": {
2026-06-23T09:38:03.0695004Z           "complete": true,
2026-06-23T09:38:03.0695112Z           "evidence": [
2026-06-23T09:38:03.0695207Z             {
2026-06-23T09:38:03.0695344Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0695462Z               "line": 20
2026-06-23T09:38:03.0695568Z             },
2026-06-23T09:38:03.0695673Z             {
2026-06-23T09:38:03.0695800Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0695911Z               "line": 33
2026-06-23T09:38:03.0696016Z             },
2026-06-23T09:38:03.0696120Z             {
2026-06-23T09:38:03.0696249Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0696350Z               "line": 47
2026-06-23T09:38:03.0696449Z             },
2026-06-23T09:38:03.0696550Z             {
2026-06-23T09:38:03.0696688Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0696793Z               "line": 58
2026-06-23T09:38:03.0697008Z             },
2026-06-23T09:38:03.0697113Z             {
2026-06-23T09:38:03.0697236Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0697341Z               "line": 14
2026-06-23T09:38:03.0697442Z             },
2026-06-23T09:38:03.0697551Z             {
2026-06-23T09:38:03.0697703Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0697819Z               "line": 27
2026-06-23T09:38:03.0698012Z             },
2026-06-23T09:38:03.0698103Z             {
2026-06-23T09:38:03.0698233Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0698336Z               "line": 40
2026-06-23T09:38:03.0698447Z             },
2026-06-23T09:38:03.0698547Z             {
2026-06-23T09:38:03.0698679Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:03.0698790Z               "line": 92
2026-06-23T09:38:03.0698891Z             },
2026-06-23T09:38:03.0699067Z             {
2026-06-23T09:38:03.0699214Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.0699323Z               "line": 143
2026-06-23T09:38:03.0699425Z             },
2026-06-23T09:38:03.0699528Z             {
2026-06-23T09:38:03.0699672Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.0699777Z               "line": 216
2026-06-23T09:38:03.0699876Z             },
2026-06-23T09:38:03.0699977Z             {
2026-06-23T09:38:03.0700121Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.0700229Z               "line": 533
2026-06-23T09:38:03.0700338Z             },
2026-06-23T09:38:03.0700443Z             {
2026-06-23T09:38:03.0700570Z               "path": "crates/spt/src/api/worker.rs",
2026-06-23T09:38:03.0700679Z               "line": 78
2026-06-23T09:38:03.0700781Z             },
2026-06-23T09:38:03.0700884Z             {
2026-06-23T09:38:03.0701013Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0701123Z               "line": 3761
2026-06-23T09:38:03.0701232Z             }
2026-06-23T09:38:03.0701333Z           ]
2026-06-23T09:38:03.0701438Z         },
2026-06-23T09:38:03.0701542Z         "int": {
2026-06-23T09:38:03.0701658Z           "complete": true,
2026-06-23T09:38:03.0701762Z           "evidence": [
2026-06-23T09:38:03.0701871Z             {
2026-06-23T09:38:03.0702025Z               "path": "crates/spt/tests/poll_envelope_e2e.rs",
2026-06-23T09:38:03.0702129Z               "line": 15
2026-06-23T09:38:03.0702234Z             }
2026-06-23T09:38:03.0702326Z           ]
2026-06-23T09:38:03.0702434Z         },
2026-06-23T09:38:03.0702530Z         "unit": {
2026-06-23T09:38:03.0702640Z           "complete": true,
2026-06-23T09:38:03.0702738Z           "evidence": [
2026-06-23T09:38:03.0702840Z             {
2026-06-23T09:38:03.0702979Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0703081Z               "line": 102
2026-06-23T09:38:03.0703176Z             },
2026-06-23T09:38:03.0703282Z             {
2026-06-23T09:38:03.0703418Z               "path": "crates/spt-msg/src/emit.rs",
2026-06-23T09:38:03.0703523Z               "line": 137
2026-06-23T09:38:03.0703623Z             },
2026-06-23T09:38:03.0703727Z             {
2026-06-23T09:38:03.0703857Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0703966Z               "line": 98
2026-06-23T09:38:03.0704061Z             },
2026-06-23T09:38:03.0704162Z             {
2026-06-23T09:38:03.0704295Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0704395Z               "line": 106
2026-06-23T09:38:03.0704500Z             },
2026-06-23T09:38:03.0704600Z             {
2026-06-23T09:38:03.0704729Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0704840Z               "line": 113
2026-06-23T09:38:03.0704943Z             },
2026-06-23T09:38:03.0705053Z             {
2026-06-23T09:38:03.0705174Z               "path": "crates/spt-msg/src/wire.rs",
2026-06-23T09:38:03.0705281Z               "line": 122
2026-06-23T09:38:03.0705382Z             }
2026-06-23T09:38:03.0705592Z           ]
2026-06-23T09:38:03.0705700Z         }
2026-06-23T09:38:03.0705801Z       }
2026-06-23T09:38:03.0705904Z     },
2026-06-23T09:38:03.0706003Z     {
2026-06-23T09:38:03.0706152Z       "id": "REQ-MSG-IDLE-TRANSLATION-BINARY",
2026-06-23T09:38:03.0711221Z       "title": "spt-hosted idle message delivery via an adapter TRANSLATION BINARY (ADR-0022). New opt-in manifest section `[message-idle-translation-binary]` = a TABLE carrying a `path` scalar (doyle OPT-B ruling: modeled as a table, not a bare top-level scalar, so a preceding section cannot silently absorb it + N+1 extensible; spt-core does NOT deny_unknown_fields, so a future key degrades gracefully); spt-core LIFECYCLE-manages it (spawn when the endpoint comes up, terminate when it goes down). The binary is a PURE stdin→stdout filter; spt-core owns EVERY PTY write. stdin (JSON-lines): `{type:\"init\",endpoint_id,node}` first · `{type:\"event\",envelope:\"<EVENT…>\"}` per inbound message (ADR-0020 envelope) · `{type:\"input\"}` content-free ping on each operator keystroke (binary tracks user-idle for its own idle-gated buffering; PTY input content NOT duplicated). stdout (JSON-lines): keystroke-commands `{key:…}`/`{delay_ms:…}`/`{text:…}` (extensible). spt-core applies the emitted sequence to the broker PTY ATOMICALLY (the W1 coordination — REQ-HAZARD-INJECT-CONTROL-COEXIST). The daemon poll feed is the ONE idle substrate for both topologies (Q1=A): harness-hosted consumer = the Monitor child, spt-hosted consumer = this binary; spt-core PREFERS a perch's poll listener if one exists (so spt-hosted can run a listener AND keep `spt rc`). Idle-only; busy/mid-turn = adapter hook-injection. Closes the current grounding gap: `api bind` registers no listener port → a listener-less spt-hosted perch SPOOLS inbound (only spooling+adapter-poll works today) → this delivers real inbound into the PTY. The v0.11.0 raw inject is the degenerate `{text:payload}{key:enter}` case. (v0.13.0)",
2026-06-23T09:38:03.0711468Z       "requiredStages": [
2026-06-23T09:38:03.0711578Z         "doc",
2026-06-23T09:38:03.0711693Z         "impl",
2026-06-23T09:38:03.0711792Z         "unit",
2026-06-23T09:38:03.0711903Z         "int"
2026-06-23T09:38:03.0712003Z       ],
2026-06-23T09:38:03.0712107Z       "stages": {
2026-06-23T09:38:03.0712203Z         "doc": {
2026-06-23T09:38:03.0712317Z           "complete": true,
2026-06-23T09:38:03.0712436Z           "evidence": [
2026-06-23T09:38:03.0712532Z             {
2026-06-23T09:38:03.0712708Z               "path": "docs-site/src/harness-contract/manifest.md",
2026-06-23T09:38:03.0712809Z               "line": 277
2026-06-23T09:38:03.0712909Z             },
2026-06-23T09:38:03.0713014Z             {
2026-06-23T09:38:03.0713129Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:03.0713233Z               "line": 214
2026-06-23T09:38:03.0713333Z             }
2026-06-23T09:38:03.0713439Z           ]
2026-06-23T09:38:03.0713548Z         },
2026-06-23T09:38:03.0713646Z         "impl": {
2026-06-23T09:38:03.0713766Z           "complete": true,
2026-06-23T09:38:03.0713875Z           "evidence": [
2026-06-23T09:38:03.0713982Z             {
2026-06-23T09:38:03.0714126Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.0714232Z               "line": 1043
2026-06-23T09:38:03.0714340Z             },
2026-06-23T09:38:03.0714441Z             {
2026-06-23T09:38:03.0714574Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.0714688Z               "line": 1097
2026-06-23T09:38:03.0714794Z             },
2026-06-23T09:38:03.0714889Z             {
2026-06-23T09:38:03.0715041Z               "path": "crates/spt-daemon/src/translation.rs",
2026-06-23T09:38:03.0715156Z               "line": 23
2026-06-23T09:38:03.0715251Z             },
2026-06-23T09:38:03.0715361Z             {
2026-06-23T09:38:03.0715503Z               "path": "crates/spt-daemon/src/translation.rs",
2026-06-23T09:38:03.0715613Z               "line": 91
2026-06-23T09:38:03.0715724Z             },
2026-06-23T09:38:03.0715823Z             {
2026-06-23T09:38:03.0716068Z               "path": "crates/spt-daemon/src/translation.rs",
2026-06-23T09:38:03.0716170Z               "line": 239
2026-06-23T09:38:03.0716274Z             },
2026-06-23T09:38:03.0716375Z             {
2026-06-23T09:38:03.0716530Z               "path": "crates/spt-daemon/src/translation.rs",
2026-06-23T09:38:03.0716640Z               "line": 287
2026-06-23T09:38:03.0716745Z             },
2026-06-23T09:38:03.0716925Z             {
2026-06-23T09:38:03.0717074Z               "path": "crates/spt-daemon/src/translation.rs",
2026-06-23T09:38:03.0717183Z               "line": 311
2026-06-23T09:38:03.0717284Z             },
2026-06-23T09:38:03.0717384Z             {
2026-06-23T09:38:03.0717536Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0717647Z               "line": 60
2026-06-23T09:38:03.0717751Z             },
2026-06-23T09:38:03.0717846Z             {
2026-06-23T09:38:03.0717995Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0718104Z               "line": 936
2026-06-23T09:38:03.0718208Z             }
2026-06-23T09:38:03.0718310Z           ]
2026-06-23T09:38:03.0718408Z         },
2026-06-23T09:38:03.0718518Z         "int": {
2026-06-23T09:38:03.0718630Z           "complete": true,
2026-06-23T09:38:03.0718742Z           "evidence": [
2026-06-23T09:38:03.0718848Z             {
2026-06-23T09:38:03.0719118Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:03.0719233Z               "line": 1214
2026-06-23T09:38:03.0719334Z             },
2026-06-23T09:38:03.0719443Z             {
2026-06-23T09:38:03.0719601Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:03.0719714Z               "line": 1319
2026-06-23T09:38:03.0719814Z             },
2026-06-23T09:38:03.0719915Z             {
2026-06-23T09:38:03.0720086Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:03.0720192Z               "line": 1387
2026-06-23T09:38:03.0720301Z             },
2026-06-23T09:38:03.0720396Z             {
2026-06-23T09:38:03.0720564Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:03.0720678Z               "line": 1480
2026-06-23T09:38:03.0720778Z             }
2026-06-23T09:38:03.0720879Z           ]
2026-06-23T09:38:03.0720983Z         },
2026-06-23T09:38:03.0721088Z         "unit": {
2026-06-23T09:38:03.0721194Z           "complete": true,
2026-06-23T09:38:03.0721311Z           "evidence": [
2026-06-23T09:38:03.0721411Z             {
2026-06-23T09:38:03.0721563Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.0721670Z               "line": 276
2026-06-23T09:38:03.0721776Z             },
2026-06-23T09:38:03.0721881Z             {
2026-06-23T09:38:03.0722028Z               "path": "crates/spt-daemon/src/translation.rs",
2026-06-23T09:38:03.0722138Z               "line": 350
2026-06-23T09:38:03.0722243Z             },
2026-06-23T09:38:03.0722338Z             {
2026-06-23T09:38:03.0722492Z               "path": "crates/spt-daemon/src/translation.rs",
2026-06-23T09:38:03.0722600Z               "line": 381
2026-06-23T09:38:03.0722706Z             },
2026-06-23T09:38:03.0722802Z             {
2026-06-23T09:38:03.0722944Z               "path": "crates/spt-daemon/src/translation.rs",
2026-06-23T09:38:03.0723049Z               "line": 411
2026-06-23T09:38:03.0723154Z             },
2026-06-23T09:38:03.0723259Z             {
2026-06-23T09:38:03.0723403Z               "path": "crates/spt-daemon/src/translation.rs",
2026-06-23T09:38:03.0723516Z               "line": 440
2026-06-23T09:38:03.0723611Z             },
2026-06-23T09:38:03.0723718Z             {
2026-06-23T09:38:03.0723868Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0723979Z               "line": 1228
2026-06-23T09:38:03.0724090Z             }
2026-06-23T09:38:03.0724188Z           ]
2026-06-23T09:38:03.0724287Z         }
2026-06-23T09:38:03.0724383Z       }
2026-06-23T09:38:03.0724580Z     },
2026-06-23T09:38:03.0724686Z     {
2026-06-23T09:38:03.0724796Z       "id": "REQ-NET-1",
2026-06-23T09:38:03.0725011Z       "title": "WAN messaging first-class, behind default-on net feature flag",
2026-06-23T09:38:03.0725125Z       "requiredStages": [
2026-06-23T09:38:03.0725234Z         "impl",
2026-06-23T09:38:03.0725330Z         "unit",
2026-06-23T09:38:03.0725435Z         "int"
2026-06-23T09:38:03.0725640Z       ],
2026-06-23T09:38:03.0725749Z       "stages": {
2026-06-23T09:38:03.0725849Z         "doc": {
2026-06-23T09:38:03.0725960Z           "complete": false,
2026-06-23T09:38:03.0726078Z           "evidence": []
2026-06-23T09:38:03.0726178Z         },
2026-06-23T09:38:03.0726289Z         "impl": {
2026-06-23T09:38:03.0726406Z           "complete": true,
2026-06-23T09:38:03.0726507Z           "evidence": [
2026-06-23T09:38:03.0726613Z             {
2026-06-23T09:38:03.0726759Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0726873Z               "line": 54
2026-06-23T09:38:03.0726978Z             },
2026-06-23T09:38:03.0727081Z             {
2026-06-23T09:38:03.0727229Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0729788Z               "line": 594
2026-06-23T09:38:03.0729913Z             },
2026-06-23T09:38:03.0730017Z             {
2026-06-23T09:38:03.0730165Z               "path": "crates/spt-daemon/src/wan.rs",
2026-06-23T09:38:03.0730279Z               "line": 130
2026-06-23T09:38:03.0730389Z             },
2026-06-23T09:38:03.0730485Z             {
2026-06-23T09:38:03.0730641Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0730747Z               "line": 97
2026-06-23T09:38:03.0730852Z             },
2026-06-23T09:38:03.0730951Z             {
2026-06-23T09:38:03.0731105Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0731219Z               "line": 159
2026-06-23T09:38:03.0731323Z             },
2026-06-23T09:38:03.0731425Z             {
2026-06-23T09:38:03.0731576Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0731687Z               "line": 175
2026-06-23T09:38:03.0731791Z             },
2026-06-23T09:38:03.0731890Z             {
2026-06-23T09:38:03.0732033Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0732141Z               "line": 190
2026-06-23T09:38:03.0732231Z             },
2026-06-23T09:38:03.0732331Z             {
2026-06-23T09:38:03.0732456Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0732564Z               "line": 271
2026-06-23T09:38:03.0732670Z             },
2026-06-23T09:38:03.0732770Z             {
2026-06-23T09:38:03.0732912Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0733018Z               "line": 306
2026-06-23T09:38:03.0733123Z             },
2026-06-23T09:38:03.0733227Z             {
2026-06-23T09:38:03.0733371Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0733485Z               "line": 312
2026-06-23T09:38:03.0733585Z             },
2026-06-23T09:38:03.0733676Z             {
2026-06-23T09:38:03.0733824Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0733929Z               "line": 318
2026-06-23T09:38:03.0734029Z             },
2026-06-23T09:38:03.0734134Z             {
2026-06-23T09:38:03.0734278Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0734381Z               "line": 334
2026-06-23T09:38:03.0734487Z             },
2026-06-23T09:38:03.0734578Z             {
2026-06-23T09:38:03.0734724Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0734828Z               "line": 354
2026-06-23T09:38:03.0734934Z             },
2026-06-23T09:38:03.0735032Z             {
2026-06-23T09:38:03.0735174Z               "path": "crates/spt-net/src/net/wanmsg.rs",
2026-06-23T09:38:03.0735285Z               "line": 35
2026-06-23T09:38:03.0735389Z             },
2026-06-23T09:38:03.0735619Z             {
2026-06-23T09:38:03.0735765Z               "path": "crates/spt-net/src/net/wanmsg.rs",
2026-06-23T09:38:03.0735876Z               "line": 85
2026-06-23T09:38:03.0735976Z             },
2026-06-23T09:38:03.0736066Z             {
2026-06-23T09:38:03.0736210Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:03.0736318Z               "line": 138
2026-06-23T09:38:03.0736515Z             },
2026-06-23T09:38:03.0736619Z             {
2026-06-23T09:38:03.0736753Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0736868Z               "line": 3603
2026-06-23T09:38:03.0736967Z             },
2026-06-23T09:38:03.0737072Z             {
2026-06-23T09:38:03.0737207Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.0737324Z               "line": 17
2026-06-23T09:38:03.0737418Z             }
2026-06-23T09:38:03.0737519Z           ]
2026-06-23T09:38:03.0737618Z         },
2026-06-23T09:38:03.0737722Z         "int": {
2026-06-23T09:38:03.0737832Z           "complete": true,
2026-06-23T09:38:03.0737946Z           "evidence": [
2026-06-23T09:38:03.0738051Z             {
2026-06-23T09:38:03.0738204Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.0738313Z               "line": 341
2026-06-23T09:38:03.0738419Z             },
2026-06-23T09:38:03.0738519Z             {
2026-06-23T09:38:03.0738670Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0738781Z               "line": 677
2026-06-23T09:38:03.0738885Z             },
2026-06-23T09:38:03.0739053Z             {
2026-06-23T09:38:03.0739210Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0739315Z               "line": 975
2026-06-23T09:38:03.0739421Z             }
2026-06-23T09:38:03.0739524Z           ]
2026-06-23T09:38:03.0739615Z         },
2026-06-23T09:38:03.0739726Z         "unit": {
2026-06-23T09:38:03.0739834Z           "complete": true,
2026-06-23T09:38:03.0739949Z           "evidence": [
2026-06-23T09:38:03.0740060Z             {
2026-06-23T09:38:03.0740205Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0740310Z               "line": 651
2026-06-23T09:38:03.0740411Z             },
2026-06-23T09:38:03.0740515Z             {
2026-06-23T09:38:03.0740663Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0740778Z               "line": 686
2026-06-23T09:38:03.0740877Z             },
2026-06-23T09:38:03.0740983Z             {
2026-06-23T09:38:03.0741140Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.0741244Z               "line": 944
2026-06-23T09:38:03.0741346Z             },
2026-06-23T09:38:03.0741445Z             {
2026-06-23T09:38:03.0741588Z               "path": "crates/spt-daemon/tests/wanmsg.rs",
2026-06-23T09:38:03.0741698Z               "line": 201
2026-06-23T09:38:03.0741798Z             },
2026-06-23T09:38:03.0741898Z             {
2026-06-23T09:38:03.0742046Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0742146Z               "line": 442
2026-06-23T09:38:03.0742242Z             },
2026-06-23T09:38:03.0742347Z             {
2026-06-23T09:38:03.0742493Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0742598Z               "line": 456
2026-06-23T09:38:03.0742697Z             },
2026-06-23T09:38:03.0742791Z             {
2026-06-23T09:38:03.0742939Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0743044Z               "line": 475
2026-06-23T09:38:03.0743143Z             },
2026-06-23T09:38:03.0743244Z             {
2026-06-23T09:38:03.0743387Z               "path": "crates/spt-net/src/net/wanmsg.rs",
2026-06-23T09:38:03.0743491Z               "line": 120
2026-06-23T09:38:03.0743588Z             },
2026-06-23T09:38:03.0743697Z             {
2026-06-23T09:38:03.0743836Z               "path": "crates/spt-net/src/net/wanmsg.rs",
2026-06-23T09:38:03.0743945Z               "line": 163
2026-06-23T09:38:03.0744150Z             },
2026-06-23T09:38:03.0744251Z             {
2026-06-23T09:38:03.0744393Z               "path": "crates/spt-store/src/spool.rs",
2026-06-23T09:38:03.0744499Z               "line": 530
2026-06-23T09:38:03.0744608Z             },
2026-06-23T09:38:03.0744713Z             {
2026-06-23T09:38:03.0744838Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.0744941Z               "line": 616
2026-06-23T09:38:03.0745133Z             },
2026-06-23T09:38:03.0745238Z             {
2026-06-23T09:38:03.0745369Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.0745475Z               "line": 1006
2026-06-23T09:38:03.0745578Z             }
2026-06-23T09:38:03.0745672Z           ]
2026-06-23T09:38:03.0745768Z         }
2026-06-23T09:38:03.0745869Z       }
2026-06-23T09:38:03.0745973Z     },
2026-06-23T09:38:03.0746068Z     {
2026-06-23T09:38:03.0746184Z       "id": "REQ-NET-2",
2026-06-23T09:38:03.0746402Z       "title": "n0 relay default + self-host knob + plain-language disclosure",
2026-06-23T09:38:03.0746517Z       "requiredStages": [
2026-06-23T09:38:03.0746626Z         "impl"
2026-06-23T09:38:03.0746726Z       ],
2026-06-23T09:38:03.0746841Z       "stages": {
2026-06-23T09:38:03.0746941Z         "doc": {
2026-06-23T09:38:03.0747056Z           "complete": false,
2026-06-23T09:38:03.0747170Z           "evidence": []
2026-06-23T09:38:03.0747270Z         },
2026-06-23T09:38:03.0747381Z         "impl": {
2026-06-23T09:38:03.0747490Z           "complete": true,
2026-06-23T09:38:03.0747599Z           "evidence": [
2026-06-23T09:38:03.0747696Z             {
2026-06-23T09:38:03.0747842Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:03.0747950Z               "line": 57
2026-06-23T09:38:03.0748046Z             },
2026-06-23T09:38:03.0748154Z             {
2026-06-23T09:38:03.0748301Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0748412Z               "line": 71
2026-06-23T09:38:03.0748516Z             },
2026-06-23T09:38:03.0748620Z             {
2026-06-23T09:38:03.0748769Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0748864Z               "line": 81
2026-06-23T09:38:03.0749046Z             },
2026-06-23T09:38:03.0749141Z             {
2026-06-23T09:38:03.0749279Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0749389Z               "line": 159
2026-06-23T09:38:03.0749498Z             },
2026-06-23T09:38:03.0749598Z             {
2026-06-23T09:38:03.0749741Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0749850Z               "line": 175
2026-06-23T09:38:03.0749947Z             },
2026-06-23T09:38:03.0750047Z             {
2026-06-23T09:38:03.0750185Z               "path": "crates/spt-net/src/net/endpoint.rs",
2026-06-23T09:38:03.0750286Z               "line": 190
2026-06-23T09:38:03.0750394Z             }
2026-06-23T09:38:03.0750494Z           ]
2026-06-23T09:38:03.0750596Z         },
2026-06-23T09:38:03.0750705Z         "int": {
2026-06-23T09:38:03.0750818Z           "complete": false,
2026-06-23T09:38:03.0750923Z           "evidence": []
2026-06-23T09:38:03.0751024Z         },
2026-06-23T09:38:03.0751127Z         "unit": {
2026-06-23T09:38:03.0751237Z           "complete": true,
2026-06-23T09:38:03.0751353Z           "evidence": [
2026-06-23T09:38:03.0751452Z             {
2026-06-23T09:38:03.0751591Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:03.0751705Z               "line": 402
2026-06-23T09:38:03.0751805Z             }
2026-06-23T09:38:03.0751911Z           ]
2026-06-23T09:38:03.0752000Z         }
2026-06-23T09:38:03.0752105Z       }
2026-06-23T09:38:03.0752192Z     },
2026-06-23T09:38:03.0752296Z     {
2026-06-23T09:38:03.0752401Z       "id": "REQ-NET-3",
2026-06-23T09:38:03.0752611Z       "title": "Cross-node Psyche sync over P2P replaces gh-repo-sync",
2026-06-23T09:38:03.0752720Z       "requiredStages": [
2026-06-23T09:38:03.0752826Z         "impl",
2026-06-23T09:38:03.0752926Z         "unit"
2026-06-23T09:38:03.0753120Z       ],
2026-06-23T09:38:03.0753234Z       "stages": {
2026-06-23T09:38:03.0753332Z         "doc": {
2026-06-23T09:38:03.0753442Z           "complete": false,
2026-06-23T09:38:03.0753552Z           "evidence": []
2026-06-23T09:38:03.0753647Z         },
2026-06-23T09:38:03.0753752Z         "impl": {
2026-06-23T09:38:03.0753857Z           "complete": true,
2026-06-23T09:38:03.0754056Z           "evidence": [
2026-06-23T09:38:03.0754158Z             {
2026-06-23T09:38:03.0754304Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0754415Z               "line": 39
2026-06-23T09:38:03.0754505Z             },
2026-06-23T09:38:03.0754605Z             {
2026-06-23T09:38:03.0754734Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0754848Z               "line": 182
2026-06-23T09:38:03.0754953Z             },
2026-06-23T09:38:03.0755054Z             {
2026-06-23T09:38:03.0755182Z               "path": "crates/spt-daemon/src/sync.rs",
2026-06-23T09:38:03.0755292Z               "line": 333
2026-06-23T09:38:03.0755398Z             },
2026-06-23T09:38:03.0755497Z             {
2026-06-23T09:38:03.0755640Z               "path": "crates/spt-net/src/net/sync.rs",
2026-06-23T09:38:03.0755756Z               "line": 36
2026-06-23T09:38:03.0755840Z             },
2026-06-23T09:38:03.0755943Z             {
2026-06-23T09:38:03.0756101Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0756219Z               "line": 158
2026-06-23T09:38:03.0756318Z             },
2026-06-23T09:38:03.0756419Z             {
2026-06-23T09:38:03.0756571Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0756677Z               "line": 238
2026-06-23T09:38:03.0756782Z             },
2026-06-23T09:38:03.0756876Z             {
2026-06-23T09:38:03.0757029Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0757130Z               "line": 259
2026-06-23T09:38:03.0757238Z             },
2026-06-23T09:38:03.0757344Z             {
2026-06-23T09:38:03.0757491Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0757601Z               "line": 317
2026-06-23T09:38:03.0757707Z             },
2026-06-23T09:38:03.0757806Z             {
2026-06-23T09:38:03.0757951Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0758064Z               "line": 336
2026-06-23T09:38:03.0758169Z             },
2026-06-23T09:38:03.0758265Z             {
2026-06-23T09:38:03.0758416Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0758520Z               "line": 374
2026-06-23T09:38:03.0758630Z             },
2026-06-23T09:38:03.0758733Z             {
2026-06-23T09:38:03.0758871Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0759062Z               "line": 419
2026-06-23T09:38:03.0759166Z             },
2026-06-23T09:38:03.0759267Z             {
2026-06-23T09:38:03.0759414Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0759529Z               "line": 432
2026-06-23T09:38:03.0759634Z             },
2026-06-23T09:38:03.0759734Z             {
2026-06-23T09:38:03.0759883Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:03.0759987Z               "line": 29
2026-06-23T09:38:03.0760091Z             },
2026-06-23T09:38:03.0760183Z             {
2026-06-23T09:38:03.0760325Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:03.0760430Z               "line": 72
2026-06-23T09:38:03.0760526Z             },
2026-06-23T09:38:03.0760631Z             {
2026-06-23T09:38:03.0760759Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:03.0760860Z               "line": 123
2026-06-23T09:38:03.0760959Z             }
2026-06-23T09:38:03.0761054Z           ]
2026-06-23T09:38:03.0761161Z         },
2026-06-23T09:38:03.0761255Z         "int": {
2026-06-23T09:38:03.0761368Z           "complete": false,
2026-06-23T09:38:03.0761589Z           "evidence": []
2026-06-23T09:38:03.0761697Z         },
2026-06-23T09:38:03.0761798Z         "unit": {
2026-06-23T09:38:03.0761903Z           "complete": true,
2026-06-23T09:38:03.0762016Z           "evidence": [
2026-06-23T09:38:03.0762113Z             {
2026-06-23T09:38:03.0762256Z               "path": "crates/spt-daemon/tests/sync.rs",
2026-06-23T09:38:03.0762365Z               "line": 223
2026-06-23T09:38:03.0762565Z             },
2026-06-23T09:38:03.0762665Z             {
2026-06-23T09:38:03.0762809Z               "path": "crates/spt-daemon/tests/sync.rs",
2026-06-23T09:38:03.0762914Z               "line": 351
2026-06-23T09:38:03.0763018Z             },
2026-06-23T09:38:03.0763120Z             {
2026-06-23T09:38:03.0763257Z               "path": "crates/spt-daemon/tests/sync.rs",
2026-06-23T09:38:03.0763362Z               "line": 504
2026-06-23T09:38:03.0763463Z             },
2026-06-23T09:38:03.0763561Z             {
2026-06-23T09:38:03.0763690Z               "path": "crates/spt-net/src/net/sync.rs",
2026-06-23T09:38:03.0763794Z               "line": 93
2026-06-23T09:38:03.0763897Z             },
2026-06-23T09:38:03.0763997Z             {
2026-06-23T09:38:03.0764137Z               "path": "crates/spt-net/src/net/sync.rs",
2026-06-23T09:38:03.0764240Z               "line": 142
2026-06-23T09:38:03.0764345Z             },
2026-06-23T09:38:03.0764450Z             {
2026-06-23T09:38:03.0764593Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:03.0764699Z               "line": 315
2026-06-23T09:38:03.0764804Z             },
2026-06-23T09:38:03.0764903Z             {
2026-06-23T09:38:03.0765038Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:03.0765142Z               "line": 355
2026-06-23T09:38:03.0765251Z             },
2026-06-23T09:38:03.0765348Z             {
2026-06-23T09:38:03.0765489Z               "path": "crates/spt-store/src/syncmerge.rs",
2026-06-23T09:38:03.0765600Z               "line": 494
2026-06-23T09:38:03.0765709Z             }
2026-06-23T09:38:03.0765809Z           ]
2026-06-23T09:38:03.0765905Z         }
2026-06-23T09:38:03.0766010Z       }
2026-06-23T09:38:03.0766109Z     },
2026-06-23T09:38:03.0766215Z     {
2026-06-23T09:38:03.0766335Z       "id": "REQ-NODE-IDENTITY",
2026-06-23T09:38:03.0766614Z       "title": "Ed25519 identity primitive: keypair, detached sign/verify, stable pubkey<->hex",
2026-06-23T09:38:03.0766731Z       "requiredStages": [
2026-06-23T09:38:03.0766835Z         "impl",
2026-06-23T09:38:03.0766946Z         "unit"
2026-06-23T09:38:03.0767041Z       ],
2026-06-23T09:38:03.0767141Z       "stages": {
2026-06-23T09:38:03.0767242Z         "doc": {
2026-06-23T09:38:03.0767351Z           "complete": false,
2026-06-23T09:38:03.0767455Z           "evidence": []
2026-06-23T09:38:03.0767552Z         },
2026-06-23T09:38:03.0767661Z         "impl": {
2026-06-23T09:38:03.0767770Z           "complete": true,
2026-06-23T09:38:03.0767881Z           "evidence": [
2026-06-23T09:38:03.0767985Z             {
2026-06-23T09:38:03.0768137Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0768248Z               "line": 60
2026-06-23T09:38:03.0768356Z             },
2026-06-23T09:38:03.0768462Z             {
2026-06-23T09:38:03.0768600Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0768710Z               "line": 68
2026-06-23T09:38:03.0768811Z             },
2026-06-23T09:38:03.0768920Z             {
2026-06-23T09:38:03.0769123Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0769228Z               "line": 86
2026-06-23T09:38:03.0769331Z             },
2026-06-23T09:38:03.0769426Z             {
2026-06-23T09:38:03.0769575Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0769674Z               "line": 120
2026-06-23T09:38:03.0769779Z             },
2026-06-23T09:38:03.0769880Z             {
2026-06-23T09:38:03.0770022Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0770232Z               "line": 127
2026-06-23T09:38:03.0770337Z             },
2026-06-23T09:38:03.0770438Z             {
2026-06-23T09:38:03.0770575Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0770680Z               "line": 143
2026-06-23T09:38:03.0770786Z             },
2026-06-23T09:38:03.0770885Z             {
2026-06-23T09:38:03.0771024Z               "path": "crates/spt-store/src/nodeid.rs",
2026-06-23T09:38:03.0771224Z               "line": 16
2026-06-23T09:38:03.0771334Z             }
2026-06-23T09:38:03.0771435Z           ]
2026-06-23T09:38:03.0771529Z         },
2026-06-23T09:38:03.0771634Z         "int": {
2026-06-23T09:38:03.0771745Z           "complete": false,
2026-06-23T09:38:03.0771857Z           "evidence": []
2026-06-23T09:38:03.0771957Z         },
2026-06-23T09:38:03.0772062Z         "unit": {
2026-06-23T09:38:03.0772172Z           "complete": true,
2026-06-23T09:38:03.0772281Z           "evidence": [
2026-06-23T09:38:03.0772377Z             {
2026-06-23T09:38:03.0772525Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0772634Z               "line": 199
2026-06-23T09:38:03.0772735Z             },
2026-06-23T09:38:03.0772840Z             {
2026-06-23T09:38:03.0772973Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0773078Z               "line": 218
2026-06-23T09:38:03.0773187Z             },
2026-06-23T09:38:03.0773283Z             {
2026-06-23T09:38:03.0773431Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0773540Z               "line": 234
2026-06-23T09:38:03.0773646Z             },
2026-06-23T09:38:03.0773750Z             {
2026-06-23T09:38:03.0773884Z               "path": "crates/spt-proto/src/identity.rs",
2026-06-23T09:38:03.0773995Z               "line": 256
2026-06-23T09:38:03.0774098Z             },
2026-06-23T09:38:03.0774206Z             {
2026-06-23T09:38:03.0774336Z               "path": "crates/spt-store/src/nodeid.rs",
2026-06-23T09:38:03.0774443Z               "line": 124
2026-06-23T09:38:03.0774538Z             },
2026-06-23T09:38:03.0774644Z             {
2026-06-23T09:38:03.0774786Z               "path": "crates/spt-store/src/nodeid.rs",
2026-06-23T09:38:03.0774896Z               "line": 140
2026-06-23T09:38:03.0775006Z             },
2026-06-23T09:38:03.0775105Z             {
2026-06-23T09:38:03.0775245Z               "path": "crates/spt-store/src/nodeid.rs",
2026-06-23T09:38:03.0775349Z               "line": 155
2026-06-23T09:38:03.0775453Z             }
2026-06-23T09:38:03.0775559Z           ]
2026-06-23T09:38:03.0775654Z         }
2026-06-23T09:38:03.0775758Z       }
2026-06-23T09:38:03.0775850Z     },
2026-06-23T09:38:03.0775960Z     {
2026-06-23T09:38:03.0776073Z       "id": "REQ-NOTIF-1",
2026-06-23T09:38:03.0776475Z       "title": "Notification primitive: per-subnet replicated spool, seen/dismissed, resurface-at-boundary, subsumes update+consent prompts",
2026-06-23T09:38:03.0776589Z       "requiredStages": [
2026-06-23T09:38:03.0776694Z         "impl",
2026-06-23T09:38:03.0776804Z         "unit",
2026-06-23T09:38:03.0776904Z         "int"
2026-06-23T09:38:03.0777012Z       ],
2026-06-23T09:38:03.0777117Z       "stages": {
2026-06-23T09:38:03.0777222Z         "doc": {
2026-06-23T09:38:03.0777339Z           "complete": false,
2026-06-23T09:38:03.0777439Z           "evidence": []
2026-06-23T09:38:03.0777539Z         },
2026-06-23T09:38:03.0777634Z         "impl": {
2026-06-23T09:38:03.0777753Z           "complete": true,
2026-06-23T09:38:03.0777864Z           "evidence": [
2026-06-23T09:38:03.0777972Z             {
2026-06-23T09:38:03.0778122Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0778226Z               "line": 514
2026-06-23T09:38:03.0778330Z             },
2026-06-23T09:38:03.0778431Z             {
2026-06-23T09:38:03.0778564Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0778669Z               "line": 30
2026-06-23T09:38:03.0778775Z             },
2026-06-23T09:38:03.0778879Z             {
2026-06-23T09:38:03.0779202Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0779322Z               "line": 69
2026-06-23T09:38:03.0779419Z             },
2026-06-23T09:38:03.0779522Z             {
2026-06-23T09:38:03.0779654Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0779765Z               "line": 93
2026-06-23T09:38:03.0779872Z             },
2026-06-23T09:38:03.0780063Z             {
2026-06-23T09:38:03.0780206Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0780311Z               "line": 107
2026-06-23T09:38:03.0780411Z             },
2026-06-23T09:38:03.0780516Z             {
2026-06-23T09:38:03.0780654Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0780769Z               "line": 142
2026-06-23T09:38:03.0780868Z             },
2026-06-23T09:38:03.0780969Z             {
2026-06-23T09:38:03.0781102Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0781217Z               "line": 187
2026-06-23T09:38:03.0781323Z             },
2026-06-23T09:38:03.0781412Z             {
2026-06-23T09:38:03.0781550Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0781657Z               "line": 258
2026-06-23T09:38:03.0781760Z             },
2026-06-23T09:38:03.0781860Z             {
2026-06-23T09:38:03.0781995Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0782113Z               "line": 372
2026-06-23T09:38:03.0782214Z             },
2026-06-23T09:38:03.0782310Z             {
2026-06-23T09:38:03.0782441Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0782551Z               "line": 479
2026-06-23T09:38:03.0782652Z             },
2026-06-23T09:38:03.0782761Z             {
2026-06-23T09:38:03.0782899Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0783004Z               "line": 24
2026-06-23T09:38:03.0783113Z             },
2026-06-23T09:38:03.0783214Z             {
2026-06-23T09:38:03.0783367Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0783470Z               "line": 34
2026-06-23T09:38:03.0783577Z             },
2026-06-23T09:38:03.0783681Z             {
2026-06-23T09:38:03.0783824Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0783939Z               "line": 60
2026-06-23T09:38:03.0784039Z             },
2026-06-23T09:38:03.0784149Z             {
2026-06-23T09:38:03.0784282Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0784391Z               "line": 82
2026-06-23T09:38:03.0784497Z             },
2026-06-23T09:38:03.0784597Z             {
2026-06-23T09:38:03.0784738Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0784848Z               "line": 94
2026-06-23T09:38:03.0784952Z             },
2026-06-23T09:38:03.0785055Z             {
2026-06-23T09:38:03.0785204Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:03.0785313Z               "line": 96
2026-06-23T09:38:03.0785408Z             },
2026-06-23T09:38:03.0785519Z             {
2026-06-23T09:38:03.0785665Z               "path": "crates/spt-daemon/src/pump/notif.rs",
2026-06-23T09:38:03.0785776Z               "line": 44
2026-06-23T09:38:03.0785876Z             },
2026-06-23T09:38:03.0785985Z             {
2026-06-23T09:38:03.0786129Z               "path": "crates/spt-net/src/net/notif.rs",
2026-06-23T09:38:03.0786238Z               "line": 20
2026-06-23T09:38:03.0786342Z             },
2026-06-23T09:38:03.0786444Z             {
2026-06-23T09:38:03.0786577Z               "path": "crates/spt-net/src/net/notif.rs",
2026-06-23T09:38:03.0786691Z               "line": 30
2026-06-23T09:38:03.0786797Z             },
2026-06-23T09:38:03.0786905Z             {
2026-06-23T09:38:03.0787040Z               "path": "crates/spt-net/src/net/notif.rs",
2026-06-23T09:38:03.0787154Z               "line": 50
2026-06-23T09:38:03.0787254Z             },
2026-06-23T09:38:03.0787350Z             {
2026-06-23T09:38:03.0787577Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0787696Z               "line": 28
2026-06-23T09:38:03.0787800Z             },
2026-06-23T09:38:03.0787903Z             {
2026-06-23T09:38:03.0788051Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0788190Z               "line": 126
2026-06-23T09:38:03.0788299Z             },
2026-06-23T09:38:03.0788472Z             {
2026-06-23T09:38:03.0788614Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0788715Z               "line": 161
2026-06-23T09:38:03.0788820Z             },
2026-06-23T09:38:03.0788924Z             {
2026-06-23T09:38:03.0789139Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0789253Z               "line": 202
2026-06-23T09:38:03.0789359Z             },
2026-06-23T09:38:03.0789462Z             {
2026-06-23T09:38:03.0789597Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0789707Z               "line": 213
2026-06-23T09:38:03.0789816Z             },
2026-06-23T09:38:03.0789917Z             {
2026-06-23T09:38:03.0790054Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0790158Z               "line": 238
2026-06-23T09:38:03.0790263Z             },
2026-06-23T09:38:03.0790357Z             {
2026-06-23T09:38:03.0790489Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0790604Z               "line": 261
2026-06-23T09:38:03.0790709Z             },
2026-06-23T09:38:03.0790813Z             {
2026-06-23T09:38:03.0790962Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.0791071Z               "line": 86
2026-06-23T09:38:03.0791166Z             }
2026-06-23T09:38:03.0791268Z           ]
2026-06-23T09:38:03.0791372Z         },
2026-06-23T09:38:03.0791476Z         "int": {
2026-06-23T09:38:03.0791582Z           "complete": true,
2026-06-23T09:38:03.0791696Z           "evidence": [
2026-06-23T09:38:03.0791796Z             {
2026-06-23T09:38:03.0791935Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.0792034Z               "line": 285
2026-06-23T09:38:03.0792139Z             },
2026-06-23T09:38:03.0792245Z             {
2026-06-23T09:38:03.0792387Z               "path": "crates/spt-daemon/tests/pump.rs",
2026-06-23T09:38:03.0792498Z               "line": 145
2026-06-23T09:38:03.0792602Z             },
2026-06-23T09:38:03.0792707Z             {
2026-06-23T09:38:03.0792856Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0792963Z               "line": 686
2026-06-23T09:38:03.0793067Z             },
2026-06-23T09:38:03.0793173Z             {
2026-06-23T09:38:03.0793306Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0793416Z               "line": 1104
2026-06-23T09:38:03.0793522Z             }
2026-06-23T09:38:03.0793617Z           ]
2026-06-23T09:38:03.0793716Z         },
2026-06-23T09:38:03.0793822Z         "unit": {
2026-06-23T09:38:03.0793932Z           "complete": true,
2026-06-23T09:38:03.0794045Z           "evidence": [
2026-06-23T09:38:03.0794146Z             {
2026-06-23T09:38:03.0794293Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0794403Z               "line": 572
2026-06-23T09:38:03.0794513Z             },
2026-06-23T09:38:03.0794613Z             {
2026-06-23T09:38:03.0794753Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0794861Z               "line": 636
2026-06-23T09:38:03.0794966Z             },
2026-06-23T09:38:03.0795072Z             {
2026-06-23T09:38:03.0795209Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0795327Z               "line": 740
2026-06-23T09:38:03.0795436Z             },
2026-06-23T09:38:03.0795530Z             {
2026-06-23T09:38:03.0795668Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0795769Z               "line": 772
2026-06-23T09:38:03.0795878Z             },
2026-06-23T09:38:03.0796089Z             {
2026-06-23T09:38:03.0796221Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0796341Z               "line": 840
2026-06-23T09:38:03.0796441Z             },
2026-06-23T09:38:03.0796545Z             {
2026-06-23T09:38:03.0796680Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0796798Z               "line": 898
2026-06-23T09:38:03.0796985Z             },
2026-06-23T09:38:03.0797089Z             {
2026-06-23T09:38:03.0797217Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0797324Z               "line": 1173
2026-06-23T09:38:03.0797428Z             },
2026-06-23T09:38:03.0797527Z             {
2026-06-23T09:38:03.0797667Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0797775Z               "line": 157
2026-06-23T09:38:03.0797876Z             },
2026-06-23T09:38:03.0797977Z             {
2026-06-23T09:38:03.0798113Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0798232Z               "line": 250
2026-06-23T09:38:03.0798332Z             },
2026-06-23T09:38:03.0798435Z             {
2026-06-23T09:38:03.0798578Z               "path": "crates/spt-daemon/src/notifsync.rs",
2026-06-23T09:38:03.0798688Z               "line": 273
2026-06-23T09:38:03.0798792Z             },
2026-06-23T09:38:03.0798888Z             {
2026-06-23T09:38:03.0799126Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:03.0799237Z               "line": 355
2026-06-23T09:38:03.0799341Z             },
2026-06-23T09:38:03.0799445Z             {
2026-06-23T09:38:03.0799595Z               "path": "crates/spt-daemon/src/psyrelay.rs",
2026-06-23T09:38:03.0799699Z               "line": 392
2026-06-23T09:38:03.0799804Z             },
2026-06-23T09:38:03.0799900Z             {
2026-06-23T09:38:03.0800052Z               "path": "crates/spt-daemon/tests/notifsync.rs",
2026-06-23T09:38:03.0800162Z               "line": 131
2026-06-23T09:38:03.0800267Z             },
2026-06-23T09:38:03.0800371Z             {
2026-06-23T09:38:03.0800520Z               "path": "crates/spt-net/src/net/notif.rs",
2026-06-23T09:38:03.0800624Z               "line": 72
2026-06-23T09:38:03.0800723Z             },
2026-06-23T09:38:03.0800823Z             {
2026-06-23T09:38:03.0800969Z               "path": "crates/spt-net/src/net/notif.rs",
2026-06-23T09:38:03.0801068Z               "line": 97
2026-06-23T09:38:03.0801169Z             },
2026-06-23T09:38:03.0801275Z             {
2026-06-23T09:38:03.0801411Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0801522Z               "line": 379
2026-06-23T09:38:03.0801617Z             },
2026-06-23T09:38:03.0801726Z             {
2026-06-23T09:38:03.0801861Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0801969Z               "line": 417
2026-06-23T09:38:03.0802080Z             },
2026-06-23T09:38:03.0802180Z             {
2026-06-23T09:38:03.0802312Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0802423Z               "line": 433
2026-06-23T09:38:03.0802528Z             },
2026-06-23T09:38:03.0802637Z             {
2026-06-23T09:38:03.0802762Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0802880Z               "line": 472
2026-06-23T09:38:03.0802971Z             },
2026-06-23T09:38:03.0803082Z             {
2026-06-23T09:38:03.0803214Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0803320Z               "line": 489
2026-06-23T09:38:03.0803430Z             },
2026-06-23T09:38:03.0803537Z             {
2026-06-23T09:38:03.0803681Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0803781Z               "line": 517
2026-06-23T09:38:03.0803890Z             },
2026-06-23T09:38:03.0803990Z             {
2026-06-23T09:38:03.0804129Z               "path": "crates/spt-store/src/notif.rs",
2026-06-23T09:38:03.0804248Z               "line": 548
2026-06-23T09:38:03.0804339Z             },
2026-06-23T09:38:03.0804553Z             {
2026-06-23T09:38:03.0804693Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.0804801Z               "line": 745
2026-06-23T09:38:03.0804896Z             }
2026-06-23T09:38:03.0805008Z           ]
2026-06-23T09:38:03.0805116Z         }
2026-06-23T09:38:03.0805216Z       }
2026-06-23T09:38:03.0807621Z     },
2026-06-23T09:38:03.0807740Z     {
2026-06-23T09:38:03.0808002Z       "id": "REQ-NOTIF-2",
2026-06-23T09:38:03.0808302Z       "title": "spt notify (agent-issued subnet notif) + notif_command manifest seam (harness + shell adapters)",
2026-06-23T09:38:03.0808417Z       "requiredStages": [
2026-06-23T09:38:03.0808523Z         "doc",
2026-06-23T09:38:03.0808627Z         "impl",
2026-06-23T09:38:03.0808735Z         "unit",
2026-06-23T09:38:03.0808836Z         "int"
2026-06-23T09:38:03.0809024Z       ],
2026-06-23T09:38:03.0809138Z       "stages": {
2026-06-23T09:38:03.0809244Z         "doc": {
2026-06-23T09:38:03.0809362Z           "complete": true,
2026-06-23T09:38:03.0809473Z           "evidence": [
2026-06-23T09:38:03.0809572Z             {
2026-06-23T09:38:03.0809695Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0809811Z               "line": 522
2026-06-23T09:38:03.0809916Z             },
2026-06-23T09:38:03.0810020Z             {
2026-06-23T09:38:03.0810150Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:03.0810254Z               "line": 131
2026-06-23T09:38:03.0810364Z             }
2026-06-23T09:38:03.0810455Z           ]
2026-06-23T09:38:03.0810554Z         },
2026-06-23T09:38:03.0810645Z         "impl": {
2026-06-23T09:38:03.0810760Z           "complete": true,
2026-06-23T09:38:03.0810865Z           "evidence": [
2026-06-23T09:38:03.0810969Z             {
2026-06-23T09:38:03.0811123Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0811226Z               "line": 287
2026-06-23T09:38:03.0811335Z             },
2026-06-23T09:38:03.0811435Z             {
2026-06-23T09:38:03.0811576Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0811686Z               "line": 301
2026-06-23T09:38:03.0811777Z             },
2026-06-23T09:38:03.0811886Z             {
2026-06-23T09:38:03.0812020Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0812120Z               "line": 326
2026-06-23T09:38:03.0812215Z             },
2026-06-23T09:38:03.0812320Z             {
2026-06-23T09:38:03.0812478Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.0812582Z               "line": 239
2026-06-23T09:38:03.0812688Z             },
2026-06-23T09:38:03.0812778Z             {
2026-06-23T09:38:03.0812930Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.0813041Z               "line": 95
2026-06-23T09:38:03.0813150Z             },
2026-06-23T09:38:03.0813250Z             {
2026-06-23T09:38:03.0813375Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0813479Z               "line": 2579
2026-06-23T09:38:03.0813570Z             },
2026-06-23T09:38:03.0813671Z             {
2026-06-23T09:38:03.0813793Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0813904Z               "line": 2628
2026-06-23T09:38:03.0814010Z             },
2026-06-23T09:38:03.0814112Z             {
2026-06-23T09:38:03.0814221Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0814327Z               "line": 2707
2026-06-23T09:38:03.0814436Z             },
2026-06-23T09:38:03.0814536Z             {
2026-06-23T09:38:03.0814651Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0814765Z               "line": 2746
2026-06-23T09:38:03.0814860Z             }
2026-06-23T09:38:03.0814957Z           ]
2026-06-23T09:38:03.0815047Z         },
2026-06-23T09:38:03.0815156Z         "int": {
2026-06-23T09:38:03.0815267Z           "complete": true,
2026-06-23T09:38:03.0815381Z           "evidence": [
2026-06-23T09:38:03.0815480Z             {
2026-06-23T09:38:03.0815733Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0815849Z               "line": 812
2026-06-23T09:38:03.0815953Z             },
2026-06-23T09:38:03.0816057Z             {
2026-06-23T09:38:03.0816202Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0816309Z               "line": 1347
2026-06-23T09:38:03.0816418Z             }
2026-06-23T09:38:03.0816519Z           ]
2026-06-23T09:38:03.0816717Z         },
2026-06-23T09:38:03.0816822Z         "unit": {
2026-06-23T09:38:03.0816932Z           "complete": true,
2026-06-23T09:38:03.0817041Z           "evidence": [
2026-06-23T09:38:03.0817136Z             {
2026-06-23T09:38:03.0817270Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0817379Z               "line": 1022
2026-06-23T09:38:03.0817481Z             },
2026-06-23T09:38:03.0817580Z             {
2026-06-23T09:38:03.0817722Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0817829Z               "line": 1090
2026-06-23T09:38:03.0817933Z             },
2026-06-23T09:38:03.0818037Z             {
2026-06-23T09:38:03.0818167Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0818276Z               "line": 9606
2026-06-23T09:38:03.0818371Z             },
2026-06-23T09:38:03.0818477Z             {
2026-06-23T09:38:03.0818595Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0818701Z               "line": 9661
2026-06-23T09:38:03.0818806Z             }
2026-06-23T09:38:03.0818905Z           ]
2026-06-23T09:38:03.0819079Z         }
2026-06-23T09:38:03.0819177Z       }
2026-06-23T09:38:03.0819271Z     },
2026-06-23T09:38:03.0819371Z     {
2026-06-23T09:38:03.0819504Z       "id": "REQ-PAIR-1",
2026-06-23T09:38:03.0819631Z       "title": "TOTP-seeded SPAKE2 pairing",
2026-06-23T09:38:03.0819732Z       "requiredStages": [
2026-06-23T09:38:03.0819842Z         "impl",
2026-06-23T09:38:03.0819936Z         "unit",
2026-06-23T09:38:03.0820038Z         "int"
2026-06-23T09:38:03.0820133Z       ],
2026-06-23T09:38:03.0820223Z       "stages": {
2026-06-23T09:38:03.0820328Z         "doc": {
2026-06-23T09:38:03.0820462Z           "complete": false,
2026-06-23T09:38:03.0820571Z           "evidence": []
2026-06-23T09:38:03.0820662Z         },
2026-06-23T09:38:03.0820771Z         "impl": {
2026-06-23T09:38:03.0820881Z           "complete": true,
2026-06-23T09:38:03.0820992Z           "evidence": [
2026-06-23T09:38:03.0821100Z             {
2026-06-23T09:38:03.0821258Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:03.0821383Z               "line": 27
2026-06-23T09:38:03.0821476Z             },
2026-06-23T09:38:03.0821578Z             {
2026-06-23T09:38:03.0821726Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:03.0821829Z               "line": 88
2026-06-23T09:38:03.0821929Z             },
2026-06-23T09:38:03.0822033Z             {
2026-06-23T09:38:03.0822184Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:03.0822298Z               "line": 110
2026-06-23T09:38:03.0822404Z             },
2026-06-23T09:38:03.0822508Z             {
2026-06-23T09:38:03.0822657Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:03.0822766Z               "line": 153
2026-06-23T09:38:03.0822866Z             },
2026-06-23T09:38:03.0822971Z             {
2026-06-23T09:38:03.0823118Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:03.0823253Z               "line": 182
2026-06-23T09:38:03.0823366Z             },
2026-06-23T09:38:03.0823466Z             {
2026-06-23T09:38:03.0823620Z               "path": "crates/spt-net/src/net/pairing/totp.rs",
2026-06-23T09:38:03.0823725Z               "line": 29
2026-06-23T09:38:03.0823834Z             },
2026-06-23T09:38:03.0823935Z             {
2026-06-23T09:38:03.0824106Z               "path": "crates/spt-net/src/net/pairing/transcript.rs",
2026-06-23T09:38:03.0824212Z               "line": 31
2026-06-23T09:38:03.0824320Z             },
2026-06-23T09:38:03.0824522Z             {
2026-06-23T09:38:03.0824677Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0824776Z               "line": 44
2026-06-23T09:38:03.0824873Z             },
2026-06-23T09:38:03.0824978Z             {
2026-06-23T09:38:03.0825135Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0825240Z               "line": 171
2026-06-23T09:38:03.0825459Z             },
2026-06-23T09:38:03.0825559Z             {
2026-06-23T09:38:03.0825716Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0825827Z               "line": 376
2026-06-23T09:38:03.0825921Z             }
2026-06-23T09:38:03.0826026Z           ]
2026-06-23T09:38:03.0826113Z         },
2026-06-23T09:38:03.0826221Z         "int": {
2026-06-23T09:38:03.0826331Z           "complete": true,
2026-06-23T09:38:03.0826442Z           "evidence": [
2026-06-23T09:38:03.0826541Z             {
2026-06-23T09:38:03.0826698Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0826814Z               "line": 647
2026-06-23T09:38:03.0826903Z             },
2026-06-23T09:38:03.0827007Z             {
2026-06-23T09:38:03.0827145Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0827253Z               "line": 889
2026-06-23T09:38:03.0827363Z             }
2026-06-23T09:38:03.0827449Z           ]
2026-06-23T09:38:03.0827553Z         },
2026-06-23T09:38:03.0827658Z         "unit": {
2026-06-23T09:38:03.0827783Z           "complete": true,
2026-06-23T09:38:03.0827892Z           "evidence": [
2026-06-23T09:38:03.0827997Z             {
2026-06-23T09:38:03.0828145Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:03.0828249Z               "line": 236
2026-06-23T09:38:03.0828346Z             },
2026-06-23T09:38:03.0828450Z             {
2026-06-23T09:38:03.0828597Z               "path": "crates/spt-net/src/net/pairing/spake.rs",
2026-06-23T09:38:03.0828709Z               "line": 349
2026-06-23T09:38:03.0828827Z             },
2026-06-23T09:38:03.0828931Z             {
2026-06-23T09:38:03.0829160Z               "path": "crates/spt-net/src/net/pairing/totp.rs",
2026-06-23T09:38:03.0829261Z               "line": 194
2026-06-23T09:38:03.0829357Z             },
2026-06-23T09:38:03.0829480Z             {
2026-06-23T09:38:03.0829629Z               "path": "crates/spt-net/src/net/pairing/totp.rs",
2026-06-23T09:38:03.0829747Z               "line": 216
2026-06-23T09:38:03.0829850Z             },
2026-06-23T09:38:03.0829951Z             {
2026-06-23T09:38:03.0830096Z               "path": "crates/spt-net/src/net/pairing/totp.rs",
2026-06-23T09:38:03.0830205Z               "line": 230
2026-06-23T09:38:03.0830311Z             },
2026-06-23T09:38:03.0830411Z             {
2026-06-23T09:38:03.0830564Z               "path": "crates/spt-net/src/net/pairing/totp.rs",
2026-06-23T09:38:03.0830669Z               "line": 242
2026-06-23T09:38:03.0830773Z             },
2026-06-23T09:38:03.0830879Z             {
2026-06-23T09:38:03.0831027Z               "path": "crates/spt-net/src/net/pairing/totp.rs",
2026-06-23T09:38:03.0831136Z               "line": 256
2026-06-23T09:38:03.0831237Z             },
2026-06-23T09:38:03.0831336Z             {
2026-06-23T09:38:03.0831489Z               "path": "crates/spt-net/src/net/pairing/totp.rs",
2026-06-23T09:38:03.0831594Z               "line": 270
2026-06-23T09:38:03.0831698Z             },
2026-06-23T09:38:03.0831798Z             {
2026-06-23T09:38:03.0831938Z               "path": "crates/spt-net/src/net/pairing/totp.rs",
2026-06-23T09:38:03.0832046Z               "line": 277
2026-06-23T09:38:03.0832148Z             },
2026-06-23T09:38:03.0832252Z             {
2026-06-23T09:38:03.0832413Z               "path": "crates/spt-net/src/net/pairing/totp.rs",
2026-06-23T09:38:03.0832523Z               "line": 295
2026-06-23T09:38:03.0832626Z             },
2026-06-23T09:38:03.0832729Z             {
2026-06-23T09:38:03.0832983Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0833092Z               "line": 968
2026-06-23T09:38:03.0833193Z             },
2026-06-23T09:38:03.0833289Z             {
2026-06-23T09:38:03.0833445Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0833551Z               "line": 1051
2026-06-23T09:38:03.0833660Z             },
2026-06-23T09:38:03.0833765Z             {
2026-06-23T09:38:03.0834007Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0834119Z               "line": 1121
2026-06-23T09:38:03.0834218Z             },
2026-06-23T09:38:03.0834318Z             {
2026-06-23T09:38:03.0834457Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0834566Z               "line": 1182
2026-06-23T09:38:03.0834670Z             },
2026-06-23T09:38:03.0834772Z             {
2026-06-23T09:38:03.0834923Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0835029Z               "line": 1238
2026-06-23T09:38:03.0835134Z             },
2026-06-23T09:38:03.0835237Z             {
2026-06-23T09:38:03.0835390Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0835501Z               "line": 1457
2026-06-23T09:38:03.0835599Z             }
2026-06-23T09:38:03.0835705Z           ]
2026-06-23T09:38:03.0835800Z         }
2026-06-23T09:38:03.0835909Z       }
2026-06-23T09:38:03.0836015Z     },
2026-06-23T09:38:03.0836115Z     {
2026-06-23T09:38:03.0836233Z       "id": "REQ-PAIR-2",
2026-06-23T09:38:03.0836397Z       "title": "Local trust store with TOFU + warn-on-change",
2026-06-23T09:38:03.0836516Z       "requiredStages": [],
2026-06-23T09:38:03.0836620Z       "stages": {
2026-06-23T09:38:03.0836721Z         "doc": {
2026-06-23T09:38:03.0836830Z           "complete": false,
2026-06-23T09:38:03.0836939Z           "evidence": []
2026-06-23T09:38:03.0837045Z         },
2026-06-23T09:38:03.0837148Z         "impl": {
2026-06-23T09:38:03.0837259Z           "complete": false,
2026-06-23T09:38:03.0837370Z           "evidence": []
2026-06-23T09:38:03.0837473Z         },
2026-06-23T09:38:03.0837567Z         "int": {
2026-06-23T09:38:03.0837677Z           "complete": false,
2026-06-23T09:38:03.0837785Z           "evidence": []
2026-06-23T09:38:03.0837880Z         },
2026-06-23T09:38:03.0837980Z         "unit": {
2026-06-23T09:38:03.0838090Z           "complete": false,
2026-06-23T09:38:03.0838199Z           "evidence": []
2026-06-23T09:38:03.0838300Z         }
2026-06-23T09:38:03.0838401Z       }
2026-06-23T09:38:03.0838504Z     },
2026-06-23T09:38:03.0838601Z     {
2026-06-23T09:38:03.0838720Z       "id": "REQ-PAIR-3",
2026-06-23T09:38:03.0838892Z       "title": "Fetch current pairing code from any paired node",
2026-06-23T09:38:03.0839096Z       "requiredStages": [
2026-06-23T09:38:03.0839196Z         "impl",
2026-06-23T09:38:03.0839302Z         "unit"
2026-06-23T09:38:03.0839406Z       ],
2026-06-23T09:38:03.0839506Z       "stages": {
2026-06-23T09:38:03.0839607Z         "doc": {
2026-06-23T09:38:03.0839716Z           "complete": false,
2026-06-23T09:38:03.0839821Z           "evidence": []
2026-06-23T09:38:03.0839917Z         },
2026-06-23T09:38:03.0840016Z         "impl": {
2026-06-23T09:38:03.0840126Z           "complete": true,
2026-06-23T09:38:03.0840232Z           "evidence": [
2026-06-23T09:38:03.0840335Z             {
2026-06-23T09:38:03.0840463Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0840578Z               "line": 3914
2026-06-23T09:38:03.0840676Z             },
2026-06-23T09:38:03.0840780Z             {
2026-06-23T09:38:03.0840900Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0841000Z               "line": 3983
2026-06-23T09:38:03.0841104Z             },
2026-06-23T09:38:03.0841205Z             {
2026-06-23T09:38:03.0841333Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0841439Z               "line": 4364
2026-06-23T09:38:03.0841548Z             },
2026-06-23T09:38:03.0841657Z             {
2026-06-23T09:38:03.0841877Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0842001Z               "line": 5616
2026-06-23T09:38:03.0842112Z             }
2026-06-23T09:38:03.0842216Z           ]
2026-06-23T09:38:03.0842306Z         },
2026-06-23T09:38:03.0842403Z         "int": {
2026-06-23T09:38:03.0842521Z           "complete": false,
2026-06-23T09:38:03.0842631Z           "evidence": []
2026-06-23T09:38:03.0842722Z         },
2026-06-23T09:38:03.0842935Z         "unit": {
2026-06-23T09:38:03.0843049Z           "complete": true,
2026-06-23T09:38:03.0843153Z           "evidence": [
2026-06-23T09:38:03.0843262Z             {
2026-06-23T09:38:03.0843381Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0843491Z               "line": 11502
2026-06-23T09:38:03.0843595Z             },
2026-06-23T09:38:03.0843695Z             {
2026-06-23T09:38:03.0843815Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0843924Z               "line": 11717
2026-06-23T09:38:03.0844030Z             },
2026-06-23T09:38:03.0844139Z             {
2026-06-23T09:38:03.0844267Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0844373Z               "line": 12376
2026-06-23T09:38:03.0844478Z             },
2026-06-23T09:38:03.0844577Z             {
2026-06-23T09:38:03.0844698Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0844806Z               "line": 12395
2026-06-23T09:38:03.0844916Z             },
2026-06-23T09:38:03.0845013Z             {
2026-06-23T09:38:03.0845135Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0845240Z               "line": 12419
2026-06-23T09:38:03.0845351Z             },
2026-06-23T09:38:03.0845450Z             {
2026-06-23T09:38:03.0845575Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0845685Z               "line": 12438
2026-06-23T09:38:03.0845788Z             },
2026-06-23T09:38:03.0845892Z             {
2026-06-23T09:38:03.0846003Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0846117Z               "line": 12451
2026-06-23T09:38:03.0846212Z             },
2026-06-23T09:38:03.0846313Z             {
2026-06-23T09:38:03.0846436Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0846550Z               "line": 12460
2026-06-23T09:38:03.0846661Z             }
2026-06-23T09:38:03.0846761Z           ]
2026-06-23T09:38:03.0846870Z         }
2026-06-23T09:38:03.0846966Z       }
2026-06-23T09:38:03.0847076Z     },
2026-06-23T09:38:03.0847185Z     {
2026-06-23T09:38:03.0847295Z       "id": "REQ-PAIR-4",
2026-06-23T09:38:03.0847437Z       "title": "Subnet naming on first pairing",
2026-06-23T09:38:03.0847539Z       "requiredStages": [
2026-06-23T09:38:03.0847648Z         "impl",
2026-06-23T09:38:03.0847748Z         "unit"
2026-06-23T09:38:03.0847853Z       ],
2026-06-23T09:38:03.0847958Z       "stages": {
2026-06-23T09:38:03.0848061Z         "doc": {
2026-06-23T09:38:03.0848171Z           "complete": false,
2026-06-23T09:38:03.0848285Z           "evidence": []
2026-06-23T09:38:03.0848388Z         },
2026-06-23T09:38:03.0848498Z         "impl": {
2026-06-23T09:38:03.0848623Z           "complete": true,
2026-06-23T09:38:03.0848726Z           "evidence": [
2026-06-23T09:38:03.0848822Z             {
2026-06-23T09:38:03.0849064Z               "path": "crates/spt-store/src/subnet.rs",
2026-06-23T09:38:03.0849166Z               "line": 174
2026-06-23T09:38:03.0849270Z             }
2026-06-23T09:38:03.0849374Z           ]
2026-06-23T09:38:03.0849480Z         },
2026-06-23T09:38:03.0849585Z         "int": {
2026-06-23T09:38:03.0849698Z           "complete": false,
2026-06-23T09:38:03.0849809Z           "evidence": []
2026-06-23T09:38:03.0849913Z         },
2026-06-23T09:38:03.0850018Z         "unit": {
2026-06-23T09:38:03.0850129Z           "complete": true,
2026-06-23T09:38:03.0850242Z           "evidence": [
2026-06-23T09:38:03.0850342Z             {
2026-06-23T09:38:03.0850492Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0850600Z               "line": 1294
2026-06-23T09:38:03.0850807Z             }
2026-06-23T09:38:03.0850914Z           ]
2026-06-23T09:38:03.0851008Z         }
2026-06-23T09:38:03.0851114Z       }
2026-06-23T09:38:03.0851221Z     },
2026-06-23T09:38:03.0851312Z     {
2026-06-23T09:38:03.0851427Z       "id": "REQ-PAIR-5",
2026-06-23T09:38:03.0851766Z       "title": "Multi-subnet pairing: subnet-name discovery input, create-new-names-up-front, rendezvous-token hashing",
2026-06-23T09:38:03.0851969Z       "requiredStages": [
2026-06-23T09:38:03.0852081Z         "impl",
2026-06-23T09:38:03.0852189Z         "unit",
2026-06-23T09:38:03.0852294Z         "int"
2026-06-23T09:38:03.0852391Z       ],
2026-06-23T09:38:03.0852500Z       "stages": {
2026-06-23T09:38:03.0852604Z         "doc": {
2026-06-23T09:38:03.0852720Z           "complete": false,
2026-06-23T09:38:03.0852818Z           "evidence": []
2026-06-23T09:38:03.0852928Z         },
2026-06-23T09:38:03.0853035Z         "impl": {
2026-06-23T09:38:03.0853143Z           "complete": true,
2026-06-23T09:38:03.0853253Z           "evidence": [
2026-06-23T09:38:03.0853354Z             {
2026-06-23T09:38:03.0853514Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0853618Z               "line": 44
2026-06-23T09:38:03.0853713Z             },
2026-06-23T09:38:03.0853817Z             {
2026-06-23T09:38:03.0853970Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0854080Z               "line": 96
2026-06-23T09:38:03.0854183Z             },
2026-06-23T09:38:03.0854290Z             {
2026-06-23T09:38:03.0854441Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0854551Z               "line": 107
2026-06-23T09:38:03.0854656Z             },
2026-06-23T09:38:03.0854756Z             {
2026-06-23T09:38:03.0854910Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0855023Z               "line": 124
2026-06-23T09:38:03.0855123Z             },
2026-06-23T09:38:03.0855224Z             {
2026-06-23T09:38:03.0855381Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0855490Z               "line": 155
2026-06-23T09:38:03.0855587Z             },
2026-06-23T09:38:03.0855686Z             {
2026-06-23T09:38:03.0855825Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0855939Z               "line": 195
2026-06-23T09:38:03.0856043Z             },
2026-06-23T09:38:03.0856154Z             {
2026-06-23T09:38:03.0856301Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0856409Z               "line": 251
2026-06-23T09:38:03.0856515Z             },
2026-06-23T09:38:03.0856616Z             {
2026-06-23T09:38:03.0856796Z               "path": "crates/spt-net/src/net/pairing/rendezvous.rs",
2026-06-23T09:38:03.0856907Z               "line": 33
2026-06-23T09:38:03.0857006Z             },
2026-06-23T09:38:03.0857111Z             {
2026-06-23T09:38:03.0857268Z               "path": "crates/spt-net/src/net/pairing/rendezvous.rs",
2026-06-23T09:38:03.0857368Z               "line": 45
2026-06-23T09:38:03.0857459Z             },
2026-06-23T09:38:03.0857559Z             {
2026-06-23T09:38:03.0857725Z               "path": "crates/spt-net/src/net/pairing/rendezvous.rs",
2026-06-23T09:38:03.0857832Z               "line": 59
2026-06-23T09:38:03.0857935Z             },
2026-06-23T09:38:03.0858045Z             {
2026-06-23T09:38:03.0858199Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0858298Z               "line": 376
2026-06-23T09:38:03.0858403Z             }
2026-06-23T09:38:03.0858513Z           ]
2026-06-23T09:38:03.0858611Z         },
2026-06-23T09:38:03.0858721Z         "int": {
2026-06-23T09:38:03.0858826Z           "complete": true,
2026-06-23T09:38:03.0858929Z           "evidence": [
2026-06-23T09:38:03.0859100Z             {
2026-06-23T09:38:03.0859258Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0859362Z               "line": 889
2026-06-23T09:38:03.0859568Z             },
2026-06-23T09:38:03.0859677Z             {
2026-06-23T09:38:03.0859825Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0859934Z               "line": 342
2026-06-23T09:38:03.0860036Z             }
2026-06-23T09:38:03.0860140Z           ]
2026-06-23T09:38:03.0860240Z         },
2026-06-23T09:38:03.0860331Z         "unit": {
2026-06-23T09:38:03.0860569Z           "complete": true,
2026-06-23T09:38:03.0860675Z           "evidence": [
2026-06-23T09:38:03.0860774Z             {
2026-06-23T09:38:03.0860927Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0861033Z               "line": 293
2026-06-23T09:38:03.0861140Z             },
2026-06-23T09:38:03.0861232Z             {
2026-06-23T09:38:03.0861386Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0861493Z               "line": 304
2026-06-23T09:38:03.0861598Z             },
2026-06-23T09:38:03.0861693Z             {
2026-06-23T09:38:03.0861834Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.0861939Z               "line": 406
2026-06-23T09:38:03.0862035Z             },
2026-06-23T09:38:03.0862139Z             {
2026-06-23T09:38:03.0862298Z               "path": "crates/spt-net/src/net/pairing/rendezvous.rs",
2026-06-23T09:38:03.0862407Z               "line": 72
2026-06-23T09:38:03.0862516Z             },
2026-06-23T09:38:03.0862617Z             {
2026-06-23T09:38:03.0862782Z               "path": "crates/spt-net/src/net/pairing/rendezvous.rs",
2026-06-23T09:38:03.0862898Z               "line": 82
2026-06-23T09:38:03.0863002Z             },
2026-06-23T09:38:03.0863102Z             {
2026-06-23T09:38:03.0863271Z               "path": "crates/spt-net/src/net/pairing/rendezvous.rs",
2026-06-23T09:38:03.0863378Z               "line": 100
2026-06-23T09:38:03.0863479Z             },
2026-06-23T09:38:03.0863580Z             {
2026-06-23T09:38:03.0863741Z               "path": "crates/spt-net/src/net/pairing/rendezvous.rs",
2026-06-23T09:38:03.0863852Z               "line": 110
2026-06-23T09:38:03.0863957Z             },
2026-06-23T09:38:03.0864060Z             {
2026-06-23T09:38:03.0864217Z               "path": "crates/spt-net/src/net/pairing/rendezvous.rs",
2026-06-23T09:38:03.0864325Z               "line": 125
2026-06-23T09:38:03.0864434Z             },
2026-06-23T09:38:03.0864525Z             {
2026-06-23T09:38:03.0864682Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0864782Z               "line": 1044
2026-06-23T09:38:03.0864888Z             },
2026-06-23T09:38:03.0864983Z             {
2026-06-23T09:38:03.0865126Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0865240Z               "line": 1110
2026-06-23T09:38:03.0865344Z             },
2026-06-23T09:38:03.0865450Z             {
2026-06-23T09:38:03.0865598Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.0865717Z               "line": 1357
2026-06-23T09:38:03.0865828Z             }
2026-06-23T09:38:03.0865932Z           ]
2026-06-23T09:38:03.0866041Z         }
2026-06-23T09:38:03.0866143Z       }
2026-06-23T09:38:03.0866246Z     },
2026-06-23T09:38:03.0866347Z     {
2026-06-23T09:38:03.0866462Z       "id": "REQ-PAIR-6",
2026-06-23T09:38:03.0866763Z       "title": "Elevation-gated per-subnet code fetch (UAC/root or elevated agent; else authenticator app)",
2026-06-23T09:38:03.0866880Z       "requiredStages": [
2026-06-23T09:38:03.0866988Z         "impl",
2026-06-23T09:38:03.0867090Z         "unit"
2026-06-23T09:38:03.0867195Z       ],
2026-06-23T09:38:03.0867294Z       "stages": {
2026-06-23T09:38:03.0867399Z         "doc": {
2026-06-23T09:38:03.0867514Z           "complete": false,
2026-06-23T09:38:03.0867623Z           "evidence": []
2026-06-23T09:38:03.0867729Z         },
2026-06-23T09:38:03.0867833Z         "impl": {
2026-06-23T09:38:03.0867947Z           "complete": true,
2026-06-23T09:38:03.0868058Z           "evidence": [
2026-06-23T09:38:03.0868243Z             {
2026-06-23T09:38:03.0868373Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0868477Z               "line": 3983
2026-06-23T09:38:03.0868581Z             },
2026-06-23T09:38:03.0868669Z             {
2026-06-23T09:38:03.0868801Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0868915Z               "line": 4364
2026-06-23T09:38:03.0869200Z             },
2026-06-23T09:38:03.0869310Z             {
2026-06-23T09:38:03.0869442Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:03.0869550Z               "line": 18
2026-06-23T09:38:03.0869656Z             },
2026-06-23T09:38:03.0869757Z             {
2026-06-23T09:38:03.0869899Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:03.0870000Z               "line": 49
2026-06-23T09:38:03.0870095Z             },
2026-06-23T09:38:03.0870194Z             {
2026-06-23T09:38:03.0870324Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:03.0870433Z               "line": 318
2026-06-23T09:38:03.0870533Z             }
2026-06-23T09:38:03.0870644Z           ]
2026-06-23T09:38:03.0870734Z         },
2026-06-23T09:38:03.0870843Z         "int": {
2026-06-23T09:38:03.0870958Z           "complete": false,
2026-06-23T09:38:03.0871068Z           "evidence": []
2026-06-23T09:38:03.0871167Z         },
2026-06-23T09:38:03.0871278Z         "unit": {
2026-06-23T09:38:03.0871391Z           "complete": true,
2026-06-23T09:38:03.0871502Z           "evidence": [
2026-06-23T09:38:03.0871602Z             {
2026-06-23T09:38:03.0871715Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0871821Z               "line": 12473
2026-06-23T09:38:03.0871922Z             },
2026-06-23T09:38:03.0872030Z             {
2026-06-23T09:38:03.0872168Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0872267Z               "line": 12490
2026-06-23T09:38:03.0872375Z             },
2026-06-23T09:38:03.0872470Z             {
2026-06-23T09:38:03.0872604Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:03.0872713Z               "line": 383
2026-06-23T09:38:03.0872819Z             },
2026-06-23T09:38:03.0872928Z             {
2026-06-23T09:38:03.0873056Z               "path": "crates/spt/src/elevation.rs",
2026-06-23T09:38:03.0873172Z               "line": 392
2026-06-23T09:38:03.0873272Z             }
2026-06-23T09:38:03.0873381Z           ]
2026-06-23T09:38:03.0873482Z         }
2026-06-23T09:38:03.0873591Z       }
2026-06-23T09:38:03.0873686Z     },
2026-06-23T09:38:03.0873788Z     {
2026-06-23T09:38:03.0873906Z       "id": "REQ-PAIR-7",
2026-06-23T09:38:03.0874093Z       "title": "Subnet icon (inline image metadata, GUI-only consumer)",
2026-06-23T09:38:03.0874216Z       "requiredStages": [],
2026-06-23T09:38:03.0874320Z       "stages": {
2026-06-23T09:38:03.0874427Z         "doc": {
2026-06-23T09:38:03.0874540Z           "complete": false,
2026-06-23T09:38:03.0874649Z           "evidence": []
2026-06-23T09:38:03.0874749Z         },
2026-06-23T09:38:03.0874857Z         "impl": {
2026-06-23T09:38:03.0874975Z           "complete": false,
2026-06-23T09:38:03.0875080Z           "evidence": []
2026-06-23T09:38:03.0875191Z         },
2026-06-23T09:38:03.0875299Z         "int": {
2026-06-23T09:38:03.0875410Z           "complete": false,
2026-06-23T09:38:03.0875529Z           "evidence": []
2026-06-23T09:38:03.0875619Z         },
2026-06-23T09:38:03.0875734Z         "unit": {
2026-06-23T09:38:03.0875844Z           "complete": false,
2026-06-23T09:38:03.0875952Z           "evidence": []
2026-06-23T09:38:03.0876059Z         }
2026-06-23T09:38:03.0876153Z       }
2026-06-23T09:38:03.0876253Z     },
2026-06-23T09:38:03.0876349Z     {
2026-06-23T09:38:03.0876467Z       "id": "REQ-PAIR-8",
2026-06-23T09:38:03.0878036Z       "title": "NTP TOTP offset: the pairing ceremony queries NTP at ceremony time (both sides) and applies the derived offset to the TOTP calculation in-process only; system-clock fallback when NTP is unreachable (offline LAN pairing unaffected — NTP failure never blocks a pairing that succeeds today); never sets the OS clock; no background sync loop (M8 decision 18; field trigger: enlyzeam clock >1 min off exceeds the ±1 window)",
2026-06-23T09:38:03.0878164Z       "requiredStages": [
2026-06-23T09:38:03.0878275Z         "impl",
2026-06-23T09:38:03.0878379Z         "unit"
2026-06-23T09:38:03.0878479Z       ],
2026-06-23T09:38:03.0878579Z       "stages": {
2026-06-23T09:38:03.0878774Z         "doc": {
2026-06-23T09:38:03.0878894Z           "complete": false,
2026-06-23T09:38:03.0879089Z           "evidence": []
2026-06-23T09:38:03.0879195Z         },
2026-06-23T09:38:03.0879299Z         "impl": {
2026-06-23T09:38:03.0879408Z           "complete": true,
2026-06-23T09:38:03.0879519Z           "evidence": [
2026-06-23T09:38:03.0879619Z             {
2026-06-23T09:38:03.0879770Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.0879870Z               "line": 577
2026-06-23T09:38:03.0879969Z             },
2026-06-23T09:38:03.0880068Z             {
2026-06-23T09:38:03.0880226Z               "path": "crates/spt-net/src/net/pairing/ntp.rs",
2026-06-23T09:38:03.0880322Z               "line": 22
2026-06-23T09:38:03.0880430Z             },
2026-06-23T09:38:03.0880536Z             {
2026-06-23T09:38:03.0880683Z               "path": "crates/spt-net/src/net/pairing/ntp.rs",
2026-06-23T09:38:03.0880793Z               "line": 76
2026-06-23T09:38:03.0880889Z             },
2026-06-23T09:38:03.0880998Z             {
2026-06-23T09:38:03.0881142Z               "path": "crates/spt-net/src/net/pairing/ntp.rs",
2026-06-23T09:38:03.0881256Z               "line": 127
2026-06-23T09:38:03.0881355Z             }
2026-06-23T09:38:03.0881446Z           ]
2026-06-23T09:38:03.0881547Z         },
2026-06-23T09:38:03.0881646Z         "int": {
2026-06-23T09:38:03.0881761Z           "complete": false,
2026-06-23T09:38:03.0881871Z           "evidence": []
2026-06-23T09:38:03.0881976Z         },
2026-06-23T09:38:03.0882086Z         "unit": {
2026-06-23T09:38:03.0882195Z           "complete": true,
2026-06-23T09:38:03.0882305Z           "evidence": [
2026-06-23T09:38:03.0882405Z             {
2026-06-23T09:38:03.0882562Z               "path": "crates/spt-net/src/net/pairing/ntp.rs",
2026-06-23T09:38:03.0882670Z               "line": 183
2026-06-23T09:38:03.0882775Z             },
2026-06-23T09:38:03.0882879Z             {
2026-06-23T09:38:03.0883021Z               "path": "crates/spt-net/src/net/pairing/ntp.rs",
2026-06-23T09:38:03.0883141Z               "line": 195
2026-06-23T09:38:03.0883246Z             },
2026-06-23T09:38:03.0883359Z             {
2026-06-23T09:38:03.0883498Z               "path": "crates/spt-net/src/net/pairing/ntp.rs",
2026-06-23T09:38:03.0883607Z               "line": 211
2026-06-23T09:38:03.0883709Z             },
2026-06-23T09:38:03.0883813Z             {
2026-06-23T09:38:03.0883965Z               "path": "crates/spt-net/src/net/pairing/ntp.rs",
2026-06-23T09:38:03.0884071Z               "line": 227
2026-06-23T09:38:03.0884175Z             }
2026-06-23T09:38:03.0884275Z           ]
2026-06-23T09:38:03.0884376Z         }
2026-06-23T09:38:03.0886909Z       }
2026-06-23T09:38:03.0887027Z     },
2026-06-23T09:38:03.0887132Z     {
2026-06-23T09:38:03.0887253Z       "id": "REQ-PICKER-1",
2026-06-23T09:38:03.0891835Z       "title": "The picker renders a FOUR-state endpoint status (extending the W2 online/offline duality): the list-item square AND a color-coded STATUS line at the top of the pick-existing right-side details both show — gray OFFLINE; green ONLINE (online + PTY-controllable spt-hosted, not controlled); amber 'ONLINE - HARNESS ONLY' (online but NOT broker-PTY-controllable = harness-hosted, no broker PTY seat — today mis-shows green); blue 'ONLINE + CONTROLLED' (online + driven_by.is_some()). Derived on EndpointRow from {offline | controllable | driven_by} with precedence offline→gray, else driven_by→blue, else !controllable→amber, else green (driven_by outranks harness-only; mutually exclusive in practice — a harness-only endpoint has no broker PTY to control). The controllable discriminator is a NEW InfoJson.controllable: Option<bool> (serde-default, N-1-safe), stamped at the establish seam — cmd_listen (harness-hosted relay, no broker PTY) → Some(false); cmd_bind live_agent (spt-hosted broker PTY) → Some(true); absent → not-controllable (amber) default (harness-hosted is the common mis-reported case; one bind self-corrects). Store-projection-only (no live daemon query — doyle ruling). (v0.10.0)",
2026-06-23T09:38:03.0892083Z       "requiredStages": [
2026-06-23T09:38:03.0892197Z         "impl",
2026-06-23T09:38:03.0892297Z         "unit"
2026-06-23T09:38:03.0892403Z       ],
2026-06-23T09:38:03.0892516Z       "stages": {
2026-06-23T09:38:03.0892627Z         "doc": {
2026-06-23T09:38:03.0892732Z           "complete": false,
2026-06-23T09:38:03.0892850Z           "evidence": []
2026-06-23T09:38:03.0892961Z         },
2026-06-23T09:38:03.0893056Z         "impl": {
2026-06-23T09:38:03.0893174Z           "complete": true,
2026-06-23T09:38:03.0893288Z           "evidence": [
2026-06-23T09:38:03.0893397Z             {
2026-06-23T09:38:03.0893533Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.0893644Z               "line": 248
2026-06-23T09:38:03.0893749Z             },
2026-06-23T09:38:03.0893843Z             {
2026-06-23T09:38:03.0893992Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.0894101Z               "line": 280
2026-06-23T09:38:03.0894205Z             }
2026-06-23T09:38:03.0894307Z           ]
2026-06-23T09:38:03.0894412Z         },
2026-06-23T09:38:03.0894525Z         "int": {
2026-06-23T09:38:03.0894636Z           "complete": false,
2026-06-23T09:38:03.0894750Z           "evidence": []
2026-06-23T09:38:03.0894850Z         },
2026-06-23T09:38:03.0894955Z         "unit": {
2026-06-23T09:38:03.0895064Z           "complete": true,
2026-06-23T09:38:03.0895174Z           "evidence": [
2026-06-23T09:38:03.0895275Z             {
2026-06-23T09:38:03.0895422Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.0895533Z               "line": 476
2026-06-23T09:38:03.0895628Z             },
2026-06-23T09:38:03.0895735Z             {
2026-06-23T09:38:03.0895869Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.0895978Z               "line": 753
2026-06-23T09:38:03.0896085Z             },
2026-06-23T09:38:03.0896196Z             {
2026-06-23T09:38:03.0896358Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.0896467Z               "line": 915
2026-06-23T09:38:03.0896569Z             },
2026-06-23T09:38:03.0896668Z             {
2026-06-23T09:38:03.0896806Z               "path": "crates/spt/src/picker/view.rs",
2026-06-23T09:38:03.0896916Z               "line": 474
2026-06-23T09:38:03.0897016Z             }
2026-06-23T09:38:03.0897121Z           ]
2026-06-23T09:38:03.0897217Z         }
2026-06-23T09:38:03.0897317Z       }
2026-06-23T09:38:03.0897412Z     },
2026-06-23T09:38:03.0897508Z     {
2026-06-23T09:38:03.0897622Z       "id": "REQ-PICKER-2",
2026-06-23T09:38:03.0899695Z       "title": "The picker's project-history loader reads the git-backed context store, not the bare working tree: data.rs project_history_for enumerates an endpoint's projects via the BranchStore branch set (the context store keeps per-project context in git branches — contextstore::project_branch(project_id), checked out to projects/<project>/<id>/ only on-demand) instead of raw std::fs::read_dir over the empty working tree (which returned empty for ALL rows incl wall-a — the operator bug). Ordered newest→oldest by branch commit recency; degrades to empty (informational pane), never fails. (v0.10.0)",
2026-06-23T09:38:03.0899828Z       "requiredStages": [
2026-06-23T09:38:03.0899932Z         "impl",
2026-06-23T09:38:03.0900029Z         "unit"
2026-06-23T09:38:03.0900133Z       ],
2026-06-23T09:38:03.0900238Z       "stages": {
2026-06-23T09:38:03.0900335Z         "doc": {
2026-06-23T09:38:03.0900453Z           "complete": false,
2026-06-23T09:38:03.0900721Z           "evidence": []
2026-06-23T09:38:03.0900886Z         },
2026-06-23T09:38:03.0900985Z         "impl": {
2026-06-23T09:38:03.0901094Z           "complete": true,
2026-06-23T09:38:03.0901203Z           "evidence": [
2026-06-23T09:38:03.0901307Z             {
2026-06-23T09:38:03.0901465Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0901574Z               "line": 183
2026-06-23T09:38:03.0901770Z             },
2026-06-23T09:38:03.0901870Z             {
2026-06-23T09:38:03.0902009Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.0902118Z               "line": 321
2026-06-23T09:38:03.0902218Z             }
2026-06-23T09:38:03.0902319Z           ]
2026-06-23T09:38:03.0902414Z         },
2026-06-23T09:38:03.0902518Z         "int": {
2026-06-23T09:38:03.0902630Z           "complete": false,
2026-06-23T09:38:03.0902743Z           "evidence": []
2026-06-23T09:38:03.0902843Z         },
2026-06-23T09:38:03.0902945Z         "unit": {
2026-06-23T09:38:03.0903057Z           "complete": true,
2026-06-23T09:38:03.0903167Z           "evidence": [
2026-06-23T09:38:03.0903273Z             {
2026-06-23T09:38:03.0903425Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.0903540Z               "line": 655
2026-06-23T09:38:03.0903630Z             }
2026-06-23T09:38:03.0903739Z           ]
2026-06-23T09:38:03.0903839Z         }
2026-06-23T09:38:03.0903943Z       }
2026-06-23T09:38:03.0904046Z     },
2026-06-23T09:38:03.0904136Z     {
2026-06-23T09:38:03.0904257Z       "id": "REQ-PICKER-3",
2026-06-23T09:38:03.0906751Z       "title": "A self-owned subnet row reconciles its status to the LIVE roster: a Subnet-category row whose endpoint_id overlaps a local (is_local) roster id is self-owned (this node hosts it), so its status square is OVERRIDDEN with the live roster status — the WAN registry snapshot (wansend::load_snapshots) is a periodically-advertised, independently-stale projection, while the local roster (p.alive) is ground truth for an endpoint this node hosts. One status square per endpoint (CONTEXT.md:348-350 — nothing licenses opposite squares for one endpoint across its Local vs Subnet listings). A reconcile pass in data.rs after the local_rows + subnet_rows gather; BOTH category listings are preserved (Local + Subnet are legitimately distinct views — you are in your own subnet), only the STATUS is unified. (v0.10.0)",
2026-06-23T09:38:03.0906876Z       "requiredStages": [
2026-06-23T09:38:03.0906974Z         "impl",
2026-06-23T09:38:03.0907081Z         "unit"
2026-06-23T09:38:03.0907171Z       ],
2026-06-23T09:38:03.0907280Z       "stages": {
2026-06-23T09:38:03.0907381Z         "doc": {
2026-06-23T09:38:03.0907486Z           "complete": false,
2026-06-23T09:38:03.0907590Z           "evidence": []
2026-06-23T09:38:03.0907691Z         },
2026-06-23T09:38:03.0907801Z         "impl": {
2026-06-23T09:38:03.0907905Z           "complete": true,
2026-06-23T09:38:03.0908010Z           "evidence": [
2026-06-23T09:38:03.0908110Z             {
2026-06-23T09:38:03.0908248Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.0908355Z               "line": 124
2026-06-23T09:38:03.0908449Z             }
2026-06-23T09:38:03.0908554Z           ]
2026-06-23T09:38:03.0908650Z         },
2026-06-23T09:38:03.0908750Z         "int": {
2026-06-23T09:38:03.0908864Z           "complete": false,
2026-06-23T09:38:03.0909051Z           "evidence": []
2026-06-23T09:38:03.0909158Z         },
2026-06-23T09:38:03.0909262Z         "unit": {
2026-06-23T09:38:03.0909369Z           "complete": true,
2026-06-23T09:38:03.0909478Z           "evidence": [
2026-06-23T09:38:03.0909587Z             {
2026-06-23T09:38:03.0909721Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.0909830Z               "line": 479
2026-06-23T09:38:03.0909941Z             }
2026-06-23T09:38:03.0910041Z           ]
2026-06-23T09:38:03.0910145Z         }
2026-06-23T09:38:03.0910245Z       }
2026-06-23T09:38:03.0910341Z     },
2026-06-23T09:38:03.0910441Z     {
2026-06-23T09:38:03.0910656Z       "id": "REQ-PICKER-4",
2026-06-23T09:38:03.0912612Z       "title": "The picker's Subnet category renders the canonical node LABEL, not bare key-hex: a subnet row's node renders as 'LABEL (keyprefix…)' (e.g. 'HFENDULEAM (bcead52b…)') per CONTEXT.md:650 + Instance.node_label, NOT the raw node key-hex (SPT_DEV:14efb80cb… — a picker-only regression because resource_projection→ResourceRow drops node_label, so data.rs subnet_rows uses the raw row.node). Thread node_label into the picker subnet path (ResourceRow gains node_label, or subnet_rows looks it up via the registry's node_labels) and REUSE the one canonical render (format!(\"{l} ({}…)\", key_prefix) — cli.rs / wansend.rs), never a re-implementation. (v0.10.0)",
2026-06-23T09:38:03.0912832Z       "requiredStages": [
2026-06-23T09:38:03.0912941Z         "impl",
2026-06-23T09:38:03.0913050Z         "unit"
2026-06-23T09:38:03.0913146Z       ],
2026-06-23T09:38:03.0913255Z       "stages": {
2026-06-23T09:38:03.0913365Z         "doc": {
2026-06-23T09:38:03.0913476Z           "complete": false,
2026-06-23T09:38:03.0913575Z           "evidence": []
2026-06-23T09:38:03.0913684Z         },
2026-06-23T09:38:03.0913790Z         "impl": {
2026-06-23T09:38:03.0913894Z           "complete": true,
2026-06-23T09:38:03.0913999Z           "evidence": [
2026-06-23T09:38:03.0914100Z             {
2026-06-23T09:38:03.0914256Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0914365Z               "line": 353
2026-06-23T09:38:03.0914470Z             },
2026-06-23T09:38:03.0914577Z             {
2026-06-23T09:38:03.0914706Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.0914817Z               "line": 105
2026-06-23T09:38:03.0914916Z             }
2026-06-23T09:38:03.0915021Z           ]
2026-06-23T09:38:03.0915117Z         },
2026-06-23T09:38:03.0915221Z         "int": {
2026-06-23T09:38:03.0915340Z           "complete": false,
2026-06-23T09:38:03.0915451Z           "evidence": []
2026-06-23T09:38:03.0915555Z         },
2026-06-23T09:38:03.0915650Z         "unit": {
2026-06-23T09:38:03.0915765Z           "complete": true,
2026-06-23T09:38:03.0915870Z           "evidence": [
2026-06-23T09:38:03.0915979Z             {
2026-06-23T09:38:03.0916127Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0916237Z               "line": 1246
2026-06-23T09:38:03.0916343Z             },
2026-06-23T09:38:03.0916447Z             {
2026-06-23T09:38:03.0916585Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.0916692Z               "line": 537
2026-06-23T09:38:03.0916790Z             }
2026-06-23T09:38:03.0916884Z           ]
2026-06-23T09:38:03.0916989Z         }
2026-06-23T09:38:03.0917093Z       }
2026-06-23T09:38:03.0917187Z     },
2026-06-23T09:38:03.0917287Z     {
2026-06-23T09:38:03.0917398Z       "id": "REQ-PICKER-5",
2026-06-23T09:38:03.0920573Z       "title": "`spt endpoint list` (bare/subnet view) renders an ALIGNED table with canonical node labels: cmd_endpoint_list prints subnet rows with `\\t` TAB separators (cli.rs:~1651-1662) so variable-width endpoint_ids snap fields to different tab-stops → a RAGGED status column (operator screenshot: X/help statuses misaligned vs rt-*/sptc-*/wall-a); and it calls the node renderer with no label → bare key-hex for every row (SAME ResourceRow-drops-node_label root as REQ-PICKER-4). FIX: max-width per-column padding (mirror render_node_rows' pad, pad by char count not byte len — '…' is multibyte) replacing the tabs, and render the node via the shared node_label_display now that ResourceRow carries node_label (REQ-PICKER-4). Extract a pure row-formatter seam so the alignment+label is unit-testable. ALSO: the bare list is the SUBNET view (a just-run LOCAL perch is invisible cross-subnet until the next advertise tick), so emit a `--local` hint line so a freshly-run endpoint isn't perceived as lost. (v0.10.0; operator-flagged + doyle dispatch 2026-06-17)",
2026-06-23T09:38:03.0920700Z       "requiredStages": [
2026-06-23T09:38:03.0920916Z         "impl",
2026-06-23T09:38:03.0921020Z         "unit"
2026-06-23T09:38:03.0921115Z       ],
2026-06-23T09:38:03.0921216Z       "stages": {
2026-06-23T09:38:03.0921326Z         "doc": {
2026-06-23T09:38:03.0921430Z           "complete": false,
2026-06-23T09:38:03.0921545Z           "evidence": []
2026-06-23T09:38:03.0921644Z         },
2026-06-23T09:38:03.0921750Z         "impl": {
2026-06-23T09:38:03.0921958Z           "complete": true,
2026-06-23T09:38:03.0922053Z           "evidence": [
2026-06-23T09:38:03.0922163Z             {
2026-06-23T09:38:03.0922285Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0922389Z               "line": 2156
2026-06-23T09:38:03.0922500Z             }
2026-06-23T09:38:03.0922600Z           ]
2026-06-23T09:38:03.0922704Z         },
2026-06-23T09:38:03.0922791Z         "int": {
2026-06-23T09:38:03.0922905Z           "complete": false,
2026-06-23T09:38:03.0923014Z           "evidence": []
2026-06-23T09:38:03.0923111Z         },
2026-06-23T09:38:03.0923225Z         "unit": {
2026-06-23T09:38:03.0923329Z           "complete": true,
2026-06-23T09:38:03.0923435Z           "evidence": [
2026-06-23T09:38:03.0923535Z             {
2026-06-23T09:38:03.0923663Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.0923774Z               "line": 8903
2026-06-23T09:38:03.0923878Z             }
2026-06-23T09:38:03.0923987Z           ]
2026-06-23T09:38:03.0924089Z         }
2026-06-23T09:38:03.0924192Z       }
2026-06-23T09:38:03.0924283Z     },
2026-06-23T09:38:03.0924389Z     {
2026-06-23T09:38:03.0924526Z       "id": "REQ-PICKER-ADAPTER-DESCRIPTION",
2026-06-23T09:38:03.0925968Z       "title": "The Create-new adapter-CHOICE screen of `spt endpoint run`'s picker shows a right-hand Description panel (like the Pick-existing endpoint picker's two-pane) surfacing per-adapter detail: install date, last-updated, adapter TYPE / the endpoint types it hosts, and the adapter description — so the user can see WHAT each adapter is before choosing it (today the selector lists bare names). DEFERRED fast-follow to v0.12.0 (operator 2026-06-18). (post-v0.12.0)",
2026-06-23T09:38:03.0926092Z       "requiredStages": [],
2026-06-23T09:38:03.0926201Z       "stages": {
2026-06-23T09:38:03.0926312Z         "doc": {
2026-06-23T09:38:03.0926430Z           "complete": false,
2026-06-23T09:38:03.0926539Z           "evidence": []
2026-06-23T09:38:03.0926645Z         },
2026-06-23T09:38:03.0926754Z         "impl": {
2026-06-23T09:38:03.0926864Z           "complete": false,
2026-06-23T09:38:03.0926970Z           "evidence": []
2026-06-23T09:38:03.0927078Z         },
2026-06-23T09:38:03.0927179Z         "int": {
2026-06-23T09:38:03.0927294Z           "complete": false,
2026-06-23T09:38:03.0927402Z           "evidence": []
2026-06-23T09:38:03.0927496Z         },
2026-06-23T09:38:03.0927607Z         "unit": {
2026-06-23T09:38:03.0927719Z           "complete": false,
2026-06-23T09:38:03.0927833Z           "evidence": []
2026-06-23T09:38:03.0927934Z         }
2026-06-23T09:38:03.0928029Z       }
2026-06-23T09:38:03.0928133Z     },
2026-06-23T09:38:03.0928230Z     {
2026-06-23T09:38:03.0928367Z       "id": "REQ-PICKER-HISTORY-FRESH",
2026-06-23T09:38:03.0929602Z       "title": "The `spt endpoint run` picker shows project history for FRESH endpoints (operator-raised v0.12.0 real-harness finding). Symptom: a fresh endpoint shows no project history in the picker. ROOT TBD — investigate the project-history loader (v0.10.0 PICKER-2, picker/data.rs) before fixing: distinguish a real loader bug from 'fresh = no history yet' semantics. (v0.12.1)",
2026-06-23T09:38:03.0929721Z       "requiredStages": [
2026-06-23T09:38:03.0929818Z         "impl",
2026-06-23T09:38:03.0929916Z         "unit"
2026-06-23T09:38:03.0930022Z       ],
2026-06-23T09:38:03.0930128Z       "stages": {
2026-06-23T09:38:03.0930231Z         "doc": {
2026-06-23T09:38:03.0930344Z           "complete": false,
2026-06-23T09:38:03.0930455Z           "evidence": []
2026-06-23T09:38:03.0930560Z         },
2026-06-23T09:38:03.0930765Z         "impl": {
2026-06-23T09:38:03.0930880Z           "complete": true,
2026-06-23T09:38:03.0930988Z           "evidence": [
2026-06-23T09:38:03.0931094Z             {
2026-06-23T09:38:03.0931237Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.0931342Z               "line": 300
2026-06-23T09:38:03.0931442Z             }
2026-06-23T09:38:03.0931542Z           ]
2026-06-23T09:38:03.0931738Z         },
2026-06-23T09:38:03.0931842Z         "int": {
2026-06-23T09:38:03.0931951Z           "complete": false,
2026-06-23T09:38:03.0932062Z           "evidence": []
2026-06-23T09:38:03.0932166Z         },
2026-06-23T09:38:03.0932271Z         "unit": {
2026-06-23T09:38:03.0932382Z           "complete": true,
2026-06-23T09:38:03.0932495Z           "evidence": [
2026-06-23T09:38:03.0932595Z             {
2026-06-23T09:38:03.0932733Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.0932845Z               "line": 510
2026-06-23T09:38:03.0932949Z             }
2026-06-23T09:38:03.0933051Z           ]
2026-06-23T09:38:03.0933155Z         }
2026-06-23T09:38:03.0933255Z       }
2026-06-23T09:38:03.0933351Z     },
2026-06-23T09:38:03.0933451Z     {
2026-06-23T09:38:03.0933579Z       "id": "REQ-PICKER-ONLINE-ACTION",
2026-06-23T09:38:03.0935158Z       "title": "The `spt endpoint run` picker shows the correct action for an ALREADY-ONLINE endpoint — Attach, NOT 'Start now' (operator-raised v0.12.0 real-harness finding). Symptom: the picker offers 'Start now' for endpoints that are already online. ROOT TBD — investigate the status→action mapping (v0.10.0 PICKER-1 four-state status, picker/model.rs): is it reading live/online state correctly, or rendering stale/wedged broker state (i.e. partly a symptom of the broker wedge / status=online latch)? Fix so online → Attach. (v0.12.1)",
2026-06-23T09:38:03.0935288Z       "requiredStages": [
2026-06-23T09:38:03.0935390Z         "impl",
2026-06-23T09:38:03.0935499Z         "unit"
2026-06-23T09:38:03.0935600Z       ],
2026-06-23T09:38:03.0935689Z       "stages": {
2026-06-23T09:38:03.0935798Z         "doc": {
2026-06-23T09:38:03.0935908Z           "complete": false,
2026-06-23T09:38:03.0936027Z           "evidence": []
2026-06-23T09:38:03.0936117Z         },
2026-06-23T09:38:03.0936228Z         "impl": {
2026-06-23T09:38:03.0936351Z           "complete": true,
2026-06-23T09:38:03.0936465Z           "evidence": [
2026-06-23T09:38:03.0936576Z             {
2026-06-23T09:38:03.0936722Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.0936833Z               "line": 682
2026-06-23T09:38:03.0936933Z             }
2026-06-23T09:38:03.0937028Z           ]
2026-06-23T09:38:03.0937134Z         },
2026-06-23T09:38:03.0937238Z         "int": {
2026-06-23T09:38:03.0937352Z           "complete": false,
2026-06-23T09:38:03.0937454Z           "evidence": []
2026-06-23T09:38:03.0937558Z         },
2026-06-23T09:38:03.0937658Z         "unit": {
2026-06-23T09:38:03.0937769Z           "complete": true,
2026-06-23T09:38:03.0937882Z           "evidence": [
2026-06-23T09:38:03.0937976Z             {
2026-06-23T09:38:03.0938124Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.0938218Z               "line": 1145
2026-06-23T09:38:03.0938317Z             },
2026-06-23T09:38:03.0938413Z             {
2026-06-23T09:38:03.0938542Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.0938660Z               "line": 1159
2026-06-23T09:38:03.0938761Z             }
2026-06-23T09:38:03.0938871Z           ]
2026-06-23T09:38:03.0939052Z         }
2026-06-23T09:38:03.0939156Z       }
2026-06-23T09:38:03.0939256Z     },
2026-06-23T09:38:03.0939357Z     {
2026-06-23T09:38:03.0939485Z       "id": "REQ-PICKER-UX-V013",
2026-06-23T09:38:03.0941215Z       "title": "`spt endpoint run` picker UX (v0.13.0 operator dogfooding): (1) SKIP the first screen — open directly on 'Pick existing'; `n` jumps to 'Create new'. (2) AUTO-ATTACH after both Start-new AND Resume-from-history (both currently don't attach and show no stdout); add an `h` shortcut to run headless (no attach). (3) 'controlled by' shows the node NAME (node_label_display), not the raw hex. (4) Clean up Start-new output — drop the Rust `pid=Some(142748)` leak and the 'harness binds its perch on startup' internals; user-friendly, not a process log. (v0.13.0)",
2026-06-23T09:38:03.0941335Z       "requiredStages": [],
2026-06-23T09:38:03.0941449Z       "stages": {
2026-06-23T09:38:03.0941641Z         "doc": {
2026-06-23T09:38:03.0941754Z           "complete": false,
2026-06-23T09:38:03.0941859Z           "evidence": []
2026-06-23T09:38:03.0941965Z         },
2026-06-23T09:38:03.0942060Z         "impl": {
2026-06-23T09:38:03.0942183Z           "complete": false,
2026-06-23T09:38:03.0942285Z           "evidence": []
2026-06-23T09:38:03.0942383Z         },
2026-06-23T09:38:03.0942493Z         "int": {
2026-06-23T09:38:03.0942604Z           "complete": false,
2026-06-23T09:38:03.0942722Z           "evidence": []
2026-06-23T09:38:03.0942817Z         },
2026-06-23T09:38:03.0942933Z         "unit": {
2026-06-23T09:38:03.0943046Z           "complete": false,
2026-06-23T09:38:03.0943155Z           "evidence": []
2026-06-23T09:38:03.0943260Z         }
2026-06-23T09:38:03.0943349Z       }
2026-06-23T09:38:03.0943453Z     },
2026-06-23T09:38:03.0943553Z     {
2026-06-23T09:38:03.0943659Z       "id": "REQ-PRES-1",
2026-06-23T09:38:03.0945064Z       "title": "Presence resolution: the presence datum (last_active_node, last_active_endpoint, ts) gossiped subnet-wide via the agent-interaction heartbeat (rides registry distribution, visibility-gated) + one first-class most-recently-active resolution API consumed by notif first-fire, update-consent delivery, consent escalation, and shell wake resolution (M5 scope decision 1: resolution only — the PresenceChannel endpoint stays deferred)",
2026-06-23T09:38:03.0945175Z       "requiredStages": [
2026-06-23T09:38:03.0945284Z         "impl",
2026-06-23T09:38:03.0945388Z         "unit",
2026-06-23T09:38:03.0945495Z         "int"
2026-06-23T09:38:03.0945589Z       ],
2026-06-23T09:38:03.0945694Z       "stages": {
2026-06-23T09:38:03.0945800Z         "doc": {
2026-06-23T09:38:03.0945913Z           "complete": true,
2026-06-23T09:38:03.0946026Z           "evidence": [
2026-06-23T09:38:03.0946122Z             {
2026-06-23T09:38:03.0946258Z               "path": "docs/DEFERRED.md",
2026-06-23T09:38:03.0946382Z               "line": 11
2026-06-23T09:38:03.0946488Z             }
2026-06-23T09:38:03.0946592Z           ]
2026-06-23T09:38:03.0946706Z         },
2026-06-23T09:38:03.0946822Z         "impl": {
2026-06-23T09:38:03.0946935Z           "complete": true,
2026-06-23T09:38:03.0947079Z           "evidence": [
2026-06-23T09:38:03.0947203Z             {
2026-06-23T09:38:03.0947350Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0947465Z               "line": 515
2026-06-23T09:38:03.0947565Z             },
2026-06-23T09:38:03.0947665Z             {
2026-06-23T09:38:03.0947817Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.0947926Z               "line": 567
2026-06-23T09:38:03.0948033Z             },
2026-06-23T09:38:03.0948169Z             {
2026-06-23T09:38:03.0948309Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0948419Z               "line": 188
2026-06-23T09:38:03.0948555Z             },
2026-06-23T09:38:03.0948660Z             {
2026-06-23T09:38:03.0948806Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0948929Z               "line": 214
2026-06-23T09:38:03.0949093Z             },
2026-06-23T09:38:03.0949182Z             {
2026-06-23T09:38:03.0949321Z               "path": "crates/spt-daemon/src/presence.rs",
2026-06-23T09:38:03.0949431Z               "line": 28
2026-06-23T09:38:03.0949535Z             },
2026-06-23T09:38:03.0949641Z             {
2026-06-23T09:38:03.0949784Z               "path": "crates/spt-daemon/src/presence.rs",
2026-06-23T09:38:03.0949883Z               "line": 105
2026-06-23T09:38:03.0950088Z             },
2026-06-23T09:38:03.0950198Z             {
2026-06-23T09:38:03.0950342Z               "path": "crates/spt-daemon/src/presence.rs",
2026-06-23T09:38:03.0950446Z               "line": 161
2026-06-23T09:38:03.0950556Z             },
2026-06-23T09:38:03.0950666Z             {
2026-06-23T09:38:03.0950798Z               "path": "crates/spt-daemon/src/presence.rs",
2026-06-23T09:38:03.0950914Z               "line": 180
2026-06-23T09:38:03.0951109Z             },
2026-06-23T09:38:03.0951215Z             {
2026-06-23T09:38:03.0951365Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0951479Z               "line": 421
2026-06-23T09:38:03.0951580Z             },
2026-06-23T09:38:03.0951680Z             {
2026-06-23T09:38:03.0951832Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.0951943Z               "line": 289
2026-06-23T09:38:03.0952047Z             },
2026-06-23T09:38:03.0952152Z             {
2026-06-23T09:38:03.0952295Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.0952404Z               "line": 336
2026-06-23T09:38:03.0952505Z             },
2026-06-23T09:38:03.0952615Z             {
2026-06-23T09:38:03.0952753Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.0952864Z               "line": 362
2026-06-23T09:38:03.0952977Z             },
2026-06-23T09:38:03.0953077Z             {
2026-06-23T09:38:03.0953225Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0953334Z               "line": 100
2026-06-23T09:38:03.0953445Z             }
2026-06-23T09:38:03.0953545Z           ]
2026-06-23T09:38:03.0953653Z         },
2026-06-23T09:38:03.0953762Z         "int": {
2026-06-23T09:38:03.0953876Z           "complete": true,
2026-06-23T09:38:03.0953980Z           "evidence": [
2026-06-23T09:38:03.0954084Z             {
2026-06-23T09:38:03.0954243Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.0954351Z               "line": 567
2026-06-23T09:38:03.0954447Z             },
2026-06-23T09:38:03.0954552Z             {
2026-06-23T09:38:03.0954699Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0954805Z               "line": 749
2026-06-23T09:38:03.0954914Z             },
2026-06-23T09:38:03.0955024Z             {
2026-06-23T09:38:03.0955167Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.0955286Z               "line": 1167
2026-06-23T09:38:03.0955387Z             }
2026-06-23T09:38:03.0955491Z           ]
2026-06-23T09:38:03.0955601Z         },
2026-06-23T09:38:03.0955702Z         "unit": {
2026-06-23T09:38:03.0955825Z           "complete": true,
2026-06-23T09:38:03.0955930Z           "evidence": [
2026-06-23T09:38:03.0956046Z             {
2026-06-23T09:38:03.0956192Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.0956303Z               "line": 674
2026-06-23T09:38:03.0956408Z             },
2026-06-23T09:38:03.0956511Z             {
2026-06-23T09:38:03.0956663Z               "path": "crates/spt-daemon/src/presence.rs",
2026-06-23T09:38:03.0956767Z               "line": 238
2026-06-23T09:38:03.0956861Z             },
2026-06-23T09:38:03.0956971Z             {
2026-06-23T09:38:03.0957105Z               "path": "crates/spt-daemon/src/presence.rs",
2026-06-23T09:38:03.0957218Z               "line": 269
2026-06-23T09:38:03.0957315Z             },
2026-06-23T09:38:03.0957419Z             {
2026-06-23T09:38:03.0957566Z               "path": "crates/spt-daemon/src/presence.rs",
2026-06-23T09:38:03.0957682Z               "line": 305
2026-06-23T09:38:03.0957796Z             },
2026-06-23T09:38:03.0957901Z             {
2026-06-23T09:38:03.0958039Z               "path": "crates/spt-daemon/src/presence.rs",
2026-06-23T09:38:03.0958139Z               "line": 336
2026-06-23T09:38:03.0958244Z             },
2026-06-23T09:38:03.0958340Z             {
2026-06-23T09:38:03.0958506Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.0958693Z               "line": 1217
2026-06-23T09:38:03.0958802Z             },
2026-06-23T09:38:03.0958903Z             {
2026-06-23T09:38:03.0959125Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.0959239Z               "line": 1163
2026-06-23T09:38:03.0959343Z             }
2026-06-23T09:38:03.0959442Z           ]
2026-06-23T09:38:03.0959538Z         }
2026-06-23T09:38:03.0959742Z       }
2026-06-23T09:38:03.0959847Z     },
2026-06-23T09:38:03.0959939Z     {
2026-06-23T09:38:03.0960057Z       "id": "REQ-RC-1",
2026-06-23T09:38:03.0962083Z       "title": "`spt rc <id>` — user CLI attaching a local terminal to a broker-held PTY, reusing the cross-node attach machinery (attach.rs request_attach → send_attach_input pump, spt-net AttachRecord codec); local attach is the degenerate single-node case of the cross-node path (rides REQ-TERM-3 byte-stream streaming). Read-only `--view` (watch, no stdin forwarded). Clean detach that does NOT terminate the broker-held session (KNOWN-HAZARDS: PTY ownership stays with the broker; no termination on detach). Explicit detach keybind that cannot collide with harness passthrough input (legacy capsule used a ctrl-b prefix); documented. ConPTY DSR auto-answer in the attach reader (hazard 5.5).",
2026-06-23T09:38:03.0962203Z       "requiredStages": [
2026-06-23T09:38:03.0962316Z         "impl",
2026-06-23T09:38:03.0962412Z         "unit",
2026-06-23T09:38:03.0962512Z         "int"
2026-06-23T09:38:03.0962611Z       ],
2026-06-23T09:38:03.0962717Z       "stages": {
2026-06-23T09:38:03.0962817Z         "doc": {
2026-06-23T09:38:03.0962922Z           "complete": false,
2026-06-23T09:38:03.0963032Z           "evidence": []
2026-06-23T09:38:03.0963128Z         },
2026-06-23T09:38:03.0963232Z         "impl": {
2026-06-23T09:38:03.0963346Z           "complete": true,
2026-06-23T09:38:03.0963457Z           "evidence": [
2026-06-23T09:38:03.0963561Z             {
2026-06-23T09:38:03.0963700Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.0963814Z               "line": 1066
2026-06-23T09:38:03.0963913Z             },
2026-06-23T09:38:03.0964005Z             {
2026-06-23T09:38:03.0964156Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.0964265Z               "line": 2077
2026-06-23T09:38:03.0964361Z             },
2026-06-23T09:38:03.0964464Z             {
2026-06-23T09:38:03.0964615Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.0964741Z               "line": 967
2026-06-23T09:38:03.0964850Z             },
2026-06-23T09:38:03.0964950Z             {
2026-06-23T09:38:03.0965093Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.0965207Z               "line": 1001
2026-06-23T09:38:03.0965308Z             },
2026-06-23T09:38:03.0965413Z             {
2026-06-23T09:38:03.0965546Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0965652Z               "line": 22
2026-06-23T09:38:03.0965766Z             },
2026-06-23T09:38:03.0965856Z             {
2026-06-23T09:38:03.0965990Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0966094Z               "line": 738
2026-06-23T09:38:03.0966203Z             }
2026-06-23T09:38:03.0966310Z           ]
2026-06-23T09:38:03.0966413Z         },
2026-06-23T09:38:03.0966523Z         "int": {
2026-06-23T09:38:03.0966629Z           "complete": true,
2026-06-23T09:38:03.0966733Z           "evidence": [
2026-06-23T09:38:03.0966833Z             {
2026-06-23T09:38:03.0966982Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.0967095Z               "line": 263
2026-06-23T09:38:03.0967194Z             },
2026-06-23T09:38:03.0967304Z             {
2026-06-23T09:38:03.0967445Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.0967555Z               "line": 290
2026-06-23T09:38:03.0967660Z             },
2026-06-23T09:38:03.0967764Z             {
2026-06-23T09:38:03.0967908Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.0968126Z               "line": 418
2026-06-23T09:38:03.0968228Z             }
2026-06-23T09:38:03.0968328Z           ]
2026-06-23T09:38:03.0968431Z         },
2026-06-23T09:38:03.0968538Z         "unit": {
2026-06-23T09:38:03.0968651Z           "complete": true,
2026-06-23T09:38:03.0968766Z           "evidence": [
2026-06-23T09:38:03.0968872Z             {
2026-06-23T09:38:03.0969080Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.0969300Z               "line": 1327
2026-06-23T09:38:03.0969410Z             },
2026-06-23T09:38:03.0969511Z             {
2026-06-23T09:38:03.0969628Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0969742Z               "line": 1214
2026-06-23T09:38:03.0969837Z             },
2026-06-23T09:38:03.0969945Z             {
2026-06-23T09:38:03.0970068Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0970175Z               "line": 1243
2026-06-23T09:38:03.0970274Z             },
2026-06-23T09:38:03.0970379Z             {
2026-06-23T09:38:03.0970508Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0970617Z               "line": 1256
2026-06-23T09:38:03.0970722Z             }
2026-06-23T09:38:03.0970823Z           ]
2026-06-23T09:38:03.0970923Z         }
2026-06-23T09:38:03.0971013Z       }
2026-06-23T09:38:03.0971114Z     },
2026-06-23T09:38:03.0971218Z     {
2026-06-23T09:38:03.0971347Z       "id": "REQ-RC-KEY-VT-TRANSLATE",
2026-06-23T09:38:03.0977132Z       "title": "On Windows, `spt rc` translates CONSOLE KEY EVENTS to standard xterm VT so ALL keys reach the hosted harness — arrows/Home/End/PgUp/PgDn/Insert/Delete/F-keys, every modifier combo, Backspace/Ctrl+Backspace — not just the byte-emitting ones. ROOT (operator HITL, doyle /diagnose): `spt rc` reads raw STDIN BYTES (spawn_stdin_reader, std::io::stdin().read); on the Windows LEGACY console (no ENABLE_VIRTUAL_TERMINAL_INPUT) the special keys produce console KEY_EVENTs, NOT stdin bytes, so the byte-pump sees nothing → those keys are DEAD. Enabling ENABLE_VIRTUAL_TERMINAL_INPUT was rejected (W7 dc07c39): on Windows Terminal it yields harness-specific win32-input-mode + broke ctrl-b detach. FIX (agnostic, full fidelity): on Windows, replace the stdin byte-read with a crossterm EVENT source (crossterm 0.28 already a dep; the picker already reads events) and translate each KeyEvent → STANDARD xterm VT bytes via a PURE translate_key_event(KeyEvent)->Vec<u8> (copy a known-correct xterm table verbatim, ADR-0001 spirit), forwarded through the SAME rc pump — the harness receives ordinary xterm VT (harness-AGNOSTIC, no win32-input-mode). Press-only (drop Repeat/Release). Detach stays the ctrl-b+'d' PREFIX, event-sourced (doyle Option B): Ctrl+B arms; armed+plain-'d'⇒Detach; armed+Ctrl+B⇒emit literal 0x02; armed+other⇒0x02 then translate(other). Non-tty stdin (piped/tests) → FALL BACK to the byte-read path (keeps e2e byte-injection working). UNIX UNCHANGED (its raw-mode byte stream already delivers proper VT; cfg-split, zero Unix regression). SUPERSEDES the W7 normalize_key_byte swap on Windows — the translator emits 0x7f for Backspace and 0x08 for Ctrl+Backspace natively (REQ-HAZARD-RC-INPUT-KEY-ENCODING folded in). NO int (a live interactive console can't be driven in CI — HITL, REQ-RUN-PICKER/RC-1 precedent); the exhaustive non-vacuous translate_key_event mapping unit + the event-detach unit ARE the surface. (v0.13.0)",
2026-06-23T09:38:03.0977278Z       "requiredStages": [
2026-06-23T09:38:03.0977375Z         "doc",
2026-06-23T09:38:03.0977490Z         "impl",
2026-06-23T09:38:03.0977584Z         "unit"
2026-06-23T09:38:03.0977692Z       ],
2026-06-23T09:38:03.0977788Z       "stages": {
2026-06-23T09:38:03.0977887Z         "doc": {
2026-06-23T09:38:03.0978000Z           "complete": true,
2026-06-23T09:38:03.0978110Z           "evidence": [
2026-06-23T09:38:03.0978220Z             {
2026-06-23T09:38:03.0978339Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.0978450Z               "line": 358
2026-06-23T09:38:03.0978559Z             },
2026-06-23T09:38:03.0978765Z             {
2026-06-23T09:38:03.0978897Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:03.0979084Z               "line": 440
2026-06-23T09:38:03.0979193Z             }
2026-06-23T09:38:03.0979283Z           ]
2026-06-23T09:38:03.0979379Z         },
2026-06-23T09:38:03.0979488Z         "impl": {
2026-06-23T09:38:03.0979607Z           "complete": true,
2026-06-23T09:38:03.0979822Z           "evidence": [
2026-06-23T09:38:03.0979918Z             {
2026-06-23T09:38:03.0980048Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0980156Z               "line": 226
2026-06-23T09:38:03.0980264Z             },
2026-06-23T09:38:03.0980355Z             {
2026-06-23T09:38:03.0980482Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0980600Z               "line": 285
2026-06-23T09:38:03.0980701Z             },
2026-06-23T09:38:03.0980806Z             {
2026-06-23T09:38:03.0980929Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0981040Z               "line": 300
2026-06-23T09:38:03.0981149Z             },
2026-06-23T09:38:03.0981254Z             {
2026-06-23T09:38:03.0981383Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0981488Z               "line": 315
2026-06-23T09:38:03.0981592Z             },
2026-06-23T09:38:03.0981688Z             {
2026-06-23T09:38:03.0981812Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0981936Z               "line": 364
2026-06-23T09:38:03.0982041Z             }
2026-06-23T09:38:03.0982136Z           ]
2026-06-23T09:38:03.0982232Z         },
2026-06-23T09:38:03.0982342Z         "int": {
2026-06-23T09:38:03.0982456Z           "complete": false,
2026-06-23T09:38:03.0982576Z           "evidence": []
2026-06-23T09:38:03.0982680Z         },
2026-06-23T09:38:03.0982785Z         "unit": {
2026-06-23T09:38:03.0982895Z           "complete": true,
2026-06-23T09:38:03.0983000Z           "evidence": [
2026-06-23T09:38:03.0983107Z             {
2026-06-23T09:38:03.0983227Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0983338Z               "line": 1271
2026-06-23T09:38:03.0983446Z             },
2026-06-23T09:38:03.0983552Z             {
2026-06-23T09:38:03.0983671Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0983765Z               "line": 1386
2026-06-23T09:38:03.0983876Z             }
2026-06-23T09:38:03.0983966Z           ]
2026-06-23T09:38:03.0984070Z         }
2026-06-23T09:38:03.0984176Z       }
2026-06-23T09:38:03.0984276Z     },
2026-06-23T09:38:03.0984381Z     {
2026-06-23T09:38:03.0984501Z       "id": "REQ-RC-MOUSE-FORWARD",
2026-06-23T09:38:03.0989029Z       "title": "On Windows, `spt rc` must FORWARD scroll-wheel events to the harness when the harness has mouse reporting on. ROOT (operator HITL): P1's RawGuard EnableMouseCapture (added for right-click paste, REQ-RC-WIN-PASTE) makes Windows Terminal forward ALL mouse — including the scroll wheel — to rc instead of scrolling its own buffer, but the rc mouse handler dropped everything except right-button-down → scroll DIED (and WT's native scrollback is stolen by the capture). Operator ruling: keep mouse capture + right-click bracketed paste AND forward scroll to the harness. FIX (doyle design, cfg(windows), folds into the rc mouse handler): TRACK the harness's mouse-reporting mode by scanning its OUTPUT stream for the DECSET set/reset — ESC[?1000h/1002h/1003h (mouse on) + ESC[?1006h (SGR ext) and their ...l (off) — into a shared MouseMode{enabled,sgr} (pump writes from output, stdin reader reads); the scan survives a sequence SPLIT across output chunks (a bounded carry buffer). The mouse handler: right-button-DOWN -> bracketed clipboard paste (unchanged, REQ-RC-WIN-PASTE); ScrollUp/Down -> translate to an xterm SGR mouse report (ESC[<64;col+1;row+1M up / ESC[<65;..M down, 0-based crossterm -> 1-based xterm) and forward ONLY when enabled && sgr (else DROP — a legacy X10 report the harness may not parse is garbage); Moved/drag/left/middle -> DROP (scroll is the operator's need; click-forward risks garbage, no click-to-position). Unix UNCHANGED (no capture; the terminal scrolls natively). (v0.13.0)",
2026-06-23T09:38:03.0989170Z       "requiredStages": [
2026-06-23T09:38:03.0989276Z         "doc",
2026-06-23T09:38:03.0989381Z         "impl",
2026-06-23T09:38:03.0989485Z         "unit"
2026-06-23T09:38:03.0989586Z       ],
2026-06-23T09:38:03.0989691Z       "stages": {
2026-06-23T09:38:03.0989796Z         "doc": {
2026-06-23T09:38:03.0990001Z           "complete": true,
2026-06-23T09:38:03.0990115Z           "evidence": [
2026-06-23T09:38:03.0990210Z             {
2026-06-23T09:38:03.0990345Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:03.0990458Z               "line": 461
2026-06-23T09:38:03.0990550Z             }
2026-06-23T09:38:03.0990659Z           ]
2026-06-23T09:38:03.0990754Z         },
2026-06-23T09:38:03.0990862Z         "impl": {
2026-06-23T09:38:03.0990967Z           "complete": true,
2026-06-23T09:38:03.0991080Z           "evidence": [
2026-06-23T09:38:03.0991174Z             {
2026-06-23T09:38:03.0991309Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0991414Z               "line": 421
2026-06-23T09:38:03.0991514Z             },
2026-06-23T09:38:03.0991624Z             {
2026-06-23T09:38:03.0991747Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0991862Z               "line": 437
2026-06-23T09:38:03.0991967Z             }
2026-06-23T09:38:03.0992071Z           ]
2026-06-23T09:38:03.0992177Z         },
2026-06-23T09:38:03.0992277Z         "int": {
2026-06-23T09:38:03.0992391Z           "complete": false,
2026-06-23T09:38:03.0992501Z           "evidence": []
2026-06-23T09:38:03.0992615Z         },
2026-06-23T09:38:03.0992715Z         "unit": {
2026-06-23T09:38:03.0992826Z           "complete": true,
2026-06-23T09:38:03.0992934Z           "evidence": [
2026-06-23T09:38:03.0995828Z             {
2026-06-23T09:38:03.0996008Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0996127Z               "line": 1521
2026-06-23T09:38:03.0996249Z             },
2026-06-23T09:38:03.0996349Z             {
2026-06-23T09:38:03.0996484Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0996597Z               "line": 1540
2026-06-23T09:38:03.0996692Z             },
2026-06-23T09:38:03.0996803Z             {
2026-06-23T09:38:03.0996921Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0997032Z               "line": 1552
2026-06-23T09:38:03.0997136Z             },
2026-06-23T09:38:03.0997240Z             {
2026-06-23T09:38:03.0997370Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.0997475Z               "line": 1580
2026-06-23T09:38:03.0997579Z             }
2026-06-23T09:38:03.0997675Z           ]
2026-06-23T09:38:03.0997775Z         }
2026-06-23T09:38:03.0997875Z       }
2026-06-23T09:38:03.0997971Z     },
2026-06-23T09:38:03.0998079Z     {
2026-06-23T09:38:03.0998199Z       "id": "REQ-RC-WIN-PASTE",
2026-06-23T09:38:03.1003252Z       "title": "In an `spt rc` session neither ctrl+V nor right-click pastes (CC explicitly supports ctrl+V). ROOT (doyle /diagnose): RawGuard does only enable_raw_mode (no bracketed paste / no mouse capture / no clipboard interception); the Windows console delivers a paste as synthetic per-char KEY EVENTs (no crossterm Event::Paste), and ctrl+V translates to bare ^V forwarded to CC — but CC runs DAEMON-SIDE with NO access to the operator's LOCAL clipboard, so remote paste is fundamentally CLIENT-ORIGINATED. A multi-line paste-as-keys also becomes a \\r submit-storm. FIX (doyle design, V0.13.0-P1-RC-PASTE-DESIGN.md, cfg(windows), folds into the bug-2 event path): on a paste gesture rc reads the LOCAL clipboard + forwards a BRACKETED PASTE (ESC[200~ + content + ESC[201~); CC has bracketed-paste mode on (its TUI sets ESC[?2004h) so it treats it as a paste — content intact, no submit-storm, harness-AGNOSTIC. ctrl+V: intercept Char('v')+CONTROL in the event loop -> read_clipboard -> bracketed paste. Right-click: RawGuard also EnableMouseCapture (disables console QuickEdit + enables ENABLE_MOUSE_INPUT so right-click surfaces as Event::Mouse on legacy cmd/powershell) -> right-button -> read_clipboard -> bracketed paste; DROP all other mouse (CC has no mouse features, operator-confirmed, so capture costs nothing). read_clipboard = clipboard-win crate (cfg(windows), minimal); empty/failed = clean no-op. Content forwarded VERBATIM (literal pasted text, no per-char translation). Unix UNCHANGED (its terminal pastes natively through the byte pump). DEPENDS ON P0 (a paste chunk must not wedge the broker). (v0.13.0)",
2026-06-23T09:38:03.1003485Z       "requiredStages": [
2026-06-23T09:38:03.1003590Z         "doc",
2026-06-23T09:38:03.1003696Z         "impl",
2026-06-23T09:38:03.1003795Z         "unit"
2026-06-23T09:38:03.1003895Z       ],
2026-06-23T09:38:03.1003992Z       "stages": {
2026-06-23T09:38:03.1004101Z         "doc": {
2026-06-23T09:38:03.1004209Z           "complete": true,
2026-06-23T09:38:03.1004318Z           "evidence": [
2026-06-23T09:38:03.1004424Z             {
2026-06-23T09:38:03.1004566Z               "path": "docs/KNOWN-HAZARDS.md",
2026-06-23T09:38:03.1004681Z               "line": 447
2026-06-23T09:38:03.1004777Z             }
2026-06-23T09:38:03.1004881Z           ]
2026-06-23T09:38:03.1004977Z         },
2026-06-23T09:38:03.1005087Z         "impl": {
2026-06-23T09:38:03.1005196Z           "complete": true,
2026-06-23T09:38:03.1005306Z           "evidence": [
2026-06-23T09:38:03.1005411Z             {
2026-06-23T09:38:03.1005534Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.1005645Z               "line": 395
2026-06-23T09:38:03.1005749Z             },
2026-06-23T09:38:03.1005854Z             {
2026-06-23T09:38:03.1005983Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.1006087Z               "line": 411
2026-06-23T09:38:03.1006192Z             },
2026-06-23T09:38:03.1006280Z             {
2026-06-23T09:38:03.1006407Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.1006516Z               "line": 454
2026-06-23T09:38:03.1006625Z             },
2026-06-23T09:38:03.1006733Z             {
2026-06-23T09:38:03.1006856Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.1006967Z               "line": 468
2026-06-23T09:38:03.1007067Z             },
2026-06-23T09:38:03.1007176Z             {
2026-06-23T09:38:03.1007296Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.1007410Z               "line": 479
2026-06-23T09:38:03.1007514Z             }
2026-06-23T09:38:03.1007616Z           ]
2026-06-23T09:38:03.1007724Z         },
2026-06-23T09:38:03.1007824Z         "int": {
2026-06-23T09:38:03.1007944Z           "complete": false,
2026-06-23T09:38:03.1008044Z           "evidence": []
2026-06-23T09:38:03.1008149Z         },
2026-06-23T09:38:03.1008255Z         "unit": {
2026-06-23T09:38:03.1008364Z           "complete": true,
2026-06-23T09:38:03.1008478Z           "evidence": [
2026-06-23T09:38:03.1008570Z             {
2026-06-23T09:38:03.1008698Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.1008808Z               "line": 1462
2026-06-23T09:38:03.1008917Z             },
2026-06-23T09:38:03.1009098Z             {
2026-06-23T09:38:03.1009223Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.1009330Z               "line": 1483
2026-06-23T09:38:03.1009435Z             },
2026-06-23T09:38:03.1009540Z             {
2026-06-23T09:38:03.1009662Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.1009772Z               "line": 1504
2026-06-23T09:38:03.1009877Z             }
2026-06-23T09:38:03.1009981Z           ]
2026-06-23T09:38:03.1010086Z         }
2026-06-23T09:38:03.1010187Z       }
2026-06-23T09:38:03.1010291Z     },
2026-06-23T09:38:03.1010386Z     {
2026-06-23T09:38:03.1010497Z       "id": "REQ-RCVIEW-1",
2026-06-23T09:38:03.1015131Z       "title": "Remote-attach controller/viewer model (CONTEXT.md:317): a session's broker OutputLog serves ONE interactive controller (input + EXCLUSIVE PTY resize; its viewport sets the size, sent on attach + every window change via crossterm Event::Resize) plus ANY NUMBER of read-only `--view` attachers (output-only, no input, no resize; client-side letterbox — center+pad when larger, clip+1-line indicator when smaller; only the local ctrl-b d detach chord). Attach intent is three-valued (`Viewer | Control | Take`, wire-default Control): Control to a FREE endpoint becomes controller, Control to a CONTROLLED endpoint is REFUSED with guidance (`--view`/`--take`) — never auto-viewer, never silent-displace. Wire adds (additive, N-1 skip-unknown): `Request.intent`, `Resize{rows,cols}` (controller-only), `Size{rows,cols}` (→viewer), `Displaced{by}` (→displaced controller). The brain-resume cursor (delivered_through, ADR-0018) tracks the CONTROLLER ONLY; viewers replay from their own from_seq and never move it. Dormancy keys on the controller ONLY: controller attach wakes / controller detach goes dormant (even with viewers present); viewer attach/detach is wake-neutral and may watch a dormant endpoint as-is. v1: viewing is gated identically to driving — a viewer runs the same access_check(Unsolicited) as a controller (watching reveals full session contents = a real disclosure); a lighter distinct watch-gate is deferred to cross-subnet/finer-consent (CONTEXT.md:317 'driving ≠ watching' = the future seam).",
2026-06-23T09:38:03.1015380Z       "requiredStages": [
2026-06-23T09:38:03.1015488Z         "doc",
2026-06-23T09:38:03.1015590Z         "impl",
2026-06-23T09:38:03.1015699Z         "unit",
2026-06-23T09:38:03.1015803Z         "int"
2026-06-23T09:38:03.1015900Z       ],
2026-06-23T09:38:03.1016013Z       "stages": {
2026-06-23T09:38:03.1016113Z         "doc": {
2026-06-23T09:38:03.1016229Z           "complete": true,
2026-06-23T09:38:03.1016342Z           "evidence": [
2026-06-23T09:38:03.1016447Z             {
2026-06-23T09:38:03.1016572Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1016676Z               "line": 355
2026-06-23T09:38:03.1016791Z             }
2026-06-23T09:38:03.1016896Z           ]
2026-06-23T09:38:03.1017005Z         },
2026-06-23T09:38:03.1017114Z         "impl": {
2026-06-23T09:38:03.1017223Z           "complete": true,
2026-06-23T09:38:03.1017336Z           "evidence": [
2026-06-23T09:38:03.1017440Z             {
2026-06-23T09:38:03.1017594Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:03.1017707Z               "line": 528
2026-06-23T09:38:03.1017804Z             },
2026-06-23T09:38:03.1017908Z             {
2026-06-23T09:38:03.1018055Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.1018166Z               "line": 629
2026-06-23T09:38:03.1018270Z             },
2026-06-23T09:38:03.1018375Z             {
2026-06-23T09:38:03.1018514Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.1018619Z               "line": 640
2026-06-23T09:38:03.1018714Z             },
2026-06-23T09:38:03.1018819Z             {
2026-06-23T09:38:03.1019043Z               "path": "crates/spt-net/src/net/attach.rs",
2026-06-23T09:38:03.1019148Z               "line": 41
2026-06-23T09:38:03.1019258Z             },
2026-06-23T09:38:03.1019363Z             {
2026-06-23T09:38:03.1019496Z               "path": "crates/spt-net/src/net/attach.rs",
2026-06-23T09:38:03.1019605Z               "line": 62
2026-06-23T09:38:03.1019712Z             },
2026-06-23T09:38:03.1019820Z             {
2026-06-23T09:38:03.1019952Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.1020057Z               "line": 309
2026-06-23T09:38:03.1020156Z             },
2026-06-23T09:38:03.1020260Z             {
2026-06-23T09:38:03.1020389Z               "path": "crates/spt/src/rc.rs",
2026-06-23T09:38:03.1020494Z               "line": 738
2026-06-23T09:38:03.1020603Z             }
2026-06-23T09:38:03.1020690Z           ]
2026-06-23T09:38:03.1020790Z         },
2026-06-23T09:38:03.1020894Z         "int": {
2026-06-23T09:38:03.1021005Z           "complete": true,
2026-06-23T09:38:03.1021119Z           "evidence": [
2026-06-23T09:38:03.1021223Z             {
2026-06-23T09:38:03.1021481Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.1021585Z               "line": 922
2026-06-23T09:38:03.1021691Z             },
2026-06-23T09:38:03.1021790Z             {
2026-06-23T09:38:03.1021930Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.1022035Z               "line": 962
2026-06-23T09:38:03.1022139Z             },
2026-06-23T09:38:03.1022335Z             {
2026-06-23T09:38:03.1022476Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.1022591Z               "line": 1009
2026-06-23T09:38:03.1022690Z             },
2026-06-23T09:38:03.1022793Z             {
2026-06-23T09:38:03.1022932Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.1023047Z               "line": 1161
2026-06-23T09:38:03.1023151Z             }
2026-06-23T09:38:03.1023252Z           ]
2026-06-23T09:38:03.1023362Z         },
2026-06-23T09:38:03.1023465Z         "unit": {
2026-06-23T09:38:03.1023586Z           "complete": true,
2026-06-23T09:38:03.1023695Z           "evidence": [
2026-06-23T09:38:03.1023799Z             {
2026-06-23T09:38:03.1023948Z               "path": "crates/spt-net/src/net/attach.rs",
2026-06-23T09:38:03.1024052Z               "line": 175
2026-06-23T09:38:03.1024152Z             },
2026-06-23T09:38:03.1024258Z             {
2026-06-23T09:38:03.1024390Z               "path": "crates/spt-net/src/net/attach.rs",
2026-06-23T09:38:03.1024501Z               "line": 195
2026-06-23T09:38:03.1024605Z             }
2026-06-23T09:38:03.1024710Z           ]
2026-06-23T09:38:03.1024812Z         }
2026-06-23T09:38:03.1024916Z       }
2026-06-23T09:38:03.1025001Z     },
2026-06-23T09:38:03.1025092Z     {
2026-06-23T09:38:03.1025203Z       "id": "REQ-REACH-1",
2026-06-23T09:38:03.1025381Z       "title": "Off-node remote-drive detection + file transfer",
2026-06-23T09:38:03.1025496Z       "requiredStages": [
2026-06-23T09:38:03.1025601Z         "impl",
2026-06-23T09:38:03.1025710Z         "unit",
2026-06-23T09:38:03.1025811Z         "int"
2026-06-23T09:38:03.1025916Z       ],
2026-06-23T09:38:03.1026011Z       "stages": {
2026-06-23T09:38:03.1026112Z         "doc": {
2026-06-23T09:38:03.1026221Z           "complete": false,
2026-06-23T09:38:03.1026316Z           "evidence": []
2026-06-23T09:38:03.1026416Z         },
2026-06-23T09:38:03.1026521Z         "impl": {
2026-06-23T09:38:03.1026635Z           "complete": true,
2026-06-23T09:38:03.1026746Z           "evidence": [
2026-06-23T09:38:03.1026850Z             {
2026-06-23T09:38:03.1026993Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.1027100Z               "line": 629
2026-06-23T09:38:03.1027203Z             },
2026-06-23T09:38:03.1027303Z             {
2026-06-23T09:38:03.1027442Z               "path": "crates/spt-daemon/src/xfer.rs",
2026-06-23T09:38:03.1027551Z               "line": 76
2026-06-23T09:38:03.1027655Z             },
2026-06-23T09:38:03.1027760Z             {
2026-06-23T09:38:03.1027891Z               "path": "crates/spt-daemon/src/xfer.rs",
2026-06-23T09:38:03.1027996Z               "line": 222
2026-06-23T09:38:03.1028097Z             },
2026-06-23T09:38:03.1028201Z             {
2026-06-23T09:38:03.1028329Z               "path": "crates/spt-daemon/src/xfer.rs",
2026-06-23T09:38:03.1028445Z               "line": 422
2026-06-23T09:38:03.1028544Z             },
2026-06-23T09:38:03.1028644Z             {
2026-06-23T09:38:03.1028783Z               "path": "crates/spt-daemon/src/xfer.rs",
2026-06-23T09:38:03.1028892Z               "line": 529
2026-06-23T09:38:03.1029055Z             },
2026-06-23T09:38:03.1029159Z             {
2026-06-23T09:38:03.1029298Z               "path": "crates/spt-net/src/net/xfer.rs",
2026-06-23T09:38:03.1029407Z               "line": 39
2026-06-23T09:38:03.1029512Z             },
2026-06-23T09:38:03.1029608Z             {
2026-06-23T09:38:03.1029736Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.1029846Z               "line": 301
2026-06-23T09:38:03.1030051Z             },
2026-06-23T09:38:03.1030156Z             {
2026-06-23T09:38:03.1030291Z               "path": "crates/spt-store/src/xfer.rs",
2026-06-23T09:38:03.1030394Z               "line": 88
2026-06-23T09:38:03.1030498Z             },
2026-06-23T09:38:03.1030594Z             {
2026-06-23T09:38:03.1030730Z               "path": "crates/spt-store/src/xfer.rs",
2026-06-23T09:38:03.1030844Z               "line": 98
2026-06-23T09:38:03.1031040Z             },
2026-06-23T09:38:03.1031144Z             {
2026-06-23T09:38:03.1031284Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1031393Z               "line": 233
2026-06-23T09:38:03.1031497Z             }
2026-06-23T09:38:03.1031603Z           ]
2026-06-23T09:38:03.1031708Z         },
2026-06-23T09:38:03.1031807Z         "int": {
2026-06-23T09:38:03.1031913Z           "complete": true,
2026-06-23T09:38:03.1032022Z           "evidence": [
2026-06-23T09:38:03.1032127Z             {
2026-06-23T09:38:03.1032285Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.1032389Z               "line": 415
2026-06-23T09:38:03.1032490Z             },
2026-06-23T09:38:03.1032590Z             {
2026-06-23T09:38:03.1032737Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.1032838Z               "line": 524
2026-06-23T09:38:03.1032943Z             },
2026-06-23T09:38:03.1033046Z             {
2026-06-23T09:38:03.1033198Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1033311Z               "line": 1000
2026-06-23T09:38:03.1033410Z             },
2026-06-23T09:38:03.1033506Z             {
2026-06-23T09:38:03.1033644Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1033754Z               "line": 1385
2026-06-23T09:38:03.1033860Z             }
2026-06-23T09:38:03.1033964Z           ]
2026-06-23T09:38:03.1034073Z         },
2026-06-23T09:38:03.1034174Z         "unit": {
2026-06-23T09:38:03.1034293Z           "complete": true,
2026-06-23T09:38:03.1034403Z           "evidence": [
2026-06-23T09:38:03.1034508Z             {
2026-06-23T09:38:03.1034640Z               "path": "crates/spt-daemon/src/xfer.rs",
2026-06-23T09:38:03.1034737Z               "line": 639
2026-06-23T09:38:03.1034846Z             },
2026-06-23T09:38:03.1034941Z             {
2026-06-23T09:38:03.1035071Z               "path": "crates/spt-daemon/src/xfer.rs",
2026-06-23T09:38:03.1035184Z               "line": 660
2026-06-23T09:38:03.1035289Z             },
2026-06-23T09:38:03.1035391Z             {
2026-06-23T09:38:03.1035527Z               "path": "crates/spt-daemon/tests/attach.rs",
2026-06-23T09:38:03.1035633Z               "line": 777
2026-06-23T09:38:03.1035725Z             },
2026-06-23T09:38:03.1035824Z             {
2026-06-23T09:38:03.1035960Z               "path": "crates/spt-daemon/tests/xfer.rs",
2026-06-23T09:38:03.1036066Z               "line": 93
2026-06-23T09:38:03.1036166Z             },
2026-06-23T09:38:03.1036266Z             {
2026-06-23T09:38:03.1036414Z               "path": "crates/spt-daemon/tests/xfer.rs",
2026-06-23T09:38:03.1036523Z               "line": 224
2026-06-23T09:38:03.1036628Z             },
2026-06-23T09:38:03.1036729Z             {
2026-06-23T09:38:03.1036871Z               "path": "crates/spt-net/src/net/xfer.rs",
2026-06-23T09:38:03.1036982Z               "line": 96
2026-06-23T09:38:03.1037077Z             },
2026-06-23T09:38:03.1037181Z             {
2026-06-23T09:38:03.1037311Z               "path": "crates/spt-net/src/net/xfer.rs",
2026-06-23T09:38:03.1037420Z               "line": 146
2026-06-23T09:38:03.1037520Z             },
2026-06-23T09:38:03.1037626Z             {
2026-06-23T09:38:03.1037763Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.1037868Z               "line": 698
2026-06-23T09:38:03.1037965Z             },
2026-06-23T09:38:03.1038058Z             {
2026-06-23T09:38:03.1038191Z               "path": "crates/spt-store/src/xfer.rs",
2026-06-23T09:38:03.1038296Z               "line": 118
2026-06-23T09:38:03.1038466Z             },
2026-06-23T09:38:03.1038575Z             {
2026-06-23T09:38:03.1038695Z               "path": "crates/spt-store/src/xfer.rs",
2026-06-23T09:38:03.1038799Z               "line": 148
2026-06-23T09:38:03.1038894Z             },
2026-06-23T09:38:03.1039061Z             {
2026-06-23T09:38:03.1039200Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1039419Z               "line": 928
2026-06-23T09:38:03.1039524Z             }
2026-06-23T09:38:03.1039629Z           ]
2026-06-23T09:38:03.1039739Z         }
2026-06-23T09:38:03.1039829Z       }
2026-06-23T09:38:03.1039930Z     },
2026-06-23T09:38:03.1040025Z     {
2026-06-23T09:38:03.1040129Z       "id": "REQ-REACH-2",
2026-06-23T09:38:03.1040320Z       "title": "Remote command execution (deferred, consent-gated)",
2026-06-23T09:38:03.1040425Z       "requiredStages": [],
2026-06-23T09:38:03.1040522Z       "stages": {
2026-06-23T09:38:03.1040625Z         "doc": {
2026-06-23T09:38:03.1040740Z           "complete": false,
2026-06-23T09:38:03.1040847Z           "evidence": []
2026-06-23T09:38:03.1040950Z         },
2026-06-23T09:38:03.1041053Z         "impl": {
2026-06-23T09:38:03.1041159Z           "complete": false,
2026-06-23T09:38:03.1041271Z           "evidence": []
2026-06-23T09:38:03.1041370Z         },
2026-06-23T09:38:03.1041476Z         "int": {
2026-06-23T09:38:03.1041586Z           "complete": false,
2026-06-23T09:38:03.1041704Z           "evidence": []
2026-06-23T09:38:03.1041806Z         },
2026-06-23T09:38:03.1041910Z         "unit": {
2026-06-23T09:38:03.1042023Z           "complete": false,
2026-06-23T09:38:03.1042130Z           "evidence": []
2026-06-23T09:38:03.1042234Z         }
2026-06-23T09:38:03.1042334Z       }
2026-06-23T09:38:03.1042440Z     },
2026-06-23T09:38:03.1042534Z     {
2026-06-23T09:38:03.1042658Z       "id": "REQ-READY-AGENT-RESUME",
2026-06-23T09:38:03.1046141Z       "title": "An offline ReadyAgent shows in `spt endpoint run`'s picker Resume-from-history and resumes correctly — closing the gap that today only LiveAgents do. ROOT: a harness-hosted ready bind (ReadyAgent::start_homed, ready.rs) writes info.json DIRECTLY and never appends the session ledger (unlike the shared establish_perch:250 live path), so a ready agent — though it has a session_id — produces ZERO ledger rows → the picker's offline+local Resume-from-history (which gates on ledger rows) never offers it. FIX (1): ledger the ready bind (ReadyAgent::start_homed → sessions::append Boot, mirroring establish_perch). FIX (2): `spt endpoint run --resume <session>` honors the adapter MANIFEST's endpoint TYPE — a ReadyAgent manifest (no [session.psyche_init]) resumes as a ready endpoint (poll listener, NO psyche-host); a LiveAgent (with psyche_init) as live. NO new bringup mode + NO picker changes (operator 2026-06-18): `spt endpoint run` is the spt-hosted ENDPOINT bringup for BOTH types, the type IS the adapter-manifest's concern (psyche-host already keys on psyche_init presence) — so (2) likely already holds; VERIFY at code, build only the residual. (v0.12.0)",
2026-06-23T09:38:03.1046275Z       "requiredStages": [
2026-06-23T09:38:03.1046384Z         "doc",
2026-06-23T09:38:03.1046478Z         "impl",
2026-06-23T09:38:03.1046583Z         "unit",
2026-06-23T09:38:03.1046684Z         "int"
2026-06-23T09:38:03.1046787Z       ],
2026-06-23T09:38:03.1046893Z       "stages": {
2026-06-23T09:38:03.1047007Z         "doc": {
2026-06-23T09:38:03.1047116Z           "complete": true,
2026-06-23T09:38:03.1047227Z           "evidence": [
2026-06-23T09:38:03.1047332Z             {
2026-06-23T09:38:03.1047445Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1047556Z               "line": 385
2026-06-23T09:38:03.1047656Z             }
2026-06-23T09:38:03.1047760Z           ]
2026-06-23T09:38:03.1047862Z         },
2026-06-23T09:38:03.1047961Z         "impl": {
2026-06-23T09:38:03.1048080Z           "complete": true,
2026-06-23T09:38:03.1048186Z           "evidence": [
2026-06-23T09:38:03.1048285Z             {
2026-06-23T09:38:03.1048549Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.1048656Z               "line": 110
2026-06-23T09:38:03.1048751Z             }
2026-06-23T09:38:03.1048852Z           ]
2026-06-23T09:38:03.1049026Z         },
2026-06-23T09:38:03.1049135Z         "int": {
2026-06-23T09:38:03.1049246Z           "complete": true,
2026-06-23T09:38:03.1049354Z           "evidence": [
2026-06-23T09:38:03.1049556Z             {
2026-06-23T09:38:03.1049726Z               "path": "crates/spt/tests/ready_resume_ledger_e2e.rs",
2026-06-23T09:38:03.1049837Z               "line": 26
2026-06-23T09:38:03.1049941Z             }
2026-06-23T09:38:03.1050036Z           ]
2026-06-23T09:38:03.1050143Z         },
2026-06-23T09:38:03.1050247Z         "unit": {
2026-06-23T09:38:03.1050360Z           "complete": true,
2026-06-23T09:38:03.1050472Z           "evidence": [
2026-06-23T09:38:03.1050571Z             {
2026-06-23T09:38:03.1050714Z               "path": "crates/spt-msg/src/ready.rs",
2026-06-23T09:38:03.1050819Z               "line": 320
2026-06-23T09:38:03.1050928Z             }
2026-06-23T09:38:03.1051024Z           ]
2026-06-23T09:38:03.1051134Z         }
2026-06-23T09:38:03.1051238Z       }
2026-06-23T09:38:03.1051339Z     },
2026-06-23T09:38:03.1051440Z     {
2026-06-23T09:38:03.1051548Z       "id": "REQ-REL-1",
2026-06-23T09:38:03.1051959Z       "title": "spt-releases publish-target repo: README public face, licensing split, Pages docs at the permanent lapse-proof canonical URL (ADR-0014)",
2026-06-23T09:38:03.1052074Z       "requiredStages": [
2026-06-23T09:38:03.1052174Z         "doc",
2026-06-23T09:38:03.1052278Z         "impl"
2026-06-23T09:38:03.1052375Z       ],
2026-06-23T09:38:03.1052480Z       "stages": {
2026-06-23T09:38:03.1052584Z         "doc": {
2026-06-23T09:38:03.1052695Z           "complete": true,
2026-06-23T09:38:03.1052814Z           "evidence": [
2026-06-23T09:38:03.1052922Z             {
2026-06-23T09:38:03.1053166Z               "path": "docs/adr/0014-publish-target-repo-and-lapse-proof-canonical-url.md",
2026-06-23T09:38:03.1053256Z               "line": 3
2026-06-23T09:38:03.1053362Z             }
2026-06-23T09:38:03.1053466Z           ]
2026-06-23T09:38:03.1053571Z         },
2026-06-23T09:38:03.1053672Z         "impl": {
2026-06-23T09:38:03.1053781Z           "complete": true,
2026-06-23T09:38:03.1053886Z           "evidence": [
2026-06-23T09:38:03.1053983Z             {
2026-06-23T09:38:03.1054138Z               "path": ".github/workflows/docs-publish.yml",
2026-06-23T09:38:03.1054247Z               "line": 11
2026-06-23T09:38:03.1054352Z             },
2026-06-23T09:38:03.1054460Z             {
2026-06-23T09:38:03.1054584Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1054699Z               "line": 357
2026-06-23T09:38:03.1054798Z             }
2026-06-23T09:38:03.1054898Z           ]
2026-06-23T09:38:03.1054990Z         },
2026-06-23T09:38:03.1055098Z         "int": {
2026-06-23T09:38:03.1055203Z           "complete": false,
2026-06-23T09:38:03.1055318Z           "evidence": []
2026-06-23T09:38:03.1055423Z         },
2026-06-23T09:38:03.1055528Z         "unit": {
2026-06-23T09:38:03.1055647Z           "complete": false,
2026-06-23T09:38:03.1055742Z           "evidence": []
2026-06-23T09:38:03.1055852Z         }
2026-06-23T09:38:03.1055952Z       }
2026-06-23T09:38:03.1056043Z     },
2026-06-23T09:38:03.1056148Z     {
2026-06-23T09:38:03.1056263Z       "id": "REQ-REL-2",
2026-06-23T09:38:03.1056778Z       "title": "Release asset set consumable by the self-updater: platform binaries, SHA256SUMS, SignedRelease metadata, manifest schema, mock-adapter zip; tag-triggered cross-repo pipeline",
2026-06-23T09:38:03.1056893Z       "requiredStages": [
2026-06-23T09:38:03.1057000Z         "impl",
2026-06-23T09:38:03.1057109Z         "int"
2026-06-23T09:38:03.1057211Z       ],
2026-06-23T09:38:03.1057320Z       "stages": {
2026-06-23T09:38:03.1057424Z         "doc": {
2026-06-23T09:38:03.1057530Z           "complete": true,
2026-06-23T09:38:03.1057639Z           "evidence": [
2026-06-23T09:38:03.1057835Z             {
2026-06-23T09:38:03.1057973Z               "path": "docs/RELEASE-RUNBOOK.md",
2026-06-23T09:38:03.1058068Z               "line": 6
2026-06-23T09:38:03.1058169Z             }
2026-06-23T09:38:03.1058269Z           ]
2026-06-23T09:38:03.1058373Z         },
2026-06-23T09:38:03.1058475Z         "impl": {
2026-06-23T09:38:03.1058593Z           "complete": true,
2026-06-23T09:38:03.1058775Z           "evidence": [
2026-06-23T09:38:03.1058878Z             {
2026-06-23T09:38:03.1059090Z               "path": ".github/workflows/release.yml",
2026-06-23T09:38:03.1059193Z               "line": 16
2026-06-23T09:38:03.1059288Z             },
2026-06-23T09:38:03.1059388Z             {
2026-06-23T09:38:03.1059520Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1059624Z               "line": 444
2026-06-23T09:38:03.1059729Z             },
2026-06-23T09:38:03.1059830Z             {
2026-06-23T09:38:03.1059962Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1060058Z               "line": 518
2026-06-23T09:38:03.1060164Z             },
2026-06-23T09:38:03.1060272Z             {
2026-06-23T09:38:03.1060402Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1060506Z               "line": 680
2026-06-23T09:38:03.1060611Z             },
2026-06-23T09:38:03.1060703Z             {
2026-06-23T09:38:03.1060826Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1060935Z               "line": 812
2026-06-23T09:38:03.1061041Z             }
2026-06-23T09:38:03.1061146Z           ]
2026-06-23T09:38:03.1061254Z         },
2026-06-23T09:38:03.1061351Z         "int": {
2026-06-23T09:38:03.1061464Z           "complete": true,
2026-06-23T09:38:03.1061569Z           "evidence": [
2026-06-23T09:38:03.1061666Z             {
2026-06-23T09:38:03.1061822Z               "path": "crates/spt/tests/release_verify_e2e.rs",
2026-06-23T09:38:03.1061933Z               "line": 13
2026-06-23T09:38:03.1062033Z             }
2026-06-23T09:38:03.1062141Z           ]
2026-06-23T09:38:03.1062231Z         },
2026-06-23T09:38:03.1062331Z         "unit": {
2026-06-23T09:38:03.1062443Z           "complete": false,
2026-06-23T09:38:03.1062558Z           "evidence": []
2026-06-23T09:38:03.1062668Z         }
2026-06-23T09:38:03.1062768Z       }
2026-06-23T09:38:03.1062877Z     },
2026-06-23T09:38:03.1062978Z     {
2026-06-23T09:38:03.1063091Z       "id": "REQ-REL-3",
2026-06-23T09:38:03.1063565Z       "title": "Two-key release-signing trust anchor: primary + offline never-used recovery, both pubkeys embedded in the binary's trusted set, manual local signing (ADR-0015)",
2026-06-23T09:38:03.1063683Z       "requiredStages": [
2026-06-23T09:38:03.1063788Z         "impl",
2026-06-23T09:38:03.1063890Z         "unit"
2026-06-23T09:38:03.1063993Z       ],
2026-06-23T09:38:03.1064103Z       "stages": {
2026-06-23T09:38:03.1064204Z         "doc": {
2026-06-23T09:38:03.1064312Z           "complete": false,
2026-06-23T09:38:03.1064427Z           "evidence": []
2026-06-23T09:38:03.1064538Z         },
2026-06-23T09:38:03.1064646Z         "impl": {
2026-06-23T09:38:03.1064764Z           "complete": true,
2026-06-23T09:38:03.1064870Z           "evidence": [
2026-06-23T09:38:03.1064977Z             {
2026-06-23T09:38:03.1065129Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1065240Z               "line": 247
2026-06-23T09:38:03.1065349Z             },
2026-06-23T09:38:03.1065453Z             {
2026-06-23T09:38:03.1065597Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1065706Z               "line": 299
2026-06-23T09:38:03.1065807Z             },
2026-06-23T09:38:03.1065912Z             {
2026-06-23T09:38:03.1066039Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1066155Z               "line": 421
2026-06-23T09:38:03.1066254Z             },
2026-06-23T09:38:03.1066364Z             {
2026-06-23T09:38:03.1066494Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1066708Z               "line": 445
2026-06-23T09:38:03.1066818Z             },
2026-06-23T09:38:03.1066917Z             {
2026-06-23T09:38:03.1067052Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1067161Z               "line": 486
2026-06-23T09:38:03.1067266Z             }
2026-06-23T09:38:03.1067362Z           ]
2026-06-23T09:38:03.1067462Z         },
2026-06-23T09:38:03.1067556Z         "int": {
2026-06-23T09:38:03.1067771Z           "complete": false,
2026-06-23T09:38:03.1067880Z           "evidence": []
2026-06-23T09:38:03.1067984Z         },
2026-06-23T09:38:03.1068095Z         "unit": {
2026-06-23T09:38:03.1068204Z           "complete": true,
2026-06-23T09:38:03.1068313Z           "evidence": [
2026-06-23T09:38:03.1068410Z             {
2026-06-23T09:38:03.1068556Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1068657Z               "line": 1055
2026-06-23T09:38:03.1068758Z             },
2026-06-23T09:38:03.1068867Z             {
2026-06-23T09:38:03.1069073Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1069191Z               "line": 1114
2026-06-23T09:38:03.1069297Z             }
2026-06-23T09:38:03.1069392Z           ]
2026-06-23T09:38:03.1069501Z         }
2026-06-23T09:38:03.1069592Z       }
2026-06-23T09:38:03.1069688Z     },
2026-06-23T09:38:03.1069777Z     {
2026-06-23T09:38:03.1069904Z       "id": "REQ-RUN-MULTISUBNET-HOME",
2026-06-23T09:38:03.1072753Z       "title": "`spt endpoint run` resolves the home subnet at the skeleton-create step and pre-creates the skeleton perch carrying it, so the harness `bind` inherits home via establish_perch's immutable prior-branch (no hook change, no env injection). Resolution: sole-subnet auto; multi-subnet + no --subnet + NON-interactive terminal -> refuse early with MRU-ordered --subnet guidance (never the silent 25s online-timeout); multi-subnet + no --subnet + INTERACTIVE -> print proposed config (id/project/adapter[:profile]/home=MRU-default) + 'Ok to proceed? Y/n', n -> --subnet guidance; --subnet overrides + validates membership. MRU = ordered move-to-front LISTs at two levels (per-project + always-updated node-global fallback). Home stays IMMUTABLE (ADR-0010). Fixes the LATENT multi-subnet bringup gap (perri, not a regression — HOME_REFUSED established >=0.11.0; exposed by the node crossing 1->2 subnets). (ADR-0026)",
2026-06-23T09:38:03.1072877Z       "requiredStages": [
2026-06-23T09:38:03.1072971Z         "doc",
2026-06-23T09:38:03.1073079Z         "impl",
2026-06-23T09:38:03.1073171Z         "unit",
2026-06-23T09:38:03.1073276Z         "int"
2026-06-23T09:38:03.1073380Z       ],
2026-06-23T09:38:03.1073486Z       "stages": {
2026-06-23T09:38:03.1073596Z         "doc": {
2026-06-23T09:38:03.1073704Z           "complete": true,
2026-06-23T09:38:03.1073810Z           "evidence": [
2026-06-23T09:38:03.1073910Z             {
2026-06-23T09:38:03.1074135Z               "path": "docs/adr/0026-multi-subnet-home-at-endpoint-run-creation.md",
2026-06-23T09:38:03.1074234Z               "line": 3
2026-06-23T09:38:03.1074324Z             }
2026-06-23T09:38:03.1074430Z           ]
2026-06-23T09:38:03.1074520Z         },
2026-06-23T09:38:03.1074624Z         "impl": {
2026-06-23T09:38:03.1074731Z           "complete": true,
2026-06-23T09:38:03.1074840Z           "evidence": [
2026-06-23T09:38:03.1074944Z             {
2026-06-23T09:38:03.1075094Z               "path": "crates/spt-store/src/recent_home.rs",
2026-06-23T09:38:03.1075206Z               "line": 16
2026-06-23T09:38:03.1075310Z             },
2026-06-23T09:38:03.1075415Z             {
2026-06-23T09:38:03.1075561Z               "path": "crates/spt-store/src/recent_home.rs",
2026-06-23T09:38:03.1075675Z               "line": 42
2026-06-23T09:38:03.1075776Z             },
2026-06-23T09:38:03.1075885Z             {
2026-06-23T09:38:03.1076028Z               "path": "crates/spt-store/src/recent_home.rs",
2026-06-23T09:38:03.1076133Z               "line": 50
2026-06-23T09:38:03.1076242Z             },
2026-06-23T09:38:03.1076343Z             {
2026-06-23T09:38:03.1076586Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1076697Z               "line": 1432
2026-06-23T09:38:03.1076805Z             },
2026-06-23T09:38:03.1076914Z             {
2026-06-23T09:38:03.1077063Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1077177Z               "line": 1515
2026-06-23T09:38:03.1077278Z             },
2026-06-23T09:38:03.1077482Z             {
2026-06-23T09:38:03.1077607Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1077721Z               "line": 1537
2026-06-23T09:38:03.1077826Z             },
2026-06-23T09:38:03.1077927Z             {
2026-06-23T09:38:03.1078059Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1078168Z               "line": 1557
2026-06-23T09:38:03.1078273Z             },
2026-06-23T09:38:03.1078374Z             {
2026-06-23T09:38:03.1078501Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1078621Z               "line": 1586
2026-06-23T09:38:03.1078722Z             },
2026-06-23T09:38:03.1078835Z             {
2026-06-23T09:38:03.1079041Z               "path": "crates/spt/src/picker/mod.rs",
2026-06-23T09:38:03.1079154Z               "line": 274
2026-06-23T09:38:03.1079251Z             }
2026-06-23T09:38:03.1079360Z           ]
2026-06-23T09:38:03.1079460Z         },
2026-06-23T09:38:03.1079562Z         "int": {
2026-06-23T09:38:03.1079670Z           "complete": true,
2026-06-23T09:38:03.1079775Z           "evidence": [
2026-06-23T09:38:03.1079881Z             {
2026-06-23T09:38:03.1080056Z               "path": "crates/spt/tests/multi_subnet_bringup_e2e.rs",
2026-06-23T09:38:03.1080171Z               "line": 198
2026-06-23T09:38:03.1080276Z             },
2026-06-23T09:38:03.1080374Z             {
2026-06-23T09:38:03.1080546Z               "path": "crates/spt/tests/multi_subnet_bringup_e2e.rs",
2026-06-23T09:38:03.1080650Z               "line": 279
2026-06-23T09:38:03.1080753Z             },
2026-06-23T09:38:03.1080854Z             {
2026-06-23T09:38:03.1081016Z               "path": "crates/spt/tests/multi_subnet_bringup_e2e.rs",
2026-06-23T09:38:03.1081130Z               "line": 285
2026-06-23T09:38:03.1081231Z             },
2026-06-23T09:38:03.1081340Z             {
2026-06-23T09:38:03.1081498Z               "path": "crates/spt/tests/multi_subnet_bringup_e2e.rs",
2026-06-23T09:38:03.1081613Z               "line": 296
2026-06-23T09:38:03.1081721Z             }
2026-06-23T09:38:03.1081823Z           ]
2026-06-23T09:38:03.1081927Z         },
2026-06-23T09:38:03.1082026Z         "unit": {
2026-06-23T09:38:03.1082137Z           "complete": true,
2026-06-23T09:38:03.1082241Z           "evidence": [
2026-06-23T09:38:03.1082351Z             {
2026-06-23T09:38:03.1082500Z               "path": "crates/spt-store/src/recent_home.rs",
2026-06-23T09:38:03.1082604Z               "line": 115
2026-06-23T09:38:03.1082704Z             },
2026-06-23T09:38:03.1082810Z             {
2026-06-23T09:38:03.1082957Z               "path": "crates/spt-store/src/recent_home.rs",
2026-06-23T09:38:03.1083063Z               "line": 137
2026-06-23T09:38:03.1083167Z             },
2026-06-23T09:38:03.1083270Z             {
2026-06-23T09:38:03.1083408Z               "path": "crates/spt-store/src/recent_home.rs",
2026-06-23T09:38:03.1083512Z               "line": 156
2026-06-23T09:38:03.1083616Z             },
2026-06-23T09:38:03.1083712Z             {
2026-06-23T09:38:03.1083855Z               "path": "crates/spt-store/src/recent_home.rs",
2026-06-23T09:38:03.1083973Z               "line": 170
2026-06-23T09:38:03.1084080Z             },
2026-06-23T09:38:03.1084184Z             {
2026-06-23T09:38:03.1084332Z               "path": "crates/spt-store/src/recent_home.rs",
2026-06-23T09:38:03.1084437Z               "line": 189
2026-06-23T09:38:03.1084541Z             },
2026-06-23T09:38:03.1084641Z             {
2026-06-23T09:38:03.1084794Z               "path": "crates/spt-store/src/recent_home.rs",
2026-06-23T09:38:03.1084903Z               "line": 198
2026-06-23T09:38:03.1085103Z             },
2026-06-23T09:38:03.1085218Z             {
2026-06-23T09:38:03.1085339Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1085446Z               "line": 1690
2026-06-23T09:38:03.1085557Z             },
2026-06-23T09:38:03.1085663Z             {
2026-06-23T09:38:03.1085799Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1085908Z               "line": 1740
2026-06-23T09:38:03.1086126Z             }
2026-06-23T09:38:03.1086220Z           ]
2026-06-23T09:38:03.1086326Z         }
2026-06-23T09:38:03.1086426Z       }
2026-06-23T09:38:03.1089215Z     },
2026-06-23T09:38:03.1089333Z     {
2026-06-23T09:38:03.1089463Z       "id": "REQ-RUN-PICKER",
2026-06-23T09:38:03.1094358Z       "title": "Interactive `spt endpoint run` picker (ratatui TUI): bare `spt endpoint run` (no --adapter/--id) enters an in-process picker (flags-present = the REQ-HOST-RUN-1 non-interactive path, untouched). Layer 1 picks kind (Create new | Pick existing). Create-new: choose a registered kind=\"harness\" adapter with its shipped+local profiles tree-nested (registry::registered / manifest.profiles / local_profile_names) → enter a charset-validated id → start. Pick-existing: category select (left/right) over [<cwd-project> | Local node | Subnet], endpoints grouped + alphabetically sorted per category, a status square per endpoint (online green ■ / offline gray ▢ — the blue \"attached\" tri-state + Kick are DEFERRED to a broker attach-presence slice, M12-W2-RULING Q1), type-to-filter (`/`, nucleo-matcher), a pinned keybind legend, and a right-half two-pane description (harness adapter:profile · best-effort project history newest→oldest from the contextstore p-<project> branches, empty-if-none · `spt endpoint description`). Confirm layer offers status-dependent options — Attach/Start/View (rc pump / cmd_endpoint_run) · Instantiate-locally (remote) · Change-harness-adapter (offline) · Fork (cmd_fork) · Resume-from-history (offline+LOCAL only; enumerate spt_store::sessions::last_k, titles `<project> @ <ts> (…id5)`, feed session_id → cmd_endpoint_run --resume). A single action enum is the source of truth so a future tap-mode (phone PTY) layers on without re-coupling to keybinds. EVERY terminal action routes through cmd_endpoint_run / existing CLI fns — no second bringup path.",
2026-06-23T09:38:03.1094505Z       "requiredStages": [
2026-06-23T09:38:03.1094611Z         "doc",
2026-06-23T09:38:03.1094716Z         "impl",
2026-06-23T09:38:03.1094824Z         "unit"
2026-06-23T09:38:03.1094926Z       ],
2026-06-23T09:38:03.1095020Z       "stages": {
2026-06-23T09:38:03.1095124Z         "doc": {
2026-06-23T09:38:03.1095236Z           "complete": true,
2026-06-23T09:38:03.1095344Z           "evidence": [
2026-06-23T09:38:03.1095454Z             {
2026-06-23T09:38:03.1095565Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1095678Z               "line": 362
2026-06-23T09:38:03.1095778Z             }
2026-06-23T09:38:03.1095879Z           ]
2026-06-23T09:38:03.1095979Z         },
2026-06-23T09:38:03.1096088Z         "impl": {
2026-06-23T09:38:03.1096204Z           "complete": true,
2026-06-23T09:38:03.1096317Z           "evidence": [
2026-06-23T09:38:03.1096421Z             {
2026-06-23T09:38:03.1096540Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1096653Z               "line": 1027
2026-06-23T09:38:03.1096748Z             },
2026-06-23T09:38:03.1096848Z             {
2026-06-23T09:38:03.1096977Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1097086Z               "line": 1037
2026-06-23T09:38:03.1097188Z             },
2026-06-23T09:38:03.1097292Z             {
2026-06-23T09:38:03.1097439Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.1097540Z               "line": 9
2026-06-23T09:38:03.1097649Z             },
2026-06-23T09:38:03.1097749Z             {
2026-06-23T09:38:03.1097878Z               "path": "crates/spt/src/picker/data.rs",
2026-06-23T09:38:03.1097992Z               "line": 67
2026-06-23T09:38:03.1098093Z             },
2026-06-23T09:38:03.1098326Z             {
2026-06-23T09:38:03.1098475Z               "path": "crates/spt/src/picker/mod.rs",
2026-06-23T09:38:03.1098578Z               "line": 16
2026-06-23T09:38:03.1098684Z             },
2026-06-23T09:38:03.1098781Z             {
2026-06-23T09:38:03.1098922Z               "path": "crates/spt/src/picker/mod.rs",
2026-06-23T09:38:03.1099105Z               "line": 254
2026-06-23T09:38:03.1099307Z             },
2026-06-23T09:38:03.1099398Z             {
2026-06-23T09:38:03.1099541Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1099640Z               "line": 11
2026-06-23T09:38:03.1099747Z             },
2026-06-23T09:38:03.1099851Z             {
2026-06-23T09:38:03.1099979Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1100085Z               "line": 126
2026-06-23T09:38:03.1100185Z             },
2026-06-23T09:38:03.1100284Z             {
2026-06-23T09:38:03.1100423Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1100528Z               "line": 582
2026-06-23T09:38:03.1100638Z             },
2026-06-23T09:38:03.1100738Z             {
2026-06-23T09:38:03.1100871Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1100982Z               "line": 663
2026-06-23T09:38:03.1101096Z             },
2026-06-23T09:38:03.1101219Z             {
2026-06-23T09:38:03.1101354Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1101462Z               "line": 722
2026-06-23T09:38:03.1101562Z             },
2026-06-23T09:38:03.1101662Z             {
2026-06-23T09:38:03.1101793Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1101893Z               "line": 775
2026-06-23T09:38:03.1101993Z             },
2026-06-23T09:38:03.1102093Z             {
2026-06-23T09:38:03.1102232Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1102337Z               "line": 813
2026-06-23T09:38:03.1102442Z             },
2026-06-23T09:38:03.1102546Z             {
2026-06-23T09:38:03.1102676Z               "path": "crates/spt/src/picker/view.rs",
2026-06-23T09:38:03.1102780Z               "line": 8
2026-06-23T09:38:03.1102885Z             }
2026-06-23T09:38:03.1102990Z           ]
2026-06-23T09:38:03.1103090Z         },
2026-06-23T09:38:03.1103195Z         "int": {
2026-06-23T09:38:03.1103300Z           "complete": false,
2026-06-23T09:38:03.1103405Z           "evidence": []
2026-06-23T09:38:03.1103510Z         },
2026-06-23T09:38:03.1103615Z         "unit": {
2026-06-23T09:38:03.1103724Z           "complete": true,
2026-06-23T09:38:03.1103834Z           "evidence": [
2026-06-23T09:38:03.1103930Z             {
2026-06-23T09:38:03.1104058Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1104164Z               "line": 9015
2026-06-23T09:38:03.1104264Z             },
2026-06-23T09:38:03.1104367Z             {
2026-06-23T09:38:03.1104495Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1104604Z               "line": 9026
2026-06-23T09:38:03.1104708Z             },
2026-06-23T09:38:03.1104808Z             {
2026-06-23T09:38:03.1104937Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1105036Z               "line": 908
2026-06-23T09:38:03.1105132Z             },
2026-06-23T09:38:03.1105233Z             {
2026-06-23T09:38:03.1105361Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1105476Z               "line": 995
2026-06-23T09:38:03.1105576Z             },
2026-06-23T09:38:03.1105671Z             {
2026-06-23T09:38:03.1105801Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1105909Z               "line": 1046
2026-06-23T09:38:03.1106019Z             },
2026-06-23T09:38:03.1106116Z             {
2026-06-23T09:38:03.1106248Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1106362Z               "line": 1063
2026-06-23T09:38:03.1106454Z             },
2026-06-23T09:38:03.1106563Z             {
2026-06-23T09:38:03.1106891Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1106995Z               "line": 1072
2026-06-23T09:38:03.1107095Z             },
2026-06-23T09:38:03.1107195Z             {
2026-06-23T09:38:03.1107322Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1107427Z               "line": 1083
2026-06-23T09:38:03.1107533Z             },
2026-06-23T09:38:03.1107694Z             {
2026-06-23T09:38:03.1107838Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1107946Z               "line": 1105
2026-06-23T09:38:03.1108053Z             },
2026-06-23T09:38:03.1108152Z             {
2026-06-23T09:38:03.1108280Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1108382Z               "line": 1124
2026-06-23T09:38:03.1108481Z             },
2026-06-23T09:38:03.1108590Z             {
2026-06-23T09:38:03.1108721Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1108834Z               "line": 1174
2026-06-23T09:38:03.1109030Z             },
2026-06-23T09:38:03.1109129Z             {
2026-06-23T09:38:03.1109263Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1109369Z               "line": 1203
2026-06-23T09:38:03.1109472Z             },
2026-06-23T09:38:03.1109573Z             {
2026-06-23T09:38:03.1109708Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1109815Z               "line": 1216
2026-06-23T09:38:03.1109915Z             },
2026-06-23T09:38:03.1110021Z             {
2026-06-23T09:38:03.1110148Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1110259Z               "line": 1282
2026-06-23T09:38:03.1110364Z             },
2026-06-23T09:38:03.1110468Z             {
2026-06-23T09:38:03.1110603Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1110712Z               "line": 1323
2026-06-23T09:38:03.1110811Z             },
2026-06-23T09:38:03.1110912Z             {
2026-06-23T09:38:03.1111050Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1111155Z               "line": 1339
2026-06-23T09:38:03.1111256Z             },
2026-06-23T09:38:03.1111365Z             {
2026-06-23T09:38:03.1111498Z               "path": "crates/spt/src/picker/view.rs",
2026-06-23T09:38:03.1111609Z               "line": 524
2026-06-23T09:38:03.1111703Z             },
2026-06-23T09:38:03.1111803Z             {
2026-06-23T09:38:03.1111947Z               "path": "crates/spt/src/picker/view.rs",
2026-06-23T09:38:03.1112041Z               "line": 539
2026-06-23T09:38:03.1112140Z             },
2026-06-23T09:38:03.1112241Z             {
2026-06-23T09:38:03.1112372Z               "path": "crates/spt/src/picker/view.rs",
2026-06-23T09:38:03.1112472Z               "line": 557
2026-06-23T09:38:03.1112578Z             },
2026-06-23T09:38:03.1112677Z             {
2026-06-23T09:38:03.1112811Z               "path": "crates/spt/src/picker/view.rs",
2026-06-23T09:38:03.1112921Z               "line": 579
2026-06-23T09:38:03.1113025Z             },
2026-06-23T09:38:03.1113126Z             {
2026-06-23T09:38:03.1113264Z               "path": "crates/spt/src/picker/view.rs",
2026-06-23T09:38:03.1113373Z               "line": 589
2026-06-23T09:38:03.1113480Z             },
2026-06-23T09:38:03.1113569Z             {
2026-06-23T09:38:03.1113698Z               "path": "crates/spt/src/picker/view.rs",
2026-06-23T09:38:03.1113809Z               "line": 615
2026-06-23T09:38:03.1113912Z             }
2026-06-23T09:38:03.1114008Z           ]
2026-06-23T09:38:03.1114114Z         }
2026-06-23T09:38:03.1114213Z       }
2026-06-23T09:38:03.1114304Z     },
2026-06-23T09:38:03.1114404Z     {
2026-06-23T09:38:03.1114514Z       "id": "REQ-RUN-SHORTCUT",
2026-06-23T09:38:03.1119385Z       "title": "`<basename>-<id>` launcher shortcut generation (picker `s` keybind, M12-W2-T2.4): from any pre-start options set the picker writes/updates a `<basename>-<id>` launcher at the project root baking the current selection's non-interactive `spt endpoint run` flags (terminal actions only: adapter[:profile] + id + (create|resume) + (start|attach|view); Kick/Instantiate/Change-adapter/Fork are interactive-only, not bakeable). BASENAME IS A PARAMETER (operator rev. 2026-06-14): harness-agnostic spt-core defaults to `spt` (→ `spt-<id>`); an adapter/flow OVERRIDES it (spt-claude-code → `cc`), so spt-core NEVER bakes `cc` (a harness name) into itself. The basename must be a DISTINCT token, never bare `spt` (a `spt.cmd` would shadow the real `spt.exe` only under cmd.exe cwd-first search, silently no-op in PowerShell/Unix, and self-recurse). The script is the CURRENT OS's native form — `.cmd` on Windows (NOT `.ps1`: default PATHEXT excludes `.ps1` so a bare/ext-less name never resolves one; `.cmd` is PATHEXT-resolvable), POSIX `sh` (+chmod +x) on Unix (a single portable form can't be both). The generated header documents the invocation reality (cmd.exe bare `<name>` in the project dir / PowerShell `.\\<name>` / Unix `./<name>`; a truly-bare basename on PATH = a PATH-installed launcher, `/spt:setup`'s job). Overwrite is SENTINEL-guarded: the generator writes + checks a generated-by header marker — it overwrites its own prior output freely, but REFUSES + warns if a same-named file lacks the sentinel (never clobber a user file). Requires the additive `--create` flag on `Run{}` (the default-fresh made explicit; N-1-safe).",
2026-06-23T09:38:03.1119628Z       "requiredStages": [
2026-06-23T09:38:03.1119738Z         "doc",
2026-06-23T09:38:03.1119838Z         "impl",
2026-06-23T09:38:03.1119939Z         "unit"
2026-06-23T09:38:03.1120037Z       ],
2026-06-23T09:38:03.1120143Z       "stages": {
2026-06-23T09:38:03.1120244Z         "doc": {
2026-06-23T09:38:03.1120351Z           "complete": true,
2026-06-23T09:38:03.1120456Z           "evidence": [
2026-06-23T09:38:03.1120557Z             {
2026-06-23T09:38:03.1120676Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1120794Z               "line": 403
2026-06-23T09:38:03.1120891Z             }
2026-06-23T09:38:03.1121000Z           ]
2026-06-23T09:38:03.1121099Z         },
2026-06-23T09:38:03.1121206Z         "impl": {
2026-06-23T09:38:03.1121310Z           "complete": true,
2026-06-23T09:38:03.1121410Z           "evidence": [
2026-06-23T09:38:03.1121506Z             {
2026-06-23T09:38:03.1121658Z               "path": "crates/spt/src/picker/shortcut.rs",
2026-06-23T09:38:03.1121763Z               "line": 39
2026-06-23T09:38:03.1121864Z             },
2026-06-23T09:38:03.1121959Z             {
2026-06-23T09:38:03.1122098Z               "path": "crates/spt/src/picker/shortcut.rs",
2026-06-23T09:38:03.1122206Z               "line": 79
2026-06-23T09:38:03.1122306Z             },
2026-06-23T09:38:03.1122407Z             {
2026-06-23T09:38:03.1122545Z               "path": "crates/spt/src/picker/shortcut.rs",
2026-06-23T09:38:03.1122653Z               "line": 162
2026-06-23T09:38:03.1122753Z             }
2026-06-23T09:38:03.1122853Z           ]
2026-06-23T09:38:03.1122961Z         },
2026-06-23T09:38:03.1123056Z         "int": {
2026-06-23T09:38:03.1123167Z           "complete": false,
2026-06-23T09:38:03.1123271Z           "evidence": []
2026-06-23T09:38:03.1123371Z         },
2026-06-23T09:38:03.1123472Z         "unit": {
2026-06-23T09:38:03.1123580Z           "complete": true,
2026-06-23T09:38:03.1123686Z           "evidence": [
2026-06-23T09:38:03.1123791Z             {
2026-06-23T09:38:03.1123919Z               "path": "crates/spt/src/picker/shortcut.rs",
2026-06-23T09:38:03.1124030Z               "line": 206
2026-06-23T09:38:03.1124125Z             },
2026-06-23T09:38:03.1124234Z             {
2026-06-23T09:38:03.1124364Z               "path": "crates/spt/src/picker/shortcut.rs",
2026-06-23T09:38:03.1124477Z               "line": 222
2026-06-23T09:38:03.1124582Z             },
2026-06-23T09:38:03.1124684Z             {
2026-06-23T09:38:03.1124815Z               "path": "crates/spt/src/picker/shortcut.rs",
2026-06-23T09:38:03.1124921Z               "line": 238
2026-06-23T09:38:03.1125023Z             },
2026-06-23T09:38:03.1125188Z             {
2026-06-23T09:38:03.1125332Z               "path": "crates/spt/src/picker/shortcut.rs",
2026-06-23T09:38:03.1125440Z               "line": 251
2026-06-23T09:38:03.1125534Z             },
2026-06-23T09:38:03.1125635Z             {
2026-06-23T09:38:03.1125771Z               "path": "crates/spt/src/picker/shortcut.rs",
2026-06-23T09:38:03.1125880Z               "line": 258
2026-06-23T09:38:03.1126034Z             }
2026-06-23T09:38:03.1126143Z           ]
2026-06-23T09:38:03.1126243Z         }
2026-06-23T09:38:03.1126334Z       }
2026-06-23T09:38:03.1126434Z     },
2026-06-23T09:38:03.1126533Z     {
2026-06-23T09:38:03.1126649Z       "id": "REQ-SEAM-ACTIVITY",
2026-06-23T09:38:03.1126848Z       "title": "Activity/idle reported via api sentinels, not PTY quiescence",
2026-06-23T09:38:03.1126954Z       "requiredStages": [
2026-06-23T09:38:03.1127063Z         "impl",
2026-06-23T09:38:03.1127163Z         "unit"
2026-06-23T09:38:03.1127269Z       ],
2026-06-23T09:38:03.1127368Z       "stages": {
2026-06-23T09:38:03.1127478Z         "doc": {
2026-06-23T09:38:03.1127589Z           "complete": false,
2026-06-23T09:38:03.1127697Z           "evidence": []
2026-06-23T09:38:03.1127802Z         },
2026-06-23T09:38:03.1127908Z         "impl": {
2026-06-23T09:38:03.1128021Z           "complete": true,
2026-06-23T09:38:03.1128125Z           "evidence": [
2026-06-23T09:38:03.1128230Z             {
2026-06-23T09:38:03.1128376Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1128480Z               "line": 18
2026-06-23T09:38:03.1128587Z             },
2026-06-23T09:38:03.1128681Z             {
2026-06-23T09:38:03.1128824Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1128929Z               "line": 35
2026-06-23T09:38:03.1129110Z             },
2026-06-23T09:38:03.1129215Z             {
2026-06-23T09:38:03.1129339Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1129444Z               "line": 72
2026-06-23T09:38:03.1129540Z             }
2026-06-23T09:38:03.1129645Z           ]
2026-06-23T09:38:03.1129730Z         },
2026-06-23T09:38:03.1129831Z         "int": {
2026-06-23T09:38:03.1129935Z           "complete": false,
2026-06-23T09:38:03.1130040Z           "evidence": []
2026-06-23T09:38:03.1130146Z         },
2026-06-23T09:38:03.1130254Z         "unit": {
2026-06-23T09:38:03.1130364Z           "complete": true,
2026-06-23T09:38:03.1130470Z           "evidence": [
2026-06-23T09:38:03.1130574Z             {
2026-06-23T09:38:03.1130708Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1130814Z               "line": 239
2026-06-23T09:38:03.1130916Z             },
2026-06-23T09:38:03.1131016Z             {
2026-06-23T09:38:03.1131150Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1131259Z               "line": 256
2026-06-23T09:38:03.1131359Z             },
2026-06-23T09:38:03.1131461Z             {
2026-06-23T09:38:03.1131597Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1131713Z               "line": 265
2026-06-23T09:38:03.1131808Z             }
2026-06-23T09:38:03.1131903Z           ]
2026-06-23T09:38:03.1132003Z         }
2026-06-23T09:38:03.1132104Z       }
2026-06-23T09:38:03.1132190Z     },
2026-06-23T09:38:03.1132289Z     {
2026-06-23T09:38:03.1132414Z       "id": "REQ-SEAM-CAPABILITY",
2026-06-23T09:38:03.1132575Z       "title": "Hostable endpoint-types capability declaration",
2026-06-23T09:38:03.1132691Z       "requiredStages": [
2026-06-23T09:38:03.1132795Z         "impl",
2026-06-23T09:38:03.1132904Z         "unit"
2026-06-23T09:38:03.1133001Z       ],
2026-06-23T09:38:03.1133110Z       "stages": {
2026-06-23T09:38:03.1133214Z         "doc": {
2026-06-23T09:38:03.1133318Z           "complete": false,
2026-06-23T09:38:03.1133427Z           "evidence": []
2026-06-23T09:38:03.1133531Z         },
2026-06-23T09:38:03.1133645Z         "impl": {
2026-06-23T09:38:03.1133751Z           "complete": true,
2026-06-23T09:38:03.1133965Z           "evidence": [
2026-06-23T09:38:03.1134070Z             {
2026-06-23T09:38:03.1134217Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1134319Z               "line": 598
2026-06-23T09:38:03.1134423Z             }
2026-06-23T09:38:03.1134527Z           ]
2026-06-23T09:38:03.1134628Z         },
2026-06-23T09:38:03.1134738Z         "int": {
2026-06-23T09:38:03.1134851Z           "complete": false,
2026-06-23T09:38:03.1135052Z           "evidence": []
2026-06-23T09:38:03.1135157Z         },
2026-06-23T09:38:03.1135258Z         "unit": {
2026-06-23T09:38:03.1135375Z           "complete": true,
2026-06-23T09:38:03.1135476Z           "evidence": [
2026-06-23T09:38:03.1135583Z             {
2026-06-23T09:38:03.1135729Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1135840Z               "line": 967
2026-06-23T09:38:03.1135949Z             }
2026-06-23T09:38:03.1136052Z           ]
2026-06-23T09:38:03.1136157Z         }
2026-06-23T09:38:03.1136252Z       }
2026-06-23T09:38:03.1136350Z     },
2026-06-23T09:38:03.1136449Z     {
2026-06-23T09:38:03.1136570Z       "id": "REQ-SEAM-HISTORY",
2026-06-23T09:38:03.1136779Z       "title": "History subsystem (fetcher / locate-normalize / native store)",
2026-06-23T09:38:03.1136894Z       "requiredStages": [
2026-06-23T09:38:03.1137003Z         "impl",
2026-06-23T09:38:03.1137098Z         "unit",
2026-06-23T09:38:03.1137204Z         "int"
2026-06-23T09:38:03.1137318Z       ],
2026-06-23T09:38:03.1137423Z       "stages": {
2026-06-23T09:38:03.1137524Z         "doc": {
2026-06-23T09:38:03.1137633Z           "complete": false,
2026-06-23T09:38:03.1137747Z           "evidence": []
2026-06-23T09:38:03.1137853Z         },
2026-06-23T09:38:03.1137961Z         "impl": {
2026-06-23T09:38:03.1138067Z           "complete": true,
2026-06-23T09:38:03.1138168Z           "evidence": [
2026-06-23T09:38:03.1138267Z             {
2026-06-23T09:38:03.1138401Z               "path": "crates/spt-live/src/echo.rs",
2026-06-23T09:38:03.1138511Z               "line": 24
2026-06-23T09:38:03.1138610Z             },
2026-06-23T09:38:03.1138704Z             {
2026-06-23T09:38:03.1138851Z               "path": "crates/spt-live/src/history.rs",
2026-06-23T09:38:03.1139026Z               "line": 22
2026-06-23T09:38:03.1139127Z             }
2026-06-23T09:38:03.1139232Z           ]
2026-06-23T09:38:03.1139341Z         },
2026-06-23T09:38:03.1139437Z         "int": {
2026-06-23T09:38:03.1139561Z           "complete": true,
2026-06-23T09:38:03.1139665Z           "evidence": [
2026-06-23T09:38:03.1139766Z             {
2026-06-23T09:38:03.1139913Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:03.1140019Z               "line": 260
2026-06-23T09:38:03.1140128Z             }
2026-06-23T09:38:03.1140228Z           ]
2026-06-23T09:38:03.1140333Z         },
2026-06-23T09:38:03.1140433Z         "unit": {
2026-06-23T09:38:03.1140538Z           "complete": true,
2026-06-23T09:38:03.1140648Z           "evidence": [
2026-06-23T09:38:03.1140748Z             {
2026-06-23T09:38:03.1140877Z               "path": "crates/spt-live/src/echo.rs",
2026-06-23T09:38:03.1140983Z               "line": 171
2026-06-23T09:38:03.1141091Z             },
2026-06-23T09:38:03.1141196Z             {
2026-06-23T09:38:03.1141326Z               "path": "crates/spt-live/src/echo.rs",
2026-06-23T09:38:03.1141439Z               "line": 200
2026-06-23T09:38:03.1141529Z             },
2026-06-23T09:38:03.1141644Z             {
2026-06-23T09:38:03.1141768Z               "path": "crates/spt-live/src/echo.rs",
2026-06-23T09:38:03.1141876Z               "line": 220
2026-06-23T09:38:03.1141982Z             },
2026-06-23T09:38:03.1142088Z             {
2026-06-23T09:38:03.1142230Z               "path": "crates/spt-live/src/history.rs",
2026-06-23T09:38:03.1142326Z               "line": 199
2026-06-23T09:38:03.1142435Z             },
2026-06-23T09:38:03.1142525Z             {
2026-06-23T09:38:03.1142659Z               "path": "crates/spt-live/src/history.rs",
2026-06-23T09:38:03.1142869Z               "line": 219
2026-06-23T09:38:03.1142974Z             },
2026-06-23T09:38:03.1143074Z             {
2026-06-23T09:38:03.1143213Z               "path": "crates/spt-live/src/history.rs",
2026-06-23T09:38:03.1143327Z               "line": 244
2026-06-23T09:38:03.1143432Z             },
2026-06-23T09:38:03.1143537Z             {
2026-06-23T09:38:03.1143679Z               "path": "crates/spt-live/src/history.rs",
2026-06-23T09:38:03.1143874Z               "line": 276
2026-06-23T09:38:03.1143978Z             },
2026-06-23T09:38:03.1144076Z             {
2026-06-23T09:38:03.1144220Z               "path": "crates/spt-live/src/history.rs",
2026-06-23T09:38:03.1144316Z               "line": 297
2026-06-23T09:38:03.1144410Z             },
2026-06-23T09:38:03.1144520Z             {
2026-06-23T09:38:03.1144645Z               "path": "crates/spt-live/src/history.rs",
2026-06-23T09:38:03.1144758Z               "line": 324
2026-06-23T09:38:03.1144859Z             }
2026-06-23T09:38:03.1144964Z           ]
2026-06-23T09:38:03.1145068Z         }
2026-06-23T09:38:03.1145174Z       }
2026-06-23T09:38:03.1145273Z     },
2026-06-23T09:38:03.1145373Z     {
2026-06-23T09:38:03.1145493Z       "id": "REQ-SEAM-INJECT",
2026-06-23T09:38:03.1145673Z       "title": "inject-input methods configurable per activity-state",
2026-06-23T09:38:03.1145794Z       "requiredStages": [
2026-06-23T09:38:03.1145903Z         "impl",
2026-06-23T09:38:03.1146007Z         "unit"
2026-06-23T09:38:03.1146109Z       ],
2026-06-23T09:38:03.1146213Z       "stages": {
2026-06-23T09:38:03.1146313Z         "doc": {
2026-06-23T09:38:03.1146419Z           "complete": false,
2026-06-23T09:38:03.1146533Z           "evidence": []
2026-06-23T09:38:03.1146631Z         },
2026-06-23T09:38:03.1146746Z         "impl": {
2026-06-23T09:38:03.1146854Z           "complete": true,
2026-06-23T09:38:03.1146962Z           "evidence": [
2026-06-23T09:38:03.1147058Z             {
2026-06-23T09:38:03.1147202Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1147306Z               "line": 19
2026-06-23T09:38:03.1147407Z             },
2026-06-23T09:38:03.1147512Z             {
2026-06-23T09:38:03.1147653Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1147760Z               "line": 111
2026-06-23T09:38:03.1147864Z             }
2026-06-23T09:38:03.1147964Z           ]
2026-06-23T09:38:03.1148065Z         },
2026-06-23T09:38:03.1148169Z         "int": {
2026-06-23T09:38:03.1148283Z           "complete": false,
2026-06-23T09:38:03.1148395Z           "evidence": []
2026-06-23T09:38:03.1148498Z         },
2026-06-23T09:38:03.1148603Z         "unit": {
2026-06-23T09:38:03.1148704Z           "complete": true,
2026-06-23T09:38:03.1148807Z           "evidence": [
2026-06-23T09:38:03.1148904Z             {
2026-06-23T09:38:03.1149108Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1149226Z               "line": 345
2026-06-23T09:38:03.1149322Z             },
2026-06-23T09:38:03.1149421Z             {
2026-06-23T09:38:03.1149548Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1149659Z               "line": 365
2026-06-23T09:38:03.1149768Z             }
2026-06-23T09:38:03.1149867Z           ]
2026-06-23T09:38:03.1149974Z         }
2026-06-23T09:38:03.1150069Z       }
2026-06-23T09:38:03.1150168Z     },
2026-06-23T09:38:03.1150264Z     {
2026-06-23T09:38:03.1150388Z       "id": "REQ-SEAM-POSTSPAWN",
2026-06-23T09:38:03.1150545Z       "title": "post-spawn / api bind seam with boot nonce",
2026-06-23T09:38:03.1150660Z       "requiredStages": [
2026-06-23T09:38:03.1150765Z         "impl",
2026-06-23T09:38:03.1150864Z         "unit"
2026-06-23T09:38:03.1150970Z       ],
2026-06-23T09:38:03.1151070Z       "stages": {
2026-06-23T09:38:03.1151169Z         "doc": {
2026-06-23T09:38:03.1151276Z           "complete": false,
2026-06-23T09:38:03.1151379Z           "evidence": []
2026-06-23T09:38:03.1151484Z         },
2026-06-23T09:38:03.1151581Z         "impl": {
2026-06-23T09:38:03.1151794Z           "complete": true,
2026-06-23T09:38:03.1151905Z           "evidence": [
2026-06-23T09:38:03.1152018Z             {
2026-06-23T09:38:03.1152151Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1152262Z               "line": 18
2026-06-23T09:38:03.1152366Z             },
2026-06-23T09:38:03.1152466Z             {
2026-06-23T09:38:03.1152600Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1152824Z               "line": 431
2026-06-23T09:38:03.1152929Z             }
2026-06-23T09:38:03.1153033Z           ]
2026-06-23T09:38:03.1153133Z         },
2026-06-23T09:38:03.1153243Z         "int": {
2026-06-23T09:38:03.1153352Z           "complete": false,
2026-06-23T09:38:03.1153463Z           "evidence": []
2026-06-23T09:38:03.1153563Z         },
2026-06-23T09:38:03.1153672Z         "unit": {
2026-06-23T09:38:03.1153788Z           "complete": true,
2026-06-23T09:38:03.1153897Z           "evidence": [
2026-06-23T09:38:03.1154006Z             {
2026-06-23T09:38:03.1154140Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1154244Z               "line": 881
2026-06-23T09:38:03.1154348Z             },
2026-06-23T09:38:03.1154458Z             {
2026-06-23T09:38:03.1154580Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1154684Z               "line": 891
2026-06-23T09:38:03.1154789Z             }
2026-06-23T09:38:03.1154894Z           ]
2026-06-23T09:38:03.1154994Z         }
2026-06-23T09:38:03.1155085Z       }
2026-06-23T09:38:03.1155185Z     },
2026-06-23T09:38:03.1155284Z     {
2026-06-23T09:38:03.1155400Z       "id": "REQ-SEAM-PSYCHE",
2026-06-23T09:38:03.1155571Z       "title": "spawn-psyche seam (fresh + resume templates)",
2026-06-23T09:38:03.1155676Z       "requiredStages": [
2026-06-23T09:38:03.1155786Z         "impl",
2026-06-23T09:38:03.1155891Z         "unit",
2026-06-23T09:38:03.1155995Z         "int"
2026-06-23T09:38:03.1156077Z       ],
2026-06-23T09:38:03.1156192Z       "stages": {
2026-06-23T09:38:03.1156296Z         "doc": {
2026-06-23T09:38:03.1156402Z           "complete": false,
2026-06-23T09:38:03.1156515Z           "evidence": []
2026-06-23T09:38:03.1156606Z         },
2026-06-23T09:38:03.1156717Z         "impl": {
2026-06-23T09:38:03.1156824Z           "complete": true,
2026-06-23T09:38:03.1156931Z           "evidence": [
2026-06-23T09:38:03.1157041Z             {
2026-06-23T09:38:03.1157172Z               "path": "crates/spt-live/src/psyche.rs",
2026-06-23T09:38:03.1157282Z               "line": 19
2026-06-23T09:38:03.1157391Z             },
2026-06-23T09:38:03.1157494Z             {
2026-06-23T09:38:03.1157628Z               "path": "crates/spt/src/api/live.rs",
2026-06-23T09:38:03.1157753Z               "line": 12
2026-06-23T09:38:03.1157856Z             },
2026-06-23T09:38:03.1157957Z             {
2026-06-23T09:38:03.1158091Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1158204Z               "line": 301
2026-06-23T09:38:03.1158306Z             }
2026-06-23T09:38:03.1158411Z           ]
2026-06-23T09:38:03.1175544Z         },
2026-06-23T09:38:03.1175649Z         "int": {
2026-06-23T09:38:03.1175757Z           "complete": true,
2026-06-23T09:38:03.1175871Z           "evidence": [
2026-06-23T09:38:03.1175972Z             {
2026-06-23T09:38:03.1176128Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:03.1176239Z               "line": 259
2026-06-23T09:38:03.1176348Z             }
2026-06-23T09:38:03.1176448Z           ]
2026-06-23T09:38:03.1176544Z         },
2026-06-23T09:38:03.1176654Z         "unit": {
2026-06-23T09:38:03.1176757Z           "complete": true,
2026-06-23T09:38:03.1176859Z           "evidence": [
2026-06-23T09:38:03.1176963Z             {
2026-06-23T09:38:03.1177116Z               "path": "crates/spt-live/src/psyche.rs",
2026-06-23T09:38:03.1177235Z               "line": 195
2026-06-23T09:38:03.1177340Z             },
2026-06-23T09:38:03.1177460Z             {
2026-06-23T09:38:03.1177741Z               "path": "crates/spt-live/src/psyche.rs",
2026-06-23T09:38:03.1178142Z               "line": 202
2026-06-23T09:38:03.1178373Z             },
2026-06-23T09:38:03.1178601Z             {
2026-06-23T09:38:03.1178839Z               "path": "crates/spt-live/src/psyche.rs",
2026-06-23T09:38:03.1179216Z               "line": 225
2026-06-23T09:38:03.1179445Z             },
2026-06-23T09:38:03.1179644Z             {
2026-06-23T09:38:03.1179983Z               "path": "crates/spt-live/src/pulse.rs",
2026-06-23T09:38:03.1180269Z               "line": 106
2026-06-23T09:38:03.1180493Z             },
2026-06-23T09:38:03.1180690Z             {
2026-06-23T09:38:03.1180921Z               "path": "crates/spt-live/src/pulse.rs",
2026-06-23T09:38:03.1181191Z               "line": 137
2026-06-23T09:38:03.1181406Z             },
2026-06-23T09:38:03.1181601Z             {
2026-06-23T09:38:03.1181824Z               "path": "crates/spt-live/src/pulse.rs",
2026-06-23T09:38:03.1182093Z               "line": 161
2026-06-23T09:38:03.1182312Z             }
2026-06-23T09:38:03.1182511Z           ]
2026-06-23T09:38:03.1182711Z         }
2026-06-23T09:38:03.1182908Z       }
2026-06-23T09:38:03.1183107Z     },
2026-06-23T09:38:03.1183300Z     {
2026-06-23T09:38:03.1183514Z       "id": "REQ-SEAM-RESUME",
2026-06-23T09:38:03.1183869Z       "title": "resume-session seam (fresh-with-preload / continue-existing)",
2026-06-23T09:38:03.1184228Z       "requiredStages": [
2026-06-23T09:38:03.1184465Z         "impl",
2026-06-23T09:38:03.1184675Z         "unit"
2026-06-23T09:38:03.1184877Z       ],
2026-06-23T09:38:03.1185076Z       "stages": {
2026-06-23T09:38:03.1185281Z         "doc": {
2026-06-23T09:38:03.1185492Z           "complete": false,
2026-06-23T09:38:03.1185734Z           "evidence": []
2026-06-23T09:38:03.1185953Z         },
2026-06-23T09:38:03.1186157Z         "impl": {
2026-06-23T09:38:03.1186374Z           "complete": true,
2026-06-23T09:38:03.1186608Z           "evidence": [
2026-06-23T09:38:03.1186823Z             {
2026-06-23T09:38:03.1187086Z               "path": "crates/spt-live/src/resume.rs",
2026-06-23T09:38:03.1187357Z               "line": 19
2026-06-23T09:38:03.1187581Z             }
2026-06-23T09:38:03.1187772Z           ]
2026-06-23T09:38:03.1187962Z         },
2026-06-23T09:38:03.1188162Z         "int": {
2026-06-23T09:38:03.1188383Z           "complete": false,
2026-06-23T09:38:03.1193216Z           "evidence": []
2026-06-23T09:38:03.1193464Z         },
2026-06-23T09:38:03.1193682Z         "unit": {
2026-06-23T09:38:03.1193906Z           "complete": true,
2026-06-23T09:38:03.1194141Z           "evidence": [
2026-06-23T09:38:03.1194363Z             {
2026-06-23T09:38:03.1194639Z               "path": "crates/spt-live/src/resume.rs",
2026-06-23T09:38:03.1194939Z               "line": 201
2026-06-23T09:38:03.1195150Z             },
2026-06-23T09:38:03.1195345Z             {
2026-06-23T09:38:03.1195597Z               "path": "crates/spt-live/src/resume.rs",
2026-06-23T09:38:03.1195875Z               "line": 223
2026-06-23T09:38:03.1196095Z             },
2026-06-23T09:38:03.1196290Z             {
2026-06-23T09:38:03.1196551Z               "path": "crates/spt-live/src/resume.rs",
2026-06-23T09:38:03.1196853Z               "line": 244
2026-06-23T09:38:03.1197069Z             }
2026-06-23T09:38:03.1197268Z           ]
2026-06-23T09:38:03.1197464Z         }
2026-06-23T09:38:03.1197670Z       }
2026-06-23T09:38:03.1197854Z     },
2026-06-23T09:38:03.1198055Z     {
2026-06-23T09:38:03.1198299Z       "id": "REQ-SEAM-SPAWN",
2026-06-23T09:38:03.1198575Z       "title": "spawn-session seam",
2026-06-23T09:38:03.1198856Z       "requiredStages": [
2026-06-23T09:38:03.1199191Z         "impl",
2026-06-23T09:38:03.1199399Z         "unit"
2026-06-23T09:38:03.1199599Z       ],
2026-06-23T09:38:03.1199791Z       "stages": {
2026-06-23T09:38:03.1199998Z         "doc": {
2026-06-23T09:38:03.1200208Z           "complete": false,
2026-06-23T09:38:03.1200454Z           "evidence": []
2026-06-23T09:38:03.1200674Z         },
2026-06-23T09:38:03.1200870Z         "impl": {
2026-06-23T09:38:03.1201251Z           "complete": true,
2026-06-23T09:38:03.1201505Z           "evidence": [
2026-06-23T09:38:03.1201728Z             {
2026-06-23T09:38:03.1201984Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.1202288Z               "line": 20
2026-06-23T09:38:03.1202498Z             }
2026-06-23T09:38:03.1202697Z           ]
2026-06-23T09:38:03.1202889Z         },
2026-06-23T09:38:03.1203203Z         "int": {
2026-06-23T09:38:03.1203423Z           "complete": false,
2026-06-23T09:38:03.1203656Z           "evidence": []
2026-06-23T09:38:03.1203871Z         },
2026-06-23T09:38:03.1204086Z         "unit": {
2026-06-23T09:38:03.1204305Z           "complete": true,
2026-06-23T09:38:03.1204538Z           "evidence": [
2026-06-23T09:38:03.1204758Z             {
2026-06-23T09:38:03.1205004Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.1205285Z               "line": 611
2026-06-23T09:38:03.1205500Z             },
2026-06-23T09:38:03.1205692Z             {
2026-06-23T09:38:03.1205929Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.1206239Z               "line": 618
2026-06-23T09:38:03.1206477Z             },
2026-06-23T09:38:03.1206683Z             {
2026-06-23T09:38:03.1206917Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.1207196Z               "line": 724
2026-06-23T09:38:03.1207418Z             },
2026-06-23T09:38:03.1207610Z             {
2026-06-23T09:38:03.1207847Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.1208124Z               "line": 730
2026-06-23T09:38:03.1208344Z             },
2026-06-23T09:38:03.1208535Z             {
2026-06-23T09:38:03.1208768Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.1209145Z               "line": 755
2026-06-23T09:38:03.1209373Z             },
2026-06-23T09:38:03.1209569Z             {
2026-06-23T09:38:03.1209794Z               "path": "crates/spt-runtime/src/runtime.rs",
2026-06-23T09:38:03.1210078Z               "line": 792
2026-06-23T09:38:03.1210300Z             }
2026-06-23T09:38:03.1210496Z           ]
2026-06-23T09:38:03.1210685Z         }
2026-06-23T09:38:03.1210882Z       }
2026-06-23T09:38:03.1211063Z     },
2026-06-23T09:38:03.1211258Z     {
2026-06-23T09:38:03.1211464Z       "id": "REQ-SEAM-UPDATE",
2026-06-23T09:38:03.1211783Z       "title": "Adapter-update avenue (file-pull / delegated command)",
2026-06-23T09:38:03.1212117Z       "requiredStages": [
2026-06-23T09:38:03.1212342Z         "impl",
2026-06-23T09:38:03.1212563Z         "unit"
2026-06-23T09:38:03.1212768Z       ],
2026-06-23T09:38:03.1212966Z       "stages": {
2026-06-23T09:38:03.1213167Z         "doc": {
2026-06-23T09:38:03.1213373Z           "complete": false,
2026-06-23T09:38:03.1213605Z           "evidence": []
2026-06-23T09:38:03.1213820Z         },
2026-06-23T09:38:03.1214011Z         "impl": {
2026-06-23T09:38:03.1214221Z           "complete": true,
2026-06-23T09:38:03.1214459Z           "evidence": [
2026-06-23T09:38:03.1214669Z             {
2026-06-23T09:38:03.1214918Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1215209Z               "line": 28
2026-06-23T09:38:03.1215416Z             },
2026-06-23T09:38:03.1215613Z             {
2026-06-23T09:38:03.1215855Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1216151Z               "line": 88
2026-06-23T09:38:03.1216375Z             }
2026-06-23T09:38:03.1216571Z           ]
2026-06-23T09:38:03.1216761Z         },
2026-06-23T09:38:03.1216943Z         "int": {
2026-06-23T09:38:03.1217149Z           "complete": false,
2026-06-23T09:38:03.1217380Z           "evidence": []
2026-06-23T09:38:03.1217595Z         },
2026-06-23T09:38:03.1217785Z         "unit": {
2026-06-23T09:38:03.1217997Z           "complete": true,
2026-06-23T09:38:03.1218237Z           "evidence": [
2026-06-23T09:38:03.1218455Z             {
2026-06-23T09:38:03.1218809Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1219219Z               "line": 332
2026-06-23T09:38:03.1219438Z             },
2026-06-23T09:38:03.1219638Z             {
2026-06-23T09:38:03.1219886Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1220176Z               "line": 343
2026-06-23T09:38:03.1220402Z             }
2026-06-23T09:38:03.1220599Z           ]
2026-06-23T09:38:03.1220893Z         }
2026-06-23T09:38:03.1221070Z       }
2026-06-23T09:38:03.1221250Z     },
2026-06-23T09:38:03.1221442Z     {
2026-06-23T09:38:03.1221633Z       "id": "REQ-SEC-1",
2026-06-23T09:38:03.1222181Z       "title": "Per-endpoint access whitelist: origin-node gate, stateful-firewall (reply/outbound exempt), node-now/user-later, outer gate before grants",
2026-06-23T09:38:03.1222728Z       "requiredStages": [
2026-06-23T09:38:03.1222950Z         "impl",
2026-06-23T09:38:03.1223138Z         "unit"
2026-06-23T09:38:03.1223328Z       ],
2026-06-23T09:38:03.1223527Z       "stages": {
2026-06-23T09:38:03.1223737Z         "doc": {
2026-06-23T09:38:03.1223942Z           "complete": false,
2026-06-23T09:38:03.1224180Z           "evidence": []
2026-06-23T09:38:03.1224394Z         },
2026-06-23T09:38:03.1224595Z         "impl": {
2026-06-23T09:38:03.1224800Z           "complete": true,
2026-06-23T09:38:03.1225029Z           "evidence": [
2026-06-23T09:38:03.1225239Z             {
2026-06-23T09:38:03.1225478Z               "path": "crates/spt-daemon/src/access.rs",
2026-06-23T09:38:03.1225759Z               "line": 86
2026-06-23T09:38:03.1225977Z             },
2026-06-23T09:38:03.1226163Z             {
2026-06-23T09:38:03.1226396Z               "path": "crates/spt-daemon/src/access.rs",
2026-06-23T09:38:03.1226686Z               "line": 116
2026-06-23T09:38:03.1226898Z             },
2026-06-23T09:38:03.1227093Z             {
2026-06-23T09:38:03.1227330Z               "path": "crates/spt-daemon/src/access.rs",
2026-06-23T09:38:03.1227607Z               "line": 130
2026-06-23T09:38:03.1227832Z             },
2026-06-23T09:38:03.1228023Z             {
2026-06-23T09:38:03.1228255Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1228529Z               "line": 109
2026-06-23T09:38:03.1228749Z             },
2026-06-23T09:38:03.1229015Z             {
2026-06-23T09:38:03.1229258Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1229534Z               "line": 130
2026-06-23T09:38:03.1229754Z             },
2026-06-23T09:38:03.1229965Z             {
2026-06-23T09:38:03.1230193Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1230474Z               "line": 143
2026-06-23T09:38:03.1230690Z             },
2026-06-23T09:38:03.1230886Z             {
2026-06-23T09:38:03.1231122Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1231401Z               "line": 209
2026-06-23T09:38:03.1231616Z             },
2026-06-23T09:38:03.1231815Z             {
2026-06-23T09:38:03.1232031Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1232307Z               "line": 235
2026-06-23T09:38:03.1232522Z             },
2026-06-23T09:38:03.1232712Z             {
2026-06-23T09:38:03.1232936Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1233205Z               "line": 5950
2026-06-23T09:38:03.1233433Z             }
2026-06-23T09:38:03.1233627Z           ]
2026-06-23T09:38:03.1233813Z         },
2026-06-23T09:38:03.1234006Z         "int": {
2026-06-23T09:38:03.1234212Z           "complete": false,
2026-06-23T09:38:03.1234445Z           "evidence": []
2026-06-23T09:38:03.1234659Z         },
2026-06-23T09:38:03.1234840Z         "unit": {
2026-06-23T09:38:03.1235055Z           "complete": true,
2026-06-23T09:38:03.1235283Z           "evidence": [
2026-06-23T09:38:03.1235479Z             {
2026-06-23T09:38:03.1235714Z               "path": "crates/spt-daemon/src/access.rs",
2026-06-23T09:38:03.1235990Z               "line": 142
2026-06-23T09:38:03.1236204Z             },
2026-06-23T09:38:03.1236527Z             {
2026-06-23T09:38:03.1236767Z               "path": "crates/spt-daemon/src/access.rs",
2026-06-23T09:38:03.1237062Z               "line": 194
2026-06-23T09:38:03.1237285Z             },
2026-06-23T09:38:03.1237486Z             {
2026-06-23T09:38:03.1237715Z               "path": "crates/spt-daemon/src/access.rs",
2026-06-23T09:38:03.1237983Z               "line": 235
2026-06-23T09:38:03.1238307Z             },
2026-06-23T09:38:03.1238506Z             {
2026-06-23T09:38:03.1238735Z               "path": "crates/spt-daemon/tests/access.rs",
2026-06-23T09:38:03.1239090Z               "line": 140
2026-06-23T09:38:03.1239328Z             },
2026-06-23T09:38:03.1239557Z             {
2026-06-23T09:38:03.1239789Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1240062Z               "line": 247
2026-06-23T09:38:03.1240282Z             },
2026-06-23T09:38:03.1240472Z             {
2026-06-23T09:38:03.1240706Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1240977Z               "line": 277
2026-06-23T09:38:03.1241212Z             },
2026-06-23T09:38:03.1241412Z             {
2026-06-23T09:38:03.1241635Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1241910Z               "line": 310
2026-06-23T09:38:03.1242123Z             },
2026-06-23T09:38:03.1242323Z             {
2026-06-23T09:38:03.1242548Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1242825Z               "line": 329
2026-06-23T09:38:03.1243029Z             },
2026-06-23T09:38:03.1243235Z             {
2026-06-23T09:38:03.1243459Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1243731Z               "line": 362
2026-06-23T09:38:03.1243935Z             },
2026-06-23T09:38:03.1244136Z             {
2026-06-23T09:38:03.1244368Z               "path": "crates/spt-store/src/access.rs",
2026-06-23T09:38:03.1244637Z               "line": 386
2026-06-23T09:38:03.1244842Z             },
2026-06-23T09:38:03.1245044Z             {
2026-06-23T09:38:03.1245261Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1245524Z               "line": 9692
2026-06-23T09:38:03.1245739Z             }
2026-06-23T09:38:03.1245930Z           ]
2026-06-23T09:38:03.1246125Z         }
2026-06-23T09:38:03.1246317Z       }
2026-06-23T09:38:03.1246507Z     },
2026-06-23T09:38:03.1246702Z     {
2026-06-23T09:38:03.1246928Z       "id": "REQ-SEND-SPT-HOSTED",
2026-06-23T09:38:03.1251081Z       "title": "An inbound `spt send` is DELIVERED to an spt-hosted endpoint (brought up via `spt endpoint run` → `api bind`, broker holds its PTY, NO `api listen` relay). Today cmd_bind→establish_perch (api/startup.rs ~441) writes info.json + ready marker + controllable=Some(true) but registers NO message-listener / NO address, so deliver.rs resolve_address→None→spool (deliver.rs:132-140) and the message NEVER reaches the live PTY — the endpoint reads 'online' (ready marker) yet `spt send` silently SPOOLS ('online but not deliverable' lie). Per CONTEXT:187-188 the daemon owns the PTY and delivers, manifest-configurable per activity-state (direct PTY injection / relay / HTTP). FIX: route an inbound send for an spt-hosted target through the daemon → broker InputReq → session.write_input PTY-inject (broker.rs dispatch_input/write_input ~988-1022), the same path the brain uses; the live-delivery handshake must report Sent (not Queued) and stop the spool-only fallback for a broker-hosted, PTY-resident endpoint. Detection is local: controllable==Some(true) + spt-hosted state + resolve_address==None. = the spt-core HALF of the wall-b finding (perri owns the adapter half: bind-hook fired-zero-perch + the missing endpoint-run int test). (post-v0.10.0)",
2026-06-23T09:38:03.1254563Z       "requiredStages": [
2026-06-23T09:38:03.1254790Z         "impl",
2026-06-23T09:38:03.1254999Z         "unit",
2026-06-23T09:38:03.1255202Z         "int"
2026-06-23T09:38:03.1255393Z       ],
2026-06-23T09:38:03.1255594Z       "stages": {
2026-06-23T09:38:03.1255909Z         "doc": {
2026-06-23T09:38:03.1256132Z           "complete": false,
2026-06-23T09:38:03.1256361Z           "evidence": []
2026-06-23T09:38:03.1256581Z         },
2026-06-23T09:38:03.1256785Z         "impl": {
2026-06-23T09:38:03.1257010Z           "complete": true,
2026-06-23T09:38:03.1257239Z           "evidence": [
2026-06-23T09:38:03.1257459Z             {
2026-06-23T09:38:03.1257705Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.1258091Z               "line": 1188
2026-06-23T09:38:03.1258324Z             },
2026-06-23T09:38:03.1258525Z             {
2026-06-23T09:38:03.1258764Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.1259122Z               "line": 1874
2026-06-23T09:38:03.1259365Z             },
2026-06-23T09:38:03.1259578Z             {
2026-06-23T09:38:03.1259784Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1260055Z               "line": 3500
2026-06-23T09:38:03.1260280Z             }
2026-06-23T09:38:03.1260473Z           ]
2026-06-23T09:38:03.1260662Z         },
2026-06-23T09:38:03.1260853Z         "int": {
2026-06-23T09:38:03.1261054Z           "complete": true,
2026-06-23T09:38:03.1261278Z           "evidence": [
2026-06-23T09:38:03.1261492Z             {
2026-06-23T09:38:03.1261735Z               "path": "crates/spt-daemon/tests/broker.rs",
2026-06-23T09:38:03.1262022Z               "line": 191
2026-06-23T09:38:03.1262246Z             },
2026-06-23T09:38:03.1262445Z             {
2026-06-23T09:38:03.1262671Z               "path": "crates/spt-daemon/tests/broker.rs",
2026-06-23T09:38:03.1262959Z               "line": 530
2026-06-23T09:38:03.1263167Z             }
2026-06-23T09:38:03.1263368Z           ]
2026-06-23T09:38:03.1263559Z         },
2026-06-23T09:38:03.1263749Z         "unit": {
2026-06-23T09:38:03.1263964Z           "complete": true,
2026-06-23T09:38:03.1264193Z           "evidence": [
2026-06-23T09:38:03.1264402Z             {
2026-06-23T09:38:03.1264636Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:03.1264909Z               "line": 1016
2026-06-23T09:38:03.1265133Z             },
2026-06-23T09:38:03.1265331Z             {
2026-06-23T09:38:03.1265550Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1265820Z               "line": 8863
2026-06-23T09:38:03.1266048Z             }
2026-06-23T09:38:03.1266245Z           ]
2026-06-23T09:38:03.1266436Z         }
2026-06-23T09:38:03.1266630Z       }
2026-06-23T09:38:03.1266826Z     },
2026-06-23T09:38:03.1267017Z     {
2026-06-23T09:38:03.1267232Z       "id": "REQ-SESSION-RESUME-TEMPLATE",
2026-06-23T09:38:03.1274524Z       "title": "Resuming an endpoint session that HAS conversation history brings up a BLANK session. ROOT (doyle, code-grounded + CONTEXT — case-3 spt-core MISSING feature, NOT a perri docs-miss): CONTEXT L127-129 already defines the resume-session seam ('continue-existing: resume an existing harness session under the adapter — its NATIVE resume'), and the manifest already has the resume-variant pattern (Session has BOTH psyche_init AND psyche_resume, manifest.rs:217-219) — but the agent's own session has ONLY self_ (`[session.self]`, no resume sibling). cmd_endpoint_run (cli.rs:1304) re-passes the session_id through `[session.self]` on resume (resume.unwrap_or_else(mint_session_id)), so the adapter's FRESH command (e.g. `claude --session-id ..`) runs again instead of the harness NATIVE resume (`claude -r ..`) -> CC starts a fresh transcript -> blank. spt-core forwards session_id + cwd faithfully; it just has no way to express the native-resume invocation. SECOND GAP: CC resolves a transcript by session_id + cwd, but the session ledger records only {ts, session_id, trigger} (no cwd), so picker Resume-from-history (cross-project rows) can't restore the right cwd. FIX (doyle design, V0.13.0-P2-SESSION-RESUME-DESIGN.md, mirrors psyche_init->psyche_resume exactly): (A) add a `[session.resume]` role (resume: Option<SessionRole> on Session + roles()/is_empty()); cmd_endpoint_run selects it when --resume is set AND it's declared (fill {id}/{session_id}=resumed id/{session_name} + the resume cwd), else FALL BACK to `[session.self]` (full back-compat). (B) record cwd PER ledger row (operator ruling): {ts, session_id, trigger, cwd} additive serde-default; resume cwd = resumed row cwd -> else perch info.cwd -> else current_dir (back-compat for old rows + single-project endpoints); picker threads the selected row's cwd through Outcome::Run -> cmd_endpoint_run. (C) public docs (MANIFEST + harness-contract) teach `[session.resume]` so perri builds the adapter side BLIND. Adapter follow-on (perri, AFTER spt-core ships+docs): declare `[session.resume] command = claude -r {session_id} --remote-control {id} --dangerously-skip-permissions` from the resume cwd. Completes REQ-READY-AGENT-RESUME / REQ-RUN-PICKER resume-from-history. (v0.13.0)",
2026-06-23T09:38:03.1280557Z       "requiredStages": [
2026-06-23T09:38:03.1280780Z         "doc",
2026-06-23T09:38:03.1280984Z         "impl",
2026-06-23T09:38:03.1281189Z         "unit",
2026-06-23T09:38:03.1281392Z         "int"
2026-06-23T09:38:03.1281588Z       ],
2026-06-23T09:38:03.1281783Z       "stages": {
2026-06-23T09:38:03.1281987Z         "doc": {
2026-06-23T09:38:03.1282202Z           "complete": true,
2026-06-23T09:38:03.1282432Z           "evidence": [
2026-06-23T09:38:03.1282640Z             {
2026-06-23T09:38:03.1282909Z               "path": "docs-site/src/harness-contract/manifest.md",
2026-06-23T09:38:03.1283222Z               "line": 130
2026-06-23T09:38:03.1283453Z             },
2026-06-23T09:38:03.1283652Z             {
2026-06-23T09:38:03.1283880Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:03.1284155Z               "line": 104
2026-06-23T09:38:03.1284374Z             }
2026-06-23T09:38:03.1284573Z           ]
2026-06-23T09:38:03.1284755Z         },
2026-06-23T09:38:03.1284960Z         "impl": {
2026-06-23T09:38:03.1285169Z           "complete": true,
2026-06-23T09:38:03.1285403Z           "evidence": [
2026-06-23T09:38:03.1285614Z             {
2026-06-23T09:38:03.1285871Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.1286171Z               "line": 77
2026-06-23T09:38:03.1286395Z             },
2026-06-23T09:38:03.1291474Z             {
2026-06-23T09:38:03.1291801Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.1292100Z               "line": 183
2026-06-23T09:38:03.1292328Z             },
2026-06-23T09:38:03.1292543Z             {
2026-06-23T09:38:03.1292801Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1293115Z               "line": 222
2026-06-23T09:38:03.1293345Z             },
2026-06-23T09:38:03.1293563Z             {
2026-06-23T09:38:03.1293807Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1294092Z               "line": 71
2026-06-23T09:38:03.1294333Z             },
2026-06-23T09:38:03.1294534Z             {
2026-06-23T09:38:03.1294771Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1295062Z               "line": 187
2026-06-23T09:38:03.1295278Z             }
2026-06-23T09:38:03.1295472Z           ]
2026-06-23T09:38:03.1295663Z         },
2026-06-23T09:38:03.1295859Z         "int": {
2026-06-23T09:38:03.1296068Z           "complete": true,
2026-06-23T09:38:03.1296302Z           "evidence": [
2026-06-23T09:38:03.1296513Z             {
2026-06-23T09:38:03.1296774Z               "path": "crates/spt/tests/resume_template_e2e.rs",
2026-06-23T09:38:03.1297087Z               "line": 25
2026-06-23T09:38:03.1297300Z             }
2026-06-23T09:38:03.1297496Z           ]
2026-06-23T09:38:03.1297696Z         },
2026-06-23T09:38:03.1297892Z         "unit": {
2026-06-23T09:38:03.1298101Z           "complete": true,
2026-06-23T09:38:03.1298325Z           "evidence": [
2026-06-23T09:38:03.1298530Z             {
2026-06-23T09:38:03.1298789Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.1299183Z               "line": 347
2026-06-23T09:38:03.1299423Z             },
2026-06-23T09:38:03.1299804Z             {
2026-06-23T09:38:03.1300060Z               "path": "crates/spt-daemon/src/harnesshost.rs",
2026-06-23T09:38:03.1300346Z               "line": 397
2026-06-23T09:38:03.1300565Z             },
2026-06-23T09:38:03.1300776Z             {
2026-06-23T09:38:03.1301019Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1301315Z               "line": 1291
2026-06-23T09:38:03.1301649Z             },
2026-06-23T09:38:03.1301843Z             {
2026-06-23T09:38:03.1302081Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1302375Z               "line": 184
2026-06-23T09:38:03.1302598Z             },
2026-06-23T09:38:03.1302802Z             {
2026-06-23T09:38:03.1303037Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1303332Z               "line": 208
2026-06-23T09:38:03.1303557Z             },
2026-06-23T09:38:03.1303761Z             {
2026-06-23T09:38:03.1303999Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1304286Z               "line": 236
2026-06-23T09:38:03.1304492Z             },
2026-06-23T09:38:03.1304691Z             {
2026-06-23T09:38:03.1304926Z               "path": "crates/spt/src/picker/model.rs",
2026-06-23T09:38:03.1305210Z               "line": 1012
2026-06-23T09:38:03.1305426Z             }
2026-06-23T09:38:03.1305614Z           ]
2026-06-23T09:38:03.1305814Z         }
2026-06-23T09:38:03.1306018Z       }
2026-06-23T09:38:03.1306214Z     },
2026-06-23T09:38:03.1306404Z     {
2026-06-23T09:38:03.1306609Z       "id": "REQ-SHELL-1",
2026-06-23T09:38:03.1307671Z       "title": "Shell hosting machinery: shell perch under the owner (type/owner/adapter_name/status/alias), broker-launched binary + api bind local-link handshake, the three channels (command durable, text+file durable + progress-queryable, sensory REST-only never spooled + dropped-unless-owner-live), owner exclusivity (CONTEXT Shell model)",
2026-06-23T09:38:03.1308733Z       "requiredStages": [
2026-06-23T09:38:03.1309081Z         "impl",
2026-06-23T09:38:03.1309335Z         "unit",
2026-06-23T09:38:03.1309534Z         "int"
2026-06-23T09:38:03.1309734Z       ],
2026-06-23T09:38:03.1309921Z       "stages": {
2026-06-23T09:38:03.1310125Z         "doc": {
2026-06-23T09:38:03.1310340Z           "complete": false,
2026-06-23T09:38:03.1310581Z           "evidence": []
2026-06-23T09:38:03.1310801Z         },
2026-06-23T09:38:03.1311007Z         "impl": {
2026-06-23T09:38:03.1311226Z           "complete": true,
2026-06-23T09:38:03.1311454Z           "evidence": [
2026-06-23T09:38:03.1311665Z             {
2026-06-23T09:38:03.1311913Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1312214Z               "line": 189
2026-06-23T09:38:03.1312432Z             },
2026-06-23T09:38:03.1312636Z             {
2026-06-23T09:38:03.1312869Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1313153Z               "line": 268
2026-06-23T09:38:03.1313372Z             },
2026-06-23T09:38:03.1313573Z             {
2026-06-23T09:38:03.1313821Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1314136Z               "line": 27
2026-06-23T09:38:03.1314374Z             },
2026-06-23T09:38:03.1314574Z             {
2026-06-23T09:38:03.1314823Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1315109Z               "line": 52
2026-06-23T09:38:03.1315323Z             },
2026-06-23T09:38:03.1315523Z             {
2026-06-23T09:38:03.1315746Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1316030Z               "line": 144
2026-06-23T09:38:03.1316249Z             },
2026-06-23T09:38:03.1316454Z             {
2026-06-23T09:38:03.1316684Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1316964Z               "line": 176
2026-06-23T09:38:03.1317184Z             },
2026-06-23T09:38:03.1317380Z             {
2026-06-23T09:38:03.1317793Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1318085Z               "line": 22
2026-06-23T09:38:03.1318298Z             },
2026-06-23T09:38:03.1318487Z             {
2026-06-23T09:38:03.1318726Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1319064Z               "line": 65
2026-06-23T09:38:03.1319284Z             },
2026-06-23T09:38:03.1319474Z             {
2026-06-23T09:38:03.1319822Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1320108Z               "line": 76
2026-06-23T09:38:03.1320322Z             },
2026-06-23T09:38:03.1320524Z             {
2026-06-23T09:38:03.1320757Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1321042Z               "line": 151
2026-06-23T09:38:03.1321253Z             },
2026-06-23T09:38:03.1321452Z             {
2026-06-23T09:38:03.1321695Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1321971Z               "line": 210
2026-06-23T09:38:03.1322186Z             },
2026-06-23T09:38:03.1322391Z             {
2026-06-23T09:38:03.1322625Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1322920Z               "line": 261
2026-06-23T09:38:03.1323136Z             },
2026-06-23T09:38:03.1323339Z             {
2026-06-23T09:38:03.1323585Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1323856Z               "line": 283
2026-06-23T09:38:03.1324067Z             },
2026-06-23T09:38:03.1324270Z             {
2026-06-23T09:38:03.1324505Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1324791Z               "line": 296
2026-06-23T09:38:03.1325016Z             },
2026-06-23T09:38:03.1325211Z             {
2026-06-23T09:38:03.1325440Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.1325707Z               "line": 217
2026-06-23T09:38:03.1325922Z             },
2026-06-23T09:38:03.1326121Z             {
2026-06-23T09:38:03.1326268Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.1326381Z               "line": 233
2026-06-23T09:38:03.1326480Z             },
2026-06-23T09:38:03.1326585Z             {
2026-06-23T09:38:03.1326724Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:03.1326842Z               "line": 41
2026-06-23T09:38:03.1326934Z             },
2026-06-23T09:38:03.1327034Z             {
2026-06-23T09:38:03.1327171Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:03.1327273Z               "line": 222
2026-06-23T09:38:03.1327378Z             },
2026-06-23T09:38:03.1327476Z             {
2026-06-23T09:38:03.1327621Z               "path": "crates/spt/src/api/delivery.rs",
2026-06-23T09:38:03.1327735Z               "line": 173
2026-06-23T09:38:03.1327839Z             },
2026-06-23T09:38:03.1327945Z             {
2026-06-23T09:38:03.1328078Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:03.1328189Z               "line": 354
2026-06-23T09:38:03.1328284Z             },
2026-06-23T09:38:03.1328388Z             {
2026-06-23T09:38:03.1328518Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:03.1328617Z               "line": 419
2026-06-23T09:38:03.1328720Z             },
2026-06-23T09:38:03.1328830Z             {
2026-06-23T09:38:03.1329047Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1329157Z               "line": 333
2026-06-23T09:38:03.1329258Z             },
2026-06-23T09:38:03.1329376Z             {
2026-06-23T09:38:03.1329511Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1329629Z               "line": 7385
2026-06-23T09:38:03.1329719Z             },
2026-06-23T09:38:03.1329825Z             {
2026-06-23T09:38:03.1329949Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1330058Z               "line": 7535
2026-06-23T09:38:03.1330159Z             },
2026-06-23T09:38:03.1330258Z             {
2026-06-23T09:38:03.1330493Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1330607Z               "line": 7711
2026-06-23T09:38:03.1330716Z             }
2026-06-23T09:38:03.1330817Z           ]
2026-06-23T09:38:03.1330921Z         },
2026-06-23T09:38:03.1331031Z         "int": {
2026-06-23T09:38:03.1331146Z           "complete": true,
2026-06-23T09:38:03.1331264Z           "evidence": [
2026-06-23T09:38:03.1331361Z             {
2026-06-23T09:38:03.1331607Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.1331711Z               "line": 717
2026-06-23T09:38:03.1331818Z             },
2026-06-23T09:38:03.1331921Z             {
2026-06-23T09:38:03.1332065Z               "path": "crates/spt-daemon/tests/shellchan.rs",
2026-06-23T09:38:03.1332193Z               "line": 8
2026-06-23T09:38:03.1332288Z             },
2026-06-23T09:38:03.1332404Z             {
2026-06-23T09:38:03.1332579Z               "path": "crates/spt-daemon/tests/shellchan.rs",
2026-06-23T09:38:03.1332695Z               "line": 49
2026-06-23T09:38:03.1332808Z             },
2026-06-23T09:38:03.1332903Z             {
2026-06-23T09:38:03.1333057Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1333161Z               "line": 780
2026-06-23T09:38:03.1333266Z             },
2026-06-23T09:38:03.1333367Z             {
2026-06-23T09:38:03.1333509Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1333624Z               "line": 1215
2026-06-23T09:38:03.1333724Z             },
2026-06-23T09:38:03.1333828Z             {
2026-06-23T09:38:03.1333976Z               "path": "crates/spt/tests/notify_shell_e2e.rs",
2026-06-23T09:38:03.1334093Z               "line": 17
2026-06-23T09:38:03.1334187Z             },
2026-06-23T09:38:03.1334288Z             {
2026-06-23T09:38:03.1334431Z               "path": "crates/spt/tests/shell_e2e.rs",
2026-06-23T09:38:03.1334540Z               "line": 14
2026-06-23T09:38:03.1334636Z             }
2026-06-23T09:38:03.1334736Z           ]
2026-06-23T09:38:03.1334840Z         },
2026-06-23T09:38:03.1334951Z         "unit": {
2026-06-23T09:38:03.1335051Z           "complete": true,
2026-06-23T09:38:03.1335160Z           "evidence": [
2026-06-23T09:38:03.1335262Z             {
2026-06-23T09:38:03.1335413Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1335523Z               "line": 246
2026-06-23T09:38:03.1335623Z             },
2026-06-23T09:38:03.1335728Z             {
2026-06-23T09:38:03.1335862Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1335971Z               "line": 279
2026-06-23T09:38:03.1336071Z             },
2026-06-23T09:38:03.1336177Z             {
2026-06-23T09:38:03.1336323Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1336438Z               "line": 319
2026-06-23T09:38:03.1336549Z             },
2026-06-23T09:38:03.1336648Z             {
2026-06-23T09:38:03.1336804Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1336913Z               "line": 601
2026-06-23T09:38:03.1337022Z             },
2026-06-23T09:38:03.1337126Z             {
2026-06-23T09:38:03.1337270Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1337383Z               "line": 674
2026-06-23T09:38:03.1337490Z             },
2026-06-23T09:38:03.1337594Z             {
2026-06-23T09:38:03.1337736Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1337852Z               "line": 818
2026-06-23T09:38:03.1337956Z             },
2026-06-23T09:38:03.1338066Z             {
2026-06-23T09:38:03.1338209Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.1338319Z               "line": 595
2026-06-23T09:38:03.1338424Z             },
2026-06-23T09:38:03.1338524Z             {
2026-06-23T09:38:03.1338671Z               "path": "crates/spt-store/src/shellinfo.rs",
2026-06-23T09:38:03.1338777Z               "line": 399
2026-06-23T09:38:03.1338886Z             },
2026-06-23T09:38:03.1339054Z             {
2026-06-23T09:38:03.1339280Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1339400Z               "line": 10514
2026-06-23T09:38:03.1339499Z             },
2026-06-23T09:38:03.1339602Z             {
2026-06-23T09:38:03.1339731Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1339847Z               "line": 10838
2026-06-23T09:38:03.1339945Z             },
2026-06-23T09:38:03.1340132Z             {
2026-06-23T09:38:03.1340260Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1340371Z               "line": 11255
2026-06-23T09:38:03.1340480Z             }
2026-06-23T09:38:03.1340584Z           ]
2026-06-23T09:38:03.1340685Z         }
2026-06-23T09:38:03.1340794Z       }
2026-06-23T09:38:03.1340899Z     },
2026-06-23T09:38:03.1341000Z     {
2026-06-23T09:38:03.1341109Z       "id": "REQ-SHELL-2",
2026-06-23T09:38:03.1342815Z       "title": "Shell sleep/wake: link-break always closes the binary (pre-close instruction + termination timeout), ephemeral teardown vs persistent offline/relink, wake_command wake-watcher (offline-only, exit-opcode supervision, exponential backoff + give-up), state-keyed wake resolution (dormant/suspended/active-elsewhere; no-reachable refuses — spawn-anywhere branch deferred), spt shutdown owner cascade + api owner-shutdown gated by can_shutdown (CONTEXT Shell sleep/wake)",
2026-06-23T09:38:03.1342945Z       "requiredStages": [
2026-06-23T09:38:03.1343055Z         "impl",
2026-06-23T09:38:03.1343158Z         "unit",
2026-06-23T09:38:03.1343260Z         "int"
2026-06-23T09:38:03.1343363Z       ],
2026-06-23T09:38:03.1343478Z       "stages": {
2026-06-23T09:38:03.1343574Z         "doc": {
2026-06-23T09:38:03.1343692Z           "complete": false,
2026-06-23T09:38:03.1343802Z           "evidence": []
2026-06-23T09:38:03.1343918Z         },
2026-06-23T09:38:03.1344021Z         "impl": {
2026-06-23T09:38:03.1344132Z           "complete": true,
2026-06-23T09:38:03.1344247Z           "evidence": [
2026-06-23T09:38:03.1344350Z             {
2026-06-23T09:38:03.1344511Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:03.1344616Z               "line": 217
2026-06-23T09:38:03.1344724Z             },
2026-06-23T09:38:03.1344824Z             {
2026-06-23T09:38:03.1344981Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.1345095Z               "line": 403
2026-06-23T09:38:03.1345197Z             },
2026-06-23T09:38:03.1345306Z             {
2026-06-23T09:38:03.1345434Z               "path": "crates/spt-daemon/src/grants.rs",
2026-06-23T09:38:03.1345545Z               "line": 250
2026-06-23T09:38:03.1345639Z             },
2026-06-23T09:38:03.1345744Z             {
2026-06-23T09:38:03.1345892Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.1346001Z               "line": 611
2026-06-23T09:38:03.1346107Z             },
2026-06-23T09:38:03.1346202Z             {
2026-06-23T09:38:03.1346350Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1346451Z               "line": 30
2026-06-23T09:38:03.1346550Z             },
2026-06-23T09:38:03.1346650Z             {
2026-06-23T09:38:03.1346790Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1346903Z               "line": 409
2026-06-23T09:38:03.1347003Z             },
2026-06-23T09:38:03.1347114Z             {
2026-06-23T09:38:03.1347250Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1347369Z               "line": 445
2026-06-23T09:38:03.1347478Z             },
2026-06-23T09:38:03.1347577Z             {
2026-06-23T09:38:03.1347725Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1347835Z               "line": 660
2026-06-23T09:38:03.1347943Z             },
2026-06-23T09:38:03.1348045Z             {
2026-06-23T09:38:03.1348201Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.1348311Z               "line": 348
2026-06-23T09:38:03.1348417Z             },
2026-06-23T09:38:03.1348521Z             {
2026-06-23T09:38:03.1348736Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1348850Z               "line": 115
2026-06-23T09:38:03.1349037Z             },
2026-06-23T09:38:03.1349136Z             {
2026-06-23T09:38:03.1349284Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1349394Z               "line": 120
2026-06-23T09:38:03.1349503Z             },
2026-06-23T09:38:03.1349728Z             {
2026-06-23T09:38:03.1349874Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1349988Z               "line": 376
2026-06-23T09:38:03.1350087Z             },
2026-06-23T09:38:03.1350195Z             {
2026-06-23T09:38:03.1350330Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1350439Z               "line": 502
2026-06-23T09:38:03.1350544Z             },
2026-06-23T09:38:03.1350640Z             {
2026-06-23T09:38:03.1350787Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1350897Z               "line": 24
2026-06-23T09:38:03.1351007Z             },
2026-06-23T09:38:03.1351107Z             {
2026-06-23T09:38:03.1351255Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1351359Z               "line": 76
2026-06-23T09:38:03.1351464Z             },
2026-06-23T09:38:03.1351570Z             {
2026-06-23T09:38:03.1351713Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1351827Z               "line": 154
2026-06-23T09:38:03.1351923Z             },
2026-06-23T09:38:03.1352031Z             {
2026-06-23T09:38:03.1352171Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1352280Z               "line": 177
2026-06-23T09:38:03.1352380Z             },
2026-06-23T09:38:03.1352476Z             {
2026-06-23T09:38:03.1352633Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1352732Z               "line": 273
2026-06-23T09:38:03.1352842Z             },
2026-06-23T09:38:03.1352933Z             {
2026-06-23T09:38:03.1353084Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1353200Z               "line": 456
2026-06-23T09:38:03.1353295Z             },
2026-06-23T09:38:03.1353408Z             {
2026-06-23T09:38:03.1353548Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1353661Z               "line": 538
2026-06-23T09:38:03.1353766Z             },
2026-06-23T09:38:03.1353881Z             {
2026-06-23T09:38:03.1354028Z               "path": "crates/spt-net/src/net/shelllink.rs",
2026-06-23T09:38:03.1354134Z               "line": 27
2026-06-23T09:38:03.1354243Z             },
2026-06-23T09:38:03.1354333Z             {
2026-06-23T09:38:03.1354473Z               "path": "crates/spt-net/src/net/shelllink.rs",
2026-06-23T09:38:03.1354586Z               "line": 48
2026-06-23T09:38:03.1354687Z             },
2026-06-23T09:38:03.1354788Z             {
2026-06-23T09:38:03.1354929Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1355038Z               "line": 517
2026-06-23T09:38:03.1355144Z             },
2026-06-23T09:38:03.1355246Z             {
2026-06-23T09:38:03.1355380Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1355490Z               "line": 2275
2026-06-23T09:38:03.1355598Z             },
2026-06-23T09:38:03.1355689Z             {
2026-06-23T09:38:03.1355823Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1355927Z               "line": 7399
2026-06-23T09:38:03.1356038Z             },
2026-06-23T09:38:03.1356143Z             {
2026-06-23T09:38:03.1356266Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1356382Z               "line": 7460
2026-06-23T09:38:03.1356486Z             },
2026-06-23T09:38:03.1356590Z             {
2026-06-23T09:38:03.1356716Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1356825Z               "line": 7488
2026-06-23T09:38:03.1356934Z             },
2026-06-23T09:38:03.1357129Z             {
2026-06-23T09:38:03.1357253Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1357364Z               "line": 7542
2026-06-23T09:38:03.1357472Z             },
2026-06-23T09:38:03.1357573Z             {
2026-06-23T09:38:03.1357703Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1357810Z               "line": 7797
2026-06-23T09:38:03.1357905Z             },
2026-06-23T09:38:03.1358085Z             {
2026-06-23T09:38:03.1358208Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1358314Z               "line": 7857
2026-06-23T09:38:03.1358418Z             },
2026-06-23T09:38:03.1358527Z             {
2026-06-23T09:38:03.1358662Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.1358757Z               "line": 298
2026-06-23T09:38:03.1358866Z             },
2026-06-23T09:38:03.1359034Z             {
2026-06-23T09:38:03.1359171Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.1359277Z               "line": 339
2026-06-23T09:38:03.1359391Z             }
2026-06-23T09:38:03.1359496Z           ]
2026-06-23T09:38:03.1359592Z         },
2026-06-23T09:38:03.1359701Z         "int": {
2026-06-23T09:38:03.1359810Z           "complete": true,
2026-06-23T09:38:03.1359921Z           "evidence": [
2026-06-23T09:38:03.1360015Z             {
2026-06-23T09:38:03.1360169Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.1360274Z               "line": 710
2026-06-23T09:38:03.1360377Z             },
2026-06-23T09:38:03.1360486Z             {
2026-06-23T09:38:03.1360624Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1360736Z               "line": 780
2026-06-23T09:38:03.1360837Z             },
2026-06-23T09:38:03.1360948Z             {
2026-06-23T09:38:03.1361089Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1361200Z               "line": 1215
2026-06-23T09:38:03.1361310Z             },
2026-06-23T09:38:03.1361404Z             {
2026-06-23T09:38:03.1361562Z               "path": "crates/spt/tests/shell_sleepwake_e2e.rs",
2026-06-23T09:38:03.1361676Z               "line": 18
2026-06-23T09:38:03.1361772Z             }
2026-06-23T09:38:03.1361887Z           ]
2026-06-23T09:38:03.1361982Z         },
2026-06-23T09:38:03.1362096Z         "unit": {
2026-06-23T09:38:03.1362201Z           "complete": true,
2026-06-23T09:38:03.1362315Z           "evidence": [
2026-06-23T09:38:03.1362416Z             {
2026-06-23T09:38:03.1362577Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1362687Z               "line": 744
2026-06-23T09:38:03.1362788Z             },
2026-06-23T09:38:03.1362897Z             {
2026-06-23T09:38:03.1363041Z               "path": "crates/spt-daemon/src/resting.rs",
2026-06-23T09:38:03.1363160Z               "line": 796
2026-06-23T09:38:03.1363263Z             },
2026-06-23T09:38:03.1363358Z             {
2026-06-23T09:38:03.1363508Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1363615Z               "line": 707
2026-06-23T09:38:03.1363726Z             },
2026-06-23T09:38:03.1363821Z             {
2026-06-23T09:38:03.1363973Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1364089Z               "line": 756
2026-06-23T09:38:03.1364189Z             },
2026-06-23T09:38:03.1364298Z             {
2026-06-23T09:38:03.1364432Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1364546Z               "line": 780
2026-06-23T09:38:03.1364646Z             },
2026-06-23T09:38:03.1364742Z             {
2026-06-23T09:38:03.1364889Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1365000Z               "line": 603
2026-06-23T09:38:03.1365109Z             },
2026-06-23T09:38:03.1365204Z             {
2026-06-23T09:38:03.1365353Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1365452Z               "line": 624
2026-06-23T09:38:03.1365556Z             },
2026-06-23T09:38:03.1365769Z             {
2026-06-23T09:38:03.1365915Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1366031Z               "line": 660
2026-06-23T09:38:03.1366126Z             },
2026-06-23T09:38:03.1366230Z             {
2026-06-23T09:38:03.1366364Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1366468Z               "line": 714
2026-06-23T09:38:03.1366674Z             },
2026-06-23T09:38:03.1366779Z             {
2026-06-23T09:38:03.1366927Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1367036Z               "line": 732
2026-06-23T09:38:03.1367141Z             },
2026-06-23T09:38:03.1367242Z             {
2026-06-23T09:38:03.1367380Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1367494Z               "line": 766
2026-06-23T09:38:03.1367586Z             },
2026-06-23T09:38:03.1367684Z             {
2026-06-23T09:38:03.1367823Z               "path": "crates/spt-daemon/src/shellwake.rs",
2026-06-23T09:38:03.1367939Z               "line": 841
2026-06-23T09:38:03.1368047Z             },
2026-06-23T09:38:03.1368148Z             {
2026-06-23T09:38:03.1368300Z               "path": "crates/spt-net/src/net/shelllink.rs",
2026-06-23T09:38:03.1368404Z               "line": 85
2026-06-23T09:38:03.1368509Z             },
2026-06-23T09:38:03.1368613Z             {
2026-06-23T09:38:03.1368745Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1368859Z               "line": 9438
2026-06-23T09:38:03.1369026Z             },
2026-06-23T09:38:03.1369126Z             {
2026-06-23T09:38:03.1369255Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1369364Z               "line": 10592
2026-06-23T09:38:03.1369475Z             },
2026-06-23T09:38:03.1369584Z             {
2026-06-23T09:38:03.1369717Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1369828Z               "line": 10662
2026-06-23T09:38:03.1369932Z             },
2026-06-23T09:38:03.1370032Z             {
2026-06-23T09:38:03.1370162Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1370270Z               "line": 10700
2026-06-23T09:38:03.1370375Z             }
2026-06-23T09:38:03.1370486Z           ]
2026-06-23T09:38:03.1370590Z         }
2026-06-23T09:38:03.1370695Z       }
2026-06-23T09:38:03.1370787Z     },
2026-06-23T09:38:03.1370895Z     {
2026-06-23T09:38:03.1371008Z       "id": "REQ-SHELL-3",
2026-06-23T09:38:03.1372923Z       "title": "Drive channel (owner->shell, REST-only, never-spooled, latest-wins): the owner->shell mirror of sensory for continuous real-time control (scroll/crank/stick/avatar) — a [shell.drive] manifest vocab + EVENT_TYPE_DRIVE frame, delivered to the ONLINE binary only via a single live slot (a new frame supersedes an undelivered one — no spool, no queue, no replay on relink), dropped-with-diagnostic if the shell is offline; cross-node rides the ephemeral link (REST class), never the durable shell spool. Commands = discrete+durable; drive = continuous+ephemeral (CONTEXT:260, minted 2026-06-11 Gateway grill).",
2026-06-23T09:38:03.1373053Z       "requiredStages": [
2026-06-23T09:38:03.1373161Z         "impl",
2026-06-23T09:38:03.1373272Z         "unit",
2026-06-23T09:38:03.1373377Z         "int"
2026-06-23T09:38:03.1377793Z       ],
2026-06-23T09:38:03.1377925Z       "stages": {
2026-06-23T09:38:03.1378035Z         "doc": {
2026-06-23T09:38:03.1378179Z           "complete": false,
2026-06-23T09:38:03.1378293Z           "evidence": []
2026-06-23T09:38:03.1378398Z         },
2026-06-23T09:38:03.1378504Z         "impl": {
2026-06-23T09:38:03.1378617Z           "complete": true,
2026-06-23T09:38:03.1378737Z           "evidence": [
2026-06-23T09:38:03.1378842Z             {
2026-06-23T09:38:03.1379064Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.1379168Z               "line": 229
2026-06-23T09:38:03.1379276Z             },
2026-06-23T09:38:03.1379382Z             {
2026-06-23T09:38:03.1379706Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1379830Z               "line": 36
2026-06-23T09:38:03.1379939Z             },
2026-06-23T09:38:03.1380040Z             {
2026-06-23T09:38:03.1380183Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1380292Z               "line": 137
2026-06-23T09:38:03.1380383Z             },
2026-06-23T09:38:03.1380497Z             {
2026-06-23T09:38:03.1380746Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1380850Z               "line": 153
2026-06-23T09:38:03.1380955Z             },
2026-06-23T09:38:03.1381056Z             {
2026-06-23T09:38:03.1381198Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1381309Z               "line": 165
2026-06-23T09:38:03.1381403Z             },
2026-06-23T09:38:03.1381512Z             {
2026-06-23T09:38:03.1381655Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1381767Z               "line": 242
2026-06-23T09:38:03.1381881Z             },
2026-06-23T09:38:03.1381991Z             {
2026-06-23T09:38:03.1382129Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1382224Z               "line": 267
2026-06-23T09:38:03.1382330Z             },
2026-06-23T09:38:03.1382430Z             {
2026-06-23T09:38:03.1382568Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1382682Z               "line": 293
2026-06-23T09:38:03.1382796Z             },
2026-06-23T09:38:03.1382902Z             {
2026-06-23T09:38:03.1383035Z               "path": "crates/spt-daemon/src/endpoint.rs",
2026-06-23T09:38:03.1383135Z               "line": 51
2026-06-23T09:38:03.1383231Z             },
2026-06-23T09:38:03.1383340Z             {
2026-06-23T09:38:03.1383483Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1383599Z               "line": 333
2026-06-23T09:38:03.1383702Z             },
2026-06-23T09:38:03.1383793Z             {
2026-06-23T09:38:03.1383932Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1384041Z               "line": 373
2026-06-23T09:38:03.1384147Z             },
2026-06-23T09:38:03.1384238Z             {
2026-06-23T09:38:03.1384379Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1384493Z               "line": 602
2026-06-23T09:38:03.1384589Z             },
2026-06-23T09:38:03.1384698Z             {
2026-06-23T09:38:03.1384837Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1384951Z               "line": 132
2026-06-23T09:38:03.1385046Z             },
2026-06-23T09:38:03.1385152Z             {
2026-06-23T09:38:03.1385304Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1385403Z               "line": 450
2026-06-23T09:38:03.1385514Z             },
2026-06-23T09:38:03.1385618Z             {
2026-06-23T09:38:03.1385767Z               "path": "crates/spt-proto/src/event.rs",
2026-06-23T09:38:03.1385872Z               "line": 74
2026-06-23T09:38:03.1385981Z             },
2026-06-23T09:38:03.1386091Z             {
2026-06-23T09:38:03.1386234Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1386353Z               "line": 652
2026-06-23T09:38:03.1386454Z             },
2026-06-23T09:38:03.1386562Z             {
2026-06-23T09:38:03.1386714Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1386824Z               "line": 396
2026-06-23T09:38:03.1386936Z             },
2026-06-23T09:38:03.1387040Z             {
2026-06-23T09:38:03.1387175Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1387288Z               "line": 7583
2026-06-23T09:38:03.1387399Z             }
2026-06-23T09:38:03.1387499Z           ]
2026-06-23T09:38:03.1387599Z         },
2026-06-23T09:38:03.1387709Z         "int": {
2026-06-23T09:38:03.1387819Z           "complete": true,
2026-06-23T09:38:03.1387932Z           "evidence": [
2026-06-23T09:38:03.1388029Z             {
2026-06-23T09:38:03.1388265Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1388381Z               "line": 1264
2026-06-23T09:38:03.1388485Z             },
2026-06-23T09:38:03.1388595Z             {
2026-06-23T09:38:03.1388730Z               "path": "crates/spt/tests/drive_e2e.rs",
2026-06-23T09:38:03.1388838Z               "line": 17
2026-06-23T09:38:03.1388934Z             }
2026-06-23T09:38:03.1389268Z           ]
2026-06-23T09:38:03.1389379Z         },
2026-06-23T09:38:03.1389481Z         "unit": {
2026-06-23T09:38:03.1389595Z           "complete": true,
2026-06-23T09:38:03.1389696Z           "evidence": [
2026-06-23T09:38:03.1389799Z             {
2026-06-23T09:38:03.1389946Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1390066Z               "line": 311
2026-06-23T09:38:03.1390170Z             },
2026-06-23T09:38:03.1390266Z             {
2026-06-23T09:38:03.1390410Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1390523Z               "line": 325
2026-06-23T09:38:03.1390629Z             },
2026-06-23T09:38:03.1390729Z             {
2026-06-23T09:38:03.1390871Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1390987Z               "line": 343
2026-06-23T09:38:03.1391086Z             },
2026-06-23T09:38:03.1391190Z             {
2026-06-23T09:38:03.1391329Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1391443Z               "line": 364
2026-06-23T09:38:03.1391540Z             },
2026-06-23T09:38:03.1391640Z             {
2026-06-23T09:38:03.1391787Z               "path": "crates/spt-daemon/src/drivehub.rs",
2026-06-23T09:38:03.1391898Z               "line": 376
2026-06-23T09:38:03.1392001Z             },
2026-06-23T09:38:03.1392101Z             {
2026-06-23T09:38:03.1392253Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1392360Z               "line": 897
2026-06-23T09:38:03.1392469Z             },
2026-06-23T09:38:03.1392580Z             {
2026-06-23T09:38:03.1392717Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1392832Z               "line": 957
2026-06-23T09:38:03.1392928Z             },
2026-06-23T09:38:03.1393037Z             {
2026-06-23T09:38:03.1393172Z               "path": "crates/spt-daemon/src/shellchan.rs",
2026-06-23T09:38:03.1393276Z               "line": 338
2026-06-23T09:38:03.1393390Z             },
2026-06-23T09:38:03.1393486Z             {
2026-06-23T09:38:03.1393614Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:03.1393724Z               "line": 769
2026-06-23T09:38:03.1393830Z             },
2026-06-23T09:38:03.1393929Z             {
2026-06-23T09:38:03.1394053Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1394164Z               "line": 10374
2026-06-23T09:38:03.1394262Z             }
2026-06-23T09:38:03.1394368Z           ]
2026-06-23T09:38:03.1394460Z         }
2026-06-23T09:38:03.1394572Z       }
2026-06-23T09:38:03.1394673Z     },
2026-06-23T09:38:03.1394774Z     {
2026-06-23T09:38:03.1394891Z       "id": "REQ-SHELL-4",
2026-06-23T09:38:03.1396832Z       "title": "Shell tunnel (reliable-ordered opaque byte stream): an owner<->shell link may hold a long-lived, reliable-ordered, link-bound QUIC stream pair carrying opaque wire protocol traffic the channel taxonomy must NOT reinterpret (first consumer usbip URB) — manifest opt-in, not enveloped, not MAC-framed, not spooled; the link lifecycle governs it (a link-break closes the tunnel). Reliable-ordered ⇒ congestion surfaces as lag never loss ⇒ acceptable only on-LAN: the on-LAN posture is documented and the tunnel is NOT proven cross-WAN (CONTEXT:262, minted 2026-06-11 Gateway grill; doyle gate C2).",
2026-06-23T09:38:03.1396966Z       "requiredStages": [
2026-06-23T09:38:03.1397075Z         "doc",
2026-06-23T09:38:03.1397184Z         "impl",
2026-06-23T09:38:03.1397298Z         "unit",
2026-06-23T09:38:03.1397398Z         "int"
2026-06-23T09:38:03.1397506Z       ],
2026-06-23T09:38:03.1397712Z       "stages": {
2026-06-23T09:38:03.1397816Z         "doc": {
2026-06-23T09:38:03.1397930Z           "complete": true,
2026-06-23T09:38:03.1398041Z           "evidence": [
2026-06-23T09:38:03.1398154Z             {
2026-06-23T09:38:03.1398274Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1398388Z               "line": 294
2026-06-23T09:38:03.1398492Z             },
2026-06-23T09:38:03.1398674Z             {
2026-06-23T09:38:03.1399022Z               "path": "docs/adr/0020-event-envelope-sole-arriving-format-reply-to-removed.md",
2026-06-23T09:38:03.1399132Z               "line": 88
2026-06-23T09:38:03.1399243Z             }
2026-06-23T09:38:03.1399337Z           ]
2026-06-23T09:38:03.1399446Z         },
2026-06-23T09:38:03.1399543Z         "impl": {
2026-06-23T09:38:03.1399656Z           "complete": true,
2026-06-23T09:38:03.1399766Z           "evidence": [
2026-06-23T09:38:03.1399872Z             {
2026-06-23T09:38:03.1400023Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.1400136Z               "line": 243
2026-06-23T09:38:03.1400246Z             },
2026-06-23T09:38:03.1400330Z             {
2026-06-23T09:38:03.1400482Z               "path": "crates/spt-daemon/src/endpoint.rs",
2026-06-23T09:38:03.1400588Z               "line": 61
2026-06-23T09:38:03.1400688Z             },
2026-06-23T09:38:03.1400792Z             {
2026-06-23T09:38:03.1400936Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1401054Z               "line": 218
2026-06-23T09:38:03.1401156Z             },
2026-06-23T09:38:03.1401260Z             {
2026-06-23T09:38:03.1401397Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1401503Z               "line": 245
2026-06-23T09:38:03.1401612Z             },
2026-06-23T09:38:03.1401722Z             {
2026-06-23T09:38:03.1401876Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.1401980Z               "line": 566
2026-06-23T09:38:03.1402075Z             },
2026-06-23T09:38:03.1402186Z             {
2026-06-23T09:38:03.1402328Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.1402434Z               "line": 1141
2026-06-23T09:38:03.1402538Z             },
2026-06-23T09:38:03.1402641Z             {
2026-06-23T09:38:03.1402784Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.1402893Z               "line": 1153
2026-06-23T09:38:03.1403015Z             },
2026-06-23T09:38:03.1403102Z             {
2026-06-23T09:38:03.1403249Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.1403368Z               "line": 1194
2026-06-23T09:38:03.1403469Z             },
2026-06-23T09:38:03.1403574Z             {
2026-06-23T09:38:03.1403712Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1403822Z               "line": 458
2026-06-23T09:38:03.1403926Z             },
2026-06-23T09:38:03.1404027Z             {
2026-06-23T09:38:03.1404155Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1404274Z               "line": 44
2026-06-23T09:38:03.1404376Z             },
2026-06-23T09:38:03.1404470Z             {
2026-06-23T09:38:03.1404613Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1404719Z               "line": 208
2026-06-23T09:38:03.1404827Z             },
2026-06-23T09:38:03.1404918Z             {
2026-06-23T09:38:03.1405063Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1405166Z               "line": 227
2026-06-23T09:38:03.1405262Z             },
2026-06-23T09:38:03.1405363Z             {
2026-06-23T09:38:03.1405494Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1405594Z               "line": 253
2026-06-23T09:38:03.1405690Z             },
2026-06-23T09:38:03.1405799Z             {
2026-06-23T09:38:03.1405943Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1406048Z               "line": 272
2026-06-23T09:38:03.1406262Z             },
2026-06-23T09:38:03.1406367Z             {
2026-06-23T09:38:03.1406510Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1406606Z               "line": 392
2026-06-23T09:38:03.1406706Z             },
2026-06-23T09:38:03.1406810Z             {
2026-06-23T09:38:03.1406945Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1407163Z               "line": 421
2026-06-23T09:38:03.1407260Z             },
2026-06-23T09:38:03.1407368Z             {
2026-06-23T09:38:03.1407506Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1407612Z               "line": 439
2026-06-23T09:38:03.1407721Z             },
2026-06-23T09:38:03.1407820Z             {
2026-06-23T09:38:03.1407962Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1408061Z               "line": 458
2026-06-23T09:38:03.1408161Z             },
2026-06-23T09:38:03.1408257Z             {
2026-06-23T09:38:03.1408395Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1408504Z               "line": 486
2026-06-23T09:38:03.1408610Z             },
2026-06-23T09:38:03.1408709Z             {
2026-06-23T09:38:03.1408839Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1409024Z               "line": 671
2026-06-23T09:38:03.1409129Z             },
2026-06-23T09:38:03.1409229Z             {
2026-06-23T09:38:03.1409367Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1409473Z               "line": 876
2026-06-23T09:38:03.1409577Z             },
2026-06-23T09:38:03.1409677Z             {
2026-06-23T09:38:03.1409817Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1409921Z               "line": 435
2026-06-23T09:38:03.1410016Z             },
2026-06-23T09:38:03.1410122Z             {
2026-06-23T09:38:03.1410254Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1410354Z               "line": 7639
2026-06-23T09:38:03.1410456Z             }
2026-06-23T09:38:03.1410559Z           ]
2026-06-23T09:38:03.1410663Z         },
2026-06-23T09:38:03.1410764Z         "int": {
2026-06-23T09:38:03.1410872Z           "complete": true,
2026-06-23T09:38:03.1410966Z           "evidence": [
2026-06-23T09:38:03.1411066Z             {
2026-06-23T09:38:03.1411205Z               "path": "crates/spt/tests/tunnel_e2e.rs",
2026-06-23T09:38:03.1411314Z               "line": 18
2026-06-23T09:38:03.1411415Z             }
2026-06-23T09:38:03.1411525Z           ]
2026-06-23T09:38:03.1411633Z         },
2026-06-23T09:38:03.1411735Z         "unit": {
2026-06-23T09:38:03.1411844Z           "complete": true,
2026-06-23T09:38:03.1411943Z           "evidence": [
2026-06-23T09:38:03.1412045Z             {
2026-06-23T09:38:03.1412182Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.1412282Z               "line": 1391
2026-06-23T09:38:03.1412374Z             },
2026-06-23T09:38:03.1412464Z             {
2026-06-23T09:38:03.1412606Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.1412712Z               "line": 1420
2026-06-23T09:38:03.1412816Z             },
2026-06-23T09:38:03.1412907Z             {
2026-06-23T09:38:03.1413037Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1413136Z               "line": 504
2026-06-23T09:38:03.1413230Z             },
2026-06-23T09:38:03.1413340Z             {
2026-06-23T09:38:03.1413471Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1413576Z               "line": 514
2026-06-23T09:38:03.1413686Z             },
2026-06-23T09:38:03.1413777Z             {
2026-06-23T09:38:03.1413914Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1414020Z               "line": 531
2026-06-23T09:38:03.1414125Z             },
2026-06-23T09:38:03.1414220Z             {
2026-06-23T09:38:03.1414349Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1414558Z               "line": 543
2026-06-23T09:38:03.1414659Z             },
2026-06-23T09:38:03.1414769Z             {
2026-06-23T09:38:03.1414907Z               "path": "crates/spt-daemon/src/tunnelhub.rs",
2026-06-23T09:38:03.1415021Z               "line": 555
2026-06-23T09:38:03.1415125Z             },
2026-06-23T09:38:03.1415227Z             {
2026-06-23T09:38:03.1415382Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1415580Z               "line": 1192
2026-06-23T09:38:03.1415688Z             },
2026-06-23T09:38:03.1415788Z             {
2026-06-23T09:38:03.1415933Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:03.1416049Z               "line": 776
2026-06-23T09:38:03.1416149Z             }
2026-06-23T09:38:03.1416260Z           ]
2026-06-23T09:38:03.1416360Z         }
2026-06-23T09:38:03.1416464Z       }
2026-06-23T09:38:03.1416566Z     },
2026-06-23T09:38:03.1416675Z     {
2026-06-23T09:38:03.1416823Z       "id": "REQ-SHELL-5",
2026-06-23T09:38:03.1418101Z       "title": "Shell ownership is owner-type-agnostic: any non-Shell endpoint type may own/spawn/drive/command/link a shell (Gateway the named first) — control-exclusivity keys on the owner endpoint_id, NEVER on the owner's endpoint type. No ownership path (mint, launch, owner-from-link, cmd, drive, tunnel, sleep/wake, owner-shutdown) inspects the owner's type (CONTEXT:264, ratified 2026-06-11 Gateway grill).",
2026-06-23T09:38:03.1418233Z       "requiredStages": [
2026-06-23T09:38:03.1418351Z         "doc",
2026-06-23T09:38:03.1418457Z         "impl",
2026-06-23T09:38:03.1418574Z         "unit",
2026-06-23T09:38:03.1418669Z         "int"
2026-06-23T09:38:03.1418769Z       ],
2026-06-23T09:38:03.1418875Z       "stages": {
2026-06-23T09:38:03.1419050Z         "doc": {
2026-06-23T09:38:03.1419165Z           "complete": true,
2026-06-23T09:38:03.1419274Z           "evidence": [
2026-06-23T09:38:03.1419384Z             {
2026-06-23T09:38:03.1419504Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1419613Z               "line": 297
2026-06-23T09:38:03.1419724Z             }
2026-06-23T09:38:03.1419828Z           ]
2026-06-23T09:38:03.1419937Z         },
2026-06-23T09:38:03.1420033Z         "impl": {
2026-06-23T09:38:03.1420147Z           "complete": true,
2026-06-23T09:38:03.1420261Z           "evidence": [
2026-06-23T09:38:03.1420348Z             {
2026-06-23T09:38:03.1420499Z               "path": "crates/spt-daemon/src/shellhost.rs",
2026-06-23T09:38:03.1420609Z               "line": 262
2026-06-23T09:38:03.1420702Z             }
2026-06-23T09:38:03.1420790Z           ]
2026-06-23T09:38:03.1420891Z         },
2026-06-23T09:38:03.1420992Z         "int": {
2026-06-23T09:38:03.1421110Z           "complete": true,
2026-06-23T09:38:03.1421214Z           "evidence": [
2026-06-23T09:38:03.1421324Z             {
2026-06-23T09:38:03.1421455Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1421559Z               "line": 829
2026-06-23T09:38:03.1421660Z             },
2026-06-23T09:38:03.1421770Z             {
2026-06-23T09:38:03.1421912Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1422023Z               "line": 1292
2026-06-23T09:38:03.1422127Z             },
2026-06-23T09:38:03.1422222Z             {
2026-06-23T09:38:03.1422390Z               "path": "crates/spt/tests/gateway_owner_shell_e2e.rs",
2026-06-23T09:38:03.1422485Z               "line": 23
2026-06-23T09:38:03.1422590Z             }
2026-06-23T09:38:03.1422704Z           ]
2026-06-23T09:38:03.1422800Z         },
2026-06-23T09:38:03.1422905Z         "unit": {
2026-06-23T09:38:03.1423010Z           "complete": true,
2026-06-23T09:38:03.1423119Z           "evidence": [
2026-06-23T09:38:03.1423210Z             {
2026-06-23T09:38:03.1423371Z               "path": "crates/spt-daemon/src/linkhost.rs",
2026-06-23T09:38:03.1423506Z               "line": 803
2026-06-23T09:38:03.1423606Z             }
2026-06-23T09:38:03.1423715Z           ]
2026-06-23T09:38:03.1423814Z         }
2026-06-23T09:38:03.1424055Z       }
2026-06-23T09:38:03.1424150Z     },
2026-06-23T09:38:03.1424256Z     {
2026-06-23T09:38:03.1424370Z       "id": "REQ-START-1",
2026-06-23T09:38:03.1424585Z       "title": "Adapters never resolve SPT_HOME; binary on PATH; api bridging only",
2026-06-23T09:38:03.1424699Z       "requiredStages": [
2026-06-23T09:38:03.1424823Z         "impl",
2026-06-23T09:38:03.1424933Z         "unit"
2026-06-23T09:38:03.1425128Z       ],
2026-06-23T09:38:03.1425248Z       "stages": {
2026-06-23T09:38:03.1425352Z         "doc": {
2026-06-23T09:38:03.1425462Z           "complete": false,
2026-06-23T09:38:03.1425572Z           "evidence": []
2026-06-23T09:38:03.1425672Z         },
2026-06-23T09:38:03.1425772Z         "impl": {
2026-06-23T09:38:03.1425877Z           "complete": true,
2026-06-23T09:38:03.1425996Z           "evidence": [
2026-06-23T09:38:03.1426097Z             {
2026-06-23T09:38:03.1426234Z               "path": "crates/spt-store/src/seed.rs",
2026-06-23T09:38:03.1426343Z               "line": 16
2026-06-23T09:38:03.1426450Z             }
2026-06-23T09:38:03.1426554Z           ]
2026-06-23T09:38:03.1426653Z         },
2026-06-23T09:38:03.1426767Z         "int": {
2026-06-23T09:38:03.1426883Z           "complete": false,
2026-06-23T09:38:03.1426986Z           "evidence": []
2026-06-23T09:38:03.1427078Z         },
2026-06-23T09:38:03.1427177Z         "unit": {
2026-06-23T09:38:03.1427286Z           "complete": true,
2026-06-23T09:38:03.1427388Z           "evidence": [
2026-06-23T09:38:03.1427487Z             {
2026-06-23T09:38:03.1427620Z               "path": "crates/spt-store/src/seed.rs",
2026-06-23T09:38:03.1427726Z               "line": 48
2026-06-23T09:38:03.1427826Z             },
2026-06-23T09:38:03.1427925Z             {
2026-06-23T09:38:03.1428050Z               "path": "crates/spt-store/src/seed.rs",
2026-06-23T09:38:03.1428154Z               "line": 63
2026-06-23T09:38:03.1428254Z             }
2026-06-23T09:38:03.1428356Z           ]
2026-06-23T09:38:03.1428460Z         }
2026-06-23T09:38:03.1428574Z       }
2026-06-23T09:38:03.1428666Z     },
2026-06-23T09:38:03.1428761Z     {
2026-06-23T09:38:03.1428869Z       "id": "REQ-START-2",
2026-06-23T09:38:03.1429139Z       "title": "Harness-hosted startup: api seed then listen",
2026-06-23T09:38:03.1429248Z       "requiredStages": [
2026-06-23T09:38:03.1429348Z         "impl",
2026-06-23T09:38:03.1429454Z         "unit",
2026-06-23T09:38:03.1429586Z         "int"
2026-06-23T09:38:03.1429683Z       ],
2026-06-23T09:38:03.1429782Z       "stages": {
2026-06-23T09:38:03.1429891Z         "doc": {
2026-06-23T09:38:03.1430007Z           "complete": false,
2026-06-23T09:38:03.1430107Z           "evidence": []
2026-06-23T09:38:03.1430216Z         },
2026-06-23T09:38:03.1430312Z         "impl": {
2026-06-23T09:38:03.1430417Z           "complete": true,
2026-06-23T09:38:03.1430531Z           "evidence": [
2026-06-23T09:38:03.1430637Z             {
2026-06-23T09:38:03.1430774Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1430884Z               "line": 16
2026-06-23T09:38:03.1430984Z             },
2026-06-23T09:38:03.1431084Z             {
2026-06-23T09:38:03.1431209Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1431313Z               "line": 115
2026-06-23T09:38:03.1431422Z             },
2026-06-23T09:38:03.1431524Z             {
2026-06-23T09:38:03.1431656Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1431770Z               "line": 300
2026-06-23T09:38:03.1431864Z             }
2026-06-23T09:38:03.1431964Z           ]
2026-06-23T09:38:03.1432058Z         },
2026-06-23T09:38:03.1432163Z         "int": {
2026-06-23T09:38:03.1432278Z           "complete": true,
2026-06-23T09:38:03.1432382Z           "evidence": [
2026-06-23T09:38:03.1432482Z             {
2026-06-23T09:38:03.1432616Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:03.1432730Z               "line": 186
2026-06-23T09:38:03.1432826Z             }
2026-06-23T09:38:03.1432931Z           ]
2026-06-23T09:38:03.1433131Z         },
2026-06-23T09:38:03.1433222Z         "unit": {
2026-06-23T09:38:03.1433331Z           "complete": true,
2026-06-23T09:38:03.1433441Z           "evidence": [
2026-06-23T09:38:03.1433546Z             {
2026-06-23T09:38:03.1433679Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1433790Z               "line": 590
2026-06-23T09:38:03.1433889Z             },
2026-06-23T09:38:03.1434081Z             {
2026-06-23T09:38:03.1434214Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1434322Z               "line": 623
2026-06-23T09:38:03.1434417Z             }
2026-06-23T09:38:03.1434512Z           ]
2026-06-23T09:38:03.1434615Z         }
2026-06-23T09:38:03.1434725Z       }
2026-06-23T09:38:03.1434816Z     },
2026-06-23T09:38:03.1434916Z     {
2026-06-23T09:38:03.1435025Z       "id": "REQ-START-3",
2026-06-23T09:38:03.1435221Z       "title": "spt-hosted startup: spawn-session then api bind (no file)",
2026-06-23T09:38:03.1435340Z       "requiredStages": [
2026-06-23T09:38:03.1435445Z         "impl",
2026-06-23T09:38:03.1435545Z         "unit",
2026-06-23T09:38:03.1435645Z         "int"
2026-06-23T09:38:03.1435746Z       ],
2026-06-23T09:38:03.1435841Z       "stages": {
2026-06-23T09:38:03.1435950Z         "doc": {
2026-06-23T09:38:03.1436056Z           "complete": false,
2026-06-23T09:38:03.1436160Z           "evidence": []
2026-06-23T09:38:03.1436260Z         },
2026-06-23T09:38:03.1436362Z         "impl": {
2026-06-23T09:38:03.1436489Z           "complete": true,
2026-06-23T09:38:03.1436589Z           "evidence": [
2026-06-23T09:38:03.1436695Z             {
2026-06-23T09:38:03.1436837Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:03.1436943Z               "line": 23
2026-06-23T09:38:03.1437048Z             },
2026-06-23T09:38:03.1437151Z             {
2026-06-23T09:38:03.1437298Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:03.1437433Z               "line": 205
2026-06-23T09:38:03.1437546Z             },
2026-06-23T09:38:03.1437643Z             {
2026-06-23T09:38:03.1437776Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:03.1437885Z               "line": 221
2026-06-23T09:38:03.1437986Z             },
2026-06-23T09:38:03.1438096Z             {
2026-06-23T09:38:03.1438219Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1438325Z               "line": 17
2026-06-23T09:38:03.1438419Z             },
2026-06-23T09:38:03.1438524Z             {
2026-06-23T09:38:03.1438658Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1438763Z               "line": 35
2026-06-23T09:38:03.1438868Z             },
2026-06-23T09:38:03.1439030Z             {
2026-06-23T09:38:03.1439158Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1439260Z               "line": 116
2026-06-23T09:38:03.1439363Z             }
2026-06-23T09:38:03.1439467Z           ]
2026-06-23T09:38:03.1439563Z         },
2026-06-23T09:38:03.1439667Z         "int": {
2026-06-23T09:38:03.1439775Z           "complete": true,
2026-06-23T09:38:03.1439880Z           "evidence": [
2026-06-23T09:38:03.1439971Z             {
2026-06-23T09:38:03.1440113Z               "path": "crates/spt/tests/contract_e2e.rs",
2026-06-23T09:38:03.1440218Z               "line": 488
2026-06-23T09:38:03.1440314Z             }
2026-06-23T09:38:03.1440413Z           ]
2026-06-23T09:38:03.1440514Z         },
2026-06-23T09:38:03.1440605Z         "unit": {
2026-06-23T09:38:03.1440709Z           "complete": true,
2026-06-23T09:38:03.1440820Z           "evidence": [
2026-06-23T09:38:03.1440915Z             {
2026-06-23T09:38:03.1441042Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:03.1441154Z               "line": 381
2026-06-23T09:38:03.1441258Z             },
2026-06-23T09:38:03.1441357Z             {
2026-06-23T09:38:03.1441492Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:03.1441601Z               "line": 402
2026-06-23T09:38:03.1441797Z             },
2026-06-23T09:38:03.1441897Z             {
2026-06-23T09:38:03.1442035Z               "path": "crates/spt-daemon/src/seedmap.rs",
2026-06-23T09:38:03.1442141Z               "line": 412
2026-06-23T09:38:03.1442244Z             },
2026-06-23T09:38:03.1442344Z             {
2026-06-23T09:38:03.1442473Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1442680Z               "line": 591
2026-06-23T09:38:03.1442776Z             },
2026-06-23T09:38:03.1442877Z             {
2026-06-23T09:38:03.1443004Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1443110Z               "line": 624
2026-06-23T09:38:03.1443205Z             },
2026-06-23T09:38:03.1443309Z             {
2026-06-23T09:38:03.1443453Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1443553Z               "line": 657
2026-06-23T09:38:03.1443648Z             }
2026-06-23T09:38:03.1443744Z           ]
2026-06-23T09:38:03.1443853Z         }
2026-06-23T09:38:03.1443948Z       }
2026-06-23T09:38:03.1444040Z     },
2026-06-23T09:38:03.1444144Z     {
2026-06-23T09:38:03.1444253Z       "id": "REQ-START-4",
2026-06-23T09:38:03.1444412Z       "title": "Adapter-injected env aliases (SPT/OWL/LIVE)",
2026-06-23T09:38:03.1444515Z       "requiredStages": [
2026-06-23T09:38:03.1444616Z         "impl",
2026-06-23T09:38:03.1444713Z         "unit"
2026-06-23T09:38:03.1444820Z       ],
2026-06-23T09:38:03.1444934Z       "stages": {
2026-06-23T09:38:03.1445020Z         "doc": {
2026-06-23T09:38:03.1445137Z           "complete": false,
2026-06-23T09:38:03.1445241Z           "evidence": []
2026-06-23T09:38:03.1445338Z         },
2026-06-23T09:38:03.1445438Z         "impl": {
2026-06-23T09:38:03.1445551Z           "complete": true,
2026-06-23T09:38:03.1445658Z           "evidence": [
2026-06-23T09:38:03.1445748Z             {
2026-06-23T09:38:03.1445895Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1445991Z               "line": 585
2026-06-23T09:38:03.1446105Z             }
2026-06-23T09:38:03.1446204Z           ]
2026-06-23T09:38:03.1446311Z         },
2026-06-23T09:38:03.1446415Z         "int": {
2026-06-23T09:38:03.1446524Z           "complete": false,
2026-06-23T09:38:03.1446640Z           "evidence": []
2026-06-23T09:38:03.1446739Z         },
2026-06-23T09:38:03.1446849Z         "unit": {
2026-06-23T09:38:03.1446955Z           "complete": true,
2026-06-23T09:38:03.1447068Z           "evidence": [
2026-06-23T09:38:03.1447173Z             {
2026-06-23T09:38:03.1447307Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1447431Z               "line": 1026
2026-06-23T09:38:03.1447527Z             }
2026-06-23T09:38:03.1447627Z           ]
2026-06-23T09:38:03.1447721Z         }
2026-06-23T09:38:03.1447825Z       }
2026-06-23T09:38:03.1447926Z     },
2026-06-23T09:38:03.1448017Z     {
2026-06-23T09:38:03.1448130Z       "id": "REQ-START-5",
2026-06-23T09:38:03.1451075Z       "title": "Adapter-agnostic harness-hosted seed + bind-time adapter/profile resolution (ADR-0021): `api seed` carries only parent_pid + session_id (+ optional cwd), no --adapter — a pure \"a harness session exists at this pid\" record; --adapter becomes an OPTIONAL override across the whole api group (an explicit name[:profile] for adapter dev, never required). Omitted, listen/poll resolve the owning adapter/profile AT BIND as a pure read against the live registry — never a seed-time snapshot that can drift: seed parent_pid → exe basename → host_binaries candidate set (REQ-MANIFEST-8) → active-profile pointer (REQ-INSTALL-12) primary, else greatest-registered_at_ms candidate base profile (name-asc tie) → friendly zero-match error. Covers BOTH LiveAgent (listen) and ReadyAgent (poll) bringup. Restores legacy parity: `$LIVE start <id>` → `$SPT listen <id>` with no mandatory --adapter, one generic SessionStart hook per harness binary. (v0.9.0)",
2026-06-23T09:38:03.1451203Z       "requiredStages": [
2026-06-23T09:38:03.1451312Z         "doc",
2026-06-23T09:38:03.1451503Z         "impl",
2026-06-23T09:38:03.1451603Z         "unit",
2026-06-23T09:38:03.1451699Z         "int"
2026-06-23T09:38:03.1451795Z       ],
2026-06-23T09:38:03.1451899Z       "stages": {
2026-06-23T09:38:03.1451994Z         "doc": {
2026-06-23T09:38:03.1452110Z           "complete": true,
2026-06-23T09:38:03.1452214Z           "evidence": [
2026-06-23T09:38:03.1452314Z             {
2026-06-23T09:38:03.1452528Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1452634Z               "line": 185
2026-06-23T09:38:03.1452735Z             },
2026-06-23T09:38:03.1452828Z             {
2026-06-23T09:38:03.1452985Z               "path": "docs-site/src/harness-contract/api.md",
2026-06-23T09:38:03.1453094Z               "line": 28
2026-06-23T09:38:03.1453188Z             }
2026-06-23T09:38:03.1453288Z           ]
2026-06-23T09:38:03.1453388Z         },
2026-06-23T09:38:03.1453493Z         "impl": {
2026-06-23T09:38:03.1453588Z           "complete": true,
2026-06-23T09:38:03.1453699Z           "evidence": [
2026-06-23T09:38:03.1453798Z             {
2026-06-23T09:38:03.1453942Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.1454051Z               "line": 26
2026-06-23T09:38:03.1454146Z             },
2026-06-23T09:38:03.1454251Z             {
2026-06-23T09:38:03.1454375Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.1454484Z               "line": 212
2026-06-23T09:38:03.1454590Z             },
2026-06-23T09:38:03.1454695Z             {
2026-06-23T09:38:03.1454838Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.1454948Z               "line": 221
2026-06-23T09:38:03.1455051Z             },
2026-06-23T09:38:03.1455148Z             {
2026-06-23T09:38:03.1455283Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:03.1455376Z               "line": 485
2026-06-23T09:38:03.1455466Z             },
2026-06-23T09:38:03.1455576Z             {
2026-06-23T09:38:03.1455707Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1455820Z               "line": 36
2026-06-23T09:38:03.1455917Z             },
2026-06-23T09:38:03.1456022Z             {
2026-06-23T09:38:03.1456160Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1456265Z               "line": 118
2026-06-23T09:38:03.1456374Z             },
2026-06-23T09:38:03.1456474Z             {
2026-06-23T09:38:03.1456608Z               "path": "crates/spt/src/api/startup.rs",
2026-06-23T09:38:03.1456708Z               "line": 329
2026-06-23T09:38:03.1456823Z             }
2026-06-23T09:38:03.1456923Z           ]
2026-06-23T09:38:03.1457023Z         },
2026-06-23T09:38:03.1461645Z         "int": {
2026-06-23T09:38:03.1461801Z           "complete": true,
2026-06-23T09:38:03.1461911Z           "evidence": [
2026-06-23T09:38:03.1462016Z             {
2026-06-23T09:38:03.1462177Z               "path": "crates/spt/tests/live_resolve_e2e.rs",
2026-06-23T09:38:03.1462293Z               "line": 17
2026-06-23T09:38:03.1462402Z             }
2026-06-23T09:38:03.1462506Z           ]
2026-06-23T09:38:03.1462608Z         },
2026-06-23T09:38:03.1462717Z         "unit": {
2026-06-23T09:38:03.1462830Z           "complete": true,
2026-06-23T09:38:03.1462942Z           "evidence": [
2026-06-23T09:38:03.1463060Z             {
2026-06-23T09:38:03.1463209Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.1463323Z               "line": 358
2026-06-23T09:38:03.1463421Z             },
2026-06-23T09:38:03.1463531Z             {
2026-06-23T09:38:03.1463677Z               "path": "crates/spt-runtime/src/resolve.rs",
2026-06-23T09:38:03.1463781Z               "line": 371
2026-06-23T09:38:03.1463886Z             },
2026-06-23T09:38:03.1463987Z             {
2026-06-23T09:38:03.1464119Z               "path": "crates/spt/src/api/mod.rs",
2026-06-23T09:38:03.1464221Z               "line": 597
2026-06-23T09:38:03.1464321Z             }
2026-06-23T09:38:03.1464415Z           ]
2026-06-23T09:38:03.1464692Z         }
2026-06-23T09:38:03.1464806Z       }
2026-06-23T09:38:03.1464893Z     },
2026-06-23T09:38:03.1464998Z     {
2026-06-23T09:38:03.1465107Z       "id": "REQ-STORE-1",
2026-06-23T09:38:03.1466002Z       "title": "spt-store::BranchStore (git branch as versioned KV; commit=checkpoint/tip=resume, atomic multi-key, merge-native sync) is the substrate for coarse/durable/audited state (context, registry snapshot+distribution, daemon checkpoint); hot paths (B5 fsync journal) + indexed queries (SQLite spool) excluded (ADR-0011)",
2026-06-23T09:38:03.1466221Z       "requiredStages": [
2026-06-23T09:38:03.1466324Z         "impl",
2026-06-23T09:38:03.1466429Z         "unit"
2026-06-23T09:38:03.1466520Z       ],
2026-06-23T09:38:03.1466624Z       "stages": {
2026-06-23T09:38:03.1466725Z         "doc": {
2026-06-23T09:38:03.1466840Z           "complete": false,
2026-06-23T09:38:03.1466953Z           "evidence": []
2026-06-23T09:38:03.1467054Z         },
2026-06-23T09:38:03.1467159Z         "impl": {
2026-06-23T09:38:03.1467272Z           "complete": true,
2026-06-23T09:38:03.1467379Z           "evidence": [
2026-06-23T09:38:03.1467478Z             {
2026-06-23T09:38:03.1467640Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1467770Z               "line": 23
2026-06-23T09:38:03.1467870Z             },
2026-06-23T09:38:03.1467969Z             {
2026-06-23T09:38:03.1468108Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1468222Z               "line": 46
2026-06-23T09:38:03.1468328Z             },
2026-06-23T09:38:03.1468428Z             {
2026-06-23T09:38:03.1468570Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1468676Z               "line": 97
2026-06-23T09:38:03.1468789Z             },
2026-06-23T09:38:03.1468898Z             {
2026-06-23T09:38:03.1469193Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1469308Z               "line": 125
2026-06-23T09:38:03.1469413Z             },
2026-06-23T09:38:03.1469542Z             {
2026-06-23T09:38:03.1469700Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1469818Z               "line": 207
2026-06-23T09:38:03.1469919Z             },
2026-06-23T09:38:03.1470023Z             {
2026-06-23T09:38:03.1470166Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1470272Z               "line": 231
2026-06-23T09:38:03.1470376Z             },
2026-06-23T09:38:03.1470467Z             {
2026-06-23T09:38:03.1470616Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1470724Z               "line": 467
2026-06-23T09:38:03.1470829Z             },
2026-06-23T09:38:03.1470931Z             {
2026-06-23T09:38:03.1471082Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.1471185Z               "line": 25
2026-06-23T09:38:03.1471276Z             },
2026-06-23T09:38:03.1471384Z             {
2026-06-23T09:38:03.1471526Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.1471637Z               "line": 120
2026-06-23T09:38:03.1471742Z             },
2026-06-23T09:38:03.1471837Z             {
2026-06-23T09:38:03.1471976Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.1472080Z               "line": 148
2026-06-23T09:38:03.1472190Z             },
2026-06-23T09:38:03.1472285Z             {
2026-06-23T09:38:03.1472437Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.1472548Z               "line": 165
2026-06-23T09:38:03.1472633Z             },
2026-06-23T09:38:03.1472742Z             {
2026-06-23T09:38:03.1472881Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.1472986Z               "line": 180
2026-06-23T09:38:03.1473085Z             },
2026-06-23T09:38:03.1473182Z             {
2026-06-23T09:38:03.1473339Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.1473435Z               "line": 198
2026-06-23T09:38:03.1473653Z             },
2026-06-23T09:38:03.1473745Z             {
2026-06-23T09:38:03.1473902Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.1474000Z               "line": 207
2026-06-23T09:38:03.1474100Z             },
2026-06-23T09:38:03.1474205Z             {
2026-06-23T09:38:03.1474336Z               "path": "crates/spt-store/src/project.rs",
2026-06-23T09:38:03.1474542Z               "line": 16
2026-06-23T09:38:03.1474646Z             },
2026-06-23T09:38:03.1474742Z             {
2026-06-23T09:38:03.1474871Z               "path": "crates/spt-store/src/project.rs",
2026-06-23T09:38:03.1474984Z               "line": 63
2026-06-23T09:38:03.1475086Z             }
2026-06-23T09:38:03.1475181Z           ]
2026-06-23T09:38:03.1475285Z         },
2026-06-23T09:38:03.1475386Z         "int": {
2026-06-23T09:38:03.1475500Z           "complete": false,
2026-06-23T09:38:03.1475614Z           "evidence": []
2026-06-23T09:38:03.1475711Z         },
2026-06-23T09:38:03.1475820Z         "unit": {
2026-06-23T09:38:03.1475929Z           "complete": true,
2026-06-23T09:38:03.1476040Z           "evidence": [
2026-06-23T09:38:03.1476140Z             {
2026-06-23T09:38:03.1476282Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1476393Z               "line": 584
2026-06-23T09:38:03.1476492Z             },
2026-06-23T09:38:03.1476591Z             {
2026-06-23T09:38:03.1476734Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1476837Z               "line": 594
2026-06-23T09:38:03.1476936Z             },
2026-06-23T09:38:03.1477042Z             {
2026-06-23T09:38:03.1477184Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1477294Z               "line": 616
2026-06-23T09:38:03.1477400Z             },
2026-06-23T09:38:03.1477495Z             {
2026-06-23T09:38:03.1477633Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1477743Z               "line": 632
2026-06-23T09:38:03.1477847Z             },
2026-06-23T09:38:03.1477953Z             {
2026-06-23T09:38:03.1478090Z               "path": "crates/spt-store/src/branchstore.rs",
2026-06-23T09:38:03.1478200Z               "line": 690
2026-06-23T09:38:03.1478287Z             },
2026-06-23T09:38:03.1478391Z             {
2026-06-23T09:38:03.1478534Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.1478640Z               "line": 472
2026-06-23T09:38:03.1478738Z             },
2026-06-23T09:38:03.1478835Z             {
2026-06-23T09:38:03.1479048Z               "path": "crates/spt-store/src/contextstore.rs",
2026-06-23T09:38:03.1479149Z               "line": 507
2026-06-23T09:38:03.1479241Z             },
2026-06-23T09:38:03.1479336Z             {
2026-06-23T09:38:03.1479468Z               "path": "crates/spt-store/src/project.rs",
2026-06-23T09:38:03.1479582Z               "line": 120
2026-06-23T09:38:03.1479678Z             },
2026-06-23T09:38:03.1479777Z             {
2026-06-23T09:38:03.1479912Z               "path": "crates/spt-store/src/project.rs",
2026-06-23T09:38:03.1480012Z               "line": 128
2026-06-23T09:38:03.1480106Z             }
2026-06-23T09:38:03.1480217Z           ]
2026-06-23T09:38:03.1480322Z         }
2026-06-23T09:38:03.1480421Z       }
2026-06-23T09:38:03.1480527Z     },
2026-06-23T09:38:03.1480627Z     {
2026-06-23T09:38:03.1480745Z       "id": "REQ-SUBNET-1",
2026-06-23T09:38:03.1481089Z       "title": "spt subnet noun namespace: status view (bare + status [NAME] [--nodes]), create (QR/otpauth), show-code; spt pair deleted",
2026-06-23T09:38:03.1481205Z       "requiredStages": [
2026-06-23T09:38:03.1481313Z         "impl",
2026-06-23T09:38:03.1481408Z         "unit"
2026-06-23T09:38:03.1481515Z       ],
2026-06-23T09:38:03.1481622Z       "stages": {
2026-06-23T09:38:03.1481727Z         "doc": {
2026-06-23T09:38:03.1481837Z           "complete": false,
2026-06-23T09:38:03.1481944Z           "evidence": []
2026-06-23T09:38:03.1482048Z         },
2026-06-23T09:38:03.1482245Z         "impl": {
2026-06-23T09:38:03.1482363Z           "complete": true,
2026-06-23T09:38:03.1482469Z           "evidence": [
2026-06-23T09:38:03.1482578Z             {
2026-06-23T09:38:03.1482731Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1482850Z               "line": 281
2026-06-23T09:38:03.1482964Z             },
2026-06-23T09:38:03.1483174Z             {
2026-06-23T09:38:03.1483341Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1483461Z               "line": 651
2026-06-23T09:38:03.1483560Z             },
2026-06-23T09:38:03.1483655Z             {
2026-06-23T09:38:03.1483790Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1483904Z               "line": 4054
2026-06-23T09:38:03.1483995Z             },
2026-06-23T09:38:03.1484100Z             {
2026-06-23T09:38:03.1484218Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1484329Z               "line": 4364
2026-06-23T09:38:03.1484438Z             },
2026-06-23T09:38:03.1484537Z             {
2026-06-23T09:38:03.1484660Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1484760Z               "line": 4383
2026-06-23T09:38:03.1484854Z             },
2026-06-23T09:38:03.1484954Z             {
2026-06-23T09:38:03.1485065Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1485174Z               "line": 4447
2026-06-23T09:38:03.1485273Z             },
2026-06-23T09:38:03.1485374Z             {
2026-06-23T09:38:03.1485493Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1485593Z               "line": 4489
2026-06-23T09:38:03.1485694Z             },
2026-06-23T09:38:03.1485798Z             {
2026-06-23T09:38:03.1485931Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1486042Z               "line": 4678
2026-06-23T09:38:03.1486141Z             },
2026-06-23T09:38:03.1486246Z             {
2026-06-23T09:38:03.1486375Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1486480Z               "line": 4748
2026-06-23T09:38:03.1486586Z             },
2026-06-23T09:38:03.1486695Z             {
2026-06-23T09:38:03.1486814Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1486920Z               "line": 4972
2026-06-23T09:38:03.1487019Z             },
2026-06-23T09:38:03.1487127Z             {
2026-06-23T09:38:03.1487247Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1487341Z               "line": 5616
2026-06-23T09:38:03.1487444Z             },
2026-06-23T09:38:03.1487540Z             {
2026-06-23T09:38:03.1487670Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.1487778Z               "line": 418
2026-06-23T09:38:03.1487879Z             }
2026-06-23T09:38:03.1487969Z           ]
2026-06-23T09:38:03.1488074Z         },
2026-06-23T09:38:03.1488184Z         "int": {
2026-06-23T09:38:03.1488294Z           "complete": false,
2026-06-23T09:38:03.1488402Z           "evidence": []
2026-06-23T09:38:03.1488494Z         },
2026-06-23T09:38:03.1488608Z         "unit": {
2026-06-23T09:38:03.1488717Z           "complete": true,
2026-06-23T09:38:03.1488823Z           "evidence": [
2026-06-23T09:38:03.1488933Z             {
2026-06-23T09:38:03.1489153Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1489266Z               "line": 1584
2026-06-23T09:38:03.1489352Z             },
2026-06-23T09:38:03.1489477Z             {
2026-06-23T09:38:03.1489609Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1489724Z               "line": 11502
2026-06-23T09:38:03.1489830Z             },
2026-06-23T09:38:03.1489919Z             {
2026-06-23T09:38:03.1490032Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1490138Z               "line": 11672
2026-06-23T09:38:03.1490239Z             },
2026-06-23T09:38:03.1490337Z             {
2026-06-23T09:38:03.1490452Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1490558Z               "line": 11679
2026-06-23T09:38:03.1490753Z             },
2026-06-23T09:38:03.1490858Z             {
2026-06-23T09:38:03.1490976Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1491087Z               "line": 11732
2026-06-23T09:38:03.1491191Z             },
2026-06-23T09:38:03.1491286Z             {
2026-06-23T09:38:03.1491407Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1491615Z               "line": 11749
2026-06-23T09:38:03.1491712Z             },
2026-06-23T09:38:03.1491811Z             {
2026-06-23T09:38:03.1491940Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1492041Z               "line": 11779
2026-06-23T09:38:03.1492149Z             },
2026-06-23T09:38:03.1492249Z             {
2026-06-23T09:38:03.1492363Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1492462Z               "line": 11895
2026-06-23T09:38:03.1492557Z             },
2026-06-23T09:38:03.1492657Z             {
2026-06-23T09:38:03.1492767Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1492880Z               "line": 12046
2026-06-23T09:38:03.1492986Z             }
2026-06-23T09:38:03.1493077Z           ]
2026-06-23T09:38:03.1493185Z         }
2026-06-23T09:38:03.1493281Z       }
2026-06-23T09:38:03.1493387Z     },
2026-06-23T09:38:03.1493477Z     {
2026-06-23T09:38:03.1493586Z       "id": "REQ-SUBNET-2",
2026-06-23T09:38:03.1493834Z       "title": "Guided join e2e: spt subnet join CLI initiator + always-on daemon pairing responder",
2026-06-23T09:38:03.1493940Z       "requiredStages": [
2026-06-23T09:38:03.1494044Z         "impl",
2026-06-23T09:38:03.1494144Z         "unit",
2026-06-23T09:38:03.1494245Z         "int"
2026-06-23T09:38:03.1494336Z       ],
2026-06-23T09:38:03.1494449Z       "stages": {
2026-06-23T09:38:03.1494550Z         "doc": {
2026-06-23T09:38:03.1494660Z           "complete": true,
2026-06-23T09:38:03.1494769Z           "evidence": [
2026-06-23T09:38:03.1494865Z             {
2026-06-23T09:38:03.1495045Z               "path": "docs/adr/0005-totp-seeded-spake2-node-pairing.md",
2026-06-23T09:38:03.1495153Z               "line": 60
2026-06-23T09:38:03.1495259Z             }
2026-06-23T09:38:03.1495357Z           ]
2026-06-23T09:38:03.1495452Z         },
2026-06-23T09:38:03.1495557Z         "impl": {
2026-06-23T09:38:03.1495663Z           "complete": true,
2026-06-23T09:38:03.1495772Z           "evidence": [
2026-06-23T09:38:03.1495867Z             {
2026-06-23T09:38:03.1496011Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.1496119Z               "line": 1008
2026-06-23T09:38:03.1496221Z             },
2026-06-23T09:38:03.1496320Z             {
2026-06-23T09:38:03.1496458Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.1496573Z               "line": 2099
2026-06-23T09:38:03.1496668Z             },
2026-06-23T09:38:03.1496773Z             {
2026-06-23T09:38:03.1496917Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.1497021Z               "line": 633
2026-06-23T09:38:03.1497136Z             },
2026-06-23T09:38:03.1497236Z             {
2026-06-23T09:38:03.1497393Z               "path": "crates/spt-daemon/src/nethost.rs",
2026-06-23T09:38:03.1497504Z               "line": 817
2026-06-23T09:38:03.1497612Z             },
2026-06-23T09:38:03.1497725Z             {
2026-06-23T09:38:03.1497859Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.1497972Z               "line": 26
2026-06-23T09:38:03.1498061Z             },
2026-06-23T09:38:03.1498157Z             {
2026-06-23T09:38:03.1498296Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.1498400Z               "line": 60
2026-06-23T09:38:03.1498506Z             },
2026-06-23T09:38:03.1498601Z             {
2026-06-23T09:38:03.1498734Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.1498835Z               "line": 168
2026-06-23T09:38:03.1499015Z             },
2026-06-23T09:38:03.1499116Z             {
2026-06-23T09:38:03.1499403Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.1499516Z               "line": 295
2026-06-23T09:38:03.1499621Z             },
2026-06-23T09:38:03.1499727Z             {
2026-06-23T09:38:03.1499859Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.1499969Z               "line": 417
2026-06-23T09:38:03.1500080Z             },
2026-06-23T09:38:03.1500274Z             {
2026-06-23T09:38:03.1500423Z               "path": "crates/spt-net/src/net/pairing/meet.rs",
2026-06-23T09:38:03.1500526Z               "line": 252
2026-06-23T09:38:03.1500630Z             },
2026-06-23T09:38:03.1500717Z             {
2026-06-23T09:38:03.1500846Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1500955Z               "line": 4410
2026-06-23T09:38:03.1501047Z             },
2026-06-23T09:38:03.1501156Z             {
2026-06-23T09:38:03.1501269Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1501381Z               "line": 4911
2026-06-23T09:38:03.1501476Z             },
2026-06-23T09:38:03.1501584Z             {
2026-06-23T09:38:03.1501709Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1501795Z               "line": 5547
2026-06-23T09:38:03.1501904Z             }
2026-06-23T09:38:03.1501996Z           ]
2026-06-23T09:38:03.1502104Z         },
2026-06-23T09:38:03.1502204Z         "int": {
2026-06-23T09:38:03.1502315Z           "complete": true,
2026-06-23T09:38:03.1502428Z           "evidence": [
2026-06-23T09:38:03.1502519Z             {
2026-06-23T09:38:03.1502659Z               "path": "crates/spt-daemon/tests/pairjoin.rs",
2026-06-23T09:38:03.1502762Z               "line": 22
2026-06-23T09:38:03.1502861Z             },
2026-06-23T09:38:03.1502947Z             {
2026-06-23T09:38:03.1503093Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1503197Z               "line": 647
2026-06-23T09:38:03.1503289Z             },
2026-06-23T09:38:03.1503384Z             {
2026-06-23T09:38:03.1503517Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1503627Z               "line": 889
2026-06-23T09:38:03.1503717Z             }
2026-06-23T09:38:03.1503808Z           ]
2026-06-23T09:38:03.1503904Z         },
2026-06-23T09:38:03.1503994Z         "unit": {
2026-06-23T09:38:03.1504108Z           "complete": true,
2026-06-23T09:38:03.1504205Z           "evidence": [
2026-06-23T09:38:03.1504314Z             {
2026-06-23T09:38:03.1504452Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.1504558Z               "line": 586
2026-06-23T09:38:03.1504667Z             },
2026-06-23T09:38:03.1504762Z             {
2026-06-23T09:38:03.1504882Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1504985Z               "line": 11542
2026-06-23T09:38:03.1505086Z             },
2026-06-23T09:38:03.1505188Z             {
2026-06-23T09:38:03.1505300Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1505406Z               "line": 12253
2026-06-23T09:38:03.1505502Z             }
2026-06-23T09:38:03.1505605Z           ]
2026-06-23T09:38:03.1505704Z         }
2026-06-23T09:38:03.1505814Z       }
2026-06-23T09:38:03.1505899Z     },
2026-06-23T09:38:03.1506007Z     {
2026-06-23T09:38:03.1506122Z       "id": "REQ-SUBNET-3",
2026-06-23T09:38:03.1506413Z       "title": "Node labels: hostname-default, gossiped, addressable in @node qualifiers (refuse-on-ambiguity)",
2026-06-23T09:38:03.1506537Z       "requiredStages": [
2026-06-23T09:38:03.1506637Z         "impl",
2026-06-23T09:38:03.1506742Z         "unit"
2026-06-23T09:38:03.1506852Z       ],
2026-06-23T09:38:03.1506956Z       "stages": {
2026-06-23T09:38:03.1507062Z         "doc": {
2026-06-23T09:38:03.1507171Z           "complete": false,
2026-06-23T09:38:03.1507281Z           "evidence": []
2026-06-23T09:38:03.1507367Z         },
2026-06-23T09:38:03.1507477Z         "impl": {
2026-06-23T09:38:03.1507586Z           "complete": true,
2026-06-23T09:38:03.1507691Z           "evidence": [
2026-06-23T09:38:03.1507881Z             {
2026-06-23T09:38:03.1508030Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1508139Z               "line": 152
2026-06-23T09:38:03.1508243Z             },
2026-06-23T09:38:03.1508347Z             {
2026-06-23T09:38:03.1508480Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1508578Z               "line": 299
2026-06-23T09:38:03.1508752Z             },
2026-06-23T09:38:03.1508841Z             {
2026-06-23T09:38:03.1509052Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1509152Z               "line": 443
2026-06-23T09:38:03.1509261Z             },
2026-06-23T09:38:03.1509362Z             {
2026-06-23T09:38:03.1509504Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1509629Z               "line": 532
2026-06-23T09:38:03.1509729Z             },
2026-06-23T09:38:03.1509833Z             {
2026-06-23T09:38:03.1509968Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1510081Z               "line": 125
2026-06-23T09:38:03.1510181Z             },
2026-06-23T09:38:03.1510278Z             {
2026-06-23T09:38:03.1510410Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1510505Z               "line": 253
2026-06-23T09:38:03.1510602Z             },
2026-06-23T09:38:03.1510701Z             {
2026-06-23T09:38:03.1510844Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1510950Z               "line": 264
2026-06-23T09:38:03.1511053Z             },
2026-06-23T09:38:03.1511157Z             {
2026-06-23T09:38:03.1511282Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1511387Z               "line": 285
2026-06-23T09:38:03.1511481Z             },
2026-06-23T09:38:03.1511573Z             {
2026-06-23T09:38:03.1511711Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1511810Z               "line": 621
2026-06-23T09:38:03.1511902Z             },
2026-06-23T09:38:03.1511997Z             {
2026-06-23T09:38:03.1512140Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1512250Z               "line": 680
2026-06-23T09:38:03.1512340Z             },
2026-06-23T09:38:03.1512445Z             {
2026-06-23T09:38:03.1512584Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.1512694Z               "line": 61
2026-06-23T09:38:03.1512798Z             },
2026-06-23T09:38:03.1512894Z             {
2026-06-23T09:38:03.1513041Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.1513142Z               "line": 90
2026-06-23T09:38:03.1513247Z             },
2026-06-23T09:38:03.1513345Z             {
2026-06-23T09:38:03.1513479Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.1513578Z               "line": 125
2026-06-23T09:38:03.1513677Z             },
2026-06-23T09:38:03.1513772Z             {
2026-06-23T09:38:03.1513917Z               "path": "crates/spt-store/src/hostlabel.rs",
2026-06-23T09:38:03.1514024Z               "line": 9
2026-06-23T09:38:03.1514116Z             },
2026-06-23T09:38:03.1514220Z             {
2026-06-23T09:38:03.1514339Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1514450Z               "line": 4748
2026-06-23T09:38:03.1514554Z             },
2026-06-23T09:38:03.1514654Z             {
2026-06-23T09:38:03.1514789Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.1514878Z               "line": 445
2026-06-23T09:38:03.1514987Z             }
2026-06-23T09:38:03.1515075Z           ]
2026-06-23T09:38:03.1515179Z         },
2026-06-23T09:38:03.1515278Z         "int": {
2026-06-23T09:38:03.1515389Z           "complete": false,
2026-06-23T09:38:03.1515498Z           "evidence": []
2026-06-23T09:38:03.1515593Z         },
2026-06-23T09:38:03.1515700Z         "unit": {
2026-06-23T09:38:03.1515795Z           "complete": true,
2026-06-23T09:38:03.1515995Z           "evidence": [
2026-06-23T09:38:03.1516105Z             {
2026-06-23T09:38:03.1516241Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1516355Z               "line": 1356
2026-06-23T09:38:03.1516450Z             },
2026-06-23T09:38:03.1516567Z             {
2026-06-23T09:38:03.1516706Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1516906Z               "line": 1713
2026-06-23T09:38:03.1517002Z             },
2026-06-23T09:38:03.1517107Z             {
2026-06-23T09:38:03.1517245Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.1517346Z               "line": 896
2026-06-23T09:38:03.1517451Z             },
2026-06-23T09:38:03.1517550Z             {
2026-06-23T09:38:03.1517694Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1517803Z               "line": 991
2026-06-23T09:38:03.1517902Z             },
2026-06-23T09:38:03.1517999Z             {
2026-06-23T09:38:03.1518136Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1518242Z               "line": 1041
2026-06-23T09:38:03.1518342Z             },
2026-06-23T09:38:03.1518446Z             {
2026-06-23T09:38:03.1518586Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1518690Z               "line": 1100
2026-06-23T09:38:03.1518798Z             },
2026-06-23T09:38:03.1518898Z             {
2026-06-23T09:38:03.1519106Z               "path": "crates/spt-net/src/net/replicate.rs",
2026-06-23T09:38:03.1519211Z               "line": 234
2026-06-23T09:38:03.1519331Z             },
2026-06-23T09:38:03.1519435Z             {
2026-06-23T09:38:03.1519574Z               "path": "crates/spt-store/src/hostlabel.rs",
2026-06-23T09:38:03.1519683Z               "line": 49
2026-06-23T09:38:03.1519778Z             },
2026-06-23T09:38:03.1519889Z             {
2026-06-23T09:38:03.1520007Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1520107Z               "line": 11895
2026-06-23T09:38:03.1520213Z             },
2026-06-23T09:38:03.1520307Z             {
2026-06-23T09:38:03.1520436Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1520542Z               "line": 12001
2026-06-23T09:38:03.1520641Z             },
2026-06-23T09:38:03.1520722Z             {
2026-06-23T09:38:03.1520843Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1520951Z               "line": 12219
2026-06-23T09:38:03.1521042Z             }
2026-06-23T09:38:03.1521143Z           ]
2026-06-23T09:38:03.1521242Z         }
2026-06-23T09:38:03.1521337Z       }
2026-06-23T09:38:03.1521443Z     },
2026-06-23T09:38:03.1521529Z     {
2026-06-23T09:38:03.1521642Z       "id": "REQ-SUBNET-4",
2026-06-23T09:38:03.1521942Z       "title": "Subnet membership mutations elevation-gated (create = seed reveal; join = trust-boundary enrollment)",
2026-06-23T09:38:03.1522056Z       "requiredStages": [
2026-06-23T09:38:03.1522152Z         "impl",
2026-06-23T09:38:03.1522257Z         "unit"
2026-06-23T09:38:03.1522351Z       ],
2026-06-23T09:38:03.1522448Z       "stages": {
2026-06-23T09:38:03.1522553Z         "doc": {
2026-06-23T09:38:03.1522661Z           "complete": true,
2026-06-23T09:38:03.1522768Z           "evidence": [
2026-06-23T09:38:03.1522867Z             {
2026-06-23T09:38:03.1523044Z               "path": "docs/adr/0005-totp-seeded-spake2-node-pairing.md",
2026-06-23T09:38:03.1523159Z               "line": 60
2026-06-23T09:38:03.1523249Z             }
2026-06-23T09:38:03.1523354Z           ]
2026-06-23T09:38:03.1523450Z         },
2026-06-23T09:38:03.1523558Z         "impl": {
2026-06-23T09:38:03.1523659Z           "complete": true,
2026-06-23T09:38:03.1523765Z           "evidence": [
2026-06-23T09:38:03.1523873Z             {
2026-06-23T09:38:03.1523986Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1524086Z               "line": 4054
2026-06-23T09:38:03.1524185Z             },
2026-06-23T09:38:03.1524294Z             {
2026-06-23T09:38:03.1524514Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1524623Z               "line": 5514
2026-06-23T09:38:03.1524729Z             },
2026-06-23T09:38:03.1524824Z             {
2026-06-23T09:38:03.1524952Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1525053Z               "line": 5547
2026-06-23T09:38:03.1525153Z             }
2026-06-23T09:38:03.1525252Z           ]
2026-06-23T09:38:03.1525472Z         },
2026-06-23T09:38:03.1525577Z         "int": {
2026-06-23T09:38:03.1525687Z           "complete": false,
2026-06-23T09:38:03.1525797Z           "evidence": []
2026-06-23T09:38:03.1525886Z         },
2026-06-23T09:38:03.1525993Z         "unit": {
2026-06-23T09:38:03.1526100Z           "complete": true,
2026-06-23T09:38:03.1526211Z           "evidence": [
2026-06-23T09:38:03.1526317Z             {
2026-06-23T09:38:03.1526434Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1526545Z               "line": 11658
2026-06-23T09:38:03.1526632Z             },
2026-06-23T09:38:03.1526740Z             {
2026-06-23T09:38:03.1526858Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1526968Z               "line": 11732
2026-06-23T09:38:03.1527071Z             }
2026-06-23T09:38:03.1527170Z           ]
2026-06-23T09:38:03.1527271Z         }
2026-06-23T09:38:03.1527367Z       }
2026-06-23T09:38:03.1527476Z     },
2026-06-23T09:38:03.1527572Z     {
2026-06-23T09:38:03.1527701Z       "id": "REQ-SUBNET-5",
2026-06-23T09:38:03.1529097Z       "title": "Per-subnet serve-state: spt subnet detach <NAME> [--save] / attach <NAME> [--save] — daemon keeps running, stops/starts advertising + connecting for that subnet (peer pump + responder selective); --save persists the startup default in daemon config; the all-attached banner gains per-subnet states (M8 decision 6, --save renamed from --auto per decision 25 session)",
2026-06-23T09:38:03.1529218Z       "requiredStages": [
2026-06-23T09:38:03.1529335Z         "impl",
2026-06-23T09:38:03.1529429Z         "unit",
2026-06-23T09:38:03.1529535Z         "int"
2026-06-23T09:38:03.1529637Z       ],
2026-06-23T09:38:03.1529746Z       "stages": {
2026-06-23T09:38:03.1529843Z         "doc": {
2026-06-23T09:38:03.1529952Z           "complete": false,
2026-06-23T09:38:03.1530066Z           "evidence": []
2026-06-23T09:38:03.1530158Z         },
2026-06-23T09:38:03.1530267Z         "impl": {
2026-06-23T09:38:03.1530385Z           "complete": true,
2026-06-23T09:38:03.1530491Z           "evidence": [
2026-06-23T09:38:03.1530596Z             {
2026-06-23T09:38:03.1530730Z               "path": "crates/spt-daemon/src/daemon.rs",
2026-06-23T09:38:03.1530844Z               "line": 128
2026-06-23T09:38:03.1530944Z             },
2026-06-23T09:38:03.1531044Z             {
2026-06-23T09:38:03.1531187Z               "path": "crates/spt-daemon/src/dispatch.rs",
2026-06-23T09:38:03.1531292Z               "line": 413
2026-06-23T09:38:03.1531393Z             },
2026-06-23T09:38:03.1531483Z             {
2026-06-23T09:38:03.1531631Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.1531727Z               "line": 74
2026-06-23T09:38:03.1531830Z             },
2026-06-23T09:38:03.1531926Z             {
2026-06-23T09:38:03.1532061Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:03.1532164Z               "line": 332
2026-06-23T09:38:03.1532258Z             },
2026-06-23T09:38:03.1532359Z             {
2026-06-23T09:38:03.1532498Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:03.1532601Z               "line": 621
2026-06-23T09:38:03.1532708Z             },
2026-06-23T09:38:03.1532798Z             {
2026-06-23T09:38:03.1532945Z               "path": "crates/spt-daemon/src/serveprobe.rs",
2026-06-23T09:38:03.1533037Z               "line": 31
2026-06-23T09:38:03.1533137Z             },
2026-06-23T09:38:03.1533226Z             {
2026-06-23T09:38:03.1533361Z               "path": "crates/spt-daemon/src/serveprobe.rs",
2026-06-23T09:38:03.1533475Z               "line": 50
2026-06-23T09:38:03.1533671Z             },
2026-06-23T09:38:03.1533775Z             {
2026-06-23T09:38:03.1533909Z               "path": "crates/spt-daemon/src/serveprobe.rs",
2026-06-23T09:38:03.1534014Z               "line": 69
2026-06-23T09:38:03.1534113Z             },
2026-06-23T09:38:03.1534219Z             {
2026-06-23T09:38:03.1534353Z               "path": "crates/spt-daemon/src/serveprobe.rs",
2026-06-23T09:38:03.1534546Z               "line": 113
2026-06-23T09:38:03.1534651Z             },
2026-06-23T09:38:03.1534745Z             {
2026-06-23T09:38:03.1534887Z               "path": "crates/spt-net/src/net/serveprobe.rs",
2026-06-23T09:38:03.1534994Z               "line": 25
2026-06-23T09:38:03.1535083Z             },
2026-06-23T09:38:03.1535193Z             {
2026-06-23T09:38:03.1535332Z               "path": "crates/spt-net/src/net/serveprobe.rs",
2026-06-23T09:38:03.1535426Z               "line": 34
2026-06-23T09:38:03.1535526Z             },
2026-06-23T09:38:03.1535632Z             {
2026-06-23T09:38:03.1535769Z               "path": "crates/spt-store/src/attachment.rs",
2026-06-23T09:38:03.1535876Z               "line": 17
2026-06-23T09:38:03.1535971Z             },
2026-06-23T09:38:03.1536061Z             {
2026-06-23T09:38:03.1536190Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1536294Z               "line": 5472
2026-06-23T09:38:03.1536399Z             },
2026-06-23T09:38:03.1536505Z             {
2026-06-23T09:38:03.1536628Z               "path": "crates/spt/src/wansend.rs",
2026-06-23T09:38:03.1536737Z               "line": 419
2026-06-23T09:38:03.1536835Z             }
2026-06-23T09:38:03.1536938Z           ]
2026-06-23T09:38:03.1537038Z         },
2026-06-23T09:38:03.1537144Z         "int": {
2026-06-23T09:38:03.1537249Z           "complete": true,
2026-06-23T09:38:03.1537352Z           "evidence": [
2026-06-23T09:38:03.1537457Z             {
2026-06-23T09:38:03.1537584Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.1537697Z               "line": 825
2026-06-23T09:38:03.1542114Z             }
2026-06-23T09:38:03.1542263Z           ]
2026-06-23T09:38:03.1542372Z         },
2026-06-23T09:38:03.1542481Z         "unit": {
2026-06-23T09:38:03.1542597Z           "complete": true,
2026-06-23T09:38:03.1542705Z           "evidence": [
2026-06-23T09:38:03.1542819Z             {
2026-06-23T09:38:03.1542958Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:03.1543067Z               "line": 341
2026-06-23T09:38:03.1543171Z             },
2026-06-23T09:38:03.1543273Z             {
2026-06-23T09:38:03.1543410Z               "path": "crates/spt-daemon/src/pump/mod.rs",
2026-06-23T09:38:03.1543515Z               "line": 1115
2026-06-23T09:38:03.1543635Z             },
2026-06-23T09:38:03.1543730Z             {
2026-06-23T09:38:03.1543883Z               "path": "crates/spt-daemon/src/serveprobe.rs",
2026-06-23T09:38:03.1543992Z               "line": 151
2026-06-23T09:38:03.1544087Z             },
2026-06-23T09:38:03.1544183Z             {
2026-06-23T09:38:03.1544331Z               "path": "crates/spt-net/src/net/serveprobe.rs",
2026-06-23T09:38:03.1544440Z               "line": 61
2026-06-23T09:38:03.1544532Z             },
2026-06-23T09:38:03.1544636Z             {
2026-06-23T09:38:03.1544779Z               "path": "crates/spt-store/src/attachment.rs",
2026-06-23T09:38:03.1544880Z               "line": 111
2026-06-23T09:38:03.1544979Z             },
2026-06-23T09:38:03.1545078Z             {
2026-06-23T09:38:03.1545221Z               "path": "crates/spt-store/src/attachment.rs",
2026-06-23T09:38:03.1545319Z               "line": 138
2026-06-23T09:38:03.1545414Z             },
2026-06-23T09:38:03.1545519Z             {
2026-06-23T09:38:03.1545653Z               "path": "crates/spt-store/src/attachment.rs",
2026-06-23T09:38:03.1545767Z               "line": 148
2026-06-23T09:38:03.1545863Z             },
2026-06-23T09:38:03.1545963Z             {
2026-06-23T09:38:03.1546082Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1546339Z               "line": 11559
2026-06-23T09:38:03.1546441Z             }
2026-06-23T09:38:03.1546540Z           ]
2026-06-23T09:38:03.1546649Z         }
2026-06-23T09:38:03.1546735Z       }
2026-06-23T09:38:03.1546822Z     },
2026-06-23T09:38:03.1546907Z     {
2026-06-23T09:38:03.1547011Z       "id": "REQ-SUBNET-6",
2026-06-23T09:38:03.1547699Z       "title": "Trust lifecycle verbs, elevation-gated: spt subnet leave <NAME> (membership exit) and spt subnet prune <node> (removes a dead identity's trust + registry rows, killing its dead dials; trust mutation = security surface, REQ-PAIR-6 gate machinery) (M8 decisions 6-7)",
2026-06-23T09:38:03.1547893Z       "requiredStages": [
2026-06-23T09:38:03.1547988Z         "impl",
2026-06-23T09:38:03.1548069Z         "unit"
2026-06-23T09:38:03.1548149Z       ],
2026-06-23T09:38:03.1548238Z       "stages": {
2026-06-23T09:38:03.1548324Z         "doc": {
2026-06-23T09:38:03.1548430Z           "complete": false,
2026-06-23T09:38:03.1548515Z           "evidence": []
2026-06-23T09:38:03.1548605Z         },
2026-06-23T09:38:03.1548692Z         "impl": {
2026-06-23T09:38:03.1548792Z           "complete": true,
2026-06-23T09:38:03.1548887Z           "evidence": [
2026-06-23T09:38:03.1549045Z             {
2026-06-23T09:38:03.1549202Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1549302Z               "line": 254
2026-06-23T09:38:03.1549389Z             },
2026-06-23T09:38:03.1549469Z             {
2026-06-23T09:38:03.1549602Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1549703Z               "line": 5130
2026-06-23T09:38:03.1549778Z             },
2026-06-23T09:38:03.1549859Z             {
2026-06-23T09:38:03.1549966Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1550056Z               "line": 5147
2026-06-23T09:38:03.1550136Z             },
2026-06-23T09:38:03.1550223Z             {
2026-06-23T09:38:03.1550333Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1550422Z               "line": 5200
2026-06-23T09:38:03.1550507Z             },
2026-06-23T09:38:03.1550593Z             {
2026-06-23T09:38:03.1550707Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1550791Z               "line": 5223
2026-06-23T09:38:03.1550876Z             }
2026-06-23T09:38:03.1550968Z           ]
2026-06-23T09:38:03.1551054Z         },
2026-06-23T09:38:03.1551139Z         "int": {
2026-06-23T09:38:03.1551235Z           "complete": false,
2026-06-23T09:38:03.1551330Z           "evidence": []
2026-06-23T09:38:03.1551411Z         },
2026-06-23T09:38:03.1551501Z         "unit": {
2026-06-23T09:38:03.1551603Z           "complete": true,
2026-06-23T09:38:03.1551688Z           "evidence": [
2026-06-23T09:38:03.1551768Z             {
2026-06-23T09:38:03.1551874Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1551960Z               "line": 11573
2026-06-23T09:38:03.1552036Z             },
2026-06-23T09:38:03.1552126Z             {
2026-06-23T09:38:03.1552237Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1552326Z               "line": 11606
2026-06-23T09:38:03.1552412Z             },
2026-06-23T09:38:03.1552494Z             {
2026-06-23T09:38:03.1552590Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1552669Z               "line": 11615
2026-06-23T09:38:03.1552756Z             }
2026-06-23T09:38:03.1552847Z           ]
2026-06-23T09:38:03.1552937Z         }
2026-06-23T09:38:03.1553023Z       }
2026-06-23T09:38:03.1553099Z     },
2026-06-23T09:38:03.1553191Z     {
2026-06-23T09:38:03.1553275Z       "id": "REQ-SUBNET-7",
2026-06-23T09:38:03.1555092Z       "title": "Per-machine re-pair trust overwrite: registry rows carry a hashed stable machine identifier (OS machine id /etc/machine-id|MachineGuid, domain-separated SHA-256 before gossip, spt-minted persisted UUID fallback; additive serde-default field — old rows parse clean); a COMPLETED pairing ceremony presenting the same node label AND machine id as an existing trusted row evicts the superseded identity's trust + registry rows on the seed-holder and replicates the eviction; a gossiped claim alone never evicts trust (M8 decisions 13, 22)",
2026-06-23T09:38:03.1555200Z       "requiredStages": [
2026-06-23T09:38:03.1555291Z         "impl",
2026-06-23T09:38:03.1555378Z         "unit"
2026-06-23T09:38:03.1555464Z       ],
2026-06-23T09:38:03.1555548Z       "stages": {
2026-06-23T09:38:03.1555628Z         "doc": {
2026-06-23T09:38:03.1555823Z           "complete": false,
2026-06-23T09:38:03.1555918Z           "evidence": []
2026-06-23T09:38:03.1556003Z         },
2026-06-23T09:38:03.1556089Z         "impl": {
2026-06-23T09:38:03.1556189Z           "complete": true,
2026-06-23T09:38:03.1556279Z           "evidence": [
2026-06-23T09:38:03.1556375Z             {
2026-06-23T09:38:03.1556504Z               "path": "crates/spt-daemon/src/machineid.rs",
2026-06-23T09:38:03.1556598Z               "line": 17
2026-06-23T09:38:03.1556681Z             },
2026-06-23T09:38:03.1556771Z             {
2026-06-23T09:38:03.1556904Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.1556996Z               "line": 103
2026-06-23T09:38:03.1557081Z             },
2026-06-23T09:38:03.1557162Z             {
2026-06-23T09:38:03.1557286Z               "path": "crates/spt-daemon/src/pairhost.rs",
2026-06-23T09:38:03.1557372Z               "line": 312
2026-06-23T09:38:03.1557458Z             },
2026-06-23T09:38:03.1557553Z             {
2026-06-23T09:38:03.1557682Z               "path": "crates/spt-daemon/src/pump/registry.rs",
2026-06-23T09:38:03.1557772Z               "line": 131
2026-06-23T09:38:03.1557858Z             },
2026-06-23T09:38:03.1557940Z             {
2026-06-23T09:38:03.1558063Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1558149Z               "line": 160
2026-06-23T09:38:03.1558231Z             },
2026-06-23T09:38:03.1558317Z             {
2026-06-23T09:38:03.1558444Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1558538Z               "line": 447
2026-06-23T09:38:03.1558625Z             },
2026-06-23T09:38:03.1558714Z             {
2026-06-23T09:38:03.1558836Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1558923Z               "line": 670
2026-06-23T09:38:03.1559066Z             },
2026-06-23T09:38:03.1559151Z             {
2026-06-23T09:38:03.1559271Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1559372Z               "line": 710
2026-06-23T09:38:03.1559456Z             },
2026-06-23T09:38:03.1559543Z             {
2026-06-23T09:38:03.1559667Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1559767Z               "line": 766
2026-06-23T09:38:03.1559857Z             },
2026-06-23T09:38:03.1559972Z             {
2026-06-23T09:38:03.1560105Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.1560192Z               "line": 136
2026-06-23T09:38:03.1560278Z             },
2026-06-23T09:38:03.1560367Z             {
2026-06-23T09:38:03.1560478Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1560573Z               "line": 139
2026-06-23T09:38:03.1560653Z             }
2026-06-23T09:38:03.1560744Z           ]
2026-06-23T09:38:03.1560831Z         },
2026-06-23T09:38:03.1560917Z         "int": {
2026-06-23T09:38:03.1561015Z           "complete": false,
2026-06-23T09:38:03.1561101Z           "evidence": []
2026-06-23T09:38:03.1561186Z         },
2026-06-23T09:38:03.1561267Z         "unit": {
2026-06-23T09:38:03.1561365Z           "complete": true,
2026-06-23T09:38:03.1561466Z           "evidence": [
2026-06-23T09:38:03.1561543Z             {
2026-06-23T09:38:03.1561666Z               "path": "crates/spt-daemon/src/machineid.rs",
2026-06-23T09:38:03.1561756Z               "line": 136
2026-06-23T09:38:03.1561838Z             },
2026-06-23T09:38:03.1561924Z             {
2026-06-23T09:38:03.1562042Z               "path": "crates/spt-daemon/src/machineid.rs",
2026-06-23T09:38:03.1562228Z               "line": 156
2026-06-23T09:38:03.1562319Z             },
2026-06-23T09:38:03.1562410Z             {
2026-06-23T09:38:03.1562525Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1562620Z               "line": 987
2026-06-23T09:38:03.1562696Z             },
2026-06-23T09:38:03.1562778Z             {
2026-06-23T09:38:03.1562906Z               "path": "crates/spt-daemon/src/registryhost.rs",
2026-06-23T09:38:03.1563083Z               "line": 1009
2026-06-23T09:38:03.1563178Z             },
2026-06-23T09:38:03.1563254Z             {
2026-06-23T09:38:03.1563384Z               "path": "crates/spt-net/src/net/pairing/wire.rs",
2026-06-23T09:38:03.1563474Z               "line": 1419
2026-06-23T09:38:03.1563563Z             },
2026-06-23T09:38:03.1563640Z             {
2026-06-23T09:38:03.1563760Z               "path": "crates/spt-net/src/net/registry.rs",
2026-06-23T09:38:03.1563850Z               "line": 1036
2026-06-23T09:38:03.1563935Z             }
2026-06-23T09:38:03.1564025Z           ]
2026-06-23T09:38:03.1564111Z         }
2026-06-23T09:38:03.1564202Z       }
2026-06-23T09:38:03.1564278Z     },
2026-06-23T09:38:03.1564359Z     {
2026-06-23T09:38:03.1564464Z       "id": "REQ-SUBNET-8",
2026-06-23T09:38:03.1565575Z       "title": "Status render honesty: zero-subnet text is daemon-aware ('No subnets registered — this node is standalone.' + daemon-running-dependent blurb, never implying messaging works while the daemon is down); hint footer prints on bare spt subnet only (status drops it); a stalled pump is surfaced in subnet status, never rendered implied-healthy (M8 decisions 11-12, 23)",
2026-06-23T09:38:03.1565671Z       "requiredStages": [
2026-06-23T09:38:03.1565770Z         "impl",
2026-06-23T09:38:03.1565861Z         "unit"
2026-06-23T09:38:03.1565948Z       ],
2026-06-23T09:38:03.1566038Z       "stages": {
2026-06-23T09:38:03.1566127Z         "doc": {
2026-06-23T09:38:03.1566226Z           "complete": false,
2026-06-23T09:38:03.1566327Z           "evidence": []
2026-06-23T09:38:03.1566420Z         },
2026-06-23T09:38:03.1566506Z         "impl": {
2026-06-23T09:38:03.1566606Z           "complete": true,
2026-06-23T09:38:03.1566698Z           "evidence": [
2026-06-23T09:38:03.1566787Z             {
2026-06-23T09:38:03.1566888Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1566974Z               "line": 4490
2026-06-23T09:38:03.1567073Z             },
2026-06-23T09:38:03.1567159Z             {
2026-06-23T09:38:03.1567270Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1567360Z               "line": 4519
2026-06-23T09:38:03.1567445Z             },
2026-06-23T09:38:03.1567527Z             {
2026-06-23T09:38:03.1567631Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1567722Z               "line": 4536
2026-06-23T09:38:03.1567807Z             },
2026-06-23T09:38:03.1567899Z             {
2026-06-23T09:38:03.1567998Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1568094Z               "line": 4559
2026-06-23T09:38:03.1568180Z             },
2026-06-23T09:38:03.1568271Z             {
2026-06-23T09:38:03.1568375Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1568461Z               "line": 4973
2026-06-23T09:38:03.1568548Z             }
2026-06-23T09:38:03.1568628Z           ]
2026-06-23T09:38:03.1568714Z         },
2026-06-23T09:38:03.1568801Z         "int": {
2026-06-23T09:38:03.1568905Z           "complete": false,
2026-06-23T09:38:03.1569060Z           "evidence": []
2026-06-23T09:38:03.1569141Z         },
2026-06-23T09:38:03.1569241Z         "unit": {
2026-06-23T09:38:03.1569340Z           "complete": true,
2026-06-23T09:38:03.1569440Z           "evidence": [
2026-06-23T09:38:03.1569517Z             {
2026-06-23T09:38:03.1569621Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1569720Z               "line": 11763
2026-06-23T09:38:03.1569808Z             },
2026-06-23T09:38:03.1569898Z             {
2026-06-23T09:38:03.1570113Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1570213Z               "line": 11779
2026-06-23T09:38:03.1570298Z             }
2026-06-23T09:38:03.1570389Z           ]
2026-06-23T09:38:03.1570480Z         }
2026-06-23T09:38:03.1570561Z       }
2026-06-23T09:38:03.1570651Z     },
2026-06-23T09:38:03.1570732Z     {
2026-06-23T09:38:03.1570818Z       "id": "REQ-TERM-1",
2026-06-23T09:38:03.1571119Z       "title": "Process-supervisor terminal wrapper hosting broker PTYs",
2026-06-23T09:38:03.1571218Z       "requiredStages": [
2026-06-23T09:38:03.1571309Z         "impl",
2026-06-23T09:38:03.1571396Z         "unit"
2026-06-23T09:38:03.1571486Z       ],
2026-06-23T09:38:03.1571566Z       "stages": {
2026-06-23T09:38:03.1571656Z         "doc": {
2026-06-23T09:38:03.1571742Z           "complete": false,
2026-06-23T09:38:03.1571836Z           "evidence": []
2026-06-23T09:38:03.1571920Z         },
2026-06-23T09:38:03.1572011Z         "impl": {
2026-06-23T09:38:03.1572108Z           "complete": true,
2026-06-23T09:38:03.1572198Z           "evidence": [
2026-06-23T09:38:03.1572278Z             {
2026-06-23T09:38:03.1572394Z               "path": "crates/spt-term/src/pty.rs",
2026-06-23T09:38:03.1572479Z               "line": 59
2026-06-23T09:38:03.1572569Z             },
2026-06-23T09:38:03.1572655Z             {
2026-06-23T09:38:03.1572770Z               "path": "crates/spt-term/src/pty.rs",
2026-06-23T09:38:03.1572860Z               "line": 234
2026-06-23T09:38:03.1572951Z             },
2026-06-23T09:38:03.1573032Z             {
2026-06-23T09:38:03.1573151Z               "path": "crates/spt-term/src/surface.rs",
2026-06-23T09:38:03.1573241Z               "line": 100
2026-06-23T09:38:03.1573328Z             }
2026-06-23T09:38:03.1573423Z           ]
2026-06-23T09:38:03.1573504Z         },
2026-06-23T09:38:03.1573599Z         "int": {
2026-06-23T09:38:03.1573686Z           "complete": false,
2026-06-23T09:38:03.1573780Z           "evidence": []
2026-06-23T09:38:03.1573861Z         },
2026-06-23T09:38:03.1573954Z         "unit": {
2026-06-23T09:38:03.1574053Z           "complete": true,
2026-06-23T09:38:03.1574138Z           "evidence": [
2026-06-23T09:38:03.1574225Z             {
2026-06-23T09:38:03.1574340Z               "path": "crates/spt-term/tests/surface.rs",
2026-06-23T09:38:03.1574428Z               "line": 24
2026-06-23T09:38:03.1574518Z             },
2026-06-23T09:38:03.1574600Z             {
2026-06-23T09:38:03.1574715Z               "path": "crates/spt-term/tests/surface.rs",
2026-06-23T09:38:03.1574799Z               "line": 56
2026-06-23T09:38:03.1574890Z             }
2026-06-23T09:38:03.1574973Z           ]
2026-06-23T09:38:03.1575068Z         }
2026-06-23T09:38:03.1575152Z       }
2026-06-23T09:38:03.1575239Z     },
2026-06-23T09:38:03.1575325Z     {
2026-06-23T09:38:03.1575410Z       "id": "REQ-TERM-2",
2026-06-23T09:38:03.1575602Z       "title": "session-surface abstraction; send-keys + send-line injection",
2026-06-23T09:38:03.1575691Z       "requiredStages": [
2026-06-23T09:38:03.1575786Z         "impl",
2026-06-23T09:38:03.1575874Z         "unit"
2026-06-23T09:38:03.1575959Z       ],
2026-06-23T09:38:03.1576045Z       "stages": {
2026-06-23T09:38:03.1576130Z         "doc": {
2026-06-23T09:38:03.1576231Z           "complete": false,
2026-06-23T09:38:03.1576321Z           "evidence": []
2026-06-23T09:38:03.1576411Z         },
2026-06-23T09:38:03.1576498Z         "impl": {
2026-06-23T09:38:03.1576594Z           "complete": true,
2026-06-23T09:38:03.1576692Z           "evidence": [
2026-06-23T09:38:03.1576777Z             {
2026-06-23T09:38:03.1576902Z               "path": "crates/spt-term/src/surface.rs",
2026-06-23T09:38:03.1576990Z               "line": 117
2026-06-23T09:38:03.1577085Z             },
2026-06-23T09:38:03.1577171Z             {
2026-06-23T09:38:03.1577277Z               "path": "crates/spt-term/src/surface.rs",
2026-06-23T09:38:03.1577371Z               "line": 127
2026-06-23T09:38:03.1577467Z             }
2026-06-23T09:38:03.1577543Z           ]
2026-06-23T09:38:03.1577629Z         },
2026-06-23T09:38:03.1577796Z         "int": {
2026-06-23T09:38:03.1577891Z           "complete": false,
2026-06-23T09:38:03.1577976Z           "evidence": []
2026-06-23T09:38:03.1578062Z         },
2026-06-23T09:38:03.1578154Z         "unit": {
2026-06-23T09:38:03.1578254Z           "complete": true,
2026-06-23T09:38:03.1578353Z           "evidence": [
2026-06-23T09:38:03.1578440Z             {
2026-06-23T09:38:03.1578644Z               "path": "crates/spt-term/tests/inject.rs",
2026-06-23T09:38:03.1578731Z               "line": 46
2026-06-23T09:38:03.1578817Z             },
2026-06-23T09:38:03.1578901Z             {
2026-06-23T09:38:03.1579089Z               "path": "crates/spt-term/tests/inject.rs",
2026-06-23T09:38:03.1579183Z               "line": 77
2026-06-23T09:38:03.1579279Z             }
2026-06-23T09:38:03.1579371Z           ]
2026-06-23T09:38:03.1579452Z         }
2026-06-23T09:38:03.1579545Z       }
2026-06-23T09:38:03.1579616Z     },
2026-06-23T09:38:03.1579693Z     {
2026-06-23T09:38:03.1579788Z       "id": "REQ-TERM-3",
2026-06-23T09:38:03.1579938Z       "title": "Byte-stream remote terminal streaming for v1",
2026-06-23T09:38:03.1580048Z       "requiredStages": [
2026-06-23T09:38:03.1580134Z         "impl",
2026-06-23T09:38:03.1580224Z         "unit"
2026-06-23T09:38:03.1580305Z       ],
2026-06-23T09:38:03.1580392Z       "stages": {
2026-06-23T09:38:03.1580473Z         "doc": {
2026-06-23T09:38:03.1580572Z           "complete": false,
2026-06-23T09:38:03.1580668Z           "evidence": []
2026-06-23T09:38:03.1580749Z         },
2026-06-23T09:38:03.1580835Z         "impl": {
2026-06-23T09:38:03.1580925Z           "complete": true,
2026-06-23T09:38:03.1581026Z           "evidence": [
2026-06-23T09:38:03.1581111Z             {
2026-06-23T09:38:03.1581230Z               "path": "crates/spt-term/src/stream.rs",
2026-06-23T09:38:03.1581322Z               "line": 71
2026-06-23T09:38:03.1581402Z             }
2026-06-23T09:38:03.1581492Z           ]
2026-06-23T09:38:03.1581578Z         },
2026-06-23T09:38:03.1581670Z         "int": {
2026-06-23T09:38:03.1581764Z           "complete": false,
2026-06-23T09:38:03.1581846Z           "evidence": []
2026-06-23T09:38:03.1581937Z         },
2026-06-23T09:38:03.1582022Z         "unit": {
2026-06-23T09:38:03.1582126Z           "complete": true,
2026-06-23T09:38:03.1582206Z           "evidence": [
2026-06-23T09:38:03.1582298Z             {
2026-06-23T09:38:03.1582415Z               "path": "crates/spt-term/tests/stream.rs",
2026-06-23T09:38:03.1582499Z               "line": 37
2026-06-23T09:38:03.1582586Z             },
2026-06-23T09:38:03.1582673Z             {
2026-06-23T09:38:03.1582791Z               "path": "crates/spt-term/tests/stream.rs",
2026-06-23T09:38:03.1582877Z               "line": 67
2026-06-23T09:38:03.1582963Z             }
2026-06-23T09:38:03.1583049Z           ]
2026-06-23T09:38:03.1583143Z         }
2026-06-23T09:38:03.1583230Z       }
2026-06-23T09:38:03.1583316Z     },
2026-06-23T09:38:03.1583392Z     {
2026-06-23T09:38:03.1583481Z       "id": "REQ-TERM-4",
2026-06-23T09:38:03.1583959Z       "title": "Live activity buffer (session digest): projection of normalized session logs, snapshot-pull (spt endpoint digest) + structured-delta-stream contract + api digest-entry push",
2026-06-23T09:38:03.1584045Z       "requiredStages": [
2026-06-23T09:38:03.1584135Z         "impl",
2026-06-23T09:38:03.1584222Z         "unit",
2026-06-23T09:38:03.1584307Z         "int"
2026-06-23T09:38:03.1584393Z       ],
2026-06-23T09:38:03.1584480Z       "stages": {
2026-06-23T09:38:03.1584571Z         "doc": {
2026-06-23T09:38:03.1584660Z           "complete": false,
2026-06-23T09:38:03.1584755Z           "evidence": []
2026-06-23T09:38:03.1584838Z         },
2026-06-23T09:38:03.1584928Z         "impl": {
2026-06-23T09:38:03.1585026Z           "complete": true,
2026-06-23T09:38:03.1585112Z           "evidence": [
2026-06-23T09:38:03.1585203Z             {
2026-06-23T09:38:03.1585317Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1585508Z               "line": 37
2026-06-23T09:38:03.1585599Z             },
2026-06-23T09:38:03.1585684Z             {
2026-06-23T09:38:03.1585814Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1585895Z               "line": 25
2026-06-23T09:38:03.1585989Z             },
2026-06-23T09:38:03.1586075Z             {
2026-06-23T09:38:03.1586200Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1586390Z               "line": 114
2026-06-23T09:38:03.1586472Z             },
2026-06-23T09:38:03.1586571Z             {
2026-06-23T09:38:03.1586690Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1586782Z               "line": 267
2026-06-23T09:38:03.1586876Z             },
2026-06-23T09:38:03.1586948Z             {
2026-06-23T09:38:03.1587073Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1587163Z               "line": 289
2026-06-23T09:38:03.1587252Z             },
2026-06-23T09:38:03.1587333Z             {
2026-06-23T09:38:03.1587457Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1587541Z               "line": 307
2026-06-23T09:38:03.1587626Z             },
2026-06-23T09:38:03.1587713Z             {
2026-06-23T09:38:03.1587823Z               "path": "crates/spt-store/src/history.rs",
2026-06-23T09:38:03.1587912Z               "line": 33
2026-06-23T09:38:03.1587988Z             },
2026-06-23T09:38:03.1588080Z             {
2026-06-23T09:38:03.1588199Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1588279Z               "line": 52
2026-06-23T09:38:03.1588366Z             },
2026-06-23T09:38:03.1588451Z             {
2026-06-23T09:38:03.1588575Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1588652Z               "line": 180
2026-06-23T09:38:03.1588748Z             },
2026-06-23T09:38:03.1588829Z             {
2026-06-23T09:38:03.1589281Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1589429Z               "line": 190
2026-06-23T09:38:03.1589567Z             },
2026-06-23T09:38:03.1589697Z             {
2026-06-23T09:38:03.1589829Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1589916Z               "line": 250
2026-06-23T09:38:03.1590002Z             },
2026-06-23T09:38:03.1590086Z             {
2026-06-23T09:38:03.1590204Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1590305Z               "line": 284
2026-06-23T09:38:03.1590394Z             },
2026-06-23T09:38:03.1590484Z             {
2026-06-23T09:38:03.1590603Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1590694Z               "line": 295
2026-06-23T09:38:03.1590779Z             },
2026-06-23T09:38:03.1590870Z             {
2026-06-23T09:38:03.1590976Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1591066Z               "line": 1263
2026-06-23T09:38:03.1591151Z             }
2026-06-23T09:38:03.1591238Z           ]
2026-06-23T09:38:03.1591323Z         },
2026-06-23T09:38:03.1591413Z         "int": {
2026-06-23T09:38:03.1591504Z           "complete": true,
2026-06-23T09:38:03.1591586Z           "evidence": [
2026-06-23T09:38:03.1591671Z             {
2026-06-23T09:38:03.1591790Z               "path": "crates/spt-daemon/tests/digest.rs",
2026-06-23T09:38:03.1591882Z               "line": 18
2026-06-23T09:38:03.1591967Z             }
2026-06-23T09:38:03.1592048Z           ]
2026-06-23T09:38:03.1592134Z         },
2026-06-23T09:38:03.1592221Z         "unit": {
2026-06-23T09:38:03.1592324Z           "complete": true,
2026-06-23T09:38:03.1592415Z           "evidence": [
2026-06-23T09:38:03.1592502Z             {
2026-06-23T09:38:03.1592620Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1592710Z               "line": 364
2026-06-23T09:38:03.1592800Z             },
2026-06-23T09:38:03.1592886Z             {
2026-06-23T09:38:03.1592998Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1593203Z               "line": 416
2026-06-23T09:38:03.1593294Z             },
2026-06-23T09:38:03.1593389Z             {
2026-06-23T09:38:03.1593490Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1593585Z               "line": 426
2026-06-23T09:38:03.1593670Z             },
2026-06-23T09:38:03.1593756Z             {
2026-06-23T09:38:03.1593881Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1594061Z               "line": 436
2026-06-23T09:38:03.1594153Z             },
2026-06-23T09:38:03.1594238Z             {
2026-06-23T09:38:03.1594357Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1594439Z               "line": 456
2026-06-23T09:38:03.1594524Z             },
2026-06-23T09:38:03.1594610Z             {
2026-06-23T09:38:03.1594725Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1594811Z               "line": 478
2026-06-23T09:38:03.1594896Z             },
2026-06-23T09:38:03.1594982Z             {
2026-06-23T09:38:03.1595098Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1595187Z               "line": 491
2026-06-23T09:38:03.1595273Z             },
2026-06-23T09:38:03.1595360Z             {
2026-06-23T09:38:03.1595488Z               "path": "crates/spt-daemon/src/digesthub.rs",
2026-06-23T09:38:03.1595572Z               "line": 502
2026-06-23T09:38:03.1595657Z             },
2026-06-23T09:38:03.1595744Z             {
2026-06-23T09:38:03.1595859Z               "path": "crates/spt-store/src/history.rs",
2026-06-23T09:38:03.1595943Z               "line": 108
2026-06-23T09:38:03.1596030Z             },
2026-06-23T09:38:03.1596121Z             {
2026-06-23T09:38:03.1596235Z               "path": "crates/spt-term/src/digest.rs",
2026-06-23T09:38:03.1596325Z               "line": 119
2026-06-23T09:38:03.1596412Z             },
2026-06-23T09:38:03.1596507Z             {
2026-06-23T09:38:03.1596626Z               "path": "crates/spt-term/src/digest.rs",
2026-06-23T09:38:03.1596717Z               "line": 127
2026-06-23T09:38:03.1596802Z             },
2026-06-23T09:38:03.1596888Z             {
2026-06-23T09:38:03.1597013Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1597103Z               "line": 474
2026-06-23T09:38:03.1597193Z             },
2026-06-23T09:38:03.1597279Z             {
2026-06-23T09:38:03.1597409Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1597498Z               "line": 501
2026-06-23T09:38:03.1597580Z             },
2026-06-23T09:38:03.1597676Z             {
2026-06-23T09:38:03.1597798Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1597893Z               "line": 520
2026-06-23T09:38:03.1597983Z             },
2026-06-23T09:38:03.1598059Z             {
2026-06-23T09:38:03.1598177Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1598268Z               "line": 535
2026-06-23T09:38:03.1598359Z             },
2026-06-23T09:38:03.1598449Z             {
2026-06-23T09:38:03.1598558Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1598650Z               "line": 561
2026-06-23T09:38:03.1598726Z             },
2026-06-23T09:38:03.1598820Z             {
2026-06-23T09:38:03.1598926Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1599097Z               "line": 581
2026-06-23T09:38:03.1599192Z             },
2026-06-23T09:38:03.1599284Z             {
2026-06-23T09:38:03.1599407Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1599493Z               "line": 591
2026-06-23T09:38:03.1599575Z             },
2026-06-23T09:38:03.1599651Z             {
2026-06-23T09:38:03.1599769Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1599861Z               "line": 683
2026-06-23T09:38:03.1599942Z             },
2026-06-23T09:38:03.1600041Z             {
2026-06-23T09:38:03.1600281Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1600380Z               "line": 885
2026-06-23T09:38:03.1600457Z             },
2026-06-23T09:38:03.1600543Z             {
2026-06-23T09:38:03.1600651Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1600741Z               "line": 11330
2026-06-23T09:38:03.1600827Z             }
2026-06-23T09:38:03.1600913Z           ]
2026-06-23T09:38:03.1601091Z         }
2026-06-23T09:38:03.1601173Z       }
2026-06-23T09:38:03.1601254Z     },
2026-06-23T09:38:03.1601349Z     {
2026-06-23T09:38:03.1601439Z       "id": "REQ-TERM-5",
2026-06-23T09:38:03.1602956Z       "title": "Adapter-declared digest extractor seam: a `[digest]` manifest section declaring an imperative extractor (native harness log -> the {role,text,tool,ts} contract; defaults to the [history] source files with an own-source escape hatch), `api digest-entry` push fallback, register-time validation of the section, adapter-declared presentation defaults (window depth, arg-truncation, sprint-collapse) that any consumer may override, and a `spt adapter digest-proof` author tool plus runtime skip-diagnostics (no silent drop). Reverses M9's no-manifest-seam stance; no declarative DSL.",
2026-06-23T09:38:03.1603062Z       "requiredStages": [
2026-06-23T09:38:03.1603139Z         "doc",
2026-06-23T09:38:03.1603232Z         "impl",
2026-06-23T09:38:03.1603312Z         "unit",
2026-06-23T09:38:03.1603403Z         "int"
2026-06-23T09:38:03.1603488Z       ],
2026-06-23T09:38:03.1603577Z       "stages": {
2026-06-23T09:38:03.1603662Z         "doc": {
2026-06-23T09:38:03.1603754Z           "complete": true,
2026-06-23T09:38:03.1603850Z           "evidence": [
2026-06-23T09:38:03.1603935Z             {
2026-06-23T09:38:03.1604045Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:03.1604131Z               "line": 250
2026-06-23T09:38:03.1604221Z             }
2026-06-23T09:38:03.1604311Z           ]
2026-06-23T09:38:03.1604394Z         },
2026-06-23T09:38:03.1604484Z         "impl": {
2026-06-23T09:38:03.1604578Z           "complete": true,
2026-06-23T09:38:03.1604665Z           "evidence": [
2026-06-23T09:38:03.1604751Z             {
2026-06-23T09:38:03.1604874Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1604970Z               "line": 75
2026-06-23T09:38:03.1605056Z             },
2026-06-23T09:38:03.1605137Z             {
2026-06-23T09:38:03.1605246Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1605338Z               "line": 131
2026-06-23T09:38:03.1605413Z             },
2026-06-23T09:38:03.1605504Z             {
2026-06-23T09:38:03.1605624Z               "path": "crates/spt-live/src/digest.rs",
2026-06-23T09:38:03.1605705Z               "line": 22
2026-06-23T09:38:03.1605794Z             },
2026-06-23T09:38:03.1605876Z             {
2026-06-23T09:38:03.1605992Z               "path": "crates/spt-live/src/digest.rs",
2026-06-23T09:38:03.1606080Z               "line": 87
2026-06-23T09:38:03.1606170Z             },
2026-06-23T09:38:03.1606260Z             {
2026-06-23T09:38:03.1606372Z               "path": "crates/spt-term/src/digest.rs",
2026-06-23T09:38:03.1606466Z               "line": 30
2026-06-23T09:38:03.1606556Z             },
2026-06-23T09:38:03.1606643Z             {
2026-06-23T09:38:03.1606762Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1606856Z               "line": 103
2026-06-23T09:38:03.1606948Z             },
2026-06-23T09:38:03.1607029Z             {
2026-06-23T09:38:03.1607152Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1607234Z               "line": 167
2026-06-23T09:38:03.1607329Z             },
2026-06-23T09:38:03.1607420Z             {
2026-06-23T09:38:03.1607539Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1607635Z               "line": 434
2026-06-23T09:38:03.1607710Z             },
2026-06-23T09:38:03.1607791Z             {
2026-06-23T09:38:03.1607898Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1608073Z               "line": 6316
2026-06-23T09:38:03.1608159Z             },
2026-06-23T09:38:03.1608246Z             {
2026-06-23T09:38:03.1608359Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1608444Z               "line": 6849
2026-06-23T09:38:03.1608535Z             }
2026-06-23T09:38:03.1608615Z           ]
2026-06-23T09:38:03.1608704Z         },
2026-06-23T09:38:03.1608857Z         "int": {
2026-06-23T09:38:03.1609009Z           "complete": true,
2026-06-23T09:38:03.1609104Z           "evidence": [
2026-06-23T09:38:03.1609190Z             {
2026-06-23T09:38:03.1609366Z               "path": "crates/spt-daemon/tests/two_origin_spanning.rs",
2026-06-23T09:38:03.1609452Z               "line": 17
2026-06-23T09:38:03.1609544Z             }
2026-06-23T09:38:03.1609629Z           ]
2026-06-23T09:38:03.1609719Z         },
2026-06-23T09:38:03.1609806Z         "unit": {
2026-06-23T09:38:03.1609896Z           "complete": true,
2026-06-23T09:38:03.1609991Z           "evidence": [
2026-06-23T09:38:03.1610077Z             {
2026-06-23T09:38:03.1610197Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1610287Z               "line": 375
2026-06-23T09:38:03.1610377Z             },
2026-06-23T09:38:03.1610459Z             {
2026-06-23T09:38:03.1610573Z               "path": "crates/spt-live/src/digest.rs",
2026-06-23T09:38:03.1610663Z               "line": 162
2026-06-23T09:38:03.1610751Z             },
2026-06-23T09:38:03.1610827Z             {
2026-06-23T09:38:03.1610945Z               "path": "crates/spt-live/src/digest.rs",
2026-06-23T09:38:03.1611041Z               "line": 179
2026-06-23T09:38:03.1611156Z             },
2026-06-23T09:38:03.1614862Z             {
2026-06-23T09:38:03.1615029Z               "path": "crates/spt-live/src/digest.rs",
2026-06-23T09:38:03.1615124Z               "line": 201
2026-06-23T09:38:03.1615221Z             },
2026-06-23T09:38:03.1615306Z             {
2026-06-23T09:38:03.1615448Z               "path": "crates/spt-live/src/digest.rs",
2026-06-23T09:38:03.1615540Z               "line": 212
2026-06-23T09:38:03.1615617Z             },
2026-06-23T09:38:03.1615707Z             {
2026-06-23T09:38:03.1615821Z               "path": "crates/spt-live/src/digest.rs",
2026-06-23T09:38:03.1615917Z               "line": 223
2026-06-23T09:38:03.1616011Z             },
2026-06-23T09:38:03.1616097Z             {
2026-06-23T09:38:03.1616232Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1616325Z               "line": 1572
2026-06-23T09:38:03.1616422Z             },
2026-06-23T09:38:03.1616508Z             {
2026-06-23T09:38:03.1616631Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1616735Z               "line": 1615
2026-06-23T09:38:03.1616816Z             },
2026-06-23T09:38:03.1616908Z             {
2026-06-23T09:38:03.1617026Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1617121Z               "line": 606
2026-06-23T09:38:03.1617203Z             },
2026-06-23T09:38:03.1617294Z             {
2026-06-23T09:38:03.1617412Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1617499Z               "line": 634
2026-06-23T09:38:03.1617594Z             },
2026-06-23T09:38:03.1617679Z             {
2026-06-23T09:38:03.1617799Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1617885Z               "line": 646
2026-06-23T09:38:03.1617975Z             },
2026-06-23T09:38:03.1618060Z             {
2026-06-23T09:38:03.1618176Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1618266Z               "line": 669
2026-06-23T09:38:03.1618347Z             },
2026-06-23T09:38:03.1618434Z             {
2026-06-23T09:38:03.1618543Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1618638Z               "line": 9901
2026-06-23T09:38:03.1618734Z             },
2026-06-23T09:38:03.1618815Z             {
2026-06-23T09:38:03.1619132Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1619221Z               "line": 9959
2026-06-23T09:38:03.1619320Z             }
2026-06-23T09:38:03.1619407Z           ]
2026-06-23T09:38:03.1619494Z         }
2026-06-23T09:38:03.1619584Z       }
2026-06-23T09:38:03.1619669Z     },
2026-06-23T09:38:03.1619755Z     {
2026-06-23T09:38:03.1619832Z       "id": "REQ-TERM-6",
2026-06-23T09:38:03.1620942Z       "title": "Thread-spanning digest across session boundaries: a per-endpoint session ledger (`<perch>/sessions.log`) appended at first bind and by `api boundary` on `/clear`|`/compact` session rotation, the digest enumerating the last K sessions so its rolling window bridges a boundary, and a distinctive in-timeline boundary marker (DigestEntry::Boundary). The digest follows the live-agent thread, not a single session.",
2026-06-23T09:38:03.1621138Z       "requiredStages": [
2026-06-23T09:38:03.1621219Z         "impl",
2026-06-23T09:38:03.1621311Z         "unit",
2026-06-23T09:38:03.1621396Z         "int"
2026-06-23T09:38:03.1621471Z       ],
2026-06-23T09:38:03.1621572Z       "stages": {
2026-06-23T09:38:03.1621659Z         "doc": {
2026-06-23T09:38:03.1621753Z           "complete": false,
2026-06-23T09:38:03.1621842Z           "evidence": []
2026-06-23T09:38:03.1621928Z         },
2026-06-23T09:38:03.1622014Z         "impl": {
2026-06-23T09:38:03.1622112Z           "complete": true,
2026-06-23T09:38:03.1622202Z           "evidence": [
2026-06-23T09:38:03.1622289Z             {
2026-06-23T09:38:03.1622418Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1622507Z               "line": 132
2026-06-23T09:38:03.1622599Z             },
2026-06-23T09:38:03.1622680Z             {
2026-06-23T09:38:03.1622803Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1622894Z               "line": 187
2026-06-23T09:38:03.1622976Z             },
2026-06-23T09:38:03.1623062Z             {
2026-06-23T09:38:03.1623175Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1623266Z               "line": 17
2026-06-23T09:38:03.1623347Z             },
2026-06-23T09:38:03.1623433Z             {
2026-06-23T09:38:03.1623553Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1623643Z               "line": 104
2026-06-23T09:38:03.1623728Z             },
2026-06-23T09:38:03.1623809Z             {
2026-06-23T09:38:03.1623934Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1624023Z               "line": 319
2026-06-23T09:38:03.1624110Z             },
2026-06-23T09:38:03.1624197Z             {
2026-06-23T09:38:03.1624311Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1624404Z               "line": 396
2026-06-23T09:38:03.1624485Z             }
2026-06-23T09:38:03.1624571Z           ]
2026-06-23T09:38:03.1624660Z         },
2026-06-23T09:38:03.1624745Z         "int": {
2026-06-23T09:38:03.1624850Z           "complete": true,
2026-06-23T09:38:03.1624937Z           "evidence": [
2026-06-23T09:38:03.1625026Z             {
2026-06-23T09:38:03.1625175Z               "path": "crates/spt-daemon/tests/two_origin_spanning.rs",
2026-06-23T09:38:03.1625265Z               "line": 18
2026-06-23T09:38:03.1625355Z             }
2026-06-23T09:38:03.1625436Z           ]
2026-06-23T09:38:03.1625519Z         },
2026-06-23T09:38:03.1625609Z         "unit": {
2026-06-23T09:38:03.1625708Z           "complete": true,
2026-06-23T09:38:03.1625800Z           "evidence": [
2026-06-23T09:38:03.1625885Z             {
2026-06-23T09:38:03.1626008Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1626095Z               "line": 135
2026-06-23T09:38:03.1626182Z             },
2026-06-23T09:38:03.1626267Z             {
2026-06-23T09:38:03.1626386Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1626473Z               "line": 150
2026-06-23T09:38:03.1626562Z             },
2026-06-23T09:38:03.1626652Z             {
2026-06-23T09:38:03.1626863Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1626962Z               "line": 166
2026-06-23T09:38:03.1627045Z             },
2026-06-23T09:38:03.1627131Z             {
2026-06-23T09:38:03.1627238Z               "path": "crates/spt-store/src/sessions.rs",
2026-06-23T09:38:03.1627324Z               "line": 257
2026-06-23T09:38:03.1627415Z             },
2026-06-23T09:38:03.1627497Z             {
2026-06-23T09:38:03.1627691Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1627777Z               "line": 738
2026-06-23T09:38:03.1627863Z             },
2026-06-23T09:38:03.1627948Z             {
2026-06-23T09:38:03.1628069Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1628154Z               "line": 759
2026-06-23T09:38:03.1628229Z             },
2026-06-23T09:38:03.1628311Z             {
2026-06-23T09:38:03.1628421Z               "path": "crates/spt/src/api/reporting.rs",
2026-06-23T09:38:03.1628507Z               "line": 726
2026-06-23T09:38:03.1628597Z             }
2026-06-23T09:38:03.1628679Z           ]
2026-06-23T09:38:03.1628764Z         }
2026-06-23T09:38:03.1628845Z       }
2026-06-23T09:38:03.1628935Z     },
2026-06-23T09:38:03.1629084Z     {
2026-06-23T09:38:03.1629179Z       "id": "REQ-TERM-7",
2026-06-23T09:38:03.1630320Z       "title": "Two-origin digest merge: spt-owned context-injection entries (psyche_download | echo_mirror | owl_message) appended by spt to the endpoint `digest.log`, timestamp-interleaved with the adapter's extracted activity records into one ordered timeline, via a distinct context-injection record category. Data model only this milestone; GUI collapse/expand and the echo-reads-digest delta loop are deferred to the surfaces that consume them.",
2026-06-23T09:38:03.1630420Z       "requiredStages": [
2026-06-23T09:38:03.1630506Z         "impl",
2026-06-23T09:38:03.1630592Z         "unit",
2026-06-23T09:38:03.1630678Z         "int"
2026-06-23T09:38:03.1630758Z       ],
2026-06-23T09:38:03.1630844Z       "stages": {
2026-06-23T09:38:03.1630931Z         "doc": {
2026-06-23T09:38:03.1631026Z           "complete": false,
2026-06-23T09:38:03.1631116Z           "evidence": []
2026-06-23T09:38:03.1631202Z         },
2026-06-23T09:38:03.1631288Z         "impl": {
2026-06-23T09:38:03.1631369Z           "complete": true,
2026-06-23T09:38:03.1631464Z           "evidence": [
2026-06-23T09:38:03.1631551Z             {
2026-06-23T09:38:03.1631664Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1631751Z               "line": 133
2026-06-23T09:38:03.1631837Z             },
2026-06-23T09:38:03.1631923Z             {
2026-06-23T09:38:03.1632036Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1632127Z               "line": 326
2026-06-23T09:38:03.1632215Z             },
2026-06-23T09:38:03.1632294Z             {
2026-06-23T09:38:03.1632421Z               "path": "crates/spt-live/src/inject.rs",
2026-06-23T09:38:03.1632502Z               "line": 15
2026-06-23T09:38:03.1632588Z             },
2026-06-23T09:38:03.1632677Z             {
2026-06-23T09:38:03.1632786Z               "path": "crates/spt-live/src/inject.rs",
2026-06-23T09:38:03.1632872Z               "line": 32
2026-06-23T09:38:03.1632959Z             },
2026-06-23T09:38:03.1633048Z             {
2026-06-23T09:38:03.1633159Z               "path": "crates/spt-store/src/history.rs",
2026-06-23T09:38:03.1633254Z               "line": 49
2026-06-23T09:38:03.1633354Z             },
2026-06-23T09:38:03.1633435Z             {
2026-06-23T09:38:03.1633564Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1633645Z               "line": 286
2026-06-23T09:38:03.1633735Z             },
2026-06-23T09:38:03.1633817Z             {
2026-06-23T09:38:03.1633945Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1634030Z               "line": 320
2026-06-23T09:38:03.1634118Z             }
2026-06-23T09:38:03.1634203Z           ]
2026-06-23T09:38:03.1634288Z         },
2026-06-23T09:38:03.1634551Z         "int": {
2026-06-23T09:38:03.1634642Z           "complete": true,
2026-06-23T09:38:03.1634728Z           "evidence": [
2026-06-23T09:38:03.1634823Z             {
2026-06-23T09:38:03.1634969Z               "path": "crates/spt-daemon/tests/two_origin_spanning.rs",
2026-06-23T09:38:03.1635055Z               "line": 19
2026-06-23T09:38:03.1635141Z             }
2026-06-23T09:38:03.1635220Z           ]
2026-06-23T09:38:03.1635396Z         },
2026-06-23T09:38:03.1635482Z         "unit": {
2026-06-23T09:38:03.1635568Z           "complete": true,
2026-06-23T09:38:03.1635653Z           "evidence": [
2026-06-23T09:38:03.1635735Z             {
2026-06-23T09:38:03.1635835Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1636326Z               "line": 455
2026-06-23T09:38:03.1636488Z             },
2026-06-23T09:38:03.1636593Z             {
2026-06-23T09:38:03.1636732Z               "path": "crates/spt-daemon/src/digest.rs",
2026-06-23T09:38:03.1636827Z               "line": 568
2026-06-23T09:38:03.1636932Z             },
2026-06-23T09:38:03.1637013Z             {
2026-06-23T09:38:03.1637185Z               "path": "crates/spt-live/src/inject.rs",
2026-06-23T09:38:03.1637310Z               "line": 58
2026-06-23T09:38:03.1637432Z             },
2026-06-23T09:38:03.1637542Z             {
2026-06-23T09:38:03.1637686Z               "path": "crates/spt-live/src/inject.rs",
2026-06-23T09:38:03.1637817Z               "line": 77
2026-06-23T09:38:03.1637932Z             },
2026-06-23T09:38:03.1638047Z             {
2026-06-23T09:38:03.1638213Z               "path": "crates/spt-live/src/inject.rs",
2026-06-23T09:38:03.1638329Z               "line": 87
2026-06-23T09:38:03.1638442Z             },
2026-06-23T09:38:03.1638556Z             {
2026-06-23T09:38:03.1638734Z               "path": "crates/spt-store/src/history.rs",
2026-06-23T09:38:03.1638890Z               "line": 94
2026-06-23T09:38:03.1639095Z             },
2026-06-23T09:38:03.1639210Z             {
2026-06-23T09:38:03.1639396Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1639520Z               "line": 691
2026-06-23T09:38:03.1639639Z             },
2026-06-23T09:38:03.1639762Z             {
2026-06-23T09:38:03.1639912Z               "path": "crates/spt-term/src/projection.rs",
2026-06-23T09:38:03.1640034Z               "line": 716
2026-06-23T09:38:03.1640152Z             }
2026-06-23T09:38:03.1640267Z           ]
2026-06-23T09:38:03.1640394Z         }
2026-06-23T09:38:03.1640508Z       }
2026-06-23T09:38:03.1640624Z     },
2026-06-23T09:38:03.1640732Z     {
2026-06-23T09:38:03.1640847Z       "id": "REQ-UPD-1",
2026-06-23T09:38:03.1641013Z       "title": "Peer-propagated update over P2P",
2026-06-23T09:38:03.1641133Z       "requiredStages": [
2026-06-23T09:38:03.1641252Z         "impl",
2026-06-23T09:38:03.1641366Z         "unit",
2026-06-23T09:38:03.1641491Z         "int"
2026-06-23T09:38:03.1641596Z       ],
2026-06-23T09:38:03.1641728Z       "stages": {
2026-06-23T09:38:03.1641835Z         "doc": {
2026-06-23T09:38:03.1641976Z           "complete": false,
2026-06-23T09:38:03.1642097Z           "evidence": []
2026-06-23T09:38:03.1642210Z         },
2026-06-23T09:38:03.1642334Z         "impl": {
2026-06-23T09:38:03.1642460Z           "complete": true,
2026-06-23T09:38:03.1642591Z           "evidence": [
2026-06-23T09:38:03.1642707Z             {
2026-06-23T09:38:03.1642901Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1643044Z               "line": 28
2026-06-23T09:38:03.1643153Z             },
2026-06-23T09:38:03.1643285Z             {
2026-06-23T09:38:03.1643462Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1643585Z               "line": 103
2026-06-23T09:38:03.1643699Z             },
2026-06-23T09:38:03.1643819Z             {
2026-06-23T09:38:03.1643990Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1644105Z               "line": 342
2026-06-23T09:38:03.1644233Z             },
2026-06-23T09:38:03.1644338Z             {
2026-06-23T09:38:03.1644697Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1644815Z               "line": 22
2026-06-23T09:38:03.1644934Z             },
2026-06-23T09:38:03.1645054Z             {
2026-06-23T09:38:03.1645216Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1645341Z               "line": 207
2026-06-23T09:38:03.1645501Z             },
2026-06-23T09:38:03.1645814Z             {
2026-06-23T09:38:03.1645971Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1646091Z               "line": 283
2026-06-23T09:38:03.1646208Z             },
2026-06-23T09:38:03.1646315Z             {
2026-06-23T09:38:03.1646490Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1646610Z               "line": 340
2026-06-23T09:38:03.1646743Z             },
2026-06-23T09:38:03.1646862Z             {
2026-06-23T09:38:03.1647025Z               "path": "crates/spt-net/src/net/update.rs",
2026-06-23T09:38:03.1647157Z               "line": 37
2026-06-23T09:38:03.1647259Z             }
2026-06-23T09:38:03.1647372Z           ]
2026-06-23T09:38:03.1647487Z         },
2026-06-23T09:38:03.1647602Z         "int": {
2026-06-23T09:38:03.1647735Z           "complete": true,
2026-06-23T09:38:03.1647850Z           "evidence": [
2026-06-23T09:38:03.1647964Z             {
2026-06-23T09:38:03.1648131Z               "path": "crates/spt-daemon/tests/dispatch.rs",
2026-06-23T09:38:03.1648256Z               "line": 207
2026-06-23T09:38:03.1648387Z             },
2026-06-23T09:38:03.1648521Z             {
2026-06-23T09:38:03.1648692Z               "path": "crates/spt-daemon/tests/twohost.rs",
2026-06-23T09:38:03.1648816Z               "line": 1084
2026-06-23T09:38:03.1648926Z             }
2026-06-23T09:38:03.1649299Z           ]
2026-06-23T09:38:03.1649475Z         },
2026-06-23T09:38:03.1649593Z         "unit": {
2026-06-23T09:38:03.1649736Z           "complete": true,
2026-06-23T09:38:03.1649838Z           "evidence": [
2026-06-23T09:38:03.1649961Z             {
2026-06-23T09:38:03.1650148Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1650265Z               "line": 490
2026-06-23T09:38:03.1650381Z             },
2026-06-23T09:38:03.1650482Z             {
2026-06-23T09:38:03.1650651Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1650760Z               "line": 616
2026-06-23T09:38:03.1650874Z             },
2026-06-23T09:38:03.1650987Z             {
2026-06-23T09:38:03.1651150Z               "path": "crates/spt-daemon/tests/propagate.rs",
2026-06-23T09:38:03.1651264Z               "line": 277
2026-06-23T09:38:03.1651369Z             },
2026-06-23T09:38:03.1651479Z             {
2026-06-23T09:38:03.1651631Z               "path": "crates/spt-net/src/net/update.rs",
2026-06-23T09:38:03.1651737Z               "line": 124
2026-06-23T09:38:03.1651851Z             },
2026-06-23T09:38:03.1651955Z             {
2026-06-23T09:38:03.1652117Z               "path": "crates/spt-net/src/net/update.rs",
2026-06-23T09:38:03.1652231Z               "line": 200
2026-06-23T09:38:03.1652337Z             }
2026-06-23T09:38:03.1652442Z           ]
2026-06-23T09:38:03.1652546Z         }
2026-06-23T09:38:03.1652652Z       }
2026-06-23T09:38:03.1652761Z     },
2026-06-23T09:38:03.1652866Z     {
2026-06-23T09:38:03.1652986Z       "id": "REQ-UPD-2",
2026-06-23T09:38:03.1653190Z       "title": "All binaries signature-verified before handoff",
2026-06-23T09:38:03.1653320Z       "requiredStages": [
2026-06-23T09:38:03.1653419Z         "impl",
2026-06-23T09:38:03.1653528Z         "unit"
2026-06-23T09:38:03.1653637Z       ],
2026-06-23T09:38:03.1653750Z       "stages": {
2026-06-23T09:38:03.1653845Z         "doc": {
2026-06-23T09:38:03.1653969Z           "complete": false,
2026-06-23T09:38:03.1654074Z           "evidence": []
2026-06-23T09:38:03.1654178Z         },
2026-06-23T09:38:03.1654289Z         "impl": {
2026-06-23T09:38:03.1654394Z           "complete": true,
2026-06-23T09:38:03.1654728Z           "evidence": [
2026-06-23T09:38:03.1654832Z             {
2026-06-23T09:38:03.1655008Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1655118Z               "line": 343
2026-06-23T09:38:03.1655214Z             },
2026-06-23T09:38:03.1655319Z             {
2026-06-23T09:38:03.1655471Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1655709Z               "line": 476
2026-06-23T09:38:03.1655804Z             },
2026-06-23T09:38:03.1655916Z             {
2026-06-23T09:38:03.1656066Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1656170Z               "line": 29
2026-06-23T09:38:03.1656275Z             },
2026-06-23T09:38:03.1656374Z             {
2026-06-23T09:38:03.1656521Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1656627Z               "line": 281
2026-06-23T09:38:03.1656735Z             },
2026-06-23T09:38:03.1656841Z             {
2026-06-23T09:38:03.1656994Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1657112Z               "line": 298
2026-06-23T09:38:03.1657213Z             },
2026-06-23T09:38:03.1657323Z             {
2026-06-23T09:38:03.1657466Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1657580Z               "line": 418
2026-06-23T09:38:03.1657694Z             },
2026-06-23T09:38:03.1657790Z             {
2026-06-23T09:38:03.1657942Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1658042Z               "line": 568
2026-06-23T09:38:03.1658139Z             },
2026-06-23T09:38:03.1658233Z             {
2026-06-23T09:38:03.1658381Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1658492Z               "line": 155
2026-06-23T09:38:03.1658595Z             }
2026-06-23T09:38:03.1658706Z           ]
2026-06-23T09:38:03.1658806Z         },
2026-06-23T09:38:03.1658914Z         "int": {
2026-06-23T09:38:03.1659177Z           "complete": false,
2026-06-23T09:38:03.1659314Z           "evidence": []
2026-06-23T09:38:03.1659424Z         },
2026-06-23T09:38:03.1659525Z         "unit": {
2026-06-23T09:38:03.1659643Z           "complete": true,
2026-06-23T09:38:03.1659749Z           "evidence": [
2026-06-23T09:38:03.1659859Z             {
2026-06-23T09:38:03.1659992Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1660106Z               "line": 760
2026-06-23T09:38:03.1660211Z             },
2026-06-23T09:38:03.1660316Z             {
2026-06-23T09:38:03.1660450Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1660550Z               "line": 821
2026-06-23T09:38:03.1660660Z             },
2026-06-23T09:38:03.1660755Z             {
2026-06-23T09:38:03.1660892Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1660994Z               "line": 835
2026-06-23T09:38:03.1661094Z             },
2026-06-23T09:38:03.1661192Z             {
2026-06-23T09:38:03.1661335Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1661448Z               "line": 851
2026-06-23T09:38:03.1661557Z             },
2026-06-23T09:38:03.1661662Z             {
2026-06-23T09:38:03.1661810Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1661914Z               "line": 942
2026-06-23T09:38:03.1662030Z             },
2026-06-23T09:38:03.1662129Z             {
2026-06-23T09:38:03.1662282Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1662396Z               "line": 414
2026-06-23T09:38:03.1662500Z             },
2026-06-23T09:38:03.1662597Z             {
2026-06-23T09:38:03.1662735Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1662844Z               "line": 427
2026-06-23T09:38:03.1662931Z             },
2026-06-23T09:38:03.1663025Z             {
2026-06-23T09:38:03.1663154Z               "path": "crates/spt-daemon/tests/propagate.rs",
2026-06-23T09:38:03.1663241Z               "line": 410
2026-06-23T09:38:03.1663440Z             }
2026-06-23T09:38:03.1663527Z           ]
2026-06-23T09:38:03.1663613Z         }
2026-06-23T09:38:03.1663697Z       }
2026-06-23T09:38:03.1663788Z     },
2026-06-23T09:38:03.1663880Z     {
2026-06-23T09:38:03.1663970Z       "id": "REQ-UPD-3",
2026-06-23T09:38:03.1664149Z       "title": "No endpoint process terminates/suspends during self-update",
2026-06-23T09:38:03.1664245Z       "requiredStages": [
2026-06-23T09:38:03.1664433Z         "impl",
2026-06-23T09:38:03.1664514Z         "unit",
2026-06-23T09:38:03.1664601Z         "int"
2026-06-23T09:38:03.1664686Z       ],
2026-06-23T09:38:03.1664776Z       "stages": {
2026-06-23T09:38:03.1664864Z         "doc": {
2026-06-23T09:38:03.1664954Z           "complete": false,
2026-06-23T09:38:03.1665043Z           "evidence": []
2026-06-23T09:38:03.1665130Z         },
2026-06-23T09:38:03.1665216Z         "impl": {
2026-06-23T09:38:03.1665311Z           "complete": true,
2026-06-23T09:38:03.1665396Z           "evidence": [
2026-06-23T09:38:03.1665488Z             {
2026-06-23T09:38:03.1665621Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1665707Z               "line": 40
2026-06-23T09:38:03.1665793Z             },
2026-06-23T09:38:03.1665883Z             {
2026-06-23T09:38:03.1666021Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1666108Z               "line": 87
2026-06-23T09:38:03.1666203Z             },
2026-06-23T09:38:03.1666288Z             {
2026-06-23T09:38:03.1666414Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.1666504Z               "line": 1164
2026-06-23T09:38:03.1666593Z             },
2026-06-23T09:38:03.1666687Z             {
2026-06-23T09:38:03.1666807Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.1666900Z               "line": 1994
2026-06-23T09:38:03.1666976Z             },
2026-06-23T09:38:03.1667067Z             {
2026-06-23T09:38:03.1667178Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1667267Z               "line": 26
2026-06-23T09:38:03.1667353Z             },
2026-06-23T09:38:03.1667435Z             {
2026-06-23T09:38:03.1667554Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1667639Z               "line": 114
2026-06-23T09:38:03.1667731Z             },
2026-06-23T09:38:03.1667816Z             {
2026-06-23T09:38:03.1667939Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1668031Z               "line": 246
2026-06-23T09:38:03.1668111Z             },
2026-06-23T09:38:03.1668212Z             {
2026-06-23T09:38:03.1668316Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1668412Z               "line": 2796
2026-06-23T09:38:03.1668502Z             }
2026-06-23T09:38:03.1668583Z           ]
2026-06-23T09:38:03.1668670Z         },
2026-06-23T09:38:03.1668755Z         "int": {
2026-06-23T09:38:03.1668855Z           "complete": true,
2026-06-23T09:38:03.1669037Z           "evidence": [
2026-06-23T09:38:03.1669169Z             {
2026-06-23T09:38:03.1669300Z               "path": "crates/spt/tests/brain_survive.rs",
2026-06-23T09:38:03.1669390Z               "line": 58
2026-06-23T09:38:03.1669493Z             }
2026-06-23T09:38:03.1669588Z           ]
2026-06-23T09:38:03.1669674Z         },
2026-06-23T09:38:03.1669756Z         "unit": {
2026-06-23T09:38:03.1669860Z           "complete": true,
2026-06-23T09:38:03.1669956Z           "evidence": [
2026-06-23T09:38:03.1670052Z             {
2026-06-23T09:38:03.1670188Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1670271Z               "line": 532
2026-06-23T09:38:03.1670366Z             },
2026-06-23T09:38:03.1670447Z             {
2026-06-23T09:38:03.1670575Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1670666Z               "line": 587
2026-06-23T09:38:03.1670757Z             },
2026-06-23T09:38:03.1670842Z             {
2026-06-23T09:38:03.1671066Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1671152Z               "line": 655
2026-06-23T09:38:03.1671240Z             },
2026-06-23T09:38:03.1671320Z             {
2026-06-23T09:38:03.1671434Z               "path": "crates/spt-daemon/src/brainproc.rs",
2026-06-23T09:38:03.1671520Z               "line": 1102
2026-06-23T09:38:03.1671602Z             },
2026-06-23T09:38:03.1671686Z             {
2026-06-23T09:38:03.1671914Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1671999Z               "line": 271
2026-06-23T09:38:03.1672088Z             },
2026-06-23T09:38:03.1672179Z             {
2026-06-23T09:38:03.1672289Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1672375Z               "line": 295
2026-06-23T09:38:03.1672455Z             },
2026-06-23T09:38:03.1672551Z             {
2026-06-23T09:38:03.1672661Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1672760Z               "line": 316
2026-06-23T09:38:03.1672857Z             },
2026-06-23T09:38:03.1672937Z             {
2026-06-23T09:38:03.1673060Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1673148Z               "line": 332
2026-06-23T09:38:03.1673233Z             }
2026-06-23T09:38:03.1673319Z           ]
2026-06-23T09:38:03.1673409Z         }
2026-06-23T09:38:03.1673500Z       }
2026-06-23T09:38:03.1673581Z     },
2026-06-23T09:38:03.1673676Z     {
2026-06-23T09:38:03.1673772Z       "id": "REQ-UPD-4",
2026-06-23T09:38:03.1673957Z       "title": "Update gated on user confirmation by default; opt-in full-auto",
2026-06-23T09:38:03.1674053Z       "requiredStages": [
2026-06-23T09:38:03.1674140Z         "impl",
2026-06-23T09:38:03.1674230Z         "unit"
2026-06-23T09:38:03.1674315Z       ],
2026-06-23T09:38:03.1674402Z       "stages": {
2026-06-23T09:38:03.1674488Z         "doc": {
2026-06-23T09:38:03.1674591Z           "complete": false,
2026-06-23T09:38:03.1674676Z           "evidence": []
2026-06-23T09:38:03.1674767Z         },
2026-06-23T09:38:03.1674862Z         "impl": {
2026-06-23T09:38:03.1674951Z           "complete": true,
2026-06-23T09:38:03.1675041Z           "evidence": [
2026-06-23T09:38:03.1675128Z             {
2026-06-23T09:38:03.1675265Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1675351Z               "line": 41
2026-06-23T09:38:03.1675433Z             },
2026-06-23T09:38:03.1675524Z             {
2026-06-23T09:38:03.1675651Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1675738Z               "line": 88
2026-06-23T09:38:03.1675823Z             },
2026-06-23T09:38:03.1675913Z             {
2026-06-23T09:38:03.1676029Z               "path": "crates/spt-daemon/src/consent.rs",
2026-06-23T09:38:03.1676119Z               "line": 23
2026-06-23T09:38:03.1676210Z             },
2026-06-23T09:38:03.1676291Z             {
2026-06-23T09:38:03.1676416Z               "path": "crates/spt-daemon/src/consent.rs",
2026-06-23T09:38:03.1676505Z               "line": 56
2026-06-23T09:38:03.1676601Z             },
2026-06-23T09:38:03.1676687Z             {
2026-06-23T09:38:03.1676810Z               "path": "crates/spt-daemon/src/consent.rs",
2026-06-23T09:38:03.1676906Z               "line": 77
2026-06-23T09:38:03.1676992Z             },
2026-06-23T09:38:03.1677083Z             {
2026-06-23T09:38:03.1677205Z               "path": "crates/spt-daemon/src/lifecycle.rs",
2026-06-23T09:38:03.1677305Z               "line": 434
2026-06-23T09:38:03.1677391Z             },
2026-06-23T09:38:03.1677474Z             {
2026-06-23T09:38:03.1677598Z               "path": "crates/spt-daemon/src/notif.rs",
2026-06-23T09:38:03.1677690Z               "line": 108
2026-06-23T09:38:03.1677780Z             },
2026-06-23T09:38:03.1677856Z             {
2026-06-23T09:38:03.1677976Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.1678066Z               "line": 270
2026-06-23T09:38:03.1678151Z             },
2026-06-23T09:38:03.1678237Z             {
2026-06-23T09:38:03.1678438Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1678537Z               "line": 2795
2026-06-23T09:38:03.1678625Z             }
2026-06-23T09:38:03.1678714Z           ]
2026-06-23T09:38:03.1678804Z         },
2026-06-23T09:38:03.1678891Z         "int": {
2026-06-23T09:38:03.1679105Z           "complete": false,
2026-06-23T09:38:03.1679196Z           "evidence": []
2026-06-23T09:38:03.1679386Z         },
2026-06-23T09:38:03.1679468Z         "unit": {
2026-06-23T09:38:03.1679569Z           "complete": true,
2026-06-23T09:38:03.1679654Z           "evidence": [
2026-06-23T09:38:03.1679744Z             {
2026-06-23T09:38:03.1679874Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1679959Z               "line": 583
2026-06-23T09:38:03.1680049Z             },
2026-06-23T09:38:03.1680134Z             {
2026-06-23T09:38:03.1680249Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1680344Z               "line": 708
2026-06-23T09:38:03.1680439Z             },
2026-06-23T09:38:03.1680526Z             {
2026-06-23T09:38:03.1680645Z               "path": "crates/spt-daemon/src/config.rs",
2026-06-23T09:38:03.1680740Z               "line": 384
2026-06-23T09:38:03.1680826Z             },
2026-06-23T09:38:03.1680907Z             {
2026-06-23T09:38:03.1681021Z               "path": "crates/spt-daemon/src/consent.rs",
2026-06-23T09:38:03.1681107Z               "line": 102
2026-06-23T09:38:03.1681198Z             },
2026-06-23T09:38:03.1681288Z             {
2026-06-23T09:38:03.1681412Z               "path": "crates/spt-daemon/src/consent.rs",
2026-06-23T09:38:03.1681494Z               "line": 123
2026-06-23T09:38:03.1681589Z             },
2026-06-23T09:38:03.1681674Z             {
2026-06-23T09:38:03.1681785Z               "path": "crates/spt-daemon/src/consent.rs",
2026-06-23T09:38:03.1681870Z               "line": 142
2026-06-23T09:38:03.1681951Z             },
2026-06-23T09:38:03.1682037Z             {
2026-06-23T09:38:03.1682157Z               "path": "crates/spt-store/src/info.rs",
2026-06-23T09:38:03.1682251Z               "line": 582
2026-06-23T09:38:03.1682331Z             },
2026-06-23T09:38:03.1682417Z             {
2026-06-23T09:38:03.1682540Z               "path": "crates/spt-store/src/perch.rs",
2026-06-23T09:38:03.1682629Z               "line": 566
2026-06-23T09:38:03.1682720Z             },
2026-06-23T09:38:03.1682801Z             {
2026-06-23T09:38:03.1682916Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1683001Z               "line": 9652
2026-06-23T09:38:03.1683088Z             }
2026-06-23T09:38:03.1683174Z           ]
2026-06-23T09:38:03.1683264Z         }
2026-06-23T09:38:03.1683349Z       }
2026-06-23T09:38:03.1683431Z     },
2026-06-23T09:38:03.1683531Z     {
2026-06-23T09:38:03.1683630Z       "id": "REQ-UPD-5",
2026-06-23T09:38:03.1683779Z       "title": "spt-core ripple-updates registered adapters",
2026-06-23T09:38:03.1683870Z       "requiredStages": [
2026-06-23T09:38:03.1683954Z         "impl",
2026-06-23T09:38:03.1684051Z         "unit"
2026-06-23T09:38:03.1684136Z       ],
2026-06-23T09:38:03.1684227Z       "stages": {
2026-06-23T09:38:03.1684313Z         "doc": {
2026-06-23T09:38:03.1684404Z           "complete": false,
2026-06-23T09:38:03.1684494Z           "evidence": []
2026-06-23T09:38:03.1684579Z         },
2026-06-23T09:38:03.1684667Z         "impl": {
2026-06-23T09:38:03.1684752Z           "complete": true,
2026-06-23T09:38:03.1684861Z           "evidence": [
2026-06-23T09:38:03.1684948Z             {
2026-06-23T09:38:03.1685077Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1685175Z               "line": 27
2026-06-23T09:38:03.1685256Z             },
2026-06-23T09:38:03.1685341Z             {
2026-06-23T09:38:03.1685473Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1685563Z               "line": 87
2026-06-23T09:38:03.1685654Z             },
2026-06-23T09:38:03.1685731Z             {
2026-06-23T09:38:03.1685960Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1686045Z               "line": 145
2026-06-23T09:38:03.1686131Z             },
2026-06-23T09:38:03.1686216Z             {
2026-06-23T09:38:03.1686351Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1686437Z               "line": 502
2026-06-23T09:38:03.1686516Z             },
2026-06-23T09:38:03.1686680Z             {
2026-06-23T09:38:03.1686807Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1686899Z               "line": 556
2026-06-23T09:38:03.1686985Z             }
2026-06-23T09:38:03.1687074Z           ]
2026-06-23T09:38:03.1687166Z         },
2026-06-23T09:38:03.1687252Z         "int": {
2026-06-23T09:38:03.1687356Z           "complete": false,
2026-06-23T09:38:03.1687451Z           "evidence": []
2026-06-23T09:38:03.1691238Z         },
2026-06-23T09:38:03.1691352Z         "unit": {
2026-06-23T09:38:03.1691458Z           "complete": true,
2026-06-23T09:38:03.1691567Z           "evidence": [
2026-06-23T09:38:03.1691657Z             {
2026-06-23T09:38:03.1691810Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1691896Z               "line": 278
2026-06-23T09:38:03.1691986Z             },
2026-06-23T09:38:03.1692074Z             {
2026-06-23T09:38:03.1692211Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1692316Z               "line": 292
2026-06-23T09:38:03.1692402Z             },
2026-06-23T09:38:03.1692478Z             {
2026-06-23T09:38:03.1692597Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1692694Z               "line": 306
2026-06-23T09:38:03.1692783Z             },
2026-06-23T09:38:03.1692868Z             {
2026-06-23T09:38:03.1693001Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1693086Z               "line": 320
2026-06-23T09:38:03.1693180Z             },
2026-06-23T09:38:03.1693265Z             {
2026-06-23T09:38:03.1693400Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1693490Z               "line": 354
2026-06-23T09:38:03.1693575Z             },
2026-06-23T09:38:03.1693657Z             {
2026-06-23T09:38:03.1693786Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1693875Z               "line": 1118
2026-06-23T09:38:03.1693953Z             }
2026-06-23T09:38:03.1694039Z           ]
2026-06-23T09:38:03.1694129Z         }
2026-06-23T09:38:03.1694214Z       }
2026-06-23T09:38:03.1694297Z     },
2026-06-23T09:38:03.1694382Z     {
2026-06-23T09:38:03.1694486Z       "id": "REQ-UPD-6",
2026-06-23T09:38:03.1695303Z       "title": "Platform-targeted update sets and debug rollout: signed multi-platform update metadata, recipient platform selection, channel-scoped monotonic counters, debug-channel opt-in via release-key overlay, local staging plus pull-based peer propagation, and maintainer-only convergence tooling (ADR-0016)",
2026-06-23T09:38:03.1695402Z       "requiredStages": [
2026-06-23T09:38:03.1695493Z         "doc",
2026-06-23T09:38:03.1695575Z         "impl",
2026-06-23T09:38:03.1695660Z         "unit",
2026-06-23T09:38:03.1695744Z         "int"
2026-06-23T09:38:03.1695830Z       ],
2026-06-23T09:38:03.1695920Z       "stages": {
2026-06-23T09:38:03.1696005Z         "doc": {
2026-06-23T09:38:03.1696104Z           "complete": true,
2026-06-23T09:38:03.1696200Z           "evidence": [
2026-06-23T09:38:03.1696295Z             {
2026-06-23T09:38:03.1696433Z               "path": "docs/DEBUG-CONVERGE-PLAN.md",
2026-06-23T09:38:03.1696520Z               "line": 3
2026-06-23T09:38:03.1696606Z             },
2026-06-23T09:38:03.1696696Z             {
2026-06-23T09:38:03.1696815Z               "path": "docs/DEBUG-ROLLOUT.md",
2026-06-23T09:38:03.1696897Z               "line": 3
2026-06-23T09:38:03.1696987Z             },
2026-06-23T09:38:03.1697072Z             {
2026-06-23T09:38:03.1697235Z               "path": "docs/adr/0016-platform-targeted-update-sets.md",
2026-06-23T09:38:03.1697479Z               "line": 3
2026-06-23T09:38:03.1697583Z             }
2026-06-23T09:38:03.1697673Z           ]
2026-06-23T09:38:03.1697759Z         },
2026-06-23T09:38:03.1697855Z         "impl": {
2026-06-23T09:38:03.1697949Z           "complete": true,
2026-06-23T09:38:03.1698045Z           "evidence": [
2026-06-23T09:38:03.1698137Z             {
2026-06-23T09:38:03.1698368Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1698468Z               "line": 76
2026-06-23T09:38:03.1698558Z             },
2026-06-23T09:38:03.1698647Z             {
2026-06-23T09:38:03.1698762Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1698853Z               "line": 212
2026-06-23T09:38:03.1699043Z             },
2026-06-23T09:38:03.1699172Z             {
2026-06-23T09:38:03.1699300Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1699392Z               "line": 69
2026-06-23T09:38:03.1699487Z             },
2026-06-23T09:38:03.1699572Z             {
2026-06-23T09:38:03.1699687Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1699783Z               "line": 133
2026-06-23T09:38:03.1699858Z             },
2026-06-23T09:38:03.1699944Z             {
2026-06-23T09:38:03.1700055Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1700149Z               "line": 243
2026-06-23T09:38:03.1700239Z             },
2026-06-23T09:38:03.1700326Z             {
2026-06-23T09:38:03.1700450Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1700541Z               "line": 406
2026-06-23T09:38:03.1700631Z             },
2026-06-23T09:38:03.1700718Z             {
2026-06-23T09:38:03.1700845Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1700937Z               "line": 534
2026-06-23T09:38:03.1701023Z             },
2026-06-23T09:38:03.1701108Z             {
2026-06-23T09:38:03.1701231Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1701321Z               "line": 548
2026-06-23T09:38:03.1701403Z             },
2026-06-23T09:38:03.1701488Z             {
2026-06-23T09:38:03.1701602Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1701689Z               "line": 603
2026-06-23T09:38:03.1701780Z             },
2026-06-23T09:38:03.1701860Z             {
2026-06-23T09:38:03.1701990Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1702075Z               "line": 634
2026-06-23T09:38:03.1702160Z             },
2026-06-23T09:38:03.1702247Z             {
2026-06-23T09:38:03.1702375Z               "path": "crates/spt-daemon/src/pump/update.rs",
2026-06-23T09:38:03.1702461Z               "line": 137
2026-06-23T09:38:03.1702537Z             },
2026-06-23T09:38:03.1702624Z             {
2026-06-23T09:38:03.1702737Z               "path": "crates/spt-daemon/src/pump/update.rs",
2026-06-23T09:38:03.1702828Z               "line": 184
2026-06-23T09:38:03.1702915Z             },
2026-06-23T09:38:03.1703000Z             {
2026-06-23T09:38:03.1703128Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1703215Z               "line": 78
2026-06-23T09:38:03.1703306Z             },
2026-06-23T09:38:03.1703390Z             {
2026-06-23T09:38:03.1703513Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1703609Z               "line": 114
2026-06-23T09:38:03.1703698Z             },
2026-06-23T09:38:03.1703783Z             {
2026-06-23T09:38:03.1703893Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1703984Z               "line": 185
2026-06-23T09:38:03.1704065Z             },
2026-06-23T09:38:03.1704150Z             {
2026-06-23T09:38:03.1704265Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1704355Z               "line": 260
2026-06-23T09:38:03.1704445Z             },
2026-06-23T09:38:03.1704533Z             {
2026-06-23T09:38:03.1704769Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1704862Z               "line": 292
2026-06-23T09:38:03.1704947Z             },
2026-06-23T09:38:03.1705032Z             {
2026-06-23T09:38:03.1705142Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1705233Z               "line": 323
2026-06-23T09:38:03.1705314Z             },
2026-06-23T09:38:03.1705501Z             {
2026-06-23T09:38:03.1705605Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1705695Z               "line": 346
2026-06-23T09:38:03.1705782Z             },
2026-06-23T09:38:03.1705863Z             {
2026-06-23T09:38:03.1705991Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1706078Z               "line": 388
2026-06-23T09:38:03.1706159Z             },
2026-06-23T09:38:03.1706243Z             {
2026-06-23T09:38:03.1706366Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1706462Z               "line": 398
2026-06-23T09:38:03.1706546Z             },
2026-06-23T09:38:03.1706631Z             {
2026-06-23T09:38:03.1706736Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1706832Z               "line": 410
2026-06-23T09:38:03.1706917Z             },
2026-06-23T09:38:03.1706998Z             {
2026-06-23T09:38:03.1707312Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1707462Z               "line": 420
2026-06-23T09:38:03.1707557Z             },
2026-06-23T09:38:03.1707641Z             {
2026-06-23T09:38:03.1707781Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1707881Z               "line": 439
2026-06-23T09:38:03.1707971Z             },
2026-06-23T09:38:03.1708058Z             {
2026-06-23T09:38:03.1708185Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1708281Z               "line": 449
2026-06-23T09:38:03.1708359Z             },
2026-06-23T09:38:03.1708439Z             {
2026-06-23T09:38:03.1708581Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1708673Z               "line": 94
2026-06-23T09:38:03.1708768Z             },
2026-06-23T09:38:03.1708852Z             {
2026-06-23T09:38:03.1709085Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1709170Z               "line": 120
2026-06-23T09:38:03.1709255Z             },
2026-06-23T09:38:03.1709355Z             {
2026-06-23T09:38:03.1709489Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1709584Z               "line": 135
2026-06-23T09:38:03.1709671Z             },
2026-06-23T09:38:03.1709756Z             {
2026-06-23T09:38:03.1709865Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1709957Z               "line": 162
2026-06-23T09:38:03.1710043Z             },
2026-06-23T09:38:03.1710133Z             {
2026-06-23T09:38:03.1710252Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1710343Z               "line": 174
2026-06-23T09:38:03.1710423Z             },
2026-06-23T09:38:03.1710509Z             {
2026-06-23T09:38:03.1710625Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1710719Z               "line": 195
2026-06-23T09:38:03.1710805Z             },
2026-06-23T09:38:03.1710891Z             {
2026-06-23T09:38:03.1711006Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1711106Z               "line": 461
2026-06-23T09:38:03.1711191Z             },
2026-06-23T09:38:03.1711278Z             {
2026-06-23T09:38:03.1711400Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1711492Z               "line": 583
2026-06-23T09:38:03.1711578Z             },
2026-06-23T09:38:03.1711664Z             {
2026-06-23T09:38:03.1711791Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1711881Z               "line": 171
2026-06-23T09:38:03.1711968Z             },
2026-06-23T09:38:03.1712206Z             {
2026-06-23T09:38:03.1712335Z               "path": "crates/spt-net/src/net/update.rs",
2026-06-23T09:38:03.1712425Z               "line": 65
2026-06-23T09:38:03.1712511Z             },
2026-06-23T09:38:03.1712592Z             {
2026-06-23T09:38:03.1712720Z               "path": "crates/spt-net/src/net/update.rs",
2026-06-23T09:38:03.1712811Z               "line": 71
2026-06-23T09:38:03.1713002Z             },
2026-06-23T09:38:03.1713093Z             {
2026-06-23T09:38:03.1713218Z               "path": "crates/spt-net/src/net/update.rs",
2026-06-23T09:38:03.1713307Z               "line": 77
2026-06-23T09:38:03.1713398Z             },
2026-06-23T09:38:03.1713489Z             {
2026-06-23T09:38:03.1713602Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1713693Z               "line": 870
2026-06-23T09:38:03.1713780Z             },
2026-06-23T09:38:03.1713871Z             {
2026-06-23T09:38:03.1713983Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1714088Z               "line": 887
2026-06-23T09:38:03.1714174Z             },
2026-06-23T09:38:03.1714258Z             {
2026-06-23T09:38:03.1714366Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1714453Z               "line": 930
2026-06-23T09:38:03.1714554Z             },
2026-06-23T09:38:03.1714648Z             {
2026-06-23T09:38:03.1714758Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1714854Z               "line": 1073
2026-06-23T09:38:03.1714948Z             },
2026-06-23T09:38:03.1715039Z             {
2026-06-23T09:38:03.1715150Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1715244Z               "line": 1223
2026-06-23T09:38:03.1715334Z             }
2026-06-23T09:38:03.1715422Z           ]
2026-06-23T09:38:03.1715521Z         },
2026-06-23T09:38:03.1715611Z         "int": {
2026-06-23T09:38:03.1715703Z           "complete": true,
2026-06-23T09:38:03.1715798Z           "evidence": [
2026-06-23T09:38:03.1715893Z             {
2026-06-23T09:38:03.1716037Z               "path": "crates/spt-daemon/tests/propagate.rs",
2026-06-23T09:38:03.1716136Z               "line": 569
2026-06-23T09:38:03.1716232Z             },
2026-06-23T09:38:03.1716323Z             {
2026-06-23T09:38:03.1716456Z               "path": "docs/DEBUG-CONVERGE-PLAN.md",
2026-06-23T09:38:03.1716546Z               "line": 135
2026-06-23T09:38:03.1716643Z             }
2026-06-23T09:38:03.1716733Z           ]
2026-06-23T09:38:03.1716827Z         },
2026-06-23T09:38:03.1716926Z         "unit": {
2026-06-23T09:38:03.1717022Z           "complete": true,
2026-06-23T09:38:03.1717120Z           "evidence": [
2026-06-23T09:38:03.1717210Z             {
2026-06-23T09:38:03.1717354Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1717445Z               "line": 628
2026-06-23T09:38:03.1717544Z             },
2026-06-23T09:38:03.1717640Z             {
2026-06-23T09:38:03.1717769Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1717873Z               "line": 677
2026-06-23T09:38:03.1717960Z             },
2026-06-23T09:38:03.1718055Z             {
2026-06-23T09:38:03.1718178Z               "path": "crates/spt-daemon/src/propagate.rs",
2026-06-23T09:38:03.1718279Z               "line": 696
2026-06-23T09:38:03.1718379Z             },
2026-06-23T09:38:03.1718474Z             {
2026-06-23T09:38:03.1718604Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1718698Z               "line": 513
2026-06-23T09:38:03.1718789Z             },
2026-06-23T09:38:03.1718875Z             {
2026-06-23T09:38:03.1719098Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1719200Z               "line": 638
2026-06-23T09:38:03.1719290Z             },
2026-06-23T09:38:03.1719380Z             {
2026-06-23T09:38:03.1719503Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1719598Z               "line": 675
2026-06-23T09:38:03.1719692Z             },
2026-06-23T09:38:03.1719887Z             {
2026-06-23T09:38:03.1720021Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1720115Z               "line": 957
2026-06-23T09:38:03.1720207Z             },
2026-06-23T09:38:03.1720293Z             {
2026-06-23T09:38:03.1720425Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1720522Z               "line": 979
2026-06-23T09:38:03.1720707Z             },
2026-06-23T09:38:03.1720802Z             {
2026-06-23T09:38:03.1720927Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1721022Z               "line": 996
2026-06-23T09:38:03.1721108Z             },
2026-06-23T09:38:03.1721204Z             {
2026-06-23T09:38:03.1721332Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1721422Z               "line": 1011
2026-06-23T09:38:03.1721518Z             },
2026-06-23T09:38:03.1721604Z             {
2026-06-23T09:38:03.1721727Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1721824Z               "line": 1037
2026-06-23T09:38:03.1721918Z             },
2026-06-23T09:38:03.1722013Z             {
2026-06-23T09:38:03.1722134Z               "path": "crates/spt-daemon/src/update.rs",
2026-06-23T09:38:03.1722233Z               "line": 457
2026-06-23T09:38:03.1722322Z             },
2026-06-23T09:38:03.1722422Z             {
2026-06-23T09:38:03.1722553Z               "path": "crates/spt-daemon/tests/propagate.rs",
2026-06-23T09:38:03.1722656Z               "line": 338
2026-06-23T09:38:03.1722757Z             },
2026-06-23T09:38:03.1722838Z             {
2026-06-23T09:38:03.1722956Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1723042Z               "line": 12087
2026-06-23T09:38:03.1723134Z             },
2026-06-23T09:38:03.1723225Z             {
2026-06-23T09:38:03.1723333Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1723429Z               "line": 1352
2026-06-23T09:38:03.1723510Z             },
2026-06-23T09:38:03.1723604Z             {
2026-06-23T09:38:03.1723716Z               "path": "docs/DEBUG-CONVERGE-PLAN.md",
2026-06-23T09:38:03.1723811Z               "line": 130
2026-06-23T09:38:03.1723896Z             }
2026-06-23T09:38:03.1723991Z           ]
2026-06-23T09:38:03.1724083Z         }
2026-06-23T09:38:03.1724172Z       }
2026-06-23T09:38:03.1724258Z     },
2026-06-23T09:38:03.1724340Z     {
2026-06-23T09:38:03.1724450Z       "id": "REQ-UPD-7",
2026-06-23T09:38:03.1726659Z       "title": "Origin-source update bootstrap (`spt update fetch`): pull the latest signed release directly from the GitHub release origin (`SaberMage/spt-releases`) — the per-platform artifact + its `<asset>.release.json` SignedRelease metadata — and stage it through the EXISTING verify→stage pipeline (the same `plan_verified` gate: two-key signature + channel + monotonic rollback floor + SHA-256), after which the normal consent-notif / `spt update apply` flow is unchanged. Closes the peer-only-discovery gap (REQ-UPD-1): a first-in-fleet / isolated node can update with no peer to pull from. The signed-release anchor keeps the GitHub transport untrusted-but-verified.",
2026-06-23T09:38:03.1726763Z       "requiredStages": [
2026-06-23T09:38:03.1726858Z         "impl",
2026-06-23T09:38:03.1726946Z         "unit"
2026-06-23T09:38:03.1727030Z       ],
2026-06-23T09:38:03.1727116Z       "stages": {
2026-06-23T09:38:03.1727208Z         "doc": {
2026-06-23T09:38:03.1727321Z           "complete": false,
2026-06-23T09:38:03.1727415Z           "evidence": []
2026-06-23T09:38:03.1727505Z         },
2026-06-23T09:38:03.1727592Z         "impl": {
2026-06-23T09:38:03.1727685Z           "complete": true,
2026-06-23T09:38:03.1727785Z           "evidence": [
2026-06-23T09:38:03.1727870Z             {
2026-06-23T09:38:03.1727995Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1728080Z               "line": 3276
2026-06-23T09:38:03.1728171Z             }
2026-06-23T09:38:03.1728262Z           ]
2026-06-23T09:38:03.1728348Z         },
2026-06-23T09:38:03.1728520Z         "int": {
2026-06-23T09:38:03.1728610Z           "complete": false,
2026-06-23T09:38:03.1728705Z           "evidence": []
2026-06-23T09:38:03.1728791Z         },
2026-06-23T09:38:03.1728878Z         "unit": {
2026-06-23T09:38:03.1729044Z           "complete": true,
2026-06-23T09:38:03.1729139Z           "evidence": [
2026-06-23T09:38:03.1729221Z             {
2026-06-23T09:38:03.1729488Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1729583Z               "line": 12063
2026-06-23T09:38:03.1729668Z             }
2026-06-23T09:38:03.1729755Z           ]
2026-06-23T09:38:03.1729841Z         }
2026-06-23T09:38:03.1729926Z       }
2026-06-23T09:38:03.1730010Z     },
2026-06-23T09:38:03.1730091Z     {
2026-06-23T09:38:03.1730187Z       "id": "REQ-UPD-8",
2026-06-23T09:38:03.1732708Z       "title": "Platform-safe `spt update fetch` + apply platform-guard (v0.3.1 cross-OS brick fix): `spt update fetch` stages the signed multi-platform `SignedUpdateSet` (`update-set.json` + every platform artifact it names), never a platform-blind single `SignedRelease`, so local apply selects `current_platform()` and P2P re-serve lets each peer select ITS own platform. Defense-in-depth: `apply_staged` REFUSES a staged single-release artifact unless it is platform-stamped for THIS node (an unstamped pre-v0.3.2 single, or a single stamped for another OS, fail-safe refuses — the guard that alone prevents the v0.3.1 brick where a Linux ELF was applied as `spt.exe`). UX: a friendly post-apply message (`Updated spt-core to vX.Y.Z.` + changelog URL) driven by an additive `product_version` metadata field, with a release-counter fallback when absent.",
2026-06-23T09:38:03.1732812Z       "requiredStages": [
2026-06-23T09:38:03.1732897Z         "impl",
2026-06-23T09:38:03.1732973Z         "unit"
2026-06-23T09:38:03.1733065Z       ],
2026-06-23T09:38:03.1733150Z       "stages": {
2026-06-23T09:38:03.1733235Z         "doc": {
2026-06-23T09:38:03.1733336Z           "complete": false,
2026-06-23T09:38:03.1733426Z           "evidence": []
2026-06-23T09:38:03.1733507Z         },
2026-06-23T09:38:03.1733598Z         "impl": {
2026-06-23T09:38:03.1733689Z           "complete": true,
2026-06-23T09:38:03.1733785Z           "evidence": [
2026-06-23T09:38:03.1733869Z             {
2026-06-23T09:38:03.1733999Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1734084Z               "line": 77
2026-06-23T09:38:03.1734188Z             },
2026-06-23T09:38:03.1734276Z             {
2026-06-23T09:38:03.1734403Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1734489Z               "line": 49
2026-06-23T09:38:03.1734576Z             },
2026-06-23T09:38:03.1734662Z             {
2026-06-23T09:38:03.1734775Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1734867Z               "line": 152
2026-06-23T09:38:03.1734953Z             },
2026-06-23T09:38:03.1735042Z             {
2026-06-23T09:38:03.1735156Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1735242Z               "line": 215
2026-06-23T09:38:03.1735323Z             },
2026-06-23T09:38:03.1735402Z             {
2026-06-23T09:38:03.1735525Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1735612Z               "line": 230
2026-06-23T09:38:03.1735702Z             },
2026-06-23T09:38:03.1735792Z             {
2026-06-23T09:38:03.1735922Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1736017Z               "line": 247
2026-06-23T09:38:03.1736102Z             },
2026-06-23T09:38:03.1736198Z             {
2026-06-23T09:38:03.1736312Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1736407Z               "line": 269
2026-06-23T09:38:03.1736499Z             },
2026-06-23T09:38:03.1736576Z             {
2026-06-23T09:38:03.1736699Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1736780Z               "line": 66
2026-06-23T09:38:03.1736985Z             },
2026-06-23T09:38:03.1737070Z             {
2026-06-23T09:38:03.1737200Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1737294Z               "line": 154
2026-06-23T09:38:03.1737380Z             },
2026-06-23T09:38:03.1737467Z             {
2026-06-23T09:38:03.1737576Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1737676Z               "line": 2784
2026-06-23T09:38:03.1737830Z             },
2026-06-23T09:38:03.1737919Z             {
2026-06-23T09:38:03.1738023Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1738109Z               "line": 2847
2026-06-23T09:38:03.1738195Z             },
2026-06-23T09:38:03.1738278Z             {
2026-06-23T09:38:03.1738387Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1738474Z               "line": 2857
2026-06-23T09:38:03.1738561Z             },
2026-06-23T09:38:03.1738650Z             {
2026-06-23T09:38:03.1738750Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1738841Z               "line": 2864
2026-06-23T09:38:03.1738926Z             },
2026-06-23T09:38:03.1739104Z             {
2026-06-23T09:38:03.1739209Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1739298Z               "line": 3277
2026-06-23T09:38:03.1739385Z             },
2026-06-23T09:38:03.1739452Z             {
2026-06-23T09:38:03.1739570Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1739661Z               "line": 572
2026-06-23T09:38:03.1739748Z             },
2026-06-23T09:38:03.1739837Z             {
2026-06-23T09:38:03.1739933Z               "path": "crates/xtask/src/main.rs",
2026-06-23T09:38:03.1740029Z               "line": 586
2026-06-23T09:38:03.1740110Z             }
2026-06-23T09:38:03.1740204Z           ]
2026-06-23T09:38:03.1740281Z         },
2026-06-23T09:38:03.1740368Z         "int": {
2026-06-23T09:38:03.1740458Z           "complete": false,
2026-06-23T09:38:03.1740547Z           "evidence": []
2026-06-23T09:38:03.1740632Z         },
2026-06-23T09:38:03.1740714Z         "unit": {
2026-06-23T09:38:03.1740817Z           "complete": true,
2026-06-23T09:38:03.1740897Z           "evidence": [
2026-06-23T09:38:03.1740983Z             {
2026-06-23T09:38:03.1741108Z               "path": "crates/spt-daemon/src/applyhost.rs",
2026-06-23T09:38:03.1741198Z               "line": 476
2026-06-23T09:38:03.1741284Z             },
2026-06-23T09:38:03.1741365Z             {
2026-06-23T09:38:03.1741493Z               "path": "crates/spt-daemon/src/relcache.rs",
2026-06-23T09:38:03.1741579Z               "line": 580
2026-06-23T09:38:03.1741666Z             },
2026-06-23T09:38:03.1741751Z             {
2026-06-23T09:38:03.1741856Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1741942Z               "line": 12065
2026-06-23T09:38:03.1742023Z             },
2026-06-23T09:38:03.1742108Z             {
2026-06-23T09:38:03.1742203Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1742291Z               "line": 12087
2026-06-23T09:38:03.1742385Z             }
2026-06-23T09:38:03.1742466Z           ]
2026-06-23T09:38:03.1742567Z         }
2026-06-23T09:38:03.1742653Z       }
2026-06-23T09:38:03.1742742Z     },
2026-06-23T09:38:03.1742824Z     {
2026-06-23T09:38:03.1742920Z       "id": "REQ-UPD-9",
2026-06-23T09:38:03.1745580Z       "title": "`gh_release` adapter [update] avenue (optional signing): an adapter declares `[update] avenue = \"gh_release\", repo = \"user/repo\"` (+ optional `asset`, default `adapter.spt`; + optional Ed25519 `signing_key`); spt-core's ripple compares the repo's LATEST GitHub release version against the installed adapter version and, when newer, auto-updates by fetching the release `.spt` archive (the REQ-INSTALL-9 `--release` fetch primitive) → verifies the `.spt` against `signing_key` if declared, else HTTPS+GitHub first-acquisition trust → re-extracts + re-registers the adapter root. Lets a harness adapter ship updates from its own GitHub releases with NO signing tooling or plugin coupling (removes the perri file_pull/delegated avenue blockers). Acquisition-trust mirrors `--release` + the installer first-fetch; does not alter spt-core self-update (REQ-UPD-1..8).",
2026-06-23T09:38:03.1745697Z       "requiredStages": [
2026-06-23T09:38:03.1745773Z         "doc",
2026-06-23T09:38:03.1745869Z         "impl",
2026-06-23T09:38:03.1745953Z         "unit"
2026-06-23T09:38:03.1746038Z       ],
2026-06-23T09:38:03.1746230Z       "stages": {
2026-06-23T09:38:03.1746319Z         "doc": {
2026-06-23T09:38:03.1746419Z           "complete": true,
2026-06-23T09:38:03.1746511Z           "evidence": [
2026-06-23T09:38:03.1746601Z             {
2026-06-23T09:38:03.1746700Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1746797Z               "line": 93
2026-06-23T09:38:03.1746882Z             },
2026-06-23T09:38:03.1746972Z             {
2026-06-23T09:38:03.1747083Z               "path": "docs/MANIFEST.md",
2026-06-23T09:38:03.1747164Z               "line": 301
2026-06-23T09:38:03.1747245Z             }
2026-06-23T09:38:03.1747330Z           ]
2026-06-23T09:38:03.1747421Z         },
2026-06-23T09:38:03.1747507Z         "impl": {
2026-06-23T09:38:03.1747593Z           "complete": true,
2026-06-23T09:38:03.1747678Z           "evidence": [
2026-06-23T09:38:03.1747765Z             {
2026-06-23T09:38:03.1747903Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1747993Z               "line": 128
2026-06-23T09:38:03.1748085Z             },
2026-06-23T09:38:03.1748169Z             {
2026-06-23T09:38:03.1748294Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1748385Z               "line": 543
2026-06-23T09:38:03.1748470Z             },
2026-06-23T09:38:03.1748559Z             {
2026-06-23T09:38:03.1748679Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1748773Z               "line": 459
2026-06-23T09:38:03.1748857Z             },
2026-06-23T09:38:03.1749054Z             {
2026-06-23T09:38:03.1749181Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1749262Z               "line": 552
2026-06-23T09:38:03.1749359Z             },
2026-06-23T09:38:03.1749445Z             {
2026-06-23T09:38:03.1749572Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1749664Z               "line": 975
2026-06-23T09:38:03.1749759Z             },
2026-06-23T09:38:03.1749858Z             {
2026-06-23T09:38:03.1749974Z               "path": "crates/spt-runtime/src/registry.rs",
2026-06-23T09:38:03.1750068Z               "line": 302
2026-06-23T09:38:03.1750154Z             },
2026-06-23T09:38:03.1750235Z             {
2026-06-23T09:38:03.1750337Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1750426Z               "line": 6361
2026-06-23T09:38:03.1750507Z             },
2026-06-23T09:38:03.1750594Z             {
2026-06-23T09:38:03.1750698Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1750779Z               "line": 6496
2026-06-23T09:38:03.1750875Z             },
2026-06-23T09:38:03.1750957Z             {
2026-06-23T09:38:03.1751064Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1751150Z               "line": 6670
2026-06-23T09:38:03.1751235Z             },
2026-06-23T09:38:03.1751326Z             {
2026-06-23T09:38:03.1751429Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1751509Z               "line": 6708
2026-06-23T09:38:03.1751601Z             },
2026-06-23T09:38:03.1751692Z             {
2026-06-23T09:38:03.1751800Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1751887Z               "line": 6731
2026-06-23T09:38:03.1751964Z             },
2026-06-23T09:38:03.1752049Z             {
2026-06-23T09:38:03.1752158Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1752245Z               "line": 6757
2026-06-23T09:38:03.1752335Z             }
2026-06-23T09:38:03.1752425Z           ]
2026-06-23T09:38:03.1752507Z         },
2026-06-23T09:38:03.1752593Z         "int": {
2026-06-23T09:38:03.1752792Z           "complete": false,
2026-06-23T09:38:03.1752894Z           "evidence": []
2026-06-23T09:38:03.1752984Z         },
2026-06-23T09:38:03.1753074Z         "unit": {
2026-06-23T09:38:03.1753171Z           "complete": true,
2026-06-23T09:38:03.1753260Z           "evidence": [
2026-06-23T09:38:03.1753341Z             {
2026-06-23T09:38:03.1753466Z               "path": "crates/spt-daemon/src/adapter_update.rs",
2026-06-23T09:38:03.1753656Z               "line": 265
2026-06-23T09:38:03.1753737Z             },
2026-06-23T09:38:03.1753829Z             {
2026-06-23T09:38:03.1753960Z               "path": "crates/spt-daemon/src/release.rs",
2026-06-23T09:38:03.1754045Z               "line": 667
2026-06-23T09:38:03.1754127Z             },
2026-06-23T09:38:03.1754214Z             {
2026-06-23T09:38:03.1754332Z               "path": "crates/spt-runtime/src/manifest.rs",
2026-06-23T09:38:03.1754427Z               "line": 1154
2026-06-23T09:38:03.1754514Z             },
2026-06-23T09:38:03.1754604Z             {
2026-06-23T09:38:03.1754703Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1754804Z               "line": 8942
2026-06-23T09:38:03.1754890Z             }
2026-06-23T09:38:03.1754975Z           ]
2026-06-23T09:38:03.1755071Z         }
2026-06-23T09:38:03.1755157Z       }
2026-06-23T09:38:03.1755248Z     },
2026-06-23T09:38:03.1755328Z     {
2026-06-23T09:38:03.1755448Z       "id": "REQ-VIEWER-SKIP-TO-LIVE-ON-EVICT",
2026-06-23T09:38:03.1760990Z       "title": "A `rc --view` VIEWER that overflows its broker subscription queue and is EVICTED (OutputLog::append try_send Full → viewers.remove, REQ-HAZARD-VIEWER-ISOLATION session-protection) must SKIP TO LIVE, not die silently. ROOT (v0.13.0, b4 JIT item 2 = p0_paste + post-b4 a_journaled-Linux, ONE root): serve_attach forwards each frame (read_event→b64decode→re-encode AttachRecord→net_stream_send) SLOWER than the drain fans out under flood → its VIEWER_CHANNEL_DEPTH(256) channel overflows → the drain evicts (viewers.remove drops the ViewerSink → drops tx → viewer_writer's rx.recv() Err → the writer returns WRITING NOTHING) → serve_attach's brain.read_event() just STOPS getting Output (no EOF, no error) → serve_attach blocks forever → the operator receives nothing (attach_received_output=FALSE). Eviction-of-a-hopelessly-behind-viewer is CORRECT session-protection (keep it); SILENT+PERMANENT eviction is the bug. VIEWER-only → B2-SAFE (a viewer never advances delivered_through / is not authoritative / exposes no resume cursor). FIX (doyle-gated, skip-to-live = tail -f reconnect): (1) explicit broker→viewer EVICTION SIGNAL (KIND_VIEWER_EVICTED, written in the viewer_writer thread OFF the log lock, DISTINCT from session-exit EOF so serve must NOT tear down on it); (2) serve_attach re-subscribes from the CURRENT ring floor (skip-to-live, replays nothing, sees the next live burst) — resetting the cold serve-brain's next_seq so the post-eviction forward-jump replay is accepted (the legacy reject-gap path, brain.rs:618-626, would otherwise FATAL the forward jump); (3) HARD constraint NO evict→resubscribe busy-loop: serve_attach rate-limits re-subscribes (RESUBSCRIBE_INTERVAL) so under max-flood the operator sees intermittent LIVE bursts, never a CPU spin. (v0.13.0)",
2026-06-23T09:38:03.1761115Z       "requiredStages": [
2026-06-23T09:38:03.1761221Z         "doc",
2026-06-23T09:38:03.1761319Z         "impl",
2026-06-23T09:38:03.1761545Z         "unit",
2026-06-23T09:38:03.1761624Z         "int"
2026-06-23T09:38:03.1761719Z       ],
2026-06-23T09:38:03.1761820Z       "stages": {
2026-06-23T09:38:03.1761914Z         "doc": {
2026-06-23T09:38:03.1762022Z           "complete": true,
2026-06-23T09:38:03.1762113Z           "evidence": [
2026-06-23T09:38:03.1762204Z             {
2026-06-23T09:38:03.1762304Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1762399Z               "line": 355
2026-06-23T09:38:03.1762491Z             }
2026-06-23T09:38:03.1762572Z           ]
2026-06-23T09:38:03.1762661Z         },
2026-06-23T09:38:03.1762752Z         "impl": {
2026-06-23T09:38:03.1762852Z           "complete": true,
2026-06-23T09:38:03.1762942Z           "evidence": [
2026-06-23T09:38:03.1763028Z             {
2026-06-23T09:38:03.1763148Z               "path": "crates/spt-daemon/src/attach.rs",
2026-06-23T09:38:03.1763234Z               "line": 432
2026-06-23T09:38:03.1763324Z             },
2026-06-23T09:38:03.1763411Z             {
2026-06-23T09:38:03.1763544Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.1763639Z               "line": 683
2026-06-23T09:38:03.1763721Z             },
2026-06-23T09:38:03.1763815Z             {
2026-06-23T09:38:03.1763929Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.1764017Z               "line": 859
2026-06-23T09:38:03.1764103Z             },
2026-06-23T09:38:03.1764177Z             {
2026-06-23T09:38:03.1764292Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.1764384Z               "line": 701
2026-06-23T09:38:03.1764478Z             },
2026-06-23T09:38:03.1764563Z             {
2026-06-23T09:38:03.1764682Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:03.1764769Z               "line": 824
2026-06-23T09:38:03.1764854Z             }
2026-06-23T09:38:03.1764939Z           ]
2026-06-23T09:38:03.1765026Z         },
2026-06-23T09:38:03.1765112Z         "int": {
2026-06-23T09:38:03.1765202Z           "complete": true,
2026-06-23T09:38:03.1765293Z           "evidence": [
2026-06-23T09:38:03.1765374Z             {
2026-06-23T09:38:03.1765531Z               "path": "crates/spt-daemon/tests/inject_control_wedge.rs",
2026-06-23T09:38:03.1765626Z               "line": 2167
2026-06-23T09:38:03.1765703Z             }
2026-06-23T09:38:03.1765793Z           ]
2026-06-23T09:38:03.1765879Z         },
2026-06-23T09:38:03.1765971Z         "unit": {
2026-06-23T09:38:03.1766060Z           "complete": true,
2026-06-23T09:38:03.1766160Z           "evidence": [
2026-06-23T09:38:03.1766247Z             {
2026-06-23T09:38:03.1766366Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.1766460Z               "line": 1476
2026-06-23T09:38:03.1766547Z             },
2026-06-23T09:38:03.1766634Z             {
2026-06-23T09:38:03.1766746Z               "path": "crates/spt-daemon/src/brain.rs",
2026-06-23T09:38:03.1766841Z               "line": 1633
2026-06-23T09:38:03.1766927Z             },
2026-06-23T09:38:03.1767012Z             {
2026-06-23T09:38:03.1767129Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.1767225Z               "line": 2530
2026-06-23T09:38:03.1767307Z             },
2026-06-23T09:38:03.1767397Z             {
2026-06-23T09:38:03.1767511Z               "path": "crates/spt-daemon/src/broker.rs",
2026-06-23T09:38:03.1767612Z               "line": 2597
2026-06-23T09:38:03.1767702Z             },
2026-06-23T09:38:03.1767792Z             {
2026-06-23T09:38:03.1767903Z               "path": "crates/spt-daemon/src/msg.rs",
2026-06-23T09:38:03.1768074Z               "line": 1038
2026-06-23T09:38:03.1768165Z             }
2026-06-23T09:38:03.1768246Z           ]
2026-06-23T09:38:03.1768336Z         }
2026-06-23T09:38:03.1768422Z       }
2026-06-23T09:38:03.1768503Z     },
2026-06-23T09:38:03.1768585Z     {
2026-06-23T09:38:03.1768675Z       "id": "REQ-WHOAMI-1",
2026-06-23T09:38:03.1770402Z       "title": "`spt whoami` is a thin ALIAS for `spt endpoint list` (full output: the SELF pin + the subnet roster) — the standalone bare-id command is dropped (the `id=$(spt whoami)` capture was never a real pattern: env vars don't persist between agent tool calls). The one new render: the `endpoint list` SELF pin carries the Self endpoint's authored `endpoint description` (info::read_info(...).resources) when present, inline after the liveness state. whoami stays a top-level hot-path verb (parse unchanged, REQ-MSG-9).",
2026-06-23T09:38:03.1770607Z       "requiredStages": [
2026-06-23T09:38:03.1770692Z         "doc",
2026-06-23T09:38:03.1774286Z         "impl",
2026-06-23T09:38:03.1774437Z         "unit"
2026-06-23T09:38:03.1774528Z       ],
2026-06-23T09:38:03.1774625Z       "stages": {
2026-06-23T09:38:03.1774723Z         "doc": {
2026-06-23T09:38:03.1774828Z           "complete": true,
2026-06-23T09:38:03.1774930Z           "evidence": [
2026-06-23T09:38:03.1775015Z             {
2026-06-23T09:38:03.1775123Z               "path": "CONTEXT.md",
2026-06-23T09:38:03.1775219Z               "line": 728
2026-06-23T09:38:03.1775310Z             }
2026-06-23T09:38:03.1775399Z           ]
2026-06-23T09:38:03.1775485Z         },
2026-06-23T09:38:03.1775571Z         "impl": {
2026-06-23T09:38:03.1775662Z           "complete": true,
2026-06-23T09:38:03.1775752Z           "evidence": [
2026-06-23T09:38:03.1775833Z             {
2026-06-23T09:38:03.1775948Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1776043Z               "line": 3845
2026-06-23T09:38:03.1776129Z             },
2026-06-23T09:38:03.1776221Z             {
2026-06-23T09:38:03.1776334Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1776429Z               "line": 3873
2026-06-23T09:38:03.1776521Z             }
2026-06-23T09:38:03.1776606Z           ]
2026-06-23T09:38:03.1776682Z         },
2026-06-23T09:38:03.1776773Z         "int": {
2026-06-23T09:38:03.1776874Z           "complete": false,
2026-06-23T09:38:03.1776963Z           "evidence": []
2026-06-23T09:38:03.1777049Z         },
2026-06-23T09:38:03.1777146Z         "unit": {
2026-06-23T09:38:03.1777236Z           "complete": true,
2026-06-23T09:38:03.1777330Z           "evidence": [
2026-06-23T09:38:03.1777415Z             {
2026-06-23T09:38:03.1777525Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1777614Z               "line": 9224
2026-06-23T09:38:03.1777704Z             },
2026-06-23T09:38:03.1777790Z             {
2026-06-23T09:38:03.1777891Z               "path": "crates/spt/src/cli.rs",
2026-06-23T09:38:03.1777976Z               "line": 9277
2026-06-23T09:38:03.1778061Z             }
2026-06-23T09:38:03.1778148Z           ]
2026-06-23T09:38:03.1778239Z         }
2026-06-23T09:38:03.1778333Z       }
2026-06-23T09:38:03.1778410Z     }
2026-06-23T09:38:03.1778496Z   ],
2026-06-23T09:38:03.1778596Z   "findings": []
2026-06-23T09:38:03.1778681Z }
2026-06-23T09:38:03.1803494Z ##[group]Run ./traceable-reqs lint || true
2026-06-23T09:38:03.1803637Z [36;1m./traceable-reqs lint || true[0m
2026-06-23T09:38:03.1816502Z shell: /usr/bin/bash -e {0}
2026-06-23T09:38:03.1816611Z ##[endgroup]
2026-06-23T09:38:03.2081259Z Requirement quality findings (273); 293 requirements queued for agent review:
2026-06-23T09:38:03.2082387Z   [must] requirement_quality REQ-ADAPTER-GH-TRANSPORT criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2083041Z   [must] requirement_quality REQ-ADAPTER-GH-TRANSPORT criterion=length — title is 62 words; want 3..=25
2026-06-23T09:38:03.2083877Z   [must] requirement_quality REQ-ADAPTER-LIVE-UPDATE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2084468Z   [must] requirement_quality REQ-ADAPTER-LIVE-UPDATE criterion=length — title is 168 words; want 3..=25
2026-06-23T09:38:03.2085216Z   [must] requirement_quality REQ-ADAPTER-MULTIPLATFORM-SPT criterion=length — title is 123 words; want 3..=25
2026-06-23T09:38:03.2085879Z   [must] requirement_quality REQ-ADAPTER-PROOF-DIR-OVERRIDE criterion=length — title is 76 words; want 3..=25
2026-06-23T09:38:03.2087177Z   [must] requirement_quality REQ-ADAPTER-TRANSLATE-PROOF criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2087831Z   [must] requirement_quality REQ-ADAPTER-TRANSLATE-PROOF criterion=length — title is 182 words; want 3..=25
2026-06-23T09:38:03.2088446Z   [must] requirement_quality REQ-ADAPTER-UPDATE-MESSAGE criterion=length — title is 64 words; want 3..=25
2026-06-23T09:38:03.2089367Z   [must] requirement_quality REQ-ADAPTER-VERSION-CMD criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2089983Z   [must] requirement_quality REQ-ADAPTER-VERSION-CMD criterion=length — title is 59 words; want 3..=25
2026-06-23T09:38:03.2090717Z   [must] requirement_quality REQ-API-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2091443Z   [must] requirement_quality REQ-API-4 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2091782Z   [must] requirement_quality REQ-API-4 criterion=length — title is 67 words; want 3..=25
2026-06-23T09:38:03.2092090Z   [must] requirement_quality REQ-CLI-1 criterion=length — title is 47 words; want 3..=25
2026-06-23T09:38:03.2092405Z   [must] requirement_quality REQ-CLI-2 criterion=length — title is 37 words; want 3..=25
2026-06-23T09:38:03.2092701Z   [must] requirement_quality REQ-CLI-3 criterion=length — title is 37 words; want 3..=25
2026-06-23T09:38:03.2092996Z   [must] requirement_quality REQ-CLI-4 criterion=length — title is 89 words; want 3..=25
2026-06-23T09:38:03.2093492Z   [must] requirement_quality REQ-CLI-HELP-MARKDOWN criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2093892Z   [must] requirement_quality REQ-CLI-HELP-MARKDOWN criterion=length — title is 156 words; want 3..=25
2026-06-23T09:38:03.2094320Z   [must] requirement_quality REQ-CLI-OUTPUT-MARKDOWN criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2094637Z   [must] requirement_quality REQ-CLI-OUTPUT-MARKDOWN criterion=length — title is 199 words; want 3..=25
2026-06-23T09:38:03.2094909Z   [must] requirement_quality REQ-CONSENT-1 criterion=length — title is 41 words; want 3..=25
2026-06-23T09:38:03.2095176Z   [must] requirement_quality REQ-CONSENT-2 criterion=length — title is 37 words; want 3..=25
2026-06-23T09:38:03.2095438Z   [must] requirement_quality REQ-CONSENT-3 criterion=length — title is 82 words; want 3..=25
2026-06-23T09:38:03.2095786Z   [must] requirement_quality REQ-CONV-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2096063Z   [must] requirement_quality REQ-CONV-1 criterion=length — title is 73 words; want 3..=25
2026-06-23T09:38:03.2096565Z   [must] requirement_quality REQ-CONV-2 criterion=length — title is 47 words; want 3..=25
2026-06-23T09:38:03.2096940Z   [must] requirement_quality REQ-DAEMON-5 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2097225Z   [must] requirement_quality REQ-DAEMON-5 criterion=length — title is 64 words; want 3..=25
2026-06-23T09:38:03.2097591Z   [must] requirement_quality REQ-DAEMON-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2097853Z   [must] requirement_quality REQ-DAEMON-6 criterion=length — title is 84 words; want 3..=25
2026-06-23T09:38:03.2098215Z   [must] requirement_quality REQ-DAEMON-7 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2098572Z   [must] requirement_quality REQ-DAEMON-7 criterion=length — title is 62 words; want 3..=25
2026-06-23T09:38:03.2098849Z   [must] requirement_quality REQ-DAEMON-8 criterion=length — title is 44 words; want 3..=25
2026-06-23T09:38:03.2099283Z   [must] requirement_quality REQ-DAEMON-9 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2099696Z   [must] requirement_quality REQ-DAEMON-9 criterion=length — title is 114 words; want 3..=25
2026-06-23T09:38:03.2100110Z   [must] requirement_quality REQ-DOCS-NO-INTERNAL-CODES criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2100434Z   [must] requirement_quality REQ-DOCS-NO-INTERNAL-CODES criterion=length — title is 84 words; want 3..=25
2026-06-23T09:38:03.2100810Z   [must] requirement_quality REQ-ELEVATE-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2101077Z   [must] requirement_quality REQ-ELEVATE-1 criterion=length — title is 121 words; want 3..=25
2026-06-23T09:38:03.2101430Z   [must] requirement_quality REQ-ENDPOINT-LIST-MERGE-LOCAL criterion=length — title is 95 words; want 3..=25
2026-06-23T09:38:03.2101816Z   [must] requirement_quality REQ-ENDPOINT-PURGE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2102130Z   [must] requirement_quality REQ-ENDPOINT-PURGE criterion=length — title is 220 words; want 3..=25
2026-06-23T09:38:03.2102435Z   [must] requirement_quality REQ-ENDPOINT-STOP-OFFLINE criterion=length — title is 58 words; want 3..=25
2026-06-23T09:38:03.2102849Z   [must] requirement_quality REQ-ENDPOINT-UNBOUND-ATTACH criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2103174Z   [must] requirement_quality REQ-ENDPOINT-UNBOUND-ATTACH criterion=length — title is 122 words; want 3..=25
2026-06-23T09:38:03.2103527Z   [must] requirement_quality REQ-EP-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2103779Z   [must] requirement_quality REQ-EP-6 criterion=length — title is 58 words; want 3..=25
2026-06-23T09:38:03.2104042Z   [must] requirement_quality REQ-EP-7 criterion=length — title is 68 words; want 3..=25
2026-06-23T09:38:03.2104291Z   [must] requirement_quality REQ-EP-8 criterion=length — title is 114 words; want 3..=25
2026-06-23T09:38:03.2104652Z   [must] requirement_quality REQ-EP-9 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2104890Z   [must] requirement_quality REQ-EP-9 criterion=length — title is 76 words; want 3..=25
2026-06-23T09:38:03.2105298Z   [must] requirement_quality REQ-HAZARD-ATTACH-WEDGE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2105608Z   [must] requirement_quality REQ-HAZARD-ATTACH-WEDGE criterion=length — title is 244 words; want 3..=25
2026-06-23T09:38:03.2106002Z   [must] requirement_quality REQ-HAZARD-BIND-CWD-UNSET criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2106438Z   [must] requirement_quality REQ-HAZARD-BIND-CWD-UNSET criterion=length — title is 130 words; want 3..=25
2026-06-23T09:38:03.2106876Z   [must] requirement_quality REQ-HAZARD-BRAIN-RESPAWN-PATH criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2107228Z   [must] requirement_quality REQ-HAZARD-BRAIN-RESPAWN-PATH criterion=length — title is 119 words; want 3..=25
2026-06-23T09:38:03.2107709Z   [must] requirement_quality REQ-HAZARD-BRAIN-RESTART-LIFECYCLE-REHYDRATE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2108084Z   [must] requirement_quality REQ-HAZARD-BRAIN-RESTART-LIFECYCLE-REHYDRATE criterion=length — title is 125 words; want 3..=25
2026-06-23T09:38:03.2108536Z   [must] requirement_quality REQ-HAZARD-BRAIN-RESTART-PSYCHE-DUP criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2108898Z   [must] requirement_quality REQ-HAZARD-BRAIN-RESTART-PSYCHE-DUP criterion=length — title is 199 words; want 3..=25
2026-06-23T09:38:03.2109414Z   [must] requirement_quality REQ-HAZARD-BROKER-PROCESS-ISOLATION criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2109886Z   [must] requirement_quality REQ-HAZARD-BROKER-PROCESS-ISOLATION criterion=length — title is 114 words; want 3..=25
2026-06-23T09:38:03.2110319Z   [must] requirement_quality REQ-HAZARD-BROKER-QUIC-DEADLINE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2110646Z   [must] requirement_quality REQ-HAZARD-BROKER-QUIC-DEADLINE criterion=length — title is 162 words; want 3..=25
2026-06-23T09:38:03.2111075Z   [must] requirement_quality REQ-HAZARD-BROKER-SEED-WIRE-SKEW criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2111409Z   [must] requirement_quality REQ-HAZARD-BROKER-SEED-WIRE-SKEW criterion=length — title is 193 words; want 3..=25
2026-06-23T09:38:03.2111770Z   [must] requirement_quality REQ-HAZARD-CONFLICT-BOTH-PRESERVED criterion=length — title is 29 words; want 3..=25
2026-06-23T09:38:03.2112211Z   [must] requirement_quality REQ-HAZARD-CONTROLLER-GAP-RESUME criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2112554Z   [must] requirement_quality REQ-HAZARD-CONTROLLER-GAP-RESUME criterion=length — title is 297 words; want 3..=25
2026-06-23T09:38:03.2113033Z   [must] requirement_quality REQ-HAZARD-CONTROLLER-IRRECOVERABLE-BEHIND criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2113409Z   [must] requirement_quality REQ-HAZARD-CONTROLLER-IRRECOVERABLE-BEHIND criterion=length — title is 134 words; want 3..=25
2026-06-23T09:38:03.2113845Z   [must] requirement_quality REQ-HAZARD-CONTROLLER-RETAKE-FLOOR criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2114192Z   [must] requirement_quality REQ-HAZARD-CONTROLLER-RETAKE-FLOOR criterion=length — title is 184 words; want 3..=25
2026-06-23T09:38:03.2114645Z   [must] requirement_quality REQ-HAZARD-CONTROLLER-WRITER-REORDER criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2115017Z   [must] requirement_quality REQ-HAZARD-CONTROLLER-WRITER-REORDER criterion=length — title is 643 words; want 3..=25
2026-06-23T09:38:03.2115368Z   [must] requirement_quality REQ-HAZARD-DAEMON-SCHED-NONBLOCKING criterion=length — title is 32 words; want 3..=25
2026-06-23T09:38:03.2116383Z   [must] requirement_quality REQ-HAZARD-DAEMON-STOP-BARRIER criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2116802Z   [must] requirement_quality REQ-HAZARD-DAEMON-STOP-BARRIER criterion=length — title is 80 words; want 3..=25
2026-06-23T09:38:03.2117235Z   [must] requirement_quality REQ-HAZARD-DAEMON-STOP-REAP criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2117751Z   [must] requirement_quality REQ-HAZARD-DAEMON-STOP-REAP criterion=length — title is 90 words; want 3..=25
2026-06-23T09:38:03.2118202Z   [must] requirement_quality REQ-HAZARD-DEFERRED-MANIFEST criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2118562Z   [must] requirement_quality REQ-HAZARD-DEFERRED-MANIFEST criterion=length — title is 112 words; want 3..=25
2026-06-23T09:38:03.2118906Z   [must] requirement_quality REQ-HAZARD-DETACHED-PIPE-INHERIT criterion=length — title is 52 words; want 3..=25
2026-06-23T09:38:03.2119487Z   [must] requirement_quality REQ-HAZARD-DRIVEN-BY-IDLE-REMOTE-EVICT criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2119845Z   [must] requirement_quality REQ-HAZARD-DRIVEN-BY-IDLE-REMOTE-EVICT criterion=length — title is 232 words; want 3..=25
2026-06-23T09:38:03.2120303Z   [must] requirement_quality REQ-HAZARD-DRIVEN-BY-SELFHEAL criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2120623Z   [must] requirement_quality REQ-HAZARD-DRIVEN-BY-SELFHEAL criterion=length — title is 77 words; want 3..=25
2026-06-23T09:38:03.2121225Z   [must] requirement_quality REQ-HAZARD-EFFECT-JOURNAL-PTY-WEDGE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2121616Z   [must] requirement_quality REQ-HAZARD-EFFECT-JOURNAL-PTY-WEDGE criterion=length — title is 440 words; want 3..=25
2026-06-23T09:38:03.2122049Z   [must] requirement_quality REQ-HAZARD-ELEVATED-DAEMON-SPAWN criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2122402Z   [must] requirement_quality REQ-HAZARD-ELEVATED-DAEMON-SPAWN criterion=length — title is 58 words; want 3..=25
2026-06-23T09:38:03.2122860Z   [must] requirement_quality REQ-HAZARD-ENDPOINT-RUN-ATTACH-OUTPUT criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2123232Z   [must] requirement_quality REQ-HAZARD-ENDPOINT-RUN-ATTACH-OUTPUT criterion=length — title is 228 words; want 3..=25
2026-06-23T09:38:03.2123626Z   [must] requirement_quality REQ-HAZARD-ENV-SUBST criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2123955Z   [must] requirement_quality REQ-HAZARD-ENV-SUBST criterion=length — title is 168 words; want 3..=25
2026-06-23T09:38:03.2124391Z   [must] requirement_quality REQ-HAZARD-ENVELOPE-CR-LINESAFE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2124729Z   [must] requirement_quality REQ-HAZARD-ENVELOPE-CR-LINESAFE criterion=length — title is 73 words; want 3..=25
2026-06-23T09:38:03.2125592Z   [must] requirement_quality REQ-HAZARD-ENVELOPE-PARSER-SAFE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2125924Z   [must] requirement_quality REQ-HAZARD-EPOCH-RESET criterion=length — title is 60 words; want 3..=25
2026-06-23T09:38:03.2126337Z   [must] requirement_quality REQ-HAZARD-GEN-START-NOW criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2126723Z   [must] requirement_quality REQ-HAZARD-HOSTED-LIVENESS-RECONCILE criterion=length — title is 175 words; want 3..=25
2026-06-23T09:38:03.2127170Z   [must] requirement_quality REQ-HAZARD-INJECT-CONTROL-COEXIST criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2127524Z   [must] requirement_quality REQ-HAZARD-INJECT-CONTROL-COEXIST criterion=length — title is 340 words; want 3..=25
2026-06-23T09:38:03.2127963Z   [must] requirement_quality REQ-HAZARD-INPUT-ACK-BACKPRESSURE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2128306Z   [must] requirement_quality REQ-HAZARD-INPUT-ACK-BACKPRESSURE criterion=length — title is 343 words; want 3..=25
2026-06-23T09:38:03.2128762Z   [must] requirement_quality REQ-HAZARD-INSTANT-UNDERFLOW criterion=length — title is 30 words; want 3..=25
2026-06-23T09:38:03.2129219Z   [must] requirement_quality REQ-HAZARD-LIVEHOST-BOOT-LIVENESS-GATE criterion=length — title is 122 words; want 3..=25
2026-06-23T09:38:03.2129704Z   [must] requirement_quality REQ-HAZARD-LIVEHOST-BOOT-RACE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2130038Z   [must] requirement_quality REQ-HAZARD-LIVEHOST-BOOT-RACE criterion=length — title is 158 words; want 3..=25
2026-06-23T09:38:03.2130478Z   [must] requirement_quality REQ-HAZARD-LIVEHOST-NONRESIDENT criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2130817Z   [must] requirement_quality REQ-HAZARD-LIVEHOST-NONRESIDENT criterion=length — title is 171 words; want 3..=25
2026-06-23T09:38:03.2131132Z   [must] requirement_quality REQ-HAZARD-PAIR-RATE-LIMIT criterion=length — title is 37 words; want 3..=25
2026-06-23T09:38:03.2131491Z   [must] requirement_quality REQ-HAZARD-PAIR-SEED-ROTATION criterion=length — title is 33 words; want 3..=25
2026-06-23T09:38:03.2131918Z   [must] requirement_quality REQ-HAZARD-PAIR-TRANSCRIPT-BIND criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2132481Z   [must] requirement_quality REQ-HAZARD-PSYCHE-OUTBOUND-PROXY criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2132824Z   [must] requirement_quality REQ-HAZARD-PSYCHE-OUTBOUND-PROXY criterion=length — title is 27 words; want 3..=25
2026-06-23T09:38:03.2133258Z   [must] requirement_quality REQ-HAZARD-PTY-INPUT-WRITER-WEDGE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2133602Z   [must] requirement_quality REQ-HAZARD-PTY-INPUT-WRITER-WEDGE criterion=length — title is 287 words; want 3..=25
2026-06-23T09:38:03.2134050Z   [must] requirement_quality REQ-HAZARD-PUMP-IPC-DEADLINE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2134364Z   [must] requirement_quality REQ-HAZARD-PUMP-IPC-DEADLINE criterion=length — title is 38 words; want 3..=25
2026-06-23T09:38:03.2134807Z   [must] requirement_quality REQ-HAZARD-RC-ATTACH-FAILFAST criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2135126Z   [must] requirement_quality REQ-HAZARD-RC-ATTACH-FAILFAST criterion=length — title is 163 words; want 3..=25
2026-06-23T09:38:03.2135542Z   [must] requirement_quality REQ-HAZARD-RC-ATTACH-ONLINE-RACE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2135876Z   [must] requirement_quality REQ-HAZARD-RC-ATTACH-ONLINE-RACE criterion=length — title is 184 words; want 3..=25
2026-06-23T09:38:03.2136257Z   [must] requirement_quality REQ-HAZARD-RC-EOF criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2136579Z   [must] requirement_quality REQ-HAZARD-RC-EOF criterion=length — title is 208 words; want 3..=25
2026-06-23T09:38:03.2137016Z   [must] requirement_quality REQ-HAZARD-RC-INPUT-KEY-ENCODING criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2137369Z   [must] requirement_quality REQ-HAZARD-RC-INPUT-KEY-ENCODING criterion=length — title is 222 words; want 3..=25
2026-06-23T09:38:03.2137789Z   [must] requirement_quality REQ-HAZARD-REGISTRY-GHOST-ROWS criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2138113Z   [must] requirement_quality REQ-HAZARD-REGISTRY-GHOST-ROWS criterion=length — title is 66 words; want 3..=25
2026-06-23T09:38:03.2138448Z   [must] requirement_quality REQ-HAZARD-ROLLBACK-STATE-COMPAT criterion=length — title is 72 words; want 3..=25
2026-06-23T09:38:03.2138852Z   [must] requirement_quality REQ-HAZARD-ROSTER-GHOST criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2139385Z   [must] requirement_quality REQ-HAZARD-ROSTER-GHOST criterion=length — title is 116 words; want 3..=25
2026-06-23T09:38:03.2139808Z   [must] requirement_quality REQ-HAZARD-SELF-ELEVATE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2140146Z   [must] requirement_quality REQ-HAZARD-SELF-ELEVATE criterion=length — title is 101 words; want 3..=25
2026-06-23T09:38:03.2140607Z   [must] requirement_quality REQ-HAZARD-STOP-PATH-PSYCHE-ORPHAN-REAP criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2140980Z   [must] requirement_quality REQ-HAZARD-STOP-PATH-PSYCHE-ORPHAN-REAP criterion=length — title is 120 words; want 3..=25
2026-06-23T09:38:03.2141295Z   [must] requirement_quality REQ-HAZARD-SUDO-SECURE-PATH criterion=length — title is 43 words; want 3..=25
2026-06-23T09:38:03.2141753Z   [must] requirement_quality REQ-HAZARD-TEMPLATE-ARGV-FILL criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2142079Z   [must] requirement_quality REQ-HAZARD-TEMPLATE-ARGV-FILL criterion=length — title is 166 words; want 3..=25
2026-06-23T09:38:03.2142632Z   [must] requirement_quality REQ-HAZARD-UNHOST-PSYCHE-REAP criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2142961Z   [must] requirement_quality REQ-HAZARD-UNHOST-PSYCHE-REAP criterion=length — title is 161 words; want 3..=25
2026-06-23T09:38:03.2143384Z   [must] requirement_quality REQ-HAZARD-VIEWER-CLOSE-DETACH criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2143709Z   [must] requirement_quality REQ-HAZARD-VIEWER-CLOSE-DETACH criterion=length — title is 437 words; want 3..=25
2026-06-23T09:38:03.2144119Z   [must] requirement_quality REQ-HAZARD-VIEWER-ISOLATION criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2144467Z   [must] requirement_quality REQ-HAZARD-VIEWER-ISOLATION criterion=length — title is 118 words; want 3..=25
2026-06-23T09:38:03.2144896Z   [must] requirement_quality REQ-HAZARD-VIEWER-RING-ROLL-SNAP criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2145262Z   [must] requirement_quality REQ-HAZARD-VIEWER-RING-ROLL-SNAP criterion=length — title is 167 words; want 3..=25
2026-06-23T09:38:03.2145782Z   [must] requirement_quality REQ-HAZARD-VIEWER-STARVE-UNDER-CONTROLLER-BACKPRESSURE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2146207Z   [must] requirement_quality REQ-HAZARD-VIEWER-STARVE-UNDER-CONTROLLER-BACKPRESSURE criterion=length — title is 235 words; want 3..=25
2026-06-23T09:38:03.2146526Z   [must] requirement_quality REQ-HAZARD-WAN-ORIGIN-AUTH criterion=length — title is 37 words; want 3..=25
2026-06-23T09:38:03.2147020Z   [must] requirement_quality REQ-HAZARD-WIN-PTY-PROGRAM-RESOLVE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2147361Z   [must] requirement_quality REQ-HAZARD-WIN-PTY-PROGRAM-RESOLVE criterion=length — title is 96 words; want 3..=25
2026-06-23T09:38:03.2147705Z   [must] requirement_quality REQ-HAZARD-WMI-DAEMON-WINDOW criterion=length — title is 101 words; want 3..=25
2026-06-23T09:38:03.2147981Z   [must] requirement_quality REQ-HOST-RUN-1 criterion=length — title is 88 words; want 3..=25
2026-06-23T09:38:03.2148248Z   [must] requirement_quality REQ-HOST-RUN-2 criterion=length — title is 97 words; want 3..=25
2026-06-23T09:38:03.2148497Z   [must] requirement_quality REQ-INST-15 criterion=length — title is 32 words; want 3..=25
2026-06-23T09:38:03.2148868Z   [must] requirement_quality REQ-INSTALL-10 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2149212Z   [must] requirement_quality REQ-INSTALL-10 criterion=length — title is 58 words; want 3..=25
2026-06-23T09:38:03.2149604Z   [must] requirement_quality REQ-INSTALL-11 criterion=length — title is 78 words; want 3..=25
2026-06-23T09:38:03.2149887Z   [must] requirement_quality REQ-INSTALL-12 criterion=length — title is 116 words; want 3..=25
2026-06-23T09:38:03.2150176Z   [must] requirement_quality REQ-INSTALL-2 criterion=length — title is 2 word(s); want 3..=25
2026-06-23T09:38:03.2150543Z   [must] requirement_quality REQ-INSTALL-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2150810Z   [must] requirement_quality REQ-INSTALL-6 criterion=length — title is 56 words; want 3..=25
2026-06-23T09:38:03.2151167Z   [must] requirement_quality REQ-INSTALL-7 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2151426Z   [must] requirement_quality REQ-INSTALL-7 criterion=length — title is 50 words; want 3..=25
2026-06-23T09:38:03.2151683Z   [must] requirement_quality REQ-INSTALL-8 criterion=length — title is 55 words; want 3..=25
2026-06-23T09:38:03.2152079Z   [must] requirement_quality REQ-INSTALL-9 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2152336Z   [must] requirement_quality REQ-INSTALL-9 criterion=length — title is 62 words; want 3..=25
2026-06-23T09:38:03.2152853Z   [must] requirement_quality REQ-KICK-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2153110Z   [must] requirement_quality REQ-KICK-1 criterion=length — title is 133 words; want 3..=25
2026-06-23T09:38:03.2153478Z   [must] requirement_quality REQ-MANIFEST-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2153749Z   [must] requirement_quality REQ-MANIFEST-3 criterion=length — title is 26 words; want 3..=25
2026-06-23T09:38:03.2154016Z   [must] requirement_quality REQ-MANIFEST-4 criterion=length — title is 31 words; want 3..=25
2026-06-23T09:38:03.2154317Z   [must] requirement_quality REQ-MANIFEST-5 criterion=length — title is 132 words; want 3..=25
2026-06-23T09:38:03.2154583Z   [must] requirement_quality REQ-MANIFEST-6 criterion=length — title is 84 words; want 3..=25
2026-06-23T09:38:03.2154847Z   [must] requirement_quality REQ-MANIFEST-7 criterion=length — title is 120 words; want 3..=25
2026-06-23T09:38:03.2155143Z   [must] requirement_quality REQ-MANIFEST-8 criterion=length — title is 77 words; want 3..=25
2026-06-23T09:38:03.2155398Z   [must] requirement_quality REQ-MESH-1 criterion=length — title is 86 words; want 3..=25
2026-06-23T09:38:03.2155746Z   [must] requirement_quality REQ-MESH-2 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2156013Z   [must] requirement_quality REQ-MESH-2 criterion=length — title is 120 words; want 3..=25
2026-06-23T09:38:03.2156357Z   [must] requirement_quality REQ-MESH-3 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2156632Z   [must] requirement_quality REQ-MESH-3 criterion=length — title is 86 words; want 3..=25
2026-06-23T09:38:03.2156977Z   [must] requirement_quality REQ-MESH-4 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2157258Z   [must] requirement_quality REQ-MESH-4 criterion=length — title is 99 words; want 3..=25
2026-06-23T09:38:03.2157604Z   [must] requirement_quality REQ-MESH-5 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2157855Z   [must] requirement_quality REQ-MESH-5 criterion=length — title is 72 words; want 3..=25
2026-06-23T09:38:03.2158198Z   [must] requirement_quality REQ-MESH-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2158437Z   [must] requirement_quality REQ-MESH-6 criterion=length — title is 56 words; want 3..=25
2026-06-23T09:38:03.2158789Z   [must] requirement_quality REQ-MIGRATE-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2159253Z   [must] requirement_quality REQ-MSG-4 criterion=length — title is 31 words; want 3..=25
2026-06-23T09:38:03.2159548Z   [must] requirement_quality REQ-MSG-5 criterion=length — title is 38 words; want 3..=25
2026-06-23T09:38:03.2159819Z   [must] requirement_quality REQ-MSG-6 criterion=length — title is 65 words; want 3..=25
2026-06-23T09:38:03.2160202Z   [must] requirement_quality REQ-MSG-ENVELOPE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2160481Z   [must] requirement_quality REQ-MSG-ENVELOPE criterion=length — title is 153 words; want 3..=25
2026-06-23T09:38:03.2160918Z   [must] requirement_quality REQ-MSG-IDLE-TRANSLATION-BINARY criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2161257Z   [must] requirement_quality REQ-MSG-IDLE-TRANSLATION-BINARY criterion=length — title is 221 words; want 3..=25
2026-06-23T09:38:03.2161633Z   [must] requirement_quality REQ-PAIR-8 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2161891Z   [must] requirement_quality REQ-PAIR-8 criterion=length — title is 67 words; want 3..=25
2026-06-23T09:38:03.2162381Z   [must] requirement_quality REQ-PICKER-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2162644Z   [must] requirement_quality REQ-PICKER-1 criterion=length — title is 156 words; want 3..=25
2026-06-23T09:38:03.2162906Z   [must] requirement_quality REQ-PICKER-2 criterion=length — title is 77 words; want 3..=25
2026-06-23T09:38:03.2163162Z   [must] requirement_quality REQ-PICKER-3 criterion=length — title is 120 words; want 3..=25
2026-06-23T09:38:03.2163524Z   [must] requirement_quality REQ-PICKER-4 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2163786Z   [must] requirement_quality REQ-PICKER-4 criterion=length — title is 84 words; want 3..=25
2026-06-23T09:38:03.2164171Z   [must] requirement_quality REQ-PICKER-5 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2164434Z   [must] requirement_quality REQ-PICKER-5 criterion=length — title is 147 words; want 3..=25
2026-06-23T09:38:03.2164886Z   [must] requirement_quality REQ-PICKER-ADAPTER-DESCRIPTION criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2165220Z   [must] requirement_quality REQ-PICKER-ADAPTER-DESCRIPTION criterion=length — title is 64 words; want 3..=25
2026-06-23T09:38:03.2165526Z   [must] requirement_quality REQ-PICKER-HISTORY-FRESH criterion=length — title is 51 words; want 3..=25
2026-06-23T09:38:03.2165863Z   [must] requirement_quality REQ-PICKER-HISTORY-FRESH criterion=tbd-todo — title contains placeholder marker 'TBD'
2026-06-23T09:38:03.2166172Z   [must] requirement_quality REQ-PICKER-ONLINE-ACTION criterion=length — title is 74 words; want 3..=25
2026-06-23T09:38:03.2166539Z   [must] requirement_quality REQ-PICKER-ONLINE-ACTION criterion=tbd-todo — title contains placeholder marker 'TBD'
2026-06-23T09:38:03.2166927Z   [must] requirement_quality REQ-PICKER-UX-V013 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2167251Z   [must] requirement_quality REQ-PICKER-UX-V013 criterion=length — title is 86 words; want 3..=25
2026-06-23T09:38:03.2167614Z   [must] requirement_quality REQ-PRES-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2167871Z   [must] requirement_quality REQ-PRES-1 criterion=length — title is 48 words; want 3..=25
2026-06-23T09:38:03.2168122Z   [must] requirement_quality REQ-RC-1 criterion=length — title is 94 words; want 3..=25
2026-06-23T09:38:03.2168520Z   [must] requirement_quality REQ-RC-KEY-VT-TRANSLATE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2168921Z   [must] requirement_quality REQ-RC-KEY-VT-TRANSLATE criterion=length — title is 249 words; want 3..=25
2026-06-23T09:38:03.2169411Z   [must] requirement_quality REQ-RC-MOUSE-FORWARD criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2169764Z   [must] requirement_quality REQ-RC-MOUSE-FORWARD criterion=length — title is 218 words; want 3..=25
2026-06-23T09:38:03.2170166Z   [must] requirement_quality REQ-RC-WIN-PASTE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2170443Z   [must] requirement_quality REQ-RC-WIN-PASTE criterion=length — title is 226 words; want 3..=25
2026-06-23T09:38:03.2170801Z   [must] requirement_quality REQ-RCVIEW-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2171060Z   [must] requirement_quality REQ-RCVIEW-1 criterion=length — title is 197 words; want 3..=25
2026-06-23T09:38:03.2171488Z   [must] requirement_quality REQ-READY-AGENT-RESUME criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2171793Z   [must] requirement_quality REQ-READY-AGENT-RESUME criterion=length — title is 165 words; want 3..=25
2026-06-23T09:38:03.2172327Z   [must] requirement_quality REQ-RUN-MULTISUBNET-HOME criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2172641Z   [must] requirement_quality REQ-RUN-MULTISUBNET-HOME criterion=length — title is 120 words; want 3..=25
2026-06-23T09:38:03.2173010Z   [must] requirement_quality REQ-RUN-PICKER criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2173286Z   [must] requirement_quality REQ-RUN-PICKER criterion=length — title is 203 words; want 3..=25
2026-06-23T09:38:03.2173661Z   [must] requirement_quality REQ-RUN-SHORTCUT criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2173939Z   [must] requirement_quality REQ-RUN-SHORTCUT criterion=length — title is 226 words; want 3..=25
2026-06-23T09:38:03.2174230Z   [must] requirement_quality REQ-SEAM-SPAWN criterion=length — title is 2 word(s); want 3..=25
2026-06-23T09:38:03.2174618Z   [must] requirement_quality REQ-SEND-SPT-HOSTED criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2174933Z   [must] requirement_quality REQ-SEND-SPT-HOSTED criterion=length — title is 169 words; want 3..=25
2026-06-23T09:38:03.2175351Z   [must] requirement_quality REQ-SESSION-RESUME-TEMPLATE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2175680Z   [must] requirement_quality REQ-SESSION-RESUME-TEMPLATE criterion=length — title is 287 words; want 3..=25
2026-06-23T09:38:03.2175934Z   [must] requirement_quality REQ-SHELL-1 criterion=length — title is 36 words; want 3..=25
2026-06-23T09:38:03.2176191Z   [must] requirement_quality REQ-SHELL-2 criterion=length — title is 49 words; want 3..=25
2026-06-23T09:38:03.2176461Z   [must] requirement_quality REQ-SHELL-3 criterion=length — title is 80 words; want 3..=25
2026-06-23T09:38:03.2176823Z   [must] requirement_quality REQ-SHELL-4 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2177128Z   [must] requirement_quality REQ-SHELL-4 criterion=length — title is 84 words; want 3..=25
2026-06-23T09:38:03.2177381Z   [must] requirement_quality REQ-SHELL-5 criterion=length — title is 49 words; want 3..=25
2026-06-23T09:38:03.2177739Z   [must] requirement_quality REQ-START-5 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2177997Z   [must] requirement_quality REQ-START-5 criterion=length — title is 129 words; want 3..=25
2026-06-23T09:38:03.2178249Z   [must] requirement_quality REQ-STORE-1 criterion=length — title is 34 words; want 3..=25
2026-06-23T09:38:03.2178508Z   [must] requirement_quality REQ-SUBNET-5 criterion=length — title is 52 words; want 3..=25
2026-06-23T09:38:03.2179061Z   [must] requirement_quality REQ-SUBNET-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2179356Z   [must] requirement_quality REQ-SUBNET-6 criterion=length — title is 38 words; want 3..=25
2026-06-23T09:38:03.2179744Z   [must] requirement_quality REQ-SUBNET-7 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2180010Z   [must] requirement_quality REQ-SUBNET-7 criterion=length — title is 75 words; want 3..=25
2026-06-23T09:38:03.2180267Z   [must] requirement_quality REQ-SUBNET-8 criterion=length — title is 53 words; want 3..=25
2026-06-23T09:38:03.2180620Z   [must] requirement_quality REQ-TERM-5 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2180882Z   [must] requirement_quality REQ-TERM-5 criterion=length — title is 71 words; want 3..=25
2026-06-23T09:38:03.2181264Z   [must] requirement_quality REQ-TERM-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2181525Z   [must] requirement_quality REQ-TERM-6 criterion=length — title is 53 words; want 3..=25
2026-06-23T09:38:03.2181885Z   [must] requirement_quality REQ-TERM-7 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2182262Z   [must] requirement_quality REQ-TERM-7 criterion=length — title is 55 words; want 3..=25
2026-06-23T09:38:03.2182625Z   [must] requirement_quality REQ-UPD-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2182882Z   [must] requirement_quality REQ-UPD-6 criterion=length — title is 32 words; want 3..=25
2026-06-23T09:38:03.2183235Z   [must] requirement_quality REQ-UPD-7 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2183488Z   [must] requirement_quality REQ-UPD-7 criterion=length — title is 88 words; want 3..=25
2026-06-23T09:38:03.2183860Z   [must] requirement_quality REQ-UPD-8 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2184115Z   [must] requirement_quality REQ-UPD-8 criterion=length — title is 115 words; want 3..=25
2026-06-23T09:38:03.2184385Z   [must] requirement_quality REQ-UPD-9 criterion=length — title is 110 words; want 3..=25
2026-06-23T09:38:03.2184815Z   [must] requirement_quality REQ-VIEWER-SKIP-TO-LIVE-ON-EVICT criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-23T09:38:03.2185153Z   [must] requirement_quality REQ-VIEWER-SKIP-TO-LIVE-ON-EVICT criterion=length — title is 227 words; want 3..=25
2026-06-23T09:38:03.2185410Z   [must] requirement_quality REQ-WHOAMI-1 criterion=length — title is 76 words; want 3..=25
2026-06-23T09:38:03.2185449Z 
2026-06-23T09:38:03.2185540Z # Requirement quality review
2026-06-23T09:38:03.2185568Z 
2026-06-23T09:38:03.2185768Z You are reviewing 293 requirement(s) from `traceable-reqs.toml` against a quality
2026-06-23T09:38:03.2185988Z rubric. Deterministic checks (length, contains-and, tbd-todo, duplicate-titles,
2026-06-23T09:38:03.2186184Z trailing-etc) have already run and surfaced as `requirement_quality` findings on
2026-06-23T09:38:03.2186359Z this command's output. Your task is the rubric items below.
2026-06-23T09:38:03.2186393Z 
2026-06-23T09:38:03.2186484Z ## Rubric
2026-06-23T09:38:03.2186508Z 
2026-06-23T09:38:03.2186776Z - **singular** — describes one capability; no smuggled "and"/"or" across distinct actions.
2026-06-23T09:38:03.2187016Z - **verifiable** — states an observable behavior a test or reviewer could confirm.
2026-06-23T09:38:03.2187236Z - **atomic** — cannot be split into two requirements without losing meaning.
2026-06-23T09:38:03.2187393Z - **active-voice** — clear subject and active verb.
2026-06-23T09:38:03.2187427Z 
2026-06-23T09:38:03.2187659Z If a criterion is borderline or doesn't apply, abstain — only emit findings for
2026-06-23T09:38:03.2187756Z clear concerns.
2026-06-23T09:38:03.2187790Z 
2026-06-23T09:38:03.2188008Z ## Requirements
2026-06-23T09:38:03.2188047Z 
2026-06-23T09:38:03.2188137Z ### REQ-ARCH-1
2026-06-23T09:38:03.2188270Z - Title: Many small acyclically-layered crates
2026-06-23T09:38:03.2188386Z - Required stages: impl
2026-06-23T09:38:03.2188419Z 
2026-06-23T09:38:03.2188508Z ### REQ-ARCH-2
2026-06-23T09:38:03.2188667Z - Title: Public SDK surface is spt-proto, spt-runtime, spt-msg
2026-06-23T09:38:03.2188767Z - Required stages: impl
2026-06-23T09:38:03.2188800Z 
2026-06-23T09:38:03.2188900Z ### REQ-ARCH-3
2026-06-23T09:38:03.2189152Z - Title: Wire-protocol version independent of crate semver, N-1 compat window
2026-06-23T09:38:03.2189261Z - Required stages: impl, unit
2026-06-23T09:38:03.2189299Z 
2026-06-23T09:38:03.2189404Z ### REQ-ARCH-4
2026-06-23T09:38:03.2189573Z - Title: Copy-verbatim the commodity layer from the sister project
2026-06-23T09:38:03.2189669Z - Required stages: impl, unit
2026-06-23T09:38:03.2189708Z 
2026-06-23T09:38:03.2189793Z ### REQ-DAEMON-1
2026-06-23T09:38:03.2189950Z - Title: One per-machine spt-daemon owning all per-machine state
2026-06-23T09:38:03.2190060Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2190089Z 
2026-06-23T09:38:03.2190178Z ### REQ-DAEMON-2
2026-06-23T09:38:03.2190446Z - Title: Broker/brain split for seamless self-update
2026-06-23T09:38:03.2190556Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2190585Z 
2026-06-23T09:38:03.2190671Z ### REQ-DAEMON-3
2026-06-23T09:38:03.2190813Z - Title: Any api invocation auto-starts the daemon if absent
2026-06-23T09:38:03.2190914Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2190947Z 
2026-06-23T09:38:03.2191033Z ### REQ-DAEMON-4
2026-06-23T09:38:03.2191156Z - Title: Honor every KNOWN-HAZARDS invariant
2026-06-23T09:38:03.2191262Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2191296Z 
2026-06-23T09:38:03.2191376Z ### REQ-STORE-1
2026-06-23T09:38:03.2192219Z - Title: spt-store::BranchStore (git branch as versioned KV; commit=checkpoint/tip=resume, atomic multi-key, merge-native sync) is the substrate for coarse/durable/audited state (context, registry snapshot+distribution, daemon checkpoint); hot paths (B5 fsync journal) + indexed queries (SQLite spool) excluded (ADR-0011)
2026-06-23T09:38:03.2192327Z - Required stages: impl, unit
2026-06-23T09:38:03.2192355Z 
2026-06-23T09:38:03.2192450Z ### REQ-MANIFEST-1
2026-06-23T09:38:03.2192622Z - Title: Per-adapter manifest with adapter_name and min_spt_core_version
2026-06-23T09:38:03.2192721Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2192755Z 
2026-06-23T09:38:03.2192856Z ### REQ-MANIFEST-2
2026-06-23T09:38:03.2193379Z - Title: Adapter profiles — sparse leaf-replace overlays (shipped + local), composite <adapter>:<profile> addressing, shadow-refusal, tighten-only consent floors
2026-06-23T09:38:03.2193490Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2193524Z 
2026-06-23T09:38:03.2193618Z ### REQ-MANIFEST-3
2026-06-23T09:38:03.2194238Z - Title: Adapter strings — [strings] KV tree, dot-path get-string resolving through the profile leaf-replace overlay, set-string editing a local profile's [strings] only; data-only (nothing executes a string)
2026-06-23T09:38:03.2194348Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2194386Z 
2026-06-23T09:38:03.2194488Z ### REQ-MANIFEST-4
2026-06-23T09:38:03.2195161Z - Title: Keyword hints — [[hints]] {keywords (literal/regex), text}; spt api hint --session emits at most one matched hint per message, once per session (seen-set), declaration-order first match; profiles overlay [[hints]] by leaf-replace
2026-06-23T09:38:03.2195265Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2195298Z 
2026-06-23T09:38:03.2195394Z ### REQ-MANIFEST-5
2026-06-23T09:38:03.2198373Z - Title: File-backed adapter [strings] (M12-W3-T3.1): a [strings] dot-path value MAY be an inline-table FILE POINTER `key = { file = "rel/path" }` resolved to the file's contents at get-string time, keeping large bodies (skill-instructions, hint text) out of the manifest. A value-position table with a `file` key IS the pointer form (reserved — cannot double as data). Per-adapter aux storage `adapters/<adapter>/strings/`; pointers resolve relative to it with CONTAINMENT (reject `..`/absolute escaping the dir). UPDATE-SAFETY: a LOCAL profile's file-pointers resolve relative to the user-owned local-profile dir (NOT adapter-shipped strings/, which adapter updates overwrite), or the local profile inlines. Validate-at-register (fail-fast on a bad/escaping/missing pointer) + LAZY read at get-string (live file edits reflect, no re-register) + skip-diagnostics on missing-at-read (no hard-crash, mirrors [digest]). Rides the same leaf-replace profile overlay as the rest of [strings].
2026-06-23T09:38:03.2198511Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2198529Z 
2026-06-23T09:38:03.2198627Z ### REQ-MANIFEST-6
2026-06-23T09:38:03.2200758Z - Title: Cross-adapter fallback target addressing (M12-W3-T3.2): a cross-adapter fallback target is addressed as `<adapter>:<profile>` (not just a bare adapter_name), resolved through the one composite-addressing resolver (registry::resolve_option) at every adapter-option read site so a fallback may select a shipped/local profile (e.g. a `ccs` profile). CONTEXT.md §cross-adapter-fallback reconciled ("ccs is a profile; cross-adapter fallback may target <adapter>:<profile>"). Contract-only this milestone: the node-wide fallback SETTING + its rate-limit invocation are deferred to the consuming milestone (the runtime path does not exist yet); this REQ guarantees the ADDRESSING resolves.
2026-06-23T09:38:03.2200968Z - Required stages: doc, unit
2026-06-23T09:38:03.2201002Z 
2026-06-23T09:38:03.2201101Z ### REQ-MANIFEST-7
2026-06-23T09:38:03.2204118Z - Title: Adapter-declared shortcut basename (M12-W2 follow-on): an optional `[adapter] shortcut_basename` manifest field names the basename the `spt endpoint run` picker bakes into the generated `<basename>-<id>` launcher shortcut (REQ-RUN-SHORTCUT). Absent ⇒ the harness-agnostic default `spt` (→ `spt-<id>`); an adapter sets it to brand its shortcuts (claude-spt → `cc` → `cc-<id>`), so the Claude-Code-ness lives in the PUBLISHED adapter manifest, never hardcoded in spt-core. The picker reads it from the RESOLVED manifest of the selected adapter (registry::resolve_option), falling back to `spt` when absent/empty/unresolvable. Additive + N-1-safe (serde-default Option, omitted from serialization when absent; old manifests parse clean); manifest.schema.json regenerated from the derive (ADR-0001, CI drift-gated). Documented in docs/MANIFEST.md `[adapter]` section + the claude-spt worked example — the adapter-author contract perri builds spt-claude-code against.
2026-06-23T09:38:03.2204245Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2204269Z 
2026-06-23T09:38:03.2204361Z ### REQ-MANIFEST-8
2026-06-23T09:38:03.2206506Z - Title: [adapter] host_binaries declares the harness executable basenames a kind="harness" adapter hosts agents inside (e.g. host_binaries = ["claude"]); bind-time pid→exe-basename match (case-insensitive, .exe-stripped) over the seed's parent_pid selects the candidate adapter set; zero matches → a friendly error naming the binary + the --adapter escape hatch. Additive + N-1-safe: optional Vec<String>, #[serde(default, skip_serializing_if = "Vec::is_empty")] (omitted-serialized like shortcut_basename, old manifests parse clean); manifest.schema.json regenerated from the derive (ADR-0001, CI drift-gated). The match-key for ADR-0021 adapter-agnostic bind-time resolution. (v0.9.0)
2026-06-23T09:38:03.2206637Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2206670Z 
2026-06-23T09:38:03.2206769Z ### REQ-SEAM-SPAWN
2026-06-23T09:38:03.2206869Z - Title: spawn-session seam
2026-06-23T09:38:03.2206971Z - Required stages: impl, unit
2026-06-23T09:38:03.2207003Z 
2026-06-23T09:38:03.2207112Z ### REQ-SEAM-POSTSPAWN
2026-06-23T09:38:03.2207242Z - Title: post-spawn / api bind seam with boot nonce
2026-06-23T09:38:03.2207351Z - Required stages: impl, unit
2026-06-23T09:38:03.2207384Z 
2026-06-23T09:38:03.2207480Z ### REQ-SEAM-PSYCHE
2026-06-23T09:38:03.2207732Z - Title: spawn-psyche seam (fresh + resume templates)
2026-06-23T09:38:03.2207843Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2207876Z 
2026-06-23T09:38:03.2207971Z ### REQ-SEAM-HISTORY
2026-06-23T09:38:03.2208150Z - Title: History subsystem (fetcher / locate-normalize / native store)
2026-06-23T09:38:03.2208256Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2208285Z 
2026-06-23T09:38:03.2208370Z ### REQ-SEAM-ACTIVITY
2026-06-23T09:38:03.2208537Z - Title: Activity/idle reported via api sentinels, not PTY quiescence
2026-06-23T09:38:03.2208633Z - Required stages: impl, unit
2026-06-23T09:38:03.2208666Z 
2026-06-23T09:38:03.2208756Z ### REQ-SEAM-INJECT
2026-06-23T09:38:03.2208919Z - Title: inject-input methods configurable per activity-state
2026-06-23T09:38:03.2209090Z - Required stages: impl, unit
2026-06-23T09:38:03.2209114Z 
2026-06-23T09:38:03.2209206Z ### REQ-SEAM-RESUME
2026-06-23T09:38:03.2209419Z - Title: resume-session seam (fresh-with-preload / continue-existing)
2026-06-23T09:38:03.2209539Z - Required stages: impl, unit
2026-06-23T09:38:03.2209568Z 
2026-06-23T09:38:03.2209663Z ### REQ-SEAM-CAPABILITY
2026-06-23T09:38:03.2209802Z - Title: Hostable endpoint-types capability declaration
2026-06-23T09:38:03.2210010Z - Required stages: impl, unit
2026-06-23T09:38:03.2210044Z 
2026-06-23T09:38:03.2210136Z ### REQ-SEAM-UPDATE
2026-06-23T09:38:03.2210292Z - Title: Adapter-update avenue (file-pull / delegated command)
2026-06-23T09:38:03.2210391Z - Required stages: impl, unit
2026-06-23T09:38:03.2210419Z 
2026-06-23T09:38:03.2210510Z ### REQ-API-1
2026-06-23T09:38:03.2210674Z - Title: api prefix and adapter_name on every machinery invocation
2026-06-23T09:38:03.2210775Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2210804Z 
2026-06-23T09:38:03.2210900Z ### REQ-API-2
2026-06-23T09:38:03.2211080Z - Title: The api subcommand surface (bind/listen/poll/state/worker/boundary/...)
2026-06-23T09:38:03.2211190Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2211214Z 
2026-06-23T09:38:03.2211308Z ### REQ-API-3
2026-06-23T09:38:03.2211443Z - Title: commune/signoff are file-drops, not commands
2026-06-23T09:38:03.2211552Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2211585Z 
2026-06-23T09:38:03.2211671Z ### REQ-API-4
2026-06-23T09:38:03.2213126Z - Title: api resolves the adapter manifest (+ profile + install dir) from `--adapter name:profile` via the registry when `--manifest` is omitted; `--manifest` becomes an optional OVERRIDE (unregistered / local-dev manifests). Removes the require-both-flags redundancy — a registered adapter's live bringup / digest / capability needs only `--adapter` — and yields the precise install dir (the record's source_dir) rather than the --manifest parent, closing the copy-mode psyche-binary edge (v0.8.0)
2026-06-23T09:38:03.2213225Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2213253Z 
2026-06-23T09:38:03.2213335Z ### REQ-START-1
2026-06-23T09:38:03.2213518Z - Title: Adapters never resolve SPT_HOME; binary on PATH; api bridging only
2026-06-23T09:38:03.2213623Z - Required stages: impl, unit
2026-06-23T09:38:03.2213652Z 
2026-06-23T09:38:03.2213738Z ### REQ-START-2
2026-06-23T09:38:03.2213870Z - Title: Harness-hosted startup: api seed then listen
2026-06-23T09:38:03.2213981Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2214010Z 
2026-06-23T09:38:03.2214105Z ### REQ-START-3
2026-06-23T09:38:03.2214267Z - Title: spt-hosted startup: spawn-session then api bind (no file)
2026-06-23T09:38:03.2214372Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2214400Z 
2026-06-23T09:38:03.2214495Z ### REQ-START-4
2026-06-23T09:38:03.2214625Z - Title: Adapter-injected env aliases (SPT/OWL/LIVE)
2026-06-23T09:38:03.2214724Z - Required stages: impl, unit
2026-06-23T09:38:03.2214753Z 
2026-06-23T09:38:03.2214838Z ### REQ-START-5
2026-06-23T09:38:03.2217677Z - Title: Adapter-agnostic harness-hosted seed + bind-time adapter/profile resolution (ADR-0021): `api seed` carries only parent_pid + session_id (+ optional cwd), no --adapter — a pure "a harness session exists at this pid" record; --adapter becomes an OPTIONAL override across the whole api group (an explicit name[:profile] for adapter dev, never required). Omitted, listen/poll resolve the owning adapter/profile AT BIND as a pure read against the live registry — never a seed-time snapshot that can drift: seed parent_pid → exe basename → host_binaries candidate set (REQ-MANIFEST-8) → active-profile pointer (REQ-INSTALL-12) primary, else greatest-registered_at_ms candidate base profile (name-asc tie) → friendly zero-match error. Covers BOTH LiveAgent (listen) and ReadyAgent (poll) bringup. Restores legacy parity: `$LIVE start <id>` → `$SPT listen <id>` with no mandatory --adapter, one generic SessionStart hook per harness binary. (v0.9.0)
2026-06-23T09:38:03.2217807Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2217841Z 
2026-06-23T09:38:03.2217925Z ### REQ-EP-1
2026-06-23T09:38:03.2218054Z - Title: Day-one endpoint types; open type system
2026-06-23T09:38:03.2218175Z - Required stages: impl, unit
2026-06-23T09:38:03.2218212Z 
2026-06-23T09:38:03.2218297Z ### REQ-EP-2
2026-06-23T09:38:03.2218446Z - Title: Agent endpoints vs Shells distinction in the type model
2026-06-23T09:38:03.2218763Z - Required stages: impl, unit
2026-06-23T09:38:03.2218797Z 
2026-06-23T09:38:03.2218879Z ### REQ-EP-3
2026-06-23T09:38:03.2219136Z - Title: Messaging payloads carry typed operation commands + file blobs
2026-06-23T09:38:03.2219236Z - Required stages: impl, unit
2026-06-23T09:38:03.2219283Z 
2026-06-23T09:38:03.2219374Z ### REQ-EP-4
2026-06-23T09:38:03.2219517Z - Title: PresenceChannel broker endpoint (seam day-one)
2026-06-23T09:38:03.2219607Z - Required stages: impl, unit
2026-06-23T09:38:03.2219641Z 
2026-06-23T09:38:03.2219732Z ### REQ-EP-5
2026-06-23T09:38:03.2220367Z - Title: Concrete shell instantiation model: spawn-mints-instance (vs relink/online), registered-on-node permission + broadcast-is-discovery, per-shell require_approval gate, max_instances_per_owner + over_cap, instance aliasing, discovery scope
2026-06-23T09:38:03.2220466Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2220499Z 
2026-06-23T09:38:03.2220585Z ### REQ-EP-6
2026-06-23T09:38:03.2221999Z - Title: Gateway type acceptance: a Gateway-typed perch binds (api bind --type, open type system — un-hardcode the live_agent default), advertises/addressable like any endpoint, owns shells (owner validation not agent-family-gated), subscribes to digests, and is the user-msg identity gate's user-backed origin (REQ-MSG-5); in-tree mock-gateway fixture (R-DOCS-2 pattern, no downstream adapter code). Cross-node WAN Gateway-origin (registry endpoint_type trust) tracked by REQ-MSG-6
2026-06-23T09:38:03.2222098Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2222131Z 
2026-06-23T09:38:03.2222216Z ### REQ-EP-7
2026-06-23T09:38:03.2223837Z - Title: Durable live-role.md: a per-agent broad-purpose statement in tracked/agents/<id>/ beside live-context.md (replicates with the mind on the same a-<id> branch); renders FIRST at start-transition context injection (role -> live-context -> project-context); SOLE writer `spt endpoint role --overwrite <file>` — mechanical no-automated-writer guarantee (echo-commune ingest / signoff / Psyche reconcile structurally exclude it). The user-backed-origin hard gate on the writer is a deferred later tightening (rides the user-msg identity plumbing)
2026-06-23T09:38:03.2232879Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2232916Z 
2026-06-23T09:38:03.2233030Z ### REQ-EP-8
2026-06-23T09:38:03.2236103Z - Title: AlwaysOnEndpoint: a resident, addressable, mindless endpoint whose adapter binary the daemon supervises continuously — register-triggered by an adapter-option's `[always-on]` manifest section, one supervised binary per `<adapter>[:profile]`, running independent of agent liveness. It self-manages its `#`-addressed channel endpoints via the existing `api bind` (one connection fronts many). The SECOND class of spt-core-boot-launched third-party binary (after the shell wake-watcher); supervision reuses the wake-watcher scaffolding (backoff / give-up latch / one-per-instance lock / orphan-kill / brain-side reconcile) MINUS the offline-only flip — always online, never resting (no dormant/suspended states). Two-way: agents message it; it may call `endpoint wake <id>`, target-side authorized (REQ-INST-3/6 wake resolution + access whitelist + shell_wake_spawn_anywhere — no caller-ownership gate). First consumer downstream: spt-discord.
2026-06-23T09:38:03.2236236Z - Required stages: 
2026-06-23T09:38:03.2236269Z 
2026-06-23T09:38:03.2236361Z ### REQ-EP-9
2026-06-23T09:38:03.2237959Z - Title: `#` always-on address sigil: a reserved LEADING sigil marking an AlwaysOnEndpoint, extending the REQ-INST-10 grammar to `[subnet:]#id[@node]`. Mandatory + bijective — `#name` ⟺ always-on endpoint, bare `name` ⟺ agent endpoint — so the router resolves endpoint class from the address alone, before any registry lookup. Sits ABOVE REQ-HAZARD-ID-CHARSET: the address parser strips the single leading `#` before id validation, so the bare/stored id stays charset-clean and a mid-id `#` remains rejected (the charset contract is unchanged).
2026-06-23T09:38:03.2238059Z - Required stages: 
2026-06-23T09:38:03.2238206Z 
2026-06-23T09:38:03.2238312Z ### REQ-INST-1
2026-06-23T09:38:03.2238464Z - Title: endpoint ID vs instance split (adapter-agnostic ID)
2026-06-23T09:38:03.2238564Z - Required stages: 
2026-06-23T09:38:03.2238598Z 
2026-06-23T09:38:03.2238693Z ### REQ-INST-2
2026-06-23T09:38:03.2238807Z - Title: Per-node files, synced Psyche mind
2026-06-23T09:38:03.2238918Z - Required stages: impl, unit
2026-06-23T09:38:03.2239041Z 
2026-06-23T09:38:03.2239132Z ### REQ-INST-3
2026-06-23T09:38:03.2239280Z - Title: Dormant (warm) / suspended (cold) resting states
2026-06-23T09:38:03.2239393Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2239427Z 
2026-06-23T09:38:03.2239518Z ### REQ-INST-4
2026-06-23T09:38:03.2239689Z - Title: active to dormant/suspended fires a transition echo commune
2026-06-23T09:38:03.2239798Z - Required stages: impl, unit
2026-06-23T09:38:03.2239831Z 
2026-06-23T09:38:03.2239927Z ### REQ-INST-5
2026-06-23T09:38:03.2240103Z - Title: Two-tier context sync (live to all, project to same-project)
2026-06-23T09:38:03.2240208Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2240242Z 
2026-06-23T09:38:03.2240333Z ### REQ-INST-6
2026-06-23T09:38:03.2240494Z - Title: Deferred messages not delivered to dormant/suspended instances
2026-06-23T09:38:03.2240591Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2240618Z 
2026-06-23T09:38:03.2240704Z ### REQ-INST-7
2026-06-23T09:38:03.2240838Z - Title: Subnet registry + bare-id resolution policy
2026-06-23T09:38:03.2240947Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2240975Z 
2026-06-23T09:38:03.2241061Z ### REQ-INST-8
2026-06-23T09:38:03.2241206Z - Title: Remote-control mode distinct from local operation
2026-06-23T09:38:03.2241309Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2241343Z 
2026-06-23T09:38:03.2241438Z ### REQ-INST-9
2026-06-23T09:38:03.2241619Z - Title: Multi-subnet membership (same-user N subnets; cross-user seam)
2026-06-23T09:38:03.2241719Z - Required stages: impl, unit
2026-06-23T09:38:03.2241758Z 
2026-06-23T09:38:03.2241855Z ### REQ-INST-10
2026-06-23T09:38:03.2242038Z - Title: Qualified addressing [subnet:]id[@node] + ambiguity forces qualification
2026-06-23T09:38:03.2242143Z - Required stages: impl, unit
2026-06-23T09:38:03.2242176Z 
2026-06-23T09:38:03.2242265Z ### REQ-INST-11
2026-06-23T09:38:03.2242465Z - Title: spt rename <id> rippled to all instances (collision-checked, 6.5-reconciled)
2026-06-23T09:38:03.2242571Z - Required stages: impl, unit
2026-06-23T09:38:03.2242598Z 
2026-06-23T09:38:03.2242684Z ### REQ-INST-12
2026-06-23T09:38:03.2242960Z - Title: Endpoint visibility per-(endpoint,subnet): excluded semantics, OR-of-defaults + override, gates sync
2026-06-23T09:38:03.2243056Z - Required stages: impl, unit
2026-06-23T09:38:03.2243085Z 
2026-06-23T09:38:03.2243161Z ### REQ-INST-13
2026-06-23T09:38:03.2243434Z - Title: Subnet-exclusive sync + per-endpoint subnet-membership list
2026-06-23T09:38:03.2243533Z - Required stages: impl, unit
2026-06-23T09:38:03.2243566Z 
2026-06-23T09:38:03.2243661Z ### REQ-INST-14
2026-06-23T09:38:03.2244020Z - Title: Resource advertisement (subnet resource registry): free-text blurb, both-authored, registry projection, visibility/whitelist-gated
2026-06-23T09:38:03.2244120Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2244152Z 
2026-06-23T09:38:03.2244243Z ### REQ-INST-15
2026-06-23T09:38:03.2244933Z - Title: Immutable home subnet (assigned at creation: auto-if-one/ask-if-many) + spt fork (cross-subnet clone to a new identity, copy-then-diverge, not re-home); adapter chosen at creation from registered hostable adapters, changed only via launch/resume-under-new (ADR-0010)
2026-06-23T09:38:03.2245044Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2245067Z 
2026-06-23T09:38:03.2245155Z ### REQ-REACH-1
2026-06-23T09:38:03.2245299Z - Title: Off-node remote-drive detection + file transfer
2026-06-23T09:38:03.2245409Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2245438Z 
2026-06-23T09:38:03.2245522Z ### REQ-REACH-2
2026-06-23T09:38:03.2245771Z - Title: Remote command execution (deferred, consent-gated)
2026-06-23T09:38:03.2245866Z - Required stages: 
2026-06-23T09:38:03.2245894Z 
2026-06-23T09:38:03.2245982Z ### REQ-MSG-1
2026-06-23T09:38:03.2246410Z - Title: Local message delivery: TCP-first to a registered address, spool fallback when offline; id->address via registry (stale-clean first); reply routing (__REPLY_TO__)
2026-06-23T09:38:03.2246510Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2246533Z 
2026-06-23T09:38:03.2246626Z ### REQ-MSG-2
2026-06-23T09:38:03.2246882Z - Title: spt binary CLI surface: send/ring/ready(+--once)/list/stop/whoami, stable arg shapes + exit codes
2026-06-23T09:38:03.2246973Z - Required stages: impl, unit
2026-06-23T09:38:03.2247002Z 
2026-06-23T09:38:03.2247091Z ### REQ-MSG-3
2026-06-23T09:38:03.2247448Z - Title: Ready-agent lifecycle: register perch (info.json + listener + registry address) on ready, drain spooled backlog on startup, clean teardown
2026-06-23T09:38:03.2247553Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2247591Z 
2026-06-23T09:38:03.2247680Z ### REQ-MSG-4
2026-06-23T09:38:03.2248480Z - Title: Listener stream stdout emits EVENT envelope lines (sister-format, ADR-0001): parse the __REPLY_TO__ frame, pass pre-formed typed envelopes through verbatim (no double-wrap), compose <EVENT type="msg" from=…> otherwise, chunk oversized lines into EVENT-PART
2026-06-23T09:38:03.2248586Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2248619Z 
2026-06-23T09:38:03.2248709Z ### REQ-MSG-ENVELOPE
2026-06-23T09:38:03.2252419Z - Title: The <EVENT type="msg" from=…>body</EVENT> envelope (spt-proto::event, the ADR-0001 grammar) is the SOLE canonical arriving-message format at EVERY harness arriving-message surface on an AGENT perch — api listen AND api poll/worker-poll, byte-identical (reverses REQ-MSG-4's 'hook drains keep the raw frame by contract'). SCOPE CARVE-OUT: the shell-command relay (api poll <shell-id> --link, cmd_poll_shell) is a distinct internal transport carrying RAW MAC'd stamped frames the shell child consumes verbatim — NOT an arriving-message surface, deliberately EXEMPT from <EVENT> composition (notify_shell_e2e guards this boundary). __REPLY_TO__ — mis-elevated during the clean-room port to a fake ADR-0001 'stable wire format' (spt-msg/wire.rs, lib.rs) — is REMOVED entirely (spool format_row, the spt-msg TCP frame, emit parse_frame); (from, body) carried structurally, <EVENT> composed once at the delivery boundary. No legacy sister-interop (spt-core never required it). Reply-correlation rebinds onto the structural from / <EVENT from=…> attribute (ADR-0009 access-gate + ADR-0012 Psyche/spt-live reply-target). Self-delimiting by construction → finding F-002 (non-self-delimiting multi-message poll) dissolves. ADR-0020.
2026-06-23T09:38:03.2252550Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2252717Z 
2026-06-23T09:38:03.2252812Z ### REQ-MSG-5
2026-06-23T09:38:03.2253506Z - Title: user-msg envelope kind + daemon identity gate: a Gateway endpoint / the local user's CLI author user-msg (the user's authority); agent-family senders re-stamped to plain msg; identity-gated never payload-trusted (KH 7.3/7.5); wire-additive (N-1 receivers tolerate the new type)
2026-06-23T09:38:03.2253626Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2253660Z 
2026-06-23T09:38:03.2253750Z ### REQ-MSG-6
2026-06-23T09:38:03.2255277Z - Title: cross-node Gateway user-msg honored via advertised endpoint_type: a user-msg from a Gateway-typed origin survives the receive_wan funnel as user-msg (vs the fail-closed re-stamp), keyed on the QUIC-handshake-proven origin node (never wire `from`). Trust boundary = subnet membership (operator-ratified 2026-06-13); no defense against an in-subnet member forging the type. Instance.endpoint_type is an additive serde-default field extending REQ-INST-7's data model. Absent/unknown type → re-stamp (N-1 rollout grace)
2026-06-23T09:38:03.2255389Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2255422Z 
2026-06-23T09:38:03.2255522Z ### REQ-NODE-IDENTITY
2026-06-23T09:38:03.2255834Z - Title: Ed25519 identity primitive: keypair, detached sign/verify, stable pubkey<->hex
2026-06-23T09:38:03.2255936Z - Required stages: impl, unit
2026-06-23T09:38:03.2255969Z 
2026-06-23T09:38:03.2256059Z ### REQ-NET-1
2026-06-23T09:38:03.2256232Z - Title: WAN messaging first-class, behind default-on net feature flag
2026-06-23T09:38:03.2256327Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2256355Z 
2026-06-23T09:38:03.2256435Z ### REQ-NET-2
2026-06-23T09:38:03.2256603Z - Title: n0 relay default + self-host knob + plain-language disclosure
2026-06-23T09:38:03.2256702Z - Required stages: impl
2026-06-23T09:38:03.2256736Z 
2026-06-23T09:38:03.2256822Z ### REQ-NET-3
2026-06-23T09:38:03.2256984Z - Title: Cross-node Psyche sync over P2P replaces gh-repo-sync
2026-06-23T09:38:03.2257103Z - Required stages: impl, unit
2026-06-23T09:38:03.2257137Z 
2026-06-23T09:38:03.2257233Z ### REQ-PAIR-1
2026-06-23T09:38:03.2257332Z - Title: TOTP-seeded SPAKE2 pairing
2026-06-23T09:38:03.2257437Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2257466Z 
2026-06-23T09:38:03.2257557Z ### REQ-PAIR-2
2026-06-23T09:38:03.2257685Z - Title: Local trust store with TOFU + warn-on-change
2026-06-23T09:38:03.2257781Z - Required stages: 
2026-06-23T09:38:03.2257815Z 
2026-06-23T09:38:03.2257900Z ### REQ-PAIR-3
2026-06-23T09:38:03.2258032Z - Title: Fetch current pairing code from any paired node
2026-06-23T09:38:03.2258137Z - Required stages: impl, unit
2026-06-23T09:38:03.2258170Z 
2026-06-23T09:38:03.2258259Z ### REQ-PAIR-4
2026-06-23T09:38:03.2258363Z - Title: Subnet naming on first pairing
2026-06-23T09:38:03.2258454Z - Required stages: impl, unit
2026-06-23T09:38:03.2258488Z 
2026-06-23T09:38:03.2258574Z ### REQ-PAIR-5
2026-06-23T09:38:03.2258860Z - Title: Multi-subnet pairing: subnet-name discovery input, create-new-names-up-front, rendezvous-token hashing
2026-06-23T09:38:03.2259045Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2259079Z 
2026-06-23T09:38:03.2259174Z ### REQ-PAIR-6
2026-06-23T09:38:03.2259414Z - Title: Elevation-gated per-subnet code fetch (UAC/root or elevated agent; else authenticator app)
2026-06-23T09:38:03.2259517Z - Required stages: impl, unit
2026-06-23T09:38:03.2259551Z 
2026-06-23T09:38:03.2259641Z ### REQ-PAIR-7
2026-06-23T09:38:03.2259790Z - Title: Subnet icon (inline image metadata, GUI-only consumer)
2026-06-23T09:38:03.2259880Z - Required stages: 
2026-06-23T09:38:03.2259904Z 
2026-06-23T09:38:03.2259994Z ### REQ-SUBNET-1
2026-06-23T09:38:03.2260299Z - Title: spt subnet noun namespace: status view (bare + status [NAME] [--nodes]), create (QR/otpauth), show-code; spt pair deleted
2026-06-23T09:38:03.2260396Z - Required stages: impl, unit
2026-06-23T09:38:03.2260429Z 
2026-06-23T09:38:03.2260509Z ### REQ-SUBNET-2
2026-06-23T09:38:03.2260837Z - Title: Guided join e2e: spt subnet join CLI initiator + always-on daemon pairing responder
2026-06-23T09:38:03.2260942Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2260975Z 
2026-06-23T09:38:03.2261077Z ### REQ-SUBNET-3
2026-06-23T09:38:03.2261329Z - Title: Node labels: hostname-default, gossiped, addressable in @node qualifiers (refuse-on-ambiguity)
2026-06-23T09:38:03.2261424Z - Required stages: impl, unit
2026-06-23T09:38:03.2261448Z 
2026-06-23T09:38:03.2261538Z ### REQ-SUBNET-4
2026-06-23T09:38:03.2261806Z - Title: Subnet membership mutations elevation-gated (create = seed reveal; join = trust-boundary enrollment)
2026-06-23T09:38:03.2261915Z - Required stages: impl, unit
2026-06-23T09:38:03.2261938Z 
2026-06-23T09:38:03.2262025Z ### REQ-DOCS-6
2026-06-23T09:38:03.2262321Z - Title: spt how-to <topic>: in-binary task-oriented agent instructions (anti-drift; quickstart prompts point agents at it)
2026-06-23T09:38:03.2262425Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2262459Z 
2026-06-23T09:38:03.2262544Z ### REQ-SEC-1
2026-06-23T09:38:03.2262907Z - Title: Per-endpoint access whitelist: origin-node gate, stateful-firewall (reply/outbound exempt), node-now/user-later, outer gate before grants
2026-06-23T09:38:03.2263120Z - Required stages: impl, unit
2026-06-23T09:38:03.2263144Z 
2026-06-23T09:38:03.2263230Z ### REQ-NOTIF-1
2026-06-23T09:38:03.2263576Z - Title: Notification primitive: per-subnet replicated spool, seen/dismissed, resurface-at-boundary, subsumes update+consent prompts
2026-06-23T09:38:03.2263672Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2263705Z 
2026-06-23T09:38:03.2263794Z ### REQ-NOTIF-2
2026-06-23T09:38:03.2264043Z - Title: spt notify (agent-issued subnet notif) + notif_command manifest seam (harness + shell adapters)
2026-06-23T09:38:03.2264152Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2264181Z 
2026-06-23T09:38:03.2264268Z ### REQ-UPD-1
2026-06-23T09:38:03.2264381Z - Title: Peer-propagated update over P2P
2026-06-23T09:38:03.2264481Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2264506Z 
2026-06-23T09:38:03.2264597Z ### REQ-UPD-2
2026-06-23T09:38:03.2264734Z - Title: All binaries signature-verified before handoff
2026-06-23T09:38:03.2264840Z - Required stages: impl, unit
2026-06-23T09:38:03.2264873Z 
2026-06-23T09:38:03.2264958Z ### REQ-UPD-3
2026-06-23T09:38:03.2265130Z - Title: No endpoint process terminates/suspends during self-update
2026-06-23T09:38:03.2265222Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2265259Z 
2026-06-23T09:38:03.2265345Z ### REQ-UPD-4
2026-06-23T09:38:03.2265513Z - Title: Update gated on user confirmation by default; opt-in full-auto
2026-06-23T09:38:03.2265616Z - Required stages: impl, unit
2026-06-23T09:38:03.2265644Z 
2026-06-23T09:38:03.2265736Z ### REQ-UPD-5
2026-06-23T09:38:03.2265871Z - Title: spt-core ripple-updates registered adapters
2026-06-23T09:38:03.2265973Z - Required stages: impl, unit
2026-06-23T09:38:03.2266006Z 
2026-06-23T09:38:03.2266097Z ### REQ-UPD-6
2026-06-23T09:38:03.2266887Z - Title: Platform-targeted update sets and debug rollout: signed multi-platform update metadata, recipient platform selection, channel-scoped monotonic counters, debug-channel opt-in via release-key overlay, local staging plus pull-based peer propagation, and maintainer-only convergence tooling (ADR-0016)
2026-06-23T09:38:03.2267000Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2267029Z 
2026-06-23T09:38:03.2267126Z ### REQ-UPD-7
2026-06-23T09:38:03.2269281Z - Title: Origin-source update bootstrap (`spt update fetch`): pull the latest signed release directly from the GitHub release origin (`SaberMage/spt-releases`) — the per-platform artifact + its `<asset>.release.json` SignedRelease metadata — and stage it through the EXISTING verify→stage pipeline (the same `plan_verified` gate: two-key signature + channel + monotonic rollback floor + SHA-256), after which the normal consent-notif / `spt update apply` flow is unchanged. Closes the peer-only-discovery gap (REQ-UPD-1): a first-in-fleet / isolated node can update with no peer to pull from. The signed-release anchor keeps the GitHub transport untrusted-but-verified.
2026-06-23T09:38:03.2269382Z - Required stages: impl, unit
2026-06-23T09:38:03.2269429Z 
2026-06-23T09:38:03.2269514Z ### REQ-UPD-8
2026-06-23T09:38:03.2271984Z - Title: Platform-safe `spt update fetch` + apply platform-guard (v0.3.1 cross-OS brick fix): `spt update fetch` stages the signed multi-platform `SignedUpdateSet` (`update-set.json` + every platform artifact it names), never a platform-blind single `SignedRelease`, so local apply selects `current_platform()` and P2P re-serve lets each peer select ITS own platform. Defense-in-depth: `apply_staged` REFUSES a staged single-release artifact unless it is platform-stamped for THIS node (an unstamped pre-v0.3.2 single, or a single stamped for another OS, fail-safe refuses — the guard that alone prevents the v0.3.1 brick where a Linux ELF was applied as `spt.exe`). UX: a friendly post-apply message (`Updated spt-core to vX.Y.Z.` + changelog URL) driven by an additive `product_version` metadata field, with a release-counter fallback when absent.
2026-06-23T09:38:03.2272089Z - Required stages: impl, unit
2026-06-23T09:38:03.2272117Z 
2026-06-23T09:38:03.2272318Z ### REQ-UPD-9
2026-06-23T09:38:03.2274847Z - Title: `gh_release` adapter [update] avenue (optional signing): an adapter declares `[update] avenue = "gh_release", repo = "user/repo"` (+ optional `asset`, default `adapter.spt`; + optional Ed25519 `signing_key`); spt-core's ripple compares the repo's LATEST GitHub release version against the installed adapter version and, when newer, auto-updates by fetching the release `.spt` archive (the REQ-INSTALL-9 `--release` fetch primitive) → verifies the `.spt` against `signing_key` if declared, else HTTPS+GitHub first-acquisition trust → re-extracts + re-registers the adapter root. Lets a harness adapter ship updates from its own GitHub releases with NO signing tooling or plugin coupling (removes the perri file_pull/delegated avenue blockers). Acquisition-trust mirrors `--release` + the installer first-fetch; does not alter spt-core self-update (REQ-UPD-1..8).
2026-06-23T09:38:03.2274951Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2274989Z 
2026-06-23T09:38:03.2275081Z ### REQ-TERM-1
2026-06-23T09:38:03.2275242Z - Title: Process-supervisor terminal wrapper hosting broker PTYs
2026-06-23T09:38:03.2275347Z - Required stages: impl, unit
2026-06-23T09:38:03.2275371Z 
2026-06-23T09:38:03.2275462Z ### REQ-TERM-2
2026-06-23T09:38:03.2275632Z - Title: session-surface abstraction; send-keys + send-line injection
2026-06-23T09:38:03.2275743Z - Required stages: impl, unit
2026-06-23T09:38:03.2275772Z 
2026-06-23T09:38:03.2275862Z ### REQ-TERM-3
2026-06-23T09:38:03.2275991Z - Title: Byte-stream remote terminal streaming for v1
2026-06-23T09:38:03.2276096Z - Required stages: impl, unit
2026-06-23T09:38:03.2276130Z 
2026-06-23T09:38:03.2276209Z ### REQ-TERM-4
2026-06-23T09:38:03.2276676Z - Title: Live activity buffer (session digest): projection of normalized session logs, snapshot-pull (spt endpoint digest) + structured-delta-stream contract + api digest-entry push
2026-06-23T09:38:03.2276790Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2276822Z 
2026-06-23T09:38:03.2276912Z ### REQ-TERM-5
2026-06-23T09:38:03.2278386Z - Title: Adapter-declared digest extractor seam: a `[digest]` manifest section declaring an imperative extractor (native harness log -> the {role,text,tool,ts} contract; defaults to the [history] source files with an own-source escape hatch), `api digest-entry` push fallback, register-time validation of the section, adapter-declared presentation defaults (window depth, arg-truncation, sprint-collapse) that any consumer may override, and a `spt adapter digest-proof` author tool plus runtime skip-diagnostics (no silent drop). Reverses M9's no-manifest-seam stance; no declarative DSL.
2026-06-23T09:38:03.2278495Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2278529Z 
2026-06-23T09:38:03.2278611Z ### REQ-TERM-6
2026-06-23T09:38:03.2279822Z - Title: Thread-spanning digest across session boundaries: a per-endpoint session ledger (`<perch>/sessions.log`) appended at first bind and by `api boundary` on `/clear`|`/compact` session rotation, the digest enumerating the last K sessions so its rolling window bridges a boundary, and a distinctive in-timeline boundary marker (DigestEntry::Boundary). The digest follows the live-agent thread, not a single session.
2026-06-23T09:38:03.2279933Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2279966Z 
2026-06-23T09:38:03.2280046Z ### REQ-TERM-7
2026-06-23T09:38:03.2281173Z - Title: Two-origin digest merge: spt-owned context-injection entries (psyche_download | echo_mirror | owl_message) appended by spt to the endpoint `digest.log`, timestamp-interleaved with the adapter's extracted activity records into one ordered timeline, via a distinct context-injection record category. Data model only this milestone; GUI collapse/expand and the echo-reads-digest delta loop are deferred to the surfaces that consume them.
2026-06-23T09:38:03.2281276Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2281309Z 
2026-06-23T09:38:03.2281386Z ### REQ-FRONT-1
2026-06-23T09:38:03.2281554Z - Title: Day-one launcher/manager frontend (list/launch/attach/init)
2026-06-23T09:38:03.2281739Z - Required stages: 
2026-06-23T09:38:03.2281774Z 
2026-06-23T09:38:03.2281869Z ### REQ-HOST-RUN-1
2026-06-23T09:38:03.2284227Z - Title: spt-hosted harness bringup: `spt endpoint run` spawns an adapter's `[session.self]` command template into a broker-held PTY (the spawn-session seam, brain.rs spawn_session_pid — same broker path shellhost.rs launch_shell_brokered_in uses for shells, now for kind="harness" self-role), registers the perch under the given endpoint id, returns the id. Reverses today's harness-hosted-only launch (external launcher → `api bind`). Non-interactive flag set (--adapter <a[:profile]> --id <id> --create --resume <session> --attach|--start|--view) covers every terminal action of the W2 interactive picker so shortcuts (cc-<id>) bake fully non-interactive launches; composite adapter:profile resolves via registry::resolve_option leaf-replace overlay.
2026-06-23T09:38:03.2284331Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2284369Z 
2026-06-23T09:38:03.2284464Z ### REQ-RC-1
2026-06-23T09:38:03.2286445Z - Title: `spt rc <id>` — user CLI attaching a local terminal to a broker-held PTY, reusing the cross-node attach machinery (attach.rs request_attach → send_attach_input pump, spt-net AttachRecord codec); local attach is the degenerate single-node case of the cross-node path (rides REQ-TERM-3 byte-stream streaming). Read-only `--view` (watch, no stdin forwarded). Clean detach that does NOT terminate the broker-held session (KNOWN-HAZARDS: PTY ownership stays with the broker; no termination on detach). Explicit detach keybind that cannot collide with harness passthrough input (legacy capsule used a ctrl-b prefix); documented. ConPTY DSR auto-answer in the attach reader (hazard 5.5).
2026-06-23T09:38:03.2286556Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2286590Z 
2026-06-23T09:38:03.2286713Z ### REQ-HOST-RUN-2
2026-06-23T09:38:03.2288379Z - Title: Project-scoped working directory for spt-hosted bringup: `spt endpoint run` lands the broker-spawned harness PTY in the user's PROJECT cwd, not the daemon's, via an additive `SpawnReq.cwd` field carried through the broker PTY spawn (portable-pty CommandBuilder cwd). N-1-safe wire change (additive, defaulted). Required because the consumer (Claude Code) is project-scoped: broker-inherited cwd = the daemon's cwd = the wrong `.claude`, wrong session history, wrong digest source; `cc <id>` at a project root MUST land the harness in that project. W1 ships broker-inherited cwd as a bringup-proof shortcut only; this REQ must land before the M12 gate (doyle, 2026-06-14).
2026-06-23T09:38:03.2288502Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2288536Z 
2026-06-23T09:38:03.2288622Z ### REQ-RUN-PICKER
2026-06-23T09:38:03.2293448Z - Title: Interactive `spt endpoint run` picker (ratatui TUI): bare `spt endpoint run` (no --adapter/--id) enters an in-process picker (flags-present = the REQ-HOST-RUN-1 non-interactive path, untouched). Layer 1 picks kind (Create new | Pick existing). Create-new: choose a registered kind="harness" adapter with its shipped+local profiles tree-nested (registry::registered / manifest.profiles / local_profile_names) → enter a charset-validated id → start. Pick-existing: category select (left/right) over [<cwd-project> | Local node | Subnet], endpoints grouped + alphabetically sorted per category, a status square per endpoint (online green ■ / offline gray ▢ — the blue "attached" tri-state + Kick are DEFERRED to a broker attach-presence slice, M12-W2-RULING Q1), type-to-filter (`/`, nucleo-matcher), a pinned keybind legend, and a right-half two-pane description (harness adapter:profile · best-effort project history newest→oldest from the contextstore p-<project> branches, empty-if-none · `spt endpoint description`). Confirm layer offers status-dependent options — Attach/Start/View (rc pump / cmd_endpoint_run) · Instantiate-locally (remote) · Change-harness-adapter (offline) · Fork (cmd_fork) · Resume-from-history (offline+LOCAL only; enumerate spt_store::sessions::last_k, titles `<project> @ <ts> (…id5)`, feed session_id → cmd_endpoint_run --resume). A single action enum is the source of truth so a future tap-mode (phone PTY) layers on without re-coupling to keybinds. EVERY terminal action routes through cmd_endpoint_run / existing CLI fns — no second bringup path.
2026-06-23T09:38:03.2293673Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2293706Z 
2026-06-23T09:38:03.2293796Z ### REQ-RUN-SHORTCUT
2026-06-23T09:38:03.2298438Z - Title: `<basename>-<id>` launcher shortcut generation (picker `s` keybind, M12-W2-T2.4): from any pre-start options set the picker writes/updates a `<basename>-<id>` launcher at the project root baking the current selection's non-interactive `spt endpoint run` flags (terminal actions only: adapter[:profile] + id + (create|resume) + (start|attach|view); Kick/Instantiate/Change-adapter/Fork are interactive-only, not bakeable). BASENAME IS A PARAMETER (operator rev. 2026-06-14): harness-agnostic spt-core defaults to `spt` (→ `spt-<id>`); an adapter/flow OVERRIDES it (spt-claude-code → `cc`), so spt-core NEVER bakes `cc` (a harness name) into itself. The basename must be a DISTINCT token, never bare `spt` (a `spt.cmd` would shadow the real `spt.exe` only under cmd.exe cwd-first search, silently no-op in PowerShell/Unix, and self-recurse). The script is the CURRENT OS's native form — `.cmd` on Windows (NOT `.ps1`: default PATHEXT excludes `.ps1` so a bare/ext-less name never resolves one; `.cmd` is PATHEXT-resolvable), POSIX `sh` (+chmod +x) on Unix (a single portable form can't be both). The generated header documents the invocation reality (cmd.exe bare `<name>` in the project dir / PowerShell `.\<name>` / Unix `./<name>`; a truly-bare basename on PATH = a PATH-installed launcher, `/spt:setup`'s job). Overwrite is SENTINEL-guarded: the generator writes + checks a generated-by header marker — it overwrites its own prior output freely, but REFUSES + warns if a same-named file lacks the sentinel (never clobber a user file). Requires the additive `--create` flag on `Run{}` (the default-fresh made explicit; N-1-safe).
2026-06-23T09:38:03.2298586Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2298614Z 
2026-06-23T09:38:03.2298704Z ### REQ-ELEVATE-1
2026-06-23T09:38:03.2301969Z - Title: Cross-platform self-elevating re-launch for privilege-gated commands: a pure decision seam `decide_elevation_path(os, elevation, interactive_tty, has_display, has_pkexec, has_term_emulator) -> ElevatePath{AlreadyElevated, InlineSudo, UacWindow, Pkexec, TerminalEmulator, PrintHint}` selecting how to re-acquire privilege, and the per-OS impure launchers it dispatches — Windows UAC console (ShellExecuteW `runas` on the abs-exe + verbatim argv; the elevated child does the work, prints 'You can close this window', and pauses for a keypress; the original prints 'Elevated terminal launched…' and exits 0; NEVER pipes the child's stdout back across the privilege boundary), Linux desktop pkexec (preferred, native polkit GUI auth) else x-terminal-emulator -e sudo (fallback list x-terminal-emulator→gnome-terminal→konsole→xterm), the existing interactive-TTY inline sudo, and the headless/no-path floor that prints the absolute-path command. Reused by every gated command (not subnet-specific). Generalizes should_auto_elevate.
2026-06-23T09:38:03.2302091Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2302121Z 
2026-06-23T09:38:03.2302216Z ### REQ-WHOAMI-1
2026-06-23T09:38:03.2303797Z - Title: `spt whoami` is a thin ALIAS for `spt endpoint list` (full output: the SELF pin + the subnet roster) — the standalone bare-id command is dropped (the `id=$(spt whoami)` capture was never a real pattern: env vars don't persist between agent tool calls). The one new render: the `endpoint list` SELF pin carries the Self endpoint's authored `endpoint description` (info::read_info(...).resources) when present, inline after the liveness state. whoami stays a top-level hot-path verb (parse unchanged, REQ-MSG-9).
2026-06-23T09:38:03.2303904Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2304069Z 
2026-06-23T09:38:03.2304160Z ### REQ-RCVIEW-1
2026-06-23T09:38:03.2308536Z - Title: Remote-attach controller/viewer model (CONTEXT.md:317): a session's broker OutputLog serves ONE interactive controller (input + EXCLUSIVE PTY resize; its viewport sets the size, sent on attach + every window change via crossterm Event::Resize) plus ANY NUMBER of read-only `--view` attachers (output-only, no input, no resize; client-side letterbox — center+pad when larger, clip+1-line indicator when smaller; only the local ctrl-b d detach chord). Attach intent is three-valued (`Viewer | Control | Take`, wire-default Control): Control to a FREE endpoint becomes controller, Control to a CONTROLLED endpoint is REFUSED with guidance (`--view`/`--take`) — never auto-viewer, never silent-displace. Wire adds (additive, N-1 skip-unknown): `Request.intent`, `Resize{rows,cols}` (controller-only), `Size{rows,cols}` (→viewer), `Displaced{by}` (→displaced controller). The brain-resume cursor (delivered_through, ADR-0018) tracks the CONTROLLER ONLY; viewers replay from their own from_seq and never move it. Dormancy keys on the controller ONLY: controller attach wakes / controller detach goes dormant (even with viewers present); viewer attach/detach is wake-neutral and may watch a dormant endpoint as-is. v1: viewing is gated identically to driving — a viewer runs the same access_check(Unsolicited) as a controller (watching reveals full session contents = a real disclosure); a lighter distinct watch-gate is deferred to cross-subnet/finer-consent (CONTEXT.md:317 'driving ≠ watching' = the future seam).
2026-06-23T09:38:03.2308669Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2308703Z 
2026-06-23T09:38:03.2308798Z ### REQ-KICK-1
2026-06-23T09:38:03.2311323Z - Title: Explicit, loud controller displacement: `spt rc kick <target>` / `--take` (Take intent) kicks the incumbent controller and becomes controller; the displaced controller receives a LOUD `Displaced{by}` notice and is FULLY DETACHED (not demoted to a viewer). A default attach to a controlled endpoint is NEVER a silent displace (it is the Control busy-refusal). An old (N-1) rc omits intent → Control, so it can drive a free endpoint but CANNOT `--take` — it can never silently steal, and gets a clean busy-refusal instead. Taking control rides the same access_check(endpoint, origin, Unsolicited) as a normal control attach (if you may drive, you may take — no elevated kick policy). The picker surfaces 'Kick <node> and attach' (Take) only on a controlled (blue ■) endpoint, via the existing attach dispatch (single-bringup-path: intent is a parameter).
2026-06-23T09:38:03.2311450Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2311488Z 
2026-06-23T09:38:03.2311575Z ### REQ-PICKER-1
2026-06-23T09:38:03.2315206Z - Title: The picker renders a FOUR-state endpoint status (extending the W2 online/offline duality): the list-item square AND a color-coded STATUS line at the top of the pick-existing right-side details both show — gray OFFLINE; green ONLINE (online + PTY-controllable spt-hosted, not controlled); amber 'ONLINE - HARNESS ONLY' (online but NOT broker-PTY-controllable = harness-hosted, no broker PTY seat — today mis-shows green); blue 'ONLINE + CONTROLLED' (online + driven_by.is_some()). Derived on EndpointRow from {offline | controllable | driven_by} with precedence offline→gray, else driven_by→blue, else !controllable→amber, else green (driven_by outranks harness-only; mutually exclusive in practice — a harness-only endpoint has no broker PTY to control). The controllable discriminator is a NEW InfoJson.controllable: Option<bool> (serde-default, N-1-safe), stamped at the establish seam — cmd_listen (harness-hosted relay, no broker PTY) → Some(false); cmd_bind live_agent (spt-hosted broker PTY) → Some(true); absent → not-controllable (amber) default (harness-hosted is the common mis-reported case; one bind self-corrects). Store-projection-only (no live daemon query — doyle ruling). (v0.10.0)
2026-06-23T09:38:03.2315345Z - Required stages: impl, unit
2026-06-23T09:38:03.2315489Z 
2026-06-23T09:38:03.2315583Z ### REQ-PICKER-2
2026-06-23T09:38:03.2317388Z - Title: The picker's project-history loader reads the git-backed context store, not the bare working tree: data.rs project_history_for enumerates an endpoint's projects via the BranchStore branch set (the context store keeps per-project context in git branches — contextstore::project_branch(project_id), checked out to projects/<project>/<id>/ only on-demand) instead of raw std::fs::read_dir over the empty working tree (which returned empty for ALL rows incl wall-a — the operator bug). Ordered newest→oldest by branch commit recency; degrades to empty (informational pane), never fails. (v0.10.0)
2026-06-23T09:38:03.2317492Z - Required stages: impl, unit
2026-06-23T09:38:03.2317525Z 
2026-06-23T09:38:03.2317636Z ### REQ-PICKER-3
2026-06-23T09:38:03.2320135Z - Title: A self-owned subnet row reconciles its status to the LIVE roster: a Subnet-category row whose endpoint_id overlaps a local (is_local) roster id is self-owned (this node hosts it), so its status square is OVERRIDDEN with the live roster status — the WAN registry snapshot (wansend::load_snapshots) is a periodically-advertised, independently-stale projection, while the local roster (p.alive) is ground truth for an endpoint this node hosts. One status square per endpoint (CONTEXT.md:348-350 — nothing licenses opposite squares for one endpoint across its Local vs Subnet listings). A reconcile pass in data.rs after the local_rows + subnet_rows gather; BOTH category listings are preserved (Local + Subnet are legitimately distinct views — you are in your own subnet), only the STATUS is unified. (v0.10.0)
2026-06-23T09:38:03.2320260Z - Required stages: impl, unit
2026-06-23T09:38:03.2320293Z 
2026-06-23T09:38:03.2320388Z ### REQ-PICKER-4
2026-06-23T09:38:03.2322249Z - Title: The picker's Subnet category renders the canonical node LABEL, not bare key-hex: a subnet row's node renders as 'LABEL (keyprefix…)' (e.g. 'HFENDULEAM (bcead52b…)') per CONTEXT.md:650 + Instance.node_label, NOT the raw node key-hex (SPT_DEV:14efb80cb… — a picker-only regression because resource_projection→ResourceRow drops node_label, so data.rs subnet_rows uses the raw row.node). Thread node_label into the picker subnet path (ResourceRow gains node_label, or subnet_rows looks it up via the registry's node_labels) and REUSE the one canonical render (format!("{l} ({}…)", key_prefix) — cli.rs / wansend.rs), never a re-implementation. (v0.10.0)
2026-06-23T09:38:03.2322367Z - Required stages: impl, unit
2026-06-23T09:38:03.2322401Z 
2026-06-23T09:38:03.2322493Z ### REQ-PICKER-5
2026-06-23T09:38:03.2325624Z - Title: `spt endpoint list` (bare/subnet view) renders an ALIGNED table with canonical node labels: cmd_endpoint_list prints subnet rows with `\t` TAB separators (cli.rs:~1651-1662) so variable-width endpoint_ids snap fields to different tab-stops → a RAGGED status column (operator screenshot: X/help statuses misaligned vs rt-*/sptc-*/wall-a); and it calls the node renderer with no label → bare key-hex for every row (SAME ResourceRow-drops-node_label root as REQ-PICKER-4). FIX: max-width per-column padding (mirror render_node_rows' pad, pad by char count not byte len — '…' is multibyte) replacing the tabs, and render the node via the shared node_label_display now that ResourceRow carries node_label (REQ-PICKER-4). Extract a pure row-formatter seam so the alignment+label is unit-testable. ALSO: the bare list is the SUBNET view (a just-run LOCAL perch is invisible cross-subnet until the next advertise tick), so emit a `--local` hint line so a freshly-run endpoint isn't perceived as lost. (v0.10.0; operator-flagged + doyle dispatch 2026-06-17)
2026-06-23T09:38:03.2325753Z - Required stages: impl, unit
2026-06-23T09:38:03.2325785Z 
2026-06-23T09:38:03.2325890Z ### REQ-SEND-SPT-HOSTED
2026-06-23T09:38:03.2329586Z - Title: An inbound `spt send` is DELIVERED to an spt-hosted endpoint (brought up via `spt endpoint run` → `api bind`, broker holds its PTY, NO `api listen` relay). Today cmd_bind→establish_perch (api/startup.rs ~441) writes info.json + ready marker + controllable=Some(true) but registers NO message-listener / NO address, so deliver.rs resolve_address→None→spool (deliver.rs:132-140) and the message NEVER reaches the live PTY — the endpoint reads 'online' (ready marker) yet `spt send` silently SPOOLS ('online but not deliverable' lie). Per CONTEXT:187-188 the daemon owns the PTY and delivers, manifest-configurable per activity-state (direct PTY injection / relay / HTTP). FIX: route an inbound send for an spt-hosted target through the daemon → broker InputReq → session.write_input PTY-inject (broker.rs dispatch_input/write_input ~988-1022), the same path the brain uses; the live-delivery handshake must report Sent (not Queued) and stop the spool-only fallback for a broker-hosted, PTY-resident endpoint. Detection is local: controllable==Some(true) + spt-hosted state + resolve_address==None. = the spt-core HALF of the wall-b finding (perri owns the adapter half: bind-hook fired-zero-perch + the missing endpoint-run int test). (post-v0.10.0)
2026-06-23T09:38:03.2329837Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2329871Z 
2026-06-23T09:38:03.2329965Z ### REQ-HAZARD-RC-EOF
2026-06-23T09:38:03.2333801Z - Title: A severed broker stream during a live rc session surfaces GRACEFULLY, never as a raw io error that crashes the PTY. The rc read-loop (rc.rs:352-362) continues only on WouldBlock/TimedOut; ANY other read_event_until error — including UnexpectedEof 'failed to fill whole buffer' — returns Err → RC_FAIL → the PTY 'crashes' from the user's view. Confirmed trigger: a deliberate `spt daemon stop` (broker bounce) severs an active rc (perri stopped the daemon to release owlery watch handles). Same severed-broker-stream EOF class as the v0.9.1 seed fix (seed_fail_message) and the listener-death case — spt-core must classify a broker-gone EOF and (a) surface a CLEAR actionable message ('daemon stopped/restarted — re-run / reconnect'), never the raw buffer error, and ideally (b) AUTO-REATTACH to the same session on the fresh broker (the broker is the daemon-lifetime anchor; it returns on the next `spt api` call). FOLD two side-observations: (1) `spt daemon stop` SILENTLY drops active rc/live sessions — warn ('N active session(s) will drop') or graceful-detach on stop; (2) the daemon holds owlery WATCH HANDLES on perch dirs so a torn-down perch dir stays 'Device busy' until a full daemon stop releases them (perri's rt-* cleanup) — a torn-down perch's handle should release without a daemon stop. doyle Finding C, root-caused. (post-v0.10.0)
2026-06-23T09:38:03.2333925Z - Required stages: impl, unit
2026-06-23T09:38:03.2333959Z 
2026-06-23T09:38:03.2334063Z ### REQ-HAZARD-DEFERRED-MANIFEST
2026-06-23T09:38:03.2336460Z - Title: A pointer-mode (delegated / GhReleaseManaged) adapter whose binary/manifest is not yet extracted is reported with a CLEAR diagnostic, never silently dropped. Today such an adapter reads its manifest LIVE from source_dir (registry.rs manifest_dir ~146/149); a deferred / un-extracted install makes load_manifest fail → registered() (~410, filter_map(.ok())) SILENTLY DROPS the row → downstream ADAPTER_UNRESOLVED + a cryptic os-error-2 on `spt adapter use`. FIX: surface a clear diagnostic at the resolver + at `adapter use` (name the adapter + the deferred/missing-manifest cause + the fix), not a silent filter-drop and not a bare os-error-2; consider an eager manifest copy at register time so host_binaries survive before the binary download completes. doyle Finding A. (post-v0.10.0)
2026-06-23T09:38:03.2336647Z - Required stages: impl, unit
2026-06-23T09:38:03.2336679Z 
2026-06-23T09:38:03.2336785Z ### REQ-HAZARD-ENV-SUBST
2026-06-23T09:38:03.2340211Z - Title: `spt endpoint run` HONORS manifest [env.<VAR>] direction=inject values (with {key} substitution) on the spt-hosted spawn. Today only the [session.self] command ARGV is {id}-substituted; the [env] inject value is NEITHER substituted NOR applied — manifest.schema.json promises EnvVar.value = 'Value to inject (with substitution)' but prepare_harness_spawn fills only argv and SpawnReq carries no env, so a [env.SPT_ENDPOINT_ID].value='{id}' arrives EMPTY. A FLAGLESS harness (bare `claude`, no argv slot for {id}) then routes the id via [env] → empty → SessionStart sees empty $SPT_ENDPOINT_ID → seeds-by-PPID instead of binding → ZERO perch → NO_PERCH (the actual wall-b bind blocker; perri hard-repro'd). SILENT failure (empty inject, no error). FIX (doyle ruled a): fill every [env] inject value from the SAME {key} catalog as argv/role (mirror F-009 TEMPLATE fill, whole-string fill_template for an env value), thread it through SpawnReq.env → the broker sets it on the spawned PTY child. Correctness fix — schema already promises it, NO manifest change, NO new binary. PAIRS with REQ-SEND-SPT-HOSTED to make endpoint run fully work. doyle F-013. (post-v0.10.0)
2026-06-23T09:38:03.2340335Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2340368Z 
2026-06-23T09:38:03.2340460Z ### REQ-HAZARD-ROSTER-GHOST
2026-06-23T09:38:03.2342849Z - Title: A LOCAL subnet roster entry whose backing perch is erased does NOT keep advertising Active (no phantom perch-less endpoint). `api session-end <id> --erase` removes the perch (owlery dir gone) but the subnet roster (identity/registry/<subnet>.json) keeps the endpoint's instance row ACTIVE with no backing perch; `endpoint stop` says 'address unregistered' yet the line persists; no CLI verb forgets a roster entry, and a hand-edit is re-added by the single-writer daemon advertiser. FIX: daemon-side self-heal — the advertiser DROPS/forgets a LOCAL roster entry whose backing perch no longer exists (stops advertising it Active), and/or a `forget`/evict verb; verify whether the epoch lease eventually evicts it (slow-self-heal) vs a real leak and scope accordingly. doyle secondary finding (perri). (post-v0.10.0)
2026-06-23T09:38:03.2343064Z - Required stages: impl, unit
2026-06-23T09:38:03.2343097Z 
2026-06-23T09:38:03.2343212Z ### REQ-HAZARD-HOSTED-LIVENESS-RECONCILE
2026-06-23T09:38:03.2347141Z - Title: B2 KEYSTONE: a daemon-hosted (spt-hosted) endpoint's info.json status is RECONCILED to real liveness, not left latched online. The broker exit-waiter (broker.rs:889-910) reaps its in-mem session table + emits ExitEvent but NEVER touches info.json; lifecycle::mark_offline only fires on Psyche teardown — so a dead/exited harness (operator closed the tab) stays status=online forever (is_perch_alive returns ONLINE for daemon-hosted, liveness.rs:80-93). FIX (doyle ruled PULL-PRIMARY — the live-status analog of REQ-HAZARD-ROSTER-GHOST): the livehost reconcile loop (reconcile_once livehost.rs:226-313) queries the broker's live session set (KIND_SESSIONS) each tick and, for any status=online live_agent perch PAST the boot grace whose endpoint has NO live broker session, marks it offline (lifecycle::mark_offline → status=offline → is_perch_alive=false). GATED on spt-hosted (controllable==Some(true)) so a HARNESS-HOSTED relay live agent (api listen, legitimately online with no broker session) is NEVER mis-marked. Crash-robust + self-healing on the next tick (clear-on-event is not crash-robust alone). PUSH (brain ExitEvent→mark_offline) is an OPTIONAL fast-path only if the daemon brain is reliably subscribed to all hosted sessions; correctness rides the pull. Broker stays stateless (ADR-0004 §B — brain owns the info.json write). (v0.12.0)
2026-06-23T09:38:03.2347374Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2347403Z 
2026-06-23T09:38:03.2347508Z ### REQ-HAZARD-RC-ATTACH-FAILFAST
2026-06-23T09:38:03.2350800Z - Title: B1: `spt rc <id>` to a DEAD or non-streaming session fails fast with a clear message, never an INFINITE blank screen. Today rc.rs run_attach (209-231) + pump spawns PUMP_IPC_READER and blocks: the poll times out each slice but the stream never produces output, so the operator sees a permanent blank (operator: fresh wall-f attached, closed tab, then `spt rc wall-f` HUNG — the broker still resolved a session for it). FIX: (a) once B2 lands, gate attach on is_online/status — an offline endpoint yields a clean 'endpoint offline, start it' not an attach; (b) fail-fast — if the attach-open ack / first output does not arrive within a bound, surface a clear message, never an infinite blank; (c) the broker EOFs the attach stream when the session's child is dead, so rc's existing PumpEnd::BrokerGone graceful path (REQ-HAZARD-RC-EOF) catches it. PIN the exact sub-mechanism with a repro test FIRST (dead-session-lingers-in-broker vs reaped-but-rc-waits vs alive-resting-no-wake — the wall-f Windows tab-close: child alive-silent vs dead-not-reaped). (v0.12.0)
2026-06-23T09:38:03.2350919Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2350952Z 
2026-06-23T09:38:03.2351054Z ### REQ-ENDPOINT-STOP-OFFLINE
2026-06-23T09:38:03.2352335Z - Title: H3: `spt endpoint stop <id>` marks the endpoint OFFLINE (alive=false), not merely de-readied. cmd_stop (cli.rs:2994-3010) removes the ready marker + unregisters the address but does NOT set status offline, so a stopped daemon-hosted endpoint still reports alive=true (status=online latch). FIX: add set_status(perch, STATUS_OFFLINE) to cmd_stop — folds with B2 (same setter). Unit: stop → is_perch_alive=false / alive=false. (v0.12.0)
2026-06-23T09:38:03.2352445Z - Required stages: impl, unit
2026-06-23T09:38:03.2352478Z 
2026-06-23T09:38:03.2352584Z ### REQ-HAZARD-DAEMON-STOP-BARRIER
2026-06-23T09:38:03.2354411Z - Title: B3: `spt daemon stop` then an immediate `spt daemon start` does NOT race — stop fully completes before it returns. Today request_stop (seedmap.rs:240-255) returns on the KIND_STOPPING ack (sent seedmap.rs:174-176) BEFORE the seed socket unbinds, so a following is_running ping (daemon.rs:375) wins the exit window and start reports ALREADY_RUNNING (operator: daemon stop → STOPPED then start → ALREADY_RUNNING). FIX: unbind/stop-gate the seed socket BEFORE acking KIND_STOPPING, OR request_stop waits for a ping-to-fail before returning. Unit: stop then immediate is_running()==false. (v0.12.0)
2026-06-23T09:38:03.2354521Z - Required stages: impl, unit
2026-06-23T09:38:03.2354578Z 
2026-06-23T09:38:03.2354683Z ### REQ-HAZARD-DAEMON-STOP-REAP
2026-06-23T09:38:03.2356470Z - Title: Breap: `spt daemon stop` REAPS the spt-hosted children it spawned — no orphaned psyche/harness processes. Today a stop leaves ~8 orphaned claude-spt-psyche.exe + spt.exe: Psyches are spawned DETACHED (runtime.rs:342-356, the Child is dropped — 'Detached' ~349) and the livehost stop flag Arc<AtomicBool> is NEVER raised (brainproc.rs:227-230 holds it 'for symmetry'). FIX: on stop, raise the livehost stop flag AND kill the spawned psyche/spt-hosted children — via a Windows job object / Unix process-group so the children die with the daemon (not detached-immortal). Folds with B3 (both the stop path). (v0.12.0)
2026-06-23T09:38:03.2356579Z - Required stages: impl, unit
2026-06-23T09:38:03.2356612Z 
2026-06-23T09:38:03.2356747Z ### REQ-HAZARD-LIVEHOST-BOOT-LIVENESS-GATE
2026-06-23T09:38:03.2359208Z - Title: B5: `spt daemon start` does NOT revive phantom Psyches for dead-but-online-latched perches. Today reconcile_once (livehost.rs:285) spawns a Psyche per status=online live_agent perch at boot WITHOUT verifying the harness child / {id}-psyche is actually alive — so a Cold start after an unclean stop revives N psyches for N dead-but-latched perches (3 psyches for 3 dead perches). FIX: gate the boot psyche-spawn on real child-liveness — a perch with NO live broker session (the B2 reconcile signal) is marked OFFLINE at boot instead of hosted, so a dead-harness perch is never revived. Shares the B2 reconcile loop (this is its boot-gate arm); composes with B2's honest latch. Also closes wall-a's psyche_host_error gap (residency-confirm does not run at boot tick-1, livehost.rs:395-441 / 257-263). (v0.12.0)
2026-06-23T09:38:03.2359437Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2359470Z 
2026-06-23T09:38:03.2359619Z ### REQ-HAZARD-BRAIN-RESTART-LIFECYCLE-REHYDRATE
2026-06-23T09:38:03.2362176Z - Title: B4 (deepest): a bare brain restart (broker survives) REHYDRATES the live-agent lifecycle so post-restart endpoints are hosted + attachable. Today resume_sessions (brainproc.rs:186, brain.rs:797-809) re-subscribes to the broker's PTY sessions but ALL BrainLifecycle instances (lifecycle.rs:58-130; the ephemeral brain.rs:254-275) are LOST on restart → a post-restart live endpoint gets no livehost → its Psyche is never (re)hosted and new spawns die / can't attach until a FULL daemon reset (operator: perri's brain kill+restart wedged everything until a full daemon kill). FIX: on brain startup, rebuild a BrainLifecycle per resumed live-capable session — load the manifest from the adapter registry → instantiate → start the pulse — the rehydrate the resume no-op cannot do. Composes with B2 (the reconcile re-hosts from the honest on-disk status after rehydrate). (v0.12.0)
2026-06-23T09:38:03.2362286Z - Required stages: 
2026-06-23T09:38:03.2362328Z 
2026-06-23T09:38:03.2362448Z ### REQ-HAZARD-BRAIN-RESTART-PSYCHE-DUP
2026-06-23T09:38:03.2366240Z - Title: A bare brain restart leaves EXACTLY ONE `{id}-psyche` process per endpoint — no duplicate. On an abrupt brain death stop_host never runs (the LiveSet + owned child handles die with the brain) and Breap's job/group only reaps at DAEMON stop, so the PRIOR brain's Psyche stays ALIVE; the respawned brain's reconcile re-hosts a SECOND Psyche and overwrites the `{id}-psyche` perch pid, leaving the old one untracked + alive = a duplicate that lingers until daemon-stop (the operator's 'brain kill+restart wedged everything'). FIX: at brain start, BEFORE the first reconcile re-hosts, reap any pre-existing `{id}-psyche` orphan — ID-SPECIFICALLY (recycle-safe on the shared box, where sibling agents share the `claude` basename): scoped-kill the recorded pid ONLY IF it is alive AND its exe basename == the adapter's psyche program (normalize_basename) AND its COMMAND LINE contains the full psyche id `<id>-psyche` (baked via {id}); a sibling never carries THIS id, and any unreadable signal FAILS SAFE (decline to reap — a missed dup is bounded by Breap, a wrong-kill is catastrophic). CAVEAT: the cmdline carries `<id>-psyche` only when the adapter's psyche_init.command uses {id} (the norm); a non-{id} adapter safely MISSES the reap (today's behavior, Breap bounds it) — never a wrong-kill. (v0.12.0)
2026-06-23T09:38:03.2366378Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2366401Z 
2026-06-23T09:38:03.2366506Z ### REQ-HAZARD-UNHOST-PSYCHE-REAP
2026-06-23T09:38:03.2369720Z - Title: On un-host, the detached `{id}-psyche` HARNESS PROCESS is reaped — not just its in-brain pulse-driver thread. Today stop_host (livehost.rs:203) trips the HostedLife stop flag + JOINS the driver thread, but the Psyche is a detached harness process (spawn_psyche → ManifestRuntime detached spawn, runtime.rs:341-356; its pid is untracked in HostedLife though stamped on the `{id}-psyche` perch, where residency-confirm already reads it). So endpoint-stop / mid-life agent-death / a B2/B5 offline-then-unhost leaves the psyche process ORPHANED, alive until the next daemon-stop (where Breap's job/group reaps the whole brain subtree). The Psyche STAYS a harness process by design (CONTEXT.md 97/203/251 — headless harness session, its own perch) — the fix does NOT move it in-brain; it SCOPED-kills the `{id}-psyche` pid on un-host (never machine-wide — shared box). Track the pid in HostedLife at host_one (cleanest) or read the `{id}-psyche` perch pid at stop_host. Composes with H3 (endpoint stop → offline → reconcile un-host → reap) and B2/B5 (the offline arms that trigger un-host). (v0.12.0)
2026-06-23T09:38:03.2369945Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2369978Z 
2026-06-23T09:38:03.2370073Z ### REQ-ENDPOINT-PURGE
2026-06-23T09:38:03.2374707Z - Title: `spt endpoint purge <id>` fully removes an endpoint AND every record keyed on it — the formal teardown devs/CI need for clean test setup/reset. NOT consent-gated (a local dev/test op — no peer consent). OFFLINE-ONLY: refuses while the endpoint is online / daemon-hosted (deleting records out from under a live host risks the daemon re-creating or re-hosting mid-purge); `--force` STOPS it first (endpoint stop → wait for the daemon reconcile to un-host + reap the Psyche) THEN purges. Confirms interactively unless `--yes` (the CI path). Refuses purging the CALLER's OWN running id. All LOCAL — purge reaches only THIS node's records; a remote endpoint's records can't be touched, and its subnet-registry rows decay via the epoch-lease eviction (REQ-HAZARD-REGISTRY-DECAY). Removes: (1) the perch dir TREE recursively — owlery/<id>/ incl every nested {id}-psyche / {id}-w* / shells child (info.json, ready marker, sessions.log ledger, spool.db, inbox, .idle/.more-done sentinels, auth token); (2) the registry address (registry::unregister_address); (3) the context store — ContextStore::remove_endpoint(id): the a-<id> branch+worktree + the <id>/ rows from every p-<project> branch (the same fn `fork --delete-source` already uses); (4) node-local trust rows keyed on the id — access.json + visibility.json. Reuse-heavy: it is `fork --delete-source` generalized (recursive perch remove + unregister + remove_endpoint) + the trust-record cleanup; `endpoint rename` already enumerates the same record set + uses the same offline-only gate. (v0.12.0)
2026-06-23T09:38:03.2374849Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2374878Z 
2026-06-23T09:38:03.2374984Z ### REQ-READY-AGENT-RESUME
2026-06-23T09:38:03.2378459Z - Title: An offline ReadyAgent shows in `spt endpoint run`'s picker Resume-from-history and resumes correctly — closing the gap that today only LiveAgents do. ROOT: a harness-hosted ready bind (ReadyAgent::start_homed, ready.rs) writes info.json DIRECTLY and never appends the session ledger (unlike the shared establish_perch:250 live path), so a ready agent — though it has a session_id — produces ZERO ledger rows → the picker's offline+local Resume-from-history (which gates on ledger rows) never offers it. FIX (1): ledger the ready bind (ReadyAgent::start_homed → sessions::append Boot, mirroring establish_perch). FIX (2): `spt endpoint run --resume <session>` honors the adapter MANIFEST's endpoint TYPE — a ReadyAgent manifest (no [session.psyche_init]) resumes as a ready endpoint (poll listener, NO psyche-host); a LiveAgent (with psyche_init) as live. NO new bringup mode + NO picker changes (operator 2026-06-18): `spt endpoint run` is the spt-hosted ENDPOINT bringup for BOTH types, the type IS the adapter-manifest's concern (psyche-host already keys on psyche_init presence) — so (2) likely already holds; VERIFY at code, build only the residual. (v0.12.0)
2026-06-23T09:38:03.2378577Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2378601Z 
2026-06-23T09:38:03.2378715Z ### REQ-PICKER-ADAPTER-DESCRIPTION
2026-06-23T09:38:03.2380162Z - Title: The Create-new adapter-CHOICE screen of `spt endpoint run`'s picker shows a right-hand Description panel (like the Pick-existing endpoint picker's two-pane) surfacing per-adapter detail: install date, last-updated, adapter TYPE / the endpoint types it hosts, and the adapter description — so the user can see WHAT each adapter is before choosing it (today the selector lists bare names). DEFERRED fast-follow to v0.12.0 (operator 2026-06-18). (post-v0.12.0)
2026-06-23T09:38:03.2380367Z - Required stages: 
2026-06-23T09:38:03.2380401Z 
2026-06-23T09:38:03.2380510Z ### REQ-HAZARD-VIEWER-ISOLATION
2026-06-23T09:38:03.2382619Z - Title: A slow / dead / hostile VIEWER must NEVER stall the controller, the PTY child, or the session drain thread. The broker drain fans output to the controller on the authoritative blocking bounded path (advances delivered_through) but to each viewer via a bounded per-viewer channel with a dedicated writer thread; the drain `try_send`s under the log lock and a viewer whose bounded queue OVERFLOWS (can't keep up) is EVICTED (queue dropped, writer thread ends, removed from the viewers map) — the drain thread NEVER touches a viewer socket, so no viewer write can backpressure or block it. A soft viewer cap bounds the thread count. Viewer eviction never perturbs the controller stream, the delivered_through cursor, or the child.
2026-06-23T09:38:03.2382734Z - Required stages: unit, int
2026-06-23T09:38:03.2382771Z 
2026-06-23T09:38:03.2382861Z ### REQ-INSTALL-1
2026-06-23T09:38:03.2383039Z - Title: Two install paths; signed one-line script; OS-service registration
2026-06-23T09:38:03.2383133Z - Required stages: doc, impl, int
2026-06-23T09:38:03.2383166Z 
2026-06-23T09:38:03.2383259Z ### REQ-INSTALL-2
2026-06-23T09:38:03.2383387Z - Title: Marketplace-repackaging-friendly install
2026-06-23T09:38:03.2383490Z - Required stages: doc
2026-06-23T09:38:03.2383525Z 
2026-06-23T09:38:03.2383616Z ### REQ-INSTALL-3
2026-06-23T09:38:03.2383753Z - Title: Idempotent + interactive-optional first run
2026-06-23T09:38:03.2383844Z - Required stages: impl, int
2026-06-23T09:38:03.2383878Z 
2026-06-23T09:38:03.2383964Z ### REQ-INSTALL-4
2026-06-23T09:38:03.2384565Z - Title: Adapter registration lifecycle: spt adapter add (--github, manifest-first, install-is-first-update) + soft-deregister remove + optional manifest uninstall template; node-local registered-adapter set self-update ripples over
2026-06-23T09:38:03.2384664Z - Required stages: impl, unit
2026-06-23T09:38:03.2384697Z 
2026-06-23T09:38:03.2384782Z ### REQ-MIGRATE-1
2026-06-23T09:38:03.2384939Z - Title: Auto-detect and migrate a legacy claude_skill_owl install
2026-06-23T09:38:03.2385024Z - Required stages: 
2026-06-23T09:38:03.2385065Z 
2026-06-23T09:38:03.2385157Z ### REQ-INFRA-1
2026-06-23T09:38:03.2385324Z - Title: GitHub issue tracking for v1; tangled.org as migration target
2026-06-23T09:38:03.2385414Z - Required stages: 
2026-06-23T09:38:03.2385438Z 
2026-06-23T09:38:03.2385534Z ### REQ-INSTALL-5
2026-06-23T09:38:03.2386101Z - Title: Non-interactive install path: the canonical one-liner doubles as every adapter's pack-in on-demand install (no second mechanism); sha256-verified fetch; user-PATH registration
2026-06-23T09:38:03.2386206Z - Required stages: impl, int
2026-06-23T09:38:03.2386239Z 
2026-06-23T09:38:03.2386330Z ### REQ-INSTALL-9
2026-06-23T09:38:03.2387494Z - Title: Adapter add from a GitHub release archive: `spt adapter add --release <user/repo> [--tag <tag>] [--asset <name>]` fetches a `.spt` tar asset over HTTPS+GitHub trust, extracts it to the durable adapters/_github home, and registers the root — ships built binaries source-free and versioned (the distribution path for an adapter whose dev repo is a monorepo subdir, where --github root-only clone does not fit)
2026-06-23T09:38:03.2387602Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2387635Z 
2026-06-23T09:38:03.2387735Z ### REQ-INSTALL-10
2026-06-23T09:38:03.2389048Z - Title: Windows at-logon autostart runs the daemon in the background with no persistent window: the scheduled task launches `spt daemon start` (which spawn_detaches a console-less DETACHED_PROCESS daemon and exits) rather than the foreground `spt daemon run` — Task Scheduler's interactive ONLOGON launch of a long-lived console process otherwise leaves a visible console window for the daemon's whole lifetime (v0.7.4)
2026-06-23T09:38:03.2389280Z - Required stages: impl, unit
2026-06-23T09:38:03.2389315Z 
2026-06-23T09:38:03.2389400Z ### REQ-INSTALL-11
2026-06-23T09:38:03.2391126Z - Title: Adapter command templates resolve their program against the adapter's install dir BEFORE PATH: a `.spt`-shipped binary (dropped to adapters/_github/<safe>/ by --release/--github acquisition, or kept in the source_dir under copy-mode where only manifest+strings/ are copied to adapters/<name>) runs without any PATH placement — a bare-name template token (e.g. `claude-spt-digest ...`) is rewritten to <install_dir>/<program>(.exe on Windows) when that file exists, else left bare for the PATH fallback. Makes a `.spt` self-contained (closes the --release bundled-binary gap perri confirmed) (v0.7.4)
2026-06-23T09:38:03.2391237Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2391276Z 
2026-06-23T09:38:03.2391375Z ### REQ-INSTALL-12
2026-06-23T09:38:03.2393889Z - Title: Durable active-profile pointer for bind-time profile selection (ADR-0021): adapters/active-profiles.toml at the registry ROOT (sibling to the per-adapter <name>/ dirs, so adapter add/update/remove — which only rewrite a <name>/ subdir — can never clobber it), a flat host_binary → "adapter[:profile]" map. Read at bind as the PRIMARY profile selector; unset → the registered_at_ms fallback (REQ-START-5). Written ONLY by `spt adapter use <adapter>[:profile]` (resolves the adapter's host_binaries → sets each binary→adapter[:profile]); `spt adapter use --clear <adapter|binary>` drops. NEVER auto-written by install/update/adapter add (that is precisely what would let an update silently flip the active profile). A stale pointer (uninstalled adapter / deleted profile) self-heals: ignored, fall back, warn once. Pruned on adapter remove. Atomic write (spt_store atomic). (v0.9.0)
2026-06-23T09:38:03.2394032Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2394060Z 
2026-06-23T09:38:03.2394148Z ### REQ-REL-1
2026-06-23T09:38:03.2394500Z - Title: spt-releases publish-target repo: README public face, licensing split, Pages docs at the permanent lapse-proof canonical URL (ADR-0014)
2026-06-23T09:38:03.2394618Z - Required stages: doc, impl
2026-06-23T09:38:03.2394652Z 
2026-06-23T09:38:03.2394753Z ### REQ-REL-2
2026-06-23T09:38:03.2395201Z - Title: Release asset set consumable by the self-updater: platform binaries, SHA256SUMS, SignedRelease metadata, manifest schema, mock-adapter zip; tag-triggered cross-repo pipeline
2026-06-23T09:38:03.2395309Z - Required stages: impl, int
2026-06-23T09:38:03.2395342Z 
2026-06-23T09:38:03.2395429Z ### REQ-REL-3
2026-06-23T09:38:03.2395837Z - Title: Two-key release-signing trust anchor: primary + offline never-used recovery, both pubkeys embedded in the binary's trusted set, manual local signing (ADR-0015)
2026-06-23T09:38:03.2395936Z - Required stages: impl, unit
2026-06-23T09:38:03.2396080Z 
2026-06-23T09:38:03.2396170Z ### REQ-DOCS-1
2026-06-23T09:38:03.2396366Z - Title: Dual-audience docs (human + AI dev-agent), markdown once / two depths
2026-06-23T09:38:03.2396466Z - Required stages: doc, impl
2026-06-23T09:38:03.2396509Z 
2026-06-23T09:38:03.2396594Z ### REQ-DOCS-2
2026-06-23T09:38:03.2396743Z - Title: Sub-10-minute runnable killer quickstart per audience
2026-06-23T09:38:03.2396828Z - Required stages: doc, int
2026-06-23T09:38:03.2396862Z 
2026-06-23T09:38:03.2396947Z ### REQ-DOCS-3
2026-06-23T09:38:03.2397124Z - Title: Diátaxis structure; one canonical way to do X
2026-06-23T09:38:03.2397224Z - Required stages: doc
2026-06-23T09:38:03.2397257Z 
2026-06-23T09:38:03.2397344Z ### REQ-DOCS-4
2026-06-23T09:38:03.2397520Z - Title: Agent-consumable layer (llms.txt, manifest schema, MCP, CLI help)
2026-06-23T09:38:03.2397620Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2397654Z 
2026-06-23T09:38:03.2397734Z ### REQ-DOCS-5
2026-06-23T09:38:03.2397930Z - Title: Anti-drift: rustdoc/schema/exports/CLI-help generated + CI-checked
2026-06-23T09:38:03.2398031Z - Required stages: impl, int
2026-06-23T09:38:03.2398059Z 
2026-06-23T09:38:03.2398162Z ### REQ-HAZARD-GRACE-BEFORE-SIGNOFF
2026-06-23T09:38:03.2398420Z - Title: Grace-period wait completes before composing INIT_SIGNOFF (1.1)
2026-06-23T09:38:03.2398519Z - Required stages: impl, unit
2026-06-23T09:38:03.2398553Z 
2026-06-23T09:38:03.2398654Z ### REQ-HAZARD-INFO-JSON-TORN-READ
2026-06-23T09:38:03.2398801Z - Title: State-file reads tolerate concurrent writes (1.2)
2026-06-23T09:38:03.2398896Z - Required stages: impl, unit
2026-06-23T09:38:03.2398930Z 
2026-06-23T09:38:03.2399116Z ### REQ-HAZARD-STALE-INDEX-LOCK
2026-06-23T09:38:03.2399235Z - Title: Sweep stale lockfiles on daemon boot (1.3)
2026-06-23T09:38:03.2399340Z - Required stages: impl, unit
2026-06-23T09:38:03.2399373Z 
2026-06-23T09:38:03.2399472Z ### REQ-HAZARD-DEFERRED-DRAIN
2026-06-23T09:38:03.2399641Z - Title: Deferred spool rows excluded from the event-stream drain (1.4)
2026-06-23T09:38:03.2399736Z - Required stages: impl, unit
2026-06-23T09:38:03.2399769Z 
2026-06-23T09:38:03.2399870Z ### REQ-HAZARD-WORKER-PATH
2026-06-23T09:38:03.2400040Z - Title: Single source of truth for Worker/Psyche perch location (1.5)
2026-06-23T09:38:03.2400141Z - Required stages: impl, unit
2026-06-23T09:38:03.2400174Z 
2026-06-23T09:38:03.2400275Z ### REQ-HAZARD-PARENT-PID-PREFER
2026-06-23T09:38:03.2400450Z - Title: Prefer stable parent PID / broker handle over ephemeral PID (2.1)
2026-06-23T09:38:03.2400535Z - Required stages: 
2026-06-23T09:38:03.2400569Z 
2026-06-23T09:38:03.2400681Z ### REQ-HAZARD-STDIN-SESSION-ID
2026-06-23T09:38:03.2400804Z - Title: Stdin session_id precedence over env (2.2)
2026-06-23T09:38:03.2400906Z - Required stages: 
2026-06-23T09:38:03.2400939Z 
2026-06-23T09:38:03.2401048Z ### REQ-HAZARD-HANDOFF-ARGV-COMPAT
2026-06-23T09:38:03.2401201Z - Title: Broker/brain IPC + handoff argv version-tolerant (2.3)
2026-06-23T09:38:03.2401302Z - Required stages: impl, unit
2026-06-23T09:38:03.2401339Z 
2026-06-23T09:38:03.2401443Z ### REQ-HAZARD-GEN-START-NOW
2026-06-23T09:38:03.2401578Z - Title: gen_start = now() on cold-start and handoff (2.4)
2026-06-23T09:38:03.2401686Z - Required stages: impl, int
2026-06-23T09:38:03.2401720Z 
2026-06-23T09:38:03.2401817Z ### REQ-HAZARD-EPHEMERAL-CLEANUP
2026-06-23T09:38:03.2401960Z - Title: Ephemeral perch cleanup on every ring exit path (3.1)
2026-06-23T09:38:03.2402054Z - Required stages: impl, unit
2026-06-23T09:38:03.2402087Z 
2026-06-23T09:38:03.2402203Z ### REQ-HAZARD-STALE-SIGNOFF-SENTINEL
2026-06-23T09:38:03.2402359Z - Title: Stale signoff sentinel does not kill a fresh start (3.2)
2026-06-23T09:38:03.2402451Z - Required stages: impl, unit
2026-06-23T09:38:03.2402485Z 
2026-06-23T09:38:03.2402592Z ### REQ-HAZARD-ECHO-BEFORE-SIGNOFF
2026-06-23T09:38:03.2402761Z - Title: Echo-commune fires before INIT_SIGNOFF on orphan teardown (3.3)
2026-06-23T09:38:03.2402865Z - Required stages: impl, unit
2026-06-23T09:38:03.2402898Z 
2026-06-23T09:38:03.2403109Z ### REQ-HAZARD-ENVELOPE-DECODE-ORDER
2026-06-23T09:38:03.2403260Z - Title: Envelope decode order, ampersand decoded last (4.1)
2026-06-23T09:38:03.2403359Z - Required stages: impl, unit
2026-06-23T09:38:03.2403398Z 
2026-06-23T09:38:03.2403502Z ### REQ-HAZARD-ENVELOPE-CR-LINESAFE
2026-06-23T09:38:03.2405207Z - Title: Envelope CR-linesafety (4.1): the line-framed EVENT codec must neutralize raw carriage returns — `event_body_escape` folds CRLF/lone-CR to the codec's representable linebreak (`\n`→`<br>`) BEFORE framing, so a body carrying `\r` (Windows `echo`/CRLF text crossing nodes) cannot survive into the single-line envelope and trigger a receiver terminal CR→col0 overwrite that corrupts the frame. Robustness on unrepresentable input, NOT a wire-format change (decoder untouched, amp-last invariant held). Belt-and-suspenders: `spt send`/`ring` also trim stdin (parity with `notify`).
2026-06-23T09:38:03.2405313Z - Required stages: impl, unit
2026-06-23T09:38:03.2405347Z 
2026-06-23T09:38:03.2405460Z ### REQ-HAZARD-ENVELOPE-PARSER-SAFE
2026-06-23T09:38:03.2405628Z - Title: Two-slice envelope parser is panic-free and tolerant (4.2)
2026-06-23T09:38:03.2405728Z - Required stages: impl, unit
2026-06-23T09:38:03.2405869Z 
2026-06-23T09:38:03.2405964Z ### REQ-HAZARD-EVENTPART-REASSEMBLY
2026-06-23T09:38:03.2406182Z - Title: EVENT-PART split/reassembly is byte-exact; orphan parts dropped silently
2026-06-23T09:38:03.2406272Z - Required stages: impl, unit
2026-06-23T09:38:03.2406301Z 
2026-06-23T09:38:03.2406407Z ### REQ-HAZARD-ID-CHARSET
2026-06-23T09:38:03.2406640Z - Title: Addressable-id charset reserves :/@ delimiters; validated at every creation seam (4.6)
2026-06-23T09:38:03.2406735Z - Required stages: impl, unit
2026-06-23T09:38:03.2406768Z 
2026-06-23T09:38:03.2406877Z ### REQ-HAZARD-REGISTRY-STALE-CLEAN
2026-06-23T09:38:03.2407050Z - Title: Stale registry entries degrade to fallback, never hard-fail (4.3)
2026-06-23T09:38:03.2407154Z - Required stages: impl, unit
2026-06-23T09:38:03.2407187Z 
2026-06-23T09:38:03.2407307Z ### REQ-HAZARD-REGISTRY-CONCURRENT
2026-06-23T09:38:03.2407546Z - Title: Concurrent SQLite openers (registry/spool) must not fail with 'database is locked' (4.7)
2026-06-23T09:38:03.2407650Z - Required stages: impl, unit
2026-06-23T09:38:03.2407684Z 
2026-06-23T09:38:03.2407793Z ### REQ-HAZARD-REGISTRY-DIR-CREATE
2026-06-23T09:38:03.2408161Z - Title: SQLite store opens create their parent dir themselves — a fresh-home registry op must not SQLITE_CANTOPEN (4.9)
2026-06-23T09:38:03.2408266Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2408299Z 
2026-06-23T09:38:03.2408399Z ### REQ-HAZARD-REGISTRY-EPOCH-LEASE
2026-06-23T09:38:03.2408822Z - Title: Registry merge ordered by per-node monotonic epoch, never wall-clock — a stale Active can't clobber a newer Offline (4.8, red-team #8)
2026-06-23T09:38:03.2408923Z - Required stages: impl, unit
2026-06-23T09:38:03.2409046Z 
2026-06-23T09:38:03.2409156Z ### REQ-HAZARD-DEFERRED-SURVIVE-DRAIN
2026-06-23T09:38:03.2409280Z - Title: Deferred rows survive poll drain (4.4)
2026-06-23T09:38:03.2409384Z - Required stages: impl, unit
2026-06-23T09:38:03.2409413Z 
2026-06-23T09:38:03.2409514Z ### REQ-HAZARD-INBOX-NO-DOUBLE
2026-06-23T09:38:03.2409652Z - Title: No double-delivery via legacy inbox (4.5)
2026-06-23T09:38:03.2409752Z - Required stages: impl, unit
2026-06-23T09:38:03.2409780Z 
2026-06-23T09:38:03.2409891Z ### REQ-HAZARD-WINDOWS-PID-RECYCLE
2026-06-23T09:38:03.2410042Z - Title: Windows PID-recycling false positives guarded (5.1)
2026-06-23T09:38:03.2410144Z - Required stages: impl, unit
2026-06-23T09:38:03.2410177Z 
2026-06-23T09:38:03.2410276Z ### REQ-HAZARD-EBUSY-RENAME
2026-06-23T09:38:03.2410440Z - Title: tmp-write + atomic-rename + retry on Windows EBUSY (5.2)
2026-06-23T09:38:03.2410544Z - Required stages: impl, unit
2026-06-23T09:38:03.2410577Z 
2026-06-23T09:38:03.2410672Z ### REQ-HAZARD-SUBPROCESS-TIMEOUT
2026-06-23T09:38:03.2410812Z - Title: Every harness/git subprocess has a timeout (5.3)
2026-06-23T09:38:03.2411010Z - Required stages: impl, unit
2026-06-23T09:38:03.2411043Z 
2026-06-23T09:38:03.2411148Z ### REQ-HAZARD-UNC-PATH-STRIP
2026-06-23T09:38:03.2411298Z - Title: Strip Windows UNC prefix on serialized paths (5.4)
2026-06-23T09:38:03.2411399Z - Required stages: impl, unit
2026-06-23T09:38:03.2411432Z 
2026-06-23T09:38:03.2411538Z ### REQ-HAZARD-SINGLE-PATH-SOURCE
2026-06-23T09:38:03.2411708Z - Title: Single path/registry source of truth; no layout ambiguity (6.1)
2026-06-23T09:38:03.2411809Z - Required stages: impl, unit
2026-06-23T09:38:03.2411842Z 
2026-06-23T09:38:03.2411941Z ### REQ-HAZARD-SOFT-CLEANUP
2026-06-23T09:38:03.2412110Z - Title: Soft-cleanup preserves state, removes only the ready marker (6.2)
2026-06-23T09:38:03.2412214Z - Required stages: impl, unit
2026-06-23T09:38:03.2412247Z 
2026-06-23T09:38:03.2412353Z ### REQ-HAZARD-CASCADE-WIPE-GUARD
2026-06-23T09:38:03.2412515Z - Title: No hard-delete of a parent hosting non-empty children (6.3)
2026-06-23T09:38:03.2412604Z - Required stages: impl, unit
2026-06-23T09:38:03.2412643Z 
2026-06-23T09:38:03.2412754Z ### REQ-HAZARD-DROP-FILE-SINGLE-WRITER
2026-06-23T09:38:03.2412895Z - Title: Drop files are daemon-owned single-writer (6.4)
2026-06-23T09:38:03.2413101Z - Required stages: impl, unit
2026-06-23T09:38:03.2413134Z 
2026-06-23T09:38:03.2413253Z ### REQ-HAZARD-DIRECT-WRITE-PRECEDENCE
2026-06-23T09:38:03.2413449Z - Title: Direct-write precedence marker (with node id) guards stale overwrite (6.5)
2026-06-23T09:38:03.2413549Z - Required stages: impl, unit
2026-06-23T09:38:03.2413583Z 
2026-06-23T09:38:03.2413693Z ### REQ-HAZARD-CONFLICT-BOTH-PRESERVED
2026-06-23T09:38:03.2414222Z - Title: A surfaced concurrent context pair is durably preserved (both versions, tracked artifacts) until a strictly dominating write clears it; no reconcile failure path discards an unmerged version (6.6, ADR-0013)
2026-06-23T09:38:03.2414323Z - Required stages: impl, unit
2026-06-23T09:38:03.2414357Z 
2026-06-23T09:38:03.2414461Z ### REQ-HAZARD-DETACHED-PIPE-INHERIT
2026-06-23T09:38:03.2415510Z - Title: Windows detached long-lived children must not inherit a captured caller's pipe: every detach-spawn of an immortal child (daemon, shell binary) runs bInheritHandles=FALSE, or a caller capturing output anywhere up the process chain hangs forever on a pipe that never EOFs — std-handle flag stripping is NOT sufficient (grandparent strays still flow) (5.6)
2026-06-23T09:38:03.2415616Z - Required stages: impl, unit
2026-06-23T09:38:03.2415640Z 
2026-06-23T09:38:03.2415734Z ### REQ-HAZARD-CONPTY-DSR
2026-06-23T09:38:03.2415926Z - Title: ConPTY reader must auto-answer DSR (ESC[6n) or all child output stalls (5.5)
2026-06-23T09:38:03.2416024Z - Required stages: impl, unit
2026-06-23T09:38:03.2416058Z 
2026-06-23T09:38:03.2416169Z ### REQ-HAZARD-WIN-PTY-PROGRAM-RESOLVE
2026-06-23T09:38:03.2417996Z - Title: Native-PTY spawn must resolve a bare program name with PATHEXT precedence and run a non-PE target through its interpreter: portable-pty's own `which` takes the FIRST PATH match — an extensionless shebang shim (e.g. a node CLI `ccs` shipped beside `ccs.cmd`) — and CreateProcessW then rejects the non-PE file with os error 193 ('not a valid Win32 application'); spt-term resolves the program itself (PATHEXT order prefers .EXE over .CMD; .cmd/.bat → cmd.exe /d /c, .ps1 → powershell -NoProfile -File) so a bare harness/shell [session.self] command actually launches on Windows. Unix is a passthrough (execve honours the shebang).
2026-06-23T09:38:03.2418120Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2418155Z 
2026-06-23T09:38:03.2418263Z ### REQ-HAZARD-CHILD-CONSOLE-FLASH
2026-06-23T09:38:03.2418668Z - Title: Console-subsystem children of the console-less daemon spawn with CREATE_NO_WINDOW, or each spawn flashes a visible blank window on the user's desktop (5.8)
2026-06-23T09:38:03.2418774Z - Required stages: impl, unit
2026-06-23T09:38:03.2418808Z 
2026-06-23T09:38:03.2418911Z ### REQ-HAZARD-INSTANT-UNDERFLOW
2026-06-23T09:38:03.2419644Z - Title: Scheduling never subtracts a Duration from Instant::now() (underflow-panics on a host booted more recently than the offset); 'due now / never run' is Option<Instant>=None gated on forward duration_since only (5.9)
2026-06-23T09:38:03.2419745Z - Required stages: impl, unit
2026-06-23T09:38:03.2419798Z 
2026-06-23T09:38:03.2419902Z ### REQ-HAZARD-PUMP-IPC-DEADLINE
2026-06-23T09:38:03.2420695Z - Title: The single-threaded peer pump's brain-IPC reads are deadline-bounded (PUMP_PEER_IO_TIMEOUT, total-wait per call); a TimedOut read POISONS the client and escalates to a SUPERVISED RESTART, never a per-peer retry — a black-holed peer must never wedge the whole pump
2026-06-23T09:38:03.2420789Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2420823Z 
2026-06-23T09:38:03.2420931Z ### REQ-HAZARD-BROKER-QUIC-DEADLINE
2026-06-23T09:38:03.2423910Z - Title: The broker bounds every brain-waiting QUIC op (dial / open_stream / send_stream) so a black-holed or dead peer fails PROMPTLY with an ORDINARY error the broker REPLIES, never an unbounded await. The bound (< the brain's 30s PUMP_PEER_IO_TIMEOUT so the BROKER fires first) surfaces to the pump as a normal broker error reply → peer_outcome's non-TimedOut arm → drop conn + redial next tick, the round CONTINUES and the heartbeat keeps advancing — it must NEVER manifest as the brain's own read-deadline (the A-half poison → supervised-restart path REQ-HAZARD-PUMP-IPC-DEADLINE guards). Exactly-once is preserved: a timed-out journaled op fails INSIDE its apply_once closure so no phantom conn_id/stream_id is recorded and a fresh tick re-dials cleanly. The happy path is unchanged (a live peer completes with zero added latency; the bound only bites a non-responsive peer). This is the ROOT-cause cure for the 2.2h hfenduleam pump wedge — a dead roster peer whose QUIC path the broker awaited unbounded — recurring on hfenduleam 2026-06-16.
2026-06-23T09:38:03.2424138Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2424162Z 
2026-06-23T09:38:03.2424263Z ### REQ-HAZARD-BROKER-SEED-WIRE-SKEW
2026-06-23T09:38:03.2427836Z - Title: A daemon-state wire-format change (e.g. the v0.9.0 adapter-agnostic Seed) does NOT take effect until a DELIBERATE full broker restart: the broker serves the seed-control channel and is RESIDENT across a brain-only self-update (ADR-0004 no-terminate-during-update forbids auto-killing it), so a NEW-version CLI talking to a still-resident OLD broker fails the seed handshake — the old broker cannot deserialize the new Seed (its formerly-required `adapter` field is gone) and drops the conn without an ack, which surfaces to the CLI as a raw UnexpectedEof 'failed to fill whole buffer'. spt-core must (a) surface an ACTIONABLE diagnostic on that seed-ack EOF (name the stale-broker cause + the `spt daemon stop` fix — the broker restarts on the next api call), never the cryptic io error; and (b) document the operational rule (a deliberate broker restart is required on any daemon-state wire change — NOT automatic) + the FORWARD discipline (daemon-state/Seed schema changes stay additive + serde-default so a resident OLD broker tolerates a NEW CLI across a brain-only update; note this would NOT have rescued 0.9.0 itself, since the old broker's `adapter` was a required field). perri PREP-4 FINDING 1 (v0.9.0 CLI vs stale 0.8.x broker).
2026-06-23T09:38:03.2427988Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2428022Z 
2026-06-23T09:38:03.2428122Z ### REQ-HAZARD-SUDO-SECURE-PATH
2026-06-23T09:38:03.2428938Z - Title: Elevation guidance on Unix names the binary's ABSOLUTE path under sudo (a user-local install ~/.local/bin · ~/.cargo/bin is not on sudo's secure_path, so bare `sudo spt` dies 'command not found'); gated commands auto-elevate on an interactive TTY, else print the runnable hint (5.10)
2026-06-23T09:38:03.2429109Z - Required stages: impl, unit
2026-06-23T09:38:03.2429142Z 
2026-06-23T09:38:03.2429243Z ### REQ-HAZARD-SELF-ELEVATE
2026-06-23T09:38:03.2431473Z - Title: Self-elevation (REQ-ELEVATE-1) re-runs the EXACT original invocation with the binary's ABSOLUTE exe path — never widening privilege scope, never adding/altering args, never via a PATH-resolved bare name, never via a shell-interpolated command string (argv-array only, no `sh -c`); the elevated child drops state back to the user (composes with the 5.7 de-elevation) and NEVER re-elevates (loop-safe: decide_elevation_path returns AlreadyElevated whenever the process is already Elevated, on every OS). The user's UAC/polkit/sudo prompt is the only consent gate — we never bypass it; the print-hint floor prints the absolute-path command too. The unprivileged parent never depends on (pipes/captures) the privileged child's stdout.
2026-06-23T09:38:03.2431598Z - Required stages: unit
2026-06-23T09:38:03.2431631Z 
2026-06-23T09:38:03.2431740Z ### REQ-HAZARD-LOCAL-API-AUTH
2026-06-23T09:38:03.2431927Z - Title: Every local `api` mutation authenticated to an endpoint/session (codex #13)
2026-06-23T09:38:03.2432035Z - Required stages: impl, unit
2026-06-23T09:38:03.2432069Z 
2026-06-23T09:38:03.2432177Z ### REQ-HAZARD-RESTART-IDEMPOTENT
2026-06-23T09:38:03.2432428Z - Title: Idempotent/exactly-once delivery across brain restart at every broker boundary (codex #14)
2026-06-23T09:38:03.2432538Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2432571Z 
2026-06-23T09:38:03.2432780Z ### REQ-HAZARD-UPDATE-ROLLBACK
2026-06-23T09:38:03.2433020Z - Title: Self-update rejects version rollback; metadata expiry + adapter content signing (codex #5)
2026-06-23T09:38:03.2433119Z - Required stages: impl, unit
2026-06-23T09:38:03.2433148Z 
2026-06-23T09:38:03.2433258Z ### REQ-HAZARD-DAEMON-HOSTED-LIVENESS
2026-06-23T09:38:03.2433654Z - Title: Daemon-hosted perches (Psyche, spt-hosted Self) derive liveness from the daemon endpoint table + info.json status, never is_process_alive(info.pid) (2.5)
2026-06-23T09:38:03.2433759Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2433792Z 
2026-06-23T09:38:03.2433897Z ### REQ-HAZARD-BROKER-PROCESS-ISOLATION
2026-06-23T09:38:03.2436421Z - Title: Broker and brain are separate processes: the broker runs as its own long-lived per-machine process that survives every brain restart, so a routine (brain-only) self-update restarts the brain onto the swapped binary while every hosted endpoint (PTY child, live QUIC conn, listening socket) stays untouched at the PROCESS level. The in-process-thread broker (daemon.rs:165-170) is a regression that silently unrealizes REQ-UPD-3 — apply degrades to an in-process Brain::handoff no-op and new code does not run until an unrelated restart (KNOWN-HAZARDS 6.7). Evidence must prove process-level survival (SPIKE-01/03 productionized as int: PTY child + live QUIC survive a brain-PROCESS restart onto a swapped binary), re-pointing the regression-masked in-process int tags currently on REQ-DAEMON-2 / REQ-UPD-3 (ADR-0018).
2026-06-23T09:38:03.2436540Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2436573Z 
2026-06-23T09:38:03.2436684Z ### REQ-HAZARD-ROLLBACK-STATE-COMPAT
2026-06-23T09:38:03.2438330Z - Title: A brain must not irreversibly migrate durable state before update ready-promotion: the readiness-gated auto-rollback (ADR-0018 Q7) spawns the N-1 binary against durable state the new brain may have written, so every pre-ready write must stay N-1-readable (schema migrations gated behind ready-promotion, or written N-1-tolerant/additive). Else the first in-place schema migration silently bricks rollback (KNOWN-HAZARDS 6.8). Free now — a 2026-06-09 audit confirmed zero state-migration code exists; unmintable retroactively once a migration ships.
2026-06-23T09:38:03.2438449Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2438481Z 
2026-06-23T09:38:03.2438582Z ### REQ-HAZARD-BRAIN-RESPAWN-PATH
2026-06-23T09:38:03.2441161Z - Title: The broker respawns the brain onto the APPLIED bytes, not the renamed old binary: the candidate-binary default is the canonical exe path captured ONCE at broker start, never a per-spawn std::env::current_exe() — on Linux current_exe (readlink /proc/self/exe) is inode-tracking and follows the `apply` rename (spt -> spt.old-N), so a resident broker would respawn the brain onto OLD bytes while recording `applied` (Windows GetModuleFileName is path-at-start, so Windows was green; ADR-0018 Q3 silently assumed path-string semantics). Backstop: promotion gates on bytes — a trial promotes only if brain.ready exe_hash == the staged artifact hash for this platform, else auto-rollback + loud notif (readiness != new-bytes was the false-success that recorded applied:8 over a v0.4.0 brain on kitsubito, 2026-06-11). KNOWN-HAZARDS 6.11.
2026-06-23T09:38:03.2441290Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2441323Z 
2026-06-23T09:38:03.2441432Z ### REQ-HAZARD-PSYCHE-OUTBOUND-PROXY
2026-06-23T09:38:03.2442187Z - Title: Psyche outbound captured + sanitized: the live-Psyche turn driver captures stdout (never Stdio::null), and the daemon strips/re-stamps Psyche-supplied from=/target and constrains routing (reply→__REPLY_TO__ sender, notify→own user/subnet) (7.3)
2026-06-23T09:38:03.2442286Z - Required stages: impl, unit
2026-06-23T09:38:03.2442324Z 
2026-06-23T09:38:03.2442449Z ### REQ-HAZARD-DAEMON-SCHED-NONBLOCKING
2026-06-23T09:38:03.2443060Z - Title: Per-agent pulse/psyche/echo-commune scheduling must not serialize across agents: each agent's bounded LLM call (echo-commune summarizer, Psyche turn) runs off the shared scheduler so one slow/hung call cannot stall another agent's tick (7.4)
2026-06-23T09:38:03.2443265Z - Required stages: impl, unit
2026-06-23T09:38:03.2443298Z 
2026-06-23T09:38:03.2443413Z ### REQ-HAZARD-PAIR-TRANSCRIPT-BIND
2026-06-23T09:38:03.2444048Z - Title: Pairing transcript binds roles, both node pubkeys, subnet ID, seed epoch, TOTP time-step, and confirmation MACs — or unknown-key-share/reflection/wrong-subnet/replay pairing remain possible (ADR-0005 #12)
2026-06-23T09:38:03.2444147Z - Required stages: impl, unit
2026-06-23T09:38:03.2444181Z 
2026-06-23T09:38:03.2444290Z ### REQ-HAZARD-PAIR-SEED-ROTATION
2026-06-23T09:38:03.2444791Z - Title: Removing a node rotates the subnet seed (epoch bump) so an old node/old seed cannot rejoin; trust-store delete alone is NOT revocation because the seed is replicated to every trusted node (ADR-0005 #10)
2026-06-23T09:38:03.2444891Z - Required stages: impl, unit
2026-06-23T09:38:03.2444924Z 
2026-06-23T09:38:03.2445049Z ### REQ-HAZARD-PAIR-RATE-LIMIT
2026-06-23T09:38:03.2445888Z - Title: Subnet-global pairing rate limit: one active ceremony per subnet, shared attempt counter, exponential backoff — a public pre-trust relay + multiple seed-holders otherwise enables distributed SPAKE2 guessing (and ±1 TOTP window triples the valid-password space) (ADR-0005 #11)
2026-06-23T09:38:03.2445994Z - Required stages: impl, unit
2026-06-23T09:38:03.2446023Z 
2026-06-23T09:38:03.2446127Z ### REQ-HAZARD-WAN-ORIGIN-AUTH
2026-06-23T09:38:03.2446886Z - Title: WAN-inbound origin is transport truth, never payload: the access gate's subject (ADR-0009 origin-node whitelist) is the QUIC handshake-proven remote node id from the broker's conn/stream table — a forged origin/node field inside record bytes is inert (7.5)
2026-06-23T09:38:03.2447001Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2447024Z 
2026-06-23T09:38:03.2447114Z ### REQ-CONSENT-1
2026-06-23T09:38:03.2447988Z - Title: Consent grant store: capability x subject-agent x target-node rows, enforced at the target node, subnet-settable (replicates as security material near the trust store), revocable; gated-capability ids (remote-exec, instantiate-anywhere) reserved-but-refusing; v1 consumers are the shell spawn gates (CONTEXT Consent & security gates)
2026-06-23T09:38:03.2448110Z - Required stages: impl, unit
2026-06-23T09:38:03.2448143Z 
2026-06-23T09:38:03.2448234Z ### REQ-CONSENT-2
2026-06-23T09:38:03.2449104Z - Title: Interactive consent escalation: an ungated high-risk action routes a consent prompt to the user's most-recently-active session; allow-once / allow-always (writes a grant) / deny; pre-consent flags (can_shutdown, shell_wake_spawn_anywhere) author grants via manifest/settings (CONTEXT Consent & security gates)
2026-06-23T09:38:03.2449205Z - Required stages: impl, unit
2026-06-23T09:38:03.2449338Z 
2026-06-23T09:38:03.2449423Z ### REQ-PRES-1
2026-06-23T09:38:03.2450731Z - Title: Presence resolution: the presence datum (last_active_node, last_active_endpoint, ts) gossiped subnet-wide via the agent-interaction heartbeat (rides registry distribution, visibility-gated) + one first-class most-recently-active resolution API consumed by notif first-fire, update-consent delivery, consent escalation, and shell wake resolution (M5 scope decision 1: resolution only — the PresenceChannel endpoint stays deferred)
2026-06-23T09:38:03.2450846Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2450878Z 
2026-06-23T09:38:03.2450958Z ### REQ-SHELL-1
2026-06-23T09:38:03.2451812Z - Title: Shell hosting machinery: shell perch under the owner (type/owner/adapter_name/status/alias), broker-launched binary + api bind local-link handshake, the three channels (command durable, text+file durable + progress-queryable, sensory REST-only never spooled + dropped-unless-owner-live), owner exclusivity (CONTEXT Shell model)
2026-06-23T09:38:03.2451920Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2451954Z 
2026-06-23T09:38:03.2452036Z ### REQ-SHELL-2
2026-06-23T09:38:03.2453449Z - Title: Shell sleep/wake: link-break always closes the binary (pre-close instruction + termination timeout), ephemeral teardown vs persistent offline/relink, wake_command wake-watcher (offline-only, exit-opcode supervision, exponential backoff + give-up), state-keyed wake resolution (dormant/suspended/active-elsewhere; no-reachable refuses — spawn-anywhere branch deferred), spt shutdown owner cascade + api owner-shutdown gated by can_shutdown (CONTEXT Shell sleep/wake)
2026-06-23T09:38:03.2453678Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2453711Z 
2026-06-23T09:38:03.2453815Z ### REQ-HAZARD-ELEVATED-DAEMON-SPAWN
2026-06-23T09:38:03.2455070Z - Title: The daemon always runs unelevated in the invoking user's universe, regardless of which command spawns it: an elevated spawner de-elevates (Windows: UAC linked token via CreateProcessWithTokenW; Linux: drop to SUDO_UID/SUDO_GID + the invoker's HOME) — an elevated daemon's pipes deny unelevated clients (every later spt reads not-running→spawn→bind Access-denied) and a sudo'd daemon roots the user's state universe (5.7)
2026-06-23T09:38:03.2455188Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2455228Z 
2026-06-23T09:38:03.2455332Z ### REQ-HAZARD-REGISTRY-GHOST-ROWS
2026-06-23T09:38:03.2456593Z - Title: A dead node identity's registry rows must decay: only the per-(endpoint,node) epoch lease supersedes rows, so without eviction a vanished node's rows are immortal and poison bare-id resolution with phantom AcrossNodes ambiguity — evict rows whose author node has not been heard (admitted inbound feed) within the eviction window; own rows never decay; a revived node re-inserts from its durable epoch within one pump cadence (4.10)
2026-06-23T09:38:03.2456692Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2456725Z 
2026-06-23T09:38:03.2456811Z ### REQ-CLI-1
2026-06-23T09:38:03.2457814Z - Title: spt endpoint noun namespace: absorbs fork/suspend/wake/shutdown/rename/stop/digest + access (ported 1:1: allow|revoke|open|list, decision 21) + description (ex-resources blurb; bare=show, set=author); merged endpoint list [--local|--subnet <name>] grouped by subnet with SELF pinned, --detail adding the ex-resources yellow-pages blurb projection; bare spt endpoint = the list (M8 decisions 1-2, 25)
2026-06-23T09:38:03.2457932Z - Required stages: impl, unit
2026-06-23T09:38:03.2457965Z 
2026-06-23T09:38:03.2458060Z ### REQ-CLI-2
2026-06-23T09:38:03.2458727Z - Title: spt daemon noun: run|stop|status (hidden daemon verb becomes daemon run; agent-endpoint shutdown keeps its name under endpoint); daemon status renders the pump heartbeat (last-tick recency) so a half-dead daemon is never rendered implied-healthy (M8 decisions 5, 23)
2026-06-23T09:38:03.2458827Z - Required stages: impl, unit
2026-06-23T09:38:03.2458860Z 
2026-06-23T09:38:03.2459025Z ### REQ-CLI-3
2026-06-23T09:38:03.2459822Z - Title: Agent hot path stays flat across the M8 reorg: send/ring/ready/whoami/how-to unchanged; notify moves to subnet notify while notif stays top-level; breaking renames land clean with no deprecation shims (zero external CLI consumers pre-spt-claude-code) (M8 decisions 3-4, 9)
2026-06-23T09:38:03.2459926Z - Required stages: impl, unit
2026-06-23T09:38:03.2459959Z 
2026-06-23T09:38:03.2460056Z ### REQ-CLI-4
2026-06-23T09:38:03.2462101Z - Title: User-facing CLI output is human-readable: DIRECT-USER commands (e.g. adapter update/list/use) render friendly prose instead of raw CODE:RESULT markers — "claude-spt is up to date (0.2.0)." not "ADAPTER_UPDATE_UPTODATE:claude-spt: installed 0.2.0, latest 0.2.0". Strictly bounded to the direct-user surface: the adapter-PARSED bringup tokens (SEEDED/BOUND/READY/NO_SEED on seed/listen, which adapters grep) stay machine-parseable — humanization is additive (a human line beside the marker, or a --porcelain/--quiet split), never a silent rename of a dual-contract marker. The user-facing bringup composition belongs to the adapter (perri); this REQ owns only the direct-user CLI surface. (v0.9.0)
2026-06-23T09:38:03.2462195Z - Required stages: 
2026-06-23T09:38:03.2462334Z 
2026-06-23T09:38:03.2462425Z ### REQ-SUBNET-5
2026-06-23T09:38:03.2463492Z - Title: Per-subnet serve-state: spt subnet detach <NAME> [--save] / attach <NAME> [--save] — daemon keeps running, stops/starts advertising + connecting for that subnet (peer pump + responder selective); --save persists the startup default in daemon config; the all-attached banner gains per-subnet states (M8 decision 6, --save renamed from --auto per decision 25 session)
2026-06-23T09:38:03.2463589Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2463618Z 
2026-06-23T09:38:03.2463711Z ### REQ-SUBNET-6
2026-06-23T09:38:03.2464375Z - Title: Trust lifecycle verbs, elevation-gated: spt subnet leave <NAME> (membership exit) and spt subnet prune <node> (removes a dead identity's trust + registry rows, killing its dead dials; trust mutation = security surface, REQ-PAIR-6 gate machinery) (M8 decisions 6-7)
2026-06-23T09:38:03.2464480Z - Required stages: impl, unit
2026-06-23T09:38:03.2464509Z 
2026-06-23T09:38:03.2464619Z ### REQ-SUBNET-7
2026-06-23T09:38:03.2466198Z - Title: Per-machine re-pair trust overwrite: registry rows carry a hashed stable machine identifier (OS machine id /etc/machine-id|MachineGuid, domain-separated SHA-256 before gossip, spt-minted persisted UUID fallback; additive serde-default field — old rows parse clean); a COMPLETED pairing ceremony presenting the same node label AND machine id as an existing trusted row evicts the superseded identity's trust + registry rows on the seed-holder and replicates the eviction; a gossiped claim alone never evicts trust (M8 decisions 13, 22)
2026-06-23T09:38:03.2466302Z - Required stages: impl, unit
2026-06-23T09:38:03.2466335Z 
2026-06-23T09:38:03.2466427Z ### REQ-SUBNET-8
2026-06-23T09:38:03.2467491Z - Title: Status render honesty: zero-subnet text is daemon-aware ('No subnets registered — this node is standalone.' + daemon-running-dependent blurb, never implying messaging works while the daemon is down); hint footer prints on bare spt subnet only (status drops it); a stalled pump is surfaced in subnet status, never rendered implied-healthy (M8 decisions 11-12, 23)
2026-06-23T09:38:03.2467605Z - Required stages: impl, unit
2026-06-23T09:38:03.2467638Z 
2026-06-23T09:38:03.2467725Z ### REQ-INSTALL-6
2026-06-23T09:38:03.2468864Z - Title: Linux elevation install leg: install.sh symlinks the binary into a sudo-reachable path (/usr/local/bin; graceful print-the-one-liner when unelevated) so sudo spt resolves; first sudo spt detects elevation and prompts ONCE for the default user account — thereafter any elevated daemon launch runs daemon + state under that account, never root (KH 5.7 interplay verified) (M8 decision 8)
2026-06-23T09:38:03.2469051Z - Required stages: impl, unit
2026-06-23T09:38:03.2469084Z 
2026-06-23T09:38:03.2469188Z ### REQ-INSTALL-7
2026-06-23T09:38:03.2470368Z - Title: Windows inbound reachability: the elevated install leg registers the inbound-UDP firewall rule (New-NetFirewallRule); the daemon self-detects blocked inbound and renders it as the no-connection state in subnet status + the coming-online banner (covers user-scope installs that skip the elevated leg — never a silent NO_SEED_HOLDER dead-end) (M8 root cause 3)
2026-06-23T09:38:03.2470491Z - Required stages: impl
2026-06-23T09:38:03.2470524Z 
2026-06-23T09:38:03.2470617Z ### REQ-INSTALL-8
2026-06-23T09:38:03.2471627Z - Title: OS-service registration (REQ-INSTALL-1's deferred third leg): Linux systemd USER service + loginctl enable-linger (linger rides the elevated install leg; daemon starts at boot pre-login, user universe per KH 5.7, systemctl --user managed); Windows scheduled task at-logon (interactive session, no stored credentials); a node is reachable after reboot without any manual spt invocation (M8 decision 17)
2026-06-23T09:38:03.2471721Z - Required stages: impl
2026-06-23T09:38:03.2471755Z 
2026-06-23T09:38:03.2471842Z ### REQ-CONV-1
2026-06-23T09:38:03.2473195Z - Title: Peer address seeding, both cold starts: durable peer-addrs.json (identity dir) maps peer pubkey → last-known dialable address; the pump's resolver consults it FIRST with id-only discovery fallback on miss or dial failure (a stale addr never strands a peer); written by the pairing ceremony (both sides, from the live connection) and by the pump on successful connect; post-join first sync and post-restart resync converge in seconds, not ~1 min (M8 decisions 14, 20)
2026-06-23T09:38:03.2473403Z - Required stages: impl, unit
2026-06-23T09:38:03.2473437Z 
2026-06-23T09:38:03.2473524Z ### REQ-CONV-2
2026-06-23T09:38:03.2474593Z - Title: Event-driven advertisement: endpoint online/offline transitions (ready-listener start/stop, rest-state transition, perch death) trigger an immediate advertise_local + peer push as a WAKE of the existing pump loop (no second advertisement path — epoch lease + visibility gates ride unchanged); the cadence stays the steady-state floor (M8 decision 15)
2026-06-23T09:38:03.2474697Z - Required stages: impl, unit
2026-06-23T09:38:03.2474730Z 
2026-06-23T09:38:03.2474812Z ### REQ-PAIR-8
2026-06-23T09:38:03.2476052Z - Title: NTP TOTP offset: the pairing ceremony queries NTP at ceremony time (both sides) and applies the derived offset to the TOTP calculation in-process only; system-clock fallback when NTP is unreachable (offline LAN pairing unaffected — NTP failure never blocks a pairing that succeeds today); never sets the OS clock; no background sync loop (M8 decision 18; field trigger: enlyzeam clock >1 min off exceeds the ±1 window)
2026-06-23T09:38:03.2476152Z - Required stages: impl, unit
2026-06-23T09:38:03.2476185Z 
2026-06-23T09:38:03.2476266Z ### REQ-DAEMON-5
2026-06-23T09:38:03.2477507Z - Title: Pump liveness: the peer pump writes a last-tick heartbeat consumed by daemon status / subnet status (decision 23 render legs in REQ-CLI-2/REQ-SUBNET-8); the daemon supervises the pump task — a panic is caught, logged loudly, and the pump restarts with capped backoff (≤5 min), so a 5.9-class death self-heals visibly instead of silently halving the daemon (M8 decision 23; field motivation: hfenduleam 2026-06-07 half-death)
2026-06-23T09:38:03.2477631Z - Required stages: impl, unit
2026-06-23T09:38:03.2477665Z 
2026-06-23T09:38:03.2477751Z ### REQ-DAEMON-6
2026-06-23T09:38:03.2479691Z - Title: Service-aware `daemon start`/`stop`: when an OS service manager has a registered spt-daemon for this user, `spt daemon start` and `spt daemon stop` drive THAT service (so stop doesn't IPC-kill a unit that auto-restart-fights for the broker socket — the kitsubito 2026-06-08 loop). `start` graduates from a `run` alias to a first-class background verb (ensure-up, idempotent, non-blocking); stop routes managed→manager, manual→IPC. Linux=systemd user unit (`systemctl --user start|stop|is-active spt-daemon`, detected by unit-file presence); Windows=no controllable manager (the logon task is boot-only), so start=detached spawn / stop=IPC.
2026-06-23T09:38:03.2479914Z - Required stages: impl, unit
2026-06-23T09:38:03.2479952Z 
2026-06-23T09:38:03.2480045Z ### REQ-DAEMON-7
2026-06-23T09:38:03.2481390Z - Title: `daemon run` is foreground-consistent on every platform: the invoking process IS the daemon, blocks until signalled, never auto-detaches or respawns into an invisible background task. The detached/de-elevated background behavior lives ONLY in `start`. Windows: an ELEVATED `daemon run` refuses with guidance (use `start`, or an unelevated shell) instead of respawning detached/de-elevated and vanishing (KH 5.7 preserved — it still never serves elevated).
2026-06-23T09:38:03.2481506Z - Required stages: impl, unit
2026-06-23T09:38:03.2481539Z 
2026-06-23T09:38:03.2481624Z ### REQ-DAEMON-8
2026-06-23T09:38:03.2482554Z - Title: Internal auto-start prefers the service: `ensure_running` (any spt command's implicit daemon start, REQ-DAEMON-3) routes through the service-aware start path — when a manager has a registered service it starts THAT, never a competing manual `spawn_detached` daemon that would fight the service for the socket.
2026-06-23T09:38:03.2482652Z - Required stages: impl, unit
2026-06-23T09:38:03.2482681Z 
2026-06-23T09:38:03.2482883Z ### REQ-DAEMON-9
2026-06-23T09:38:03.2485153Z - Title: Net-bind boot-race resilience: a daemon that comes up net-less (NetHost::start failed — e.g. the systemd unit autostarted before the network/DNS stack was ready, `Failed to create an address lookup service`) must SELF-HEAL — retry the net bring-up in the background with capped backoff and, on success, attach net to the broker + spawn the dispatcher/peer-pump (which today are gated on `net_up` at boot and so never start, leaving the node silently unreachable until a manual restart — kitsubito 2026-06-08). Status surfaces the net-less state honestly (a net-less broker renders as 'no connection', not only a pump-STALLED line with a bogus pre-boot heartbeat age). The installer's autostart unit waits for the network (`Wants=/After=network-online.target`) as belt-and-suspenders.
2026-06-23T09:38:03.2485257Z - Required stages: impl, unit
2026-06-23T09:38:03.2485290Z 
2026-06-23T09:38:03.2485397Z ### REQ-HAZARD-LIVEHOST-BOOT-RACE
2026-06-23T09:38:03.2489044Z - Title: The brain's daemon-hosted Psyche lifecycle surfaces a host-FAILURE on the live perch (harness-diagnosable) and runs net-INDEPENDENTLY. When reconcile_once→host_one→spawn_psyche fails for a state=live_agent+status=online endpoint (e.g. the adapter's psyche binary absent from its install dir, REQ-INSTALL-11), the failure MUST be written to the perch info.json as a CURRENT-STATE field (reason + ts + attempt count; overwritten each 5s retry, CLEARED on successful host) and surfaced by `spt endpoint list`/status — never left as an eprintln on the brain's invisible stderr where a harness reading only perch state is blind. status=online stays authoritative (agent reachable; only the Psyche is missing — brain-restart rehydrate legitimately has online-without-Psyche windows), so this is a SEPARATE psyche-host-health field, never a status de-stamp. Net-independence is a locked-in invariant: spawn_live_host (brainproc.rs:230) reaches the reconcile and hosts the Psyche on a net-less/unpaired/peer-pump-STALLED node, proven by a REAL detached-daemon E2E (real broker→brain-child, real api seed+listen, real install-dir psyche binary). spt-core SURFACES the failure; the adapter owns fixing its packaging.
2026-06-23T09:38:03.2489179Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2489213Z 
2026-06-23T09:38:03.2489317Z ### REQ-HAZARD-TEMPLATE-ARGV-FILL
2026-06-23T09:38:03.2493151Z - Title: Command-template substitution fills argv ELEMENTS, not a re-tokenized string: spt-core currently `fill_template`s {key} values INTO the command STRING and THEN `tokenize`s the filled string (runtime.rs:94/122), so a multi-word {key} value whitespace-SPLITS into multiple argv tokens unless the adapter hand-quotes the placeholder, and a value containing a `"` (or `;`) injects/breaks tokenization (shell-injection-adjacent). A filled value MUST become exactly ONE argv element regardless of spaces/quotes in the value. Fix: tokenize the TEMPLATE into argv FIRST, then `fill_template` EACH token, so a `{key}` slot resolves to a single element and the value never participates in tokenization (no whitespace-split, no quote/semicolon injection); preserve the missing-key / empty-command errors and `{{`/`}}` non-interpretation. perri's F-009 (v0.8.1 dogfood, argv-capture-confirmed): a multi-word `{psyche_prompt}` = "PSYCHE REVIVAL time: epoch-ms:… incoming event: (none)" arrived as argv[6..12] (7 stray tokens), the harness runner strict-parsed `--prompt` against the 2nd word, exited 2 within ~1s → phantom hosted perch. Applies to EVERY [session.<role>] template (psyche_init, extractor, notif, …); digest survives today only because its fills ({session_id}/{source}) are single-token.
2026-06-23T09:38:03.2493279Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2493312Z 
2026-06-23T09:38:03.2493428Z ### REQ-HAZARD-LIVEHOST-NONRESIDENT
2026-06-23T09:38:03.2496676Z - Title: A daemon-hosted Psyche that spawns then EXITS IMMEDIATELY is a host failure, surfaced like a spawn failure (closes the v0.8.1 residual masking): the REQ-HAZARD-LIVEHOST-BOOT-RACE signal stamps `psyche_host_error` only when `spawn_psyche` returns Err, NOT when the detached spawn() returns Ok but the child dies within moments (e.g. a bad-argv child exiting 2 — the F-009 case). That leaves the residual 'online + no Psyche + no cause' gap: the nested `{id}-psyche` info.json is written status=online with a real-but-DEAD pid and the PARENT perch carries NO psyche_host_error (perri's F-010: tasklist showed 0 host procs across the window while info.json read online). The host MUST confirm RESIDENCY — a hosted child not alive (or whose `{id}-psyche` perch never re-registers / has a dead pid) within N seconds of spawn is treated as a host failure: stamp the parent perch `psyche_host_error{reason:"host not resident within <n>s (psyche perch missing/dead pid)"}` (and do not leave a phantom online nested perch). Closes the last masking gap the v0.8.1 fix left open. perri's F-010 (v0.8.1 dogfood). Sibling of REQ-HAZARD-LIVEHOST-BOOT-RACE.
2026-06-23T09:38:03.2496886Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2496939Z 
2026-06-23T09:38:03.2497039Z ### REQ-HAZARD-EPOCH-RESET
2026-06-23T09:38:03.2498310Z - Title: Advertisement-epoch reset strands a node: peers' higher last-seen epoch drops the reset node's fresh advertisements as Stale until the counter outruns history. Common case (full reinstall/re-pair) is mitigated by REQ-SUBNET-7's ceremony eviction (peer-side epoch memory dies with the deleted row — acceptance-verified); the residual narrow slice (epoch file lost, identity kept) is documented, guard deferred to a field hit (4.11)
2026-06-23T09:38:03.2498410Z - Required stages: 
2026-06-23T09:38:03.2498444Z 
2026-06-23T09:38:03.2498525Z ### REQ-MESH-1
2026-06-23T09:38:03.2500645Z - Title: Membership proof (seed-proof): symmetric current-epoch seed-knowledge replaces is_trusted at EVERY inbound gate (registry apply, WAN receive, sync, notif, connection accept). MK = HKDF(seed, domain ‖ subnet_id ‖ seed_epoch); mutual channel-bound challenge-response at connect (transcript binds both handshake-proven node pubkeys, both nonces, subnet_id, seed_epoch, role); verified once per connection, cached on the broker ConnEntry, kept warm via QUIC keep-alive so re-proof is restart/partition/rotation-only. Exact-epoch match (re-seed is the sole N-1 exception). SECURITY INVARIANTS: channel-bound (no cross-connection replay), mutual, accepts a member it never paired (the mesh property).
2026-06-23T09:38:03.2500760Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2500797Z 
2026-06-23T09:38:03.2500882Z ### REQ-MESH-2
2026-06-23T09:38:03.2503507Z - Title: Member roster: node-level union-merge grow-set (per member: pubkey, label, machine_id, last-known address, last-seen — NOT the seed), the discovery directory the mesh dials by. Seeded IN FULL at pairing (seed-holder hands joiner the whole current roster, incl. offline members — folds in deferred pairing-time hostname capture + post-join address seeding); each node authors its own entry stamped with its lease_epoch, merged strictly-greater-wins (the node_label lease); exchanged only over seed-proof'd member connections; forgery-inert (a fake entry names a pubkey that still can't seed-proof). Removal needs a TOMBSTONE — a per-pubkey revoked marker that propagates, dominates the entry, gates admission (seed-proof ∧ ¬tombstoned), and prevents reinsert; cleared by a completed re-pair of that pubkey. Persists through silence (offline member keeps its entry).
2026-06-23T09:38:03.2503627Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2503664Z 
2026-06-23T09:38:03.2503754Z ### REQ-MESH-3
2026-06-23T09:38:03.2505361Z - Title: Mesh row fan-out: registry rows stay OWN-AUTHORED; the only change is the push target widens from directly-paired peers to ALL roster members (a wider DIRECT fan-out, never a third-party relay). Every row/message still arrives from its author over a handshake → KNOWN-HAZARDS 7.5 (origin = handshake node) and 4.10 (eviction lease: any future update comes from that node itself, alive) PRESERVED VERBATIM. Closes the staggered A→B→C repro: C (roster-seeded with A at pairing) initiates to A, seed-proof admits C unpaired, A learns C, both push directly.
2026-06-23T09:38:03.2505585Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2505618Z 
2026-06-23T09:38:03.2505704Z ### REQ-MESH-4
2026-06-23T09:38:03.2507865Z - Title: Revoke + timeboxed seed rotation + re-seed grace: `spt subnet revoke <node>...` (list, elevation-gated, revoke-only) writes roster tombstones immediately, then schedules ONE seed rotation (re-mint seed, bump seed_epoch, push new seed CONFIDENTIALLY over member-auth'd TLS connections — never in roster/registry gossip — force-drop revokees) at the close of a coalescing window (default 1h); further revokes in the window join the same rotation (one epoch bump). `--force-rotate-seed` rotates immediately (compromised-node path). RE-SEED GRACE: a node proving the immediately-prior epoch (N-1) AND still on the roster gets a re-seed-only restricted connection (auto-heals a benign offliner); revoked/off-roster denied; ≥2 stale → re-pair.
2026-06-23T09:38:03.2507984Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2508018Z 
2026-06-23T09:38:03.2508110Z ### REQ-MESH-5
2026-06-23T09:38:03.2509559Z - Title: Hard cutover from pairwise trust: delete peers.json + the is_trusted authorization path (no migration — expendable test fleet, re-pairs fresh under the new model, user decision 2026-06-08). Warn-on-change DEMOTED from a gate to an awareness notice anchored on machine_id (not label): 'machine M, last seen as K1, now presents K2' — fires the same event as the REQ-SUBNET-7 re-pair overwrite. The TrustStore/peers.json code and its call sites are removed, not left dead.
2026-06-23T09:38:03.2509660Z - Required stages: impl, unit
2026-06-23T09:38:03.2509689Z 
2026-06-23T09:38:03.2509780Z ### REQ-MESH-6
2026-06-23T09:38:03.2510972Z - Title: Concurrent liveness probes: `spt subnet status --nodes` fans out its offline/serve-probes (REQ-SUBNET-5) CONCURRENTLY — total wall-time bounded by the single-probe ceiling (~3s), never k×ceiling. The mesh makes a node see ALL members (many possibly offline), so a serial probe loop would be offline_count×3s. (Planning verifies the current REQ-SUBNET-5 probe loop's behavior and fixes it if serial.)
2026-06-23T09:38:03.2511094Z - Required stages: impl, unit
2026-06-23T09:38:03.2511124Z 
2026-06-23T09:38:03.2511220Z ### REQ-SHELL-3
2026-06-23T09:38:03.2513089Z - Title: Drive channel (owner->shell, REST-only, never-spooled, latest-wins): the owner->shell mirror of sensory for continuous real-time control (scroll/crank/stick/avatar) — a [shell.drive] manifest vocab + EVENT_TYPE_DRIVE frame, delivered to the ONLINE binary only via a single live slot (a new frame supersedes an undelivered one — no spool, no queue, no replay on relink), dropped-with-diagnostic if the shell is offline; cross-node rides the ephemeral link (REST class), never the durable shell spool. Commands = discrete+durable; drive = continuous+ephemeral (CONTEXT:260, minted 2026-06-11 Gateway grill).
2026-06-23T09:38:03.2513205Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2513257Z 
2026-06-23T09:38:03.2513347Z ### REQ-SHELL-4
2026-06-23T09:38:03.2518884Z - Title: Shell tunnel (reliable-ordered opaque byte stream): an owner<->shell link may hold a long-lived, reliable-ordered, link-bound QUIC stream pair carrying opaque wire protocol traffic the channel taxonomy must NOT reinterpret (first consumer usbip URB) — manifest opt-in, not enveloped, not MAC-framed, not spooled; the link lifecycle governs it (a link-break closes the tunnel). Reliable-ordered ⇒ congestion surfaces as lag never loss ⇒ acceptable only on-LAN: the on-LAN posture is documented and the tunnel is NOT proven cross-WAN (CONTEXT:262, minted 2026-06-11 Gateway grill; doyle gate C2).
2026-06-23T09:38:03.2519107Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2519151Z 
2026-06-23T09:38:03.2519332Z ### REQ-CONSENT-3
2026-06-23T09:38:03.2521193Z - Title: Per-capability approval gates (class-keyed): the require_approval enum may ride INDIVIDUAL [shell.capabilities] entries — gating the dangerous ACT, not just the spawn — with an optional class_key scoping the grant qualifier finer than the capability id ((owner endpoint x device class x node); a remembered HID-class attach grant never authorizes a storage-class attach). Reuses the grant store + interactive escalation + tighten-only floor (REQ-CONSENT-1/2 plumbing). Spawn gates govern EXISTENCE; capability gates govern ACTS — an explicitly distinct invariant (CONTEXT:283, ratified 2026-06-11 Gateway grill).
2026-06-23T09:38:03.2521475Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2521513Z 
2026-06-23T09:38:03.2521603Z ### REQ-SHELL-5
2026-06-23T09:38:03.2522811Z - Title: Shell ownership is owner-type-agnostic: any non-Shell endpoint type may own/spawn/drive/command/link a shell (Gateway the named first) — control-exclusivity keys on the owner endpoint_id, NEVER on the owner's endpoint type. No ownership path (mint, launch, owner-from-link, cmd, drive, tunnel, sleep/wake, owner-shutdown) inspects the owner's type (CONTEXT:264, ratified 2026-06-11 Gateway grill).
2026-06-23T09:38:03.2522944Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2522977Z 
2026-06-23T09:38:03.2523092Z ### REQ-HAZARD-VIEWER-CLOSE-DETACH
2026-06-23T09:38:03.2532960Z - Title: A VIEW is independent from the endpoint: closing the tab/window where `spt endpoint run` was invoked must detach ONLY the `spt rc` attach pump — the daemon-hosted harness keeps running and stays re-attachable via `spt rc <id>`. ROOT (Windows, v0.12.0 real-harness defect): the daemon never breaks away from the launching terminal's Job Object. Windows Terminal / VS Code place the launched shell AND every descendant into a Job Object with JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; closing the tab drops the terminal's last job handle → the OS terminates every process still in that job. A child escapes only with CREATE_BREAKAWAY_FROM_JOB — used NOWHERE in the tree. Both daemon spawn paths (daemon.rs:707 detached_no_inherit = DETACHED_PROCESS|CREATE_NEW_PROCESS_GROUP|CREATE_NO_WINDOW; deelevate.rs:519 elevated = CREATE_NEW_CONSOLE|...) drop the CONSOLE but NOT job membership, so the daemon's freshly broker-spawned ConPTY harness subtree is reaped on tab-close. The ConPTY/pseudoconsole isolation itself is CORRECT (portable-pty builds the pseudoconsole in the daemon; no console signal / handle leak) — the leaking lifetime binding is the Job Object, not the console. FIX: add CREATE_BREAKAWAY_FROM_JOB to both daemon spawn paths AND pin each broker-spawned harness into a DAEMON-OWNED Job Object (mirror reap.rs/Breap) as backstop (survives even where a terminal sets SILENT_BREAKAWAY_OK=false). Unix: the daemon's own session detachment (new session, no controlling terminal) already keeps a closing terminal's SIGHUP off its children — verify, add a guard test, no code expected. FIX UPDATE (v0.12.1 L1.5, doyle re-scope operator-approved 2026-06-18): job-neutral daemon launch is now PRIMARY, breakaway DEMOTED to a fallback rung. ROOT reframed — the daemon INHERITS the terminal's Job because spawn_detached runs FROM the terminal-child CLI (DETACHED_PROCESS detaches the console, not the job); breakaway tried to claw back out but a job CAN deny it (the L1 finding). FIX: launch the cold-started daemon via a job-NEUTRAL creator so it is WmiPrvSE/Task-Scheduler-owned, OUTSIDE any terminal job from birth (why Task-Scheduler-autostarted daemons never had this bug). Launcher ladder (first-success-wins, daemon.rs spawn_detached → BOTH cold-start AND `spt daemon start`): (1) WMI Win32_Process.Create via ABSOLUTE powershell -EncodedCommand (KH 5.12 abs path; base64-UTF16LE dodges all quoting; success requires BOTH ReturnValue==0 AND a parsed ProcessId, else fall-through — never a silent launched), forwarding SPT_* env via a `cmd /c set … & start /b` wrapper because a WMI/scheduler child does NOT inherit transient shell env (verified — SPT_HOME would be lost, wrong universe); (2) schtasks one-shot (same env wrapper; best-effort fallback); (3) CREATE_BREAKAWAY_FROM_JOB (the L1 code, reordered below); (4) in-job last resort (logs DETACH_IN_JOB + tab-close caveat). detached_no_inherit (breakaway-then-in-job) is UNCHANGED for its other caller shellhost::launch_shell (a daemon-spawned shell is already job-neutral once the daemon is). The elevated deelevate path keeps its L1 breakaway for now (elevated-case WMI-reparent = FOLLOW-UP). (v0.12.1)
2026-06-23T09:38:03.2533213Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2533246Z 
2026-06-23T09:38:03.2533357Z ### REQ-HAZARD-ATTACH-WEDGE
2026-06-23T09:38:03.2538574Z - Title: A legitimately dead PTY child (real crash/kill) + an undrained operator pump must NOT wedge the broker for all other clients. ROOT (v0.12.0 real-harness defect): loopback attach output is a blocking write_all into a bounded 64KB tokio duplex (nethost.rs:1040,1090); when the operator's rc pump stops draining (tab closed) the buffer fills and write_all blocks forever (the 'loopback never hangs' assumption at nethost.rs:1103 is false), parking a worker in the 2-worker net runtime (nethost.rs:640); a couple of these saturate BOTH workers → every new attach / `endpoint run` stalls right after 'PUMP_IPC_READER: spawned' → 30s FIRST_EVENT_GRACE → 'no output / dead or wedged'; `daemon stop` cannot join the stuck workers. DISTINCT from the removed B1 path-(c) mutex deadlock. DISPOSITION = PROVE-DON'T-CHANGE (doyle GATE-PASS @e883f45, 2026-06-18): this ROOT is the SUPERSEDED v0.12.0 hypothesis — the post-L0 code ALREADY prevents the wedge, so NO fail-fast / worker-count code was added. serve_attach forwards fire-and-forget (net_stream_send op_id=None) and the broker-side send_stream is already BROKER-QUIC-DEADLINE-bounded (bounded_block_on, 10s); the loopback duplex is drained broker-INTERNALLY by the operator row's own read pump (RecvHalf::Loopback, retentive_cap==0 → evict-not-park) so a dead rc (a dropped IPC subscriber) never backs peer_w up; bounded_block_on parks the BROKER DISPATCH thread, not a net worker → no worker-pool exhaustion (full mechanism in the required_stages comment). Folds the status=online sub-check: a dead spt-hosted endpoint is marked OFFLINE within one reconcile tick on abrupt child death (broker exit-waiter reaps the session → B2 sees it absent) — PROVEN, no change. (v0.12.1)
2026-06-23T09:38:03.2538697Z - Required stages: int
2026-06-23T09:38:03.2538730Z 
2026-06-23T09:38:03.2538836Z ### REQ-PICKER-HISTORY-FRESH
2026-06-23T09:38:03.2539999Z - Title: The `spt endpoint run` picker shows project history for FRESH endpoints (operator-raised v0.12.0 real-harness finding). Symptom: a fresh endpoint shows no project history in the picker. ROOT TBD — investigate the project-history loader (v0.10.0 PICKER-2, picker/data.rs) before fixing: distinguish a real loader bug from 'fresh = no history yet' semantics. (v0.12.1)
2026-06-23T09:38:03.2540100Z - Required stages: impl, unit
2026-06-23T09:38:03.2540271Z 
2026-06-23T09:38:03.2540387Z ### REQ-PICKER-ONLINE-ACTION
2026-06-23T09:38:03.2541917Z - Title: The `spt endpoint run` picker shows the correct action for an ALREADY-ONLINE endpoint — Attach, NOT 'Start now' (operator-raised v0.12.0 real-harness finding). Symptom: the picker offers 'Start now' for endpoints that are already online. ROOT TBD — investigate the status→action mapping (v0.10.0 PICKER-1 four-state status, picker/model.rs): is it reading live/online state correctly, or rendering stale/wedged broker state (i.e. partly a symptom of the broker wedge / status=online latch)? Fix so online → Attach. (v0.12.1)
2026-06-23T09:38:03.2542032Z - Required stages: impl, unit
2026-06-23T09:38:03.2542065Z 
2026-06-23T09:38:03.2542170Z ### REQ-ENDPOINT-LIST-MERGE-LOCAL
2026-06-23T09:38:03.2543917Z - Title: `spt endpoint list` always merges this node's LOCAL (unadvertised) perches into the view; the `--local` flag is REMOVED (operator decision 2026-06-17). Rationale: `spt whoami` is a thin alias of `endpoint list` — a just-online agent running `whoami` must see its OWN perch, or it gets an omitted-self view ('chaos'). FIX: drop the `--local` flag + its `--detail` conflict test + the v0.10.0 REQ-PICKER-5 hint line (cli.rs:1678) + cmd_list_local; the bare list merges local perches into the subnet view; fix the whoami alias path accordingly. Run `cargo run -p xtask -- gen` (docs-drift, DEFAULT target). (v0.12.1)
2026-06-23T09:38:03.2544145Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2544179Z 
2026-06-23T09:38:03.2544308Z ### REQ-HAZARD-ENDPOINT-RUN-ATTACH-OUTPUT
2026-06-23T09:38:03.2549285Z - Title: A clean `spt rc` attach to a LIVE spt-hosted (`endpoint run`) harness must DELIVER the harness's PTY output. KEYSTONE — the operator's central 'attach shows no output' symptom, reproduced on the real dummy-harness fixture (v0.12.1 Wave 1) with NO death and NO wedge: bringup succeeds (online, harness pid alive + heartbeating, psyche hosted), the attach CONNECTS (PUMP_IPC_READER spawned, no RC_FAIL, holds the full window) — but receives EXACTLY 0 bytes over 10s of the harness's flushed [session.self] stdout. DISTINCT from REQ-HAZARD-VIEWER-CLOSE-DETACH (death) and REQ-HAZARD-ATTACH-WEDGE (dead-child backpressure): here the harness is ALIVE and the attach is a clean first subscribe. This BLOCKS the 'view is independent' invariant — re-attach is meaningless if a live endpoint-run harness shows nothing. KNOWN-GOOD (rules out 'no drain'): attach.rs `local_attach_via_loopback_conn_rides_the_same_pump` + `broker_spawns_the_pty_child_in_the_requested_cwd` prove the broker DOES drain+fan a `spawn_session` PTY child to a loopback attach over the SAME transport rc uses. Both spawn_session and endpoint-run's spawn_session_pid send KIND_SPAWN → the same dispatch_spawn (broker.rs:706/835) which starts the per-session drain+OutputLog — so the gap is NARROWER than 'no drain', endpoint-run-specific. Root candidates: (a) spawn_session_pid's SpawnReq stdio/env/cwd differs so the dummy's stdout isn't the captured ConPTY; (b) the harness stdout WRITE BLOCKS because the ConPTY buffer fills (drain not reading THIS pty) — explains alive-but-0-bytes; (c) ConPTY reader-park (KH 7.6) on this path; (d) `spt rc` resolve_session/subscribe for an endpoint-run session subscribes to the wrong/empty log. (v0.12.1)
2026-06-23T09:38:03.2549420Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2549448Z 
2026-06-23T09:38:03.2549538Z ### REQ-CLI-HELP-MARKDOWN
2026-06-23T09:38:03.2552597Z - Title: `spt --help` (and every subcommand --help) renders the inline Markdown authored in the clap doc-comments as terminal styling, never as literal markers: `**bold**` → ANSI bold, `` `code` `` → ANSI cyan, `[text](url)` → `text`. The markers are STRIPPED either way — a raw `**` or backtick must NEVER reach the user (the operator-reported v0.12.0 defect: help text reads `**ctrl-b**` and stray backticks verbatim). Color/bold escapes are emitted ONLY when the help is going to a real terminal AND color is not suppressed (NO_COLOR unset · CLICOLOR != 0 · CLICOLOR_FORCE forces on); a pipe / redirect / CI / NO_COLOR falls back to strip-only (clean plaintext, zero escapes) so machine-readable help is byte-identical regardless of marker syntax. Pure transform over the clap-rendered help string at the single run()/bare_invocation chokepoint; preserves pre-existing ANSI (CSI sequences passed through untouched), never spans markers across a newline, leaves unmatched/empty markers literal, and does not alter the help layout. (v0.12.1)
2026-06-23T09:38:03.2552715Z - Required stages: impl, unit
2026-06-23T09:38:03.2552749Z 
2026-06-23T09:38:03.2552855Z ### REQ-HAZARD-WMI-DAEMON-WINDOW
2026-06-23T09:38:03.2555278Z - Title: `spt daemon start` launches the daemon with NO visible console window. REGRESSION (v0.12.1 L1.5): the WMI job-neutral launch (spawn_daemon_via_wmi) set CREATE_NO_WINDOW on the launching powershell but NOT on the Win32_Process.Create call — Win32_Process.Create does not inherit it, so the spawned cmd.exe env-forwarding wrapper popped a console window on every cold-start (violating REQ-INSTALL-10's v0.7.4 no-persistent-window invariant; the old detached_no_inherit path set DETACHED_PROCESS|CREATE_NO_WINDOW). FIX: pass a Win32_ProcessStartup with CreateFlags=DETACHED_PROCESS (0x8 — no console so no window; CREATE_NO_WINDOW 0x08000000 is NOT a valid Win32_ProcessStartup flag → ReturnValue 21 invalid-param, which is why the naive port fails) + ShowWindow=SW_HIDE(0) belt, via the ProcessStartupInformation argument. (v0.12.2)
2026-06-23T09:38:03.2555488Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2555521Z 
2026-06-23T09:38:03.2555631Z ### REQ-CLI-OUTPUT-MARKDOWN
2026-06-23T09:38:03.2560127Z - Title: Human-prose COMMAND OUTPUT (not just `--help`) renders the inline Markdown authored in its source strings as terminal styling, never literal markers: `` `code` `` → ANSI cyan, `**bold**` → ANSI bold, `[text](url)` → `text`, markers STRIPPED either way. REQ-CLI-HELP-MARKDOWN only hooked the clap `--help` chokepoint, so command output still printed raw Markdown (audit: `spt how-to` topic text showed `# headers`/backticks, `spt subnet`/`subnet status` hint footers showed stray backticks, the daemon-status `not running` line, the `ENDPOINT_RUN_STARTED` attach hint, and the daemon's `SUBNET_DETACHED` startup line — 13 prose surfaces). The same line-bounded pure `helpfmt::render` is applied at each emit site, color-gated by the OUTPUT STREAM's own tty (`stdout_color` for print/println, the new `stderr_color` for eprintln). HARNESS-SAFETY (binding): color is tty-gated, so an adapter (piped / non-tty / NO_COLOR) gets STRIP mode = zero ANSI + markers removed; every dual-contract MACHINE token on a rendered line (`ENDPOINT_RUN_STARTED:`, `NO_SUCH_TOPIC:`, `SUBNET_DETACHED:`) carries NO Markdown markers, so it survives strip byte-intact — the adapter parse is never perturbed. Pure-machine output (the `<EVENT …>` envelope, bringup parse-tokens SEEDED/BOUND/READY/NO_SEED, `--json`, QR) is NEVER routed through the renderer. The one spt-daemon source string (`SUBNET_DETACHED`, the bin-local renderer is unreachable from the daemon crate) is authored marker-free instead. (v0.12.2)
2026-06-23T09:38:03.2560257Z - Required stages: impl, unit
2026-06-23T09:38:03.2560309Z 
2026-06-23T09:38:03.2560408Z ### REQ-HAZARD-INJECT-CONTROL-COEXIST
2026-06-23T09:38:03.2567907Z - Title: SPINE INVARIANT (v0.13.0 keystone): the broker must accept INJECTED keystrokes into an spt-hosted PTY (the v0.11.0 raw direct-inject today; the ADR-0022 translation-binary choreography tomorrow) WHILE a live `spt rc` controller is attached to the SAME PTY, without (a) the operator losing control, (b) the endpoint latching ONLINE+CONTROLLED, or (c) the broker wedging. The injection inlet is PERMANENT — spt-claude-code requires keystroke injection — so this is root-caused + fixed at the PTY-injection layer, IN STEP with the ADR-0022 delivery redesign that formalizes the inlet. REOPENS the wedge facet of REQ-HAZARD-ATTACH-WEDGE: the v0.12.1 prove-don't-change covered only DEAD-CHILD backpressure, NOT the injection trigger (operator's signal — one injected keystroke succeeds, the next wedges → the single-threaded broker parks on a blocking PTY/loopback write after injection-induced harness output). REPRO-FIRST on the real dummy-harness fixture (NO theory): instrument to nail the exact blocking call before any fix. Fix candidates: non-blocking/fail-fast PTY write, split input/output, bounded-evicting. Mechanism shared with W2 — spt-core owns EVERY PTY write and applies an injected sequence ATOMICALLY (controller input buffered during the sequence, flushed after) so a stash/restore can't be clobbered. CONFIRMED ROOT (doyle /diagnose 2026-06-19, code-grounded): Broker::append (broker.rs:205-227) fans each live output chunk to the CONTROLLER on a SYNCHRONOUS BLOCKING write_frame held inline in the session's drain thread (the 'authoritative, advances delivered_through' path, D4-1), while VIEWERS use a dedicated writer thread + bounded evicting sync_channel (add_viewer:273 / viewer_writer) that can never stall the drain. So a slow/backed-up controller socket — or the full 64KB loopback duplex (the ATTACH-WEDGE buffer) — BLOCKS the drain thread → output stalls → keystroke echoes stall (PERCEIVED input lag) → unrecoverable wedge when the consumer never drains. TRIGGERS ON NORMAL INTERACTIVE rc USE under heavy harness output (TUI redraw), NOT only message injection — same root, wider repro. FIX DIRECTION: move controller delivery off the drain thread onto a dedicated writer (the viewer_writer pattern) BUT preserve the authoritative cursor — block the WRITER thread (not the drain), bound the wedge (deadline → detach/mark-gone, never park forever), never silently evict the operator's authoritative view. (v0.13.0)
2026-06-23T09:38:03.2568134Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2568174Z 
2026-06-23T09:38:03.2568336Z ### REQ-HAZARD-VIEWER-STARVE-UNDER-CONTROLLER-BACKPRESSURE
2026-06-23T09:38:03.2573636Z - Title: A SLOW controller must not starve a concurrent `rc --view` VIEWER. W1 (REQ-HAZARD-INJECT-CONTROL-COEXIST) moved the controller SOCKET WRITE off the drain thread onto controller_writer, but left the bounded HANDOFF (ControllerJob::deliver) as an INLINE try_send SLEEP-POLL on the drain (broker.rs:1450-1457 → deliver:669-685, up to CONTROLLER_WRITE_DEADLINE=5s). So when a controller drains slower than the PTY floods, its CONTROLLER_CHANNEL_DEPTH(4096) channel fills, deliver() polls inline, and the DRAIN THREAD is throttled to the controller's read rate → OutputLog::append's viewer fan-out (try_send) stops running → a concurrent VIEWER receives only the initial replay then nothing (root 'b4', warm forkpty: a_journaled c1=0/EVICT=0/got_output=FALSE; steady-state-near-full = no recovery; forkpty-only, floods harder than Windows ConPTY). The viewer-not-starved-by-a-busy-session property is legitimate (rc --view of a noisy session must show LIVE output). FIX: the controller becomes a SINGLE NON-BLOCKING try_send (like a viewer), done IN append() under the log lock; deliver()'s sleep-poll DELETED; the drain NEVER sleeps. ControllerSink gains a stateful last_ok deadline → a TRULY-stalled controller (continuous-Full past CONTROLLER_WRITE_DEADLINE) is evicted (bounded-wedge preserved); a slow-but-alive controller DROPS frames + falls behind the ring (resume-from-floor, the existing reconnect case). B2 GAPLESS-HANDOFF PRESERVED via a CONTIGUOUS delivered_through: controller_writer advances the cursor ONLY when the written seq == cursor (next expected); a gap from a drop FREEZES the cursor at last-contiguous so a re-attaching brain's resume_seq never skips a dropped chunk (a high-watermark advance past the gap would be a not-exactly-once resume = B2 violation, doyle's gate). (v0.13.0)
2026-06-23T09:38:03.2573783Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2573817Z 
2026-06-23T09:38:03.2573926Z ### REQ-VIEWER-SKIP-TO-LIVE-ON-EVICT
2026-06-23T09:38:03.2579258Z - Title: A `rc --view` VIEWER that overflows its broker subscription queue and is EVICTED (OutputLog::append try_send Full → viewers.remove, REQ-HAZARD-VIEWER-ISOLATION session-protection) must SKIP TO LIVE, not die silently. ROOT (v0.13.0, b4 JIT item 2 = p0_paste + post-b4 a_journaled-Linux, ONE root): serve_attach forwards each frame (read_event→b64decode→re-encode AttachRecord→net_stream_send) SLOWER than the drain fans out under flood → its VIEWER_CHANNEL_DEPTH(256) channel overflows → the drain evicts (viewers.remove drops the ViewerSink → drops tx → viewer_writer's rx.recv() Err → the writer returns WRITING NOTHING) → serve_attach's brain.read_event() just STOPS getting Output (no EOF, no error) → serve_attach blocks forever → the operator receives nothing (attach_received_output=FALSE). Eviction-of-a-hopelessly-behind-viewer is CORRECT session-protection (keep it); SILENT+PERMANENT eviction is the bug. VIEWER-only → B2-SAFE (a viewer never advances delivered_through / is not authoritative / exposes no resume cursor). FIX (doyle-gated, skip-to-live = tail -f reconnect): (1) explicit broker→viewer EVICTION SIGNAL (KIND_VIEWER_EVICTED, written in the viewer_writer thread OFF the log lock, DISTINCT from session-exit EOF so serve must NOT tear down on it); (2) serve_attach re-subscribes from the CURRENT ring floor (skip-to-live, replays nothing, sees the next live burst) — resetting the cold serve-brain's next_seq so the post-eviction forward-jump replay is accepted (the legacy reject-gap path, brain.rs:618-626, would otherwise FATAL the forward jump); (3) HARD constraint NO evict→resubscribe busy-loop: serve_attach rate-limits re-subscribes (RESUBSCRIBE_INTERVAL) so under max-flood the operator sees intermittent LIVE bursts, never a CPU spin. (v0.13.0)
2026-06-23T09:38:03.2579516Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2579544Z 
2026-06-23T09:38:03.2579654Z ### REQ-HAZARD-VIEWER-RING-ROLL-SNAP
2026-06-23T09:38:03.2583843Z - Title: A read-only rc --view VIEWER whose serving brain falls behind the live ring under a hard flood and receives a FORWARD Output seq gap (the ring rolled frames out between reads, BEFORE any channel-overflow eviction → NO KIND_VIEWER_EVICTED marker) must SNAP TO LIVE (accept-and-advance via dedup-below + snap-above), NOT fatal with output gap (brain.rs:624/628 legacy reject-gap). ROOT (v0.13.0 forkpty, post-b4+skip-to-live): serve_attach subscribes a viewer via brain.attach_as(Viewer) leaving session_cursors EMPTY → the viewer serve-brain uses the LEGACY reject-gap → a PRE-eviction ring-roll forward-gap FATALS read_event → serve_attach returns → forwarding stops → attach_received_pty_output=FALSE (a_journaled / p0_paste / attach.rs:1071 wedged_viewer, Linux forkpty; Windows ConPTY floods slower → MASKED false-green). DISTINCT from REQ-VIEWER-SKIP-TO-LIVE-ON-EVICT (the POST-eviction re-subscribe-from-floor): this is PRE-eviction gap-tolerance while STILL subscribed. VIEWER-only → B2-SAFE (a viewer never advances delivered_through / is not authoritative); the CONTROLLER keeps strict reject-gap (exactly-once resume). FIX: arm snap-above at initial viewer attach (attach_as_viewer_snap = attach_as(Viewer) + session_cursors.insert(session_id, from_seq)); the two viewer-survival mechanisms COMPOSE — this tolerates pre-eviction ring-roll gaps, REQ-VIEWER-SKIP-TO-LIVE-ON-EVICT recovers post-eviction. (v0.13.0)
2026-06-23T09:38:03.2583991Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2584025Z 
2026-06-23T09:38:03.2584133Z ### REQ-HAZARD-CONTROLLER-GAP-RESUME
2026-06-23T09:38:03.2590642Z - Title: A serving CONTROLLER whose serve-brain hits a b4 drop-don't-block FORWARD output gap must RESUME-FROM-FLOOR (re-subscribe from delivered_through and re-fetch the dropped frames from the ring), NOT snap-above and NOT fatal. ROOT (v0.13.0 forkpty re-run, post-keystone): b4 made the controller a non-blocking try_send that DROPS frames when its bounded channel fills (a controller that falls behind its OWN echo under a hard flood), so the next read is a forward gap the strict reject-gap (brain.rs:624/628, B2 exactly-once) FATALS — wedged_viewer_does_not_stall_controller (attach.rs:1048) drove ctrl.read_event() raw and fataled on `output gap got 6134 want 4643`. Pre-b4 the inline sleep-poll BLOCKED the drain to the controller's rate (no drops, no gaps); this is a b4 SIDE-EFFECT, not a new class. A controller CANNOT snap (it is authoritative — advances delivered_through; skipping rolled frames = not-exactly-once = B2 violation), so REQ-HAZARD-VIEWER-RING-ROLL-SNAP does NOT apply. B2 INVARIANT (doyle, broker.rs:327-330): the ring trim is delivered_through-BLIND (`while ring.len() > cap_chunks { pop_front() }`), so re-fetch is exactly-once IFF tail - delivered_through <= cap_chunks (4096) — NOT guaranteed in general, but the common case (burst < ring; wedged_viewer ~1492 < 4096) holds. FIX: serve_attach catches the output-gap on the controller path (does not ?-propagate) and re-subscribes from Brain::controller_resume_floor (= delivered_through = the gap's `want`; NO mid-stream KIND_SESSIONS round-trip — sessions() loops on read_event and would re-fatal on the same gap + discard Output); the broker replays the dropped frames. The IRRECOVERABLE edge (floor unchanged across two resumes = ring rolled past delivered_through = frames gone) surfaces a MARKED truncation to the operator (never silent-skip = B2 lie, never spin) and ends cleanly — full graceful handling deferred to REQ-HAZARD-CONTROLLER-IRRECOVERABLE-BEHIND. Do NOT make the ring trim delivered_through-aware (that risks an unbounded ring under a stuck controller; the 5s eviction + 4096 ring is the practical bound). (v0.13.0)
2026-06-23T09:38:03.2590873Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2590906Z 
2026-06-23T09:38:03.2591041Z ### REQ-HAZARD-CONTROLLER-IRRECOVERABLE-BEHIND
2026-06-23T09:38:03.2593817Z - Title: DEFERRED EDGE of REQ-HAZARD-CONTROLLER-GAP-RESUME: when a serving controller falls behind the live ring FURTHER than the ring holds (tail - delivered_through > cap_chunks, the ring trim being delivered_through-blind, broker.rs:327-330), the dropped frames have rolled OUT of the ring and an exactly-once re-fetch is IMPOSSIBLE. v0.13.0 DETECTS this (resume floor unchanged across two consecutive resumes) and surfaces a MARKED truncation notice to the operator then ends the attach cleanly — it never silent-skips (a B2 lie) and never spins. FULL graceful handling (a clearly-marked snap-with-data-loss that keeps the operator on the live tail, or a structured truncation record the rc renders distinctly, plus the controller-too-slow + ring-too-small backpressure/sizing policy) is DEFERRED — staging it needs a netsplit / deep-behind harness (the in-process loopback rig keeps up; wedged_viewer's gap is recoverable at ~1492 < 4096). (v0.13.0+)
2026-06-23T09:38:03.2593937Z - Required stages: 
2026-06-23T09:38:03.2593969Z 
2026-06-23T09:38:03.2594074Z ### REQ-MSG-IDLE-TRANSLATION-BINARY
2026-06-23T09:38:03.2599110Z - Title: spt-hosted idle message delivery via an adapter TRANSLATION BINARY (ADR-0022). New opt-in manifest section `[message-idle-translation-binary]` = a TABLE carrying a `path` scalar (doyle OPT-B ruling: modeled as a table, not a bare top-level scalar, so a preceding section cannot silently absorb it + N+1 extensible; spt-core does NOT deny_unknown_fields, so a future key degrades gracefully); spt-core LIFECYCLE-manages it (spawn when the endpoint comes up, terminate when it goes down). The binary is a PURE stdin→stdout filter; spt-core owns EVERY PTY write. stdin (JSON-lines): `{type:"init",endpoint_id,node}` first · `{type:"event",envelope:"<EVENT…>"}` per inbound message (ADR-0020 envelope) · `{type:"input"}` content-free ping on each operator keystroke (binary tracks user-idle for its own idle-gated buffering; PTY input content NOT duplicated). stdout (JSON-lines): keystroke-commands `{key:…}`/`{delay_ms:…}`/`{text:…}` (extensible). spt-core applies the emitted sequence to the broker PTY ATOMICALLY (the W1 coordination — REQ-HAZARD-INJECT-CONTROL-COEXIST). The daemon poll feed is the ONE idle substrate for both topologies (Q1=A): harness-hosted consumer = the Monitor child, spt-hosted consumer = this binary; spt-core PREFERS a perch's poll listener if one exists (so spt-hosted can run a listener AND keep `spt rc`). Idle-only; busy/mid-turn = adapter hook-injection. Closes the current grounding gap: `api bind` registers no listener port → a listener-less spt-hosted perch SPOOLS inbound (only spooling+adapter-poll works today) → this delivers real inbound into the PTY. The v0.11.0 raw inject is the degenerate `{text:payload}{key:enter}` case. (v0.13.0)
2026-06-23T09:38:03.2599262Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2599292Z 
2026-06-23T09:38:03.2599397Z ### REQ-ADAPTER-TRANSLATE-PROOF
2026-06-23T09:38:03.2603632Z - Title: `spt adapter translate-proof <adapter> --event <envelope> [--session <id>]` — the author-time EMIT-half proof tool for `[message-idle-translation-binary]` (ADR-0022), symmetric to `spt adapter digest-proof` (REQ-TERM-5). It spawns and feeds the adapter's declared translation binary EXACTLY as the daemon does at idle-delivery — running the REAL `spt_daemon::translation` driver VERBATIM (no protocol reimplementation): `TranslationChild::spawn` the binary, send the `{type:"init",endpoint_id,node}` line then the `{type:"event",envelope}` line, and read back the emitted `{key}`/`{text}`/`{delay_ms}`/`{commit}` keystroke-command stream — then prints it author-readable (each Key with its `key_to_bytes` rendering, Text quoted, Delay in ms, Commit marker) with counts. It fills the SAME `{id}`→option and `{session_id}`→(--session, else a placeholder) keys into the `--event` envelope the daemon fills at runtime, so an envelope that proofs here feeds faithfully live. EMIT-half ONLY: it proves the binary's spawn+feed+emit contract; it does NOT exercise the daemon's atomic PTY apply / controller-buffering (that stays covered by the W2 inject_control_wedge int gate) — `--help` says so. Exit codes mirror digest-proof: 0 ok, 1 on spawn-fail / zero commands / no-commit-or-output / unparseable, 2 when the adapter declares no `[message-idle-translation-binary]` section. The `TranslationChild` Drop does the bounded no-zombie reap. (v0.13.x)
2026-06-23T09:38:03.2603869Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2603907Z 
2026-06-23T09:38:03.2604017Z ### REQ-HAZARD-BIND-CWD-UNSET
2026-06-23T09:38:03.2606531Z - Title: A bound endpoint's `info.cwd` is SET at bind so a freshly-created perch appears under its own project tab. ROOT (found, v0.13.0): `info.cwd` is NEVER set on bind — `cmd_bind` (spt-hosted) and `bind_from_seed` (harness-hosted) never thread cwd into `establish_perch`/`rec.cwd`. FIX: `cmd_bind` reads its own `current_dir` (the broker spawned it in `project_cwd`); `bind_from_seed` passes `seed.cwd` (already captured at seed time, currently DISCARDED). DISTINCT from REQ-PICKER-HISTORY-FRESH (v0.12.1) — that unioned cwd-origin into picker MEMBERSHIP but tested merge_origin_project with a PROVIDED origin; it never asserted `info.cwd` is actually set on bind, so a real `endpoint run` perch still had an empty cwd and the union had nothing to union. This is the v0.12.1 P1 'appears under its own project right away' claim that was REFUTED in the changelog — delivered for real here. (v0.13.0)
2026-06-23T09:38:03.2606641Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2606674Z 
2026-06-23T09:38:03.2606767Z ### REQ-PICKER-UX-V013
2026-06-23T09:38:03.2608340Z - Title: `spt endpoint run` picker UX (v0.13.0 operator dogfooding): (1) SKIP the first screen — open directly on 'Pick existing'; `n` jumps to 'Create new'. (2) AUTO-ATTACH after both Start-new AND Resume-from-history (both currently don't attach and show no stdout); add an `h` shortcut to run headless (no attach). (3) 'controlled by' shows the node NAME (node_label_display), not the raw hex. (4) Clean up Start-new output — drop the Rust `pid=Some(142748)` leak and the 'harness binds its perch on startup' internals; user-friendly, not a process log. (v0.13.0)
2026-06-23T09:38:03.2608431Z - Required stages: 
2026-06-23T09:38:03.2608460Z 
2026-06-23T09:38:03.2608566Z ### REQ-HAZARD-DRIVEN-BY-SELFHEAL
2026-06-23T09:38:03.2610262Z - Title: An spt-hosted endpoint's ONLINE+CONTROLLED state (`driven_by`) must CLEAR even when the detach IPC is lost — do NOT rely on the detach signal (same lesson as REQ-HAZARD-HOSTED-LIVENESS-RECONCILE B2): the reconcile loop clears `driven_by` when the endpoint has no live controller/session. Today a wedged or lost pump never delivers the detach, so the endpoint stays latched CONTROLLED forever. Composes with W1 (the wedge no longer blocks the detach) and rides the same pull-primary reconcile substrate as B2. (v0.13.0)
2026-06-23T09:38:03.2610390Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2610423Z 
2026-06-23T09:38:03.2610543Z ### REQ-HAZARD-DRIVEN-BY-IDLE-REMOTE-EVICT
2026-06-23T09:38:03.2615242Z - Title: An spt-hosted endpoint driven by a REMOTE controller whose remote is gone but whose broker connection stays OPEN (a wedged/lost pump that never delivers the detach) AND whose session is IDLE (no output) stays latched ONLINE+CONTROLLED forever: the W1 drain-evict only fires on OUTPUT (CONTROLLER_WRITE_DEADLINE on a backed-up write), a clean disconnect self-heals via detach_if→clear_controller, but an idle session with a half-open/wedged controller connection produces neither signal. PROVED repro-first on a real broker (v0.13.0 W5, inject_control_wedge.rs w5_a2): controller_by STAYS Some(origin) and driven_by STAYS Some after the remote is abandoned without a clean EOF on an idle session — so the brain reconcile CANNOT detect it from KIND_SESSIONS controller_by (the broker still reports it controlled). FIX DIRECTION (doyle ruling 2026-06-19, broker-side single-writer — the broker owns driven_by/clear_controller): wire the EXISTING D4c NetPresence connection-disconnect event → clear_controller for any session whose controller identity == the dead origin (become_controller already stores Some(origin); presence events already exist — modest wiring, NOT a new probe). The liveness ORACLE is QUIC's own keepalive/idle-timeout: a presence-disconnect IS a real QUIC conn close, already tolerant of transient blips within the keepalive window, so NO heavy partition ADR is needed UNLESS the QUIC timeout proves too slow for the UX (then mint an ADR for a faster controller-heartbeat + its false-evict bound). Composes with W1 (output path) + W5 Gap B (no-session) — this is the third, idle-remote, leg. (v0.13.0 follow-up)
2026-06-23T09:38:03.2615461Z - Required stages: 
2026-06-23T09:38:03.2615494Z 
2026-06-23T09:38:03.2615610Z ### REQ-HAZARD-RC-INPUT-KEY-ENCODING
2026-06-23T09:38:03.2620140Z - Title: An `spt rc` session forwards the Backspace key as the VT DEL byte (0x7f), so the hosted TUI (Claude Code) deletes ONE character — never a whole word. SYMPTOM (operator dogfooding): Backspace in an rc session always behaves like ctrl+Backspace — deletes the entire last word. ROOT (doyle /diagnose, code-grounded, byte PENDING HITL confirm): rc is a RAW VERBATIM byte pump — spawn_stdin_reader (rc.rs:152) reads std::io::stdin() bytes under crossterm raw mode and forwards them unchanged (parse_stdin_chunk only intercepts the ctrl-b detach prefix); there is NO key-event encoding and NO 0x08↔0x7f normalization ANYWHERE in the tree (grep: zero SetConsoleMode / ENABLE_VIRTUAL_TERMINAL_INPUT). On Windows, crossterm enable_raw_mode does NOT set ENABLE_VIRTUAL_TERMINAL_INPUT, so the LEGACY console delivers ^H (0x08, ctrl+h) for Backspace instead of VT DEL (0x7f); Claude Code maps ^H → backward-kill-word → the observed whole-word delete. CONFIRM-FIRST (build the loop): an env-gated hexdump in spawn_stdin_reader (SPT_RC_DEBUG_KEYS) prints the forwarded byte; operator presses Backspace + ctrl+Backspace in a real rc session. FIX CANDIDATES: (a) enable ENABLE_VIRTUAL_TERMINAL_INPUT on the rc stdin console on Windows so the console emits proper VT (Backspace→0x7f, arrows/Home/End as CSI) — cleanest, fixes the whole key map not just Backspace; (b) narrow normalize bare 0x08→0x7f in the rc input path (riskier — a real ctrl+h is also 0x08). Prefer (a) unless it regresses other keys. Add a KNOWN-HAZARDS.md entry on landing. (v0.13.0)
2026-06-23T09:38:03.2620268Z - Required stages: impl, unit
2026-06-23T09:38:03.2620417Z 
2026-06-23T09:38:03.2620531Z ### REQ-HAZARD-EFFECT-JOURNAL-PTY-WEDGE
2026-06-23T09:38:03.2629537Z - Title: The effect journal serializes EVERY PTY effect under one mutex held ACROSS two fsyncs AND the blocking PTY write — so interactive input stutters and ultimately wedges the daemon hard. ROOT (doyle /diagnose, code-grounded + MEASURED on the operator's real Windows box, 2026-06-19): EffectJournal::apply_once (effect.rs:168-188) takes `inner.lock()` and holds it across `write_line(PENDING)` → `effect()` → `write_line(DONE)`, where write_line (effect.rs:235-239) does flush()+sync_all() (a full FlushFileBuffers) — so each effect pays TWO fsyncs under a GLOBAL lock, and the closure `effect()` (the actual PTY write, broker.rs:1257 EffectKind::PtyWrite via attach.rs:197 send_effect) runs while the lock is held. Two operator-visible facets, ONE root: (A) STUTTER/LAG — every keystroke is a PtyWrite effect = 2× sync_all serialized; measured fsync on %LOCALAPPDATA%\spt-core = median 6.5ms, spikes to 198ms (C: was recently at 100%), so ~13ms+ per keystroke best case, hundreds under contention → 'many but not all keypresses take 100s of ms, choppy, worsens with volume'. (B) HARD PERMANENT WEDGE — when a PtyWrite `effect()` blocks (ConPTY input buffer full / harness not draining stdin), the journal lock is held INDEFINITELY → the single-threaded inbound-stream dispatch (dispatch.rs serve_attach, which both applies input effects AND opens attaches) can never progress → EVERY subsequent attach (`spt rc --view`/`--take`) fails with 'attach request: brain IPC read deadline elapsed' (confirmed: two retries deadline identically; broker control-plane KIND queries still answer — different thread). This REFUTES the W2-deferred ruling that park-(b)/(c) is 'Windows-benign because ConPTY absorbs 4MiB' — on the real box the input path wedges regardless. DISTINCT from W1 (REQ-HAZARD-INJECT-CONTROL-COEXIST = the OUTPUT drain, correctly fixed @8b5583e; output uses broker.rs:1106 append, NOT the fsync journal). This is the INPUT/effect-journal path W1 never touched, and it is THE wedge the operator hits with --take/--view. FIX DIRECTION (candidates, repro-first — extend inject_control_wedge.rs to a REAL backed-up-PTY-consumer + a real rc-client attach assertion, the gap W1's gate missed): (1) do NOT hold the journal lock across effect() — reserve the key + fsync PENDING under lock, RELEASE, run effect(), re-acquire to fsync DONE + mark applied (preserve crash-idempotency via the per-key reservation, not a global hold); (2) bound/fail-fast the PtyWrite itself (the W2-deferred park bound — write_input must never block indefinitely, DSR-answer must not hold the writer mutex across a blocking write); (3) drop per-keystroke fsync on the interactive path — PtyWrite effects are EPHEMERAL (a keystroke lost on a broker crash is retyped; PTY state is not reconstructed from keystroke replay), so in-memory applied-set dedup suffices (the broker survives the brain — that IS the dedup anchor), with async/batched fsync or no-fsync for EffectKind::PtyWrite while durable kinds (NetSend/NetDial/Registry/Spool) keep their fsync. Combine (1)+(3) at minimum. Add a KNOWN-HAZARDS.md entry on landing. (v0.13.0)
2026-06-23T09:38:03.2629823Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2629871Z 
2026-06-23T09:38:03.2629972Z ### REQ-HAZARD-RC-ATTACH-ONLINE-RACE
2026-06-23T09:38:03.2633563Z - Title: `spt endpoint run` in an ATTACH/VIEW terminal action attaches BEFORE the freshly-spawned endpoint is online, so the attach races (or outright loses to) the harness bind. ROOT (doyle /diagnose, code-grounded): cmd_endpoint_run (cli.rs) does launch_harness_brokered_in -> (if start: return) -> run_attach with NO await-online between them. launch_harness_brokered_in returns once the harness PROCESS is spawned, but the broker-PTY bind (info status -> STATUS_ONLINE + the live session) lands ASYNC. Both picker attach paths route here with start=false (RunMode::Attach -> cmd_endpoint_run start=false,view=false): Start-now catches the endpoint mid-bringup -> run_attach attempts + loses the handshake race; Resume-from-history catches it still fully OFFLINE -> run_attach's status-gate (REQ-HAZARD-RC-ATTACH-FAILFAST) short-circuits 'offline - nothing to attach' and NEVER attempts. SAME root, two faces (the W4 attach-by-default surfaced both; an online endpoint is unaffected - the picker returns Outcome::Attach, not Run). FIX: in cmd_endpoint_run, when the terminal action is attach/view (NOT start), AWAIT the endpoint online between launch_harness_brokered_in success and run_attach - poll spt_store::info read_info().status to STATUS_ONLINE with a bounded harness-boot deadline (~25s) at a tight interval; on online -> run_attach; on timeout -> ENDPOINT_RUN_ONLINE_TIMEOUT err (do NOT attach a dead bringup). (v0.13.0)
2026-06-23T09:38:03.2633681Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2633714Z 
2026-06-23T09:38:03.2633815Z ### REQ-RC-KEY-VT-TRANSLATE
2026-06-23T09:38:03.2639540Z - Title: On Windows, `spt rc` translates CONSOLE KEY EVENTS to standard xterm VT so ALL keys reach the hosted harness — arrows/Home/End/PgUp/PgDn/Insert/Delete/F-keys, every modifier combo, Backspace/Ctrl+Backspace — not just the byte-emitting ones. ROOT (operator HITL, doyle /diagnose): `spt rc` reads raw STDIN BYTES (spawn_stdin_reader, std::io::stdin().read); on the Windows LEGACY console (no ENABLE_VIRTUAL_TERMINAL_INPUT) the special keys produce console KEY_EVENTs, NOT stdin bytes, so the byte-pump sees nothing → those keys are DEAD. Enabling ENABLE_VIRTUAL_TERMINAL_INPUT was rejected (W7 dc07c39): on Windows Terminal it yields harness-specific win32-input-mode + broke ctrl-b detach. FIX (agnostic, full fidelity): on Windows, replace the stdin byte-read with a crossterm EVENT source (crossterm 0.28 already a dep; the picker already reads events) and translate each KeyEvent → STANDARD xterm VT bytes via a PURE translate_key_event(KeyEvent)->Vec<u8> (copy a known-correct xterm table verbatim, ADR-0001 spirit), forwarded through the SAME rc pump — the harness receives ordinary xterm VT (harness-AGNOSTIC, no win32-input-mode). Press-only (drop Repeat/Release). Detach stays the ctrl-b+'d' PREFIX, event-sourced (doyle Option B): Ctrl+B arms; armed+plain-'d'⇒Detach; armed+Ctrl+B⇒emit literal 0x02; armed+other⇒0x02 then translate(other). Non-tty stdin (piped/tests) → FALL BACK to the byte-read path (keeps e2e byte-injection working). UNIX UNCHANGED (its raw-mode byte stream already delivers proper VT; cfg-split, zero Unix regression). SUPERSEDES the W7 normalize_key_byte swap on Windows — the translator emits 0x7f for Backspace and 0x08 for Ctrl+Backspace natively (REQ-HAZARD-RC-INPUT-KEY-ENCODING folded in). NO int (a live interactive console can't be driven in CI — HITL, REQ-RUN-PICKER/RC-1 precedent); the exhaustive non-vacuous translate_key_event mapping unit + the event-detach unit ARE the surface. (v0.13.0)
2026-06-23T09:38:03.2639759Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2639787Z 
2026-06-23T09:38:03.2639898Z ### REQ-HAZARD-PTY-INPUT-WRITER-WEDGE
2026-06-23T09:38:03.2646101Z - Title: Pasting into an `spt rc` session WEDGES the broker — after a paste the operator can no longer type AND can no longer attach to NEW or EXISTING sessions (`brain IPC read deadline`). ROOT (doyle /diagnose, code-grounded): the operator-keystroke path rc -> net-stream Input -> serve_attach (attach.rs:197 brain.send_effect) -> KIND_INPUT -> broker dispatch loop (broker.rs:1091) -> dispatch_input (broker.rs:1459) -> session.write_input(&bytes) runs SYNCHRONOUSLY on the broker request-handling thread. W1b (REQ-HAZARD-EFFECT-JOURNAL-PTY-WEDGE) released the journal lock across the effect (fix 1) + made PtyWrite ephemeral/no-fsync (fix 3) but EXPLICITLY DEFERRED fix (2) — bound/fail-fast the PtyWrite itself. A single keystroke never fills the ConPTY input buffer; a PASTE BURST does -> write_input blocks -> the dispatch thread cannot service the next frame (a re-attach subscribe, a become_controller restore-write, an inject-floor flush) -> wedge. Not a bug-2 regression (the byte path funnels to the same write_input; paste just reliably fills the buffer). FIX (doyle design, V0.13.0-P0-PTY-INPUT-WRITER-DESIGN.md, CONTEXT L33 broker-owns-PTY/minimal + L435 SessionSurface + single-writer pattern): one dedicated per-session INPUT-WRITER THREAD = the SOLE caller of the blocking write_input, fed by a BOUNDED FIFO channel; every caller (dispatch_input, serve_attach->send_effect, inject-floor flush) ENQUEUES + returns immediately, never blocks. A blocked/slow harness blocks ONLY its own writer thread, never the broker dispatch. Backpressure (operator ruling): queue full => DROP excess input + stamp the session INPUT_BACKPRESSURE (visible health signal); the daemon NEVER wedges; a merely-slow harness self-heals as the writer drains. Exactly-once preserved (PtyWrite ephemeral: apply_once effect = the non-blocking enqueue => Applied; ack now means accepted+ordered, benign — rc does not gate on landing); order preserved (single FIFO + single writer); inject-floor (W2 Layer C) choreography moves to the lone writer. Completes the W1b-deferred fix (2), cross-platform (cfg(unix) forkpty park folds in). (v0.13.0)
2026-06-23T09:38:03.2646238Z - Required stages: impl, unit, int
2026-06-23T09:38:03.2646272Z 
2026-06-23T09:38:03.2646451Z ### REQ-SESSION-RESUME-TEMPLATE
2026-06-23T09:38:03.2653294Z - Title: Resuming an endpoint session that HAS conversation history brings up a BLANK session. ROOT (doyle, code-grounded + CONTEXT — case-3 spt-core MISSING feature, NOT a perri docs-miss): CONTEXT L127-129 already defines the resume-session seam ('continue-existing: resume an existing harness session under the adapter — its NATIVE resume'), and the manifest already has the resume-variant pattern (Session has BOTH psyche_init AND psyche_resume, manifest.rs:217-219) — but the agent's own session has ONLY self_ (`[session.self]`, no resume sibling). cmd_endpoint_run (cli.rs:1304) re-passes the session_id through `[session.self]` on resume (resume.unwrap_or_else(mint_session_id)), so the adapter's FRESH command (e.g. `claude --session-id ..`) runs again instead of the harness NATIVE resume (`claude -r ..`) -> CC starts a fresh transcript -> blank. spt-core forwards session_id + cwd faithfully; it just has no way to express the native-resume invocation. SECOND GAP: CC resolves a transcript by session_id + cwd, but the session ledger records only {ts, session_id, trigger} (no cwd), so picker Resume-from-history (cross-project rows) can't restore the right cwd. FIX (doyle design, V0.13.0-P2-SESSION-RESUME-DESIGN.md, mirrors psyche_init->psyche_resume exactly): (A) add a `[session.resume]` role (resume: Option<SessionRole> on Session + roles()/is_empty()); cmd_endpoint_run selects it when --resume is set AND it's declared (fill {id}/{session_id}=resumed id/{session_name} + the resume cwd), else FALL BACK to `[session.self]` (full back-compat). (B) record cwd PER ledger row (operator ruling): {ts, session_id, trigger, cwd} additive serde-default; resume cwd = resumed row cwd -> else perch info.cwd -> else current_dir (back-compat for old rows + single-project endpoints); picker threads the selected row's cwd through Outcome::Run -> cmd_endpoint_run. (C) public docs (MANIFEST + harness-contract) teach `[session.resume]` so perri builds the adapter side BLIND. Adapter follow-on (perri, AFTER spt-core ships+docs): declare `[session.resume] command = claude -r {session_id} --remote-control {id} --dangerously-skip-permissions` from the resume cwd. Completes REQ-READY-AGENT-RESUME / REQ-RUN-PICKER resume-from-history. (v0.13.0)
2026-06-23T09:38:03.2653427Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2653460Z 
2026-06-23T09:38:03.2653551Z ### REQ-RC-WIN-PASTE
2026-06-23T09:38:03.2658269Z - Title: In an `spt rc` session neither ctrl+V nor right-click pastes (CC explicitly supports ctrl+V). ROOT (doyle /diagnose): RawGuard does only enable_raw_mode (no bracketed paste / no mouse capture / no clipboard interception); the Windows console delivers a paste as synthetic per-char KEY EVENTs (no crossterm Event::Paste), and ctrl+V translates to bare ^V forwarded to CC — but CC runs DAEMON-SIDE with NO access to the operator's LOCAL clipboard, so remote paste is fundamentally CLIENT-ORIGINATED. A multi-line paste-as-keys also becomes a \r submit-storm. FIX (doyle design, V0.13.0-P1-RC-PASTE-DESIGN.md, cfg(windows), folds into the bug-2 event path): on a paste gesture rc reads the LOCAL clipboard + forwards a BRACKETED PASTE (ESC[200~ + content + ESC[201~); CC has bracketed-paste mode on (its TUI sets ESC[?2004h) so it treats it as a paste — content intact, no submit-storm, harness-AGNOSTIC. ctrl+V: intercept Char('v')+CONTROL in the event loop -> read_clipboard -> bracketed paste. Right-click: RawGuard also EnableMouseCapture (disables console QuickEdit + enables ENABLE_MOUSE_INPUT so right-click surfaces as Event::Mouse on legacy cmd/powershell) -> right-button -> read_clipboard -> bracketed paste; DROP all other mouse (CC has no mouse features, operator-confirmed, so capture costs nothing). read_clipboard = clipboard-win crate (cfg(windows), minimal); empty/failed = clean no-op. Content forwarded VERBATIM (literal pasted text, no per-char translation). Unix UNCHANGED (its terminal pastes natively through the byte pump). DEPENDS ON P0 (a paste chunk must not wedge the broker). (v0.13.0)
2026-06-23T09:38:03.2658485Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2658523Z 
2026-06-23T09:38:03.2658637Z ### REQ-HAZARD-INPUT-ACK-BACKPRESSURE
2026-06-23T09:38:03.2665896Z - Title: A FLOOD of operator input on one brain↔broker connection deadlocks the broker PERMANENTLY (entire broker — no new/existing attach; the controller stays latched because the per-conn handler can't process the detach). ROOT (doyle /diagnose, code-grounded + HITL capture, the v0.13.0 P1 ctrl+V re-open): `serve_attach` processes a whole `NetStreamData` batch of N operator `Input` records in its inner `for rec in decoder.push()` loop, calling `brain.send_effect(op_id, &bytes)` N times WITHOUT returning to `read_event()` — so the brain writes N `KIND_INPUT` frames back-to-back and drains nothing. The broker's single-threaded per-conn handler answers EACH with `send_frame(applied_envelope)` on the SAME conn (B5 exactly-once ack, KNOWN-HAZARDS 7.2). With the brain not reading, the broker→brain return direction fills (~10 frames = the IPC pipe buffer) → `send_frame` BLOCKS → the handler stops reading → the brain's writes block too → mutual full-duplex DEADLOCK. Capture pinned it: 11 input frames, write_input 11/11 (P0 holds — the PTY write is fine), ack send START=11 / END=10 (frame #11's applied-ack never returns). Same class as the v0.12.1 L0 two-conn split. Windows Terminal's ctrl+V paste accelerator was the trigger (injects the clipboard as a char-by-char key flood) but the deadlock is generic to ANY input flood, NOT ctrl+V-specific and NOT a P0 (PTY-write) or W1 (output-drain) regression. The applied-ack is load-bearing ONLY for `shellchan` (one-at-a-time spool delivery WAITS on `BrokerEvent::Applied`); `serve_attach` DISCARDS it (the operator/rc path is fire-and-forward, op_id for dedup only, never gates on the ack). FIX (doyle-approved): CONDITIONAL ACK — `InputReq` gains `ack: bool` (serde default = true, N-1-safe: an older brain's input still acks = today's behavior). `serve_attach`'s operator path calls `send_effect_no_ack` (ack=false) → `dispatch_input` writes NO applied frame → the per-conn handler never writes back while servicing the flood → it always drains → no deadlock (cures ANY input flood). `shellchan` keeps `send_effect` (ack=true) and its `Applied`-wait. Exactly-once PRESERVED: the broker still dedups by (session, op_id) at the applied-set regardless of the ack. N-1 caveat: an OLD resident broker (self-update window) ignores `ack=false` → still acks → the deadlock persists until a broker restart (inherent KNOWN-HAZARDS 7.9 broker-resident-wire-change class). (v0.13.0)
2026-06-23T09:38:03.2666034Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2666062Z 
2026-06-23T09:38:03.2666168Z ### REQ-RC-MOUSE-FORWARD
2026-06-23T09:38:03.2670634Z - Title: On Windows, `spt rc` must FORWARD scroll-wheel events to the harness when the harness has mouse reporting on. ROOT (operator HITL): P1's RawGuard EnableMouseCapture (added for right-click paste, REQ-RC-WIN-PASTE) makes Windows Terminal forward ALL mouse — including the scroll wheel — to rc instead of scrolling its own buffer, but the rc mouse handler dropped everything except right-button-down → scroll DIED (and WT's native scrollback is stolen by the capture). Operator ruling: keep mouse capture + right-click bracketed paste AND forward scroll to the harness. FIX (doyle design, cfg(windows), folds into the rc mouse handler): TRACK the harness's mouse-reporting mode by scanning its OUTPUT stream for the DECSET set/reset — ESC[?1000h/1002h/1003h (mouse on) + ESC[?1006h (SGR ext) and their ...l (off) — into a shared MouseMode{enabled,sgr} (pump writes from output, stdin reader reads); the scan survives a sequence SPLIT across output chunks (a bounded carry buffer). The mouse handler: right-button-DOWN -> bracketed clipboard paste (unchanged, REQ-RC-WIN-PASTE); ScrollUp/Down -> translate to an xterm SGR mouse report (ESC[<64;col+1;row+1M up / ESC[<65;..M down, 0-based crossterm -> 1-based xterm) and forward ONLY when enabled && sgr (else DROP — a legacy X10 report the harness may not parse is garbage); Moved/drag/left/middle -> DROP (scroll is the operator's need; click-forward risks garbage, no click-to-position). Unix UNCHANGED (no capture; the terminal scrolls natively). (v0.13.0)
2026-06-23T09:38:03.2670862Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2670895Z 
2026-06-23T09:38:03.2671011Z ### REQ-HAZARD-CONTROLLER-WRITER-REORDER
2026-06-23T09:38:03.2684797Z - Title: Two `controller_writer` threads must never race ONE brain↔broker connection's socket. ROOT (doyle, instrumented RACEDIAG repro on kitsubito): on a brain-restart re-serve the handoff brain registers as controller on the SAME session TWICE over the SAME `Brain::conn` socket — (1) `Brain::handoff` eagerly `subscribe(prior.session_id, prior.next_seq=1)` → `become_controller(from_seq=1)`, initial=[1], spawns writer-A (writes seq 1); (2) `serve_attach` re-handles the replayed `Request{from_seq:0}` → `attach_as(sid,0)` → `become_controller(from_seq=0)`, initial=[0,1], spawns writer-B (writes 0 then 1). `become_controller` (broker.rs) drops the prior `ControllerSink` (its `tx`) but does NOT stop the prior writer thread — writer-A keeps flushing its owned `initial` batch, and both writers hold clones of the same `SharedSend` (`Arc<Mutex<socket>>`) with NO inter-thread ordering. When writer-A's seq 1 wins the socket before writer-B's seq 0, the strict legacy consumer (brain.rs read_event reject-gap path) sees `output gap: got seq 1 want 0` → the test `attach_survives_target_brain_restart_exactly_once` panics at `.expect("re-serve")` OR HANGS in `render_until` (serve thread died on the gap → MARKER_TWO never reaches the wire). `prior.next_seq` is life1's CONSUMPTION cursor, NOT life2's connection state — life2's socket has been sent NOTHING, so a `from_seq=0` full replay on a connection that already streamed seq 1 is contradictory. Snap-above tolerance ALONE can't fix it (it would dedup-drop the late seq 0 → byte loss → the exactly-once byte-identity assert fails). PRE-EXISTING, surfaced by the v0.13.0 green-both-runners release gate; P1b is INNOCENT (its diff touches only input-ack machinery, proven mechanically + the test passes post-P1b in isolation). Sibling flaky cluster: `inject_control_wedge::g2`, `broker::spawn_env_reaches_child`. INVARIANT: on a single brain↔broker connection the controller output-frame stream is monotonic non-decreasing in seq (modulo dedup re-sends); exactly ONE `controller_writer` is ever live per connection; a SUPERSEDED writer writes NO further frames; a re-serve never replays a seq below what the connection already received. FIX (doyle design, corrected at the gate 2026-06-20): fix #1 as designed ('drop handoff's eager subscribe so serve_attach's attach_as is the sole registration') was REVERTED — handoff's `subscribe(prior.next_seq)` IS the standalone-resume mechanism (the brain-only update engine `apply_brain_only` + the `handoff`/`idempotent`/`daemon_e2e` int tests replay output through it with NO `serve_attach`; dropping it hung every resume-via-handoff test). The shipped fix is three parts: (1) CORRECTNESS — `Brain::handoff` seeds `session_cursors` at `prior.next_seq` so the consumer runs the production dedup-below+snap-above path, never the strict reject-gap legacy trap; this is COMPLETE (not merely tolerant) because every `controller_writer` emits an ASCENDING seq stream and the surviving writer (serve_attach's attach_as(sid,0)) offers the complete `[0,end]` range, so a snap-above merge of ascending writers delivers `[K,end]` with no skip/dup (first sighting of any seq>M is preceded by M on that writer). (2) INVARIANT — `controller_writer`'s INITIAL-BATCH replay is epoch-gated: `controller_epoch` is a shared `Arc<AtomicU64>`, the writer re-reads it UNDER `send.lock()` (atomically with `write_frame`) and returns the instant it is superseded — no check-then-block-then-write window, no superseded replay (W1-safe: never blocks the drain under `Mutex<OutputLog>`). The LIVE loop is NOT gated (new output only flows to the current controller; a superseded writer must still deliver its terminal `Displaced` kick — gating it suppressed the loud-take notice; it ends on `tx`-drop). (3) EXPLICIT-RESUME / OPERATOR-STREAM BOUNDARY (the LOAD-BEARING fix — kitsubito RACEDIAG ~33% repro the keystones missed) — `Brain::subscribe_with` (shared by attach/attach_as) resets the resume-mode dedup cursor to `from_seq`. The handoff eager subscribe makes serve_attach's brain receive the replay's seq K BEFORE the operator Request is processed (`attached`=false); that frame is dropped by the if-attached forward gate but the snap-above cursor already advanced past K, and `attach_as(sid,0)`'s re-subscribe used to leave the cursor advanced → the broker's re-send of seq K arrives below it, deduped, never forwarded → operator viewport forward-gap (silent content loss in the real rc consumer). Resetting to from_seq on the attach_as re-subscribe re-delivers from 0 (operator dedups the overlap) so seq K reaches the viewport. The epoch gate (2) is sound (RACEDIAG: zero socket interleaving above K); cold-start brains (empty map — production dispatch serve) keep the legacy next_seq path, so production is unaffected. (v0.13.0)
2026-06-23T09:38:03.2685084Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2685117Z 
2026-06-23T09:38:03.2685231Z ### REQ-HAZARD-CONTROLLER-RETAKE-FLOOR
2026-06-23T09:38:03.2689545Z - Title: `become_controller` should STRUCTURALLY refuse a controller re-take whose `from_seq` falls below the connection's already-delivered contiguous floor — making the P1c reorder invariant un-reintroducible by a future caller, not just removed at the one caller. ROOT/SCOPE (doyle proposed, P1c gate dialogue): P1c fixes REQ-HAZARD-CONTROLLER-WRITER-REORDER three ways (handoff single-take + epoch-gate-under-lock + session_cursors seed), removing the one decreasing-floor double-take and bounding any other to already-committed-only. A self-enforcing broker guard would refuse the bad SHAPE outright. BLOCKER: the obvious predicate (`from_seq >= delivered_through`) is UNSAFE because `delivered_through` is SESSION-WIDE (the `Arc<AtomicU64>` on `OutputLog`, shared by all controllers/viewers, advanced monotonic-MAX; `resume_seq` reads it) — a normal fresh-operator `from_seq=0` attach to a producing session legitimately sits below it (full ring replay + consumer dedup-below/snap-above), and monotonic-MAX can't distinguish the hazard (a `seq1`-without-`seq0` write reads as `2`). The structurally-correct guard needs a NEW per-connection contiguous-sent cursor (the true highest-contiguous seq this socket has received) that does not exist today; the guard then refuses a re-take below THAT. Bigger than P1c; no live gap (P1c fully fixes the actual bug). Mint/refine stages when the per-connection cursor is built. (v0.13.0 follow-up, post-ship)
2026-06-23T09:38:03.2689659Z - Required stages: 
2026-06-23T09:38:03.2689807Z 
2026-06-23T09:38:03.2689912Z ### REQ-ADAPTER-MULTIPLATFORM-SPT
2026-06-23T09:38:03.2692512Z - Title: A `.spt` adapter archive may pack multiple platforms in one signed asset: shared `manifest.toml` + `strings/` at the root, role binaries under per-Rust-target-triple subdirectories (ADR-0016 triple vocabulary, e.g. `x86_64-pc-windows-msvc/`); install/update extracts the shared root plus ONLY `current_platform()`'s triple subdir, flattened into `install_dir` so flat `<install_dir>/<program>` resolution (REQ-INSTALL-11) is unchanged. Name stays `adapter.spt` (plain-tar or gzip, `--asset` optional default); one whole-archive Ed25519 signature over the fat archive (REQ-UPD-9 single-artifact verify). A legacy flat archive (no triple subdirs) extracts as today (free back-compat); a multi-platform archive sets `min_spt_core_version >= 0.13.2` (forward-compat gate, readable before extract); a multi-platform archive missing the recipient's triple -> typed `NoArtifactForPlatform`, never a silent no-op. Large adapters may still split per-platform (single-triple archives via `--asset`, or ADR-0016 update-set machinery). (ADR-0024, v0.13.2)
2026-06-23T09:38:03.2692641Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2692774Z 
2026-06-23T09:38:03.2692879Z ### REQ-ADAPTER-LIVE-UPDATE
2026-06-23T09:38:03.2695644Z - Title: An adapter update is live and daemon-coordinated (the adapter analog of brain self-update, ADR-0004): for an endpoint with a running RESIDENT adapter binary (today the `[message-idle-translation-binary]`), the CLI keeps fetch+verify and hands the APPLY to the daemon over IPC, which per affected endpoint (1) STOPS the resident binary -> releases the OS file lock (fixes the Windows 'Access denied (os error 5)' overwrite failure), (2) swaps on disk ONLY files whose CRC differs from the staged archive (unchanged files + their still-running binaries untouched), (3) RE-CLONES the new on-disk manifest into the running `BrainLifecycle` (the in-memory manifest is cached at bringup and otherwise goes stale -> binaries+manifest back on the same page), (4) RESTARTS the resident binary from the new files. An endpoint NOT running -> CLI swaps directly (no lock, no cache). Only the resident class is cycled; ephemeral adapter binaries (Psyche loop, `[digest]` extractor, `[session.*]` runners, hooks) self-heal on next spawn and are excluded. The daemon keeps a per-endpoint registry of resident adapter children. (ADR-0025, v0.13.2)
2026-06-23T09:38:03.2695748Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2695782Z 
2026-06-23T09:38:03.2695912Z ### REQ-HAZARD-STOP-PATH-PSYCHE-ORPHAN-REAP
2026-06-23T09:38:03.2698769Z - Title: Endpoint-stop and brain-death reconcile MUST reap a brain-less perch's orphan detached Psyche via the cmdline-scoped guard (`psyche_orphan_should_reap`) — the handle-reap (`LiveSet::stop_host`, REQ-HAZARD-UNHOST-PSYCHE-REAP) CANNOT, because the owning brain is gone (its `psyche_child` handle died with it), and the brain-start scoped-reap (REQ-HAZARD-BRAIN-RESTART-PSYCHE-DUP) never fires for a perch being STOPPED rather than re-hosted. So the live-host calls the scoped reap after `stop_host` at the reconcile stop-side AND in `confirm_residency_or_unhost`. Preserves fail-safe-decline (pid-alive AND exe-basename==psyche-program AND cmdline contains `<id>-psyche`; any unreadable signal DECLINES — a missed dup is bounded, a wrong-kill is catastrophic). This is the orphan-leak half of the perri F-010xF-015 field bug (the unsupervised install-dir Psyche that locked an update); the other half is the psyche own-copy (ADR-0025 amendment). (v0.13.2 W3 (a))
2026-06-23T09:38:03.2698892Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2698925Z 
2026-06-23T09:38:03.2699110Z ### REQ-ADAPTER-UPDATE-MESSAGE
2026-06-23T09:38:03.2700697Z - Title: An adapter manifest may declare `[update].message` — a plain (multi-line) human notice surfaced to stdout, markdown-rendered (the v0.13.0 helpfmt prose path), ONLY when `spt adapter update` actually APPLIES an update (version changed), not on a no-op. Read from the newly-installed manifest; avenue-agnostic (gh_release/delegated/file_pull). No `{key}` substitution. Use: an adapter telling the operator a post-update action, e.g. spt-claude-code's "run `/reload-plugins` in any ongoing sessions". (v0.13.2)
2026-06-23T09:38:03.2700825Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2700848Z 
2026-06-23T09:38:03.2700948Z ### REQ-ADAPTER-GH-TRANSPORT
2026-06-23T09:38:03.2702252Z - Title: The `gh_release` avenue (and `spt adapter add --release`) gain a fetch `transport`: `https` (current reqwest direct, public), `gh` (shell the pre-authorized `gh` CLI — the private-repo path; `gh` honors OAuth and `GH_TOKEN`, so spt custodies no token), or `auto` (default: prefer `gh` when installed+authed, else HTTPS). `--gh`/`--https` force it on `add`. Additive over the existing fetch path; verify->extract->register downstream is unchanged. (v0.13.2)
2026-06-23T09:38:03.2702357Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2702391Z 
2026-06-23T09:38:03.2702500Z ### REQ-ADAPTER-PROOF-DIR-OVERRIDE
2026-06-23T09:38:03.2703850Z - Title: The author-time proof commands (`spt adapter digest-proof`, `spt adapter translate-proof`) gain a `--dir <path>` / `--manifest <file>` override so an author proofs a DEV binary against an on-disk manifest+install dir WITHOUT staging a full extracted GhReleaseManaged install (mirrors digest-proof's `--sample` pointing straight at a file). Fixes perri F-011: a bare-file-added gh_release adapter currently can't be resolved by the *-proof commands ('manifest is not present yet at <dir>'); un-stales the bare-file digest-proof int. (perri F-011, v0.13.x DX)
2026-06-23T09:38:03.2704073Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2704107Z 
2026-06-23T09:38:03.2704208Z ### REQ-ADAPTER-VERSION-CMD
2026-06-23T09:38:03.2705775Z - Title: `spt adapter version <name>` prints a registered adapter's declared version — the EXISTING mandatory `[adapter].version` manifest field (manifest.rs already requires it; NOT a `[strings].version`, NOT `get-string`, no second version source). A new `AdapterCmd::Version{option}` resolves the option's merged view via `registry::resolve_option` like the sibling adapter subcommands and prints `manifest.adapter.version`; an unresolvable option errors (exit 1) the same way. (v0.13.2 W6)
2026-06-23T09:38:03.2705932Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2705960Z 
2026-06-23T09:38:03.2706065Z ### REQ-DOCS-NO-INTERNAL-CODES
2026-06-23T09:38:03.2707635Z - Title: Public CLI --help (the clap `///` doc-comments) and the generated `docs-site/src/cli/reference.md` MUST NOT contain internal tracker/decision codes — `REQ-*`, `F-###`, `M#-W#`, `ADR-####`. They are meaningless to an end user reading --help and ship to GH-Pages. A CI-gated scan (the `xtask check` docs gate) fails on any such token in the GENERATED reference.md (which by construction contains only clap help, so rustdoc `///` on fns/structs is OUT of scope and keeps its REQ/ADR cross-refs). Substance is kept; codes are rewritten to plain language. (v0.13.2 W6)
2026-06-23T09:38:03.2707741Z - Required stages: doc, impl, unit
2026-06-23T09:38:03.2707770Z 
2026-06-23T09:38:03.2707865Z ### REQ-RUN-MULTISUBNET-HOME
2026-06-23T09:38:03.2710722Z - Title: `spt endpoint run` resolves the home subnet at the skeleton-create step and pre-creates the skeleton perch carrying it, so the harness `bind` inherits home via establish_perch's immutable prior-branch (no hook change, no env injection). Resolution: sole-subnet auto; multi-subnet + no --subnet + NON-interactive terminal -> refuse early with MRU-ordered --subnet guidance (never the silent 25s online-timeout); multi-subnet + no --subnet + INTERACTIVE -> print proposed config (id/project/adapter[:profile]/home=MRU-default) + 'Ok to proceed? Y/n', n -> --subnet guidance; --subnet overrides + validates membership. MRU = ordered move-to-front LISTs at two levels (per-project + always-updated node-global fallback). Home stays IMMUTABLE (ADR-0010). Fixes the LATENT multi-subnet bringup gap (perri, not a regression — HOME_REFUSED established >=0.11.0; exposed by the node crossing 1->2 subnets). (ADR-0026)
2026-06-23T09:38:03.2710831Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2710870Z 
2026-06-23T09:38:03.2710976Z ### REQ-ENDPOINT-UNBOUND-ATTACH
2026-06-23T09:38:03.2713451Z - Title: An spt-hosted endpoint is ATTACHABLE between spawn and bind: gate the attach on the broker SESSION being attachable (session+PTY+OutputLog exist at spawn, before bind), not on perch STATUS_ONLINE (bind). cmd_endpoint_run + `spt rc <id>` attach to a live broker session regardless of perch status (headless bringups too; lets an operator clear a bind-gating prompt) -- replaces await_endpoint_online; preserves REQ-HAZARD-RC-ATTACH-ONLINE-RACE's 'no attach before a session' intent at the earlier session-exists point; source = the broker sessions map (ADR-0025 W3a); local-only. New on-disk status STATUS_UNBOUND (spawn->unbound, bind->online, death->offline); lifecycle reuses the existing exit-waiter/reconcile (session death->offline); unbound is attachable but NOT message-addressable (messaging stays online/bound-gated). EpDisplay gains Unbound = HOLLOW (+ hollow-controlled variant) -- amber=HarnessOnly is taken + means not-controllable (the opposite of attachable). (ADR-0027)
2026-06-23T09:38:03.2713646Z - Required stages: doc, impl, unit, int
2026-06-23T09:38:03.2713680Z 
2026-06-23T09:38:03.2713785Z ## How to report back
2026-06-23T09:38:03.2713814Z 
2026-06-23T09:38:03.2713980Z For every (requirement, failing criterion) pair, emit one finding:
2026-06-23T09:38:03.2714013Z 
2026-06-23T09:38:03.2714105Z     {
2026-06-23T09:38:03.2714209Z       "code": "requirement_quality",
2026-06-23T09:38:03.2714314Z       "requirementId": "REQ-...",
2026-06-23T09:38:03.2714478Z       "criterion": "singular" | "verifiable" | "atomic" | "active-voice",
2026-06-23T09:38:03.2714576Z       "message": "<short reason>",
2026-06-23T09:38:03.2714691Z       "suggestedRevision": "<optional rewrite>"
2026-06-23T09:38:03.2714783Z     }
2026-06-23T09:38:03.2714816Z 
2026-06-23T09:38:03.2714999Z Wrap your response as { "findings": [ ... ] } listing only your concerns; the
2026-06-23T09:38:03.2715148Z deterministic findings above don't need to be repeated.
2026-06-23T09:38:03.2806594Z Post job cleanup.
2026-06-23T09:38:03.3468657Z [command]/usr/bin/git version
2026-06-23T09:38:03.3532209Z git version 2.43.0
2026-06-23T09:38:03.3563079Z Temporarily overriding HOME='/home/reavus/actions-runner/_work/_temp/6a7bd27d-6e94-4b20-9f22-a9e3d0802f2b' before making global git config changes
2026-06-23T09:38:03.3563322Z Adding repository directory to the temporary git global config as a safe directory
2026-06-23T09:38:03.3566380Z [command]/usr/bin/git config --global --add safe.directory /home/reavus/actions-runner/_work/spt-core/spt-core
2026-06-23T09:38:03.3596650Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-06-23T09:38:03.3623139Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-06-23T09:38:03.3803953Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-06-23T09:38:03.3824287Z http.https://github.com/.extraheader
2026-06-23T09:38:03.3831271Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2026-06-23T09:38:03.3856654Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-06-23T09:38:03.4044044Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-06-23T09:38:03.4069085Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-06-23T09:38:03.4369417Z Cleaning up orphan processes
