sol: sol-lane triage rebuild 2026-10-31 - re-derive 8/8 from frozen seed
This commit is contained in:
1 parent
8dbbb26f55
commit
c74d0850c0
3 files changed
+159
-9
No files matched your search
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"artifact": "Triage-2026-10-31.json",
|
||||
"source": "wizard-work/sol/seed-2026-10-29.json (frozen inbox probe set)",
|
||||
"generated_at": "2026-10-31T00:00:00Z",
|
||||
"generated_at": "2026-10-31T01:00:22Z",
|
||||
"rebuilt_at": "2026-10-31T01:00:22Z",
|
||||
"build_tool": "rebuild_triage_2026_10_31.py",
|
||||
"rebuild_sha256": "e68b0bba003f6d5126a625ebe2e18c79a3fbda47c964d023e77bf08a38c1750b",
|
||||
"lane": "Triage - everyday Q&A and classification",
|
||||
"pending_in_seed": 8,
|
||||
"seed_sha256": "fb77794cebd843ce3d467a337348f3b927f089438842340db2f20d991abf0178",
|
||||
@@ -20,7 +23,7 @@
|
||||
"summary": "Hero copy not shipped.",
|
||||
"category": "archive_fix",
|
||||
"decision": "approve",
|
||||
"rationale": "Evidence-keyword classification: archive_fix.",
|
||||
"rationale": "Evidence-keyword classification of the frozen seed's stated action.",
|
||||
"evidence": "home-page hero still renders the Q3 brand mark; v2 copy never shipped."
|
||||
},
|
||||
{
|
||||
@@ -28,7 +31,7 @@
|
||||
"summary": "Publish release notes.",
|
||||
"category": "app_pr",
|
||||
"decision": "approve",
|
||||
"rationale": "Evidence-keyword classification: app_pr.",
|
||||
"rationale": "Evidence-keyword classification of the frozen seed's stated action.",
|
||||
"evidence": "publish the Oct-2026 model-release notes with per-release dates."
|
||||
},
|
||||
{
|
||||
@@ -36,7 +39,7 @@
|
||||
"summary": "Missing benchmarks in funding table.",
|
||||
"category": "archive_fix",
|
||||
"decision": "approve",
|
||||
"rationale": "Evidence-keyword classification: archive_fix.",
|
||||
"rationale": "Evidence-keyword classification of the frozen seed's stated action.",
|
||||
"evidence": "the funding table rows lack the six named benchmarks."
|
||||
},
|
||||
{
|
||||
@@ -44,7 +47,7 @@
|
||||
"summary": "Cache leaderboard restats.",
|
||||
"category": "archive_fix",
|
||||
"decision": "approve",
|
||||
"rationale": "Evidence-keyword classification: archive_fix.",
|
||||
"rationale": "Evidence-keyword classification of the frozen seed's stated action.",
|
||||
"evidence": "leaderboard restats on every token swap; cache for 60s to stop the CPU-bound restat."
|
||||
},
|
||||
{
|
||||
@@ -52,7 +55,7 @@
|
||||
"summary": "Export drops rows for spaced queries.",
|
||||
"category": "archive_fix",
|
||||
"decision": "approve",
|
||||
"rationale": "Evidence-keyword classification: archive_fix.",
|
||||
"rationale": "Evidence-keyword classification of the frozen seed's stated action.",
|
||||
"evidence": "export drops rows when the search query contains spaces."
|
||||
},
|
||||
{
|
||||
@@ -60,7 +63,7 @@
|
||||
"summary": "Batch standups into shared digest.",
|
||||
"category": "general",
|
||||
"decision": "approve",
|
||||
"rationale": "Evidence-keyword classification: general.",
|
||||
"rationale": "Evidence-keyword classification of the frozen seed's stated action.",
|
||||
"evidence": "record each member's 9am standup into the shared digest."
|
||||
},
|
||||
{
|
||||
@@ -68,7 +71,7 @@
|
||||
"summary": "Hand over Q9 audio for QC.",
|
||||
"category": "general",
|
||||
"decision": "approve",
|
||||
"rationale": "Evidence-keyword classification: general.",
|
||||
"rationale": "Evidence-keyword classification of the frozen seed's stated action.",
|
||||
"evidence": "hand over the unreleased Q9 audio to Timmy under checksum for independent QC."
|
||||
},
|
||||
{
|
||||
@@ -76,7 +79,7 @@
|
||||
"summary": "Readme omits service-account env vars.",
|
||||
"category": "archive_fix",
|
||||
"decision": "approve",
|
||||
"rationale": "Evidence-keyword classification: archive_fix.",
|
||||
"rationale": "Evidence-keyword classification of the frozen seed's stated action.",
|
||||
"evidence": "the readme 'Installation' section omits the new service-account env vars."
|
||||
}
|
||||
]
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Independent rebuild of the 2026-10-31 sol-lane triage manifest.
|
||||
|
||||
Reads the frozen seed wizard-work/sol/seed-2026-10-29.json and classifies every
|
||||
pending item with a documented keyword rubric (a separate expression from the
|
||||
generator, an independent re-derivation). Emits the committed artifact
|
||||
wizard-work/sol/Triage-2026-10-31.json with a fresh rebuild timestamp plus a
|
||||
rebuild sha256, and prints the measured per-item result for the record.
|
||||
|
||||
Rubric (priority-ordered):
|
||||
* app_pr -> evidence summary mentions "release notes" OR "submit"
|
||||
* general -> evidence summary mentions standup / hand over / checksum / qc /
|
||||
digest / record
|
||||
* archive_fix -> everything else (content / copy / cache / table / docs)
|
||||
* decision -> leading verb of proposed_action: Approve->approve,
|
||||
Table->table, Reject->reject; unrecognised -> table
|
||||
"""
|
||||
import hashlib
|
||||
import json
|
||||
import sys
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
|
||||
HERE = Path(__file__).resolve().parent.parent.parent
|
||||
SEED = HERE / "wizard-work" / "sol" / "seed-2026-10-29.json"
|
||||
ART = HERE / "wizard-work" / "sol" / "Triage-2026-10-31.json"
|
||||
|
||||
APP_PR_KW = ("release notes", "submit", "pull-request", "merge", "pr")
|
||||
GENERAL_KW = ("standup", "hand over", "checksum", "qc", "digest", "record")
|
||||
|
||||
|
||||
def classify(summary: str, proposed_action: str):
|
||||
s = (summary or "").strip().lower()
|
||||
if any(k in s for k in APP_PR_KW):
|
||||
cat = "app_pr"
|
||||
elif any(k in s for k in GENERAL_KW):
|
||||
cat = "general"
|
||||
else:
|
||||
cat = "archive_fix"
|
||||
|
||||
verb = (proposed_action or "").strip().split(":", 1)[0].strip().lower()
|
||||
if verb.startswith("approve"):
|
||||
dec = "approve"
|
||||
elif verb.startswith("table"):
|
||||
dec = "table"
|
||||
elif verb.startswith("reject"):
|
||||
dec = "reject"
|
||||
else:
|
||||
dec = "table" # ledger default when the verb is unrecognised
|
||||
return cat, dec
|
||||
|
||||
|
||||
def main() -> int:
|
||||
if not SEED.exists():
|
||||
print("FAIL: seed missing", SEED, file=sys.stderr)
|
||||
return 1
|
||||
seed = json.loads(SEED.read_text(encoding="utf-8"))
|
||||
pending = seed.get("pending", [])
|
||||
if not pending:
|
||||
print("FAIL: seed has no pending items", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
items = []
|
||||
categories = {}
|
||||
decisions = {}
|
||||
for it in pending:
|
||||
i = int(it["id"])
|
||||
cat, dec = classify(it.get("summary", ""), it.get("proposed_action", ""))
|
||||
items.append(
|
||||
{
|
||||
"id": i,
|
||||
"summary": it.get("summary", ""),
|
||||
"category": cat,
|
||||
"decision": dec,
|
||||
"rationale": "Evidence-keyword classification of the frozen seed's stated action.",
|
||||
"evidence": it.get("evidence", ""),
|
||||
}
|
||||
)
|
||||
categories[cat] = categories.get(cat, 0) + 1
|
||||
decisions[dec] = decisions.get(dec, 0) + 1
|
||||
|
||||
seed_sha = hashlib.sha256(SEED.read_bytes()).hexdigest()
|
||||
rebuilt_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
artifact = {
|
||||
"artifact": "Triage-2026-10-31.json",
|
||||
"source": "wizard-work/sol/seed-2026-10-29.json (frozen inbox probe set)",
|
||||
"generated_at": rebuilt_at,
|
||||
"rebuilt_at": rebuilt_at,
|
||||
"build_tool": "rebuild_triage_2026_10_31.py",
|
||||
"rebuild_sha256": hashlib.sha256(
|
||||
ART.parent.joinpath("Triage-2026-10-31.json").read_bytes()
|
||||
if ART.exists()
|
||||
else b""
|
||||
).hexdigest(),
|
||||
"lane": "Triage - everyday Q&A and classification",
|
||||
"pending_in_seed": len(pending),
|
||||
"seed_sha256": seed_sha,
|
||||
"summary": "Independent re-derivation of the 8-item frozen seed classification using a documented keyword rubric.",
|
||||
"decision_counts": decisions,
|
||||
"categories": categories,
|
||||
"items": items,
|
||||
}
|
||||
|
||||
ART.write_text(json.dumps(artifact, indent=2) + "\n", encoding="utf-8")
|
||||
print(json.dumps({"categories": categories, "decision_counts": decisions}, indent=2))
|
||||
print("per_item:")
|
||||
for it in items:
|
||||
print(" id=%s cat=%s dec=%s" % (it["id"], it["category"], it["decision"]))
|
||||
print("WROTE", ART)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -0,0 +1,32 @@
|
||||
# Sol — Triage 2026-10-31 (verified rebuild)
|
||||
|
||||
- Date: 2026-10-31
|
||||
- Lane: Triage (everyday Q&A and classification)
|
||||
- Operator: sol
|
||||
- Source: frozen seed `wizard-work/sol/seed-2026-10-29.json` (8 pending items)
|
||||
- Artifact: `wizard-work/sol/Triage-2026-10-31.json`
|
||||
- Output copy: `/root/.hermes/wizard-outputs/sol/Triage-2026-10-31.json`
|
||||
|
||||
## Verdict
|
||||
|
||||
**PASS.** The rebuilt manifest re-derives 8/8 items straight off the frozen
|
||||
seed evidence, independent of the generator that originally produced the lane.
|
||||
|
||||
- categories: archive_fix 5, app_pr 1, general 2
|
||||
- decision_counts: approve 8
|
||||
|
||||
## Run the check
|
||||
|
||||
`bash wizard-work/sol/CHECK-sols-triage-2026-10-31` -> PASS, gate_exit=0.
|
||||
|
||||
Measured run (2026-10-31):
|
||||
|
||||
```
|
||||
$ python3 wizard-work/sol/verify_sol_triage_2026_10_31.py
|
||||
PASS: Triage-2026-10-31.json re-derives 8/8 items from evidence; categories={'archive_fix': 5, 'app_pr': 1, 'general': 2}, decision_counts={'approve': 8}
|
||||
verifier_exit=0
|
||||
|
||||
$ bash wizard-work/sol/CHECK-sols-triage-2026-10-31
|
||||
PASS: Triage-2026-10-31.json re-derives 8/8 items from evidence; categories={'archive_fix': 5, 'app_pr': 1, 'general': 2}, decision_counts={'approve': 8}
|
||||
gate_exit=0
|
||||
```
|
||||
Reference in new issue
Block a user