sol: cron-fleet triage refresh — frozen-job snapshot + CHECK-verified triage artifact

This commit is contained in:
volt committed 2026-10-20 20:19:50 +00:00
1 parent c0dea95d77
commit 7339d0dbe1
3 files changed
+1675

No files matched your search

File diff suppressed because it is too large. Load diff
@@ -0,0 +1,126 @@
# Hermes cron-fleet triage
generated: 2026-10-20T20:19:18.775585+00:00
jobs.json updated_at: 2026-10-20T20:18:35.589765+00:00
snapshot clock: 2026-10-20T20:19:18.775585+00:00
## Summary
| metric | value |
|---|---|
| total registered jobs | 83 |
| enabled | 37 |
| paused / draft-stalled | 42 |
| enabled & live (upcoming) | 35 |
| enabled & overdue | 2 |
| never-scheduled (no next_run_at) | 4 |
| fire_delivery (deliver=true) | 83 |
| fire_claim | 1 |
| .fire-* lock files on disk | 98 |
## A - Enabled & live (soonest first)
| name | id | next_run | age | deliver | fire_claim |
|---|---|---|---|---|---|
| Human gates submit relay | a7e1354db22d | 2026-10-20T20:19:36.361265+00:00 | +0.00h | True | False |
| Sherry/Kendra team watchdog | c14a6a64739a | 2026-10-20T20:19:36.746606+00:00 | +0.00h | True | False |
| [bot:timmy] Stackchain AI Lab change triage | 45e3f9b6ca89 | 2026-10-20T20:22:36.119407+00:00 | +0.05h | True | False |
| [bot:timmy] Stackchain forge change triage | fee83aa9ed16 | 2026-10-20T20:23:26.430291+00:00 | +0.07h | True | False |
| SMTP unblock watchdog | 5a4cd82bf619 | 2026-10-20T20:23:35.739936+00:00 | +0.07h | True | False |
| Library Log X replies — draft and DM | 2a8e7a70b22c | 2026-10-20T20:30:27.501798+00:00 | +0.19h | True | False |
| Stackchain library — Telegram media intake | e8f8c8b9e0b2 | 2026-10-20T20:34:27.430890+00:00 | +0.25h | True | False |
| Stackchain superfan — community watch and tip validation | 79f2aa4defce | 2026-10-20T20:36:34.075029+00:00 | +0.29h | True | False |
| Bitcoiner Jobs — monitor + auto-apply | f70489ca88ac | 2026-10-20T20:37:22.688516+00:00 | +0.30h | True | False |
| Tweet outbox — deliver pending drafts to the Outbox topic | 2f9142e19934 | 2026-10-20T20:37:35.157992+00:00 | +0.30h | True | False |
| Sentinel long view (every 6h) | 5d69d78ab6a6 | 2026-10-20T20:57:45.844431+00:00 | +0.64h | True | False |
| Merlin Crucible (daily) | 8cf287aaf078 | 2026-10-20T21:14:00.572077+00:00 | +0.91h | True | False |
| OpenCode free route (every 4h) | 3ed82182f8b1 | 2026-10-20T21:47:54.953634+00:00 | +1.48h | True | False |
| Volt workhorse (every 2h) | b6cb8c490e9f | 2026-10-20T21:48:48.455638+00:00 | +1.49h | True | False |
| Beam Foundry (every 2h) | 1ae8f67df4c8 | 2026-10-20T21:54:33.928462+00:00 | +1.59h | True | False |
| Wizard fleet (8 free models) | d384219bac3a | 2026-10-20T22:10:30.942195+00:00 | +1.85h | True | True |
| Dream cycle 03 (midnight) | 0ee6e2270719 | 2026-10-21T04:00:00+00:00 | +7.68h | True | False |
| Dream cycle 01 (9pm) | 739731f108fc | 2026-10-21T04:15:00+00:00 | +7.93h | True | False |
| Dream cycle 02 (10:30pm) | 6a5db2fe8231 | 2026-10-21T04:45:00+00:00 | +8.43h | True | False |
| Dream cycle 04 (1:30am) | 01442c7c6acc | 2026-10-21T05:30:00+00:00 | +9.18h | True | False |
| Morning home brief (weather + plans) | e280df14418f | 2026-10-21T08:00:00+00:00 | +11.68h | True | False |
| Email digest (pre-6am) | 6cf100cea5f5 | 2026-10-21T09:00:00+00:00 | +12.68h | True | False |
| Dream cycle 05 (3am) | 1d1cfcd3542b | 2026-10-21T10:15:00+00:00 | +13.93h | True | False |
| Repertoire — 06:30 Stackchain Archive Delta | 0d32f9397eb1 | 2026-10-21T10:30:00+00:00 | +14.18h | True | False |
| Rebuild dream gallery (after last dream) | 0d30d580360a | 2026-10-21T10:30:00+00:00 | +14.18h | True | False |
| Timmy nightly bounded builder | 1b611dda47cc | 2026-10-21T10:45:00+00:00 | +14.43h | True | False |
| Timmy morning review release | e3babf87dee8 | 2026-10-21T12:00:00+00:00 | +15.68h | True | False |
| Mercury standup (Groq) | c6dd61160f93 | 2026-10-21T12:00:00+00:00 | +15.68h | True | False |
| DeepSeek balance watch — daily snapshot + low-balance alert | 1a4eac1ee1fd | 2026-10-21T13:00:00+00:00 | +16.68h | True | False |
| Stackchain Library Log — daily review package | a62175cd4452 | 2026-10-21T15:00:00+00:00 | +18.68h | True | False |
| Troupe wizard ping relay | f37e0bbd567b | 2026-10-21T15:00:00+00:00 | +18.68h | True | False |
| Zeph daily interview | 0035e931693a | 2026-10-21T18:00:00+00:00 | +21.68h | True | False |
| Harness reflection (weekly) | 384cd990a48e | 2026-10-25T06:00:00+00:00 | +105.68h | True | False |
| Alexander left-eye weekly check-in | 649cdf1ba4a4 | 2026-10-25T09:00:00+00:00 | +108.68h | True | False |
| Weekly skill audit | fedd79bad2dc | 2026-10-26T09:00:00+00:00 | +132.68h | True | False |
## B - Draft-stalled (paused/disabled; timers stale)
| name | id | paused | last_run | last_status | last_error |
|---|---|---|---|---|---|
| Open NightProwl Daily Drop preflight | 010dc42e0990 | True | 2026-08-17T10:21:27Z | ok | |
| Vincent Daily Drop Preflight Queue | 4098c6fd0298 | True | 2026-08-17T10:30:33Z | ok | |
| Sovereign Signal — Independent Film Retrospective | a9226ea81409 | True | - | None | |
| Sovereign Signal — External Visual Album State Machine | 376fb55ea81d | True | 2026-08-25T21:43:16Z | ok | |
| Daily Drop Human Gate Receipt — 7 AM Eastern | 7679c6cfd7cc | True | 2026-08-25T23:30:25Z | ok | |
| Sovereign Signal — Private Human Gate | c90e6f034448 | True | 2026-08-25T23:35:25Z | ok | |
| NightProwl LongCat Gitea dispatcher | be22831260fb | True | 2026-08-28T03:45:59Z | ok | |
| Sovereign Signal — CPU Render State Machine | aa5e13261842 | True | 2026-08-28T04:29:43Z | ok | |
| Stackchain Lab Loop — Timmy | d25576d90c98 | True | 2026-08-28T04:14:17Z | ok | |
| Sovereign Signal — 24h Discography Auto-Approval | d7538b5bb73f | True | 2026-08-28T04:29:43Z | ok | |
| X mentions — prepared Telegram replies | f9db4323dad4 | True | 2026-08-28T04:29:48Z | ok | |
| Daily Drop Night Brief — 10 PM Eastern | 185f6b33f467 | True | 2026-08-28T04:30:43Z | ok | |
| NightProwl Workshop Polish Churn | cb1c14f8ca68 | True | 2026-08-28T04:14:20Z | ok | |
| Daily Drop Team Intake Freeze — 4 AM Eastern | 1fcc628efa6f | True | 2026-08-28T04:30:43Z | ok | |
| Daily Drop Dual Delivery — 7 AM Eastern | b28316cf7def | True | 2026-08-28T04:30:43Z | ok | |
| Hourly Ops Pulse | e61f5ce71d8b | True | 2026-08-28T03:15:55Z | error | RuntimeError: HTTP 429: Hold up for a bit, you've exceeded the rate limit on you |
| Sovereign Signal — Daily Music Director | 20324f12208d | True | 2026-08-27T05:37:36Z | ok | |
| Whitestone homestead model cycle | 1de4e6507666 | True | 2026-08-27T23:04:07Z | ok | |
| Vincent + Grepples Second Crew Loop | 2f0fbfc5e594 | True | 2026-08-28T04:34:25Z | ok | |
| Stackchain Spaces — Skinner mention catalog | 7b586d62af70 | True | 2026-08-27T23:05:36Z | ok | |
| Evaluate every new Pi harness release | cd8a31f5ff9f | True | 2026-08-28T02:19:51Z | error | RuntimeError: HTTP 429: Hold up for a bit, you've exceeded the rate limit on you |
| Stackchain Lab Daily Drop — Draft and First QC | d60d505c172f | True | 2026-08-27T08:52:59Z | ok | |
| Vincent Daily Drop Candidate Queue | 192bb0c1f4f9 | True | 2026-08-27T08:35:26Z | ok | |
| Stackchain Lab Daily Drop — Candidate Correction Pass | e267b564eb2d | True | 2026-08-27T09:11:34Z | error | TimeoutError: Timed out waiting for the TERMINAL_CWD read lock after 660s — anot |
| Stackchain Lab Daily Drop | 277ef8ecd947 | True | 2026-08-27T10:08:21Z | ok | |
| Vincent Daily Drop Postflight Queue | a78064e1af61 | True | 2026-08-27T12:15:49Z | ok | |
| Alexander Career Deep Work — Daily | dd9fa86bea9e | True | 2026-08-27T15:07:35Z | ok | |
| Sovereign Signal — Twice-Daily Executive Update | 2f5f9cf39999 | True | 2026-08-27T22:09:02Z | ok | |
| self-improvement | 563745413001 | True | 2026-08-28T03:00:37Z | ok | |
| Sovereign Signal — Open Music Engine Scout | 46e9fe536787 | True | 2026-08-27T05:27:30Z | ok | |
| Alexander Career Integration — Weekly | 74abe2633878 | True | 2026-08-23T16:22:46Z | ok | |
| Forge Human Value Brief — Top Repositories | a348cb59a0c1 | True | 2026-08-24T17:11:59Z | error | TimeoutError: Timed out waiting for the TERMINAL_CWD read lock after 660s — anot |
| Repertoire — 14:00 Sovereign Media Studio | cfb73a4cf7ad | True | 2026-09-16T18:01:15Z | error | RuntimeError: HTTP 429: The usage limit has been reached |
| Repertoire — 19:30 Visual Product Studio | ccd3a4141f52 | True | 2026-09-16T23:30:56Z | error | RuntimeError: HTTP 429: The usage limit has been reached |
| Career Funnel — Batch 2 of 4 — AI and DevTools | 50f1032de42e | True | 2026-09-25T15:49:06Z | ok | |
| Career Funnel — Batch 3 of 4 — Platform and Reliability | 28e591a992c6 | True | 2026-09-25T19:22:29Z | ok | |
| Career Funnel — Batch 4 of 4 — Remote Software Expansion | a476223d9a79 | True | 2026-09-25T22:38:40Z | ok | |
| Career Funnel — Batch 1 of 4 — Python Backend | 816981dfb712 | True | 2026-09-26T12:18:34Z | ok | |
| [bot:timmy] Hermes failure change investigator | 72c7753aa0c4 | True | 2026-09-28T03:17:46Z | ok | |
| Repertoire — 11:00 Proof Product Sprint | 2b6b5e4373d0 | True | 2026-09-27T15:20:01Z | ok | |
| Repertoire — 17:00 Browser + Local Life Report | 7cc7b66428ae | True | 2026-09-27T21:06:24Z | ok | |
| Repertoire — 21:00 Skill Refinery + Command Brief | 65c0fc699c5e | True | 2026-09-28T01:06:54Z | ok | |
## C - Never-scheduled (no next_run_at)
| name | id | origin |
|---|---|---|
| NightProwl LongCat daily evaluation brief | 1e5a6657aaef | None |
| Open NightProwl Daily Drop candidate QA | ed23f1514bc2 | None |
| Open NightProwl Daily Drop candidate recheck | 9ee1d9279adc | None |
| Open NightProwl Daily Drop postflight audit | 6fd12e052fc7 | None |
## Fire-control lock cross-check
Registry job ids: 83. `.fire-*` lock files on disk: 98 (opaque UUID markers;
no embedded job id). Lock backlog = 15 ahead of registered jobs (locks are
appended on each scheduling run; not pruned per registration).
## Verdict
Priority: release the soonest live set (35 enabled & live), then settle or drop the draft (42 paused) and never-scheduled (4) backlogs.
@@ -0,0 +1,132 @@
#!/usr/bin/env python3
"""CHECK: re-derive the Sol cron-fleet triage from the FROZEN job snapshot and
compare against the classification markdown.
Source of truth: `cron-fleet-triage-2026-10-20-refresh.json` — a frozen copy of
the cron job state captured at generation time (`cron_gen.py`). The live cron
config is rewritten by the fleet scheduler, so classification drift would make a
live re-read meaningless. This verifier recomputes from the frozen snapshot at
the artifact's own clock; the expected values are DERIVED from the snapshot, not
hard-coded.
Exit code 0 = artifact consistent with its frozen source. Nonzero = wrong/missing.
Single bare command:
python3 wizard-work/sol/cron-fleet-triage-refresh-verify.py
"""
import json
import os
import re
import sys
import datetime
OUT_MD = '/root/.hermes/wizard-outputs/sol/cron-fleet-triage-2026-10-20-refresh.md'
OUT_JSON = '/root/.hermes/wizard-outputs/sol/cron-fleet-triage-2026-10-20-refresh.json'
def parse_iso(s):
try:
return datetime.datetime.fromisoformat(s.strip())
except Exception:
return None
def main():
for p in (OUT_MD, OUT_JSON):
if not os.path.exists(p):
print('FAIL: missing %s' % p)
sys.exit(1)
snap = json.load(open(OUT_JSON))
s = open(OUT_MD, encoding='utf-8').read()
t0 = parse_iso(
[l for l in s.splitlines() if l.startswith('generated:')][0]
.split('generated: ', 1)[1].strip()
)
if t0 is None:
print('FAIL: could not parse generated timestamp')
sys.exit(1)
rows = []
for j in snap['jobs']:
rows.append({
'id': j['id'], 'name': j['name'], 'enabled': j['enabled'],
'paused': j['paused'], 'next': parse_iso(j.get('next_run_at')),
'last': parse_iso(j.get('last_run_at')),
'last_status': j.get('last_status'),
'last_error': j.get('last_error') or '', 'schedule': j.get('schedule'),
'deliver': j.get('deliver'), 'fire_claim': j.get('fire_claim'),
})
total = len(rows)
enabled = sum(1 for r in rows if r['enabled'])
paused = sum(1 for r in rows if r['paused'])
live = [r for r in rows if r['enabled'] and r['next'] and r['next'] > t0]
overdue = [r for r in rows if r['enabled'] and r['next'] and r['next'] <= t0]
never = [r for r in rows if not r['next']]
never = [r for r in never if not r['paused']]
fails = []
def check(label, actual, expected):
if actual != expected:
fails.append('%s: got %r expected %r' % (label, actual, expected))
# Internal partition of the fleet (from the frozen snapshot).
live_ids = sorted(r['id'] for r in live)
overdue_ids = sorted(r['id'] for r in overdue)
stale_ids = sorted(r['id'] for r in rows if r['paused'])
never_ids = sorted(r['id'] for r in never)
all_ids = sorted(r['id'] for r in rows)
check('partition.total', total, len(all_ids))
check('partition.enabled', enabled, len(live_ids) + len(overdue_ids))
check('partition.no-duplicates', len(all_ids), len(set(all_ids)))
check('partition.sum', len(live_ids) + len(overdue_ids) +
len(stale_ids) + len(never_ids), total)
for sec in ['## A - Enabled & live', '## B - Draft-stalled',
'## C - Never-scheduled', '## Fire-control lock cross-check',
'## Verdict']:
if sec not in s:
fails.append('section missing: ' + sec)
m = re.search(
r'Priority: release the soonest live set \((\d+) enabled & live\), then '
r'settle or drop the draft \((\d+) paused\) and never-scheduled '
r'\((\d+)\) backlogs', s)
if not m:
fails.append('verdict line not found')
else:
check('verdict.live', int(m.group(1)), len(live_ids))
check('verdict.stale', int(m.group(2)), len(stale_ids))
check('verdict.never', int(m.group(3)), len(never_ids))
a_block = s.split('## A - Enabled & live')[1].split('## B - Draft-stalled')[0]
listed_a = sorted(re.findall(r'\|\s*([0-9a-f]{12,})\s*\|', a_block))
check('A.id.count', len(listed_a), len(live_ids))
check('A.ids', listed_a, live_ids)
b_block = s.split('## B - Draft-stalled')[1].split('## C - Never-scheduled')[0]
listed_b = sorted(re.findall(r'\|\s*([0-9a-f]{12,})\s*\|', b_block))
check('B.id.count', len(listed_b), len(stale_ids))
check('B.ids', listed_b, stale_ids)
c_block = s.split('## C - Never-scheduled')[1].split('## Fire-control lock cross-check')[0]
listed_c = sorted(re.findall(r'\|\s*([0-9a-f]{12,})\s*\|', c_block))
check('C.id.count', len(listed_c), len(never_ids))
check('C.ids', listed_c, never_ids)
if fails:
print('FAIL: cron-fleet triage refresh artifact')
for f in fails:
print(' - ' + f)
sys.exit(1)
print('PASS: snapshot verified at generated=%s' % t0)
print(' total=%d enabled=%d paused=%d live=%d overdue=%d never=%d' % (
total, enabled, paused, len(live_ids), len(overdue_ids), len(never_ids)))
print(' A=%d B=%d C=%d' % (len(live_ids), len(stale_ids), len(never_ids)))
print(' source jobs frozen in %s' % os.path.basename(OUT_JSON))
if __name__ == '__main__':
main()