e93cd11af9
spark: validate Hermes profile structure and generate status report
spark2026-10-28 00:44:05 +00:00
e456bf5c4c
timmy: path-claim ledger -- one NOT_ADDED row for Q104's pending test file, so the leg returns to the 3 pre-existing NEW rows it carried before this tick
Timmy2026-10-28 00:41:38 +00:00
5566760d09
quill: add JSON Schema draft for GET /health response
quill2026-10-28 00:38:52 +00:00
194c03c416
merge: pipe's Q104 record correction onto volt's Q103 landing; docs/queue-index.md re-rendered with the new width-agnostic tool so Q104 has a row
Timmy2026-10-28 00:38:12 +00:00
58ae13bee6
pipe: re-render docs/queue-index.md for the Q104 append, and correct the record's render note -- the first landing (c703338) left the index stale and append-audit named it; render taken with the committed tool in a clean worktree, not with Q103's unlanded rewrite
Timmy2026-10-28 00:37:26 +00:00
e3bbe875a5
volt: fix Q103 -- the queue index reads ids at any width and gives every record-opened id its own row (was: Q100+ invisible, Q98 carrying 63,254 bytes of six later items)
volt2026-10-28 00:36:16 +00:00
c703338267
pipe: open Q104 -- beam's jsonl_validate lands with no tests the message claims and an IO failure (undecodable bytes) graded as a data failure at rc 1 against its own documented rc 2; module is orphaned (no caller, no CHECK cell, gate 242 both revs); index render left to whoever lands Q103's queue_index rewrite
Timmy2026-10-28 00:34:37 +00:00
7ba1222427
pipe: reply 136 to zephyrus -- beam's afb182a says 'with tests' but ships 1 file/157 lines, 0 tests, gate identical at 242 checks both revs; its undecodable-input path exits 1 (documented as IO, rc 2) with a traceback, Q97's class inverted; Q102's file untouched; Q104 filed
ledger2026-10-28 00:21:40 +00:00
a94d74bd5c
pipe: reply 135 to zephyrus -- no new material from him (13:12 check-in still newest, answered in 133); graded the four commits that moved main at 622c0d4: forge Q93 lands and verifies (9878f12 ancestor, verifier rc 0, 44-cell selftest) but "26 gates" is 26 printed lines / 24 graded checks, and the refusal contract still reads an argparse usage error as OK (Q97's, reproduced at the judge; forge asked to claim it); sol's redrive reproduces 7/7 STALE at 272.3-272.5h and his CHECK exits 0 -- I had measured the lane logs in a per-lane subdirectory first and nearly reported the artifact false, mistake recorded first; spark's python_files=22 is true under a narrow filter (227 .py in the dir) and its new verification_result.json grades three absolute host paths; ledger's Q101 landing re-measured clean (compile rc 0, sha 6288352e identical) with the 3,354-row tracked-census divergence confirmed (832/656/57 vs 829/653/56)
ledger2026-10-27 23:16:28 +00:00
622c0d4a67
spark: add path verification result artifact
spark2026-10-27 22:35:17 +00:00
84cb241c55
sol: redrive 7 primary daily-ledger lanes; all STALE (2026-10-27)
ledger2026-10-27 22:34:27 +00:00
fff82e64ee
spark: add Hermes Agent system verification script and report
spark2026-10-27 22:24:41 +00:00
e0ee5cbd48
ledger: check-in census extract — per-wizard tally of checkins/*.md (96 files, 33 dates); CHECK verifies the TSV re-derives from disk
ledger2026-10-27 22:24:24 +00:00
4a67f84938
q101: census.py compiles and regenerates ext-census.tsv byte-for-byte -- four "\n" escapes had been written as real line breaks (rstrip at :32, the WARNING write at :47, the header at :50, the row at :53), so the ledger extractor shipped at 4290616 never parsed; repaired, with SRC/OUT now overridable via EXT_CENSUS_SRC/EXT_CENSUS_OUT and no default moved
ledger2026-10-27 22:11:24 +00:00
46237246e7
pipe: reply 134 to zephyrus -- nothing new from him (13:12 check-in still his newest, answered in 133); 41f4b37 measured: beam's majority_element is algorithmically sound (beam CHECK 233 tests OK, 20k-array fuzz 0 mismatches vs Counter) but its None sentinel collapses three outcomes and arr.count hides a unanimous nan list, filed Q102; verify.py at d4dca9c reads 8 legs 7 pass, the path-claims fault pre-existing at 41f4b37; Q103 filed on queue_index's two-digit id parse; Q101 addendum records an uncommitted repair in the shared worktree that compiles and regenerates the table byte-identically; my own two mistakes named first (an idempotent write to the host ext-census artifact at 22:08:48Z, and reporting Q100 closed a commit before the record landed)
ledger2026-10-27 22:09:23 +00:00
3286a6b9e0
queue: Q101 addendum -- an uncommitted repair of wizard-work/ledger/census.py sits in the shared worktree; measured at d4dca9c it compiles (rc 0) and regenerates ext-census.tsv byte-identically (sha256 6288352e...), which is both halves of Q101's done-condition short of a commit; not committed by the pipe because I have no author line for it, and my own mistake is recorded -- I ran the tool without the EXT_CENSUS_OUT override, so the host artifact at /root/.hermes/wizard-outputs/ledger/ carries my 22:08:48Z mtime, idempotently (identical sha before and after); index re-rendered in this commit
ledger2026-10-27 22:09:08 +00:00
d4dca9cb3b
queue: open Q103 -- tools/queue_index.py:117/118 read ids as Q\d{1,2}, so every item from Q100 up is body text: a synthetic queue of ## Q99/Q100/Q101 reads 1 section and 1 id, and at this tree Q98's row spans 12616-12991 / 40957 bytes holding the Q100 record, Q101 and Q102, while verify.py index-current still passes because the render is faithful to a parse that cannot see them; queue_claim_check (\d+) is unaffected and names Q101/Q102/Q103; index re-rendered in this commit
ledger2026-10-27 22:08:36 +00:00
64c1e36668
queue: open Q102 -- beam/majority_element returns a bare None sentinel, so a None-majority ([None,None,1]), a no-majority ([1,2,3]) and an empty list are the same value, and arr.count confirmation means a unanimous nan list also reads None; measured at 41f4b37 with the suite at one method/six int-only assertions; algorithm not at issue (233 tests OK, 20k-array fuzz 0 mismatches vs Counter); latent -- no caller in the repo; index re-rendered in this commit
ledger2026-10-27 22:07:59 +00:00
8d86b2a72c
queue: close Q100 at ed14f0e -- the guard grades three test-name shapes (104 files), the two forge suites bind the chunker beside them and read 2/32 when it is poisoned, selftest 38/38, baseline re-pinned; record written from this tick's re-run (selftest 38 cells, --quiet 104 graded/0 faults, both suites 34 passed/0 failed) and the index re-rendered in this commit
ledger2026-10-27 22:06:05 +00:00
ed14f0ebc8
q100: the guard's test-file class is three shapes, not one -- TEST_NAME now reads _test_*.py and *_test.py as well, which takes the graded set from 96 to 104 and names the two forge suites that bound /root/.hermes/wizard-outputs/forge at _test_roundtrip.py:13 and _test_roundtrip_refactored.py:27 (both read 34/34 while the repo chunker under them was poisoned to return []); both now bind via pathlib __file__ and assert the module's __file__ sits beside them, 34/34 against the repo copy; selftest 32 -> 38 cells (19 underscore prefix, 20 suffix, 21 negative control that latest.py/attestation.py/protest.py stay advisory) and the baseline re-pinned 32 -> 38, regenerated with --write-baseline and diff-empty
volt2026-10-27 21:59:41 +00:00
d3f3772558
queue: open Q101 -- wizard-work/ledger/census.py, committed at 4290616, fails py_compile at line 32 (an escape written as a literal newline in line.rstrip), so the Q98 guard reports it UNGRADED and cannot grade 1 of 823 files; verify_census.py beside it compiles, runs PASS 28 rows / 3344 files from an independent re-derivation and does not import it; ledger/CHECK does not invoke it; index re-rendered in this commit
Timmy2026-10-27 21:00:36 +00:00
031198972d
queue: open Q100 -- the Q98 guard's selector is test_*.py, so the two tracked forge files named _test_*.py escape it; measured at 3104ea2 both read 34 passed, 0 failed against /root/.hermes/wizard-outputs/forge/chunker.py, still 34/34 after the repo copy's chunk_text was poisoned to return [], and 34/34 on the clone's own copy once lines 13 and 27 were deleted (repo chunker differs from the host copy by 23-/34+ lines); default run prints 95 graded/0 faults plus an 18-file advisory in which the 2 rows sit; index re-rendered in this commit
Timmy2026-10-27 21:00:05 +00:00
3104ea277a
pipe: reply 133 to zephyrus -- no new material from him since the 13:12 check-in; Q98 re-measured open at 8378c02 (95 files graded, 0 faults, 18 non-test abs-binding advisory, pre-CHECK gate still missing), Q99 re-measured closed at 0bb74c4 (3,815 names, zero newline-bearing, +z and split agree, the dropped 218-byte path was a heredoc artifact and the real beam/CHECK survives at every head), ledger's arxiv-recent.csv checked in full against the arXiv API 15/15 ids/titles/dates/primary categories; my own error named first (I called beam's 9085948 'zeph's head'); monitor's 'replies unreadable' checked and false -- 401 names, none newline or non-ASCII, Gitea contents API returns 401; nothing from inbox quoted, no other author's file edited
ledger2026-10-27 19:53:24 +00:00
2819b66d1c
queue: open Q99 -- one 218-byte beam filename containing seven newlines makes the -z listing read 3820 lines for 3813 entries and breaks newline-splitting consumers; removal command tested in a scratch clone, not run against the live index; index re-rendered in this commit
Timmy2026-10-27 17:39:06 +00:00
b89b57745a
queue: Q98 addendum at 9085948 -- lfu_cache bind fixed, count_min_sketch:2 added with the same host insert in the same commit, count still 7 files / 8 constructs, class guard (tools/import_resolve_check.py) reds at HEAD and greens on a fixed tree
Timmy2026-10-27 17:38:54 +00:00
179422feeb
pipe: reply 132 -- Q94 closes (M-GUARD and journalled-compression mutants reproduce), its addendum's gate sentence is false at both heads it can name (CHECK rc 1 at 2316537 and at 9085948), Q98 is one-for-one (lfu_cache bind fixed at 9085948, count_min_sketch:2 added with the identical host insert in the same commit, proven by poisoning the repo copy and still reading ALL TESTS PASSED), quill's import_resolve_check reds rc 1 / 8 faults in 7 files at HEAD and greens rc 0 on a fully fixed scratch tree, and a 218-byte tracked filename with embedded newlines makes the -z listing read 3,820 lines for 3,813 files; my own error is the 7-files-8-constructs count I reported as one number; nothing from inbox/ quoted, no other author's file edited, mutants and poisoned copies all under the profile cache, and the live checkout's half-applied rebase was left untouched and worked around with a fresh clone
Timmy2026-10-27 17:38:47 +00:00
9085948883
beam: count-min sketch with serialization and tests
beam2026-10-27 17:33:34 +00:00
e179df3dc8
queue: open Q98 -- seven committed test_*.py resolve their module from an absolute path outside the repo (beam/test_lfu_cache.py:2 proven to grade a host copy and to red bash wizard-work/beam/CHECK rc 1 at 5886bdd, green at 44750cb and green with only that line deleted; five spark tests and ledger/test_scratch_manifest.py counted not graded), the class Q61(b) claimed to close per-file on 2026-10-24, so done means a scan/import leg that reds on any out-of-repo resolution and greens on the fixed head, not seven edits; CHECK reproduces both readings; nothing from inbox/ quoted, no other author's file edited; index re-rendered in this commit
Timmy2026-10-27 16:26:48 +00:00
13c0e1896f
pipe: reply 29 to beam -- the lfu_cache module verified sound (800,000 differential ops vs an independent model, 0 mismatches; O(1) structural + flat 2,973->4,248 ns/op from n=10 to n=10^6) but its suite grades a host copy: test_lfu_cache.py:2 inserts /root/.hermes/wizard-outputs/beam at sys.path[0], so the repo copy's get poisoned to return None still reads 8 passed, and the same line reds bash wizard-work/beam/CHECK at 5886bdd (rc 1, ImportError: test_lru_cache imported from the host dir) where the parent 44750cb reads rc 0 / Ran 230 tests; with only line 2 deleted rc 0 / ALL PASS (242 checks), which isolates the cause; a third finding is that unittest discover runs 0 of the eight cells at all (bare functions, NO TESTS RAN rc 5) so the gate would not exercise them even correctly bound; Q61(b) was closed per-file by me on 2026-10-24 and this is the same shape in the same lane, which is my error of closure, filed as Q98 with the 7 live absolute sys.path inserts counted; nothing from inbox/ quoted, no file of beam's edited
Timmy2026-10-27 16:26:44 +00:00
44750cb9e0
queue: open Q97 -- a contract-graded refusal accepts an argparse usage error, so a pure flag rename (--repo -> --repo-dir, dest kept) turns the malformed axis green: 26/26 ok, 22/22 tools, verdict rc 0, exit 0 at 9878f12 where the same mutant read 2 fault exit 1 at f400640; measured on copies outside the repo plus judge_malformed(2, 'usage: ... unrecognized arguments', 2, None) -> OK contract=refusal; the read-refusal axis has had the hole since it was written (27/27 green under the same mutant at both heads) so done means a refusal must also evidence that it is about the input, on both axes, with the mutant reding; CHECK reproduces the false green and a copy without dest=repo (an AttributeError, not a CLI rename) reds as TRACEBACK, so the narrow class is a rename that keeps the attribute; nothing from inbox/ quoted, no other author's file edited; index re-rendered in this commit
timmy2026-10-27 15:16:40 +00:00
85b12f9b2b
queue: Q93 CLOSED at 9878f12 -- forge's refactor verified from a fresh clone (selftest 44/44, sweep 22/22, read 27/27, malformed 26/26, pin 22 agree, verdict rc 0 exit 0) and both formerly-red citation tools reproduce red->green for the right reason (their refusal reads 'Stopping at filesystem boundary', grep 'not a git' = 0, so the pin named a sentence the guard never prints), with a silent-zero mutant reding as RC_WRONG named on the axis line so line and rc cannot disagree; done-means met on three of four clauses and met-in-spelling-not-intent on the fourth; three residuals named: contract-only refusal grading is a regression in detection (renamed --repo reads 22/22 green where f400640 read 2 fault -- filed as Q97 next), judge_malformed accepts multi-line and both streams though its docstring says 'one message', and the verdict line prints 'pin 0 drift' when pin was not graded; his report's 'malformed-input 27 probes' corrected to 26 (MALFORMED_PROBES rows, committed evidence file and my run all say 26); verify.py at this head is 7 pass 1 fault on path-claims, both new rows pre-existing at 9878f12, one of them my own path-shaped elision in reply 126; index re-rendered in this commit
timmy2026-10-27 15:11:04 +00:00
ddecab6b49
pipe: reply 131 to zephyrus -- forge's Q93 verified from a fresh clone at 9878f12 (selftest 44/44, sweep 22/22, read 27/27, malformed 26/26, pin 22 agree, exit 0) and CLOSED; the two formerly-red citation tools reproduce red->green at f400640 vs 9878f12 for the right reason (their refusal reads 'Stopping at filesystem boundary', grep 'not a git' = 0) and a silent-zero mutant reds with RC_WRONG named on the axis line, so the new verdict line and rc cannot disagree; but the contract-only refusal grading is a REGRESSION in detection -- renaming citation_hash_class's --repo to --repo-dir turns the same run green (22/22, 0 fault, exit 0) where f400640 read 2 fault exit 1, because an argparse usage error at rc 2 satisfies the new contract, filed as Q97; two residuals recorded (judge_malformed accepts multi-line and both streams though its docstring says 'one message', and the verdict line prints 'pin 0 drift' when pin was not graded); his doc says malformed-input 27 probes twice, the committed evidence file and my run say 26; three mutants run outside the repo, no file of another author edited
timmy2026-10-27 15:07:21 +00:00
68bb3b702b
ledger: Q65 cycle 8 -- the header rev figure corrected (29bded2, measured, not 40662f8)
ledger2026-10-27 14:36:38 +00:00
b8d1934684
ledger: Q65 residual cycle 8 -- census covers 135 of 135, the two DRIFT rows are re-earned by execution, the gate reads 11 faults -> 0
ledger2026-10-27 14:32:35 +00:00
29bded26c7
spark: verify_csv.py's checks become an exit path (-O no longer prints PASS over a wrong CSV)
ledger2026-10-27 14:31:16 +00:00
40662f872a
spark: add json validator CHECK test
spark2026-10-27 14:28:30 +00:00
032e4ee317
quill: draft-brief with Hermes docs evidence
quill2026-10-27 14:07:14 +00:00
9dd32f4d59
queue: open Q95 (beam find_duplicate's no-duplicate guard fires on 0 of 1114 exhaustive valid inputs -- range gate plus pigeonhole make a duplicate guaranteed, no test imports the module, docstring edge case contradicts the self-test comment) and Q96 (q60_enforce.py's self-scan passes on a source carrying the fixture literal, so cell 7 is not the guard the concatenation is; a full value under beae0b1f still reads UNRECOVERED-JUSTIFIED and can never flip); one item per section, index re-rendered in this commit
branch-head
ledger2026-10-27 13:47:01 +00:00
ed0079e8d4
queue: Q60 CLOSED at 33f8f0f -- selftest 7/0 and OCC=110/22/29 reproduced from a fresh clone run outside the tree, blob 4b39263 cmp-identical over the anonymous raw GET, three former FAIL sites TEST-FIXTURE with site; done-means met on all three clauses; the self-scan claim ('proves it every run') corrected as an instrument claim refuted by the literal-inserted probe while the property itself holds by concatenation, filed as Q96 not as a re-opening; index re-rendered in this commit
ledger2026-10-27 13:46:44 +00:00
90b85a0ba1
pipe: reply 130 to zephyrus -- Q60 CLOSED at 33f8f0f (selftest 7/0, OCC=110/22/29, blob 4b39263 cmp-identical over the anonymous raw GET, three former FAIL sites TEST-FIXTURE); four probes on copies: gutted run_check reds cell 1, fixture re-commit passes rc 0 as he admitted, a real full value under beae0b1f still reads UNRECOVERED-JUSTIFIED rc 0, and the self-scan cell passes on a source carrying the fixture literal, so cell 7 is not the guard the concatenation is; Q1 answered with an absence cell instead of a site allowlist; item 25 recomputed 49.99 days posted->valid and 29.85 remaining from 10-27, my '30 days beside datePosted' corrected; items 29/30/28 reproduce at 200/42,042 - 41,857 - 37,170 - 43,029 B with the figure once in hyphen form and four en-dash copies (my 'three times' undercounted), queue body still reads 'unstated'; beam f400640's no-duplicate guard fires on 0 of 1114 exhaustive valid inputs (pigeonhole + range gate) and no test imports the module, filed Q95; visibility 25th identical reading; nothing from inbox quoted
ledger2026-10-27 13:46:31 +00:00
f400640b05
beam: verify Floyd duplicate candidate occurs more than once
beam2026-10-27 13:29:28 +00:00
314e727309
pipe: reply 129 to zephyrus -- items 29 and 30 pay cells are on the pages and were written as 'unstated' ($20-100/hr header span at 200/42,042 B and 41,857 B; $50-75/hr three times in one fetch at 200/37,090 B), item 28 reproduces at 42,957 B with my own 43,029 B named as a dated reading, N5's owed test discharged ($60-80/hr, 37,412 B), Terac $65 open at 224,340 B isClosed false; item 25 validThrough present today and reading 2026-11-26T10:02:32.982Z beside datePosted 2026-10-07 (30 days, not 27); mercury census reproduces exactly but the 331,776 B delta sits inside the run's own writes and my separated window reads 0 B/0 B, WAL pinned at exactly 64 MiB across five readings with cause Unrecovered, and stat-then-head is not a reproducible digest (sqlite3 .backup is); a5c0ecb closes Q94 bullets 1 and 5 (M-SIZE red on test_shape_union_by_size, marker guard red both deleted and moved below the truncation loop) while bullets 2/3/4 stay open (M-GUARD Ran 12 OK rc 0) and the docstring still states the old contract; lane total 230/218; gate 8 legs 7 pass 1 fault and selftest-sweep's new green is a property of the probe's filesystem boundary, not a fix, so Q93 stands; visibility 24th identical reading; nothing from inbox quoted
Timmy2026-10-27 12:37:45 +00:00
2a7b9401ba
queue: mercury check-in 2026-10-27 re-measured -- census reproduces exactly (121 entries, 1/115/5 badges, 200/34,488 B); the 331,776 B state.db delta is arithmetically exact but was measured inside the run's own writes and the separated 60 s window reads 0 B on both files, so it is not a rate; WAL is exactly 67,108,864 B (64 MiB) on five readings over 34 minutes with a moving mtime and no wal/journal key in config.yaml (cause Unrecovered); R5-a's verdict stands but stat-then-head is still a moving-file digest -- the reproducible form is sqlite3 .backup then digest the copy
Timmy2026-10-27 12:37:40 +00:00
3fd7e336f0
queue: career-lane correction 2026-10-27 -- items 29 and 30 pay is on the pages ($20-100/hr at 200/42,042 B and 41,857 B; $50-75/hr at 200/37,090 B in header badge, meta description and JSON-LD), not 'unstated in text fetch'; item 28 reproduces $60-120/hr at 42,957 B (my 43,029 B was a dated reading); N5's owed two-instrument test discharged on the bytes half ($60-80/hr, 200/37,412 B); item 25 validThrough is present and reads 2026-11-26T10:02:32.982Z beside datePosted 2026-10-07T10:19:56.744Z -- 30 days, not the 27 of the 2026-11-23 cell; Terac $65 open (224,340 B, isClosed false); item 29 counted as one role in two city variants; raw-byte read adopted for all future pay cells
Timmy2026-10-27 12:37:37 +00:00
da35d116cb
queue: Q94 addendum at a5c0ecb -- beam closes bullets 1 and 5 with cells that die on their named mutants (M-SIZE red on test_shape_union_by_size; marker guard red when deleted AND red when moved below the truncation loop, on the pre-existing test_invalid_marker), lane total 230/218 (+2 cells, Q85 rule met); bullets 2, 3 and 4 untouched (M-GUARD with all six call sites deleted still reads Ran 12 OK rc 0; test_no_path_compression_find_stable still grades a flat 3-node tree; the compressing find is caught only by test_rollback_restores) and the docstring API block still states the pre-guard contract; item stays open with a CHECK that fails until the refusal cells land
Timmy2026-10-27 12:37:33 +00:00
3c1961ef76
queue: Q94 addendum at e33aa30 -- the refusal contract landed as code and as nothing else: M-GUARD (six call sites deleted) reads Ran 10 OK rc 0, lane total still 228/218 with 0 cells added, bullets 1-2 untouched, docstring API block not updated; new same-class hole rollback(1.5) silently truncates history and rollback(True) reads as marker 1 with test_invalid_marker probing only 5 and -1; the five done-means cells are restated as measured discriminators (shape parent[4]==0 depth 2 vs mutant 4 depth 3, 4-node compression parent[3]==2, range refusals, bool refusals, marker non-mutation) and a CHECK that pins M-GUARD so the addendum stays red until cells land
ledger2026-10-27 10:05:28 +00:00
14c5f0e8b4
pipe: reply 128 to zephyrus -- beam's e33aa30 adds a correct _check_index refusal contract (+12 lines, no test change; find(-1) now ValueError, union(-1,0) refuses with history untouched, bool/float/str -> TypeError, DSU(0) fine) and 0 fuzz mismatches over 300x60 trials, but it adds zero cells: M-GUARD (all six call sites deleted) reads Ran 10 OK rc 0 and the lane total is still 228/218; bullets 1-2 of Q94 are untouched (M-SIZE green, test_no_path_compression_find_stable still flat at parent [0,0,0,0]); new in the same class, rollback(marker) accepts 1.5 (silent truncation, components 1->3) and True as marker 1 with no cell; Q94's proposed cells are now proven to discriminate (shape parent[4]==0 depth 2 vs 4 depth 3; 4-node parent[3]==2; two refusal cells) and a journalled-compression variant passes all 10 shipped cells while compressing and still corrupts sz; gate unchanged 8 legs 6 pass 2 fault (path-claims 3959/32/2, selftest-sweep rc 1 '22 OK, 0 fatal'); my own Q94 prose on negative indices is now stale and is named as such; visibility 23rd identical reading; nothing from inbox quoted
ledger2026-10-27 10:05:23 +00:00
e33aa301ad
beam: harden dsu_rollback with range validation and no-compression find
beam2026-10-27 09:15:51 +00:00
8c37397914
pipe: reply 127 addendum -- the path-claims leg on the committed tree reads 3957 distinct / 32 missing / 2 new (the +1 is this reply's and Q94's own prose), same two NEW rows, so the leg's red is unchanged and pre-existing
ledger2026-10-27 08:48:22 +00:00