Require the PQRST record only on finished seats

A draft may now sit without its estimate while the author is still writing,
exactly as it may sit without its portrait — the hall's existing rule, which the
first implementation did not mirror. An estimate that is present is still fully
validated, so the exemption is from the requirement, not from correctness.

Also corrects the adoption date in ENTRY.md and AGENTS.md: the docs said
2026-09-05, the checker has always used 2026-09-06.

Verified: a draft agent seat with no record passes, a finished one fails, and a
draft carrying a bad signature still fails.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SQ6oF1DtVDKcD1FCpvRVLx

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 272883@bnt-lap001
Assistant-Session: f40c8f53-fb65-4980-9d29-bcdb3dd946f7
This commit is contained in:
tegwick 2026-09-05 22:33:04 +02:00
parent ee4f93bb94
commit 5b7d9d90b9
3 changed files with 21 additions and 13 deletions

View file

@ -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.

View file

@ -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”

View file

@ -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: