You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(qa): land the five re-verified environment facts in RUNNER.md (#9427)
* docs(qa): land the five re-verified environment facts in RUNNER.md
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
* docs(qa): prescribe the version-stable chromium alias, not the 1194 literal
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
---------
Co-authored-by: Claude <noreply@anthropic.com>
the real port). This is "zero hits needs a positive control" applied to one tool: a
150
+
negative from a command that never ran is not evidence.
151
+
152
+
-**A cold tree cannot boot the app from the console-build recipe alone.**
153
+
`pnpm objectui:build` runs `scripts/build-console.sh`, which builds the **console**, not
154
+
the framework CLI. On a fresh tree `packages/cli` has no `dist`, and the bare binary
155
+
then answers `Error: command dev not found` (exit 2) — a message that names neither the
156
+
cause nor the fix. **Check:**`node scripts/check-dev-prereqs.mjs`; it reports every
157
+
package whose declared `dist/` entry point is missing, and exits non-zero. **Fix:
158
+
`pnpm build`** — that is what the guard itself prescribes, and it is what turns the
159
+
guard green. ⛔ A targeted `turbo run build --filter=@objectstack/cli...
160
+
--filter=@objectstack/example-showcase...` is **not** enough: it makes the `objectstack`
161
+
binary resolve `dev`, but measured here it still left 8 of 67 packages unbuilt, so
162
+
`check:dev-prereqs` stays red and `pnpm dev` still refuses to boot. Note the root
163
+
`pnpm dev` script runs that guard **before** booting, so a runner who uses `pnpm dev`
164
+
gets the diagnostic and the fix; the cryptic `command dev not found` only appears when
165
+
the bare binary is invoked directly.
166
+
99
167
### Trap vocabulary (`traps` field)
100
168
101
169
| trap | what it fakes | counter |
@@ -110,6 +178,7 @@ contradicts it, and correct it here when it does.
110
178
|`dispatcher-vs-hono-route`| route exists in unit tests, 404s on the real server | oracle = live server trace, never simulated dispatch |
111
179
|`wrong-panel`| feature looks missing on a sibling surface | item's `steps` name the exact surface; check it |
112
180
|`wrong-persona`| admin privileges mask a guard | run guard checks as the non-privileged persona |
181
+
|`absence-inference`| a missing flag/key/script read as a missing capability | follow the forwarding chain to where the default is actually decided, before writing the finding down. A scaffold's bare `objectstack dev` still serves the console: `serve`'s `ui` flag is `default: true, allowNo: true`, so `--no-ui` is the off switch and absence means on |
0 commit comments