diff --git a/test/check_ledger.tsv b/test/check_ledger.tsv index ef436a47..2b10749e 100644 --- a/test/check_ledger.tsv +++ b/test/check_ledger.tsv @@ -915,12 +915,14 @@ harness_selftest 390-a-registered-suite-must-account a declared suite that produ harness_selftest 390-a-registered-suite-must-account a declared suite the driver never dispatched reconciles 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account a file that does not exist is reported absent, not exempt 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account a hash inside a word does not hide the call after it 15;16;17;18;19 never - +harness_selftest 390-a-registered-suite-must-account a lib.sh accounting line is seen by the narrow reader 15;16;17;18;19 2026-10-13 part 590's reader of a producer's accounting line answers 'terminated' where it found the line harness_selftest 390-a-registered-suite-must-account a log carrying lib.sh's accounting line is accounted 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account a log carrying neither is not accounted 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account a log claiming PASSED without the accounting line shows none 15;16;17;18;19 never - +harness_selftest 390-a-registered-suite-must-account a log claiming PASSED without the accounting line shows none 15;16;17;18;19 2026-10-13 part 590's narrow reader answers yes where it found no accounting line harness_selftest 390-a-registered-suite-must-account a long suite that calls pgc_summary still declares accounting 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account a longer name containing pgc_summary is not a declaration 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account a passing log shows accounting 15;16;17;18;19 never - +harness_selftest 390-a-registered-suite-must-account a passing log shows accounting 15;16;17;18;19 2026-10-13 part 590's reader of a producer's accounting line answers 'terminated' where it found the line +harness_selftest 390-a-registered-suite-must-account a private tally is NOT seen by the narrow reader 15;16;17;18;19 2026-10-13 part 590's narrow reader answers yes where it found no accounting line harness_selftest 390-a-registered-suite-must-account a registered suite that is accounted by nothing FAILS 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account a suite recorded as known debt passes 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account a suite recorded as never dispatched that DID account is caught 15;16;17;18;19 never - @@ -931,16 +933,17 @@ harness_selftest 390-a-registered-suite-must-account a suite that now accounts b harness_selftest 390-a-registered-suite-must-account a suite the driver never dispatched passes 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account a trailing comment after the call does not hide it 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account an absent log shows no accounting rather than erroring 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account an accounting line that does not start its line is refused 15;16;17;18;19 never - +harness_selftest 390-a-registered-suite-must-account an accounting line that does not start its line is refused 15;16;17;18;19 2026-10-13 part 590's narrow reader answers yes where it found no accounting line harness_selftest 390-a-registered-suite-must-account an indented comment is still a comment 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account an undeclared suite that DID account is caught too 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account and a failed population reconciliation fails the major 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account and a failed reconciliation sets the per-major failure flag 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account and a log carrying only its OWN checks-run line is accounted too 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account and a reworded producer line is refused, so the arm can fail 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account and a skip, which reached the summary and counted zero 15;16;17;18;19 never - +harness_selftest 390-a-registered-suite-must-account and a log with neither is seen by neither 15;16;17;18;19 2026-10-13 part 590's narrow reader answers yes where it found no accounting line +harness_selftest 390-a-registered-suite-must-account and a reworded producer line is refused, so the arm can fail 15;16;17;18;19 2026-10-13 part 590's narrow reader answers yes where it found no accounting line +harness_selftest 390-a-registered-suite-must-account and a skip, which reached the summary and counted zero 15;16;17;18;19 2026-10-13 part 590's reader of a producer's accounting line answers 'terminated' where it found the line harness_selftest 390-a-registered-suite-must-account and absent is distinguishable from a present file that does not declare 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account and an incomplete 15;16;17;18;19 never - +harness_selftest 390-a-registered-suite-must-account and an incomplete 15;16;17;18;19 2026-10-13 part 590's reader of a producer's accounting line answers 'terminated' where it found the line harness_selftest 390-a-registered-suite-must-account and debt naming a suite that is not registered is reported too 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account and it agrees with the real reader on a SHORT file, which is why it survived review 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account and it is NAMED, so the reader does not have to diff two lists 15;16;17;18;19 never - @@ -948,8 +951,8 @@ harness_selftest 390-a-registered-suite-must-account and it is named as that fau harness_selftest 390-a-registered-suite-must-account and it is named as the opposite fault, not the same one 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account and it is named, which the symmetry check could never do 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account and names nothing when the two readers agree 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account and prose containing the word does not count as the line 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account and so does a failing one, which is the point 15;16;17;18;19 never - +harness_selftest 390-a-registered-suite-must-account and prose containing the word does not count as the line 15;16;17;18;19 2026-10-13 part 590's narrow reader answers yes where it found no accounting line +harness_selftest 390-a-registered-suite-must-account and so does a failing one, which is the point 15;16;17;18;19 2026-10-13 part 590's reader of a producer's accounting line answers 'terminated' where it found the line harness_selftest 390-a-registered-suite-must-account and sorts its inputs, because the runner appends them in SUITES order 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account and the excused one is not named as a failure 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account and the headline a reader sees is that number 15;16;17;18;19 never - @@ -964,9 +967,6 @@ harness_selftest 390-a-registered-suite-must-account equal sets reconcile 15;16; harness_selftest 390-a-registered-suite-must-account every registered suite has a file 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account nor no for every one of them 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account opposite errors do not cancel: both directions are reported 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account premise: a lib.sh accounting line is seen by the narrow reader 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account premise: a private tally is NOT seen by the narrow reader 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account premise: and a log with neither is seen by neither 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account premise: and produced exactly one accounting line to be read 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account premise: and so is the wide reader it is paired with 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account premise: and that count excludes the definition line, which mentions it 15;16;17;18;19 never - @@ -1001,7 +1001,7 @@ harness_selftest 390-a-registered-suite-must-account the identity catches comm r harness_selftest 390-a-registered-suite-must-account the own-mechanism difference names the suite the readers disagree about 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account the partition over the real suite list adds up 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account the population partitions, and prints inputs == sum(buckets) 15;16;17;18;19 never - -harness_selftest 390-a-registered-suite-must-account the reader accepts the line the producer actually emits 15;16;17;18;19 never - +harness_selftest 390-a-registered-suite-must-account the reader accepts the line the producer actually emits 15;16;17;18;19 2026-10-13 part 590's reader of a producer's accounting line answers 'terminated' where it found the line harness_selftest 390-a-registered-suite-must-account the reader does not answer yes for every registered suite 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account the reconciliation prints inputs == sum(buckets) 15;16;17;18;19 never - harness_selftest 390-a-registered-suite-must-account the record cannot introduce a suite the source never declared 15;16;17;18;19 never - @@ -1509,14 +1509,14 @@ harness_selftest 530-a-record-must-name-its-major premise: the runner defines th harness_selftest 530-a-record-must-name-its-major the runner calls the reader over every suite's log 15;16;17;18;19 never - harness_selftest 530-a-record-must-name-its-major the word in a REASON is not a record that names no major 15;16;17;18;19 never - harness_selftest 540-an-arm-must-carry-its-measurement a comment quoting an arm is not an instance of one 15;16;17;18;19 2026-09-24 whole-line comments read as code again, so a comment QUOTING a recorder call is swept as an instance of it -harness_selftest 540-an-arm-must-carry-its-measurement a new arm that cannot say what it measured is refused by name 15;16;17;18;19 never - -harness_selftest 540-an-arm-must-carry-its-measurement a repaired arm must have its row removed, so the list only shrinks 15;16;17;18;19 never - -harness_selftest 540-an-arm-must-carry-its-measurement control: a determinate or carrying arm is not swept up 15;16;17;18;19 never - -harness_selftest 540-an-arm-must-carry-its-measurement control: a determinate or carrying awk arm is not swept up 15;16;17;18;19 never - +harness_selftest 540-an-arm-must-carry-its-measurement a new arm that cannot say what it measured is refused by name 15;16;17;18;19 2026-10-12 part 540's awk sweep never reports an indeterminate verdict (the print guarded by 0);part 540's awk_determinate treats a comparison against > 0 as indeterminate (return 1 made return 0);part 540's sweep stops skipping arms whose text ends in $ (the awk 'if (arms ~ /\$/) next' made 'if (0) next') +harness_selftest 540-an-arm-must-carry-its-measurement a repaired arm must have its row removed, so the list only shrinks 15;16;17;18;19 2026-10-12 part 540's awk sweep never reports an indeterminate verdict (the print guarded by 0);part 540's sweep stops skipping arms whose text ends in $ (the awk 'if (arms ~ /\$/) next' made 'if (0) next') +harness_selftest 540-an-arm-must-carry-its-measurement control: a determinate or carrying arm is not swept up 15;16;17;18;19 2026-10-12 part 540's sweep stops skipping arms whose text ends in $ (the awk 'if (arms ~ /\$/) next' made 'if (0) next') +harness_selftest 540-an-arm-must-carry-its-measurement control: a determinate or carrying awk arm is not swept up 15;16;17;18;19 2026-10-12 part 540's awk sweep never reports an indeterminate verdict (the print guarded by 0);part 540's awk_determinate treats a comparison against > 0 as indeterminate (return 1 made return 0) harness_selftest 540-an-arm-must-carry-its-measurement control: the carve-outs hold and the innocent arm above the helper is not named 15;16;17;18;19 2026-09-24 else echo 0; fi)` is invisible again (mutation B, the same-line recorder conjunct removed from the `[` rule, reddens the SAME two arms -- they are not independent); then echo 1;the shell if/then/else spelling removed from the matcher, so `$(if [ C ] harness_selftest 540-an-arm-must-carry-its-measurement control: the sweep sees a shell if/then/else that discards its operand 15;16;17;18;19 2026-09-24 else echo 0; fi)` is invisible again (mutation B, the same-line recorder conjunct removed from the `[` rule, reddens the SAME two arms -- they are not independent); then echo 1;the shell if/then/else spelling removed from the matcher, so `$(if [ C ] -harness_selftest 540-an-arm-must-carry-its-measurement control: the sweep sees a threshold arm and a floor arm 15;16;17;18;19 never - -harness_selftest 540-an-arm-must-carry-its-measurement control: the sweep sees an awk verdict that discards its operands 15;16;17;18;19 never - +harness_selftest 540-an-arm-must-carry-its-measurement control: the sweep sees a threshold arm and a floor arm 15;16;17;18;19 2026-10-12 part 540's sweep stops skipping arms whose text ends in $ (the awk 'if (arms ~ /\$/) next' made 'if (0) next') +harness_selftest 540-an-arm-must-carry-its-measurement control: the sweep sees an awk verdict that discards its operands 15;16;17;18;19 2026-10-12 part 540's awk sweep never reports an indeterminate verdict (the print guarded by 0);part 540's awk_determinate treats a comparison against > 0 as indeterminate (return 1 made return 0) harness_selftest 540-an-arm-must-carry-its-measurement premise: the comment fixture quotes a whole recorder call, not a fragment 15;16;17;18;19 never - harness_selftest 540-an-arm-must-carry-its-measurement premise: the sweep read the corpus and classified arms in it 15;16;17;18;19 never - harness_selftest 550-a-header-edit-must-rebuild and the dependency files are ignored, so a built tree is still clean 15;16;17;18;19 never - @@ -1594,14 +1594,14 @@ harness_selftest 580-a-hand-rebuild-must-record the hand rebuild tool records wh harness_selftest 580-a-hand-rebuild-must-record the recorder refuses when it is not told what was installed 15;16;17;18;19 2026-09-23 the argument guard removed from pgc_record_source_stamp harness_selftest 580-a-hand-rebuild-must-record the stack canary object is exempt, whatever the architecture calls it 15;16;17;18;19 2026-10-12 pgc_symbol_is_toolchain deleted from the real lib.sh;the symbol exemption matches nothing, so every toolchain name rebuild.sh has always ignored is reported as an unresolved symbol harness_selftest 580-a-hand-rebuild-must-record without the exemption it refuses EARLIER, naming the missing function 15;16;17;18;19 2026-09-25 rebuild.sh's fail-closed assertion is removed, so a missing exemption function leaves the undefined list empty and the check reports success -harness_selftest 590-a-declared-suite-must-account a completed suite still reads as having reached its summary 15;16;17;18;19 never - +harness_selftest 590-a-declared-suite-must-account a completed suite still reads as having reached its summary 15;16;17;18;19 2026-10-13 part 590's reader of a producer's accounting line answers 'terminated' where it found the line harness_selftest 590-a-declared-suite-must-account a suite that DID reach its summary is not given a second one 15;16;17;18;19 2026-09-23 the EXIT trap reverted to the bare pgc_teardown, so the eight pgc_setup exits emit no accounting harness_selftest 590-a-declared-suite-must-account a suite that never reached its summary is given the accounting it owes 15;16;17;18;19 2026-09-23 the EXIT trap reverted to the bare pgc_teardown, so the eight pgc_setup exits emit no accounting harness_selftest 590-a-declared-suite-must-account a terminated suite reads as terminated, not as a completed one 15;16;17;18;19 2026-09-23 pgc_log_shows_accounting folded back to two values, so a terminated log reads as a completed one -harness_selftest 590-a-declared-suite-must-account and a log with no accounting still reads as none 15;16;17;18;19 never - +harness_selftest 590-a-declared-suite-must-account and a log with no accounting still reads as none 15;16;17;18;19 2026-10-13 part 590's narrow reader answers yes where it found no accounting line harness_selftest 590-a-declared-suite-must-account and it is marked TERMINATED, so a reader can tell it from a full run 15;16;17;18;19 2026-09-23 the EXIT trap reverted to the bare pgc_teardown, so the eight pgc_setup exits emit no accounting harness_selftest 590-a-declared-suite-must-account and nothing still arms the bare teardown 15;16;17;18;19 2026-09-23 the EXIT trap reverted to the bare pgc_teardown, so the eight pgc_setup exits emit no accounting -harness_selftest 590-a-declared-suite-must-account and pgc_setup still calls pgc_summary on none of them 15;16;17;18;19 never - +harness_selftest 590-a-declared-suite-must-account and pgc_setup still calls pgc_summary on none of them 15;16;17;18;19 2026-10-12 lib.sh's pgc_setup calls pgc_summary before one of its exit 1 paths harness_selftest 590-a-declared-suite-must-account every clean exit in a declared suite reaches its summary first 15;16;17;18;19 never - harness_selftest 590-a-declared-suite-must-account premise: declared suites do have clean exits of their own to check 15;16;17;18;19 never - harness_selftest 590-a-declared-suite-must-account premise: lib.sh is where the exits and the trap both live 15;16;17;18;19 2026-09-23 the EXIT trap reverted to the bare pgc_teardown, so the eight pgc_setup exits emit no accounting diff --git a/test/check_ledger_budget.txt b/test/check_ledger_budget.txt index b0577f4d..3d758c7e 100644 --- a/test/check_ledger_budget.txt +++ b/test/check_ledger_budget.txt @@ -1347,4 +1347,27 @@ suites_not_covered 247 # never 1700 + 5 = 1705 # dated 272 + 7 = 279 # 1705 + 279 == 1984 -checks_never_observed_red 1705 +# +# #1236 follow-up (parts 540 and 590): 1705 -> 1684. Six mutations of part 540's +# sweep and part 590's readers, each run on all five majors, merged one log at a +# time with --mutation and --target. They date 21 existing checks: 6 in part 540, +# 3 in part 590 and 12 in part 390, which 590's mutations also redden. The logs +# were run on c1e253f; between it and this base, test/selftest/{390,540,590}* +# are unchanged and lib.sh changed only in pgc_skip's pyarrow branch, which +# these parts do not read. All 21 names exist in a clean run on #1286's tree. +# The logs also carried three names #1284 had since renamed (190 x1, 570 x2); +# merge added them back as never rows and they were removed again, as #1284 did. +# orphan-scan against that clean run: orphans=0. +# +# ledger rows 1984 + 0 = 1984 +# never 1705 - 21 = 1684 +# dated 279 + 21 = 300 +# 1684 + 300 == 1984 +# +# Of the 21, three were 'premise:' checks in part 390 that a 590 mutation +# reddened; by #1236 they are arms, so the prefix was dropped (OffgridwithJD's +# review of #1313). The old-name rows were removed and the new names dated from +# fresh runs on this tree: a clean run (1223/1223) and both 590 mutations, on +# each of 15-19, merged with --mutation and --target. Those runs also re-observe +# 20 of the other dated rows, whose last-observed-red date moves to 2026-10-13. +checks_never_observed_red 1684 diff --git a/test/selftest/390-a-registered-suite-must-account.sh b/test/selftest/390-a-registered-suite-must-account.sh index f2ff7f22..d1be153c 100644 --- a/test/selftest/390-a-registered-suite-must-account.sh +++ b/test/selftest/390-a-registered-suite-must-account.sh @@ -669,16 +669,22 @@ _o28="$PGC_WORKDIR/acc928"; mkdir -p "$_o28" # which is precisely the job of a premise that asserts a fixture really is in the # state the test needs. Without it the two readers would have agreed on this log for # the wrong reason and the arm about their disagreement would have been vacuous. +# +# THREE OF THE CHECKS BELOW ARE ARMS, NOT PREMISES. They call run_all_versions.sh's +# own readers, so a change to those readers reddens them: two mutations of the +# narrow reader did, on all five majors (#1313). A check a repository change can +# redden is not a premise (#1236), so they carry no prefix. They measure the +# readers part 590 also drives, which is why 590's mutations redden part 390. printf 'accounting: 3 passed + 0 failed + 0 unrunnable + 0 skipped = 3\nx.sh: PASSED\n' > "$_o28/libsh.log" printf 'checks run: 9\nowntally.sh: PASSED\n' > "$_o28/own.log" printf 'some output\nPASSED\n' > "$_o28/neither.log" -check "premise: a lib.sh accounting line is seen by the narrow reader" \ +check "a lib.sh accounting line is seen by the narrow reader" \ "$(pgc_log_shows_accounting "$_o28/libsh.log")" "yes" -check "premise: a private tally is NOT seen by the narrow reader" \ +check "a private tally is NOT seen by the narrow reader" \ "$(pgc_log_shows_accounting "$_o28/own.log")" "no" check "premise: but IS seen by the wide one, which is where the 2 came from" \ "$(pgc_log_shows_any_accounting "$_o28/own.log")" "yes" -check "premise: and a log with neither is seen by neither" \ +check "and a log with neither is seen by neither" \ "$(pgc_log_shows_any_accounting "$_o28/neither.log")$(pgc_log_shows_accounting "$_o28/neither.log")" "nono" # The difference names the private-tally suite and nothing else.