## Change Fixes BigscreenVR/spt-bs-releases#310. - Applied, daemonless, and finish conclusions link to the node-local `changelog.html` when the real docs listener can be discovered. - `UPDATE_DOCS_LANDED:` links to the local `index.html`; its marker remains unchanged. Repository consumers only test marker presence, not a directory payload. - Consent notifications use the same canonical docs base. Discovery runs before the canonical epoch lease and is skipped for AutoApproved decisions. - New `docshost::live_docs_url()` uses canonical seed-control `DocsStatus`, the OS hostname, and existing `docshost::docs_url`; no brain-local atomic or configured-port guess. Existing `spt docs` offline behavior is unchanged. - Missing daemon, missing listener, or failed discovery retains the previous release URL / installed-directory strings. Release download transport URLs are untouched. - Activate REQ-UPDATE-LOCAL-DOCS-LINKS with implementation, rendered-line unit, and user documentation evidence. ## Windows behavioral evidence Owned source/pool: `.worktrees/310-local-update-docs`, dispatched base `289e3cdfe39a8a4e91f5ea7d4b436f11a50b191e`; jobs=2, scrubbed SPT/OWL identity env, private homes/temp, ephemeral loopback listener. Proof root: `.spt/preserved/310-local-update-docs/windows-validation/`. - Native build 0; checked nonempty nextest inventory 0; selected tests 0: **10/10 passed**, 3.022s. Includes CLI rendered-line regression and existing version/restart cells, both consent-link branches, real consent routing/coalescing behavior, and `docs_bundle_e2e`'s signed docs landing/failure-isolation flow. 1823 outside-filter tests skipped, not claimed as coverage. - Throwaway executable drives the actual copied CLI through signed apply with real seed-control, broker, and docs listener. Online native 0 printed: ```text Changelog: http://localhost:56390/hfenduleam/docs/changelog.html UPDATE_DOCS_LANDED: http://localhost:56390/hfenduleam/docs/index.html ``` Both emitted URLs returned HTTP 200 with the expected newly landed page content. The persisted consent notification named the same changelog. - Offline native 0 and live-daemon/no-listener native 0 retained the previous release URL and docs directory. Every smoke deliberately configured port 1; none advertised that guessed port. - Smoke source preserved as `update_links_smoke.rs` under the proof root and removed from tracked source after passing. Fixture only swaps a disposable copied executable; it proves the CLI/apply/output seams, not supervised brain replacement or a full production rollout. - No test retries or driver-forced termination. Initial admission refused BEFORE launching the claim because a service-owned cargo hid cwd/argv; saved ancestry identified the GitHub Runner.Worker/RunnerService lineage. Receipt retained as `pool-claim-admission-refused`; first actual pool claim exited 0 after explicit classification. ## Post-runtime delta Runtime code/test bytes remain those in the successful verify source map. Subsequent changes are user documentation, generated changelog, and removal of the throwaway smoke source. Generation also normalized the unchanged CLI reference's CRLF; normalized bytes matched its preimage and the original bytes were restored before the drift check. The reference has no semantic change. Native `xtask gen` and `xtask check` both exited 0. `traceable-reqs check --json` exited 0: **923/923 complete, zero findings**. `post-runtime-provenance.json` proves the post-runtime delta is exactly the three documentation files plus throwaway-source removal; runtime and permanent test bytes are unchanged. Full native commands, exits, source maps, inventories, stdout/stderr, disk/process attribution, and generation classification are retained under the proof root.