← back to AbramsEgo
chore: replenish audit (fable) — 8/8 SPEC panels live, hard rules hold, task 23 verified on running instance (3/114 cron models, floor met); 1 real gap: donut legend mislabels paid-but-idle providers (browserbase) as $0 (local) → enqueue task 25 + re-queue replenisher 26
6f1dbde925ddddd114d30481c62b7967d676225e · 2026-07-01 14:39:49 -0700 · Steve
Files touched
R100 build-queue/tasks/24-replenish.md build-queue/done/24-replenish.mdA build-queue/tasks/25-donut-paid-zero-label.mdA build-queue/tasks/26-replenish.mdM data/local-fleet.json
Diff
commit 6f1dbde925ddddd114d30481c62b7967d676225e
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Jul 1 14:39:49 2026 -0700
chore: replenish audit (fable) — 8/8 SPEC panels live, hard rules hold, task 23 verified on running instance (3/114 cron models, floor met); 1 real gap: donut legend mislabels paid-but-idle providers (browserbase) as $0 (local) → enqueue task 25 + re-queue replenisher 26
---
build-queue/{tasks => done}/24-replenish.md | 0
build-queue/tasks/25-donut-paid-zero-label.md | 25 +++++++++++++++++++++
build-queue/tasks/26-replenish.md | 31 +++++++++++++++++++++++++++
data/local-fleet.json | 2 +-
4 files changed, 57 insertions(+), 1 deletion(-)
diff --git a/build-queue/tasks/24-replenish.md b/build-queue/done/24-replenish.md
similarity index 100%
rename from build-queue/tasks/24-replenish.md
rename to build-queue/done/24-replenish.md
diff --git a/build-queue/tasks/25-donut-paid-zero-label.md b/build-queue/tasks/25-donut-paid-zero-label.md
new file mode 100644
index 0000000..f0f39dc
--- /dev/null
+++ b/build-queue/tasks/25-donut-paid-zero-label.md
@@ -0,0 +1,25 @@
+# AbramsEgo task 25 — donut mislabels paid-but-idle providers as "$0 (local)"
+
+Read SPEC.md. Steve HARD rule: every cost figure labeled honestly; ONLY free/local shows
+`$0 (local)`. The provider donut legend (`renderProviderDonut`, `public/index.html` ~line 397)
+computes `const amt=(p.local||(p.total||0)===0)?'$0 (local)':usd(p.total);` — so ANY provider
+with $0 spend in the 30d window gets the "(local)" tag, even a metered PAID one. Live right now:
+**browserbase** (~$47 all-time, ~15¢/session) renders as "$0 (local)". That's the exact
+hidden-spend mislabel the rule exists to prevent. Server side is already correct: `server.js`
+line 567 sets `local: /\(local\)/i.test(provider)` — trust it.
+
+~5 min, surgical:
+
+1. In `public/index.html` ~line 397 change the amount to trust the server flag:
+ `const amt = p.local ? '$0 (local)' : usd(p.total);`
+ Paid-but-idle providers now show `$0.0000` (honest: paid, no spend this window),
+ truly-local ones keep `$0 (local)`.
+2. `pm2 restart abramsego`, then verify:
+ `curl -s -u admin:'DW2024!' http://127.0.0.1:9773/api/data | python3 -c "import sys,json;print([(p['provider'],p['total'],p['local']) for p in json.load(sys.stdin)['cost']['byProvider']])"`
+ — confirm browserbase has `local: False`; load http://127.0.0.1:9773/ and confirm the legend
+ row for browserbase reads `$0.0000` (not "(local)") while Ollama-style rows keep `$0 (local)`.
+3. Commit:
+ `git add -A && git commit -m "fix: donut legend only labels truly-local providers \$0 (local) — paid-but-idle shows honest \$0" --author="Steve <steve@designerwallcoverings.com>"`
+
+Do NOT touch the donut geometry, colors, or the server's deriveProvider mapping — they're
+correct. Local only, no deploy.
diff --git a/build-queue/tasks/26-replenish.md b/build-queue/tasks/26-replenish.md
new file mode 100644
index 0000000..3cd47e7
--- /dev/null
+++ b/build-queue/tasks/26-replenish.md
@@ -0,0 +1,31 @@
+# AbramsEgo task 26 — REPLENISH: fresh-eyes full-completion audit (Fable 5)
+
+You are the queue replenisher. Read SPEC.md FIRST, then audit the RUNNING dashboard, not the
+file bookkeeping.
+
+1. Pull the live surface: `curl -s -u admin:'DW2024!' http://127.0.0.1:9773/api/data` and read
+ `public/index.html` + `server.js`. Check every SPEC panel (1–8) is present AND wired to real
+ data (no dead placeholders), and every Steve hard rule holds:
+ - 🕓 created date+time chip visible on EVERY admin card/row (full ISO in `title=`).
+ - sort `<select>` + density slider + infinite scroll on every grid that can exceed ~40 rows,
+ localStorage-persisted. (Officers panel is compliant via the panel-level fetchedAt chip —
+ officers carry no per-record timestamp; the local fleet list at ~3 procs was deliberately
+ left without grid controls in task 15 — don't re-flag those.)
+ - every cost figure labeled; free/local shows `$0 (local)`.
+ - Verify task 25 (donut legend labels only truly-local providers `$0 (local)`; a
+ paid-but-idle provider like browserbase must show an honest `$0.0000`, not "(local)")
+ actually landed on the live instance. Also known-good, don't re-flag: chat falls back to
+ the grounded local-template when ollama can't load (RAM-starved box — code is correct);
+ cron `model` is null for the ~111 jobs whose scripts never invoke claude (honest).
+2. For each REAL gap found (broken data, missing SPEC feature, hard-rule violation): write ONE
+ surgical <15-min task file to `build-queue/tasks/NN-<slug>.md` (NN starting at 27), following
+ the style of `build-queue/done/12-officers-datetime-chip.md` — name exact files/lines, one
+ verify command, one commit line. BOUND: enqueue at most 3 tasks, highest-value first. Also
+ re-enqueue a copy of this replenisher as the LAST task (next number) ONLY if you enqueued ≥1 task.
+3. If NO real gaps: enqueue nothing, do NOT re-enqueue yourself — the loop rests, the build is
+ at full completion. Don't invent busywork to justify the run.
+4. Move this file to `build-queue/done/` and commit
+ `chore: replenish audit (fable) — <verdict>` with author `steve@designerwallcoverings.com`.
+
+Local only. No deploy, no DNS, no publish — draft any gated need to
+~/.claude/yolo-queue/pending-approval/ instead.
diff --git a/data/local-fleet.json b/data/local-fleet.json
index fe078ab..5c02fa5 100644
--- a/data/local-fleet.json
+++ b/data/local-fleet.json
@@ -1 +1 @@
-{"fetchedAt":"2026-07-01T21:36:27.149Z","procs":[{"name":"pm2-logrotate","status":"online","cpu":0.2,"memMB":46,"restarts":0,"uptimeMs":1789564,"startedAt":"2026-07-01T21:06:37.585Z"},{"name":"abramsego","status":"online","cpu":0.9,"memMB":69,"restarts":5,"uptimeMs":330946,"startedAt":"2026-07-01T21:30:56.203Z"},{"name":"api-token-dashboard","status":"online","cpu":0.1,"memMB":51,"restarts":3,"uptimeMs":66832,"startedAt":"2026-07-01T21:35:20.317Z"}]}
\ No newline at end of file
+{"fetchedAt":"2026-07-01T21:39:26.867Z","procs":[{"name":"pm2-logrotate","status":"online","cpu":0.2,"memMB":45,"restarts":0,"uptimeMs":1969282,"startedAt":"2026-07-01T21:06:37.585Z"},{"name":"abramsego","status":"online","cpu":0.4,"memMB":64,"restarts":5,"uptimeMs":510664,"startedAt":"2026-07-01T21:30:56.203Z"},{"name":"api-token-dashboard","status":"online","cpu":0.1,"memMB":51,"restarts":3,"uptimeMs":246550,"startedAt":"2026-07-01T21:35:20.317Z"}]}
\ No newline at end of file
← 3fa9c02 auto-save: 2026-07-01T14:36:50 (3 files) — build-queue/tasks
·
back to AbramsEgo
·
fix: donut legend only labels truly-local providers $0 (loca aa0e51f →