Connect start: pin the app-secret gate on every managed provider, refuse blank targets #9
Loading…
Reference in a new issue
No description provided.
Delete branch "heimdall/connect-start-app-auth"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes the Heimdall side of
joystick:follow_up:connect-start-needs-app-auth.Finding on arrival: the gate the follow-up asks for was already in main (
b541e09: a connect start carrying aconnectionneeds the app's ownx-heimdall-app-secret, and the slug must match). It was pinned for Joystick only, and the architecture doc still called connect starts unauthenticated. Reuse of the existingresolveAppCaller/isAppCallergate; nothing parallel added.Changed
joystick:finding:cut-h1.s4.whitespace-targetid-passes-custody-gate: a blank target (" ", tab, U+200B, U+FEFF) passed the start gate and the callback mint. One predicate,isUsableConnectionTarget, now serves both; start answers400 invalid_connection_target.notes/streampixels-connect-redeem.md: what StreamPixels must change (remember the target it started, redeem with that stored target, refuse a creator connect it did not start). StreamPixels is untouched.docs/architecture.mdopen-follow-up entry brought up to date.Hand mutants (applied, suite run, reverted), all caught: connect-with-connection gate dropped, slug match dropped, caller presence dropped, blank check dropped, blank check creator-only (survived the first test set; test widened to both kinds, then caught), predicate ignoring format chars, predicate ignoring whitespace, callback mint rejecting only the empty string.
tests/app.test.ts104 passed after restore.Not covered: Heimdall cannot see StreamPixels' session, so "the creator-manage session was proved" is StreamPixels' step before it starts the connect; the note says so. A
connectwith noconnectionon twitch/youtube is the viewer-session path and stays open. Not merged, not deployed.🤖 Generated with Claude Code