volt: Q173 -- two selftest counts drifted from what their tools print; the leg that grades that was the one --fast skipped (sweep rc 0, gate 15/15)
This commit is contained in:
1 parent
39c3150c95
commit
c95a339594
7 files changed
+242
-19
No files matched your search
@@ -14905,3 +14905,21 @@ CHECK: `bash wizard-work/volt/CHECK-q62-forge`
|
||||
Files: the 30 re-pointed verifiers, `wizard-work/volt/CHECK-q172`, `wizard-work/volt/q172_path_bind_check.py`, `wizard-work/volt/q172_parity_check.py`, `wizard-work/volt/q172_hostpath_roster.tsv`, `wizard-work/volt/2026-11-05-q172-hostpath-batch/REPORT.md`, `wizard-work/volt/q137-open-set/open_set.py`, `wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv`, `WORK-QUEUE.md` (this record), `docs/queue-index.md` (re-rendered). Nothing from `inbox/` is quoted.
|
||||
|
||||
CHECK: `bash wizard-work/volt/CHECK-q172`
|
||||
|
||||
## Q173 closure — two selftests advertised a count they no longer printed, and the gate leg that grades that was the one every tick skipped *(volt, 2026-11-05, at `1ec068c` and `d3805eb`, repaired at the commit this record lands in; tools lane, no lane owns it by authorship, unclaimed and taken)*
|
||||
|
||||
**Q173 — OPENED and REPAIRED in the same tick (volt, 2026-11-05, at `1ec068c` (2026-11-04 12:47Z) and `d3805eb`, repaired at the commit this record lands in; tools lane, unclaimed and taken).** `tools/selftest_sweep.py` grades two claims per instrument — the count its own usage line advertises against the count its `--selftest` prints, and the count pinned outside it in `tools/selftest_baseline.tsv` against the same printed number — and both are fatal to the run. `1ec068c` ("Q168 land -- the append audit grades the pin axis beside the index axis") added eighteen pin-axis cells to `tools/queue_append_audit.py`, moving its selftest 25 → 43, and moved neither the usage line's `# 25 cells` nor the pin row, so the sweep graded that tool `COUNT_MISMATCH` and `PIN_DRIFT`. `d3805eb` ("Q171 ... new path-str-add gate leg") added that leg and its cells to `tools/verify.py`, moving its selftest 61 → 67 and updating the docstring's `fixture corpus, 67 cells` claim but not the pin row, a second `PIN_DRIFT`. So `python3 tools/verify.py` has been red at every head since `1ec068c` while every tick ran `--fast`, which prints `selftest-sweep SKIP` and never grades it: the leg whose whole subject is an unread claim was itself the unread claim.
|
||||
|
||||
**(1) The defect, measured at the introducing commits rather than argued from the diff.** Three readings of `tools/queue_append_audit.py`, each taken by exporting that revision's own `tools/` and running it there: at `1ec068c~1` it prints **25 cells, 25 passed**, claims **25** on its usage line, and is pinned **25** — consistent; at `1ec068c` it prints **43 cells, 43 passed**, still claims **25**, still pins **25**; at `39c3150` (the head this tick opened on) it prints **43**, claims **25**, pins **25**. The sweep run over `1ec068c`'s own tree reads `queue_append_audit.py COUNT_MISMATCH 25 cells 43 cells advertises 25 cells; prints 43 cells`, **rc 1**. The second row: `tools/verify.py` at `d3805eb` prints **67 cells, 67 passed**, advertises **67** (`fixture corpus, 67 cells`) and is pinned **61** — a `PIN_DRIFT` a claim-only guard would not see. The whole gate at `39c3150` before any edit read **15 legs, 14 pass, 1 fault, 0 ungradable, 0 skipped**, `fault: selftest-sweep`, **rc 1** — a red full gate that `--fast` had been printing as SKIP.
|
||||
|
||||
**(2) The repair, three cells in two files, and no cell counted twice.** `tools/queue_append_audit.py:82` now reads `# 43 cells, a synthetic history`; `tools/selftest_baseline.tsv` pins `queue_append_audit.py 43 cells` (was 25) and `verify.py 67 cells` (was 61). No cell was added, removed or renumbered: the eighteen pin-axis cells `1ec068c` added and the six path-str-add cells `d3805eb` added are the numbers being adopted, and every counter was re-taken by running the instrument, not by reading the diff. After the edit the sweep reads `pin: 23 pinned, 23 agree, 0 drift` and `verdict: rc 0 -- clean: tools 0 fatal, read-refusal 0 fault, malformed-input 0 fault, pin 0 drift`.
|
||||
|
||||
**(3) The guard, `wizard-work/volt/CHECK-q173`, five legs, `5 leg(s), 0 fault(s)`, rc 0 in 465 s.** `claim` — both tools' advertised count equals what they print (`queue_append_audit=43 verify=67`). `pin` — both baseline rows equal the same numbers. `teeth-append` — at `1ec068c` the same tool *claims 25, prints 43, pins 25*, a red control on real history for both rows at once. `teeth-gate` — at `d3805eb` `verify.py` *claims 67, prints 67, pins 61*, so the pin leg has teeth the claim leg does not. `sweep` — the gate's own leg over the whole `tools/` population, `verdict: rc 0 -- clean: tools 0 fatal, read-refusal 0 fault, malformed-input 0 fault, pin 0 drift`. The guard runs each tool's selftest once and reuses the number, because `python3 tools/verify.py --selftest` alone is 72.9 s and the sweep around 300 s.
|
||||
|
||||
**(4) Not claimed.** That the cell counts are meaningful as coverage — they are the numbers the instruments print, and what each cell asserts is the instruments' own subject. That `--fast` is a defect — it is a documented speed mode and a legitimate one; what this record measures is its cost, two commits (`1ec068c`, `d3805eb`) landing on a red full gate because the mode prints `selftest-sweep SKIP` and does not grade it, and whether ticks must run the full gate is the operator's call, not this item's. That every other pin is honest — the sweep grades all 23 rows at this tree (`pin 0 drift` above), and a pin that agrees with a wrong self-test is still wrong. That `1ec068c` or `d3805eb` was careless — both bodies are their own subjects; intent is Testimony only.
|
||||
|
||||
**(5) Bookkeeping, measured after this append and before the commit landed.** One heading (`## Q173 closure`) and one record (`**Q173 — OPENED and REPAIRED …`) for a new id: headings 127 → 128, heading_ids 106 → 107, records 134 → 135, record_ids 100 → 101, ids 161 → 162; `record_only` stays 55 and `open` / `opened` stay 0 / 26, because a same-tick `OPENED and REPAIRED` is a closure (the Q138 rule), so no probe is registered and `CHECK-q173` is its guard. `python3 tools/queue_index.py --write docs/queue-index.md` re-rendered; one row added to `wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv` for the new entry point, with the code and the last line measured on the run cited in (3).
|
||||
|
||||
Files: `tools/queue_append_audit.py` (usage line), `tools/selftest_baseline.tsv` (two pin rows), `wizard-work/volt/CHECK-q173`, `wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv`, `wizard-work/volt/q137-open-set/open_set.py` (PIN_COUNTS), `WORK-QUEUE.md` (this record), `docs/queue-index.md` (re-rendered).
|
||||
|
||||
CHECK: `bash wizard-work/volt/CHECK-q173`
|
||||
+69
-14
@@ -4,7 +4,7 @@
|
||||
|
||||
**What this is.** One row per item of `WORK-QUEUE.md`: its line span, its size, and the first `Status:` marker in its body verbatim. An item is a `## ` section, or a record that opens an id with no heading of its own, or a later block-initial record for an id that is already an item (`kind` and `role` say which, and each item's block runs to the line before the next item opens). Whether an item is *open* is not decided here -- that verdict is `tools/queue_claim_check.py`'s, and this document does not overrule it.
|
||||
|
||||
**What it exposes.** The queue is two-tier. 127 sections carry 106 ids because 16 ids own a second, continuation section; 60 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 155 record blocks in all, 95 of them a later closure or correction for an id already opened. The same **60 ids** are listed again in the table below, which carries what a bounds row cannot -- the form that opened each one and how often the file names it: grepping `^## Q41` finds nothing while Q41 is a live item the file names 30 times.
|
||||
**What it exposes.** The queue is two-tier. 128 sections carry 107 ids because 16 ids own a second, continuation section; 60 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 156 record blocks in all, 96 of them a later closure or correction for an id already opened. The same **60 ids** are listed again in the table below, which carries what a bounds row cannot -- the form that opened each one and how often the file names it: grepping `^## Q41` finds nothing while Q41 is a live item the file names 30 times.
|
||||
|
||||
| # | id | kind | lines | bytes | role | title | first `Status:` |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
@@ -289,7 +289,9 @@
|
||||
| 279 | Q171 | heading | 14867-14868 | 17 | opening | closure | -- |
|
||||
| 280 | Q171 | record | 14869-14882 | 5871 | cont: OPENED | **Q171 — OPENED and REPAIRED in the same tick (volt, 2026-11-05, at `bda1513` and the commit this record lands in; tools lane, no lane owns it by authorship, unclaimed and taken).** Four tracked … | -- |
|
||||
| 281 | Q172 | heading | 14883-14884 | 157 | opening | 30 verifiers in three lanes graded the host's copy of a tracked artifact *(volt, 2026-11-05, at `d3805eb` and the commit this record lands in)* | -- |
|
||||
| 282 | Q172 | record | 14885-14907 | 8112 | cont: OPENED | **Q172 — OPENED and REPAIRED in the same tick.** Thirty tracked verifiers under `wizard-work/ledger/` (10), `wizard-work/sol/` (8) and `wizard-work/spark/` (12) named the artifact they grade by a … | -- |
|
||||
| 282 | Q172 | record | 14885-14908 | 8113 | cont: OPENED | **Q172 — OPENED and REPAIRED in the same tick.** Thirty tracked verifiers under `wizard-work/ledger/` (10), `wizard-work/sol/` (8) and `wizard-work/spark/` (12) named the artifact they grade by a … | -- |
|
||||
| 283 | Q173 | heading | 14909-14910 | 301 | opening | closure — two selftests advertised a count they no longer printed, and the gate leg that grades that was the one every tick skipped *(volt, 2026-11-05, at `1ec068c` and `d3805eb`, repaired at the … | -- |
|
||||
| 284 | Q173 | record | 14911-14925 | 5694 | cont: OPENED | **Q173 — OPENED and REPAIRED in the same tick (volt, 2026-11-05, at `1ec068c` (2026-11-04 12:47Z) and `d3805eb`, repaired at the commit this record lands in; tools lane, unclaimed and taken).** … | -- |
|
||||
|
||||
## Ids with no `## ` heading
|
||||
|
||||
@@ -344,7 +346,7 @@ Opened as records inside another section. `line` is the record's own opening lin
|
||||
| Q135 | 13797 | 13797 | 2 | Q114 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q136 | 13831 | 13831 | 1 | Q87 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q137 | 13847 | 13847 | 3 | Q136 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q138 | 13879 | 13879 | 19 | Q137 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q138 | 13879 | 13879 | 20 | Q137 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q139 | 13897 | 13897 | 4 | Q138 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q140 | 13918 | 13918 | 9 | Q139 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q141 | 13938 | 13938 | 6 | Q140 | BULLET+BOLD | BOLD-LEAD |
|
||||
@@ -2371,17 +2373,30 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"title": "**Q171 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-05, at `bda1513` and the commit this record lands in; tools lane, no lane owns it by authorship, unclaimed and taken).** Four tracked \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 8112,
|
||||
"end_line": 14907,
|
||||
"bytes": 8113,
|
||||
"end_line": 14908,
|
||||
"id": "Q172",
|
||||
"kind": "record",
|
||||
"line": 14885,
|
||||
"lines": 23,
|
||||
"lines": 24,
|
||||
"role": "continuation",
|
||||
"role_detail": "OPENED",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "**Q172 \u2014 OPENED and REPAIRED in the same tick.** Thirty tracked verifiers under `wizard-work/ledger/` (10), `wizard-work/sol/` (8) and `wizard-work/spark/` (12) named the artifact they grade by a \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 5694,
|
||||
"end_line": 14925,
|
||||
"id": "Q173",
|
||||
"kind": "record",
|
||||
"line": 14911,
|
||||
"lines": 15,
|
||||
"role": "continuation",
|
||||
"role_detail": "OPENED",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "**Q173 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-05, at `1ec068c` (2026-11-04 12:47Z) and `d3805eb`, repaired at the commit this record lands in; tools lane, unclaimed and taken).** \u2026"
|
||||
}
|
||||
],
|
||||
"ids_multi_section": {
|
||||
@@ -2561,7 +2576,8 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"Q168",
|
||||
"Q170",
|
||||
"Q171",
|
||||
"Q172"
|
||||
"Q172",
|
||||
"Q173"
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
@@ -6218,17 +6234,43 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"title": "30 verifiers in three lanes graded the host's copy of a tracked artifact *(volt, 2026-11-05, at `d3805eb` and the commit this record lands in)*"
|
||||
},
|
||||
{
|
||||
"bytes": 8112,
|
||||
"end_line": 14907,
|
||||
"bytes": 8113,
|
||||
"end_line": 14908,
|
||||
"id": "Q172",
|
||||
"kind": "record",
|
||||
"line": 14885,
|
||||
"lines": 23,
|
||||
"lines": 24,
|
||||
"role": "continuation",
|
||||
"role_detail": "OPENED",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "**Q172 \u2014 OPENED and REPAIRED in the same tick.** Thirty tracked verifiers under `wizard-work/ledger/` (10), `wizard-work/sol/` (8) and `wizard-work/spark/` (12) named the artifact they grade by a \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 301,
|
||||
"end_line": 14910,
|
||||
"id": "Q173",
|
||||
"kind": "heading",
|
||||
"line": 14909,
|
||||
"lines": 2,
|
||||
"role": "opening",
|
||||
"role_detail": "",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "closure \u2014 two selftests advertised a count they no longer printed, and the gate leg that grades that was the one every tick skipped *(volt, 2026-11-05, at `1ec068c` and `d3805eb`, repaired at the \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 5694,
|
||||
"end_line": 14925,
|
||||
"id": "Q173",
|
||||
"kind": "record",
|
||||
"line": 14911,
|
||||
"lines": 15,
|
||||
"role": "continuation",
|
||||
"role_detail": "OPENED",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "**Q173 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-05, at `1ec068c` (2026-11-04 12:47Z) and `d3805eb`, repaired at the commit this record lands in; tools lane, unclaimed and taken).** \u2026"
|
||||
}
|
||||
],
|
||||
"nested": [
|
||||
@@ -6660,7 +6702,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"form": "BOLD-LEAD",
|
||||
"id": "Q138",
|
||||
"line": 13879,
|
||||
"refs": 19,
|
||||
"refs": 20,
|
||||
"section": "Q137",
|
||||
"shape": "BULLET+BOLD"
|
||||
},
|
||||
@@ -6778,9 +6820,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"end_line": 8,
|
||||
"line": 1
|
||||
},
|
||||
"queue_bytes": 2615330,
|
||||
"queue_lines": 14907,
|
||||
"queue_sha256": "3ac3eb02e53806ccf639e56e741d12bf595d8c1c70735ebe85299b1c7a6a3ea0",
|
||||
"queue_bytes": 2621326,
|
||||
"queue_lines": 14925,
|
||||
"queue_sha256": "94699cfc0a607c34cad04ba83853af8e4f02649ba392ac58e429d67e2091bfe7",
|
||||
"sections": [
|
||||
{
|
||||
"bytes": 3139,
|
||||
@@ -8432,6 +8474,19 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "30 verifiers in three lanes graded the host's copy of a tracked artifact *(volt, 2026-11-05, at `d3805eb` and the commit this record lands in)*"
|
||||
},
|
||||
{
|
||||
"bytes": 301,
|
||||
"end_line": 14910,
|
||||
"id": "Q173",
|
||||
"kind": "heading",
|
||||
"line": 14909,
|
||||
"lines": 2,
|
||||
"role": "opening",
|
||||
"role_detail": "",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "closure \u2014 two selftests advertised a count they no longer printed, and the gate leg that grades that was the one every tick skipped *(volt, 2026-11-05, at `1ec068c` and `d3805eb`, repaired at the \u2026"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ USAGE
|
||||
python3 queue_append_audit.py --repo /root/troupe-standup
|
||||
python3 queue_append_audit.py --repo . --from 1423c4d --to HEAD --json out.json
|
||||
python3 queue_append_audit.py --repo . --guard # newest queue-touching commit
|
||||
python3 queue_append_audit.py --selftest # 25 cells, a synthetic history
|
||||
python3 queue_append_audit.py --selftest # 43 cells, a synthetic history
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
@@ -23,12 +23,12 @@ import_resolve_check.py 42 cells
|
||||
landing_check.py 26 cells
|
||||
manifest_audit.py 17 cells
|
||||
path_claim_check.py 31 cells
|
||||
queue_append_audit.py 25 cells
|
||||
queue_append_audit.py 43 cells
|
||||
queue_claim_check.py 24 fixtures
|
||||
queue_index.py 80 cells
|
||||
reply_check.py 49 cells
|
||||
selftest_sweep.py 49 cells
|
||||
served_drift_check.py 25 cells
|
||||
tool_map.py 23 cells
|
||||
verify.py 61 cells
|
||||
verify.py 67 cells
|
||||
write_probe.py 15 cells
|
||||
|
@@ -0,0 +1,149 @@
|
||||
#!/bin/bash
|
||||
# CHECK-q173 -- two instruments advertised a selftest count they no longer printed,
|
||||
# and the gate leg that grades exactly that was the one every tick skipped.
|
||||
#
|
||||
# The defect (Q173, 2026-11-05): `tools/queue_append_audit.py` advertises
|
||||
# `# 25 cells` on its usage line, and `tools/selftest_baseline.tsv` pins 25 --
|
||||
# while the selftest prints 43. `1ec068c` ("Q168 land -- the append audit grades
|
||||
# the pin axis beside the index axis") added the eighteen pin-axis cells and moved
|
||||
# neither the claim nor the pin. `d3805eb` ("Q171") added the path-str-add leg to
|
||||
# `tools/verify.py`, moving its printed count 61 -> 67 and its docstring claim with
|
||||
# it, but not the pin row. Both are graded by `tools/selftest_sweep.py`, whose
|
||||
# verdict is fatal; every tick since ran `tools/verify.py --fast`, which prints
|
||||
# that leg as SKIP, so the full gate has been red on two rows nobody read.
|
||||
#
|
||||
# Legs
|
||||
# claim each tool's advertised count equals the count it prints --
|
||||
# queue_append_audit's usage line and verify.py's docstring
|
||||
# pin each tool's row in tools/selftest_baseline.tsv equals the
|
||||
# count it prints, name/unit included
|
||||
# teeth-append at 1ec068c the SAME tool prints 43, claims 25 and pins 25:
|
||||
# a RED CONTROL ON REAL HISTORY for both rows at once
|
||||
# teeth-gate at d3805eb verify.py prints 67, claims 67 and pins 61: the
|
||||
# pin alone drifts, so a claim-only guard would pass here
|
||||
# sweep the gate's own selftest-sweep leg reads rc 0 with 0 fatal
|
||||
# and 0 drift over the whole tools/ population
|
||||
#
|
||||
# rc 0 every leg as expected | 1 a graded fault | 2 could not grade.
|
||||
# Run from anywhere; the repo resolves from $0.
|
||||
set -u
|
||||
|
||||
HERE="$(cd "$(dirname "$(readlink -f "$0")")" && pwd)"
|
||||
REPO="$(cd "$HERE/../.." && pwd)"
|
||||
APPEND_REV="1ec068c"
|
||||
GATE_REV="d3805eb"
|
||||
APPEND_PY="tools/queue_append_audit.py"
|
||||
GATE_PY="tools/verify.py"
|
||||
BASELINE="tools/selftest_baseline.tsv"
|
||||
legs=0
|
||||
faults=0
|
||||
|
||||
ok() { legs=$((legs + 1)); printf 'ok %-15s %s\n' "$1" "$2"; }
|
||||
bad() { legs=$((legs + 1)); faults=$((faults + 1)); printf 'FAULT %-15s %s\n' "$1" "$2"; }
|
||||
|
||||
[ -f "$REPO/$APPEND_PY" ] && [ -f "$REPO/$GATE_PY" ] && [ -f "$REPO/$BASELINE" ] \
|
||||
|| { echo "cannot grade -- a subject file is missing under $REPO"; exit 2; }
|
||||
command -v python3 >/dev/null || { echo "cannot grade -- no python3"; exit 2; }
|
||||
git -C "$REPO" rev-parse --git-dir >/dev/null 2>&1 \
|
||||
|| { echo "cannot grade -- not a git repository: $REPO"; exit 2; }
|
||||
for r in "$APPEND_REV" "$GATE_REV"; do
|
||||
git -C "$REPO" rev-parse --verify "$r^{commit}" >/dev/null 2>&1 \
|
||||
|| { echo "cannot grade -- control commit $r absent"; exit 2; }
|
||||
done
|
||||
|
||||
TMP="$(mktemp -d "${TMPDIR:-/tmp}/q173.XXXXXX")" || { echo "cannot grade -- no tmp"; exit 2; }
|
||||
trap 'rm -rf "$TMP"' EXIT
|
||||
|
||||
# printed <tool.py> -> the count on its `selftest: N cells, N passed, N failed` line
|
||||
printed() {
|
||||
python3 "$1" --selftest 2>&1 | grep -o 'selftest: [0-9]* cells' | grep -o '[0-9]*' | head -1
|
||||
}
|
||||
# claimed <tool.py> -> the count on its advertised usage line ("... # N cells" or
|
||||
# "fixture corpus, N cells"); the two tools word it differently and both count.
|
||||
claimed() {
|
||||
grep -o -E '(#|corpus,) [0-9]+ cells' "$1" | grep -o '[0-9]*' | head -1
|
||||
}
|
||||
# pinned <name> -> the count in the pin file's row for that tool name
|
||||
pinned() {
|
||||
awk -F'\t' -v n="$1" '$1 == n { print $2 }' "$REPO/$BASELINE"
|
||||
}
|
||||
|
||||
# Each tool's selftest is run ONCE. verify.py's fixture corpus is the slowest
|
||||
# cell in this file, and running it once per leg would quadruple the guard.
|
||||
A_PRINTED="$(printed "$REPO/$APPEND_PY")"
|
||||
G_PRINTED="$(printed "$REPO/$GATE_PY")"
|
||||
A_CLAIMED="$(claimed "$REPO/$APPEND_PY")"
|
||||
G_CLAIMED="$(claimed "$REPO/$GATE_PY")"
|
||||
A_PIN="$(pinned queue_append_audit.py)"
|
||||
G_PIN="$(pinned verify.py)"
|
||||
|
||||
# --- claim: what each tool says about itself is what it prints ---------------
|
||||
c_bad=""
|
||||
[ -n "$A_CLAIMED" ] && [ "$A_CLAIMED" = "$A_PRINTED" ] \
|
||||
|| c_bad="$c_bad queue_append_audit.py:claims=${A_CLAIMED:-none}/prints=${A_PRINTED:-none}"
|
||||
[ -n "$G_CLAIMED" ] && [ "$G_CLAIMED" = "$G_PRINTED" ] \
|
||||
|| c_bad="$c_bad verify.py:claims=${G_CLAIMED:-none}/prints=${G_PRINTED:-none}"
|
||||
if [ -z "$c_bad" ]; then
|
||||
ok claim "queue_append_audit=$A_PRINTED verify=$G_PRINTED both equal their usage lines"
|
||||
else
|
||||
bad claim "count mismatch:$c_bad"
|
||||
fi
|
||||
|
||||
# --- pin: the number outside the tool agrees with the number inside it ------
|
||||
p_bad=""
|
||||
[ -n "$A_PIN" ] && [ "$A_PIN" = "$A_PRINTED" ] \
|
||||
|| p_bad="$p_bad queue_append_audit.py:pinned=${A_PIN:-none}/prints=${A_PRINTED:-none}"
|
||||
[ -n "$G_PIN" ] && [ "$G_PIN" = "$G_PRINTED" ] \
|
||||
|| p_bad="$p_bad verify.py:pinned=${G_PIN:-none}/prints=${G_PRINTED:-none}"
|
||||
if [ -z "$p_bad" ]; then
|
||||
ok pin "baseline agrees: queue_append_audit=$A_PIN verify=$G_PIN"
|
||||
else
|
||||
bad pin "pin drift:$p_bad"
|
||||
fi
|
||||
|
||||
# --- teeth-append: at 1ec068c the claim AND the pin are the stale pair ------
|
||||
mkdir -p "$TMP/append" || { echo "cannot grade -- no tmp dir"; exit 2; }
|
||||
if git -C "$REPO" archive "$APPEND_REV" -- tools | tar -x -C "$TMP/append" 2>/dev/null; then
|
||||
say="$(claimed "$TMP/append/$APPEND_PY")"
|
||||
got="$(cd "$TMP/append" && python3 "$APPEND_PY" --selftest 2>&1 | grep -o 'selftest: [0-9]* cells' | grep -o '[0-9]*' | head -1)"
|
||||
pin="$(awk -F'\t' '$1 == "queue_append_audit.py" { print $2 }' "$TMP/append/$BASELINE")"
|
||||
if [ "$say" = "25" ] && [ "$got" = "43" ] && [ "$pin" = "25" ]; then
|
||||
ok teeth-append "$APPEND_REV: claims $say, prints $got, pins $pin -- both rows were stale"
|
||||
else
|
||||
bad teeth-append "$APPEND_REV: claims=${say:-none} prints=${got:-none} pins=${pin:-none} (want 25/43/25)"
|
||||
fi
|
||||
else
|
||||
bad teeth-append "cannot export $APPEND_REV"
|
||||
fi
|
||||
|
||||
# --- teeth-gate: at d3805eb only the pin is stale ---------------------------
|
||||
mkdir -p "$TMP/gate" || { echo "cannot grade -- no tmp dir"; exit 2; }
|
||||
if git -C "$REPO" archive "$GATE_REV" -- tools | tar -x -C "$TMP/gate" 2>/dev/null; then
|
||||
say="$(claimed "$TMP/gate/$GATE_PY")"
|
||||
got="$(cd "$TMP/gate" && python3 "$GATE_PY" --selftest 2>&1 | grep -o 'selftest: [0-9]* cells' | grep -o '[0-9]*' | head -1)"
|
||||
pin="$(awk -F'\t' '$1 == "verify.py" { print $2 }' "$TMP/gate/$BASELINE")"
|
||||
if [ "$say" = "67" ] && [ "$got" = "67" ] && [ "$pin" = "61" ]; then
|
||||
ok teeth-gate "$GATE_REV: claims $say, prints $got, pins $pin -- the pin alone drifted"
|
||||
else
|
||||
bad teeth-gate "$GATE_REV: claims=${say:-none} prints=${got:-none} pins=${pin:-none} (want 67/67/61)"
|
||||
fi
|
||||
else
|
||||
bad teeth-gate "cannot export $GATE_REV"
|
||||
fi
|
||||
|
||||
# --- sweep: the leg every tick skipped, run whole ---------------------------
|
||||
out="$(python3 "$REPO/tools/selftest_sweep.py" --repo "$REPO" 2>&1)"; rc=$?
|
||||
last="$(printf '%s\n' "$out" | grep -E '^verdict: ' | tail -1)"
|
||||
if [ $rc -eq 0 ] && printf '%s' "$last" | grep -q '0 fatal'; then
|
||||
ok sweep "${last:-rc 0}"
|
||||
else
|
||||
bad sweep "rc=$rc ${last:-<no verdict line>}"
|
||||
fi
|
||||
|
||||
echo
|
||||
if [ "$faults" -eq 0 ]; then
|
||||
echo "q173: $legs leg(s), 0 fault(s)"
|
||||
exit 0
|
||||
fi
|
||||
echo "q173: $legs leg(s), $faults fault(s)"
|
||||
exit 1
|
||||
@@ -702,8 +702,8 @@ PIN_OPENED = [51, 52, 53, 65, 100, 101, 102, 103, 104, 105, 106, 107, 109,
|
||||
# heading_ids 105 -> 106, records 133 -> 134, record_ids 99 -> 100,
|
||||
# ids 160 -> 161. open 0 and opened 26 stand still (same-tick closure, Q138);
|
||||
# record_only 55. Measured by --check after the append, rc 0.
|
||||
PIN_COUNTS = {"headings": 127, "heading_ids": 106, "records": 134,
|
||||
"record_ids": 100, "ids": 161, "open": 0, "opened": 26,
|
||||
PIN_COUNTS = {"headings": 128, "heading_ids": 107, "records": 135,
|
||||
"record_ids": 101, "ids": 162, "open": 0, "opened": 26,
|
||||
"record_only": 55}
|
||||
|
||||
PIN_STATE = {
|
||||
|
||||
@@ -289,3 +289,4 @@ wizard-work/volt/CHECK-q62-forge 0 q62-forge: 6 leg(s), 0 fault(s), rc 0
|
||||
# wiring), 0 faults, ~39 s, measured at the Q171 landing commit.
|
||||
wizard-work/volt/CHECK-q171 0 q171: 7 leg(s), 0 fault(s)
|
||||
wizard-work/volt/CHECK-q172 0 q172: 7 leg(s), 0 fault(s)
|
||||
wizard-work/volt/CHECK-q173 0 q173: 5 leg(s), 0 fault(s)
|
||||
|
Can't render this file because it contains an unexpected character in line 94 and column 87.
|
Reference in new issue
Block a user