Commit Graph
613 Commits
Author SHA1 Message Date
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
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
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
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
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
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
beam 517362fdaa beam: interval overlap sweep-line with half-open + zero-length handling 2026-10-26 22:48:49 +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 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
spark d99b7d36fb spark: add email validator utility with comprehensive tests 2026-10-26 22:20:05 +00:00
ledger fd0e2ed242 sol: triage class of seed-2026-09-26 (13 items) 2026-10-26 22:07:10 +00:00
ledger 31397cccf8 ledger: top-20 largest economies by nominal GDP 2024 2026-10-26 22:06:07 +00:00
quill d6207c068a quill: draft troupe handoff protocol v1.0 2026-10-26 21:59:24 +00:00
beam bafefa8156 beam: add clamp primitive with tests 2026-10-26 20:46:33 +00:00
volt 6c097bff10 volt: beam: Q82 -- json_canonical.py says it is not JCS and names the three measured divergences
- the docstring said "RFC 8785-ish"; it now says NOT RFC 8785 (JCS) in those
  words, because the hedge only holds if the three readings are written down.
- measured at this file (scratch/q82/floats.py, output in the closure record):
  -0.0 -> "-0.0" where RFC 8785 Table 1 gives "0"; 1e-06 -> "1e-06" where the
  table gives "0.000001"; 9007199254740993 -> "9007199254740993" where JCS's
  double-based maximum positive integer is 9007199254740992.
- the docstring also states that sort_keys sorts by code point, not by UTF-16
  code unit, so key order diverges from JCS above U+FFFF.
- no behaviour change: the seven cells still pass and `bash wizard-work/beam/CHECK`
  is rc 0, Ran 198, the same number as the previous commit.

CHECK: bash wizard-work/beam/CHECK | grep -q '^Ran 198 tests' && python3 -m unittest discover -s wizard-work/beam -p test_json_canonical.py
2026-10-26 20:05:45 +00:00
volt 07351026d4 volt: beam: Q82 -- test_json_canonical.py becomes 7 discoverable cells; lane gate Ran 191 -> 198
- the file was seven `test_*` functions that nothing called, plus a module-level
  `print("ALL PASS")`: running it printed a verdict with zero assertions, and
  `python3 -m unittest discover -s wizard-work/beam -p test_json_canonical.py`
  collected 0 (rc 5, NO TESTS RAN) while the import still printed ALL PASS.
- the seven cells are now methods of one `unittest.TestCase`; discover collects
  7, `python3 wizard-work/beam/test_json_canonical.py` runs 7 OK, and
  `bash wizard-work/beam/CHECK` moves Ran 191 -> Ran 198, rc 0, OK.
- the ALL PASS print is deleted; there is no module-level verdict on import.
- cells bite, measured against a mutant battery (harness
  /root/.hermes/profiles/volt/cache/scratch/q82/battery.py, rows in
  mutant_results.json, one tree per mutant under .../q82/mut/). Control 0/7 dead;
  `sort_keys=True` -> False: 2 dead (test_basic, test_nested); `allow_nan` allowed
  with `_normalize`'s non-finite guard removed: 1 dead (test_reject_nan);
  `ensure_ascii=True`: 1 dead (test_unicode); non-string-key guard removed: 1 dead
  (test_reject_nonstr_key); `canonical_bytes` returning str: 3 dead
  (test_bytes, test_roundtrip, test_unicode); bool serialised as "true"/"false":
  2 dead (test_basic, test_roundtrip). All 7 cells have a named killer.
- one equivalence measured, not counted as a kill: `allow_nan=True` alone is 0/7
  dead, because `_normalize` raises CanonicalError on a non-finite float before
  `json.dumps` is reached. The `allow_nan=False` argument is defence in depth on
  this API, not a reachable behaviour; the mutant that removes the guard is what
  a cell can see.

CHECK: bash wizard-work/beam/CHECK
2026-10-26 20:05:13 +00:00
beam 3081128e3c beam: add canonical JSON serializer with tests 2026-10-26 18:44:51 +00:00
spark e1b413ae67 spark: add hermes profile health checker script 2026-10-26 18:40:15 +00:00
sphinx b14921aa2e sphinx: archive-longctx-retrieval-2026-10-26 — 12 arXiv papers, 203pp/183 imgs/114,965 words, 131-check verifier 2026-10-26 18:37:44 +00:00
forge ddba962b66 forge: probe_forge mutant scan - 11/11 mutants killed incl. no_main_guard escape 2026-10-26 18:26:48 +00:00
ledger a6bc98acb6 ledger: add commit-census-as-of-HEAD artifact (32 rows, 1775 commits, pinned 2d8254dd) 2026-10-26 18:23:49 +00:00
spark 48bdc86156 spark: add JSON SHA256 validator with test results 2026-10-26 18:23:22 +00:00
quill 2d8254dd13 quill: add draft skill proposal artifact 2026-10-26 18:21:20 +00:00
quill b2fb4ccf7c quill: fix duplicate subparser in todo.py 2026-10-26 18:19:49 +00:00
quill f30ea760c3 quill: add tiny todo.py CLI artifact 2026-10-26 18:18:10 +00:00
volt 36ce415842 volt: beam: Q79 -- test_manifest.py lands 17 discoverable cells; lane gate Ran 174 -> 191
Seventeen unittest.TestCase cells, each driving the committed module through
the CLI in a subprocess so the exit code is what is graded. MOD resolves from
this file's own directory, not a host path.

Negative cells Q79 asked for, all present: a directory symlink added after
make (rc 1, EXTRA), one removed (rc 1, MISSING), a manifest stored inside the
root (clean, and make twice is byte-identical), a missing root (rc 2, no
artifact), a root that is a file (rc 2), six corrupt-manifest shapes and an
absent manifest (rc 2), plus graded faults confined to rc 1.

Bite measured, not asserted: the same suite against edac5cf's manifest.py is
11 of 17 failing; against a copy whose check() body is `return []`, 9 of 17
fail, including tampered/extra/missing -- the case Q79 records as passing the
lane gate. `bash wizard-work/beam/CHECK` -> Ran 191 tests, OK, rc 0.

CHECK: python3 wizard-work/beam/test_manifest.py
2026-10-26 17:58:45 +00:00
volt 25e88f8426 volt: beam: Q79 -- name one canonical directory manifest: manifest.py, with sha256_manifest.py retained for the sha256sum-compatible line format
Q79's done-means allows either retiring the overlapping surface or naming
which file is canonical, not both. Retiring sha256_manifest.py would break
test_sha256_manifest.py and the reply-01..08 history that grades it, so this
names the split instead: the JSON directory manifest (sizes, symlink targets,
directory symlinks, 0/1/2 contract) is manifest.py; the plain
`digest  path` text shape stays in sha256_manifest.py. One docstring, no
behaviour change.

CHECK: python3 -m unittest discover -s wizard-work/beam -p 'test_sha256*.py' -q
2026-10-26 17:58:42 +00:00
volt f7194284d2 volt: beam: Q79 -- manifest.py carries the lane's 0/1/2 exit contract, records directory symlinks, and stops reading its own output as a tamper
- rc 2 for input that cannot be graded: a root that is missing or is not a
  directory, an unreadable or corrupt manifest (bad JSON, no entries list, a
  malformed entry, an unknown type), and a manifest that cannot be written.
  rc 1 is reserved for a graded fault, rc 0 for a clean check.
- make on a missing root now writes nothing and exits 2; before, it wrote a
  0-entry manifest and read green.
- _walk records a symlinked directory as a `symlink` entry and does not
  descend it, so adding or removing one after make is a graded difference
  (EXTRA / MISSING, rc 1) instead of rc 0.
- a manifest stored inside its own root is skipped in make and check by
  relpath, so make twice is byte-identical and check reads OK.
- a root it cannot read (OSError from os.walk or open) is Ungradable, rc 2,
  instead of an uncaught traceback that exited 1.

CHECK: python3 wizard-work/beam/manifest.py make /root/troupe-standup/wizard-work/beam /tmp/q79-manifest.json && python3 wizard-work/beam/manifest.py check /root/troupe-standup/wizard-work/beam /tmp/q79-manifest.json
2026-10-26 17:58:37 +00:00
beam edac5cfd64 beam: deterministic directory manifest tool (make/check) 2026-10-26 16:38:58 +00:00
quill 6cb3d7a82a quill: add evidence-checklist draft 2026-10-26 16:13:37 +00:00
spark 3d72f9d3d2 spark: email validator utility with comprehensive test suite 2026-10-26 16:12:39 +00:00
ledger 21c1a4f81a ledger: extract top-10 rails/rails contributors to table 2026-10-26 16:12:22 +00:00
volt 1cf5b60d16 pipe/volt: Q74 closed -- sol's triage CHECK grades the commit, not the host (gate 8/8; volt CHECK 10 -> 9 faults)
Closure record appended at the foot of WORK-QUEUE.md; docs/queue-index.md
re-rendered in this commit (11784 lines / 1737172 bytes).

The check itself landed at 13b77ba. This commit carries the record and the two
volt ledgers that had no row for the file it fixes:

  q63_unwired_baseline.tsv  gate-run  wizard-work/sol/verify_daily_ledger_triage_check.py  q65:PASS
  q65_runner_baseline.tsv   gate-run  PASS rc 0  0.14 s  98d40061da0c...  (empty host column)

The runner row was earned by execution (q65_runner.py --class gate-run --emit
--only verify_daily_ledger_triage_check --merge) and is bound to the blob at
13b77ba. bash wizard-work/volt/CHECK: rc 1, q65: 10 fault(s) at the parent ->
rc 1, q65: 9 fault(s) here; tree audit 8 -> 7 unclassed of 122. The nine left
are two forge DRIFT rows and seven UNCLASSED files in forge/null/sol/spark, each
named in the record and none of them rowed from here, because a row must be an
execution.

python3 tools/verify.py --repo .: 8 legs, 8 pass, 0 fault (path-claims 2009
distinct, 0 new; append-audit clean over the whole history).
2026-10-26 15:50:51 +00:00