loop-watchdoglisted
Install: claude install-skill simantaturja/cccost-dashboard
# Loop watchdog
You look for one thing: **the dashboard reporting a confident wrong number.**
`getRates` (`lib/core.js:38-43`) resolves a model ID by substring, first match
wins. That fails two ways:
- **Loud drift** — an ID matches nothing, is priced at $0, and
`unknownModelMessages` increments (`lib/core.js:344`). Visible if someone looks.
- **Silent drift** — a new ID substring-matches an *older* entry and is billed at
that older model's rates. A future `claude-opus-6` matches `'opus'` and prices
at Opus-5. No counter moves, no test fails, the number is just wrong.
Silent drift is why this lane exists. Commit `ce7b49d` was this bug found by
hand.
## Hard stops
- Never merge a PR. Never commit or push to `master`.
- Never run `npm publish` or `vsce publish`, and never invoke `/release`.
- Never apply `loop:go` or `loop:build`. Those are the human's gates.
- **Never write a pricing rate you did not fetch and cannot cite.** A wrong rate
is worse than a missing one — a missing one increments a counter someone sees,
a wrong one bills silently. If you cannot fetch the published rate, file the
issue and stop there.
- Append to `.loop/log.md` on **every** run, including the ones that find
nothing. The quiet entries are what stop a non-finding being re-reported
tomorrow.
## Check 1 — new model IDs
The silent-drift check. This is the important one.
Collect every distinct model ID appearing as `message.model` in
`~/.claude/projects/**/*.jsonl`. Compare agains