Uh oh!
There was an error while loading. Please reload this page.
docs(qa): land the five re-verified environment facts in RUNNER.md - #9427
Merged
Conversation
The #9296 wave paid container time to learn five environment facts about these QA boxes. None was in RUNNER.md, so each new runner re-derived them. Every fact was re-measured against this tree before being written down; three needed correcting rather than transcribing. - verify --rls is a separate invocation (bare verify prints no RLS section) - Playwright needs an explicit executablePath (wants chromium 1234, has 1194) - ?id= on /api/v1/meta/app keys on the app name, never the package id - ss/netstat are absent here; read liveness with curl - a cold tree cannot boot from the console-build recipe alone Also adds the absence-inference trap row: a missing flag read as a missing capability, countered by following the forwarding chain to the default. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja
…iteral The executablePath a runner copies out of the facts section has to survive an image bump. /opt/pw-browsers/chromium is a symlink maintained by the image build; the versioned chromium-1194/chrome-linux/chrome beneath it stops existing the moment the image moves to 1234 — and a dead path in a section contracted to be trusted without re-derivation is the same absence-inference shape the trap table now warns about. Verified rather than assumed: Playwright 1.62.1 launches through the symlink (Chromium 141.0.7390.37, real page driven), so a symlinked executablePath is accepted. The control leg confirms the mismatch is live — a default launch fails naming chromium_headless_shell-1234, which is now recorded as the signature to recognise. The 1194 / 1234 numbers stay where they do diagnostic work: the mechanism prose and the grep/ls check. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja
os-steve
marked this pull request as ready for review
August 18, 2026 01:08
Uh oh!
There was an error while loading. Please reload this page.
os-zhuang pushed a commit
that referenced
this pull request
Aug 18, 2026
…ion-auth environment fact Closes out the second half of the QA wave #9296 ledger debt. Part 1 (five of the six environment facts plus the absence-inference trap row) landed in PR #9427; this carries the sixth fact and every areas/*.json item correction. RUNNER.md — the one environment fact still missing: console session auth is a bearer token in localStorage (auth-session-token), so a clearCookies() gesture expires nothing and leaves a fully authed shell rendering; true expiry is POST /api/v1/auth/sign-out. The cookie half matters too — the storage family resolves its caller through better-auth's own getSession, so a bearer-only session 401s on /storage/upload/presigned. areas/*.json — 32 items corrected across 12 area files, each with its own revision bump and history entry naming what changed and why. Sources: the five run records #9334, #9401, #9417, #9453 and #9467. Every correction was re-grounded against origin/main before being written; four reported corrections were rejected as already-true or contradicted by the tree, and four items carrying the same defect class were found by that grounding rather than from any report. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ai9gUdihXjg7FumzsBNSSs
This was referenced Aug 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#9386
Docs-only. Lands the five environment facts the #9296 QA wave paid container time to
learn into the
Environment facts the runner should not re-derivesection ofdocs/qa/platform-checklist/RUNNER.md, plus theabsence-inferencerow in the trapvocabulary table.
Each fact is written as something the next runner can check and that changes what
they do: a mechanism, a concrete check command, and the action. No run narrative.
Every fact was re-measured against this tree, not transcribed
Verified at
51a46a440(=origin/mainat branch time); gate union re-run at headadc9de82e. Three of the five needed correcting, which is why the card asked forre-verification.
verify --rlsis a separate invocationexecutablePath?id=on/api/v1/meta/appkeys on the app namessblindness1 — confirmed. Source:
packages/cli/src/commands/verify.tsgates the proofs behindrls: Flags.boolean({ default: false })and prints the report onlyif (rls). Measuredlive on showcase: bare
verifyends at15 verified, 0 gaps, 0 FAILED, 1 needs-fixture, 7 skippedwith noPROVEN/HOLESline;--rlsappends20 PROVEN (20 consistent, 0 HOLES)over 23 objects and9 of 9 declared position(s) probed— matching the card'snumbers exactly.
2 — confirmed.
playwright-core@1.62.1'sbrowsers.jsonpins chromium revision1234(browserVersion 151.0.7922.34);/opt/pw-browsersholds onlychromium-1194(Chromium 141.0.7390.37). The stock showcase
playwright.config.tssets noexecutablePath. The "31" is verified as exactly the number ofSURFACESentries inshowcase-smoke.spec.ts. I wrote the uniformity discriminator (whole run red =environment, selective = product) rather than pinning the brittle count as the signal.
3 — mechanism confirmed, app list corrected.
rest-server.tsmatchesa.name === appIdFilter, so the package idcom.example.showcaseyieldsitems: [].But the card's name list is misleading:
studiois not installed on stock showcase, so?id=studiois legitimately empty there too. An emptyitemstherefore has two distinctcauses, and the file now says so and tells the runner to read the unfiltered list first.
4 — conclusion confirmed, mechanism corrected.
ssdoes not "return empty" here — itis not installed at all, and neither is
netstat(lsofandfuserare present).Measured against a live listener:
ss -ltn 2>/dev/null | grep :PORTgives empty stdout andexit 1 while
curlreturns 200. The operational rule is unchanged and stronger, but thestated mechanism would have sent a runner looking for a socket-table quirk that does not
exist.
5 — symptom confirmed, prescription wrong, rider stale.
pnpm objectui:buildbuildsthe console only, and a cold tree has no
packages/cli/dist, so the bare binary answersError: command dev not found(exit 2) — verbatim as filed. Two corrections:turbo run build --filter=@objectstack/cli... --filter=@objectstack/example-showcase..., is not sufficient. Measured: it makes thebinary resolve
dev, but leaves 8 of 67 packages unbuilt, socheck:dev-prereqsstill exits 1 and
pnpm devstill refuses.pnpm build(71 tasks) is what turns itgreen — and is what the guard itself prescribes.
objectui:buildorderingbug in
pnpm objectui:buildfails on a cold tree: build-console.sh pre-builds @objectstack/client outside turbo, so spec/core dists are missing and the DTS build dies #9307 is stale: that card is no longer open and its remedy shipped in PRfix(build): build @objectstack/client through turbo in build-console.sh, and guard on the declaration #9396.
scripts/build-console.shnow builds the client through turbo and keys its guardon
dist/index.d.ts. Writing it in would have told runners to expect a failure that nolonger happens, so it is deliberately omitted.
The genuinely useful addition here is that the root
pnpm devscript runscheck:dev-prereqsfirst, so the cryptic error only appears when a runner bypasses it byinvoking the bare binary.
Follow-up commit
adc9de82e— durability of the fact 2 copy-paste valueReview raised that prescribing the versioned literal
/opt/pw-browsers/chromium-1194/chrome-linux/chromerots at the next image bump, insidethe one section contracted to be trusted without re-derivation. Verified rather than
assumed, and the change is made:
/opt/pw-browsers/chromiumis a symlink maintained by the image build, resolving tochromium-1194/chrome-linux/chrometoday.executablePath— launched through the alias with1.62.1, got Chromium 141.0.7390.37 and drove a real page. So the hazard-free option is
also a working one; no trade-off to record.
Executable doesn't exist at .../chromium_headless_shell-1234/.... That names theheadless-shell variant, so the file now records that as the signature to recognise.
The prescribed value is now the alias; the
1194/1234numbers stay where they dodiagnostic work — the mechanism prose and the
grep/lscheck.Trap row
absence-inference— a missing flag/key/script read as a missing capability. Counterverified:
serve'suiflag isdefault: true, allowNo: true, so--no-uiis the offswitch and a scaffold's bare
objectstack devstill serves the console. Line numbersdeliberately omitted; the flag spelling is greppable and does not drift.
Not folded in
The two facts offered as dispatch input are not among the five and are not written in.
Worth recording: the "turbo replays its cache across worktrees, so a fresh worktree is not
cold" observation did not hold here — this fresh worktree built
1 cached of 55, i.e.effectively cold. It looks condition-dependent rather than a standing environment fact, so
it would have been a poor entry in a section whose contract is that entries are trusted
without re-derivation.
Verification
Gate derivation for
docs/qa/platform-checklist/RUNNER.mdnames no family (asilentverdict, not a clearance). Re-derived from the actual changed path and re-run on the new
head
adc9de82ewith a clean tree:check:nul-bytesPASS,check:platform-checklistPASS (15 areas, 190 items),
check:doc-anchorsPASS (244 fragment links resolve),check:doc-authoringPASS (376 files clean).No
areas/*.jsonedits, no.claude/skills/**, no CI posture changes — the card's threescope fences hold.
Generated by Claude Code