[object Object]

← back to AbramsEgo

auto-save: 2026-07-01T15:37:13 (4 files) — build-queue/tasks/27-raise-the-bar-audit.md data/local-fleet.json build-queue/failed/27-raise-the-bar-audit.md scripts/smoke.sh

2636095c076e1ca989b42f6b3f374d6f558db100 · 2026-07-01 15:37:14 -0700 · Steve Abrams

Files touched

Diff

commit 2636095c076e1ca989b42f6b3f374d6f558db100
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jul 1 15:37:14 2026 -0700

    auto-save: 2026-07-01T15:37:13 (4 files) — build-queue/tasks/27-raise-the-bar-audit.md data/local-fleet.json build-queue/failed/27-raise-the-bar-audit.md scripts/smoke.sh
---
 .../{tasks => failed}/27-raise-the-bar-audit.md    |  0
 data/local-fleet.json                              |  2 +-
 scripts/smoke.sh                                   | 58 ++++++++++++++++++++++
 3 files changed, 59 insertions(+), 1 deletion(-)

diff --git a/build-queue/tasks/27-raise-the-bar-audit.md b/build-queue/failed/27-raise-the-bar-audit.md
similarity index 100%
rename from build-queue/tasks/27-raise-the-bar-audit.md
rename to build-queue/failed/27-raise-the-bar-audit.md
diff --git a/data/local-fleet.json b/data/local-fleet.json
index 8716672..7d941e5 100644
--- a/data/local-fleet.json
+++ b/data/local-fleet.json
@@ -1 +1 @@
-{"fetchedAt":"2026-07-01T22:07:01.123Z","procs":[{"name":"pm2-logrotate","status":"online","cpu":0.1,"memMB":43,"restarts":0,"uptimeMs":3623538,"startedAt":"2026-07-01T21:06:37.585Z"},{"name":"abramsego","status":"online","cpu":0.7,"memMB":63,"restarts":6,"uptimeMs":1530777,"startedAt":"2026-07-01T21:41:30.346Z"},{"name":"api-token-dashboard","status":"online","cpu":0.1,"memMB":52,"restarts":3,"uptimeMs":1900806,"startedAt":"2026-07-01T21:35:20.317Z"}]}
\ No newline at end of file
+{"fetchedAt":"2026-07-01T22:08:31.307Z","procs":[{"name":"pm2-logrotate","status":"online","cpu":0.2,"memMB":43,"restarts":0,"uptimeMs":3713722,"startedAt":"2026-07-01T21:06:37.585Z"},{"name":"abramsego","status":"online","cpu":0.8,"memMB":63,"restarts":6,"uptimeMs":1620961,"startedAt":"2026-07-01T21:41:30.346Z"},{"name":"api-token-dashboard","status":"online","cpu":0.2,"memMB":52,"restarts":3,"uptimeMs":1990990,"startedAt":"2026-07-01T21:35:20.317Z"}]}
\ No newline at end of file
diff --git a/scripts/smoke.sh b/scripts/smoke.sh
new file mode 100755
index 0000000..1c6ebab
--- /dev/null
+++ b/scripts/smoke.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+# scripts/smoke.sh — fast (<10s) no-deps regression net for the AbramsEgo dashboard.
+#
+# Curls /api/data on the RUNNING instance (:9773) and asserts the contract the
+# SPEC panels depend on. Run this FIRST in any audit/replenish pass instead of
+# re-deriving curl checks. Exits non-zero and names the failing assertion.
+#
+# Env overrides: ABRAMSEGO_BASE, ABRAMSEGO_USER, ABRAMSEGO_PASS.
+set -u
+BASE="${ABRAMSEGO_BASE:-http://127.0.0.1:9773}"
+AUSER="${ABRAMSEGO_USER:-admin}"
+APASS="${ABRAMSEGO_PASS:-DW2024!}"
+
+TMP="$(mktemp)"
+trap 'rm -f "$TMP"' EXIT
+
+CODE=$(curl -s -m 8 -o "$TMP" -w '%{http_code}' -u "$AUSER:$APASS" "$BASE/api/data") || {
+  echo "FAIL http_reachable — curl could not reach $BASE/api/data"; exit 1; }
+[ "$CODE" = "200" ] || { echo "FAIL http_200_with_auth — got HTTP $CODE"; exit 1; }
+
+python3 - "$TMP" <<'PY'
+import json, sys
+
+def fail(name, detail=''):
+    print(f"FAIL {name}" + (f" — {detail}" if detail else ''))
+    sys.exit(1)
+
+try:
+    d = json.load(open(sys.argv[1]))
+except Exception as e:
+    fail('json_parse', str(e))
+
+KEYS = ['activity', 'canaries', 'cost', 'crons', 'kamatera', 'localFleet',
+        'officers', 'pnl', 'revenue', 'sessions', 'system', 'usage',
+        'usageSummary', 'wins']
+missing = [k for k in KEYS if k not in d]
+if missing:
+    fail('all_14_top_level_keys', 'missing: ' + ', '.join(missing))
+
+jobs = (d['crons'] or {}).get('jobs') or []
+if len(jobs) <= 100:
+    fail('crons_length_gt_100', f'got {len(jobs)}')
+
+prov = (d['cost'] or {}).get('byProvider') or []
+if len(prov) < 5:
+    fail('cost_byProvider_gte_5', f'got {len(prov)}')
+
+cans = (d['canaries'] or {}).get('canaries') or []
+nulls = [c.get('name', '?') for c in cans if c.get('verdict') is None]
+if nulls:
+    fail('canaries_verdicts_nonnull', 'null verdict: ' + ', '.join(nulls))
+
+if (d['localFleet'] or {}).get('error') is not None:
+    fail('localFleet_error_null', str(d['localFleet'].get('error')))
+
+print(f"PASS — 200 auth, 14 keys, crons {len(jobs)}, providers {len(prov)}, "
+      f"canaries {len(cans)} all-verdict, localFleet clean")
+PY

← 6d59e97 chore: enqueue task 27 — raise-the-bar audit (DOM wiring, fa  ·  back to AbramsEgo  ·  chore: stage tasks 28+29 (task 27 split into <15-min chunks) 2ce7aff →