← back to AbramsEgo
chore: replenish build queue (2 tasks + replenisher)
3031aa530c163d8a8d1d7479df69a9200dd35f53 · 2026-07-01 12:18:08 -0700 · Steve
Files touched
A build-queue/tasks/07-swap-metric.mdA build-queue/tasks/08-provider-donut.mdA build-queue/tasks/09-replenish.md
Diff
commit 3031aa530c163d8a8d1d7479df69a9200dd35f53
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Jul 1 12:18:08 2026 -0700
chore: replenish build queue (2 tasks + replenisher)
---
build-queue/tasks/07-swap-metric.md | 16 ++++++++++++++++
build-queue/tasks/08-provider-donut.md | 19 +++++++++++++++++++
build-queue/tasks/09-replenish.md | 17 +++++++++++++++++
3 files changed, 52 insertions(+)
diff --git a/build-queue/tasks/07-swap-metric.md b/build-queue/tasks/07-swap-metric.md
new file mode 100644
index 0000000..760d2c8
--- /dev/null
+++ b/build-queue/tasks/07-swap-metric.md
@@ -0,0 +1,16 @@
+# AbramsEgo build task 07 — add SWAP to the top metrics bar (panel 1)
+
+SPEC.md panel 1 requires the top metrics bar to show **live CPU / RAM / swap / disk, color-coded
+by threshold**. Right now the backend already collects swap (`SNAP.system.swap.usedMB`) but the
+frontend metrics bar only renders CPU / RAM / DISK / NODE / UP — **swap is missing**. Add it.
+
+1. In `public/index.html`, in the `// metrics bar` block (~line 272), add a `SWAP` metric between
+ RAM and DISK, e.g. `['SWAP', (s.swap && s.swap.usedMB!=null) ? (s.swap.usedMB>=1024 ? (s.swap.usedMB/1024).toFixed(1)+'G' : Math.round(s.swap.usedMB)+'M') : '—', cls(s.swap&&s.swap.usedMB, 2048, 8192)]`.
+ Reuse the existing `cls(val, warn, crit)` helper so it color-codes (warn ≈2GB, crit ≈8GB swap used).
+ Handle the `swap===null` case (non-mac / unavailable) → show `—`, no color.
+2. Keep it read-only — no server changes needed (swap is already in the snapshot).
+3. Verify: `pm2 restart abramsego`, then `curl -s -u admin:'DW2024!' http://localhost:9773/api/system`
+ confirms `swap.usedMB` is present, and the metrics bar HTML now includes a SWAP cell.
+ Commit `feat: show swap in top metrics bar (SPEC panel 1)`.
+
+Do NOT deploy. Local only.
diff --git a/build-queue/tasks/08-provider-donut.md b/build-queue/tasks/08-provider-donut.md
new file mode 100644
index 0000000..820c50d
--- /dev/null
+++ b/build-queue/tasks/08-provider-donut.md
@@ -0,0 +1,19 @@
+# AbramsEgo build task 08 — per-provider cost donut (panel 3)
+
+SPEC.md panel 3 (Cost & energy P&L) calls for a **per-provider donut**. Today the Cost card renders
+a per-model bar list and a 7d trend, but there is no provider-level breakdown/donut. Add one.
+
+1. In `server.js`, extend the cost collector to bucket `~/.claude/cost-ledger.jsonl` (30d) by
+ **provider** — derive provider from each row's `provider` field if present, else infer from the
+ `api`/model name (e.g. anthropic/claude→"Anthropic", gpt/openai/codex→"OpenAI", gemini→"Google",
+ elevenlabs→"ElevenLabs", replicate→"Replicate", exa→"Exa", else "Other"). Expose as
+ `cost.byProvider` = `[{provider, total}]` sorted desc. Include $0/local providers labeled as such.
+2. In `public/index.html`, in the "Cost to run · 30d" card (or the P&L card), render a compact
+ **pure-SVG/CSS conic-gradient donut** of provider share of 30d spend, with a small legend
+ (provider · $amount · %). No chart libraries. Match the existing dark theme + CSS var names.
+ Always show the `$` figure per provider (Steve's "always show costs" rule); free/local → `$0 (local)`.
+3. Verify: `pm2 restart abramsego`, then `curl -s -u admin:'DW2024!' http://localhost:9773/api/cost`
+ shows `byProvider` as a non-empty array, and the donut + legend render.
+ Commit `feat: per-provider cost donut (SPEC panel 3)`.
+
+Do NOT deploy. Local only.
diff --git a/build-queue/tasks/09-replenish.md b/build-queue/tasks/09-replenish.md
new file mode 100644
index 0000000..470cc31
--- /dev/null
+++ b/build-queue/tasks/09-replenish.md
@@ -0,0 +1,17 @@
+# AbramsEgo task 09 — replenish the build queue (self-sustaining, BOUNDED)
+
+Read SPEC.md. This keeps AbramsEgo building non-stop toward the spec without a human.
+
+1. Compare the RUNNING dashboard (curl the :9773 APIs + read public/index.html + server.js)
+ against SPEC.md's 8 panels and Steve's hard rules.
+2. Identify the highest-value MISSING or incomplete items.
+3. Enqueue **at most 3** new task files into `build-queue/tasks/` (numbered above the current
+ max, e.g. 10/11/12), each a self-contained <15-min chunk written in the same style as tasks
+ 01–08 (local-only, test against pm2 :9773, commit on success, gated work → drafts).
+ Then enqueue a fresh copy of THIS replenisher as the highest number so the cycle continues.
+4. **BOUND:** if the dashboard already satisfies SPEC (all 8 panels present + hard rules met),
+ enqueue NOTHING (and do not re-enqueue this replenisher) — let the loop rest. Non-stop until
+ done, not busywork forever.
+5. Commit any task files you add: `chore: replenish build queue (N tasks)`.
+
+Do NOT build features in this task — only audit + enqueue. Local only.
← 79460f7 auto-save: 2026-07-01T12:12:34 (4 files) — build-queue/STOP
·
back to AbramsEgo
·
feat: show swap in top metrics bar (SPEC panel 1) 64b2613 →