feat(guidance): an operator's ruling lives on the System it governs, and code is read as behaviour, not intent (milestone 444 steps 1-2, #4754 #4755)
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 12s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 55s
CI & Build / Python tests (push) Successful in 1m46s
CI & Build / Build & push image (push) Successful in 56s

A Librarian session contradicted a decision the operator had made 13 days
earlier. The ruling ("retry, then replace, never give up on a book") was
kept only as a quote in a work log, beside a session's reading of it that
capped replacements at 3. Three later sessions built on the reading, and one
carried the cap into an option as a "known cost", which the operator then
approved without being asked about it.

- writing-records.md: "A ruling goes on the System it governs". What a
  ruling is (the operator decided it; a later change could undo it), how it
  differs from a rule, and where it goes: a Rulings section at the end of
  the System description, one line each with who, when and the source
  record. Written the turn the operator decides; holds what is in force,
  not history; a charter line that contradicts a ruling is fixed in the
  same edit.
- using-scribe SKILL.md: reflex 1 says code tells you what a thing does,
  not what was wanted, and a limit read from code is unconfirmed until a
  System's Rulings says otherwise. Reflex 9 points to the ruling section.
- reporting-back: an option that carries existing behaviour says whose call
  it was (the operator's ruling, or a past session's never confirmed); one
  that contradicts a ruling is a Conflict.
- create_system / update_system docstrings: the Rulings section, and that
  description replaces the whole text.
- test_guidance_ownership: three topics pinned to their owners.
- Plugin version minted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 18:59:36 -04:00
co-authored by Claude Opus 5.5
parent cf4206469b
commit 01d8a0b9f1
6 changed files with 106 additions and 3 deletions
+16
View File
@@ -195,6 +195,16 @@ TOPICS: tuple[Topic, ...] = (
("what_might_apply",), "ask what already covers that moment"),
Topic("reference notes update in place; dev-logs don't", U, ("reference note",),
"state updates in place; chronicles don't"),
# Milestone 444: an operator's ruling was kept only as a quote in a work
# log, beside a session's reading of it that contradicted it, and three
# later sessions built on the reading. No index marker: both fire
# mid-work — when the operator decides, and when code is read as intent.
Topic("an operator's ruling lives on the System it governs", U,
("rulings", "update_system", "the operator decided it"),
"a stale charter line is a ruling nobody made"),
Topic("code says what a thing does, not what was wanted", U,
("rulings", "unconfirmed"),
"code tells you what a thing does, not what was wanted"),
# ── process arcs — owned by their skills ──
Topic("plan in a milestone, steps created together", "skill:writing-plans", ("start_planning", "{{ref:"),
"a milestone earns its place when the work has an arc", index=("start_planning",)),
@@ -229,6 +239,12 @@ TOPICS: tuple[Topic, ...] = (
Topic("a settled decision is acted on, not re-opened",
"skill:reporting-back", ("already made",),
"reads as contradicting yourself rather than as being careful"),
# Milestone 444: a cap a past session chose rode inside an option as a
# "known cost", the operator approved the option, and the cap read as
# theirs from then on.
Topic("an option says whose call each carried assumption was",
"skill:reporting-back", ("past session chose this", "conflict"),
"an unlabelled one gets approved as if it had been asked"),
# Milestone 409 step 8: `placement` rides a WRITE, so a task the reply only
# cites arrived with nothing vouching for it — which is how a step finished
# four days earlier was reported as the open one (#4154).