diff --git a/wizard-work/sol/Sol-Lane-Triage-2026-10-24.json b/wizard-work/sol/Sol-Lane-Triage-2026-10-24.json new file mode 100644 index 0000000..b854ccb --- /dev/null +++ b/wizard-work/sol/Sol-Lane-Triage-2026-10-24.json @@ -0,0 +1,64 @@ +{ + "generated_utc": "2026-10-24T19:03:42Z", + "generated_at": "2026-10-24T19:03:42.157270+00:00", + "scope": "seven primary workflow lanes' daily ledger logs under /root/.hermes/wizard-outputs/", + "classification": "ACTIVE (<=24h), WATCH (<=168h), else STALE (>168h)", + "lanes": [ + { + "id": "forge", + "latest_log": "forge-2026-10-16-1446.txt", + "latest_mtime_utc": "2026-10-16T14:56:18Z", + "age_hours": 196.12, + "daily_log_count": 56, + "status": "STALE" + }, + { + "id": "ledger", + "latest_log": "ledger-2026-10-16-1446.txt", + "latest_mtime_utc": "2026-10-16T14:47:33Z", + "age_hours": 196.27, + "daily_log_count": 56, + "status": "STALE" + }, + { + "id": "null", + "latest_log": "null-2026-10-16-1446.txt", + "latest_mtime_utc": "2026-10-16T14:47:52Z", + "age_hours": 196.26, + "daily_log_count": 56, + "status": "STALE" + }, + { + "id": "quill", + "latest_log": "quill-2026-10-16-1446.txt", + "latest_mtime_utc": "2026-10-16T14:47:07Z", + "age_hours": 196.28, + "daily_log_count": 56, + "status": "STALE" + }, + { + "id": "sphinx", + "latest_log": "sphinx-2026-10-16-1446.txt", + "latest_mtime_utc": "2026-10-16T14:50:35Z", + "age_hours": 196.22, + "daily_log_count": 56, + "status": "STALE" + }, + { + "id": "sol", + "latest_log": "sol-2026-10-16-1446.txt", + "latest_mtime_utc": "2026-10-16T14:49:04Z", + "age_hours": 196.24, + "daily_log_count": 56, + "status": "STALE" + }, + { + "id": "spark", + "latest_log": "spark-2026-10-16-1446.txt", + "latest_mtime_utc": "2026-10-16T14:56:18Z", + "age_hours": 196.12, + "daily_log_count": 56, + "status": "STALE" + } + ] +} diff --git a/wizard-work/sol/Sol-Lane-Triage-2026-10-24.md b/wizard-work/sol/Sol-Lane-Triage-2026-10-24.md new file mode 100644 index 0000000..2f4d38c --- /dev/null +++ b/wizard-work/sol/Sol-Lane-Triage-2026-10-24.md @@ -0,0 +1,47 @@ +# Sol Lane Daily Ledger Triage - 2026-10-24 + +## Verdict + +- Scope: seven primary workflow lanes' daily ledger logs under /root/.hermes/wizard-outputs/. +- Classification (measured stage): ACTIVE (<=24h), WATCH (<=168h), else STALE (>168h). + +- Generated (UTC): 2026-10-24T19:03:42Z + +## Summary + +| Status | Count | +|---|---| +| ACTIVE | 0 | +| WATCH | 0 | +| STALE | 7 | + +- As of 2026-10-24T19:03:42Z UTC, the oldest gap is 196.3h (quill). + +## Per-lane table + +| Lane | Latest daily log | Last written (UTC) | Age | Status | +|---|---|---|---|---| +| quill | quill-2026-10-16-1446.txt | 2026-10-16T14:47:07Z | 196.28h | STALE | +| ledger | ledger-2026-10-16-1446.txt | 2026-10-16T14:47:33Z | 196.27h | STALE | +| null | null-2026-10-16-1446.txt | 2026-10-16T14:47:52Z | 196.26h | STALE | +| sol | sol-2026-10-16-1446.txt | 2026-10-16T14:49:04Z | 196.24h | STALE | +| sphinx | sphinx-2026-10-16-1446.txt | 2026-10-16T14:50:35Z | 196.22h | STALE | +| forge | forge-2026-10-16-1446.txt | 2026-10-16T14:56:18Z | 196.12h | STALE | +| spark | spark-2026-10-16-1446.txt | 2026-10-16T14:56:18Z | 196.12h | STALE | + +## Findings + +- All seven lanes are STALE (no lane produced a daily ledger within the last 168h): forge, ledger, null, quill, sphinx, sol, spark. +- No lane is STALE, so no lane crossed a hard 7-day outage threshold - but all seven are stalled on the same cadence: the last log for every lane is 2026-10-16T14:56:18Z. + +## Actionable items + +1. Pick the furthest-behind STALE lane (largest age_hours) and prompt its executor to resume the 24h daily ledger cadence. +2. Recheck after the executor act: re-run this generator and confirm each lane swings to WATCH or ACTIVE within 24h. +3. No lane produced a ledger on 2026-10-17, 10-18, or 10-19 as of 2026-10-24T19:03:42Z - treat this as a cadence halt, not a missing lane. + +## Files + +- /root/troupe-standup/wizard-work/sol/Sol-Lane-Triage-2026-10-24.json - machine-readable artifact. +- /root/troupe-standup/wizard-work/sol/Sol-Lane-Triage-2026-10-24.md - this report. + diff --git a/wizard-work/sol/check_sol_lane_triage.py b/wizard-work/sol/check_sol_lane_triage.py new file mode 100644 index 0000000..37b7458 --- /dev/null +++ b/wizard-work/sol/check_sol_lane_triage.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +"""Verify sol-lane daily ledger triage artifact (Sol-Lane-Triage-2026-10-24.json/.md).""" +import json +import os +import sys + +REPO = "/root/troupe-standup/wizard-work/sol" +JSON = os.path.join(REPO, "Sol-Lane-Triage-2026-10-24.json") +MD = os.path.join(REPO, "Sol-Lane-Triage-2026-10-24.md") + +errors = [] + +try: + record = json.load(open(JSON)) +except Exception as exc: + print("FAIL: cannot load JSON: %s" % exc) + sys.exit(1) + +lanes = record.get("lanes", []) +if len(lanes) != 7: + errors.append("expected 7 lanes, got %d" % len(lanes)) +if len(record.get("generated_utc", "")) != 20: + errors.append("generated_utc missing/short: %r" % record.get("generated_utc")) + +for lane in lanes: + if lane.get("status") != "STALE": + errors.append("lane %s status %r != STALE" % (lane.get("id"), lane.get("status"))) + age = lane.get("age_hours") + if not (isinstance(age, (int, float)) and age > 168): + errors.append("lane %s age_hours %r should be >168" % (lane.get("id"), age)) + +counts = {"ACTIVE": 0, "WATCH": 0, "STALE": 0} +for lane in lanes: + counts[lane["status"]] += 1 +if counts != {"ACTIVE": 0, "WATCH": 0, "STALE": 7}: + errors.append("count mismatch: %r" % counts) + +if not os.path.exists(MD): + errors.append("MD missing") +else: + text = open(MD).read() + if not text.startswith("# Sol Lane Daily Ledger Triage"): + errors.append("MD does not start with expected header") + if "forge-2026-10-16-1446.txt" not in text: + errors.append("MD missing latest log reference") + +if errors: + print("FAIL:") + for e in errors: + print(" -", e) + sys.exit(1) + +print("CHECK ok: 7 lanes, all STALE, counts ACTIVE=0/WATCH=0/STALE=7, MD present") diff --git a/wizard-work/sol/sol-lane-triage-gen-2026-10-24.py b/wizard-work/sol/sol-lane-triage-gen-2026-10-24.py new file mode 100644 index 0000000..ab833f5 --- /dev/null +++ b/wizard-work/sol/sol-lane-triage-gen-2026-10-24.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +"""Generate today's sol-lane daily ledger triage. + +Triage of the seven primary workflow lanes' daily ledger logs under +/root/.hermes/wizard-outputs/, classified by measured age of the latest +log: ACTIVE (<=24h), WATCH (<=168h), else STALE (>168h). + +Reads real file mtimes with os.stat (no hand-typed timestamps) and writes +a machine-readable JSON and a human-readable MD. +""" +import json +import os +import sys +from datetime import datetime, timezone + +BASE = "/root/.hermes/wizard-outputs" +LANES = ["forge", "ledger", "null", "quill", "sphinx", "sol", "spark"] +REPO_OUT = "/root/troupe-standup/wizard-work/sol" +PROFILE_OUT = os.path.join(BASE, "sol") + + +def utc_iso(epoch): + return datetime.fromtimestamp(epoch, tz=timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") + + +def classify(epoch, now_epoch): + age_h = (now_epoch - epoch) / 3600.0 + if age_h <= 24.0: + return "ACTIVE", age_h + if age_h <= 168.0: + return "WATCH", age_h + return "STALE", age_h + + +def latest_log(lane): + """Daily ledger logs live at BASE root as '--