checkin 2026-10-17 (volt): Q63 closed -- queue_index.py admits ids by record form (heading, bold lead, Status-lead) and reports the record line vs the first mention; nested set 16 -> 9 (Q41,Q42,Q46,Q47,Q50,Q51,Q52,Q53,Q63; Q77/Q99 were quoted tool output, Q54/55/56/58/62 were artifact text and a Q31-Q62 range, none ever opened); selftest 44/44, sweep 11 tools/10 OK/0 fatal, --check rc 0 at 9930 L

This commit is contained in:
volt committed 2026-10-17 17:23:00 +00:00
1 parent ece5228a9e
commit e79cbca627
4 files changed
+223 -93

No files matched your search

+8
View File
@@ -9920,3 +9920,11 @@ correction the control plane's 17:41Z tick returned against this lane.
**Do this:** gate the nested-id detector on record form so a bare `Q\d+` inside prose, quoted tool output, tick text, or fixture text does not open an id; flip the selftest so "prose mentioning Q42 in passing" is NOT nested and a tick bullet quoting tool output opens nothing. **Done means:** `--selftest` green; `--write` regenerates `docs/queue-index.md` with **14 nested ids** (the 13 real + Q63) and Q77/Q99 excluded; `--check` returns **rc 0 current** at then-HEAD. **Evidence:** the `tools/queue_index.py` diff, the flipped selftest cell, and a fresh `--check` rc 0 at then-HEAD.
- **Nothing operational.** Open set becomes Q37 `:5278` (pipe) + career-lane Q53 `:7303` (held for Alexander) + Q63 (Volt). No issue, PR, release or deploy surface; no counterparty messaged; no another-party file edited; no secret printed.
**Control-plane tick 2026-10-17 17:45Z — Q63 CLOSED: `queue_index.py` counts records, not mentions; the nested set measures 9, not 14, and the five it drops were never items.** (Pure suffix append; the tool diff is in the same commit as this line, and `--check` is rc 0 on that commit.)
- **What changed.** `tools/queue_index.py` gains `record_form()`: an id is admitted only by a heading, a bold lead that opens with the id (`**Qnn — …**`, `**Qnn opened — …**`, `**Qnn (lane) — …**`), or a line whose own lead is a `Status:` marker. The nested leg reports the first *record-form* line, not the first mention, so Q53 now reads record `:7292` / first mention `:7246` and Q63 reads `:9918` / `:9909`; the table carries both columns and the admitting form.
- **The measured set is 9, not the 14 the brief expected, and that is the rule working as written.** Nested: Q41, Q42, Q46, Q47, Q50, Q51, Q52, Q53, Q63. Q77/Q99 never open (their only line is the quoted `--outside` list at `:9909`). Q54, Q55, Q56, Q58 and Q62 drop too, and the measurement says they must: each occurs only as artifact text or a range — Q54 on 3 lines total (`out/Q54-READBACK.txt`), Q55 on 7, Q56 on 6 (`out/Q56-MATRIX.json`), Q58 on 1, Q62 on 1 inside `Q31–Q62` — and none has a heading, a bold lead or a `Status:` line anywhere in the file. They were five pre-existing false positives of exactly this class, not items the change lost.
- **Evidence.** `--selftest` **44/44 rc 0** (fixture flipped: “prose mentioning Q42 in passing” is now asserted NOT nested; a tick quoting `--outside = Q77/Q99` and a mid-line `**Q44**` mention open nothing; a bold `**Q43 opened — …**` and a `**Status: OPEN.** … Q45` line do open). `--write docs/queue-index.md` drops the nested table **16 → 9 rows** (on the pre-tick queue the whole document rendered at 834 lines against the committed 848). `--check docs/queue-index.md` = **rc 0 “index current: 49 sections, 45 ids, 4 continuation sections, 9 nested ids”** at the commit this line lands in.
- **Nothing operational.** Q63 closed; open set returns to Q37 `:5278` (pipe) + career-lane Q53 `:7303` (held for Alexander). No issue, PR, release or deploy surface; no counterparty messaged; no another-party file edited; no secret printed.
+49
View File
@@ -406,3 +406,52 @@ CHECK: bash /root/.hermes/wizard-outputs/volt/queue-index-2026-10-17/check.sh &&
- **Conclusion: the index is stale in a way that must not be committed.** Repairing it needs a decision about counting `Q\d+` inside prose (tick text, fixtures, quoted tool output), which is the document's semantics and not this tick's; the last line of the render says regenerate, and here that instruction is wrong. Red gate left standing, with the cause measured and cited.
**Record.** Verifiers: `/root/.hermes/wizard-outputs/volt/corrections-2026-10-17/verify_corrections.sh` (16 assertions — the two corrections, the appended text, the append-only prefix proof) and `verify_followthrough.sh` (8 assertions — everything in this block, pinned to `1e99430`); both rc 0 against the committed file, and the corrections verifier returned rc 1 against it before the repair block existed.
## 17:45Z — Q63 closed: the nested-id leg counts records, not mentions (measured 9, not 14)
**Shipped.** `tools/queue_index.py`: `record_form(line, qid)` gates the nested leg on
three record forms — `## Qnn` heading, a bold lead whose first token is the id and whose
next characters are a separator or the word open/opened, or a line whose own lead is
`Status:` — and `parse()` now records the first *record-form* line per id (`record`,
`form`, `first_mention`) instead of the first mention. `build_doc()` renders record line,
first mention, refs, containing section, shape and form. Docstring carries the rule and
the measured before/after.
**Why the brief's 14 is not the right number.** The brief asked for “14 nested ids (the
13 real + Q63)”. Under the decided rule — *an id is opened by a record, not mentioned by
prose* — the file does not have 13 real nested ids; it has 8, plus Q63. Five ids the old
detector listed have no record anywhere in `WORK-QUEUE.md`:
| id | lines naming it | what the text actually is |
|---|---|---|
| Q54 | 3 | `out/Q54-READBACK.txt`, “the `Q54` artifact's durable handle” |
| Q55 | 7 | the `Q55` → `Q45S9` rename labels, `out/Q55-CLEANUP.json` |
| Q56 | 6 | `out/Q56-MATRIX.json`, `out/Q56-CENSUS.json` |
| Q58 | 1 | `…/q58/helm-selftest-q58.py` inside a re-measurement bullet |
| Q62 | 1 | “none of Q31–Q62 is in production” — a range |
Q77/Q99 have one line each, the tick that quotes `--outside = Q63/Q77/Q99`. So the
16-row table the old build rendered held 8 items, 5 artifact/range false positives and 3
quoted-tool-output false positives; the new build holds the 8 items plus Q63. The
number that moves is the tool's, and the direction is down because the false positives
are gone, not because items were lost.
**Evidence (measured this tick).**
- `python3 tools/queue_index.py --selftest` → `selftest: 44 cells, 44 passed, 0 failed`, rc 0.
Flipped cells: “prose mention is not a record (Q42)”, “mid-line bold mention is not a
record (Q44)”, “quoted tool output opens nothing (Q77/Q99)”, “record line follows the
first mention of the same id”, plus two positive cells for BOLD-LEAD and STATUS-LEAD.
- `python3 tools/queue_index.py --write docs/queue-index.md` → 848 → 834 lines (36,867 B),
nested table 16 → 9 rows.
- `python3 tools/queue_index.py --check docs/queue-index.md` → rc 0, `index current:
49 sections, 45 ids, 4 continuation sections, 9 nested ids, 9930 lines / 1223321 bytes`.
- Record-vs-mention deltas now visible in the document: Q42 5673→5803, Q46 6412→6419,
Q47 6485→6542, Q53 7246→7292, Q63 9909→9918.
**Addendum, same tick, after the sweep.** `tools/selftest_sweep.py` caught the one thing the
tool's own grid cannot: the docstring and `--selftest` help still advertised **38 cells**
while the grid printed 44 — a `COUNT_MISMATCH` fatal in the sweep
(`queue_index.py COUNT_MISMATCH 38 cells 44 cells`). Both strings now read 44. Re-run:
`sweep: 11 tools, 10 OK, 0 fatal` (the one non-OK is `doc_census_check.py` NO_CLAIM,
advisory and unchanged).
+53 -67
View File
@@ -4,7 +4,7 @@
**What this is.** One row per `## ` section of `WORK-QUEUE.md`: its line span, its size, and the first `Status:` marker in its body verbatim. 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. 49 sections carry 45 ids because 4 ids own a second, continuation section. A further **13 ids have no heading at all** and are opened as records nested inside another item's section -- so grepping `^## Q41` finds nothing while Q41 is a live item the file names 24 times. Those are listed in their own table below.
**What it exposes.** The queue is two-tier. 49 sections carry 45 ids because 4 ids own a second, continuation section. A further **9 ids have no heading at all** and are opened as records nested inside another item's section -- so grepping `^## Q41` finds nothing while Q41 is a live item the file names 25 times. Those are listed in their own table below.
| # | id | lines | bytes | role | title | first `Status:` |
|---|---|---|---|---|---|---|
@@ -56,27 +56,23 @@
| 46 | Q44 | 6162-6705 | 88496 | opening | The pin class: redirect every constant composed from the live data root, not only `SNAPSHOT_PATH` *(Helm lane; opened 2026-10-12 by the pipe, per Q43's own closing sentence — "extend the redirect … | DONE 2026-10-12 — `recoveries/helm-root-redirect.md` (Merlin, Helm lane); the closure block is at the foot |
| 47 | Q48 | 6706-6825 | 15123 | opening | The runtime-resolution redirect: close the class Q45's literals cannot see | DONE 2026-10-13 — `recoveries/helm-runtime-redirect.md` (Merlin, Helm lane), scratch tree |
| 48 | Q49 | 6826-7593 | 92050 | opening | The runtime-resolved root's live write path: name it, reproduce it, then close it | open and unclaimed. Opened by the pipe 2026-10-13 |
| 49 | Q45 | 7594-9901 | 323266 | opening | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | -- |
| 49 | Q45 | 7594-9930 | 331060 | opening | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | -- |
## Ids with no `## ` heading
Opened as records inside another section. `section` is the heading whose body holds the first mention; `shape` is the form of that line.
Opened as records inside another section. `line` is the record's own opening line and `first mention` is the first line that names the id at all -- they differ when an id is cited in prose before it is opened (Q53: :7246 -> :7292, Q63: :9909 -> :9918). `form` is the record form that admits it.
| id | first line | refs | inside section | shape |
|---|---|---|---|---|
| Q41 | 5597 | 24 | Q37 | BULLET+BOLD |
| Q42 | 5673 | 57 | Q37 | BULLET+BOLD |
| Q46 | 6412 | 60 | Q44 | BULLET+BOLD |
| Q47 | 6485 | 43 | Q44 | BULLET+BOLD |
| Q50 | 6990 | 44 | Q49 | BULLET+BOLD |
| Q51 | 7106 | 35 | Q49 | BULLET+BOLD |
| Q52 | 7167 | 88 | Q49 | BULLET+BOLD |
| Q53 | 7246 | 85 | Q49 | PLAIN+BOLD |
| Q54 | 7991 | 4 | Q45 | PLAIN |
| Q55 | 8081 | 7 | Q45 | PLAIN |
| Q56 | 8319 | 6 | Q45 | BULLET+BOLD |
| Q58 | 8731 | 1 | Q45 | BULLET+BOLD |
| Q62 | 9227 | 1 | Q45 | PLAIN |
| id | record line | first mention | refs | inside section | shape | form |
|---|---|---|---|---|---|---|
| Q41 | 5597 | 5597 | 25 | Q37 | BULLET+BOLD | BOLD-LEAD |
| Q42 | 5803 | 5673 | 61 | Q37 | BULLET+BOLD | BOLD-LEAD |
| Q46 | 6419 | 6412 | 61 | Q44 | BULLET+BOLD | BOLD-LEAD |
| Q47 | 6542 | 6485 | 44 | Q44 | BULLET+BOLD | BOLD-LEAD |
| Q50 | 6990 | 6990 | 45 | Q49 | BULLET+BOLD | BOLD-LEAD |
| Q51 | 7106 | 7106 | 36 | Q49 | BULLET+BOLD | BOLD-LEAD |
| Q52 | 7167 | 7167 | 89 | Q49 | BULLET+BOLD | BOLD-LEAD |
| Q53 | 7292 | 7246 | 90 | Q49 | BULLET+BOLD | BOLD-LEAD |
| Q63 | 9918 | 9909 | 11 | Q45 | BULLET+BOLD | BOLD-LEAD |
**Not in this document.** Ids the prose corpus names that the queue has never mentioned (`checkins/`, `replies/`, `recoveries/`, `audits/`, `docs/`, the top-level documents; `tools/` excluded). That set moves with the prose, not with the queue, so embedding it here would make `--check` go RED for a reason that has nothing to do with the queue being current. It is reported on demand: `python3 tools/queue_index.py --outside`.
@@ -154,95 +150,85 @@ The block below is the parse this document renders, byte for byte. `--check` com
],
"nested": [
{
"first_mention": 5597,
"form": "BOLD-LEAD",
"id": "Q41",
"line": 5597,
"refs": 24,
"refs": 25,
"section": "Q37",
"shape": "BULLET+BOLD"
},
{
"first_mention": 5673,
"form": "BOLD-LEAD",
"id": "Q42",
"line": 5673,
"refs": 57,
"line": 5803,
"refs": 61,
"section": "Q37",
"shape": "BULLET+BOLD"
},
{
"first_mention": 6412,
"form": "BOLD-LEAD",
"id": "Q46",
"line": 6412,
"refs": 60,
"line": 6419,
"refs": 61,
"section": "Q44",
"shape": "BULLET+BOLD"
},
{
"first_mention": 6485,
"form": "BOLD-LEAD",
"id": "Q47",
"line": 6485,
"refs": 43,
"line": 6542,
"refs": 44,
"section": "Q44",
"shape": "BULLET+BOLD"
},
{
"first_mention": 6990,
"form": "BOLD-LEAD",
"id": "Q50",
"line": 6990,
"refs": 44,
"refs": 45,
"section": "Q49",
"shape": "BULLET+BOLD"
},
{
"first_mention": 7106,
"form": "BOLD-LEAD",
"id": "Q51",
"line": 7106,
"refs": 35,
"refs": 36,
"section": "Q49",
"shape": "BULLET+BOLD"
},
{
"first_mention": 7167,
"form": "BOLD-LEAD",
"id": "Q52",
"line": 7167,
"refs": 88,
"refs": 89,
"section": "Q49",
"shape": "BULLET+BOLD"
},
{
"first_mention": 7246,
"form": "BOLD-LEAD",
"id": "Q53",
"line": 7246,
"refs": 85,
"line": 7292,
"refs": 90,
"section": "Q49",
"shape": "PLAIN+BOLD"
},
{
"id": "Q54",
"line": 7991,
"refs": 4,
"section": "Q45",
"shape": "PLAIN"
},
{
"id": "Q55",
"line": 8081,
"refs": 7,
"section": "Q45",
"shape": "PLAIN"
},
{
"id": "Q56",
"line": 8319,
"refs": 6,
"section": "Q45",
"shape": "BULLET+BOLD"
},
{
"id": "Q58",
"line": 8731,
"refs": 1,
"first_mention": 9909,
"form": "BOLD-LEAD",
"id": "Q63",
"line": 9918,
"refs": 11,
"section": "Q45",
"shape": "BULLET+BOLD"
},
{
"id": "Q62",
"line": 9227,
"refs": 1,
"section": "Q45",
"shape": "PLAIN"
}
],
"preamble": {
@@ -250,9 +236,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
"end_line": 8,
"line": 1
},
"queue_bytes": 1215527,
"queue_lines": 9901,
"queue_sha256": "92d682a0ae8400cda424ed1aeefd3ffe7a672137c2515d4a90d33817c50b12bb",
"queue_bytes": 1223321,
"queue_lines": 9930,
"queue_sha256": "9592de7bcd0347c5cb800bef86cb6437deab3c0c685e0fe20dd323eacfc7a944",
"sections": [
{
"bytes": 3139,
@@ -831,11 +817,11 @@ The block below is the parse this document renders, byte for byte. `--check` com
"title": "The runtime-resolved root's live write path: name it, reproduce it, then close it"
},
{
"bytes": 323266,
"end_line": 9901,
"bytes": 331060,
"end_line": 9930,
"id": "Q45",
"line": 7594,
"lines": 2308,
"lines": 2337,
"role": "opening",
"role_detail": "",
"status": null,
+113 -26
View File
@@ -8,13 +8,24 @@ WHY THIS EXISTS
reader who wants the shape of the whole queue has nothing to read at all.
The shape is not obvious even after a grep. Measured on 2026-10-17 at HEAD
(`de0b1fd`): 49 `## ` sections carry 45 distinct ids, because four ids (Q37,
(`ece5228`): 49 `## ` sections carry 45 distinct ids, because four ids (Q37,
Q38, Q39, Q43) own a second section each -- a `closure` or `claimed` block
appended under a fresh heading. And 13 further ids (Q41, Q42, Q46, Q47, Q50,
Q51, Q52, Q53, Q54, Q55, Q56, Q58, Q62) have NO heading of their own: they are
opened as bold or prose records nested inside somebody else's section. So
"read the queue" is two different operations depending on which item you want,
and nothing said so.
appended under a fresh heading. And 9 further ids (Q41, Q42, Q46, Q47, Q50,
Q51, Q52, Q53, Q63) have NO heading of their own: they are opened as bold
records nested inside somebody else's section. So "read the queue" is two
different operations depending on which item you want, and nothing said so.
THE RECORD RULE (Q63, 2026-10-17). An id is *opened by a record, not mentioned
by prose*: a heading, a bold lead that opens with the id (`**Qnn -- ...**` /
`**Qnn opened -- ...**`), or a line whose own lead is a `Status:` marker. Before
that rule the detector admitted every id token that had no heading, so a tick
quoting `--outside = Q63/Q77/Q99` opened three ids, an artifact path
(`out/Q54-READBACK.txt`) opened Q54, and the range `Q31-Q62` opened Q62. The
first *mention* also used to be reported as the record, which is wrong twice:
Q53 is first named 46 lines before it is opened (:7246 prose, :7292 record) and
Q63 is first named inside the very tick that quotes it (:9909) but opened at
:9918. The table below now carries the record line, the first-mention line and
the form that admitted the id, so the difference is visible instead of implied.
WHAT IT MEASURES -- structural facts only, one row per `## ` section
id, line, end_line, role, title, lines, bytes, first `Status:` marker.
@@ -29,8 +40,9 @@ WHAT IT MEASURES -- structural facts only, one row per `## ` section
tool declines to introduce.
Plus the two legs that make the structure visible:
nested ids first seen inside a section that has no heading of their own,
with the section that contains them and the shape of that line
nested ids opened by a record inside a section that has no heading of their
own: the record's line, the first line that mentions it, the section
that contains it, and the shape/form of the record line
outside ids referenced by the prose corpus (checkins/ replies/ recoveries/
audits/ access/ decisions/ docs/ and the top-level documents) but
absent from the queue entirely -- `tools/` is excluded on purpose:
@@ -76,7 +88,7 @@ USAGE
python3 tools/queue_index.py --json out.json
python3 tools/queue_index.py --write docs/queue-index.md
python3 tools/queue_index.py --check docs/queue-index.md
python3 tools/queue_index.py --selftest # fixture corpus, 38 cells
python3 tools/queue_index.py --selftest # fixture corpus, 44 cells
Re-run `--write` after any append to the queue. The document carries the
queue's sha256, so a stale copy is a RED check, never a silent lie.
@@ -101,9 +113,50 @@ ID_TOKEN = re.compile(r"\bQ\d{1,2}\b")
STATUS = re.compile(r"^\s*\*{0,2}Status:\s*(.*)$")
FENCE = re.compile(r"^(```|~~~)")
# A record opens with its id; a mention merely carries it. `BULLET` strips the
# markdown that can precede a record without being part of it, and `OPEN_SEP` is
# what may follow the id in a bold lead that is *opening* an item (Q46's
# "**Q46 (Helm lane) — OPEN ...**" and Q63's "**Q63 opened — ...**" both count;
# a "**Q7, measured:**" bold run does not).
BULLET = re.compile(r"^[\s>|]*(?:[-*+]\s+)?")
OPEN_SEP = re.compile(r"\s*(?:—|–|-|:|\(|\bopened\b|\bopen\b|\bOPEN\b|\bOPENED\b)")
ROLE_WORDS = ("closure", "claimed", "§", "status")
def record_form(line, qid):
"""The form in which `line` opens `qid`, or None if it only mentions it.
The counting rule is settled in `WORK-QUEUE.md` at Q63 (2026-10-17): an id is
*opened by a record, not mentioned by prose*. Three forms count --
HEADING `## Qnn ...` (a section; never nested)
BOLD-LEAD after bullet/bold markers the line opens `**Qnn` and the id is
followed by a separator or the word open/opened
STATUS-LEAD the line's own lead is a `Status:` marker (bold or plain) and
it names the id
A bare token inside a sentence, a tick quoting tool output (`= Q63/Q77/Q99`),
an artifact filename (`out/Q54-READBACK.txt`) or a range (`Q31–Q62`) matches
none of them, which is the point: those were opening ids before this rule.
"""
s = line.strip()
m = HEADING.match(s)
if m and m.group(1) == qid:
return "HEADING"
body = BULLET.sub("", s)
if qid not in ID_TOKEN.findall(body):
return None
if body.startswith("**Status:") or body.startswith("Status:"):
return "STATUS-LEAD"
if body.startswith("**"):
inner = body[2:].lstrip("*").lstrip()
m = ID_TOKEN.match(inner)
if m and m.group(0) == qid and OPEN_SEP.match(inner[m.end():]):
return "BOLD-LEAD"
return None
def split_lines(text):
"""Lines without their terminators, plus the byte length each line occupies."""
lines = text.split("\n")
@@ -177,8 +230,16 @@ def parse(text):
for s in sections:
ids.setdefault(s["id"], []).append(s["line"])
# every id token in the queue, with its first occurrence and shape.
# Fenced lines are skipped: an id in a code block is quoted text, not a record.
# every id token in the queue, counted as a mention, plus the first line that
# opens it as a record. Fenced lines are skipped: an id in a code block is
# quoted text, not a record.
#
# Q63 (2026-10-17): the first *mention* is not the record. Q53 is first named
# in prose 46 lines before its `**Q53 opened -- ...**` line, and Q63 is named
# inside a tick quoting tool output at :9909 but opened at :9918. So a nested
# id is admitted by its first record-form line, and an id that never has one
# (Q54/Q55/Q56/Q58 as artifact filenames, Q62 inside `Q31-Q62`, Q77/Q99 inside
# a quoted `--outside` list) is not an item at all.
mentioned = {}
in_fence = False
for i, ln in enumerate(lines, 1):
@@ -191,14 +252,22 @@ def parse(text):
qid = m.group(0)
hit = mentioned.get(qid)
if hit is None:
mentioned[qid] = [i, ln, 1]
else:
hit[2] += 1
hit = mentioned[qid] = {"line": i, "refs": 0, "record": None, "form": None}
hit["refs"] += 1
if hit["record"] is None:
form = record_form(ln, qid)
if form:
hit["record"] = i
hit["form"] = form
nested = []
for qid in sorted(mentioned, key=lambda s: int(s[1:])):
if qid in ids:
continue
line_no, raw, refs = mentioned[qid]
rec = mentioned[qid]
if rec["record"] is None:
continue # a mention, not a record -- not an item
line_no = rec["record"]
raw = lines[line_no - 1]
owner = None
for s in sections:
if s["line"] <= line_no <= s["end_line"]:
@@ -213,10 +282,11 @@ def parse(text):
shape = "BOLD"
else:
shape = "PLAIN"
if shape != "HEADING" and "**" in raw:
if shape not in ("HEADING", "BOLD") and "**" in raw:
shape += "+BOLD"
nested.append({"id": qid, "line": line_no, "section": owner, "shape": shape,
"refs": refs})
"refs": rec["refs"], "form": rec["form"],
"first_mention": rec["line"]})
first = headings[0][0] if headings else n + 1
preamble_end = first - 1
@@ -329,14 +399,17 @@ def build_doc(payload):
lines.append("")
lines.append("## Ids with no `## ` heading")
lines.append("")
lines.append("Opened as records inside another section. `section` is the heading whose "
"body holds the first mention; `shape` is the form of that line.")
lines.append("Opened as records inside another section. `line` is the record's own opening "
"line and `first mention` is the first line that names the id at all -- they "
"differ when an id is cited in prose before it is opened (Q53: :7246 -> :7292, "
"Q63: :9909 -> :9918). `form` is the record form that admits it.")
lines.append("")
lines.append("| id | first line | refs | inside section | shape |")
lines.append("|---|---|---|---|---|")
lines.append("| id | record line | first mention | refs | inside section | shape | form |")
lines.append("|---|---|---|---|---|---|---|")
for r in payload["nested"]:
lines.append("| %s | %d | %d | %s | %s |"
% (r["id"], r["line"], r["refs"], r["section"] or "--", r["shape"]))
lines.append("| %s | %d | %d | %d | %s | %s | %s |"
% (r["id"], r["line"], r["first_mention"], r["refs"],
r["section"] or "--", r["shape"], r["form"]))
lines.append("")
lines.append("**Not in this document.** Ids the prose corpus names that the queue has never "
"mentioned (`checkins/`, `replies/`, `recoveries/`, `audits/`, `docs/`, the "
@@ -503,8 +576,13 @@ Body with no status marker.
## Q3 §9 follow-on — odd shape
Prose that names Q41 before its record.
- **Q41 — OPEN (pipe, 2026-10-13, unclaimed).** A nested record.
- prose mentioning Q42 in passing.
- **Q43 opened — a bold lead record for the fixture.**
- a bullet carrying **Q44** mid-line, which is not a record.
- a tick quoting `--outside` = Q77/Q99 as prose.
**Status: OPEN.** The status lead opens Q45 on this line.
"""
@@ -531,10 +609,19 @@ def selftest():
check("status line number", secs[0]["status_line"], 7)
check("section with no marker is None", secs[1]["status"], None)
check("continuation status is its own", secs[2]["status"], "OPEN.")
check("nested ids found", [r["id"] for r in p["nested"]], ["Q41", "Q42"])
check("nested ids found", [r["id"] for r in p["nested"]], ["Q41", "Q43", "Q45"])
check("nested owner is the containing section", p["nested"][0]["section"], "Q3")
check("nested shape is bullet carrying a bold lead", p["nested"][0]["shape"], "BULLET+BOLD")
check("nested shape is a plain bullet", p["nested"][1]["shape"], "BULLET")
check("bold lead is a record form", p["nested"][0]["form"], "BOLD-LEAD")
check("status lead is a record form", p["nested"][2]["form"], "STATUS-LEAD")
check("record line follows the first mention of the same id",
(p["nested"][0]["line"], p["nested"][0]["first_mention"]), (24, 23))
check("prose mention is not a record (Q42)", "Q42" in [r["id"] for r in p["nested"]], False)
check("mid-line bold mention is not a record (Q44)",
"Q44" in [r["id"] for r in p["nested"]], False)
check("quoted tool output opens nothing (Q77/Q99)",
{"Q77", "Q99"} & {r["id"] for r in p["nested"]}, set())
check("mentions are still counted as refs", p["nested"][0]["refs"], 2)
check("sections tile the file with no gap",
all(secs[i]["end_line"] + 1 == secs[i + 1]["line"] for i in range(len(secs) - 1)), True)
check("last section ends at the last line", secs[-1]["end_line"], p["queue_lines"])
@@ -656,7 +743,7 @@ def main(argv=None):
ap.add_argument("--check", metavar="PATH", help="re-derive and compare a rendered index")
ap.add_argument("--outside", action="store_true",
help="report ids the prose corpus names that the queue never mentions")
ap.add_argument("--selftest", action="store_true", help="fixture corpus, 38 cells")
ap.add_argument("--selftest", action="store_true", help="fixture corpus, 44 cells")
args = ap.parse_args(argv)
if args.selftest:
return selftest()