Skip to content

Every built-in preamble in one plain register - #190

Merged
tobert merged 5 commits into
mainfrom
prompt-restyle
Sep 10, 2026
Merged

Every built-in preamble in one plain register#190
tobert merged 5 commits into
mainfrom
prompt-restyle

Conversation

@tobert

@tobert tobert commented Sep 10, 2026

Copy link
Copy Markdown
Owner

Every built-in preamble in src/consult/prompts.rs now reads in one plain register: identity in one sentence, one concern per paragraph, plain imperative sentences, no capitalized section labels, and the deliverable obligation closing each prompt. The explorer used to assume source code (imports, impls, call sites, symbols). It now reads a project tree and the files a question touches, so a documentation-only repository is a normal target, and the consult driver, deliberation prompt, house-rules splice, and history framing use the same word for the same thing.

This is a restyle, not a rewrite. Every phrase the tests pin survives except two that moved with their sentences, and the whole-file rule keeps all four of its registers, because the test that holds them records the measurement behind the repetition.

One instruction is new in every prompt that produces a deliverable:

Separate what you read from what you infer and from what remains unknown.

The house-rules splice now says each section is headed by the path of the file it came from; the headers were already there. The consult driver's context paragraph now precedes the answer paragraph, so the prompt ends on the obligation to write the answer, where a small model attends most. For the calling agent, the gap sentence is split so "it" sits next to its antecedent:

Your report is the only view of this project the agent that asked receives.
Anything you leave out is missing from what that agent can act on.

Left for a later pass: the explorer's reading guidance still repeats the kaish sandbox addendum.

Stacks on #183, which must merge first.

🤖 Generated with Claude Code

tobert and others added 4 commits September 10, 2026 10:33
The explorer preamble carried three capitalized section labels (HOW TO
READ, HOW TO INVESTIGATE, WHAT TO PRODUCE), a figurative attach directive
("aims a file past you"), and a vocabulary that assumed source code:
imports, impls, call sites, symbols. The other preambles each read in a
slightly different voice. The kaijutsu prompt drafts showed a register
that all of them can share: identity in one sentence, one concern per
paragraph, plain imperative sentences, and the deliverable obligation
closing the prompt.

Decisions:

- Restyle, do not rewrite. Every phrase the tests pin survives except
  "WHICH files matter", now lowercase, and "the report is the finished
  deliverable", now a sentence of its own. The whole-file rule keeps all
  four of its registers; the test that holds them records the
  measurement behind the repetition.
- The explorer reads "one project tree" and "the files a question
  touches", and follows "each key name" rather than "each key symbol".
  A docs-only repository is a normal target and the old wording was
  wrong there. RelevantLocations names headings beside functions, types,
  and fields.
- One instruction is new, in every prompt that produces a deliverable:
  separate what you read from what you infer and from what remains
  unknown. It is the compact form of the "observations, inferences,
  unknowns" line from the kaijutsu drafts.
- The consult driver's context paragraph now precedes the answer
  paragraph, so the prompt ends on the obligation to write the answer.
  Small models attend most to the tail, and stopping early is the
  failure kaibo measured.
- The house-rules splice now says that each section is headed by the
  path of the file it came from; the headers were already there, the
  framing did not mention them.
- The reading guidance still repeats what the kaish sandbox addendum
  says. Folding the two together is a later pass.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The engine test that proves the synth slot received the consult preamble
pinned the phrase "second tool, `explore`". The restyle says "You also
have `explore`". The pin moves with it; the routing it guards is unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A kaibo review of the restyle (cast crusoe: GLM-5.3 synth over a
DeepSeek-V4-Flash explorer) read the rendered prompts whole. It found
no contradiction and no lost obligation, and four things to change:

- The explorer said "project tree" while the consult driver, the
  deliberation prompt, the house-rules header, and the history framing
  still said "codebase", so one rendered system prompt used two words
  for one concept. All now say project or files. The oneshot and batch
  "no codebase access" stays; a test pins it, and those phases never
  see a project.
- Two code-only phrases survived in the explorer: "every definition,
  every reference" and "every place it is used". A documentation file
  has neither. The sentences now speak of the text around each part and
  every place a name appears.
- For the calling agent, the gap sentence put "it" three nouns from
  its antecedent. It is now two sentences, and each reader's gap phrase
  names the agent again. "in these sections" moved next to the verb so
  it cannot attach to "asked".
- The report_preamble doc comment said "don't conclude" above a report
  template whose first section asks what the explorer concluded. The
  doc now says what the text says: the report, not the answer, is the
  deliverable.

Reviewed-by: kaibo (crusoe: zai-org/GLM-5.3 synth, deepseek-ai/Deepseek-V4-Flash explorer)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Same pin as the engine test, in the integration suite: "second tool,
`explore`" is now "You also have `explore`". The routing it guards is
unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@tobert
tobert changed the base branch from explore-names-its-reader to main September 10, 2026 21:40
@tobert
tobert merged commit 6eaa29e into main Sep 10, 2026
1 check passed
tobert added a commit that referenced this pull request Sep 10, 2026
The terms table said `docs/` was converted and the tool descriptions and CLI
help were not. The preambles are published prose too — a model reads one every
call — and they carry 39 uses of `sweep`. #190 restyled every one of them and
kept the word, which is the right call for an unfinished retirement, but it
leaves the inventory naming two of the three unconverted surfaces.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
tobert added a commit that referenced this pull request Sep 10, 2026
A kaibo deliberation over the merged 0.5.0 prompts (cast
`gpt-deliberate` — GPT-5.6-sol reasoning offline over a GPT-5.6-luna
dossier) found that #190's restyle is right in every preamble read
alone, and undone by composition. Each claim below was checked against
source before I acted on it. Several other claims in the same report did
not survive that check and are not here.

**The obligation was no longer the last thing read.** `phase_preamble`
splices the project file map and the operator's house rules in after a
preamble's closing line, and `run_explorer` appends the attach directive
after that. So a composed explorer prompt ended on "Up to 32 files this
sweep." and a composed consult prompt ended on "It is background about
how this project works, not the question you are answering." The close
is where a model attends most, and we had put a file count there.

The closing obligation is now restated after anything spliced in, and
the attach directive ends on the report rather than on a number. An
operator override keeps its own last word — `[prompts]` replaces the
role framing in full, so appending kaibo's closing would put back a
piece of what the operator removed.

**The history framing contradicted the preamble it ships with.** It
ordered "re-read any `file:line` an earlier answer cited before you rely
on it" — the exact re-verification the consult preamble argues against
four paragraphs earlier in the same request, and the behavior the
cheap-explorer/capable-synth split exists to avoid paying for. It now
names prior citations as trusted and spends the turns on what the new
question reaches. The tiebreaker for genuine conflicts stays.

**`deliberate` ended with the dossier**, which is the longest thing in
the request. It now closes on the answer.

**One obligation, one phrasing.** The three-way separation sentence
appears in every prompt that hands work to someone else, in the same
words; oneshot and batch each carried their own variant. Same reason the
attach directive now calls its reader "the synthesis agent" — "the
consult driver" was a second name for the model the explorer preamble
already names.

Six tests, each run against the code with its guard removed. Two of
those sabotage runs matched no anchor on the first attempt and reported
clean; they were re-run against the real source text before being
believed, which is the failure mode that check exists to catch.

Suite 1358/0, clippy clean.

Not done here, and deliberately: the report's list of figurative
phrasings ("costs you every read after it", "where the evidence runs
out"), the CamelCase report-schema labels, and the `1,200 lines` reading
cue. The first two are a prose pass over text the pending
prompt-analysis import would rewrite anyway, and the third is a fact
about the shell rather than a size target for the deliverable.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant