## Completed (7)

### bg_1 [bash] — completed
Label: gh api repos/BigscreenVR/spt-bs-releases/issues/307/sub_issues --paginate --jq '.[] | {number,state,labels:[.labels[]...
Delivery: not auto-delivered; recovered by this snapshot.
```
{"labels":["state: ACCEPTANCE","type: BUGFIX"],"number":49,"state":"closed"}
{"labels":["state: ACCEPTANCE","type: BUGFIX"],"number":267,"state":"closed"}
{"labels":["state: ACCEPTANCE","type: BUGFIX"],"number":302,"state":"closed"}
{"labels":["state: ACCEPTANCE","type: BUGFIX"],"number":308,"state":"closed"}
{"labels":["state: ACCEPTANCE","type: BUGFIX"],"number":309,"state":"closed"}
{"labels":["state: ACCEPTANCE","type: CHANGE"],"number":310,"state":"closed"}


Wall time: 1.52 seconds
```

### bg_2 [bash] — completed
Label: git log --oneline ddd7fc7f070667524578c282894dd44a2e36062f..712c987f086f0f3564d139e8ff3775ce0bbd8ec2
Delivery: not auto-delivered; recovered by this snapshot.
```
712c987f fix(net): disable portmapping on every endpoint
a593ece0 fix(net): isolate rotating rendezvous listeners from broker workers
84e359aa test: prevent legacy psyche fixture descendant leaks
eed9ff36 fix: preserve hosted liveness during engine-room bring-up
c0ef9571 test: reproduce ER briefing loss during bring-up reconciliation
39241675 fix: avoid ACK backpressure when replaying rc input
8f059b2a ci: pin refresh rig Python for Windows heavy tests
b99715ee test: capture real refresh ACK freeze regression
4b6b03cc fix: point update notices at live local docs
f6b1dd9a docs: record Windows registry-lock validation
c9e80511 fix(serving): serialize registry writers across processes
289e3cdf docs: record IR11 headless census lane as built
93c7c2b9 ci: distinguish unknown headless state in CWD holder census
0c9ada8a docs: retire IR86 and reconcile built infrastructure lanes
82333ca1 ci: report signed shared-volume disk deltas in golden tests
8bb0feb4 docs: record detached rig launch discipline and retire IR137
0cda6235 ci: derive Windows golden admission from recorded disk delta
5e05f02d ci: size Linux golden test admission from measured use
84e20ddd test: share canonical seed broker docs fixture
52d56248 ci: precheck checker pin and runner before authenticated repair
16cd2a67 docs(infra): register IR-127..IR-137 from the S4/S5 field runs


Wall time: 1.32 seconds
```

### bg_3 [bash] — completed
Label: git status --short && git rev-parse HEAD
Delivery: not auto-delivered; recovered by this snapshot.
```
84e359aa52900256fc860e71052252255b22054e


Wall time: 1.83 seconds
```

### bg_4 [bash] — completed
Label: 'C:\Users\decid\.bun\bin\bun.exe' 'C:\Users\decid\.bun\install\global\node_modules\@oh-my-pi\pi-coding-agent\dist\cli...
Delivery: not auto-delivered; recovered by this snapshot.
```
Preparing worktree (new branch 'golden/307-v071')
HEAD is now at 712c987 fix(net): disable portmapping on every endpoint
warning: worktree clone fell back to plain checkout: git worktree add: Windows block clone unsupported for \\?\C:\Users\decid\Documents\projects\spt-core\.claude\agent-memory\spt-test-engineer\breadcrumb-reaper-auth-lane.md -> C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\.claude\agent-memory\spt-test-engineer\breadcrumb-reaper-auth-lane.md: The request is not supported. (os error 50)


Wall time: 3.77 seconds
```

### bg_5 [bash] — completed
Label: gh run list --repo BigscreenVR/spt-bs-core --limit 10 --json databaseId,status,conclusion,workflowName,headSha
Delivery: not auto-delivered; recovered by this snapshot.
```
[{"conclusion":"","databaseId":35296537885,"headSha":"712c987f086f0f3564d139e8ff3775ce0bbd8ec2","status":"queued","workflowName":"ci"},{"conclusion":"success","databaseId":35289449769,"headSha":"712c987f086f0f3564d139e8ff3775ce0bbd8ec2","status":"completed","workflowName":"ci"},{"conclusion":"success","databaseId":35209931657,"headSha":"a593ece06d5b67afa7fcdd23824b585675d7cc04","status":"completed","workflowName":"ci"},{"conclusion":"success","databaseId":35073236019,"headSha":"84e359aa52900256fc860e71052252255b22054e","status":"completed","workflowName":"ci"},{"conclusion":"success","databaseId":35070000101,"headSha":"84e359aa52900256fc860e71052252255b22054e","status":"completed","workflowName":"ci"},{"conclusion":"success","databaseId":35068935507,"head…


Wall time: 4.50 seconds
```

### bg_6 [bash] — completed
Label: cargo update --workspace --offline
Delivery: not auto-delivered; recovered by this snapshot.
```
     Locking 14 packages to latest compatible versions
    Updating mock-adapter v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\adapters\mock) -> v0.71.0
    Updating spt v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt) -> v0.71.0
    Updating spt-daemon v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-daemon) -> v0.71.0
    Updating spt-live v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-live) -> v0.71.0
    Updating spt-msg v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-msg) -> v0.71.0
    Updating spt-net v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-net) -> v0.71.0
    Updating spt-poolguard v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-poolguard) -> v0.71.0
    Updating spt-procident v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-procident) -> v0.71.0
    Updating spt-proto v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-proto) -> v0.71.0
    Updating spt-runtime v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-runtime) -> v0.71.0
    Updating spt-store v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-store) -> v0.71.0
    Updating spt-term v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-term) -> v0.71.0
    Updating spt-test-support v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\spt-test-support) -> v0.71.0
    Updating xtask v0.70.0 (C:\Users\decid\Documents\projects\spt-core\.worktrees\release-307-v071\crates\xtask) -> v0.71.0
note: pass `--verbose` to see 88 unchanged dependencies behind latest


Wall time: 2.22 seconds
```

### bg_7 [bash] — completed
Label: traceable-reqs check --json
Delivery: not auto-delivered; recovered by this snapshot.
```
{
  "schemaVersion": 1,
  "summary": {
    "requirementCount": 926,
    "completeCount": 926,
    "incompleteCount": 0,
    "findingCount": 0
  },
  "requirements": [
    {
      "id": "REQ-ACCESS-RETIRED-VERB-REFUSAL",
      "title": "A RETIRED SUBCOMMAND OF `spt endpoint access` REFUSES BY NAME RATHER THAN FALLING THROUGH ITS OWN OPTIONAL POSITIONAL AND ANSWERING PLAUSIBLY. `access` takes an optional endpoint id positionally, so once `list` and `rules` stopped being subcommands (retired when the roster views replaced them) clap handed those tokens to the POSITIONAL, and the view reported `no access entities ruled for 'list'` at exit 0 -- a well-formed, confident report about an entity nobody has ever created. Found by flynn in the v0.49.0 field verify (releases#67). THE DEFECT IS NOT A MISSING ERROR MESSAGE, IT IS AN ANSWER: the sentence is TRUE of any name nobody has ruled, so it is indistinguishable from the real result for a real endpoint, and an operator or agent s…
      "requiredStages": [
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": false,
          "evidence": []
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/cli.rs",
              "line": 20615
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 20635
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 20646
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 20670
            }
          ]
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/cli.rs",
              "line": 36193
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 36227
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 36273
            }
          ]
        }
      }
    },
    {
      "id": "REQ-ACCESS-VERDICT-REASON",
      "title": "The endpoint access gate reports WHY a pass passed, not merely THAT it passed: the gate's verdict carries, on its allow arm, the reason the chain admitted the interaction — the same-node short-circuit, the reply exemption, an entry whose subject NAMED the peer (a proven sender endpoint or the origin node), an entry that matched only by SUBNET WILDCARD (an entry, but one that never named this peer), or a posture pass (an endpoint / node / captured-subnet mode, or the implicit-open bottom of the chain). The reason is computed AT THE GATE, in the one place that holds the whole chain, and travels with the decision. The alternative — a downstream consumer re-deriving it — means RE-OPENING the access store after the gate has closed it, whi…
      "requiredStages": [
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": false,
          "evidence": []
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-store/src/gate.rs",
              "line": 103
            },
            {
              "path": "crates/spt-store/src/gate.rs",
              "line": 109
            },
            {
              "path": "crates/spt-store/src/gate.rs",
              "line": 116
            },
            {
              "path": "crates/spt-store/src/gate.rs",
              "line": 131
            },
            {
              "path": "crates/spt-store/src/gate.rs",
              "line": 355
            }
          ]
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 994
            },
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 1127
            }
          ]
        }
      }
    },
    {
      "id": "REQ-ACL-ACCESS-REFRESH-ER-ONLY",
      "title": "spt api access-refresh stops refusing and becomes real, gated to the engine room, updating ONLY the node's captured subnet-level fallbacks (ADR-0052 decision 6; the W2 refusal REQ-ACL-ACCESS-REFRESH-VERB was minted precisely so this wave changes one behavior rather than adding a surface and its gate). The refresh is the CONSENTED half of advisory gossip: a subnet-mode change reaches a member as a notification, the engine room is briefed with the exact new posture, and a human decides whether this node adopts it — which is why the verb writes the captured fallbacks and never the node's own rules, and why no remote actor can invoke it. Its authentication is the same shared engine-room function empower uses. The W2 refusal test is repinned …
      "requiredStages": [
        "doc",
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "docs/adr/0052-engine-room-endpoint-empower.md",
              "line": 384
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-store/src/briefing.rs",
              "line": 558
            },
            {
              "path": "crates/spt-store/src/subnet.rs",
              "line": 417
            },
            {
              "path": "crates/spt/src/api/engineroom.rs",
              "line": 66
            },
            {
              "path": "crates/spt/src/api/engineroom.rs",
              "line": 83
            },
            {
              "path": "crates/spt/src/api/engineroom.rs",
              "line": 441
            },
            {
              "path": "crates/spt/src/api/engineroom.rs",
              "line": 456
            },
            {
              "path": "crates/spt/src/api/engineroom.rs",
              "line": 548
            },
            {
              "path": "crates/spt/src/api/mod.rs",
              "line": 337
            }
          ]
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-store/src/subnet.rs",
              "line": 611
            },
            {
              "path": "crates/spt/src/api/engineroom.rs",
              "line": 848
            },
            {
              "path": "crates/spt/src/api/engineroom.rs",
              "line": 1019
            },
            {
              "path": "crates/spt/src/api/mod.rs",
              "line": 1255
            }
          ]
        }
      }
    },
    {
      "id": "REQ-ACL-ACCESS-REFRESH-VERB",
      "title": "`spt api access-refresh` is MINTED THIS WAVE BUT REFUSES — the verb exists, parses and is documented, and its refusal names why: the capture-refresh is engine-room-only, and engine-room enforcement (ADR-0052) does not land until W3. Minting the refusing verb now is deliberate: it fixes the contract adapters and the engine-room brief will be built against, and it makes the wave that implements enforcement a change to ONE behavior rather than a new surface plus its gate. A refusal that merely says 'unknown command' would invite an adapter to route around it. When it does light up it updates ONLY the node's captured subnet-level fallbacks — never the node's own rules, which are the operator's, not the subnet's. Gate: doc — the CONTEXT.m…
      "requiredStages": [
        "doc",
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "CONTEXT.md",
              "line": 947
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/api/mod.rs",
              "line": 336
            }
          ]
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/api/mod.rs",
              "line": 1255
            }
          ]
        }
      }
    },
    {
      "id": "REQ-ACL-DISCOVER-DEFAULT-ON",
      "title": "DISCOVER IS ON BY DEFAULT: a `closed` posture at ANY mode tier -- endpoint mode, node mode, or the join-time-captured subnet mode -- no longer implies a DISCOVER deny, and the ONLY thing that closes DISCOVER is a deny that NAMES it: an access rule row, or a `per_surface` mode entry (engine-room-set at the node tier). Operator-ruled 2026-08-17 (releases#180/#181): being findable is what makes a knock -- the ask to be admitted -- possible at all, so a node that closed its posture to say 'do not talk to me' had also silently said 'and you may not ask', which was never the choice being made; the messaging-first majority pays for a discovery decision they never took. THE DEFAULT LIVES IN THE SURFACE VOCABULARY, NOT BESIDE THE CHAIN: the `surfac…
      "requiredStages": [
        "doc",
        "impl",
        "unit",
        "int"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "CONTEXT.md",
              "line": 947
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 192
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 206
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 342
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 352
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 369
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 400
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 833
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1291
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1786
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1859
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1902
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1942
            },
            {
              "path": "crates/spt-store/src/erole.rs",
              "line": 154
            },
            {
              "path": "crates/spt/src/accessview.rs",
              "line": 90
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 20203
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 20237
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 20260
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 20277
            }
          ]
        },
        "int": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/tests/twohost.rs",
              "line": 2666
            },
            {
              "path": "crates/spt-daemon/tests/twohost.rs",
              "line": 2689
            },
            {
              "path": "crates/spt-daemon/tests/twohost.rs",
              "line": 2713
            }
          ]
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 418
            },
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 567
            },
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 617
            },
            {
              "path": "crates/spt-daemon/src/pump/registry.rs",
              "line": 385
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 3206
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 3233
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 3281
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 3325
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 3348
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 3381
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 3425
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 4507
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 5241
            },
            {
              "path": "crates/spt/src/accessview.rs",
              "line": 469
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 37027
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 37126
            }
          ]
        }
      }
    },
    {
      "id": "REQ-ACL-DISCOVER-GATE",
      "title": "DISCOVER is a real gated surface: registry resolve/advertise and the resources blurb are filtered per viewer, so discovery leaks nothing a viewer could not reach. ADR-0009 NAMED this leg — 'discovery (resource advertisement) is gated by the first two gates' — and CONTEXT.md's resource-advertisement entry promises that an endpoint whose access rules exclude the viewer's node by naming DISCOVER in a deny never appears in that view; a legacy grant plus blanket-closed posture does not imply that exclusion because DISCOVER is default-on. Only the VISIBILITY half was ever built; the access half has been an unbuilt promise since M4. Un-gated discovery on a shared subnet is an inventory of every agent on every member node, including the ones a…
      "requiredStages": [
        "doc",
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "CONTEXT.md",
              "line": 862
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 193
            },
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 233
            },
            {
              "path": "crates/spt-daemon/src/pump/registry.rs",
              "line": 172
            },
            {
              "path": "crates/spt-daemon/src/pump/registry.rs",
              "line": 270
            },
            {
              "path": "crates/spt-daemon/src/pump/registry.rs",
              "line": 277
            }
          ]
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 542
            },
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 600
            },
            {
              "path": "crates/spt-daemon/src/pump/registry.rs",
              "line": 335
            },
            {
              "path": "crates/spt-daemon/src/pump/registry.rs",
              "line": 412
            }
          ]
        }
      }
    },
    {
      "id": "REQ-ACL-ER-DISCOVER-CONJUNCTION-NOTICE",
      "title": "AN ACCEPTED RULE THAT CANNOT CURRENTLY TAKE EFFECT SAYS SO: an endpoint-scoped access mutation naming the ENGINE ROOM is accepted and, when its `DISCOVER` half cannot presently disclose anything, the accept site prints a LOUD CONJUNCTION NOTICE naming the engine room's advertisement whitelist as the other lever and its current posture. Disclosure of the engine room is an AND across two records: `DiscoverGate` checks the ER advertisement filter BEFORE the access chain (REQ-ER-NOT-ADVERTISED, ratified and unchanged by this requirement), so a rule accepted against an empty whitelist discloses NOTHING while reading as policy in force. Field case: ENLYZEAM's sole `DISCOVER` allow was ER-scoped `any-of SPT_DEV` with an empty whitelist, and every…
      "requiredStages": [
        "doc",
        "impl",
        "unit",
        "int"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "CONTEXT.md",
              "line": 953
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 739
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 16545
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 16584
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 16615
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 16667
            }
          ]
        },
        "int": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/tests/twohost.rs",
              "line": 2735
            }
          ]
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/cli.rs",
              "line": 36850
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 37087
            }
          ]
        }
      }
    },
    {
      "id": "REQ-ACL-FAIL-CLOSED",
      "title": "A corrupt or unreadable access store degrades CLOSED, loudly (ADR-0053 — an ADR-level flip of ADR-0009's deliberate fail-open ruling). ADR-0009 justified fail-open explicitly: the whitelist was 'a same-subnet convenience boundary layered inside subnet membership, not the system's outer wall', because every member node was the one user's own machine. The SHARED SUBNET ruling breaks that premise — member nodes now belong to different human operators and the access layer gates agents — and a boundary that evaporates when its store file corrupts is not a boundary an operator can reason about. So a store that CANNOT BE READ refuses unlisted-subject traffic on every surface rather than admitting it, and says so on the refusing node naming …
      "requiredStages": [
        "doc",
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "CONTEXT.md",
              "line": 947
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/access.rs",
              "line": 194
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 983
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1549
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1557
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1608
            }
          ]
        },
        "int"
[…67374ln elided…]
spt-daemon/src/servehost.rs",
              "line": 653
            },
            {
              "path": "crates/spt-daemon/src/servehost.rs",
              "line": 727
            },
            {
              "path": "crates/spt-daemon/src/servehost.rs",
              "line": 765
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1051
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1074
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1097
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1115
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1145
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1158
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1198
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1240
            },
            {
              "path": "crates/spt-runtime/src/registry.rs",
              "line": 939
            },
            {
              "path": "crates/spt-runtime/src/registry.rs",
              "line": 974
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 896
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 944
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 962
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 977
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 993
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1014
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1037
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1051
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1065
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1080
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1100
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1134
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1143
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1157
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1179
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1201
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1220
            },
            {
              "path": "crates/spt/src/serveverb.rs",
              "line": 564
            }
          ]
        }
      }
    },
    {
      "id": "REQ-WEB-URL-BOUND-PORT",
      "title": "Served URLs use the running daemon's actually bound docs-listener port, not the caller's configuration or a default (releases#282, REMOTE-FRICTION #304). The broker exposes that bound port; serve listings, attachment links, docs URLs and fetch shorthand consume the same source. Config/env/default fallback is permitted only when no daemon runs. A running daemon with unavailable or unreported listener state must not mint a guessed URL. Daemon-starting producers resolve the port after startup. The rig-only ephemeral switch overrides fixed bind requests and minted URLs follow the resulting listener, never the co-resident fleet listener. Gate: a fixture daemon binds ephemerally despite conflicting client configuration, and generated URLs fetch …
      "requiredStages": [
        "doc",
        "impl",
        "unit",
        "int"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "docs-site/src/serving/overview.md",
              "line": 29
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/docshost.rs",
              "line": 32
            },
            {
              "path": "crates/spt-daemon/src/docshost.rs",
              "line": 520
            },
            {
              "path": "crates/spt-daemon/src/servehost.rs",
              "line": 69
            },
            {
              "path": "crates/spt-daemon/src/servehost.rs",
              "line": 104
            },
            {
              "path": "crates/spt-daemon/src/servehost.rs",
              "line": 135
            },
            {
              "path": "crates/spt-daemon/src/servehost.rs",
              "line": 361
            },
            {
              "path": "crates/spt-daemon/src/servehost.rs",
              "line": 372
            },
            {
              "path": "crates/spt-daemon/src/webproxy.rs",
              "line": 521
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 10095
            },
            {
              "path": "crates/spt/src/serveverb.rs",
              "line": 76
            },
            {
              "path": "crates/spt/src/serveverb.rs",
              "line": 101
            }
          ]
        },
        "int": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/tests/docs_server_e2e.rs",
              "line": 69
            },
            {
              "path": "crates/spt-daemon/tests/docs_server_e2e.rs",
              "line": 95
            },
            {
              "path": "crates/spt-daemon/tests/twohost_web.rs",
              "line": 733
            },
            {
              "path": "crates/spt/tests/webserve_cross_node_e2e.rs",
              "line": 324
            },
            {
              "path": "crates/spt/tests/webserve_cross_node_e2e.rs",
              "line": 722
            }
          ]
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/docshost.rs",
              "line": 642
            }
          ]
        }
      }
    },
    {
      "id": "REQ-WEB-URL-NODE-PREFIX",
      "title": "Every served resource uses the same node-prefixed path locally and across the subnet (ADR-0056, releases#272/#249; node-root behavior amended by releases#301). Bare / redirects with HTTP 302 to /<local-node>/. A node root /<node>/ redirects with HTTP 302 to /<node>/docs/, preserving query parameters, for local and remote nodes. The browser registry index and its ?json twin are retired; spt serve list remains the exposure audit. Node and facet precedence, exact docs root-file exceptions, byte-true docs compatibility aliases, directory redirects, and owner-side proxy authorization remain unchanged. Facets f/, docs/, a/, m/, bin/ and install remain distinct; unknown or unavailable facets never fall through to registry names. Scheme is plain h…
      "requiredStages": [
        "doc",
        "impl",
        "unit",
        "int"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "docs-site/src/harness-contract/manifest.md",
              "line": 83
            },
            {
              "path": "docs-site/src/serving/overview.md",
              "line": 13
            },
            {
              "path": "docs/MANIFEST.md",
              "line": 93
            },
            {
              "path": "docs/adr/0056-node-prefixed-url-namespace.md",
              "line": 92
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/daemon.rs",
              "line": 276
            },
            {
              "path": "crates/spt-daemon/src/docshost.rs",
              "line": 127
            },
            {
              "path": "crates/spt-daemon/src/docshost.rs",
              "line": 479
            },
            {
              "path": "crates/spt-daemon/src/pairhost.rs",
              "line": 928
            },
            {
              "path": "crates/spt-daemon/src/pairhost.rs",
              "line": 954
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 698
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 714
            },
            {
              "path": "crates/spt-store/src/hostlabel.rs",
              "line": 14
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 712
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 745
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 763
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 785
            },
            {
              "path": "crates/spt/src/serveverb.rs",
              "line": 75
            }
          ]
        },
        "int": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/tests/docs_server_e2e.rs",
              "line": 23
            },
            {
              "path": "crates/spt-daemon/tests/webserve_e2e.rs",
              "line": 33
            },
            {
              "path": "crates/spt-daemon/tests/webserve_e2e.rs",
              "line": 128
            },
            {
              "path": "crates/spt-daemon/tests/webserve_e2e.rs",
              "line": 343
            },
            {
              "path": "crates/spt/tests/webserve_cross_node_e2e.rs",
              "line": 446
            }
          ]
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/docshost.rs",
              "line": 618
            },
            {
              "path": "crates/spt-daemon/src/servehost.rs",
              "line": 765
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 995
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1021
            },
            {
              "path": "crates/spt-daemon/src/webserve.rs",
              "line": 1187
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1179
            },
            {
              "path": "crates/spt-store/src/serving.rs",
              "line": 1250
            }
          ]
        }
      }
    },
    {
      "id": "REQ-WHOAMI-1",
      "title": "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) and renders the same description-carrying SELF pin. HISTORY: originally minted whoami as a thin ALIAS of `spt endpoint list` — that alias premise is SUPERSEDED by REQ-WHOAMI-IDENTITY-ONLY (PROJECT-INDEX W1, 2026-07-15): the alias inherited the list's O(perches x branches) git fanout onto hook paths (the 2026-07-15 message-delivery incident), so whoami is now identity-only over the shared render_self_pin. The pin render + parse evidence here stands; the full-roster surface lives solely on `endpoint list`.",
      "requiredStages": [
        "doc",
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "CONTEXT.md",
              "line": 1105
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/cli.rs",
              "line": 12685
            }
          ]
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/cli.rs",
              "line": 29338
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 29621
            }
          ]
        }
      }
    },
    {
      "id": "REQ-WHOAMI-EXPLICIT-SID-REFUSAL",
      "title": "RULED DESIGN, delivery unowned (doyle 2026-07-26): when a caller hands identity resolution an EXPLICIT non-empty $OWL_SESSION_ID that resolves to NO perch, core must REFUSE identity (unresolved, exit 1, loud distinct diagnostic) rather than fall through to an ambient/inherited one — today `detect_self_id` (roster.rs, legs a→b→b2→c) treats sid-UNMATCHED identically to sid-ABSENT, so the fallback chain re-adopts precisely the identity a sharper claim just failed to prove. MEASURED (perri, this node, 2026-07-26, three read-only whoami calls from a genuine descendant of the perri host process): (1) all SPT_*/OWL_* scrubbed → id null, exit 1 — ancestry resolved nothing (caveat honored from the probe: the perch's recorded pid was not…
      "requiredStages": [],
      "stages": {
        "doc": {
          "complete": false,
          "evidence": []
        },
        "impl": {
          "complete": false,
          "evidence": []
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": false,
          "evidence": []
        }
      }
    },
    {
      "id": "REQ-WHOAMI-IDENTITY-ONLY",
      "title": "PROJECT-INDEX W1 (F-040, perri filing claude-spt docs/SPT-CORE-FINDINGS.md @d775b38; correctness-critical opener — the 2026-07-15 message-bodies incident root): a core IDENTITY-ONLY resolution — session -> endpoint|null — that touches NO list/registry/project/git/network path, and `spt whoami` DE-ALIASED from cmd_endpoint_list (cli.rs ~6609 aliases the full list = 100+ git children under hook deadlines). endpoint-info is DISQUALIFIED as the carrier (runs latest_project_ref). Adapters/hooks get a bounded-time identity verb; the harness-hosted adapter fallback stays deadline-vulnerable until this ships. Gate: impl — the resolver + whoami de-alias; unit — resolver returns endpoint|null with zero project derivation (assert no git spa…
      "requiredStages": [
        "doc",
        "impl",
        "unit",
        "int"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "docs-site/src/harness-contract/api.md",
              "line": 642
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/cli.rs",
              "line": 12781
            }
          ]
        },
        "int": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/tests/whoami_identity_e2e.rs",
              "line": 14
            }
          ]
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/cli.rs",
              "line": 29623
            },
            {
              "path": "crates/spt/src/roster.rs",
              "line": 816
            }
          ]
        }
      }
    },
    {
      "id": "REQ-WORKER-LIST-VISIBILITY",
      "title": "V-1 (WORKER-TRUTH triage, operator rider): worker perches leave the DEFAULT `spt endpoint list` view — they are process-local machinery, not subnet citizens; leaked-or-live worker rows rendering as permanent OFFLINE endpoints is the operator-visible symptom root. A dedicated flag (--workers) reveals them (one command + flag per the --all/--detail precedent, NOT a separate list-working command — sister divergence deliberate). Applies to the human render, --json (additive default-absent filter), and the registry/projection legs; verify-and-stop any worker gossip into the subnet registry as peer endpoints.",
      "requiredStages": [
        "impl",
        "int"
      ],
      "stages": {
        "doc": {
          "complete": false,
          "evidence": []
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/cli.rs",
              "line": 6424
            },
            {
              "path": "crates/spt/src/cli.rs",
              "line": 6446
            }
          ]
        },
        "int": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/tests/worker_visibility_e2e.rs",
              "line": 18
            },
            {
              "path": "crates/spt/tests/worker_visibility_e2e.rs",
              "line": 61
            }
          ]
        },
        "unit": {
          "complete": false,
          "evidence": []
        }
      }
    },
    {
      "id": "REQ-WORKER-MINTED-NAME",
      "title": "N-1 (WORKER-TRUTH triage, operator rider): worker perch identity is CORE-MINTED and parent-derived — `{parent}-w{N}` with a per-parent counter at registration (sister shape: claude_skill_owl hook_subagent_start.rs) — never the adapter-presented agent id (CC Task ids render as random-named rows). worker-start mints + echoes the id (WORKER_STARTED:{parent}-w{N}); the adapter's agent_id/agent_type ride the record as correlation METADATA, not identity. Verb-shape contract change — freeze with W-2 in ONE coordination with perri.",
      "requiredStages": [
        "doc",
        "impl",
        "unit",
        "int"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "docs-site/src/harness-contract/api.md",
              "line": 554
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-store/src/worker_seq.rs",
              "line": 31
            },
            {
              "path": "crates/spt-store/src/worker_seq.rs",
              "line": 39
            },
            {
              "path": "crates/spt/src/api/worker.rs",
              "line": 45
            }
          ]
        },
        "int": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/tests/worker_lifecycle_e2e.rs",
              "line": 25
            },
            {
              "path": "crates/spt/tests/worker_lifecycle_e2e.rs",
              "line": 194
            }
          ]
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-store/src/info.rs",
              "line": 1235
            },
            {
              "path": "crates/spt-store/src/worker_seq.rs",
              "line": 74
            },
            {
              "path": "crates/spt-store/src/worker_seq.rs",
              "line": 88
            },
            {
              "path": "crates/spt-store/src/worker_seq.rs",
              "line": 111
            },
            {
              "path": "crates/spt/src/api/mod.rs",
              "line": 1388
            },
            {
              "path": "crates/spt/src/api/worker.rs",
              "line": 213
            }
          ]
        }
      }
    },
    {
      "id": "REQ-WORKER-PICKER-EXCLUDED",
      "title": "V-2 (WORKER-TRUTH triage, operator rider): non-drivable endpoint classes never render as picker rows — a worker perch cannot be driven, instantiated, or controlled; offering it is a lie the picker then fails on. Filter endpoint_type worker (and the psyche class if it ever surfaces — same non-drivable family) at every picker source leg, extend-not-multiply for future non-drivable classes.",
      "requiredStages": [
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": false,
          "evidence": []
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/picker/data.rs",
              "line": 204
            },
            {
              "path": "crates/spt/src/picker/data.rs",
              "line": 336
            }
          ]
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/picker/data.rs",
              "line": 707
            },
            {
              "path": "crates/spt/src/picker/data.rs",
              "line": 717
            }
          ]
        }
      }
    },
    {
      "id": "REQ-WORKER-REAP",
      "title": "W-3 (WORKER-TRUTH triage): worker records must not persist indefinitely past their useful life — 6 dead-pid workers leaked OFFLINE on flynn (kill-paths where SubagentStop never fires: parent killed, abort, timeout). The stored rec.pid is the ephemeral worker-start hook process (dead by design — the REQ-HAZARD-DEAD-REC-PID class; NEVER an alive-gate signal). Honest reap signals: (a) parent-session lifecycle — reap the parent's soft-stopped + orphaned workers at parent session-end/boundary and on parent-death detection (a worker cannot outlive its parent's live session); (b) a generous TTL floor since `created` as belt-and-braces. Soft-stop preservation semantics (REQ-HAZARD-SOFT-CLEANUP: results drain before reap) stay honored — rea…
      "requiredStages": [
        "impl",
        "unit",
        "int"
      ],
      "stages": {
        "doc": {
          "complete": false,
          "evidence": []
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/livehost.rs",
              "line": 276
            },
            {
              "path": "crates/spt-store/src/worker_reap.rs",
              "line": 59
            },
            {
              "path": "crates/spt-store/src/worker_reap.rs",
              "line": 87
            },
            {
              "path": "crates/spt/src/api/reporting.rs",
              "line": 398
            }
          ]
        },
        "int": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/livehost.rs",
              "line": 1990
            }
          ]
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-store/src/worker_reap.rs",
              "line": 163
            },
            {
              "path": "crates/spt-store/src/worker_reap.rs",
              "line": 173
            },
            {
              "path": "crates/spt-store/src/worker_reap.rs",
              "line": 191
            },
            {
              "path": "crates/spt-store/src/worker_reap.rs",
              "line": 206
            },
            {
              "path": "crates/spt-store/src/worker_reap.rs",
              "line": 225
            },
            {
              "path": "crates/spt-store/src/worker_reap.rs",
              "line": 241
            },
            {
              "path": "crates/spt/src/api/reporting.rs",
              "line": 1941
            }
          ]
        }
      }
    },
    {
      "id": "REQ-WORKER-SID-SYMMETRIC-AUTH",
      "title": "W-2 (WORKER-TRUTH triage, operator-ruled 2026-07-06): worker verbs go sid-symmetric with every sibling id-scoped verb — worker-start mints NO token and worker-stop takes NONE (token custody is undue adapter burden, ruling via perri). Registration STORES the sid it authenticated (the parent's sid at start; today cmd_worker_start hardcodes session_id=\"\" — worker.rs:44 — so a sid-authed stop compares against empty and refuses 100%). Stop accepts the parent's CURRENT sid OR the stored registration sid (a /clear between start and stop rotates the parent's sid; either rotation endpoint is honest custody — the REQ-PSYCHE-SID-CUSTODY rotation reasoning). Under the ruling the field adapter's existing emission (worker-stop <id> --session-i…
      "requiredStages": [
        "doc",
        "impl",
        "unit",
        "int"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "docs-site/src/harness-contract/api.md",
              "line": 575
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/api/auth.rs",
              "line": 236
            },
            {
              "path": "crates/spt/src/api/mod.rs",
              "line": 1056
            },
            {
              "path": "crates/spt/src/api/worker.rs",
              "line": 46
            }
          ]
        },
        "int": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/tests/worker_lifecycle_e2e.rs",
              "line": 26
            },
            {
              "path": "crates/spt/tests/worker_lifecycle_e2e.rs",
              "line": 194
            }
          ]
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt/src/api/auth.rs",
              "line": 543
            },
            {
              "path": "crates/spt/src/api/auth.rs",
              "line": 553
            },
            {
              "path": "crates/spt/src/api/auth.rs",
              "line": 576
            },
            {
              "path": "crates/spt/src/api/auth.rs",
              "line": 594
            },
            {
              "path": "crates/spt/src/api/worker.rs",
              "line": 213
            },
            {
              "path": "crates/spt/src/api/worker.rs",
              "line": 245
            }
          ]
        }
      }
    },
    {
      "id": "REQ-XFER-RETIRED",
      "title": "XFER IS RETIRED FROM THE CONTROL-SURFACE VOCABULARY AND ITS TRANSFER MACHINERY LEAVES THE TREE WITH IT (ADR-0060, releases#272/#246, close rider on the WEBSERVE milestone). MEASURED BEFORE THE RULING (main 8a21a3b0): the transfer INITIATORS `fetch_file` and `push_file` have ZERO production callers -- no verb opens the Xfer stream -- while the SERVE side was live: the daemon gated the inbound Xfer stream on `XFER`, knock codes were mintable for it, rules could name it; zero grant rows named it on the measuring node. The pull-model attachment (ADR-0058) supersedes the machinery, so the Xfer stream family, its serve gate, its tests and the surface row leave TOGETHER -- a row left behind would gate traffic that no longer exists, which is a pro…
      "requiredStages": [
        "doc",
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": true,
          "evidence": [
            {
              "path": "docs-site/src/serving/overview.md",
              "line": 236
            }
          ]
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 236
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 249
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 262
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1001
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 1576
            }
          ]
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/spt-daemon/src/dispatch.rs",
              "line": 2308
            },
            {
              "path": "crates/spt-store/src/access.rs",
              "line": 3100
            }
          ]
        }
      }
    },
    {
      "id": "REQ-XTASK-SPT-BIN-TARGET-DIR",
      "title": "#13 (F026 micro, tooling): xtask `spt_bin()` (crates/xtask/src/main.rs) BUILDS `spt` via cargo (which honors CARGO_TARGET_DIR) but returns a HARDCODED `<root>/target/debug/spt` path — so under a redirected target dir (CI / isolated-gate rigs that set CARGO_TARGET_DIR to a throwaway) the binary lands in `$CARGO_TARGET_DIR/debug` while xtask looks in `<root>/target/debug` -> NotFound -> `xtask check` (docs-drift gate) spuriously fails. Workaround was running `xtask check` with CARGO_TARGET_DIR unset. FIX: a pure `target_debug_dir(root, CARGO_TARGET_DIR)` seam mirroring cargo's resolution — absolute override as-is, relative resolved against `root` (the dir cargo is invoked in), default `<root>/target` — join `debug`; `spt_bin` returns f…
      "requiredStages": [
        "impl",
        "unit"
      ],
      "stages": {
        "doc": {
          "complete": false,
          "evidence": []
        },
        "impl": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/xtask/src/main.rs",
              "line": 410
            },
            {
              "path": "crates/xtask/src/main.rs",
              "line": 436
            }
          ]
        },
        "int": {
          "complete": false,
          "evidence": []
        },
        "unit": {
          "complete": true,
          "evidence": [
            {
              "path": "crates/xtask/src/main.rs",
              "line": 2914
            }
          ]
        }
      }
    }
  ],
  "findings": []
}


Wall time: 9.30 seconds
```