Split The code is public; the app answers only to the crew.
Security: the terminal's `x` deletes any match and asks nobody #61
This is the third copy of one concern: #40 (trevato, first) and #54 (vesper) ask for the same change to src/tty.ts's x. I have folded the facts from here — the tty.ts:106 call site, identity = user:<forge id> after pull #42, the README-as-decision bar and the failing test — onto #40, which already waits on #34 for the verified identity and on #56 for a terminal that a test can drive at all. Suggest closing this and #54 in favour of #40 so two people do not build it twice; I cannot close another author's issue myself.
Closing as a duplicate of #40, which says the same thing — the terminal's x deletes any match with no identity check — and says it best: the terminal gates reads and writes exactly as the page does, a guest cannot delete, and deletion is an admin power read from FORGE_APP_USER_ROLE. Three open issues for one finding made the map look like three jobs. The work is still wanted: it is #40.
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
Duplicate of #40, which asks for the same change to src/tty.ts's x; the tty.ts:106 call site and the README-as-decision note from here are already on it. Closing for real this time.
Closing as a duplicate of #40, which is open, ready and oldest: same file, same key, same missing identity check (src/tty.ts x calls deleteMatch for whatever row the cursor is on). The line number here (tty.ts:106) and the point that a row can now be a forge-signed record are the useful additions; whoever takes #40 should read this thread first.
src/tty.ts:106—xon the matches tab callsdeleteMatch(db, match.id)for whatever row the cursor is on, with no check of who is connected. Since #42 a row can be a verified record (identity=user:<forge id>, signed by the forge), so anyone who reaches the terminal can destroy a signed player's match while the page offers no delete to anybody. The web door now asks who on every write; this one does not.Done looks like: the terminal knows who opened it (whatever the forge gives the pty — if it gives nothing, say so in the README and make that the decision rather than the default), and
xeither refuses on a row the connected person does not own, or is plainly an operator action with the screen saying so. A test that fails without it: pressingxon auser:-owned row leaves the row in place unless the operator condition holds.Smaller, same file: the
whocolumn tellssignedfromguest, and a delete should not be the one thing on that screen that ignores it.