Step 6 of milestone 385 (lessons) and milestone 399 (preferences), written in one pass because #3896 asked for it: two people each adding one branch to a three-way distinction produce a list that does not read as a set.
The routing problem
create_rule's proposal gate (#3557) tells callers to propose readily — correctly; noticing that something has hardened into a standing instruction is valuable work. But it closed with three answers (approve / discuss / no), so every noticed thing that was not a rule landed on "no".
It now opens by asking what happens if someone doesn't do this?
something breaks, or a boundary is crossed → a rule, the operator's to agree to
it gets done a way the operator didn't want → a preference, recorded without a loop
they lose time rediscovering it → a lesson, binding nobody
and closes with five answers instead of three. The middle three are named as first-class outcomes, not places a proposal lands when it fails: a proposal that turns out to be a lesson has been routed, not dropped.
Stated as a practice, not a prohibition (rule 165). #3557's first cut opened "NOT YOURS TO CALL UNPROMPTED" and cost the noticing; nothing here tells a caller to propose less.
Every door says the same thing
create_note gained the preference and lesson branches — its existing rule test ("a mistake, not merely uninformed") turned out to name the lesson exactly. create_lesson names the fifth kind. create_project_rule cites the loop rather than repeating it, so its citation now names the kind question and all five answers.
The force axis is stated in full on using-scribe: all three strengths, the sorting question, that updating a preference mid-work is the normal case, and that preferences shape how work is done and never what gets recorded. _INSTRUCTIONS carries the pointer only — "Rules bind; preferences guide and you keep them current; lessons inform."
That clause cost 41 characters against 14 of headroom (INSTRUCTIONS_BUDGET = 2000, #2562), paid for by trimming atmosphere from three other lines. 1998/2000.
Guards
test_rule_creation_asks_first — the preference branch, the lesson branch and the force question, on both rule surfaces. Structure, not wording: each is a family of synonyms.
test_guidance_ownership — the three-way force axis (owner using-scribe, shared with the docstrings for the moment a proposal is actually written) and the preference-scope topic.
test_instruction_surfaces_agree — a new guard that the index names all three strengths and who keeps the middle one current. Its can-fail case is the omission that actually happens: a kind added to the product while the index still describes the corpus that came before it.
1837 passed — 1829 → 1837 is exactly the eight tests added.
Also here
Plugin minted 2026.09.19.1614. The guidance is plugin content, so without the manifest bump it would reach the repo and stop there (#2209) — CI caught that on the first push.
Tasks #3733 and #3896, work-logs 3545 and 3547. CI green on 1ade956 (run 7053).
Step 6 of milestone 385 (lessons) and milestone 399 (preferences), written in one pass because #3896 asked for it: two people each adding one branch to a three-way distinction produce a list that does not read as a set.
## The routing problem
`create_rule`'s proposal gate (#3557) tells callers to propose readily — correctly; noticing that something has hardened into a standing instruction is valuable work. But it closed with three answers (approve / discuss / no), so every noticed thing that was not a rule landed on "no".
It now opens by asking **what happens if someone doesn't do this?**
- *something breaks, or a boundary is crossed* → a **rule**, the operator's to agree to
- *it gets done a way the operator didn't want* → a **preference**, recorded without a loop
- *they lose time rediscovering it* → a **lesson**, binding nobody
and closes with five answers instead of three. The middle three are named as first-class outcomes, not places a proposal lands when it fails: a proposal that turns out to be a lesson has been routed, not dropped.
Stated as a practice, not a prohibition (rule 165). #3557's first cut opened "NOT YOURS TO CALL UNPROMPTED" and cost the *noticing*; nothing here tells a caller to propose less.
## Every door says the same thing
`create_note` gained the preference and lesson branches — its existing rule test ("a mistake, not merely uninformed") turned out to name the lesson exactly. `create_lesson` names the fifth kind. `create_project_rule` cites the loop rather than repeating it, so its citation now names the kind question and all five answers.
## One owner per topic (#4027)
The force axis is stated in full on `using-scribe`: all three strengths, the sorting question, that updating a preference mid-work is the normal case, and that preferences shape how work is done and never what gets recorded. `_INSTRUCTIONS` carries the pointer only — *"Rules bind; preferences guide and you keep them current; lessons inform."*
That clause cost 41 characters against 14 of headroom (`INSTRUCTIONS_BUDGET = 2000`, #2562), paid for by trimming atmosphere from three other lines. **1998/2000.**
## Guards
- `test_rule_creation_asks_first` — the preference branch, the lesson branch and the force question, on both rule surfaces. Structure, not wording: each is a family of synonyms.
- `test_guidance_ownership` — the three-way force axis (owner `using-scribe`, shared with the docstrings for the moment a proposal is actually written) and the preference-scope topic.
- `test_instruction_surfaces_agree` — a new guard that the index names all three strengths and who keeps the middle one current. Its can-fail case is the omission that actually happens: a kind added to the product while the index still describes the corpus that came before it.
`1837 passed` — 1829 → 1837 is exactly the eight tests added.
## Also here
Plugin minted **2026.09.19.1614**. The guidance is plugin content, so without the manifest bump it would reach the repo and stop there (#2209) — CI caught that on the first push.
Tasks #3733 and #3896, work-logs 3545 and 3547. CI green on `1ade956` (run 7053).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01821k5B3Ysecp9fNYs92Kuy
Step 6 of both milestone 385 (lessons) and 399 (preferences). #3896 asked for
the fourth and fifth answers in one pass, because two people each adding one
branch to a three-way distinction produce a list that does not read as a set.
create_rule now opens by asking what kind of thing is being held, with one
question that sorts it — what happens if someone doesn't do this? Something
breaks, a boundary is crossed: a rule. It gets done a way the operator didn't
want: a preference. They lose time rediscovering it: a lesson. The closing
question grew the two matching answers, and they are named as first-class
outcomes rather than places a proposal lands when it fails. An observation
that turns out to be a lesson has been routed, not dropped.
Stated as a practice, not a prohibition (rule 165). #3557's first cut opened
"NOT YOURS TO CALL UNPROMPTED" and cost the noticing; the wanted behaviour
here is still more proposals, and what changes is only which door they go
through.
create_note says the same from its side, so routing does not depend on having
opened create_rule first — and its existing rule test ("a mistake, not merely
uninformed") turned out to name the lesson exactly. create_lesson names the
fifth kind so the set is complete from every door. create_project_rule's
citation of the loop names five answers, since it cites rather than repeats.
The force axis has one owner (decision #4027): using-scribe states all three
strengths, the sorting question, that updating a preference mid-work is the
normal case, and that preferences shape how work is done and never what gets
recorded. _INSTRUCTIONS carries the pointer — "Rules bind; preferences guide
and you keep them current; lessons inform." It had 14 characters of headroom,
so the clause is paid for by trimming atmosphere from three other lines; 1998
of 2000 now.
Guards: the proposal-loop test learns the preference branch, the lesson
branch and the force question, on both rule surfaces; guidance-ownership gains
the force-axis topic (shared with the docstrings, for the moment a proposal is
actually written) and the preference-scope topic; a new guard pins that the
index names all three strengths and who keeps the middle one current, with its
can-fail case being the omission that actually happens — a kind added to the
product while the index still describes the corpus that came before it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01821k5B3Ysecp9fNYs92Kuy
The five-answer change touched plugin/skills/using-scribe/SKILL.md, and CI
7052 caught the manifest still reading 2026.09.18.1606. Per #2209 the
marketplace clone self-updates but the cache that actually executes only
refreshes on a version change, so without this the new guidance reaches the
repo and stops there.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01821k5B3Ysecp9fNYs92Kuy
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Step 6 of milestone 385 (lessons) and milestone 399 (preferences), written in one pass because #3896 asked for it: two people each adding one branch to a three-way distinction produce a list that does not read as a set.
The routing problem
create_rule's proposal gate (#3557) tells callers to propose readily — correctly; noticing that something has hardened into a standing instruction is valuable work. But it closed with three answers (approve / discuss / no), so every noticed thing that was not a rule landed on "no".It now opens by asking what happens if someone doesn't do this?
and closes with five answers instead of three. The middle three are named as first-class outcomes, not places a proposal lands when it fails: a proposal that turns out to be a lesson has been routed, not dropped.
Stated as a practice, not a prohibition (rule 165). #3557's first cut opened "NOT YOURS TO CALL UNPROMPTED" and cost the noticing; nothing here tells a caller to propose less.
Every door says the same thing
create_notegained the preference and lesson branches — its existing rule test ("a mistake, not merely uninformed") turned out to name the lesson exactly.create_lessonnames the fifth kind.create_project_rulecites the loop rather than repeating it, so its citation now names the kind question and all five answers.One owner per topic (#4027)
The force axis is stated in full on
using-scribe: all three strengths, the sorting question, that updating a preference mid-work is the normal case, and that preferences shape how work is done and never what gets recorded._INSTRUCTIONScarries the pointer only — "Rules bind; preferences guide and you keep them current; lessons inform."That clause cost 41 characters against 14 of headroom (
INSTRUCTIONS_BUDGET = 2000, #2562), paid for by trimming atmosphere from three other lines. 1998/2000.Guards
test_rule_creation_asks_first— the preference branch, the lesson branch and the force question, on both rule surfaces. Structure, not wording: each is a family of synonyms.test_guidance_ownership— the three-way force axis (ownerusing-scribe, shared with the docstrings for the moment a proposal is actually written) and the preference-scope topic.test_instruction_surfaces_agree— a new guard that the index names all three strengths and who keeps the middle one current. Its can-fail case is the omission that actually happens: a kind added to the product while the index still describes the corpus that came before it.1837 passed— 1829 → 1837 is exactly the eight tests added.Also here
Plugin minted 2026.09.19.1614. The guidance is plugin content, so without the manifest bump it would reach the repo and stop there (#2209) — CI caught that on the first push.
Tasks #3733 and #3896, work-logs 3545 and 3547. CI green on
1ade956(run 7053).🤖 Generated with Claude Code
https://claude.ai/code/session_01821k5B3Ysecp9fNYs92Kuy