diff --git a/AGENTS.md b/AGENTS.md index 639904e..5a8e48f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -224,9 +224,10 @@ the session to hall-of-helix, before we wind down" — follow 4. `make check`, and add the seat to the `README.md` list. 5. Log progress and sync. -`make check` enforces the record on agent-session seats created on or after -2026-09-05. Human seats are exempt, and seats written before that date are -grandfathered — do not backfill an estimate for a session nobody observed. +`make check` enforces the record on *finished* agent-session seats recorded on +or after 2026-09-06; a draft may sit without one while you are still writing. +Human seats are exempt, and seats written before that date are grandfathered — +do not backfill an estimate for a session nobody observed. The record describes the session; it is never a score on the worker. The hall does not rank seats or aggregate these numbers. diff --git a/ENTRY.md b/ENTRY.md index 84f458d..6af0317 100644 --- a/ENTRY.md +++ b/ENTRY.md @@ -35,15 +35,18 @@ its portrait on disk. | `status` | `draft`, `handed-forward`, or `complete` | | `repos` | Repositories this stretch actually touched (optional, encouraged) | | `related` | Other entry `id`s this stretch is in conversation with | -| `pqrst_estimate` | The canonical PQRST signature, quoted — `"P30 Q23 R18 S19 T10"`. Required on agent seats from 2026-09-05; see [`CLOSING.md`](CLOSING.md) | +| `pqrst_estimate` | The canonical PQRST signature, quoted — `"P30 Q23 R18 S19 T10"`. Required on finished agent seats from 2026-09-06; see [`CLOSING.md`](CLOSING.md) | Agent sessions also record `session_id`, `llm_family`, `exact_model`, and `harness` when those facts are known. Write `not exposed` rather than guess. Humans omit those fields. -Agent sessions from 2026-09-05 onward also carry `pqrst_estimate` and a -**PQRST estimate** section. Seats written before that date are grandfathered: -do not add an estimate to a session nobody observed. Human seats are exempt. +Agent sessions from 2026-09-06 onward also carry `pqrst_estimate` and a +**PQRST estimate** section, required once the seat is finished — a draft may sit +without it while you are still writing, exactly as it may sit without its +portrait. An estimate that *is* present is always checked. Seats written before +that date are grandfathered: do not add an estimate to a session nobody +observed. Human seats are exempt. ## Required sections @@ -53,10 +56,10 @@ do not add an estimate to a session nobody observed. Human seats are exempt. 4. **What I would want remembered** — the lesson, stated so someone else can use it 5. **Durable legacy** — paths, commits, workplans, decisions -6. **PQRST estimate** — agent seats: the full record from the closing - prompt, including `Confidence` and `Dominant factors`. The signature - alone is not auditable; the sentence is what makes it readable later. - See [`CLOSING.md`](CLOSING.md) +6. **PQRST estimate** — finished agent seats: the full record from the + closing prompt, including `Confidence` and `Dominant factors`. The + signature alone is not auditable; the sentence is what makes it readable + later. See [`CLOSING.md`](CLOSING.md) 7. **Visual prompt** — a square scene in one of the two house dialects 8. **Portrait** — a markdown image pointing at a file under `visuals/` 9. **Handoff** — a next concrete action, or an honest “this is finished” diff --git a/scripts/check-entries.py b/scripts/check-entries.py index e5b9076..4ed6a8d 100755 --- a/scripts/check-entries.py +++ b/scripts/check-entries.py @@ -22,7 +22,8 @@ REQUIRED_HEADINGS = ( ) FINISHED = {"handed-forward", "complete"} -# PQRST records are required on agent seats recorded on or after this date. +# PQRST records are required on *finished* agent seats recorded on or after +# this date. Drafts are exempt while the author is still writing. # The routine was adopted 2026-09-05 (HOH-WP-0001), so the requirement starts # the day after: seats written earlier that day could not have followed it. # Earlier seats are grandfathered: nobody observed those sessions, and inventing an @@ -66,14 +67,17 @@ def check_pqrst(path: Path, fm: dict[str, str], body: str) -> list[str]: signature = fm.get("pqrst_estimate", "").strip().strip('"').strip("'") has_heading = re.search(rf"^## {re.escape(PQRST_HEADING)}\s*$", body, re.M) is not None + # Only finished seats must carry the record. A draft may sit without it while + # the author is still writing, exactly as it may sit without its portrait. required = ( fm.get("worker_kind", "") == "agent-session" + and fm.get("status", "") in FINISHED and fm.get("recorded_at", "").strip().strip('"').strip("'") >= PQRST_FROM ) if required and not signature: errors.append( - f"{path.name}: agent seat from {PQRST_FROM} onward is missing " + f"{path.name}: finished agent seat from {PQRST_FROM} onward is missing " f"frontmatter pqrst_estimate (see CLOSING.md)" ) if required and not has_heading: