== #304 == {"labels":["state: WIP","kind: MILESTONE"],"state":"OPEN","title":"REMOTE-FRICTION — access, serving, roster and terminal responsiveness"} == #304 body == --- Requester: doyle == #304 sub_issues == 297 open [state: WIP,type: BUGFIX] Windows serve lan --bootstrap leaves TCP listener inaccessible over Tailscale 299 open [state: WIP,type: BUGFIX] Diagnose endpoint list --show-all recurring ~10s stalls with complete unchanged output 300 open [state: WIP,type: BUGFIX] Remote spt rc input bypasses FILE_ACCESS_HELPER auto-serving promised by #17 301 open [state: WIP,type: BUGFIX] fix: `localhost:5474//` shows "Served Resources" 302 open [state: WIP,type: BUGFIX] diagnose + fix: rc sessions frequently hitch 251 open [state: WIP,type: BUGFIX] fix: `spt rc --view` has no way to detach 282 open [state: WIP,type: BUGFIX] served URLs are minted from the configured docs port, not the port the listener bound: under the rig switch they point at the live fleet daemon 288 open [state: WIP,type: CHANGE] `spt shell cmd ` names the cmd capability set as THE shell's vocabulary, hiding every send-payload verb 230 open [state: WIP,type: ADDITION] Attach-viewer version skew after update is invisible — stale viewers replay retired bugs 49 open [state: WIP,type: BUGFIX] all spt rc connections freeze across `spt daemon refresh` / staged self-update restart (long-standing; prior fixes unsuccessful) 267 open [state: WIP,type: BUGFIX] fix: `spt daemon refresh` stalls session PTYs == #304 comments == --- 5630275229 SaberMage 2026-09-11T06:11:34Z Intake, not implementation greenlight. Operator bag retained in full: #297 #299 #300 #301 #302. Added adjacent requests: #251 safe RC viewer detach; #282 bound-port URL correctness and isolated serving acceptance; #288 accurate shell-cmd discovery; #230 visible stale-viewer version state; #49 and #267 refresh/update RC freeze reports, grouped for one RCA without assuming duplicate causes. #49 retains its prior joint-ship ruling with #42 until operator explicitly changes it. Excluded #296: comments establish omp-spt-owned replay remedy and field acceptance, not core work; #303 remains CUT and adapter-owned. No broad networking cleanup or new RC diagnostic product added implicitly. Complete infra-register sweep is running read-only; ripe riders will be recorded separately. Grill precedes final wave plan/REQ activation and implementation. Product changes go to todlando, test/CI rework to hertz, golden heads to deployah. *\-doyle@HFENDULEAM* --- 5630320712 SaberMage 2026-09-11T06:16:48Z Full intake infra audit complete: IR-1–54 and IR-55–97, all 97 entries accounted for including headingless IR-31. No implementation dispatched. Final rider composition and design documentation remain pending operator grill; Q1 node-root docs routing, Q2 scoped bootstrap firewall lifecycle, Q3 #49/#42 prior joint-release coupling, Q4 stale-viewer notice versus reconnection. Driver/capacity prerequisites and narrowly seam-triggered riders identified; already-built implementations must not be redispatched. Milestone remains intake/BACKLOG, not GREENLIT. Delivery, golden handoff and publish are explicitly blocked on the grill confirmation, not abandoned or completed. *\-doyle@HFENDULEAM* --- 5630537015 SaberMage 2026-09-11T06:41:14Z Operator grill rulings, 2026-09-11: Q1 accepted redirect // to //docs/, retiring browser registry index; amend ADR-0056. Q2 automatic bootstrap firewall reconciliation with installation-equivalent network scope (all profiles/no remote-address restriction), actual TCP bootstrap port and executable; request Windows UAC when not elevated, Linux equivalent where available. Supersedes earlier LAN/tailnet-only and no-prompt recommendations. Docs remain loopback-only; no tailnet-policy edits. Q3 explicitly supersedes #49 joint-release coupling to #42: #49/#267 remain in this milestone; #42 stays outside absent demonstrated dependency. Q4 non-forced stale-view visibility accepted, delivered through a NEW now-signal kind. Viewer/client versus broker refresh language must distinguish the processes; restarting RC alone does not update broker code. Remaining frontier: elevation refusal behavior, exact signal scope/lifetime and infra capacity choice. Not final implementation greenlight. *\-doyle@HFENDULEAM* --- 5630770542 SaberMage 2026-09-11T07:05:37Z Operator accepted Q7 and Q8. ATTACH_CLIENT_STALE is governed by release-maintained minimum recommended viewer version, platform/attach-role applicability and concrete degraded-function reason; version mismatch alone and unknown version do not trigger. No forced detach. Bootstrap stop removes only owned TCP admission; listener stops even if cleanup elevation is denied, with residual-rule guidance. Q5 remains: bootstrap starts despite failed firewall repair when other startup checks pass; rerun may retry authorization. All eight product design questions answered. Final shared-understanding confirmation requested before implementation dispatch. Journal: docs/REMOTE-FRICTION-GRILL.md. *\-doyle@HFENDULEAM* --- 5630825969 SaberMage 2026-09-11T07:11:01Z Operator confirmed REMOTE-FRICTION and greenlit execution. All 11 members preserved in .spt/preserved/remote-friction-304/greenlit-members.json. Execution plan: docs/REMOTE-FRICTION-PLAN.md; ruled design: docs/REMOTE-FRICTION-GRILL.md. Product W1-W3 dispatched to todlando; W0 infra and regressions dispatched to hertz; doyle owns capacity/integration and deployah independent golden execution. Both owners are online; delivery confirmed, lane acknowledgements pending. Source work may start; builds require measured pool allocation and quiet/isolation preflight. Todlando is classifying his completed 293-brain target for capacity reclamation; no unowned deletion authorized. Documentation traceability check: 902/902 complete, zero findings (not milestone behavior proof). Golden candidate must include release shape and every greenlit member; no silent drops. *\-doyle@HFENDULEAM* --- 5632316084 SaberMage 2026-09-11T09:19:58Z W1 evidence state, 2026-09-11 09:20Z (doyle). Both lanes built into exclusive claimed pools under measured allocations; every execution one attempt, own admission sample, own census; no retries anywhere. hertz test lane at 96325c9b (test/304-remote-friction): spt-daemon lib 21/21 GREEN at a17dbfbd (14 webserve, shellchan vocab, six hermetic #297 bootstrap_firewall cases); docs_server_e2e GREEN at 96325c9b, REQ-WEB-URL-BOUND-PORT int EVIDENCED for the first time (earlier red was hertz's fixture binding the wrong server, withdrawn); spt bins rc detach: 3 pass, viewer_byte_detach RED and UNCLASSIFIED with the cause narrowed to a measured fact (FIN + terminal retire on the local loopback row delivers no EOF to the paired peer row's subscriber), one case not run under fail-fast. Two hertz diagnoses were withdrawn on their own discriminators before any fix landed. todlando product lane at 58b95354 (feat/304-remote-friction-product): W1 #301/#282/#288/#251, #297, IR-92, #230 (doc/impl/unit green), #299 (doc/impl), #300 substrate (REQ-USER-INPUT-PATH-PROPOSAL doc/impl/unit; authorization arm unruled and inert by name). Three pure decision/IO splits landed at 3ddaae6d (windows::decide, port_from_status, may_fall_back) so hertz can author hermetic tests. REQ-ATTACH-CLIENT-STALE int MEASURED RED, classified TEST-SIDE for one path and OPEN for the other after three discriminator probes; fixed run pending. #297 int stage deactivated to W2 field acceptance on #297 (no two-machine rig yet). Cross-lane traceability reds resolve at assembly, not per lane. Infra: IR-96 pool released (27.7 GB observed), IR-88 amended, IR-97 exclusive-execution windows applied and one crossed START recorded, IR-98 and IR-99 minted. #300 design fork awaits the operator (comment 5631830252 on #300). *\-doyle@HFENDULEAM* --- 5632935059 SaberMage 2026-09-11T10:13:58Z **W1 evidence cycle, 2026-09-11 10:13Z (doyle) — runs landed, not predictions.** hertz window 2 @ `61bfd85c` (09:59:30Z–10:01:24Z, 114 s): - producer 2 (`spt --bins` rc detach, 5 cases): **GREEN 5/5**. The three-sha `viewer_byte_detach` red is closed: a spectator subscription on a served stream is structurally impossible (one subscriber seat, healthy prior displaced, `nethost.rs:546-562`); the wire observer was deleted and the absence is asserted by consequence (`1fa4858e`). - producer 3 (`webserve_e2e`, 5 cases): 4/5. Red = stale assertion at `:266` (`GET /llms.txt/` expected 200; a node root with an empty remainder is the #301 arm and now 302s). Test-only fix `4ec34d1c`, unrun. - producer 4 (`attach_link_push_e2e`): **labelled hole** — measured nothing; the cross-package `mock-session` fixture was never built (cargo guarantees a package's own bins to its own tests only). Prebuild producer added for window 3. - producer 5 (`webserve_cross_node_e2e`): **RED, PRODUCT.** A cross-node node-root 302 relays the OWNER's namespace: the owner rewrites the path under its own prefix (`webproxy.rs:161`), mints `Location` from its local node (`webserve.rs:778-781`), and the requester's relay copies headers verbatim with no inverse (`docshost.rs:386-389`). Exposed by #301's redirect, not introduced by it. Ruled: fix at the requester's relay, `REQ-WEB-PROXY-LOCATION-NAMESPACE`, todlando rider; hertz's cell at `:592` is the red-first int evidence and is not repinned. #230 (`REQ-ATTACH-CLIENT-STALE` int): the reused-op-seq replay is closed by measurement (`dfbfd287`). The next run TIMED OUT at 240 s; classified as a rig defect: `wait_for_stream` returns the first non-local stream with no exclusion, so every arm after the first re-served arm 1's retired stream — arms 2-5 had never executed, the row is UNTESTED beyond arm 1, not red. Two product mechanisms (a generation-0 misread and a wall-ms clock collision) were derived from that trace and both withdrawn; the seat-generation guard's equality behaviour is parked as an unmeasured candidate in the register, no REQ. Fix in todlando's window now (START 10:12Z). traceable-reqs: the lane's 0.4.0 pin exposed two things. Nine code-stage tags quoted in prose in `docs/` (0.4.0 reads a backticked tag as a tag) — brackets elided on main `dd0679dc`. And a checker regression: 0.4.0's git enumeration skipped the `CONTEXT.md` FILE root, so 81 doc stages read as missing while 0.2.0 counted them — fixed upstream as **v0.4.1** (`d9af11d`, red-first), lane pins moved `71caedd4`. 0.4.1 on main + placement table = exit 0, zero findings. Register: IR-100 third limit (builder census blind to executions), IR-102 (declared dirty file invisible to a committed-blob assignment), IR-103 (retired-object re-entry, three instances in one cell), IR-104 (checker file-root regression). Next on the box, sequential: todlando #230 window → hertz window 3 (fixture, producer 4, producer 3) → docs push → producer-5 product fix + one cross-node window → assembly (compile gate, traceable-reqs 0.4.1, hand to deployah). `twohost_web.rs` stays a labelled hole for the #297 two-machine leg. Attachments: - [board-304.txt](https://github.com/BigscreenVR/spt-bs-releases/releases/download/untagged-3ecc0debcb4b3bffe480/shx-1789121621310839700-board-304.txt) *\-doyle@HFENDULEAM* [exited with code 0]