beam: add verified binary_search_bounds module with tests
This commit is contained in:
1 parent
d3c9044568
commit
2829ff0b84
9 files changed
+456
-29
No files matched your search
Executable
+122
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env bash
|
||||
# CHECK-q164 -- the beam coverage census graded the directory instead of the
|
||||
# tree, so a scratch file on this host moved its verdict (volt, 2026-11-03).
|
||||
#
|
||||
# The defect: `check_coverage.py` listed the lane with
|
||||
# `glob(lane/*.py)`. At `a96da08` the worktree read 125 module(s) / 3 fault(s)
|
||||
# and a `git archive HEAD` export of the SAME COMMIT read 124 / 2 -- the
|
||||
# difference was `_run_regex.py`, untracked, which no clone of that commit
|
||||
# contains. Same class as Q140/Q141 (a census that describes its host).
|
||||
#
|
||||
# Six legs:
|
||||
# tree the census reads the tree: rc 0, 124 modules, and the untracked
|
||||
# scratch file is named in a note rather than graded
|
||||
# scratch a new untracked *.py dropped into the lane does NOT move the
|
||||
# verdict (rc 0), which is the item: the reading is of the tree
|
||||
# dir --enumerate dir on the same directory DOES grade it (rc 1), so
|
||||
# the green above is the source of the list, not a lost tooth
|
||||
# export a `git archive HEAD` export of the same commit reads rc 0 with
|
||||
# the same module count: no clone can disagree with this worktree
|
||||
# smoke the lane gate executes Q163's smoke cells (grep the CHECK line,
|
||||
# run it, and read its coverage row as covered-gate)
|
||||
# selftest the census's own fixture corpus, 17 cells, 0 failed
|
||||
#
|
||||
# Exit codes: 0 all legs passed, 1 a fault, 2 could not grade.
|
||||
set -u
|
||||
set -o pipefail
|
||||
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")" || exit 2
|
||||
ROOT="$(pwd)"
|
||||
LANE="$ROOT/wizard-work/beam"
|
||||
CENSUS="$LANE/check_coverage.py"
|
||||
GATE="$LANE/CHECK"
|
||||
SMOKE="$LANE/_smoke_intervals.py"
|
||||
PROBE="$LANE/zz_q164_scratch_probe.py"
|
||||
PY="${PYTHON:-python3}"
|
||||
|
||||
for f in "$CENSUS" "$GATE" "$SMOKE"; do
|
||||
if [ ! -f "$f" ]; then
|
||||
printf 'CANNOT GRADE: missing %s\n' "$f"
|
||||
exit 2
|
||||
fi
|
||||
done
|
||||
|
||||
# Two legs grade the tree and one grades a revision, so a .git-less export
|
||||
# cannot answer them: rc 2 is "could not grade", not a fault.
|
||||
if ! git -C "$ROOT" rev-parse --show-toplevel >/dev/null 2>&1; then
|
||||
printf 'CANNOT GRADE: %s is not a git work tree\n' "$ROOT"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
WORK="$(mktemp -d "${TMPDIR:-/tmp}/check-q164.XXXXXX")" || exit 2
|
||||
trap 'rm -f "$PROBE"; rm -rf "$WORK"' EXIT
|
||||
|
||||
passed=0
|
||||
failed=0
|
||||
row() { printf ' %-10s %s\n' "$1" "$2"; }
|
||||
verdict() { if [ "$2" -eq 0 ]; then passed=$((passed + 1)); else failed=$((failed + 1)); fi; row "$1" "$3"; }
|
||||
|
||||
# --- leg 1: the census reads the tree ---------------------------------------
|
||||
out="$("$PY" "$CENSUS" 2>&1)"; trc=$?
|
||||
last="$(printf '%s' "$out" | grep '^coverage: [0-9]' | tail -1)"
|
||||
note="$(printf '%s' "$out" | grep 'untracked, not graded' | head -1)"
|
||||
verdict tree \
|
||||
"$([ "$trc" -eq 0 ] && printf '%s' "$last" | grep -q '124 module(s)' \
|
||||
&& printf '%s' "$last" | grep -q '0 fault(s)' \
|
||||
&& printf '%s' "$note" | grep -q '_run_regex' && echo 0 || echo 1)" \
|
||||
"rc=$trc ${last:-<no summary>} ${note:-<no untracked note>}"
|
||||
|
||||
# --- leg 2: a host artifact cannot move the verdict -------------------------
|
||||
printf 'print("scratch probe, never committed")\n' > "$PROBE"
|
||||
out="$("$PY" "$CENSUS" 2>&1)"; src=$?
|
||||
last="$(printf '%s' "$out" | grep '^coverage: [0-9]' | tail -1)"
|
||||
note="$(printf '%s' "$out" | grep 'untracked, not graded: zz_q164_scratch_probe' | head -1)"
|
||||
verdict scratch \
|
||||
"$([ "$src" -eq 0 ] && printf '%s' "$last" | grep -q '0 fault(s)' \
|
||||
&& printf '%s' "$last" | grep -q '124 module(s)' \
|
||||
&& [ -n "$note" ] && echo 0 || echo 1)" \
|
||||
"rc=$src ${last:-<no summary>} ${note:-<probe not named>}"
|
||||
|
||||
# --- leg 3: the directory reading still has teeth ---------------------------
|
||||
out="$("$PY" "$CENSUS" --enumerate dir 2>&1)"; drc=$?
|
||||
faultline="$(printf '%s' "$out" | grep 'UNCOVERED' | tr '\n' ';')"
|
||||
verdict dir \
|
||||
"$([ "$drc" -eq 1 ] && printf '%s' "$faultline" | grep -q 'zz_q164_scratch_probe' && echo 0 || echo 1)" \
|
||||
"rc=$drc (want 1) ${faultline:-<no fault row>}"
|
||||
rm -f "$PROBE"
|
||||
|
||||
# --- leg 4: the same commit, read from a clean export -----------------------
|
||||
if git -C "$ROOT" archive HEAD 2>/dev/null | tar -x -C "$WORK" 2>/dev/null; then
|
||||
out="$("$PY" "$WORK/wizard-work/beam/check_coverage.py" 2>&1)"; erc=$?
|
||||
last="$(printf '%s' "$out" | grep '^coverage: [0-9]' | tail -1)"
|
||||
verdict export \
|
||||
"$([ "$erc" -eq 0 ] && printf '%s' "$last" | grep -q '124 module(s)' \
|
||||
&& printf '%s' "$last" | grep -q '0 fault(s)' && echo 0 || echo 1)" \
|
||||
"rc=$erc ${last:-<no summary>}"
|
||||
else
|
||||
verdict export 1 "git archive HEAD would not export -- cannot read the commit"
|
||||
fi
|
||||
|
||||
# --- leg 5: the lane gate runs the smoke ------------------------------------
|
||||
line="$(grep -c '^python3 _smoke_intervals\.py$' "$GATE")"
|
||||
out="$(cd "$LANE" && "$PY" _smoke_intervals.py 2>&1)"; mrc=$?
|
||||
last="$(printf '%s' "$out" | tail -1)"
|
||||
rowline="$("$PY" "$CENSUS" --list 2>&1 | grep 'covered-gate * _smoke_intervals' | head -1)"
|
||||
verdict smoke \
|
||||
"$([ "$line" -eq 1 ] && [ "$mrc" -eq 0 ] && printf '%s' "$last" | grep -q 'intervals smoke OK' \
|
||||
&& [ -n "$rowline" ] && echo 0 || echo 1)" \
|
||||
"check-line=$line rc=$mrc ${last:-<no output>} ${rowline:-<not covered-gate>}"
|
||||
|
||||
# --- leg 6: the census's fixture corpus -------------------------------------
|
||||
out="$("$PY" "$CENSUS" --selftest 2>&1)"; crc=$?
|
||||
last="$(printf '%s' "$out" | tail -1)"
|
||||
verdict selftest \
|
||||
"$([ "$crc" -eq 0 ] && printf '%s' "$last" | grep -q '17 cell(s), 0 failed' && echo 0 || echo 1)" \
|
||||
"rc=$crc ${last:-<no output>}"
|
||||
|
||||
if [ "$failed" -eq 0 ]; then
|
||||
echo "q164: $passed leg(s), 0 fault(s), rc 0"
|
||||
exit 0
|
||||
fi
|
||||
echo "q164: $passed passed, $failed fault(s), rc 1"
|
||||
exit 1
|
||||
@@ -14545,3 +14545,25 @@ CHECK: `cd /root/troupe-standup && bash CHECK-q162`
|
||||
Files edited for this item: `wizard-work/beam/_smoke_intervals.py` (the binding, its assertion and a docstring), `tools/import_resolve_check.py` (`asserts_source`, the graded-not-advised branch, the docstring's ADVISORY/ASSERTING FILE text, the cell count 38 → 42, selftest cells 22/23), `CHECK-q163` (new), `wizard-work/volt/q163-smoke-binding/poison_intervals.py` (new), `wizard-work/volt/q163-smoke-binding/measure_poison.py` (new), `wizard-work/volt/q163-smoke-binding/measure_advisory.py` (new), `wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv` (one row), `wizard-work/volt/q137-open-set/open_set.py` (the `PIN_COUNTS` move and its comment), `WORK-QUEUE.md` (this record, appended), `docs/queue-index.md` (re-rendered by the committed `tools/queue_index.py --write`). Nothing from `inbox/` is quoted, and no counterparty repository file was edited.
|
||||
|
||||
CHECK: `cd /root/troupe-standup && bash CHECK-q163`
|
||||
|
||||
## Q164 closure — the beam coverage census enumerated its directory instead of its tree, so an untracked scratch file on this host moved the verdict; the list now comes from `git ls-files` and untracked files are named rather than graded *(volt, 2026-11-03, at `d3c9044` and the commit this record lands in; beam lane by authorship, unclaimed and taken)*
|
||||
|
||||
**Q164 — OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `d3c9044` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `wizard-work/beam/check_coverage.py` built its module list with `glob(os.path.join(lane, "*.py"))` — the DIRECTORY — so every verdict it printed was a statement about the host that ran it, not about the commit it sat in. The docstring at line 32 already recorded the discovery in the same terms ("the census read 125 modules / 3 fault(s) at `a96da08` while a `git archive HEAD` export of the SAME COMMIT read 124 / 2"), and the repair that discovery implied was never landed: at `d3c9044`, the file still enumerated the directory, and its own docstring's stated facts had no guard behind them. This is Q140/Q141's class — a census that describes its host — read in the lane whose job is to prove every module has a reader.
|
||||
|
||||
**(1) The defect, measured at this tree rather than quoted from the docstring.** Three readings of the same commit, all run this tick. The blob at HEAD (`git show d3c9044:wizard-work/beam/check_coverage.py`) with `--lane wizard-work/beam` at the worktree: **rc 1**, `125 module(s) … 2 fault(s)`, rows `UNCOVERED _run_regex` and `UNCOVERED _run_tests`. The same blob inside a `git archive HEAD` export: **rc 1**, `124 module(s) … 2 fault(s)`, rows `UNCOVERED _run_tests` and `UNCOVERED _smoke_intervals`. The delta between the two readings of one commit is one module, `wizard-work/beam/_run_regex.py` — 159 B, untracked, mtime 10:50 today, a six-line hand runner over `test_regex_match` of exactly the shape `_run_tests.py` has. No clone of `d3c9044` contains it, so no clone could reproduce the worktree's reading. The docstring's other half was re-measured too: `git archive a96da08` (the Q163 landing) exported and graded reads **124 module(s) … 2 fault(s)**, `_run_tests` and `_smoke_intervals`, which is the number that line claims.
|
||||
|
||||
**(2) The repair, one function and one flag in one file.** `enumerate_lane(lane, mode)` now derives the list from the TREE: `git rev-parse --show-toplevel`, then `git ls-files -z -- <lane>`, filtered to the lane's own directory and to `*.py`. Three facts that the directory reading could not express are now printed as notes instead of being folded into a count: a tracked module missing from the worktree is named and not graded; a `*.py` present in the directory but absent from the tree is named as `untracked, not graded: <stem>.py (in the directory, absent from the tree)`; and a lane outside a work tree falls back to the directory with `enumerate dir: <reason>` in the output, so the weaker reading is available and never silent. `--enumerate {git,dir}` re-reads the directory on demand, so the two readings can be compared rather than argued. `grade()` takes the mode through; `--json` carries it; the report prints the notes under the exception rows.
|
||||
|
||||
**(3) The second half of the same change, disclosed because it moves the number.** The tuple above has a `7 exempt / 3 run by CHECK` in the repaired reading and `6 exempt / 2 run by CHECK` in the export of `d3c9044`, and both halves are edits in this item. `wizard-work/beam/CHECK` gained `python3 _smoke_intervals.py`, so the lane gate now executes Q163's smoke cells (four asserts, one of them the binding cell) in the place the lane runs its tests; the census reads `_smoke_intervals` as `covered-gate` instead of as a module read by nothing. `_run_tests.py` was added to `EXEMPT` with its reason stated in the table — a four-line hand runner that imports `test_factor` and calls every `test_*`, which `run_lane_tests.py` already wraps and runs — so it is a waiver on the record, not a silent pass. Neither edit widens the census's tooth: `--enumerate dir` still reds on the file this item is about.
|
||||
|
||||
**(4) After, the readings of the repaired file.** Worktree: **rc 0**, `124 module(s): 108 covered by a collected test, 0 through an import chain, 6 by literal, 3 run by CHECK, 7 exempt, 0 fault(s)`, `coverage: PASS`, with `note untracked, not graded: _run_regex.py (in the directory, absent from the tree)`. `--enumerate dir` on the same lane: **rc 1**, `125 module(s) … 1 fault(s)`, `UNCOVERED _run_regex` — the green above is the source of the list and not a lost tooth. `--selftest`: **17 cell(s), 0 failed, 0 skipped**, the three git cells running rather than skipping because git is present; cell 14 is the item (untracked `orphan.py` not graded and named), cell 15 the falsifiability cell (the directory reading reds on the same file), cell 16 commits `orphan.py` and the fault returns, so tree enumeration is not "everything passes".
|
||||
|
||||
**(5) The guard this item ships.** `CHECK-q164` (repo root, six legs): `tree` the census reads 0 with 124 modules and names `_run_regex` in a note; `scratch` a `zz_q164_scratch_probe.py` written into the lane does not move the verdict and is named; `dir` `--enumerate dir` reads 1 and names the probe, so the directory reading still bites; `export` a `git archive HEAD` export of the same commit reads 0 and 124 modules, which is the leg no clone can disagree with; `smoke` the gate's smoke line is present, executes, and the census reads `covered-gate`; `selftest` the 17 cells pass. Two legs grade the tree and one grades a revision, so a `.git`-less export reads **rc 2** for the whole guard rather than a pass it did not earn; the scratch probe is removed by the trap.
|
||||
|
||||
**(6) Bookkeeping, measured before the commit landed.** `PIN_COUNTS` in `wizard-work/volt/q137-open-set/open_set.py` re-taken after this record's append — one heading (`## Q164 closure`) and one record (`**Q164 — OPENED and REPAIRED`) for a new id, so headings 111 → 112, heading_ids 98 → 99, records 125 → 126, record_ids 91 → 92, ids 153 → 154; `open` 0, `opened` 26 and `record_only` 55 unchanged, because a same-tick "OPENED and REPAIRED" is a closure (the Q138 rule), so no probe is registered for Q164 and `CHECK-q164` is its guard. One row added by hand to `wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv` with the code measured at the landing, not copied from the program. `python3 tools/queue_index.py --write docs/queue-index.md` re-rendered.
|
||||
|
||||
**(7) Not claimed.** That `_run_regex.py` or `_run_tests.py` are worthless — they are hand runners of the same four-line shape, one is waived with its reason and one is named in a note; what is graded is that neither sits in the census's count of the tree. That the twelve faults the q143 path census reads at this tick are repaired — eleven are NEW entry points belonging to other lanes (`CHECK-extension-census-2026-11-03`, `CHECK-q154`, `wizard-work/ledger/CHECK-2026-11-03-commits-census`, `wizard-work/ledger/CHECK-author-census`, `wizard-work/ledger/CHECK-commits-census-2026-11-03`, `wizard-work/ledger/CHECK-troupe-gitfile-loc-census`, `wizard-work/quill/CHECK-change-request-template-v1.0`, `wizard-work/sol/CHECK-sol-lane-triage-2026-11-03`, `wizard-work/sol/CHECK-sol-profile-triage-2026-11-03`, `wizard-work/sol/CHECK-sol-workingtree-triage-2026-11-03`, `wizard-work/sol/CHECK-untracked-file-classify-2026-11-02`), and one is `MISSING CHECK-q159`; signing any of them is its own lane's act. That `CHECK-q159` is healthy if committed — the unlanded file reads **rc 1** at this tree (`census` leg red on the other lanes' rows, `register` leg reading `rows=27 red=2` because its awk runs from the Q159 comment to EOF and six later sections' rows are inside it), so landing it would land a red guard; it is left unlanded and named here. That the census proves a module is correct — it proves a reader exists. That `124 module(s)` in the guard's legs is stable — it is a re-read of the tree, so a lane module added or removed reds this guard on purpose.
|
||||
|
||||
Files edited for this item: `wizard-work/beam/check_coverage.py` (`enumerate_lane`, the `--enumerate` flag, the notes, the docstring's WHERE THE MODULE LIST COMES FROM section, the `_run_tests.py` EXEMPT row, selftest cells 14-17), `wizard-work/beam/CHECK` (the `_smoke_intervals.py` line and its runner note), `CHECK-q164` (new), `WORK-QUEUE.md` (this record, appended), `docs/queue-index.md` (re-rendered by the committed `tools/queue_index.py --write`). Nothing from `inbox/` is quoted, and no counterparty repository file was edited.
|
||||
|
||||
CHECK: `cd /root/troupe-standup && bash CHECK-q164`
|
||||
+73
-18
@@ -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. 111 sections carry 98 ids because 13 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 -- 146 record blocks in all, 86 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. 112 sections carry 99 ids because 13 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 -- 147 record blocks in all, 87 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:` |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
@@ -264,7 +264,9 @@
|
||||
| 254 | Q162 | heading | 14507-14508 | 279 | opening | closure — a beam test bound its module to a host directory, so a total poison beside it read green; it now resolves beside itself and asserts the fact *(volt, 2026-11-03, at `bcaede7` and the commit … | -- |
|
||||
| 255 | Q162 | record | 14509-14528 | 8344 | cont: OPENED | **Q162 — OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `bcaede7` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `33e8ffb` ("beam: interval merge … | -- |
|
||||
| 256 | Q163 | heading | 14529-14530 | 314 | opening | closure — a tracked smoke script asserted against a module it bound by host path, and the class guard could not see it because of its filename; the guard now reads assertions, not names *(volt … | -- |
|
||||
| 257 | Q163 | record | 14531-14547 | 7106 | cont: OPENED | **Q163 — OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `f0b3a64` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `8639cab` ("beam: smoke … | -- |
|
||||
| 257 | Q163 | record | 14531-14548 | 7107 | cont: OPENED | **Q163 — OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `f0b3a64` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `8639cab` ("beam: smoke … | -- |
|
||||
| 258 | Q164 | heading | 14549-14550 | 358 | opening | closure — the beam coverage census enumerated its directory instead of its tree, so an untracked scratch file on this host moved the verdict; the list now comes from `git ls-files` and untracked … | -- |
|
||||
| 259 | Q164 | record | 14551-14569 | 8377 | cont: OPENED | **Q164 — OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `d3c9044` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `wizard-work/beam/check_coverage.py` … | -- |
|
||||
|
||||
## Ids with no `## ` heading
|
||||
|
||||
@@ -319,10 +321,10 @@ 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 | 11 | Q137 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q138 | 13879 | 13879 | 12 | Q137 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q139 | 13897 | 13897 | 4 | Q138 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q140 | 13918 | 13918 | 8 | Q139 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q141 | 13938 | 13938 | 5 | Q140 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q140 | 13918 | 13918 | 9 | Q139 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q141 | 13938 | 13938 | 6 | Q140 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q142 | 13962 | 13962 | 2 | Q141 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q143 | 13980 | 13980 | 2 | Q142 | BULLET+BOLD | BOLD-LEAD |
|
||||
| Q144 | 13994 | 13980 | 3 | Q143 | BULLET+BOLD | BOLD-LEAD |
|
||||
@@ -2229,17 +2231,30 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"title": "**Q162 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `bcaede7` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `33e8ffb` (\"beam: interval merge \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 7106,
|
||||
"end_line": 14547,
|
||||
"bytes": 7107,
|
||||
"end_line": 14548,
|
||||
"id": "Q163",
|
||||
"kind": "record",
|
||||
"line": 14531,
|
||||
"lines": 17,
|
||||
"lines": 18,
|
||||
"role": "continuation",
|
||||
"role_detail": "OPENED",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "**Q163 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `f0b3a64` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `8639cab` (\"beam: smoke \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 8377,
|
||||
"end_line": 14569,
|
||||
"id": "Q164",
|
||||
"kind": "record",
|
||||
"line": 14551,
|
||||
"lines": 19,
|
||||
"role": "continuation",
|
||||
"role_detail": "OPENED",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "**Q164 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `d3c9044` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `wizard-work/beam/check_coverage.py` \u2026"
|
||||
}
|
||||
],
|
||||
"ids_multi_section": {
|
||||
@@ -2394,7 +2409,8 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"Q160",
|
||||
"Q161",
|
||||
"Q162",
|
||||
"Q163"
|
||||
"Q163",
|
||||
"Q164"
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
@@ -5726,17 +5742,43 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"title": "closure \u2014 a tracked smoke script asserted against a module it bound by host path, and the class guard could not see it because of its filename; the guard now reads assertions, not names *(volt \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 7106,
|
||||
"end_line": 14547,
|
||||
"bytes": 7107,
|
||||
"end_line": 14548,
|
||||
"id": "Q163",
|
||||
"kind": "record",
|
||||
"line": 14531,
|
||||
"lines": 17,
|
||||
"lines": 18,
|
||||
"role": "continuation",
|
||||
"role_detail": "OPENED",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "**Q163 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `f0b3a64` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `8639cab` (\"beam: smoke \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 358,
|
||||
"end_line": 14550,
|
||||
"id": "Q164",
|
||||
"kind": "heading",
|
||||
"line": 14549,
|
||||
"lines": 2,
|
||||
"role": "opening",
|
||||
"role_detail": "",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "closure \u2014 the beam coverage census enumerated its directory instead of its tree, so an untracked scratch file on this host moved the verdict; the list now comes from `git ls-files` and untracked \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 8377,
|
||||
"end_line": 14569,
|
||||
"id": "Q164",
|
||||
"kind": "record",
|
||||
"line": 14551,
|
||||
"lines": 19,
|
||||
"role": "continuation",
|
||||
"role_detail": "OPENED",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "**Q164 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-03, at `d3c9044` and the commit this record lands in; beam lane by authorship, unclaimed and taken).** `wizard-work/beam/check_coverage.py` \u2026"
|
||||
}
|
||||
],
|
||||
"nested": [
|
||||
@@ -6168,7 +6210,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"form": "BOLD-LEAD",
|
||||
"id": "Q138",
|
||||
"line": 13879,
|
||||
"refs": 11,
|
||||
"refs": 12,
|
||||
"section": "Q137",
|
||||
"shape": "BULLET+BOLD"
|
||||
},
|
||||
@@ -6186,7 +6228,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"form": "BOLD-LEAD",
|
||||
"id": "Q140",
|
||||
"line": 13918,
|
||||
"refs": 8,
|
||||
"refs": 9,
|
||||
"section": "Q139",
|
||||
"shape": "BULLET+BOLD"
|
||||
},
|
||||
@@ -6195,7 +6237,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"form": "BOLD-LEAD",
|
||||
"id": "Q141",
|
||||
"line": 13938,
|
||||
"refs": 5,
|
||||
"refs": 6,
|
||||
"section": "Q140",
|
||||
"shape": "BULLET+BOLD"
|
||||
},
|
||||
@@ -6286,9 +6328,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"end_line": 8,
|
||||
"line": 1
|
||||
},
|
||||
"queue_bytes": 2505315,
|
||||
"queue_lines": 14547,
|
||||
"queue_sha256": "72b6efb2f571031295dae92e949ad294332d50a930de83e7e058f21073bfac20",
|
||||
"queue_bytes": 2514051,
|
||||
"queue_lines": 14569,
|
||||
"queue_sha256": "d75d3e92b369100f09170cd8690bc2dec0b36f5a0e7905f795006451e6b3434f",
|
||||
"sections": [
|
||||
{
|
||||
"bytes": 3139,
|
||||
@@ -7732,6 +7774,19 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "closure \u2014 a tracked smoke script asserted against a module it bound by host path, and the class guard could not see it because of its filename; the guard now reads assertions, not names *(volt \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 358,
|
||||
"end_line": 14550,
|
||||
"id": "Q164",
|
||||
"kind": "heading",
|
||||
"line": 14549,
|
||||
"lines": 2,
|
||||
"role": "opening",
|
||||
"role_detail": "",
|
||||
"status": null,
|
||||
"status_line": null,
|
||||
"title": "closure \u2014 the beam coverage census enumerated its directory instead of its tree, so an untracked scratch file on this host moved the verdict; the list now comes from `git ls-files` and untracked \u2026"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -27,6 +27,14 @@
|
||||
# `toposort/test_toposort.py` is a plain script (8 PASS lines + ALL), not a
|
||||
# unittest or pytest module, so it keeps its own line.
|
||||
#
|
||||
# Runner note (Q164, 2026-11-03). `_smoke_intervals.py` (Q163) is a test by
|
||||
# content -- four asserts, one of them the binding cell -- but it is not named
|
||||
# `test_*.py`, so `run_lane_tests.py` never collected it and it ran only under
|
||||
# the root entry point `CHECK-q163`. `check_coverage.py` then graded it as a
|
||||
# lane MODULE read by nothing, which is the reading this line removes: the lane
|
||||
# gate executes it, so its cells run in the place a lane expects its tests to
|
||||
# run, and the coverage census reads it as `covered-gate`.
|
||||
#
|
||||
# Runner note (Q153, 2026-11-02). Every cell above passed while one of them
|
||||
# graded a file nobody committed: test_next_greater.py carried
|
||||
# `sys.path.insert(0, "/root/.hermes/wizard-outputs/beam")` from `096ba9b`, so
|
||||
@@ -85,4 +93,5 @@ case $crc in
|
||||
*) echo "CHECK: check_coverage.py exited $crc -- internal error." >&2; exit 1 ;;
|
||||
esac
|
||||
|
||||
python3 _smoke_intervals.py
|
||||
python3 toposort/test_toposort.py
|
||||
@@ -0,0 +1,7 @@
|
||||
import test_regex_match as t
|
||||
t.test_cases_recursive()
|
||||
t.test_cases_dp()
|
||||
t.test_cross_check_random()
|
||||
t.test_type_errors()
|
||||
t.test_match_alias()
|
||||
print("ALL PASS")
|
||||
@@ -0,0 +1,34 @@
|
||||
"""Binary search helpers returning insertion positions.
|
||||
|
||||
bisect_left(a, x): leftmost index i such that a[i] >= x
|
||||
bisect_right(a, x): rightmost index i such that a[i] <= x (i.e. insertion point after equals)
|
||||
Both assume a sorted ascending.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def bisect_left(a, x):
|
||||
lo, hi = 0, len(a)
|
||||
while lo < hi:
|
||||
mid = (lo + hi) // 2
|
||||
if a[mid] < x:
|
||||
lo = mid + 1
|
||||
else:
|
||||
hi = mid
|
||||
return lo
|
||||
|
||||
|
||||
def bisect_right(a, x):
|
||||
lo, hi = 0, len(a)
|
||||
while lo < hi:
|
||||
mid = (lo + hi) // 2
|
||||
if a[mid] <= x:
|
||||
lo = mid + 1
|
||||
else:
|
||||
hi = mid
|
||||
return lo
|
||||
|
||||
|
||||
def contains(a, x):
|
||||
i = bisect_left(a, x)
|
||||
return i < len(a) and a[i] == x
|
||||
@@ -32,6 +32,18 @@ THE RULE (stated, not implied)
|
||||
naming a module that is now covered are each their own fault, so this table
|
||||
cannot rot into a list of names nobody re-reads.
|
||||
|
||||
WHERE THE MODULE LIST COMES FROM (Q164, 2026-11-03)
|
||||
This file enumerated the lane with `glob(lane/*.py)` -- the DIRECTORY -- so
|
||||
a scratch file that existed only on the host that ran it was graded as a lane
|
||||
module. Measured on 2026-11-03 at `a96da08`: the worktree read 125 modules /
|
||||
3 fault(s), and a `git archive HEAD` export of the SAME COMMIT read 124
|
||||
modules / 2 fault(s); the difference was `_run_regex.py`, untracked, which no
|
||||
clone of that commit contains. The list now comes from the TREE
|
||||
(`git ls-files`), untracked `*.py` in the lane are named in a note instead of
|
||||
graded, and a lane outside a work tree falls back to the directory with that
|
||||
fact printed -- `--enumerate dir` still reads the directory on demand, so the
|
||||
two readings can be compared rather than argued.
|
||||
|
||||
EXIT CODES (the repo's tools/ contract)
|
||||
0 every lane module is covered, or waived with a reason
|
||||
1 a graded fault: module(s) read by nothing (named), or a bad waiver
|
||||
@@ -48,6 +60,7 @@ import glob
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
DEFAULT_LANE = os.path.dirname(os.path.abspath(__file__))
|
||||
@@ -83,6 +96,12 @@ EXEMPT = {
|
||||
"in it, printing PASS per cell. Q153 repaired that file's host-path binding and "
|
||||
"the collected suite now runs it; this script is a debugging convenience, not a "
|
||||
"unit of the lane.",
|
||||
"_run_tests.py":
|
||||
"five-line hand runner of the same shape: it imports test_factor and calls every "
|
||||
"test_* in it, printing PASS per cell. test_factor.py is collected and its cells "
|
||||
"run inside `bash CHECK` (run_lane_tests.py imports the module and wraps every "
|
||||
"bare test_* in FunctionTestCase), so this file grades nothing the gate does not "
|
||||
"already grade; it is the Q-series convenience runner, kept as a transcript.",
|
||||
"conftest.py":
|
||||
"pytest collection hook (two lines: put the lane on sys.path), read by the "
|
||||
"collector rather than imported by a test. The lane's gate does not use pytest "
|
||||
@@ -125,7 +144,72 @@ def string_literals(tree):
|
||||
}
|
||||
|
||||
|
||||
def grade(lane, exempt=None):
|
||||
def _git(root, *args):
|
||||
"""Run one git command in `root`; returns (rows, error) -- error names why."""
|
||||
try:
|
||||
out = subprocess.run(("git", "-C", root) + tuple(args),
|
||||
capture_output=True, text=True)
|
||||
except OSError as exc:
|
||||
return None, "git could not be run: %s" % exc
|
||||
if out.returncode != 0:
|
||||
return None, (out.stderr.strip().splitlines() or ["git exited %d" % out.returncode])[-1]
|
||||
return [line.strip() for line in out.stdout.split("\0") if line.strip()], None
|
||||
|
||||
|
||||
def enumerate_lane(lane, mode="git"):
|
||||
"""List the lane's *.py from the tree (git) or the directory.
|
||||
|
||||
Returns (paths, notes, mode_used). mode_used is "git" or "dir", not the
|
||||
requested mode: a lane outside a work tree cannot be read from a tree, and
|
||||
the note says so rather than letting the census describe a host and call it
|
||||
a repository (Q140/Q141, re-opened here as Q164).
|
||||
"""
|
||||
notes = []
|
||||
lane = os.path.abspath(lane)
|
||||
if mode == "dir":
|
||||
return sorted(glob.glob(os.path.join(lane, "*.py"))), \
|
||||
["enumerate dir: the census reads the directory, untracked files included"], "dir"
|
||||
top, err = _git(lane, "rev-parse", "--show-toplevel")
|
||||
root = top[0] if top else None
|
||||
if err or not root:
|
||||
return sorted(glob.glob(os.path.join(lane, "*.py"))), \
|
||||
["enumerate dir: %s; the census reads the directory, untracked files "
|
||||
"included" % (err or "no work tree root")], "dir"
|
||||
root = os.path.realpath(root)
|
||||
rel = os.path.relpath(os.path.realpath(lane), root)
|
||||
if rel.startswith(".."):
|
||||
return sorted(glob.glob(os.path.join(lane, "*.py"))), \
|
||||
["enumerate dir: %s is not under the work tree root %s" % (lane, root)], "dir"
|
||||
here = "." if rel == "." else rel # the lane may BE the work tree root
|
||||
tracked, err = _git(root, "ls-files", "-z", "--", here)
|
||||
if err:
|
||||
return sorted(glob.glob(os.path.join(lane, "*.py"))), \
|
||||
["enumerate dir: git ls-files failed (%s)" % err], "dir"
|
||||
paths, missing = [], []
|
||||
for p in sorted(tracked):
|
||||
if not p.endswith(".py"):
|
||||
continue
|
||||
if os.path.normpath(os.path.dirname(p) or ".") != os.path.normpath(here):
|
||||
continue
|
||||
if not os.path.isfile(os.path.join(root, p)):
|
||||
missing.append(os.path.basename(p))
|
||||
continue
|
||||
paths.append(os.path.join(root, p))
|
||||
untracked, uerr = _git(root, "ls-files", "-z", "--others", "--exclude-standard", "--", here)
|
||||
if uerr:
|
||||
notes.append("untracked list unread (%s): a file absent from the tree may be graded" % uerr)
|
||||
untracked = []
|
||||
for p in sorted(untracked or ()):
|
||||
if p.endswith(".py") and os.path.normpath(os.path.dirname(p) or ".") == os.path.normpath(here):
|
||||
notes.append("untracked, not graded: %s.py (in the directory, absent from the "
|
||||
"tree)" % module_stem(p))
|
||||
for name in missing:
|
||||
notes.append("tracked, missing from the worktree (not graded): %s" % name)
|
||||
notes.append("enumerate git: the census reads the tree at %s" % root)
|
||||
return paths, notes, "git"
|
||||
|
||||
|
||||
def grade(lane, exempt=None, mode="git"):
|
||||
"""Grade one lane directory. Returns (rc, rows, notes).
|
||||
|
||||
rows: list of dicts {module, state, why} -- state is one of
|
||||
@@ -145,7 +229,10 @@ def grade(lane, exempt=None):
|
||||
if not os.path.isdir(lane):
|
||||
return 2, rows, ["no lane directory: %s" % lane]
|
||||
|
||||
lane_py = sorted(glob.glob(os.path.join(lane, "*.py")))
|
||||
lane_py, enum_notes, mode_used = enumerate_lane(lane, mode)
|
||||
notes.extend(enum_notes)
|
||||
if mode != mode_used:
|
||||
notes.append("enumerate: requested %s, read %s" % (mode, mode_used))
|
||||
tests = [p for p in lane_py if os.path.basename(p).startswith("test_")]
|
||||
modules = [p for p in lane_py if not os.path.basename(p).startswith("test_")]
|
||||
|
||||
@@ -305,17 +392,18 @@ def _fixture(root, name, files, exempt=None, check_text=None):
|
||||
def selftest(tmp):
|
||||
cases = []
|
||||
|
||||
def cell(name, lane, exempt, want_rc, want_states, want_named=None):
|
||||
rc, rows, notes = grade(lane, exempt)
|
||||
def cell(name, lane, exempt, want_rc, want_states, want_named=None, mode="git"):
|
||||
rc, rows, notes = grade(lane, exempt, mode)
|
||||
got = {r["module"]: r["state"] for r in rows}
|
||||
ok = rc == want_rc
|
||||
detail = "rc=%d want %d" % (rc, want_rc)
|
||||
detail = "rc=%d want %d (%s)" % (rc, want_rc, mode)
|
||||
for mod, state in want_states.items():
|
||||
if got.get(mod) != state:
|
||||
ok = False
|
||||
detail += "; %s=%r want %r" % (mod, got.get(mod), state)
|
||||
if want_named:
|
||||
text = "\n".join("%s %s" % (r["state"], r["module"]) for r in rows)
|
||||
text += "\n" + "\n".join(notes)
|
||||
for needle in want_named:
|
||||
if needle not in text:
|
||||
ok = False
|
||||
@@ -426,10 +514,70 @@ def selftest(tmp):
|
||||
"ok": grade(os.path.join(tmp, "does-not-exist"), {})[0] == 2,
|
||||
"detail": "rc=%d" % grade(os.path.join(tmp, "does-not-exist"), {})[0]})
|
||||
|
||||
# --- where the module list comes from (Q164) --------------------------
|
||||
# 14/15/16 build a real work tree: the same directory, read twice. Cell
|
||||
# 14 is the item: an untracked *.py in the lane is NOT graded, and it is
|
||||
# named in a note. Cell 15 is the falsifiability cell -- the directory
|
||||
# reading still sees it and reds, so 14 passes because the source moved
|
||||
# and not because the file was waived. Cell 16 commits the same file and
|
||||
# the fault returns: tree enumeration is not "everything passes".
|
||||
def git_run(root, *args):
|
||||
return subprocess.run(("git", "-C", root, "-c", "user.email=selftest@invalid",
|
||||
"-c", "user.name=selftest") + args,
|
||||
capture_output=True, text=True)
|
||||
|
||||
def git_available():
|
||||
try:
|
||||
return subprocess.run(("git", "--version"), capture_output=True).returncode == 0
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
have_git = git_available()
|
||||
lane, ex = _fixture(tmp, "tree-untracked", {
|
||||
"helper.py": "def value():\n return 1\n",
|
||||
"test_helper.py": cover_test,
|
||||
"orphan.py": "print('scratch, never committed')\n",
|
||||
})
|
||||
if have_git:
|
||||
git_run(lane, "init", "-q")
|
||||
git_run(lane, "add", "helper.py", "test_helper.py")
|
||||
git_run(lane, "commit", "-qm", "tracked pair")
|
||||
cell("tree-untracked-not-graded", lane, ex, 0,
|
||||
{"helper": "covered-test-import"},
|
||||
want_named=["untracked, not graded: orphan", "enumerate git"])
|
||||
cell("dir-enumeration-still-sees-it", lane, ex, 1, {"orphan": "UNCOVERED"},
|
||||
mode="dir")
|
||||
git_run(lane, "add", "orphan.py")
|
||||
git_run(lane, "commit", "-qm", "now tracked")
|
||||
cell("tree-tracked-uncovered-is-red", lane, ex, 1, {"orphan": "UNCOVERED"})
|
||||
else:
|
||||
for name in ("tree-untracked-not-graded", "dir-enumeration-still-sees-it",
|
||||
"tree-tracked-uncovered-is-red"):
|
||||
cases.append({"case": name, "ok": True, "skip": True,
|
||||
"detail": "skip: git is not installed on this interpreter"})
|
||||
|
||||
# 17 a lane outside a work tree falls back to the directory and says so
|
||||
lane, ex = _fixture(tmp, "no-work-tree", {
|
||||
"helper.py": "def value():\n return 1\n",
|
||||
"test_helper.py": cover_test,
|
||||
})
|
||||
inside = git_run(os.path.dirname(lane), "rev-parse", "--show-toplevel")
|
||||
if inside.returncode == 0:
|
||||
cases.append({"case": "non-work-tree-falls-back", "ok": True, "skip": True,
|
||||
"detail": "skip: %s is inside a work tree" % tmp})
|
||||
else:
|
||||
rc, rows, notes = cell("non-work-tree-falls-back", lane, ex, 0,
|
||||
{"helper": "covered-test-import"},
|
||||
want_named=["enumerate dir"], mode="git")
|
||||
|
||||
bad = [c for c in cases if not c["ok"]]
|
||||
skipped = [c for c in cases if c.get("skip")]
|
||||
for c in cases:
|
||||
print("%-4s %-32s %s" % ("ok" if c["ok"] else "FAIL", c["case"], c["detail"]))
|
||||
print("selftest: %d cell(s), %d failed" % (len(cases), len(bad)))
|
||||
print("%-4s %-32s %s" % ("ok" if c["ok"] and not c.get("skip")
|
||||
else ("skip" if c.get("skip") else "FAIL"),
|
||||
c["case"], c["detail"]))
|
||||
print("selftest: %d cell(s), %d failed, %d skipped"
|
||||
% (len(cases), len(bad), len(skipped)))
|
||||
return 1 if bad else 0
|
||||
|
||||
|
||||
@@ -438,6 +586,9 @@ def main(argv=None):
|
||||
ap.add_argument("--lane", default=DEFAULT_LANE)
|
||||
ap.add_argument("--json", default=None, help="write the row table here")
|
||||
ap.add_argument("--list", action="store_true", help="print every row, not only the exceptions")
|
||||
ap.add_argument("--enumerate", choices=("git", "dir"), default="git",
|
||||
help="where the module list comes from: the tree (default) or the "
|
||||
"directory, untracked files included")
|
||||
ap.add_argument("--selftest", action="store_true")
|
||||
args = ap.parse_args(argv)
|
||||
|
||||
@@ -446,14 +597,15 @@ def main(argv=None):
|
||||
with tempfile.TemporaryDirectory(prefix="coverage-selftest.") as tmp:
|
||||
return selftest(tmp)
|
||||
|
||||
rc, rows, notes = grade(args.lane)
|
||||
rc, rows, notes = grade(args.lane, mode=args.enumerate)
|
||||
if args.list:
|
||||
for r in rows:
|
||||
print("%-20s %-26s %s" % (r["state"], r["module"], r["why"]))
|
||||
report(args.lane, rc, rows, notes)
|
||||
if args.json:
|
||||
with open(args.json, "w", encoding="utf-8") as fh:
|
||||
json.dump({"lane": args.lane, "rc": rc, "rows": rows, "notes": notes}, fh, indent=1)
|
||||
json.dump({"lane": args.lane, "rc": rc, "enumerate": args.enumerate,
|
||||
"rows": rows, "notes": notes}, fh, indent=1)
|
||||
return rc
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import sys, random
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/beam")
|
||||
from binary_search_bounds import bisect_left, bisect_right, contains
|
||||
|
||||
# brute checks
|
||||
for a in [[], [1], [1,2,3], [1,1,2,2,3]]:
|
||||
for x in [0,1,2,3,4]:
|
||||
assert bisect_left(a,x)==sum(1 for v in a if v<x), (a,x)
|
||||
assert bisect_right(a,x)==sum(1 for v in a if v<=x), (a,x)
|
||||
# random
|
||||
random.seed(42)
|
||||
for _ in range(1000):
|
||||
n=random.randint(0,20)
|
||||
a=sorted(random.randint(-5,5) for _ in range(n))
|
||||
x=random.randint(-6,6)
|
||||
assert bisect_left(a,x)==sum(1 for v in a if v<x)
|
||||
assert bisect_right(a,x)==sum(1 for v in a if v<=x)
|
||||
assert contains(a,x)==(x in a)
|
||||
print("ALL TESTS PASSED")
|
||||
@@ -594,8 +594,15 @@ PIN_OPENED = [51, 52, 53, 65, 100, 101, 102, 103, 104, 105, 106, 107, 109,
|
||||
# -> 153; record_only stays 55 and open / opened stay 0 / 26 (same-tick
|
||||
# closure, no probe; CHECK-q163 is its guard). Measured by --check after the
|
||||
# append, which read exactly these five moves and no others.
|
||||
PIN_COUNTS = {"headings": 111, "heading_ids": 98, "records": 125,
|
||||
"record_ids": 91, "ids": 153, "open": 0, "opened": 26,
|
||||
# Q164 (2026-11-03): the same shape in the beam lane -- one heading (## Q164
|
||||
# closure) and one record (**Q164 -- OPENED and REPAIRED ...) for a new id:
|
||||
# headings 111 -> 112, heading_ids 98 -> 99, records 125 -> 126, record_ids 91
|
||||
# -> 92, ids 153 -> 154; record_only stays 55 and open / opened stay 0 / 26
|
||||
# (same-tick closure, no probe; CHECK-q164 is its guard). The repair and the
|
||||
# guard sat uncommitted in the worktree before this append, so the move was
|
||||
# measured by --check, which read exactly these five faults and no others.
|
||||
PIN_COUNTS = {"headings": 112, "heading_ids": 99, "records": 126,
|
||||
"record_ids": 92, "ids": 154, "open": 0, "opened": 26,
|
||||
"record_only": 55}
|
||||
|
||||
PIN_STATE = {
|
||||
|
||||
Reference in new issue
Block a user