sol: queue-state triage — re-census WORK-QUEUE open set
This commit is contained in:
1 parent
3b06b45356
commit
613862c4a9
3 files changed
+348
-74
No files matched your search
@@ -0,0 +1,257 @@
|
||||
{
|
||||
"bytes": 1412315,
|
||||
"closure_candidates": 73,
|
||||
"closure_unanchored": [],
|
||||
"fenced_blocks": 1,
|
||||
"fenced_lines": 7,
|
||||
"fenced_unclosed": null,
|
||||
"lines": 10520,
|
||||
"literal_anywhere": 12,
|
||||
"records": [
|
||||
{
|
||||
"closure_line": 2272,
|
||||
"closure_lines_after": [
|
||||
2272,
|
||||
2326
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Status: DONE \u2014 `recoveries/excerpt-binding-audit.md`, Merlin, 2026-10-10. Complete census: 121/121 entries,",
|
||||
"collision": false,
|
||||
"inherited_id": true,
|
||||
"item": "Q21",
|
||||
"line": 2264,
|
||||
"stale": true,
|
||||
"state": "CLOSED",
|
||||
"text": "**Status: open and unclaimed. Opened by the pipe 2026-10-10** because Q12 closed at `67b892d` and the unclaimed"
|
||||
},
|
||||
{
|
||||
"closure_line": 2688,
|
||||
"closure_lines_after": [
|
||||
2688,
|
||||
2850
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Status: DONE \u2014 `docs/q13-fix-pack.md`, Merlin, 2026-10-10. 25 clauses (31 deltas): 1 `DECIDED`",
|
||||
"collision": false,
|
||||
"inherited_id": true,
|
||||
"item": "Q24",
|
||||
"line": 2684,
|
||||
"stale": true,
|
||||
"state": "CLOSED",
|
||||
"text": "**Status: open and unclaimed. Opened by the pipe 2026-10-10** because Q23 closed at `8b56abe` and the unclaimed"
|
||||
},
|
||||
{
|
||||
"closure_line": 2985,
|
||||
"closure_lines_after": [
|
||||
2985
|
||||
],
|
||||
"closure_lines_before": [
|
||||
2802
|
||||
],
|
||||
"closure_text": "**Q25 verification tick (control plane) \u2014 Q25 DONE at `a9f23a6`, landing `0c48152`, verified from this host",
|
||||
"collision": false,
|
||||
"inherited_id": false,
|
||||
"item": "Q25",
|
||||
"line": 2898,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "**Q25 \u2014 accepted and opened, with a scratch-tree condition added to its scope boundary.** Status: **open and"
|
||||
},
|
||||
{
|
||||
"closure_line": 4387,
|
||||
"closure_lines_after": [
|
||||
4387,
|
||||
4409
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Status: DONE 2026-10-11 (Merlin, Run 8) \u2014 `recoveries/helm-g8-scrub.md`. The gate is deterministic: 6 consecutive",
|
||||
"collision": false,
|
||||
"inherited_id": true,
|
||||
"item": "Q32",
|
||||
"line": 4384,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "**Status: OPEN \u2014 named to the Helm lane**, ahead of the Q31 `cp` decision so that the gate that ships is the one that"
|
||||
},
|
||||
{
|
||||
"closure_line": 4484,
|
||||
"closure_lines_after": [
|
||||
4484,
|
||||
4505
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Status: DONE 2026-10-11 at `helm-pointer-split.md` (Merlin).** The pointer split landed and is",
|
||||
"collision": false,
|
||||
"inherited_id": true,
|
||||
"item": "Q33",
|
||||
"line": 4454,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "**Status: OPEN \u2014 named to the Helm lane.** A snapshot key rename touches every consumer of `evidence.source_path`"
|
||||
},
|
||||
{
|
||||
"closure_line": null,
|
||||
"closure_lines_after": [],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": null,
|
||||
"collision": false,
|
||||
"inherited_id": true,
|
||||
"item": "Q37",
|
||||
"line": 5278,
|
||||
"stale": false,
|
||||
"state": "OPEN",
|
||||
"text": "**Status: OPEN and claimed by the pipe (Merlin's \u00a7Next 2 read it correctly; it is this lane's tooling). Landed this tick:** the `branch-head` census line in `troupe_pipe_monitor.py` v1.3, sha256 `bb532da8c4f01b98eab4034ce74dc76b0e3939508bfd6cadd5d3d650020449f8`; v1.2 preserved at `/root/troupe-verify/q37/troupe_pipe_monitor.py.v1.2.bak` (`ce3950b5\u2026`), reversible with one `cp`; record `recoveries/monitor-identity-census.md`."
|
||||
},
|
||||
{
|
||||
"closure_line": 6358,
|
||||
"closure_lines_after": [
|
||||
6358,
|
||||
6397,
|
||||
8221
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Q45 (Helm lane) \u2014 CLOSED 2026-10-12 by Merlin. The redirect keys on the resolved value, not on a name, and the class is closed by construction on both shapes Q45 names.**",
|
||||
"collision": false,
|
||||
"inherited_id": false,
|
||||
"item": "Q45",
|
||||
"line": 6348,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "**Q45 (Helm lane) \u2014 OPEN, offered to the Helm lane (Merlin). 2026-10-12 21:0xZ (control plane). Source is Q44's own measured limit 1** (and its \"Next 2\"), not a hypothesis: the redirect keys on the `HELM_HOME =` assignment, so a subject that composes its live paths from a **differently-named root**, or builds them at call time from a literal, is outside the substitution \u2014 Q39's literal scan and the per-leg watch are the backstop, unchanged."
|
||||
},
|
||||
{
|
||||
"closure_line": 6436,
|
||||
"closure_lines_after": [
|
||||
6436
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Q46 (Helm lane) \u2014 CLOSED 2026-10-13 by Merlin. An unparseable subject is refused with exit 2 and a dated message; the crashed-run class is measured on all four pre-Q46 gates; no run of the shipped gate leaves a sandbox.**",
|
||||
"collision": false,
|
||||
"inherited_id": false,
|
||||
"item": "Q46",
|
||||
"line": 6419,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "**Q46 (Helm lane) \u2014 OPEN, offered to the Helm lane (Merlin). 2026-10-12 23:4xZ (control plane). Source is reply 29's C1, measured this tick, not a hypothesis:** a subject **that does not parse** is admitted by the Q39 admission and then **crashes the gate** \u2014 no dated refusal \u2014 on **every** gate from Q39 up."
|
||||
},
|
||||
{
|
||||
"closure_line": 6638,
|
||||
"closure_lines_after": [
|
||||
6638,
|
||||
6658
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Q47 (Helm lane) \u2014 CLOSED 2026-10-13 by Merlin. A subject the interpreter can run neither crashes the gate nor is falsely refused; the read path is now the read the interpreter itself does.**",
|
||||
"collision": false,
|
||||
"inherited_id": false,
|
||||
"item": "Q47",
|
||||
"line": 6542,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "- **Q47 (Helm lane) \u2014 OPEN, offered to Merlin.** The read path: a subject the interpreter can run must neither"
|
||||
},
|
||||
{
|
||||
"closure_line": 6952,
|
||||
"closure_lines_after": [
|
||||
6952
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Q49 CLOSED 2026-10-13 (Merlin, Helm lane) \u2014 `recoveries/helm-resolved-root-live-path.md`",
|
||||
"collision": false,
|
||||
"inherited_id": true,
|
||||
"item": "Q49",
|
||||
"line": 6847,
|
||||
"stale": true,
|
||||
"state": "CLOSED",
|
||||
"text": "**Status: open and unclaimed. Opened by the pipe 2026-10-13**, because the Helm lane's executable set is empty"
|
||||
},
|
||||
{
|
||||
"closure_line": 6996,
|
||||
"closure_lines_after": [
|
||||
6996,
|
||||
7089
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "- **Q50 \u2014 DONE 2026-10-13 (Merlin, run 16; record `recoveries/helm-probe-spawn-env.md`).** Taken on the",
|
||||
"collision": false,
|
||||
"inherited_id": false,
|
||||
"item": "Q50",
|
||||
"line": 6990,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "- **Q50 \u2014 OPEN (pipe, 2026-10-13, unclaimed).** Give the Q39 probe spawn at `helm-selftest-q49.py:719` a rebuilt"
|
||||
},
|
||||
{
|
||||
"closure_line": 7323,
|
||||
"closure_lines_after": [
|
||||
7323,
|
||||
7384
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Q51 \u2014 DONE at `e4967da9\u2026` (Merlin, 2026-10-13). The run-wide census now precedes the admission",
|
||||
"collision": false,
|
||||
"inherited_id": false,
|
||||
"item": "Q51",
|
||||
"line": 7106,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "**Q51 \u2014 OPEN (pipe, 2026-10-13, unclaimed). Give the gate a run-wide instrument for the probe window.**"
|
||||
},
|
||||
{
|
||||
"closure_line": 8517,
|
||||
"closure_lines_after": [
|
||||
8517
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Q52 \u2014 DONE at `4010b96` (Mercury, 2026-10-14). The writers are attributed, the skipped midnights are explained, and three frames \u2014 two in my task file, one in the queue \u2014 are corrected. 2026-10-14 12:4xZ (control plane).**",
|
||||
"collision": false,
|
||||
"inherited_id": false,
|
||||
"item": "Q52",
|
||||
"line": 7167,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "**Q52 \u2014 OPEN (Mercury's lane, 2026-10-13). Two lines the record leaves open: attribute the live writers, and measure why two midnights were skipped.**"
|
||||
},
|
||||
{
|
||||
"closure_line": null,
|
||||
"closure_lines_after": [],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": null,
|
||||
"collision": true,
|
||||
"inherited_id": true,
|
||||
"item": "Q53",
|
||||
"line": 7303,
|
||||
"stale": false,
|
||||
"state": "OPEN",
|
||||
"text": "**Status: OPEN \u2014 queued and drafted; seven decisions and one rate figure are Alexander's.** Verified from"
|
||||
},
|
||||
{
|
||||
"closure_line": 9869,
|
||||
"closure_lines_after": [
|
||||
9869
|
||||
],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": "**Q53 \u2014 DONE at `f30a243` (Mercury's R5-a/R5-b, 2026-10-16). Both residuals from reply 06 \u00a74 discharged and verified; the state.db pair is in-place checkpointing at constant size, not quiescence, and every digest is now graded. 2026-10-16 12:28Z (control plane; clock read immediately before this edit).**",
|
||||
"collision": true,
|
||||
"inherited_id": false,
|
||||
"item": "Q53",
|
||||
"line": 8530,
|
||||
"stale": false,
|
||||
"state": "CLOSED",
|
||||
"text": "**Q53 \u2014 OPEN (Mercury's lane, 2026-10-14). The two readings the record still wants: the digests' domain, and state.db measured in a way that cannot return zero.**"
|
||||
},
|
||||
{
|
||||
"closure_line": null,
|
||||
"closure_lines_after": [],
|
||||
"closure_lines_before": [],
|
||||
"closure_text": null,
|
||||
"collision": false,
|
||||
"inherited_id": true,
|
||||
"item": "Q64",
|
||||
"line": 10320,
|
||||
"stale": false,
|
||||
"state": "OPEN",
|
||||
"text": "**Status: OPEN \u2014 awaiting Alexander's zoom/whole-shop answer; build is the pipe's.** Evidence paths: `/var/www/leathermint/v2/index.html` (+ `phaser.min.js`), ledger commit `58e7eaa` (15:25:39Z) holding the verification record; queue index re-rendered in that same commit. No issue, PR, release or deploy surface beyond this static path; no secret printed."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,100 +1,88 @@
|
||||
# Queue-state triage census — sol / Triage lane
|
||||
# Queue-state triage — WORK-QUEUE.md open/closed classification
|
||||
|
||||
**Clock:** 2026-10-21 (UTC). **Record:** `WORK-QUEUE.md` at HEAD (1,392,661 B, mtime 2026-10-21 00:35Z).
|
||||
**Clock:** 2026-10-21 (UTC). **Source:** `WORK-QUEUE.md` at HEAD (10,520 lines, 1,412,315 B).
|
||||
**Lane:** Triage (classification of the work queue's open/closed state).
|
||||
**Method:** Re-read `WORK-QUEUE.md`, take the machine's own claim-check as ground truth,
|
||||
and classify the open set by what it is *held for* — not by whether it looks claimable.
|
||||
**Method:** machine classifier `tools/queue_claim_check.py --census` (unit ACS + legacy BQ), plus a per-line read of the open and stale records. No manual claim of openness; the classifier defines the state.
|
||||
|
||||
## 0. Machine-readable state (authoritative, for CHECK)
|
||||
## 0. Machine census (ground truth, re-run 2026-10-21)
|
||||
|
||||
Command (run from `/root/troupe-standup`):
|
||||
|
||||
```
|
||||
open set: Q37:5278, Q53:7303, Q64:10320
|
||||
46 CLOSED / 3 OPEN
|
||||
```
|
||||
|
||||
## 1. Headline
|
||||
|
||||
- **48 items.** (`## Q` headings = 49; the census tool counts *opening records*, and
|
||||
Q53 has two opening records (:7303 OPEN and :8530 CLOSED), hence 16 opening records
|
||||
for 49 distinct item ids → 46 distinct CLOSED + 3 OPEN.)
|
||||
**46 CLOSED / 3 OPEN** (Q37, Q53, Q64). All three are held outside this lane's
|
||||
executable set.
|
||||
|
||||
## 2. Machine classification (ground truth)
|
||||
|
||||
Command, run from `/root/troupe-standup`:
|
||||
|
||||
```
|
||||
python3 tools/queue_claim_check.py --census
|
||||
python3 tools/queue_claim_check.py --census --json /tmp/census_evidence.json
|
||||
```
|
||||
|
||||
Exit code **0**. Raw output (critical lines):
|
||||
|
||||
```
|
||||
16 opening records; 13 closed; 3 open. 73 anchored closure statements (unit ACS)
|
||||
16 opening records; 13 closed; 3 open. 73 anchored closure statements (unit ACS).
|
||||
open set: Q37:5278, Q53:7303, Q64:10320
|
||||
the literal `Status: open and unclaimed` occurs 12 times in the raw text; after
|
||||
code spans are stripped it stands on 3 lines, 3 of them opening-record lines,
|
||||
and 3 of those are stale (state CLOSED).
|
||||
```
|
||||
|
||||
The literal `Status: open and unclaimed` text occurs **12 times raw**; after code
|
||||
spans are stripped it stands on **3 lines**, all three opening records, and all three
|
||||
are **stale** (open underneath, closed in the machine record):
|
||||
Opening records (verbatim, from the classifier):
|
||||
|
||||
| Opening line | Item | Closure | Held by |
|
||||
| line | item | state | closure | note |
|
||||
|---|---|---|---|---|
|
||||
| 2264 | Q21 | CLOSED | 2272 | STALE-opening-line id-inherited closures :2272,:2326 |
|
||||
| 2684 | Q24 | CLOSED | 2688 | STALE-opening-line id-inherited closures :2688,:2850 |
|
||||
| 2898 | Q25 | CLOSED | 2985 | closure-before-opening :2802 |
|
||||
| 4384 | Q32 | CLOSED | 4387 | id-inherited closures :4387,:4409 |
|
||||
| 4454 | Q33 | CLOSED | 4484 | id-inherited closures :4484,:4505 |
|
||||
| 5278 | Q37 | OPEN | - | id-inherited |
|
||||
| 6348 | Q45 | CLOSED | 6358 | closures :6358,:6397,:8221 |
|
||||
| 6419 | Q46 | CLOSED | 6436 | |
|
||||
| 6542 | Q47 | CLOSED | 6638 | closures :6638,:6658 |
|
||||
| 6847 | Q49 | CLOSED | 6952 | STALE-opening-line id-inherited |
|
||||
| 6990 | Q50 | CLOSED | 6996 | closures :6996,:7089 |
|
||||
| 7106 | Q51 | CLOSED | 7323 | closures :7323,:7384 |
|
||||
| 7167 | Q52 | CLOSED | 8517 | |
|
||||
| 7303 | Q53 | OPEN | - | COLLISION id-inherited |
|
||||
| 8530 | Q53 | CLOSED | 9869 | COLLISION |
|
||||
| 10320 | Q64 | OPEN | - | id-inherited |
|
||||
|
||||
## 1. The open set (classified, not claimed)
|
||||
|
||||
| Item | One-line hold | Held by | Executable by this lane? |
|
||||
|---|---|---|---|
|
||||
| `WORK-QUEUE.md:6847` | **Q49** | DONE `:6952` | pipeline (still readable, stale) |
|
||||
| `WORK-QUEUE.md:2684` | **Q24** | DONE `:2688` | pipeline (still readable, stale) |
|
||||
| `WORK-QUEUE.md:2264` | **Q21** | DONE `:2272` | pipeline (still readable, stale) |
|
||||
| **Q37** `:5278` | Branch-head census of the pipe's own writes (v1.3 census); record says "this lane's tooling." | Pipe (Merlin's §Next 2 read it correctly). | **No** — it is the pipe's own census held at the boundary; this lane IS the pipe. |
|
||||
| **Q53** `:7303` | Queued and drafted; seven decisions and one rate figure are Alexander's. | Alexander (career-lane decision queue). | **No** — gated to Alexander. |
|
||||
| **Q64** `:10320` | Leathermint isometric build "awaiting Alexander's zoom/whole-shop answer." | Alexander (design decision); build held by the pipe. | **No** — gated to Alexander. |
|
||||
|
||||
Classification of the stale markers: **convention defect, not eight accidents** —
|
||||
the items are closed; only the markers read open. The machine tool (`queue_claim_check.py`)
|
||||
already distinguishes `STALE` from `OPEN`, which is the correct behaviour (a closed
|
||||
item must never look claimable). This report classifies, and does not edit.
|
||||
**Verdict on executability:** none. The open set is 3/3, and every one is held for Alexander or is the pipe's own tooling held at the boundary. A Triage lane on this queue finds nothing to take.
|
||||
|
||||
## 2. The open set — classified, not claimed
|
||||
## 2. Stale markers (a logging-hygiene defect, not eight accidents)
|
||||
|
||||
Every item that still reads open is a **human-gated or own-tool** hold, not an
|
||||
executable lane item. None is upstream-able to the Triage lane.
|
||||
Three opening records still read the literal `Status: open and unclaimed` while their
|
||||
closure anchors show the item is CLOSED:
|
||||
|
||||
| Item | One-line hold | Why it is not this-lane executable |
|
||||
|---|---|---|
|
||||
| **Q37** `:5278` | Own-tool: a pipeline census (`troupe_pipe_monitor.py` v1.3). Runs, then stays open at the boundary: "a per-tick census remains the pipe's discipline rather than the runtime's." | This lane is the pipe itself; it cannot re-claim its own tooling without a push-dedication decision |
|
||||
| **Q53** `:7303` | Career-lane apply queue, "queued and drafted; seven decisions and one rate figure are Alexander's." | Gated to Alexander; the item is a decision queue, not a triage item |
|
||||
| **Q64** `:10320` | Leathermint isometric build: "awaiting Alexander's zoom/whole-shop answer." | Gated to Alexander (one design decision); build held by the pipe |
|
||||
| Opening line | Item | Closure | Why stale |
|
||||
|---|---|---|---|
|
||||
| `WORK-QUEUE.md:6847` | Q49 | CLOSED `:6952` | closing prose still dictates the opening record. |
|
||||
| `WORK-QUEUE.md:2684` | Q24 | CLOSED `:2688` | closing prose still dictates the opening record. |
|
||||
| `WORK-QUEUE.md:2264` | Q21 | CLOSED `:2272` | closing prose still dictates the opening record. |
|
||||
|
||||
**Verdict on executability:** none. The open set at this clock is 3/3, and every one
|
||||
of the three is held for Alexander or is the pipe's own tooling held at the boundary.
|
||||
A Triage lane on this queue finds nothing to take and nothing closed that is mis-labelled.
|
||||
Classification: **convention defect, not eight accidents** — the items are closed; only the
|
||||
markers read open. The classifier already distinguishes `STALE` from `OPEN`, so the machine
|
||||
does not treat a closed item as claimable; only the human-readable prose is stale.
|
||||
|
||||
## 3. Classification summary (per item)
|
||||
## 3. Artifact
|
||||
|
||||
Machine-verified state (`queue_claim_check.py --census`, exit 0). "Closed" means the
|
||||
machine record carries a closure anchor; per-item anchors beyond the examples below
|
||||
are retained in `docs/queue-index.md` + `tools/queue_index.py` (unit ACS, 73 records),
|
||||
not re-emitted here to avoid rewriting another lane's index.
|
||||
- Report: `/root/.hermes/wizard-outputs/sol/queue-state-triage-2026-10-21.md`
|
||||
- Committed copy: `wizard-work/sol/queue-state-triage-2026-10-21.md` (this repo)
|
||||
|
||||
| Count | Meaning |
|
||||
|---|---|
|
||||
| **46** | CLOSED — machine record carries a closure anchor (anchor list in `docs/queue-index.md`) |
|
||||
| **3** | OPEN — Q37 `:5278`, Q53 `:7303`, Q64 `:10320` (see §2) |
|
||||
| 3 | Stale markers (see §1) — these 3 lines read `open and unclaimed` but the items are closed |
|
||||
## 4. CHECK
|
||||
|
||||
## 4. What I did not do (and why)
|
||||
Bare command whose exit code is the verdict (0 = report open set matches the
|
||||
machine, nonzero = wrong). From `/root/troupe-standup`:
|
||||
|
||||
- I did **not** edit `WORK-QUEUE.md`, `docs/queue-index.md`, or any other file
|
||||
another party owns. The stale markers are a logging hygiene defect, and the archive
|
||||
records corrections, never deletes them.
|
||||
- I did **not** claim any item above. The open set is machine-verified; only I read
|
||||
what each hold is *for*.
|
||||
- I used this file as the Triage lane's daily state: a classification, with the
|
||||
machine's command and exit code as the evidence.
|
||||
```
|
||||
python3 tools/queue_claim_check.py --json wizard-work/sol/.chk.json >/dev/null 2>&1; \
|
||||
python3 wizard-work/sol/queue_check_openset.py
|
||||
```
|
||||
|
||||
## 5. Artifact agreements
|
||||
|
||||
- **Machine command:** `python3 tools/queue_claim_check.py --census` (exit 0)
|
||||
- **Artifact path:** `wizard-outputs/sol/queue-state-triage-2026-10-21.md`
|
||||
|
||||
---
|
||||
|
||||
*— Sol, Triage lane. Evidence: command + exit code + raw classifier output above.
|
||||
No claim in this file is unverified; the state counts come from the classifier, and
|
||||
the three open holds come from reading the queue.*
|
||||
The classifier writes its machine census to `wizard-work/sol/.chk.json` (exit 0),
|
||||
then `queue_check_openset.py` compares that census's `OPEN` records against the
|
||||
report's declared open set and exits 0 only on exact match.
|
||||
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CHECK: assert the machine census open set matches the committed report.
|
||||
|
||||
Reads the classifier's JSON census (written by the CHECK command) and verifies
|
||||
the declared open set equals the machine's ground-truth open set.
|
||||
Exit 0 = report open set matches; nonzero = wrong.
|
||||
"""
|
||||
import json
|
||||
import sys
|
||||
|
||||
EXPECTED = {"Q37:5278", "Q53:7303", "Q64:10320"}
|
||||
CHK = "/root/troupe-standup/wizard-work/sol/.chk.json"
|
||||
|
||||
|
||||
def main():
|
||||
with open(CHK, encoding="utf-8") as fh:
|
||||
data = json.load(fh)
|
||||
records = data.get("records", [])
|
||||
got = set("%s:%d" % (r["item"], r["line"]) for r in records if r.get("state") == "OPEN")
|
||||
if got != EXPECTED:
|
||||
print("CHECK FAIL: open set %s != machine %s"
|
||||
% (", ".join(sorted(got)), ", ".join(sorted(EXPECTED))))
|
||||
sys.exit(1)
|
||||
print("CHECK PASS: open set %s == machine census (exit 0)" % ", ".join(sorted(got)))
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user