CLAUDE.md, AGENTS.md, ARCHITECTURE.md and TODO.md all said no browser exists
in this environment, so appearance had never been verified by anyone. Chrome
is on PATH. Its own --screenshot flag is what fails: it fires on the load
event, before this app's async IndexedDB read resolves, and captures a blank
page — which is presumably how the claim took hold.
scripts/screenshot.ts drives CDP instead: waits past the load event, seeds
IndexedDB via --eval-file and reboots the app with --reload, clicks with
--click, applies shadcn's class-based dark palette with --dark, and reports
console errors and uncaught exceptions. A page that renders blank from a
thrown error looks identical to an empty one, so the console output is half
the value.
Two defects found by simply looking:
- The month table's numeric columns had no horizontal padding, so figures ran
into each other: "+7,175.00 DKK4,200.00 DKK". Now padded.
- Dev logged "The script has an unsupported MIME type ('text/html')" on every
boot, because registerServiceWorker asks for sw.js and the "/*" catch-all
answered with the HTML shell. Dev now serves an inert worker.
Confirmed working, first time seen: the carry meter (including red where a post
is overspent), the Task 5 rule-history editor, the Task 6 "change from here"
control, and baked FX rates showing as "manual - 2026-09-01" in Settings.
Recorded in the docs, with the limits stated: this container's fontconfig maps
every generic family to a monospace face, so screenshots need a FONTCONFIG_FILE
override or you will chase a font bug that does not exist; Chrome starts from
an empty profile each run; and no screenshot can judge how a design feels.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
26 lines
1.2 KiB
Markdown
26 lines
1.2 KiB
Markdown
# Agent guide
|
|
|
|
This repository's agent instructions live in **`CLAUDE.md`** — read it first.
|
|
It carries the project invariants, the gotchas that cost real bugs, and the
|
|
validation this codebase deliberately does not perform.
|
|
|
|
Then, depending on what you are doing:
|
|
|
|
- **Changing anything structural** → `ARCHITECTURE.md` (layers, data flow, and
|
|
why the non-obvious choices are what they are).
|
|
- **Picking up queued work** → `TODO.md` (ordered, each item carrying the
|
|
reasoning already settled).
|
|
- **Making a product decision** → `PRODUCT.md` (who this is for, what must never
|
|
break, and what must not be invented).
|
|
- **Wondering why something is the way it is** → `docs/superpowers/specs/`
|
|
records the decisions *and the alternatives that were rejected*.
|
|
|
|
Two rules worth knowing before your first edit:
|
|
|
|
1. **Bun only.** `bun test`, `bun run`, `bunx`. Never npm, jest, vitest or vite.
|
|
2. **There IS a browser here** — `bun scripts/screenshot.ts <url> <out.png>`
|
|
drives headless Chrome and hands you a PNG to look at. Read CLAUDE.md's
|
|
"Verification limits" first: the container's fonts lie, and offline, the
|
|
install prompt, the `.ods` in a spreadsheet, and how anything *feels* still
|
|
need a human. Say so rather than claiming it works.
|