Twinned from https://github.com/cfsh/ninefold/issues/486 by tools/beads/import_github.py's reconcile pass.
Filed unclaimed and unlabelled from ninefold-a. Backlog, for a future triage round.
Raised by aedanpope while reviewing #466:
> "#466 seems an argument for build config, we could generate the schema in CHARTER.md from the python in verdict.py"
and again, more specifically:
> "alternatively, CHARTER.md could use a small script to generate the \" \REVIEWER-VERDICT sha=<head> coverage=<k>/<n> tier=<1|2|3> result=<PASS|CONVERGED|GAPS|GAPS-REPEAT>\\" lines"
A ~20-line generator reproduces CHARTER.md:81 byte-identically from what verdict.py already declares:
```python PLACEHOLDER = {"sha": "<full headRefOid>", "coverage": "<covered+deferred+declined>/<in-scope total>", "tier": "<1|2|3>", "result": "<" + "|".join(V.RESULTS) + ">"} line = "REVIEWER-VERDICT " + " ".join(f"{f}={PLACEHOLDER[f]}" for f in V.FIELDS)
generated == CHARTER.md:81 -> True ```
FIELDS and RESULTS are already structured data in verdict.py. Only the placeholder prose is not, and it would move there — arguably where it belongs, since it is part of the schema's contract with the producer.
#466 shipped a contract test that reads CHARTER.md and fails presubmit when the parser and the charter disagree. That closes the hole, but it is the weaker mechanism:
The evidence that this matters: four copies of the schema exist and two had drifted. DESIGN.md:96 lost CONVERGED for months, and the result= alternation — the exact thing that drifted — is the part that generates most cleanly, straight from RESULTS.keys().
Design 001 §3.3 rejected every packaging option because *"all five produce a build artifact requiring an explicit rebuild after every source edit. None reads .py live."* A generated CHARTER.md has that same shape: edit verdict.py, forget to regenerate, ship a stale prompt.
The standard answer applies — a presubmit check that regenerating is a no-op, which converts silent drift into a hard failure at the gate. The python lane already exists, so this is a few lines plus a marked region in the markdown (<!-- generated from nflib/verdict.py --> … <!-- end -->).
Worth stating explicitly in whatever lands, because §3.3 will otherwise read as forbidding it.
| location | what it is | proposal |
|---|---|---|
| nflib/verdict.py | the parser + FIELDS/RESULTS | source of truth |
| CHARTER.md:81 | the spec line the reviewer is told to emit | generated |
| CHARTER.md:178 | the (unchanged — see prior verdict) one-liner | generated, same source |
| DESIGN.md:96 | a third copy with abbreviated placeholders | generate, or delete and cross-reference |
⚠️ CHARTER.md is a prompt, not documentation — it is fed to the reviewer LLM verbatim. A generated region is fine, but whoever does this should re-read the surrounding paragraphs after generating: the line sits inside prose that explains it, and a mechanical replacement that reads oddly to a model is a real (if odd-sounding) regression.
Related: #484 (the broader simplification pass — this is a concrete instance of "the same thing stated in four places"), #450, #481.
None.
No comments.