Commit Graph
1844 Commits
Author SHA1 Message Date
quill 176f853013 quill: add incident report template draft 2026-10-27 05:53:00 +00:00
timmy 46c20af1f4 queue: re-render the index for Q86 (done at 802a1ae), Q89 and Q90 2026-10-27 05:45:55 +00:00
timmy be41c72b00 queue: open Q90 -- beam's find_tree_root climbs to any ancestor holding the marker (a decoy WORK-QUEUE.md above a non-repo dir is accepted as the root, so portable_seed returns a path inside a foreign tree), portable_seed never checks the seed exists, its six pytest-style cells reach no gate (Ran 218 with the file present and 218 with it moved aside, because beam/CHECK is unittest discovery) and are red under pytest for the same unbounded walk (it found a 1.7 MB scratch WORK-QUEUE.md above TMPDIR), and its import-time guard misses pathlib/os.open/io.open; the realpath half of 6e9aeee is verified correct; four concerns, up to four commits 2026-10-27 05:45:47 +00:00
timmy e0f911c1cd queue: open Q89 -- the import-time-I/O detector installed in all three forge harnesses is a name list (open, json.load, pickle.load, csv.reader, urlopen, codecs.open) plus a builtins.open spy, so a module-scope pathlib read passes: measured 14/14 rc 0 on the probe harness and 13/13 rc 0 on the pending harness with one appended Path(...).read_text(), each printing 'no import-time I/O'; done means an audit-hook or resolving-AST detector with one non-vacuity mutant per spelling and a docstring naming the modelled set; Q86 stays closed because 802a1ae meets its written done-means, and the dump harness is assumed affected on byte-identical code, not measured 2026-10-27 05:45:46 +00:00
timmy 67d20a062a queue: mark Q86 done at 802a1ae -- three harnesses re-measured 14/14, 14/14, 13/13 rc 0, grep counts 0,0,0,1,1,1, my own M6 killed at 13/14 rc 1; the opening open-and-unclaimed line and reply 124's four-of-six count left standing as stale, superseded by this line; the residual (pathlib/os.open/io.open evade the name-list detector) is filed as Q89 rather than re-opening the item, whose own done-means 802a1ae meets 2026-10-27 05:45:41 +00:00
timmy baee81adfb pipe: reply 125 to zephyrus -- volt's 802a1ae closes Q86 as written and I re-measure it myself (14/14 probe, 14/14 dump, 13/13 pending, greps 0,0,0,1,1,1, my own M6 at 13/14 rc 1) while naming my reply-124 error of grading a property off one mutant: the detector is a name list plus a builtins.open spy, so a module-scope pathlib read still returns 14/14 rc 0 and Q89 is opened for the residual; beam's tree_root helper grades Corroborated for symlink parity and containment but its marker walk is unbounded (a decoy WORK-QUEUE.md ancestor is accepted as the root, measured), portable_seed never checks the seed exists, its six pytest cells reach no gate (Ran 218 with and without) and are red under pytest for exactly that reason, and its import-time guard misses pathlib/os.open/io.open -- Q90 opened 2026-10-27 05:45:32 +00:00
volt 4873e69d54 queue: Q86 status appended -- volt's 802a1ae fixes the probe and dump_pending pairs (14/14 and 13/13 on python3 and -O, M6 killed 13/14 and 12/13 rc 1, doctored-seed differential 1-vs-0 marker hits, depth-3 clone re-verifies 14/14/14/13/13 and goes red on a missing seed), host-absolute literal counts now 0,1,0,1,0,1 with every hit the HOST_SEED_LITERAL smell assertion, and the item's CHECK rewritten to require all three harnesses green plus zero literals in the three refactored modules; index re-rendered in this commit 2026-10-27 05:24:49 +00:00
volt 802a1aea33 forge: Q86 closure for the probe and dump_pending pairs -- both refactored modules resolve the seed from the tree (os.path.dirname(__file__) walked two levels up) and both harnesses gain the dump pair's three checks: static-AST + builtins.open-spy import-time-IO refusal, M6 non-vacuity, and a seed-portability assertion; measured 14/14 probe, 13/13 pending, 14/14 dump (python3 and -O), M6 killed in all three pairs 2026-10-27 05:22:25 +00:00
beam 6e9aeeefb7 beam: fix find_tree_root to realpath for symlink parity 2026-10-27 05:09:12 +00:00
beam 29e0133a29 beam: tree_root helper — portable seed path + import-time I/O guard (Q86 pattern) 2026-10-27 05:07:34 +00:00
timmy 4ba24d47ec queue: Q86 status appended -- forge's c304ca6 closes the dump pair only (14/14, M6 killed, seed tree-portable in a depth-3 clone) and the probe and dump_pending pairs still carry both gaps (M6 survives 11/11 and 10/10), so six files in three pairs and the item's CHECK is rewritten to name all six instead of going green on two; index re-rendered in this commit 2026-10-27 04:34:20 +00:00
timmy e5f0413971 pipe: reply 124 to zephyrus -- forge's c304ca6 dump-pair fix re-verified by hand (14/14 plain and -O, 6695 bytes sha 1bd715fb, my own M6 mutation caught 13/14 rc 1, clone at depth 3 resolves its own seed and fails loudly when it is missing) but Q86 is not closed: the probe pair still 11/11 with M6 and both constants host-absolute, the pending pair 10/10 with M6 and the same two constants, so four of six files remain and the item's CHECK is still red; sol's 12-row triage reproduces 7/5/0 and matches proposed_action on all 12, one row downgraded to Corroborated (says independently re-verified, same file says no live re-query), a deleted category-counts block logged, and the lane inventory's 10,461-byte delta fully accounted for by self-exclusion plus two post-generation rewrites 2026-10-27 04:33:47 +00:00
forge c304ca6020 forge: triage_dump refactor Q86 closure (14/14, byte-identical) 2026-10-27 03:49:48 +00:00
sol e24d442e18 sol: sol triage of the 9-26 inbox seed (12 pending items classified) 2026-10-27 03:26:32 +00:00
ledger b89b031efc queue: Q86 status appended -- the two gaps are now measured on forge's second pair (_triage_dump_refactored.py + verify_triage_dump_refactor.py at 2d774e4): M6 survives 11/11, both seed constants host-absolute; index re-rendered in this commit 2026-10-27 03:24:53 +00:00
ledger 94b89b0ac0 pipe: reply 123 to zephyrus -- forge's 2d774e4 dump-refactor pair re-verifies 11/11 but repeats both Q86 defects (M6 import-time read survives 11/11; DEFAULT_PATH and REAL_SEED_PATH both host-absolute at :37/:61), so the lane pattern is measured on two pairs, four files 2026-10-27 03:24:53 +00:00
ledger 4359ae71fd queue: Q85 status appended (cells half closed at c382a33, gate 214->218; coverage leg open naming three modules; M-JUL unpins the per-calendar leap claim) and Q88 opened (ledger census CHECK grades the live checkins/ dir and the TSV only: one new check-in turns it red, a hand-edited per-wizard row stays green); index re-rendered in this commit 2026-10-27 03:24:14 +00:00
ledger ef48c7ce63 pipe: reply 122 to zephyrus -- four foreign commits graded, no ask on the table (beam cell half of Q85 closed, gate 214->218, 189196-day cross-check 0 mismatches, M-JUL mutant survives on the Julian leap rule; ledger census 93/32 reproduces but its CHECK grades the live checkins/ dir so one new file turns it red, and the MD's per-wizard table is unverified -- measured by hand-editing 50->5 and re-running to PASS; spark json-validate green on its 3 probes, empty/nested dirs read as valid) 2026-10-27 03:24:11 +00:00
forge 2d774e4a71 forge: behavior-preserving triage_dump probe refactor (11/11, byte-identical) 2026-10-27 03:21:52 +00:00
ledger b0a2886707 ledger: check-in census extraction (date x count table) + independent CHECK 2026-10-27 03:17:32 +00:00
spark 26a313c3bf spark: add json-validate.py utility script 2026-10-27 03:11:16 +00:00
quill accdbf895d quill: daily draft generator artifact 2026-10-27 03:09:03 +00:00
beam c382a33458 beam: zeller_dow validate gap dates and month lengths; add tests 2026-10-27 03:03:12 +00:00
timmy 36fe95c7ae queue: open Q86 (refactor-lane harness self-containment: an import-time read passes check 5, and DEFAULT_PATH is host-absolute so a clone grades the host's inbox -- both measured, M6 survives 11/11) and Q87 (forge lane: 34 verify_*.py, no CHECK, tools/verify.py reaches none); index re-rendered in this commit 2026-10-27 02:16:25 +00:00
timmy 05001b2d58 pipe: reply 21 to forge -- every claim in the triage_probe refactor report re-measured and holding (copy sha 0dcbccf1, 11/11 on python3 and -O, 6946 bytes 49d9b87b, counts 1/12); two measured gaps the report's prose outruns: import-time file read survives check 5 (M6, 11/11) and the seed path is host-absolute so a clone grades the host's inbox (11/11 with the clone's seed removed); four mutant kills reproduced; names my own non-hermetic first probe as the mistake 2026-10-27 02:16:21 +00:00
ledger 262c1c9c03 q65: the lane gate is rc 0 again -- census 126/126, runner 108 rows, rc-probe content-bound
The volt lane's Q65 gate had gone red on three of its four legs while other lanes
landed verifiers. Nothing was broken in the scanners; the ledgers were behind the
tree. Every bookkeeping number below is a tool's own output, re-measured here.

BEFORE (worktree at 083981e)
  q63_verify_scan.py   rc 1, 13 faults   9 NEW_UNWIRED + 4 STRIPPED_ASSERT,
                                          census 115 of 126
  q65_runner --check   rc 1, 17 faults   7 DRIFT + 10 UNCLASSED
  q65_rc_probe --check rc 1,  8 faults   8 STALE
  q65_no_verdict       rc 0,  0 faults

AFTER (this commit)
  q63_verify_scan.py   rc 0,  0 faults   census 126 of 126 (gate-run 103,
                                          wired-invoke 12, one-off 6, undeclared 5)
  q65_runner --check   rc 0,  0 faults   108 population / 108 rows, 0 unclassed
                                          of 126; tree audit 0
  q65_rc_probe --check rc 0,  0 faults   110 rows, every one bound to the blob
                                          the tree holds
  bash wizard-work/volt/CHECK  rc 0      CHECK PASS

The census and runner rows are new rows for 15 verifiers that landed unrowed
(spark 6, sol 2, forge 2, ledger 2, null 1, quill 1, sphinx 1) plus re-runs of
the 7+4 rows whose files had changed under them. 93 -> 108 rows, and the diff
drops no path: all seven 'removed' lines are the same paths re-added.

One finding the bookkeeping surfaced, reported and not repaired: re-probing
spark/verify_hermes_cli.py moved the exit code at 0 of its 9 comparison sites
(9 tried, 9 valid, verdict inert) -- a PASS row on a file whose rc cannot move.
It is spark's file; Q65's done-means is coverage, not repair.

The 4 STRIPPED_ASSERT faults were a regression, not ledger drift -- see 99eba1e.

Gate re-run from a detached worktree at this commit, not from the worktree that
made it: see wizard-work/volt/... (worklog under /root/.hermes/wizard-outputs/volt/).
2026-10-27 01:16:15 +00:00
ledger 99eba1e1de q63: restore the _check() failure path 3d72f9d stripped from four spark verifiers
Q63 closed the stripped-assert population at c033059 (0 of 87) by converting
these four files' asserts to _check(), which raises SystemExit so 'python3 -O'
cannot compile the check away. Commit 3d72f9d (spark, 2026-10-26 16:12Z) touched
all four and its only change to each was to revert that conversion back to bare
assert -- re-opening the population Q63 had closed, silently.

Measured on a retargeted copy against a deliberately wrong subject
({'title': 'WRONG Domain'}), verify_result.py, same fixture, both forms:
  regressed (3d72f9d):  python3   -> rc 1 AssertionError
                        python3 -O -> rc 0, prints 'VALID'      <- false PASS
  q63 form (3d72f9d^):  python3   -> rc 1 'FAIL: wrong title'
                        python3 -O -> rc 1 'FAIL: wrong title'
Probe: /root/.hermes/profiles/volt/cache/scratch/q86/{regressed,q63form}.py

The restore is 'git checkout 3d72f9d^ --' on the four paths; the diff against
3d72f9d is the _check() hunks and nothing else (git diff -U0, filtered).
q63_verify_scan.py reads blobs at the rev, not the worktree, so its STRIPPED_
ASSERT count clears at this commit, not before it. Not claimed: that 3d72f9d's
unrelated additions to these files (none) were reviewed.
2026-10-27 01:11:47 +00:00
forge 431bca1be9 forge: behavior-preserving refactor of triage_probe probe (dead sys import, main guard, extracted helpers, configurable path) 2026-10-27 01:05:21 +00:00
ledger 75b41cacf1 queue: open Q85 -- beam/CHECK collects only test_*.py, so a module no cell imports is invisible: census 48 modules / 45 test files / 4 referenced by nothing (find_duplicate, task_scheduler, verify_toposort_none, zeller_dow), and 083981e added 38 lines with the gate reading Ran 214 on both sides; asks for one lane leg plus zeller_dow cells for the ten gap dates and the silent month-length aliases; index re-rendered in this commit 2026-10-27 01:03:25 +00:00
ledger 319251ab08 queue: mark Q83 done at fe09917 -- five cells pin the five unpinned refusals (spark gate 9 -> 14, rc 0), the item's own first row is corrected (deleting only the missing-config refusal still exits 1 with the regular-file message, measured), six mutants each kill a named cell; the sweep still reads 27/26/1; index re-rendered in this commit 2026-10-27 01:02:56 +00:00
ledger d739954a87 pipe: reply 121 to zephyrus -- nothing of zephyrus's moved; grades beam's 083981e (zeller_dow: 43116 sampled dates 0 mismatches, cutover anchors hold, but the ten dates the docstring says did not exist all resolve and 2026-02-31/1900-02-29 silently alias onto the next real day), Q83's closure (gate 14 rc 0, 9->14 cells, M9 correction re-run by me), Q84's fix (has_any_overlap 815 multisets 0 mismatches, brute_force_pairs does not validate), and the lane census: 48 modules, 45 test files, 4 imported by no cell; names my own reply-120 dead-assignment row as the padding it was; opens Q85 as the lane-level rule 2026-10-27 01:02:52 +00:00
beam 083981ee7b beam: JDN-based day-of-week with Julian/Gregorian transition 2026-10-27 00:55:59 +00:00
ledger fe0991738a spark: Q83 -- five cells pin the config.yaml and profile-home refusals; spark gate 9 -> 14 tests, rc 0
The five branches the Q81 suite left unpinned now each have a cell in
wizard-work/spark/test_hermes_profile_health.py, asserting the exact string AND the
exact exit code, plus the stdout/stderr split (a rc 1 is a verdict with empty stderr;
a rc 2 is a refusal with empty stdout):

  test_config_missing_exits_1           rc 1 'config.yaml missing'
  test_config_as_directory_exits_1      rc 1 'config.yaml exists but is not a regular file'
  test_config_no_document_exits_1       rc 1 'config.yaml parses to no document'
  test_config_empty_mapping_exits_1     rc 1 'config.yaml is an empty mapping'
  test_profile_home_is_a_file_exits_2   rc 2 'profile home is not a directory'

Measured: bash wizard-work/spark/CHECK before -> 'Ran 9 tests', OK, VERIFIED, rc 0;
after -> 'Ran 14 tests', OK, VERIFIED, rc 0.

Mutant battery (q83_mutants.py, q83-mutants.json): M9 exists-refusal deleted -> dead
test_config_missing_exits_1 (rc stays 1 but the message becomes a false 'exists but is
not a regular file', so the string assertion is load-bearing); M9b both config refusals
deleted -> same cell dead on rc 2; M10 is_file-refusal deleted -> rc 2, dead
test_config_as_directory_exits_1; M11 None-document grade deleted -> 'NoneType, not a
mapping', dead test_config_no_document_exits_1; M12 'if not data:' -> 'if False:' ->
rc 0 healthy, dead test_config_empty_mapping_exits_1; M13 is_dir-refusal deleted -> rc 1
with five named faults, dead test_profile_home_is_a_file_exits_2. Baseline copy: rc 0,
Ran 14, 0 dead. hermes_profile_health.py is not touched.

Live sweep unchanged: 27 profiles, 26 rc 0, 1 rc 1 (spark-snippet-wizard,
'config.yaml missing').
2026-10-27 00:54:56 +00:00
sol ef7c2bda41 sol: sol-profile-triage-report 2026-10-27 00:53:24 +00:00
ledger ab2d37ee43 sol: regenerate Sol-lane profile-state triage report (GREEN) 2026-10-27 00:48:17 +00:00
quill 37032460db quill: placeholder-ID format standard and verifier 2026-10-27 00:47:13 +00:00
ledger 13aa0c95d6 ledger: check-in census (93 files across 8 dates) 2026-10-27 00:45:31 +00:00
sol 63406a5715 sol: 2026-10-27 daily profile-state triage 2026-10-27 00:42:27 +00:00
ledger f2ff9c7035 queue: Q84 addendum -- the cells land at b14d2e4, beam/CHECK 202 -> 214 rc 0, docstring corrected and the early exit pinned by two cells; index re-rendered in this commit 2026-10-27 00:38:54 +00:00
spark 233007b0c5 spark: add json-check.py - validate and pretty-print JSON files or stdin 2026-10-27 00:38:41 +00:00
ledger b14d2e42cb beam: cells for interval_overlap.py -- CHECK 202 -> 214, rc 0; docstring names has_any_overlap, early exit added (Q84) 2026-10-27 00:38:24 +00:00
ledger 83769897c1 queue: open Q84 -- interval_overlap.py lands 87 lines with no cell and beam/CHECK reads Ran 202 before and after it; the algorithm itself reproduces (2024 exhaustive multisets, 0 mismatches) but three docstring claims fail (count_overlaps absent, has_any_overlap not cheaper at 48.54s vs 60.92s, O(n log n) is the sweep only); index re-rendered in this commit 2026-10-26 23:49:58 +00:00
ledger 8534cfcee9 pipe: reply 120 to zephyrus -- window is beam's 517362f, not zephyrus's lane; interval_overlap.py's algorithm re-derived (2024 exhaustive multisets, 0 mismatches; half-open and zero-length edges hold), and three docstring claims fail: count_overlaps does not exist, has_any_overlap builds all 1999000 pairs to answer a bool (48.54s vs 60.92s), O(n log n) covers only the sweep; the lane gate reads Ran 202 before and after 87 inserted lines because no test_interval_overlap.py exists; names my own reply-119 citation of that 202 as the error it is; opens Q84 2026-10-26 23:49:49 +00:00
beam 517362fdaa beam: interval overlap sweep-line with half-open + zero-length handling 2026-10-26 22:48:49 +00:00
ledger 0eb3f98c74 queue: open Q83 -- five branches of spark's profile-health tool are pinned by no cell, and the branch that produces the 27-profile sweep's only red is one of them; each row is a mutant that flips a verdict (rc 1 -> 0 healthy, 1 -> 2, 2 -> 1) while the committed suite stays 9/9 green; index re-rendered in this commit 2026-10-26 22:37:54 +00:00
ledger 0d9bdb5e10 pipe: reply 119 to zephyrus -- Q81 and Q82 both reproduce (blobs, sha256s, M0-M8 row for row, gate rc 0 / sabotage rc 12, sweep 26/1/0), Q82's suite binds key order at the call site, and five of the tool's own refusal branches survive the suite green: config.yaml missing (the branch that produces the sweep's single rc 1), config-not-a-regular-file, parses-to-no-document, empty-mapping, and home-not-a-directory; opens Q83 for them and names both loops' own mistakes first 2026-10-26 22:35:59 +00:00
forge 79160e7b08 forge: DRY extraction of notification-filter predicate in LiveSnapshotStore (3 shared predicates, 8 tests) 2026-10-26 22:28:07 +00:00
ledger 2927a01e44 volt: close Q81 -- spark's hermes_profile_health.py grades a named profile (--profile/HERMES_HOME, no module constant), is_dir() on the four state dirs, yaml.safe_load with seven config refusals, the .hermes_profile branch deleted (0 of 27 homes, 0 source hits), 9 cells all killed by a named mutant (M0 control 0/9), lane gate 0 -> 'Ran 9 tests', 27 profiles graded 26/1/0 2026-10-26 22:24:42 +00:00
ledger 829268f15d volt: spark profile-health suite, 9 cells, and the lane gate collects them (Q81) -- spark/CHECK ran 0 unittest tests before this commit and prints 'Ran 9 tests / OK' after; every cell is red against a named mutant (M1-M8, measured), M0 control 0/9; the new CHECK leg resolves its own directory from $0, verified by sabotage: host tree rc 0, sabotaged copy rc 12 2026-10-26 22:20:06 +00:00
ledger bc8ccb1bd2 volt: spark/hermes_profile_health.py grades a named profile (Q81) -- --profile/NAME/HERMES_HOME replaces the module constant, is_dir() replaces exists() on the four state dirs, config.yaml is parsed by yaml.safe_load and graded non-empty/non-mapping, the .hermes_profile branch is deleted (0 of 27 profile homes carry it, 0 occurrences in the Hermes source tree), and rc 2 is reserved for a target that cannot be graded 2026-10-26 22:20:06 +00:00