agent-bios 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/DEPENDENCIES.md +35 -12
  2. package/README.md +346 -31
  3. package/claude/CLAUDE.md +2 -2
  4. package/claude/agents/frontier.md +1 -1
  5. package/claude/agents/sweep.md +3 -3
  6. package/claude/agents/workhorse.md +2 -2
  7. package/claude/guides/claude-prompting.md +119 -34
  8. package/claude/guides/cli-multi-model-workflow.md +33 -15
  9. package/claude/guides/gpt-prompting.md +148 -28
  10. package/claude/guides/review-request.md +27 -0
  11. package/claude/guides/session-distill-workflow.md +54 -2
  12. package/claude/guides/slide-writing/RUNBOOK.md +137 -0
  13. package/claude/guides/slide-writing/scripts/pair.py +979 -0
  14. package/claude/guides/slide-writing/scripts/render.mjs +82 -0
  15. package/claude/guides/slide-writing.md +195 -0
  16. package/claude/guides/svg-visualization-guide.md +9 -0
  17. package/claude/guides/verification-discipline.md +5 -1
  18. package/claude/hooks/tooling-gotchas-hook.py +7 -5
  19. package/codex/AGENTS.md +2 -2
  20. package/codex/agents/frontier.toml +2 -1
  21. package/codex/agents/reviewer.toml +1 -1
  22. package/codex/agents/sweep.toml +3 -3
  23. package/codex/agents/workhorse.toml +1 -1
  24. package/codex/config-additions.toml +1 -1
  25. package/codex/guides/claude-prompting.md +119 -34
  26. package/codex/guides/cli-multi-model-workflow.md +33 -15
  27. package/codex/guides/gpt-prompting.md +148 -28
  28. package/codex/guides/review-request.md +27 -0
  29. package/codex/guides/session-distill-workflow.md +54 -2
  30. package/codex/guides/slide-writing/RUNBOOK.md +137 -0
  31. package/codex/guides/slide-writing/scripts/pair.py +979 -0
  32. package/codex/guides/slide-writing/scripts/render.mjs +82 -0
  33. package/codex/guides/slide-writing.md +195 -0
  34. package/codex/guides/svg-visualization-guide.md +9 -0
  35. package/codex/guides/verification-discipline.md +5 -1
  36. package/compose/assemble.py +290 -14
  37. package/compose/bootstrap/SKILL.md +119 -0
  38. package/compose/check-domains.py +102 -9
  39. package/compose/corpus-state.py +1174 -0
  40. package/compose/corpus.py +387 -0
  41. package/compose/corpus_catalog.py +882 -0
  42. package/compose/corpus_install.py +1617 -0
  43. package/compose/corpus_session.py +726 -0
  44. package/compose/corpus_store.py +1414 -0
  45. package/compose/corpus_transaction.py +236 -0
  46. package/compose/corpus_ui.py +644 -0
  47. package/compose/domains.json +101 -100
  48. package/compose/write-update-cache.py +53 -0
  49. package/install.sh +174 -24
  50. package/launch/agent-launch.py +1327 -184
  51. package/launch/agent-launch.toml +12 -16
  52. package/launch/i18n/en.toml +113 -7
  53. package/launch/i18n/ja.toml +113 -7
  54. package/launch/i18n/ko.toml +113 -7
  55. package/learn/collect-learning.py +46 -19
  56. package/learn/migrate-learnings.py +10 -1
  57. package/package.json +13 -3
  58. package/provenance.json +1 -1
  59. package/session-cost.py +22 -2
  60. package/wrappers/codex-helm.sh +3 -3
@@ -9,20 +9,30 @@ use_when:
9
9
  - porting a prompt written for an older gpt model
10
10
  - deciding a reasoning-effort level for gpt work
11
11
  core_rules:
12
+ - apply the shared recipe and only the section for the actual target model — GPT-5.6 and GPT-6 Astra have different prompting needs
12
13
  - describe the destination, not the route — state outcome, success bar, real constraints, and available evidence
13
- - simplify before adding; remove one group of instructions, examples, or tools at a time and re-run the same evals
14
14
  - keep only what changes behavior; cut repeated statements, style rules, and examples that do not
15
15
  - replace blanket ALWAYS/NEVER with decision rules naming the condition each choice applies under
16
16
  - fix the prompt before raising effort — weak output usually means a missing success criterion, dependency rule, tool-routing rule, or verification loop
17
17
  - prompting habits carried from older gpt models cost tokens and can cost accuracy
18
+ derived_at: 2026-09-07
19
+ source_pins:
20
+ - doc: prompt-guidance-gpt-5p6
21
+ sha256: 46181efec9fd1160ef537b0379282a14c1ba32380f2f8149a805128253c1115a
22
+ pinned_at: 2026-09-07
23
+ - doc: model-guidance-gpt-6-astra
24
+ sha256: 2a59b26078e001a4e4e3da10693e80ad5ee1c02cbe472afa6b682308f27b8b22
25
+ pinned_at: 2026-09-07
18
26
  targets:
27
+ - gpt-6-astra
19
28
  - gpt-5.6-sol
20
29
  - gpt-5.6-terra
21
30
  - gpt-5.6-luna
22
31
  verification_focus:
23
32
  - prompt changes are validated by re-running the same evals, not by inspection
24
33
  - removals are tested one group at a time so the cause of a delta is known
25
- - effort changes are compared against the baseline and one level lower
34
+ - effort changes use settings the target model supports and are compared against the baseline
35
+ - model-specific advice is checked against its own pinned source, including autonomy, writing style, delegation, and verification
26
36
  ---
27
37
 
28
38
  # GPT Prompting Guide
@@ -32,14 +42,79 @@ composing a prompt for a gpt-tier model — a review packet dispatched
32
42
  cross-family, a subagent brief, or the main's own instructions when the main is
33
43
  Codex.
34
44
 
35
- The current gpt tier is more concise and more self-directing than its
36
- predecessors, so the failure mode has inverted: the usual defect is now an
37
- over-specified prompt, not an under-specified one. Leaner system prompts
38
- measured roughly +10–15% eval score at 41–66% fewer tokens and 33–67% lower
39
- cost in the vendor's own coding-agent sample — directional, and worth
40
- validating on your own workload rather than taking on faith.
41
-
42
- ## Default prompt recipe
45
+ Use the shared recipe below together with the section for the actual target model.
46
+ The model being prompted decides the section, including when it is a subagent on a
47
+ different model from the main. These sections tune prompts within the existing
48
+ permission policy; they do not change tool permissions or approval requirements.
49
+
50
+ | Target | Apply | Pinned source |
51
+ | --- | --- | --- |
52
+ | `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna` | GPT-5.6 | `prompt-guidance-gpt-5p6` |
53
+ | `gpt-6-astra` | GPT-6 Astra | `model-guidance-gpt-6-astra` |
54
+
55
+ ## GPT-5.6
56
+
57
+ - **Simplify first.** State the outcome, constraints, evidence, and completion bar,
58
+ then leave the model room to choose its path. Start from a working prompt; remove
59
+ one group of repeated instructions, examples, or irrelevant tools at a time and
60
+ re-run the same evals. Keep a process instruction when it changes behavior.
61
+ - **Calibrate brevity.** GPT-5.6 tends to be more concise than GPT-5.5. Re-test broad
62
+ brevity instructions before carrying them over; they can make answers too thin.
63
+ Keep them when they produce the required result. Where the API exposes
64
+ `text.verbosity`, use it for the default detail level and the prompt for the
65
+ task's length, structure, and required content. Shorten repetition before evidence,
66
+ decisions, caveats, or next actions.
67
+ - **Define collaboration separately from tone.** Briefly name when to ask, assume,
68
+ take initiative, and explain uncertainty. Distinguish inspection or planning
69
+ requests from requests to implement. Name safe local actions and approval
70
+ boundaries once so ordinary in-scope work does not pause unnecessarily.
71
+ - **Tune effort after the prompt.** Preserve the current effective effort as the
72
+ baseline, then compare it and one supported level lower on representative tasks.
73
+ Use `low` when latency matters and quality holds; `medium` is a balanced starting
74
+ point. Use `high`/`xhigh` when evals show a gain, and reserve `max` for the hardest
75
+ quality-first work. Verify availability against the active model and host.
76
+
77
+ ## GPT-6 Astra
78
+
79
+ - **Initiative and follow-through.** Astra is more likely to ask a question when
80
+ input could materially change the result. For action requests, prompt it to infer
81
+ routine details from context and complete authorized work, including validation,
82
+ before answering. A plan or an offer to continue does not complete an action
83
+ request. Ask when missing information changes the outcome; continue independent
84
+ authorized work while waiting. If approval is required for a later step, prepare
85
+ the concrete, reviewable result first. Keep existing permission boundaries and
86
+ avoid adding approval steps based only on hypothetical risk.
87
+ - **Instruction and skill sensitivity.** Audit the loaded skills and instruction
88
+ files for unclear or conflicting guidance. Make explicit user instructions take
89
+ precedence over skill workflow preferences within higher-priority instructions
90
+ and permission constraints. When a skill causes a pause, an approval request, or
91
+ unfinished work, identify and link the exact skill file, quote the relevant rule,
92
+ and explain whether it is explicit or an interpretation. Do not turn an optional
93
+ guideline into a new requirement.
94
+ - **Writing style.** Astra tends toward detailed responses, lists, tables, and
95
+ recurring phrases. Specify the desired length and structure for the audience.
96
+ For plain prose, request concise paragraphs, familiar words, active verbs, and
97
+ the main point first. Use lists when comparison or sequence benefits; retain
98
+ technical detail needed to assess the result. Name unwanted stock phrases or
99
+ formulaic contrasts when they recur rather than assuming GPT-5.6's brevity bias.
100
+ - **Subagent delegation.** Astra may delegate less often than a workflow needs.
101
+ State when independent work should be delegated, the intended amount of
102
+ parallelism, each subagent's scope, and when to keep work local. Use the existing
103
+ spawn gates, available seats, and budget; a generic instruction to be proactive
104
+ does not specify delegation. Require readable inter-agent messages with correct
105
+ spacing.
106
+ - **Testing and verification.** Astra can over-test small coding changes. Name the
107
+ relevant checks and completion bar. Avoid tests that only mirror a reversible,
108
+ low-impact implementation. Complete required checks; broaden or repeat them only
109
+ when a new edit, a failure, or an unresolved concern warrants it. This calibration
110
+ preserves required repository gates and validation of the actual changed behavior.
111
+ - **Reasoning effort.** Astra does not support `none`. When migrating a prompt from
112
+ `none` or `minimal`, begin with `low` and compare results; otherwise preserve the
113
+ current effective effort. Check the active model and host for supported settings
114
+ instead of reusing a family-wide effort ladder. Fix a missing success criterion,
115
+ dependency rule, or verification loop before increasing effort.
116
+
117
+ ## Shared prompt recipe
43
118
 
44
119
  Compose in this order; omit any block that would not change the artifact.
45
120
 
@@ -59,8 +134,7 @@ Compose in this order; omit any block that would not change the artifact.
59
134
  - Coding and debugging: name the validation to run after changes — targeted
60
135
  tests for the changed behavior, type/lint checks, build, a minimal smoke test.
61
136
  Require prerequisite lookups before edits.
62
- - Review: no vendor task guidance exists for review specifically. Carry the
63
- general rules and be explicit about the evidence bar and the verdict shape; a
137
+ - Review: carry the general rules and be explicit about the evidence bar and the verdict shape; a
64
138
  reviewer with no stated bar defaults to plausible-sounding findings.
65
139
  - Research and grounded work: cite only retrieved sources, attach citations to
66
140
  the claims they support, and label inference separately from supported fact.
@@ -77,23 +151,55 @@ Compose in this order; omit any block that would not change the artifact.
77
151
  This is the default for review.
78
152
  - Work that divides into independent workstreams → fan-out. Parallelize
79
153
  independent reads; keep dependent steps sequential.
80
- - Effort ladder `none`, `low`, `medium`, `high`, `xhigh`, `max` are all valid.
81
- Hold the current binding as the baseline, then test it and one level lower on
82
- representative tasks: `low` for latency-sensitive work, `medium` as the
83
- balanced default, `high`/`xhigh` only where evals show real gain, `max`
84
- reserved for the hardest quality-first work and compared against `xhigh`.
154
+ - Choose reasoning effort using the target model's section above and the settings
155
+ the active model and host actually support.
85
156
  - Prefer a self-contained packet over resuming a long history: it is cheaper to
86
157
  reason about and cheaper to cache.
87
158
 
159
+ ## Programmatic tool calling
160
+
161
+ A bounded stage where code processes several tool results and returns a much smaller
162
+ structured result. The qualifier is **reduction**, not parallelism: multiple, parallel,
163
+ or dependent calls alone do not justify it.
164
+
165
+ - Use it for filtering, joining, sorting, ranking, deduplication and aggregation;
166
+ batching across many similar records; repeated deterministic validation; and large
167
+ structured results reducible to a compact schema.
168
+ - Prefer direct calls when one call suffices, when intermediate outputs are already
169
+ small, when each result may change the next decision, when an action needs approval,
170
+ when the answer must preserve citations or native artifacts, or when semantic
171
+ judgment sits between calls.
172
+ - A generic "use programmatic tool calling efficiently" does nothing. State the bounded
173
+ stage, the eligible tools, the output schema, the retry limit, the stop condition, and
174
+ the handoff back to direct judgment. If both routes are needed, define one handoff and
175
+ say not to switch routes or repeat completed work.
176
+ - **Test both outputs.** The program's result and the final assistant message are
177
+ separate; a program can return the right records while the message drops a required
178
+ field, citation, or caveat.
179
+ - Compare the two routes on the same tasks, and count lower token/latency/cost as an
180
+ improvement only when the response still passes the existing evals.
181
+
88
182
  ## Working rules
89
183
 
90
184
  - One clear task per run, with an explicit output contract.
185
+ - **Read the assembled prompt for contradictions.** This tier follows a prompt contract
186
+ closely, so two rules that disagree destabilize it more than a missing rule does —
187
+ the opposite of the intuition that more instruction is safer.
188
+ - State each authority rule once. Repeating "ask first", "do not mutate", or "wait for
189
+ approval" produces approval requests for safe, expected actions.
190
+ - Name the current layer of work — research, design, implementation, review, external
191
+ coordination — on long-running tasks, so the model does not move between layers
192
+ silently.
193
+ - Persisted reasoning is not a free optimization. It helps while the objective and
194
+ priorities hold; once they move, stale reasoning adds tokens and anchors the model to
195
+ a superseded approach. Compact at milestones, not every turn, and treat compacted
196
+ items as opaque.
197
+ - Preserve explicit user values. Where the right value is implicit, give decision
198
+ criteria and let the model reason from context or schema rather than installing
199
+ universal defaults or keyword maps.
91
200
  - Keep reusable prefixes stable and avoid churn in large system prompts. Add
92
201
  explicit cache breakpoints only where they measurably improve cache behavior —
93
- a cache write costs 1.25× the uncached input rate, so read the cached-token
94
- and cache-write counters before adding one.
95
- - Do not say "be concise" reflexively. This tier is concise by default, and the
96
- instruction can push responses past useful into thin.
202
+ inspect the active model's cache usage and cost before adding one.
97
203
  - After each tool result, ask whether the core request can now be answered with
98
204
  useful evidence. If yes, answer.
99
205
  - Render any visual artifact before finalizing; inspect layout, clipping,
@@ -105,14 +211,28 @@ Compose in this order; omit any block that would not change the artifact.
105
211
  2. Add role, goal, real constraints, and the output shape.
106
212
  3. Add only the tools the task needs, each with when-to-use and error behavior.
107
213
  4. Add stop rules and the verification the task must pass.
108
- 5. Delete every line that would not change the artifact if removed, then re-read
109
- for instructions inherited from older-model habits.
214
+ 5. Apply the matching model section. Re-read for contradictions and rules inherited
215
+ from a different model; validate targeted changes with the same representative cases.
216
+
217
+ ## Evidence base
218
+
219
+ The vendor's GPT-5.6 coding-agent sample reported roughly +10–15% eval score,
220
+ 41–66% fewer total tokens, and 33–67% lower cost with leaner system prompts
221
+ (`prompt-guidance-gpt-5p6`, pinned 2026-09-07). These are directional results for
222
+ that sample, not Astra measurements or promised gains on another workload.
110
223
 
111
224
  ## Sources
112
225
 
113
- Derived from the vendor's published prompting guidance for the `targets` models
114
- above. When a `targets` model changes, re-derive this guide from current vendor
115
- guidance rather than editing around the old rules prompting guidance is
116
- version-bound, and the previous generation's advice inverted on this one.
226
+ The GPT-5.6 section is derived from `prompt-guidance-gpt-5p6`; the GPT-6 Astra
227
+ section from `model-guidance-gpt-6-astra`. The shared recipe retains task, evidence,
228
+ tool, and validation practices from the GPT-5.6 guidance and the corpus; model
229
+ behavior claims belong only to their matching section. `source_pins` records the
230
+ exact bytes used for this derivation so later vendor edits can be detected.
231
+
232
+ When a `targets` model changes, re-derive its section from the matching current
233
+ document, check the shared rules for contradictions, and re-run representative
234
+ evals rather than extending another model's behavior claims to it.
117
235
  `launch/check-prompting-targets.sh` fails when the launch config binds a model
118
- this guide does not list.
236
+ this guide does not list; that check is about **naming**, and a model added to
237
+ `targets:` satisfies it forever. Whether the guidance was actually re-derived is
238
+ not decidable and is gated nowhere.
@@ -109,6 +109,33 @@ Ask only for what must change in this target now. Anything the reviewer would
109
109
  phrase as "carry forward", "watch", or "document later" costs tokens to produce,
110
110
  tokens to read, and is discarded — say that up front so it is never written.
111
111
 
112
+ ## Stop the loop on provenance, not on count
113
+
114
+ A review loop's finding count says nothing about whether to run another round. What decides
115
+ it is where the findings came from: a finding that a previous round's **fix** created is a
116
+ different animal from one that was always there.
117
+
118
+ Classify each finding three ways, not two: **caused** by the last fix, **surfaced** by it (the
119
+ fix made someone look there, but the defect reproduces on a path the fix never touched), or
120
+ pre-existing. The split is a revert rule, not a taxonomy: reverting removes a caused defect and merely
121
+ hides a surfaced one. Collapsing them is how someone reverts a design change, counts the
122
+ findings cleared, and leaves the surfaced ones live. The test that separates them is whether
123
+ the defect reproduces on a path the fix never touched. Then read the caused share across rounds. A rising share means the fixes are generating the work, which is the
124
+ signature of an undecided design question being patched at its consequences. Stop reviewing
125
+ and take the design as its own task.
126
+
127
+ The mechanism is the one Concept Economy already names: a fix that adds a lasting concept —
128
+ a field, a member, a contract, a failure mode, a new error status — is a design change no
129
+ matter how small the diff, and the next round finds its consequences. A fix that *removes*
130
+ a concept is the healthy shape.
131
+
132
+ When you stop, split the tree rather than leaving a half-designed mechanism in place: keep
133
+ the pure defect fixes, revert the design change, and record the gap where it will be read.
134
+
135
+ Source: an external 13-round campaign on a local API adapter, where rounds 12 and 13 ran 3-of-6
136
+ and 6-of-10 caused-by, all traceable to one two-line fix that introduced a new namespace. One
137
+ campaign, not a measured rate — the mechanism is the transferable part, not a threshold.
138
+
112
139
  ## Say what the target is, and what absence means
113
140
 
114
141
  The most common thing reviewers report they lacked is the stage context: they
@@ -6,9 +6,10 @@ audience: author
6
6
  use_when:
7
7
  - a session was launched with the Session distill preset (mission-injected)
8
8
  - the launcher nudge says enough sessions accumulated for a mining window
9
- - mining local Claude/Codex sessions for learnings absent from the corpus
9
+ - learning from LLM work sessions to improve the corpus and its application
10
10
  - promoting, incubating, or retiring items in the session-distill ledger
11
11
  core_rules:
12
+ - read Goal and desired outcomes before state files or pipeline work; use it to judge the run and its delegated work
12
13
  - the ledger is the SSOT for state; read it before touching the pipeline
13
14
  - placement follows PLACEMENT-FRAMEWORK.md, never ad-hoc judgment
14
15
  - every promotion passes an explicit user-approval gate
@@ -18,6 +19,56 @@ core_rules:
18
19
 
19
20
  # Session-Distill Workflow
20
21
 
22
+ ## Goal and desired outcomes — read first
23
+
24
+ Learn from the user's directly handled LLM work sessions so that
25
+ the user and future agents can correctly understand and explain what was learned,
26
+ apply it in relevant situations, and improve work quality, reliability, time,
27
+ and cost in line with the user's goals and priorities.
28
+
29
+ This goal applies across LLM providers and tools, including future integrations.
30
+ The collection sources currently supported are described under Stage 1.
31
+
32
+ Useful learning includes successful approaches, mistakes and corrections,
33
+ recurring friction, consequential exceptions, and the reasoning behind choices.
34
+ Compare it with existing knowledge: add what is missing, clarify or correct what
35
+ is inaccurate, improve what is not being applied, and preserve what works.
36
+ The novelty-focused screeners provide inputs to this broader goal; use the
37
+ retained session evidence for questions their candidate lists do not answer.
38
+
39
+ A run should produce:
40
+
41
+ 1. **Grounded learnings.** Explain what happened, what was learned, why the
42
+ evidence supports it, and its limits. Keep observed facts, interpretation,
43
+ and unresolved uncertainty distinguishable, with traceable session evidence.
44
+ 2. **Understandable, reusable content.** State the lesson, its rationale,
45
+ application conditions and boundaries. For a decision principle, explain the
46
+ competing values and the user's priority between them. Preserve concrete
47
+ facts or procedures where generalization would lose useful meaning.
48
+ 3. **Assessment of both meaning and application.** Check whether the lesson is
49
+ correctly explained and supported, and whether relevant decisions or actions
50
+ apply it appropriately. Assess expected benefit and unwanted effects;
51
+ preserving an already-correct decision can be a good result. Use checks
52
+ proportionate to the evidence and consequence, and distinguish observed or
53
+ tested effects from proposed ones. An untested candidate may remain for
54
+ review; neither a fluent explanation nor one suitable action proves both.
55
+ 4. **Reviewable recommendations.** Show the relationship to existing rules, the
56
+ proposed disposition and canonical home, the intended consumer, the expected
57
+ benefit and cost, and the verification still needed. Give the user enough
58
+ context to adopt, revise, retain, incubate, or retire the learning.
59
+ 5. **Durable, verified application of approved changes.** Route accepted work
60
+ through the placement framework into the guide, principle, memory, tool fix,
61
+ gate, or other existing mechanism that reaches its consumer. Keep evidence
62
+ and decisions in the ledger; report what was applied and verified and what
63
+ remains open. A review-ready proposal and an applied change are distinct
64
+ outcomes, and promotion still requires explicit user approval.
65
+
66
+ Judge success by useful, justified learning and its appropriate application.
67
+ Candidate counts and added text measure output volume. A supported decision to
68
+ keep existing content, or a clearly bounded unresolved finding, is also useful.
69
+ Carry this goal and the relevant outcome criteria into delegated work, then
70
+ assess its results against them before presenting the run as complete.
71
+
21
72
  **Requires an agent-bios checkout.** This runbook edits the corpus itself, so it
22
73
  names repo paths and runs repo scripts. On a packaged install those do not exist:
23
74
  say so and stop rather than following steps you cannot execute.
@@ -26,7 +77,7 @@ Runbook for a session-distill run: mine recent main-context sessions,
26
77
  verify candidates, place them through the framework, and apply with the user.
27
78
  Everything durable lives in the agent-bios repo.
28
79
 
29
- ## Read first (SSOT)
80
+ ## Read next (SSOT)
30
81
 
31
82
  1. `design/session-distill/ledger.json` — the initiative's state. Every item
32
83
  carries its status (placed / incubating / incubating-G / absorbed /
@@ -41,6 +92,7 @@ Everything durable lives in the agent-bios repo.
41
92
 
42
93
  ## Stage 1 — Mine (pipeline in `session-distill/`)
43
94
 
95
+ The current collectors read Claude Code and Codex session histories.
44
96
  Run in order; each stage reads the previous stage's `out/`:
45
97
 
46
98
  1. `census.py --end YYYY-MM-DD` — enumerate from both providers'
@@ -0,0 +1,137 @@
1
+ # Paired static HTML/PDF authoring and review
2
+
3
+ This companion is an opt-in execution procedure for a requested static HTML/PDF
4
+ job. The sibling [slide-writing guide](../slide-writing.md) owns the semantic
5
+ criteria and is the default for every slide or presentation task. All role
6
+ requests in this path receive its same criterion text.
7
+
8
+ Use this runbook only when the requested output and review can actually use its
9
+ static `section.slide` HTML/PDF path. Preserve a requested native presentation
10
+ format; if this renderer cannot bind that format, apply the primary guide with
11
+ the appropriate authoring tool and disclose which runtime checks were not run.
12
+ Do not substitute an HTML deliverable or claim that unrelated screenshots passed
13
+ this paired runtime.
14
+
15
+ Use `<runbook-root>` for the directory containing this file and its `scripts/`
16
+ directory, and `<job>` for a new directory outside the immutable corpus bundle.
17
+ The runtime refuses an existing job directory; revised inputs or output use a
18
+ new job revision. In every command, `--base` names the companion directory. The
19
+ criteria source is its sibling, `<runbook-root>/../slide-writing.md`.
20
+
21
+ ## Prepare
22
+
23
+ Provide the source text, a JSON work specification, and any local assets. Record
24
+ format and presentation values in that specification according to the criteria.
25
+ The HTML runtime requires static `section.slide` elements, equal page dimensions,
26
+ and print page breaks. An explicit positive integer `pages` in the specification
27
+ is checked against the actual render.
28
+
29
+ ```bash
30
+ python3 -B "<runbook-root>/scripts/pair.py" --base "<runbook-root>" check
31
+ python3 -B "<runbook-root>/scripts/pair.py" --base "<runbook-root>" prepare \
32
+ --source "<source.md>" \
33
+ --spec "<work-spec.json>" \
34
+ --asset "<optional-local-asset>" \
35
+ --job "<job>"
36
+ ```
37
+
38
+ Omit `--asset` when no assets are needed; repeat it for additional files. Asset
39
+ basenames must be unique. They are copied to `input/assets/<name>`, so URLs from
40
+ `output/deck.html` use `../input/assets/<name>`.
41
+
42
+ `check` parses and validates the primary criteria source without writing to the
43
+ guide bundle. `prepare` derives `<job>/input/slide-writing.md` and the job-only
44
+ `<job>/input/ORACLE.json`, then freezes them with the source, specification,
45
+ assets, and runtime version. The guide bundle has no source `ORACLE.json` and no
46
+ build command. Give the actual writer `writer.md` and the frozen inputs it names,
47
+ and save its result to `<job>/output/deck.html`. Keep the actual invocation
48
+ record. Request files alone do not establish that a writer consumed them.
49
+
50
+ ## Render the submitted HTML
51
+
52
+ Resolve the Node executable, the Playwright module file, and the browser executable
53
+ in the current environment, then pass those paths explicitly.
54
+
55
+ ```bash
56
+ python3 -B "<runbook-root>/scripts/pair.py" --base "<runbook-root>" render \
57
+ --job "<job>" \
58
+ --node "<node-executable>" \
59
+ --playwright "<playwright-module-file>" \
60
+ --browser "<chromium-browser-executable>"
61
+ ```
62
+
63
+ The runtime seals the HTML and assets and invokes its renderer on that copy.
64
+ The renderer blocks network requests and file requests outside the sealed root.
65
+ It injects no slide styles. It creates the PDF, page images, and measurements and
66
+ checks PDF/HTML page counts and dimensions before registration. Arbitrary supplied
67
+ images are not a substitute for this renderer invocation.
68
+
69
+ `font_px` records computed CSS size. Glyph bounds, transforms, font loading, and
70
+ the actual image remain separate evidence. A render error leaves no completed
71
+ render; keep its diagnostics and use a new job for a corrected attempt.
72
+
73
+ ## Freeze a screen reading
74
+
75
+ Give a separate review context `reader.md` and its listed rendered artifacts.
76
+ Do not supply source/specification contents or the writer's explanation during
77
+ this first observation stage. The generated request provides the response
78
+ contract and typed template.
79
+
80
+ ```bash
81
+ python3 -B "<runbook-root>/scripts/pair.py" --base "<runbook-root>" observe \
82
+ --job "<job>" \
83
+ --request "<job>/reader-request.json" \
84
+ --payload "<observations-proposal.json>"
85
+ ```
86
+
87
+ The accepted observation is stored in `observations.json` with its request binding.
88
+ Only then does the runtime generate `judge.md` and `judge-request.json`, containing
89
+ the frozen source, specification, observations, and the same common criteria.
90
+ Packet separation does not create an operating-system read jail. Record the
91
+ actual review context and visual inspection performed.
92
+
93
+ ## Compare and submit
94
+
95
+ Give the judge the generated judge request and the artifacts it names. Return the
96
+ semantic fields in that request's emitted contract; do not invent a parallel
97
+ response schema or translate rejected values into accepted ones.
98
+
99
+ ```bash
100
+ python3 -B "<runbook-root>/scripts/pair.py" --base "<runbook-root>" submit \
101
+ --job "<job>" \
102
+ --request "<job>/judge-request.json" \
103
+ --payload "<judgment-proposal.json>"
104
+ ```
105
+
106
+ The runtime rejects missing/duplicate criteria, mismatched page coverage,
107
+ unsupported evidence references, stale inputs, and the wrong request. It writes
108
+ `review.json` and derives `review.md` from the accepted record. Do not edit either
109
+ result independently. Apply the semantic criteria when interpreting those
110
+ results; structural acceptance is not a quality verdict.
111
+
112
+ ## Verify or revise
113
+
114
+ ```bash
115
+ python3 -B "<runbook-root>/scripts/pair.py" --base "<runbook-root>" verify --job "<job>"
116
+ ```
117
+
118
+ Every consuming command also performs its own preflight checks. An edit becomes
119
+ available to the next activated corpus snapshot and the next prepared job. An
120
+ existing job verifies against its original immutable corpus snapshot, frozen
121
+ criterion source, derived oracle, and runtime version. Mutating the guide or code
122
+ path recorded by that job instead of using its original snapshot invalidates the
123
+ binding, as do changes to its source document, specification, assets, HTML,
124
+ requests, or registered render/results. Preserve the old job as evidence of that
125
+ revision; prepare a new job rather than modifying its state or hashes to make it
126
+ current.
127
+
128
+ The immutable guide bundle is read-only input. Keep all job data outside it. Do
129
+ not repair an installed snapshot in place. A local experiment with different
130
+ criteria is a separate explicitly identified authoring copy, not an update to the
131
+ shared guide.
132
+
133
+ The protocol has no provider dispatcher or automatic publishing step. Use the
134
+ available authorized authoring/review tools, preserve their actual invocation
135
+ evidence, and disclose any unexecuted or uncertain checks. It verifies shared
136
+ criteria and bindings; model interpretation and visual-detection accuracy require
137
+ their own evidence.