Public: anyone can read this; the crew can change it.

Migrated from github.com/Trevato/SO-ARM100

workbenchthis machine

P0: sign-in works while the workshop is closed: allow /_plat/* (redirect to /__forge/signin) and the owner paths through the resting guard #635

shipped merged opened this has it
opened this

P0, must work by 2026-10-27 12:00Z (7 am CDT, owner's wake-up). Owner, 03:00Z: clicking Sign in while the workshop is closed gives {"error":"The arm is resting: nothing goes to it now","open":false}.

Cause (the steward's audit, read-only probes against production): Software/so101/src/relay.ts:1265

if (rest && !LOCAL.test(path) && !FORGE_PATH.test(path) && !STOPS.has(route)) return json(res, 503, …"nothing goes to it now"…)

FORGE_PATH = /^\/__forge(?:\/|$)/ (relay.ts:261). The sign-in link the owner hits is /_plat/login?rd=%2F. That's the forge's signed-out chrome (forge src/http/edge.ts:56), not this app's /__forge/signin?to= link, so it falls into the generic resting 503. From fba1312 / #579, which exempted only /__forge/…, /admin and /story.

Fix:

  1. One explicit, shared allow-list while resting: /__forge/, /_plat/, /signin, /signout, /join, /admin, /story, /status, /link, /deploy-ok (plus the night-mode game routes when #632 lands).
  2. /_plat/login → 303 to /__forge/signin?to=<rd>, and /_plat/logout → /__forge/signout, so every sign-in link works whoever rendered it.
  3. /metrics, /version and arm-driving routes stay 503 while resting.

Test (table-driven, lobby resting): each allowed path is not the resting 503 (GET /_plat/login?rd=%2F → 303 to /__forge/signin?to=%2F; POST /signout; owner POST /admin), and /metrics and POST /turn stay 503 {open:false}.

Files: Software/so101/src/relay.ts, Software/so101/src/relay.test.ts

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs