Skip to content

Commit 9dabcbe

Browse files
sametbasbugclaude
andcommitted
Record what the first browser walk through the door found
The two bugs, why the test suites were structurally blind to them, and the state the full staging run left behind. Also records that the anime site's Orbit button does not exist yet, and that its absence is what forced the hand-driven start whose implicit-flow tokens looked like a bug and were not. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent fe6b6af commit 9dabcbe

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

‎docs/V6_PROJECT_LEDGER.md‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2156,3 +2156,36 @@ Anything under `docs/archive/` describes an earlier state and is frozen. Read it
21562156
on the 12th: the generator stamps the UTC date and it was still the 11th in
21572157
UTC. Not worth a rotation, but worth knowing before someone reads the kid as
21582158
a deployment date.
2159+
- The first real browser walk through the site sign-in door found two bugs that
2160+
22 unit tests and 17 end-to-end tests could not: both suites drive the
2161+
endpoints with `fetch`, and `fetch` obeys neither referrer policy nor CSP. The
2162+
consent page's own `referrer-policy: no-referrer` made Chrome send a literal
2163+
`Origin: null` on the same-origin form POST, which the origin check rejected;
2164+
and `form-action 'self'` covered the POST but not the 302 that follows it,
2165+
because Chrome applies form-action to the whole redirect chain. The second one
2166+
was the expensive one to read: the grant was stored, the code was minted, and
2167+
the browser silently refused to leave the page — no error, no console entry
2168+
the user would find, nothing on screen. "Nothing happened" is what a blocked
2169+
redirect looks like.
2170+
- The lesson generalises past this door: any header a page sets about itself can
2171+
change what the browser sends or allows on the next request, and a test that
2172+
never renders the page in a browser cannot see it. Both fixes are locked by
2173+
assertions on the response headers that fail when reverted, which is the
2174+
cheapest available substitute — not a real browser, but a tripwire on the two
2175+
values a real browser cared about.
2176+
- With those two fixed, the whole chain ran on staging on 12 August: Supabase
2177+
accepted the ES256 ID token, linked `custom:orbit` onto the existing Google
2178+
user by e-mail rather than minting a second account, stored the Orbit access
2179+
and refresh tokens as provider tokens, and Orbit's own "Bağlı siteler" panel
2180+
lists Equinox Rota with the three consented scopes and a working revoke. D1
2181+
shows exactly one unused access/refresh pair, the redeemed code marked
2182+
consumed, and the codes from the blocked attempts expired unredeemed — the
2183+
60-second code TTL doing what it is for.
2184+
- The anime site still has no "Orbit ile devam et" button. Its sign-in today is
2185+
Google Identity Services one-tap through `signInWithIdToken`, so the flow
2186+
above was driven by hand against Supabase's `/authorize`. That hand-driven
2187+
start is also why Supabase answered with implicit-flow tokens in the URL
2188+
fragment while the site's client is configured `flowType: "pkce"` and ignored
2189+
them: not a bug in the door, an artefact of skipping the site's own entry
2190+
point. Replacing that button is the next step, and it is the step that makes
2191+
the fragment/query mismatch disappear.

0 commit comments

Comments
 (0)