agent-bios 0.15.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.
- package/DEPENDENCIES.md +35 -12
- package/README.md +346 -31
- package/claude/CLAUDE.md +2 -2
- package/claude/agents/frontier.md +1 -1
- package/claude/agents/sweep.md +3 -3
- package/claude/agents/workhorse.md +2 -2
- package/claude/guides/claude-prompting.md +72 -39
- package/claude/guides/cli-multi-model-workflow.md +33 -15
- package/claude/guides/gpt-prompting.md +103 -39
- package/claude/guides/review-request.md +27 -0
- package/claude/guides/session-distill-workflow.md +54 -2
- package/claude/guides/slide-writing/RUNBOOK.md +137 -0
- package/claude/guides/slide-writing/scripts/pair.py +979 -0
- package/claude/guides/slide-writing/scripts/render.mjs +82 -0
- package/claude/guides/slide-writing.md +195 -0
- package/claude/guides/svg-visualization-guide.md +9 -0
- package/claude/guides/verification-discipline.md +5 -1
- package/claude/hooks/tooling-gotchas-hook.py +7 -5
- package/codex/AGENTS.md +2 -2
- package/codex/agents/frontier.toml +2 -1
- package/codex/agents/reviewer.toml +1 -1
- package/codex/agents/sweep.toml +3 -3
- package/codex/agents/workhorse.toml +1 -1
- package/codex/config-additions.toml +1 -1
- package/codex/guides/claude-prompting.md +72 -39
- package/codex/guides/cli-multi-model-workflow.md +33 -15
- package/codex/guides/gpt-prompting.md +103 -39
- package/codex/guides/review-request.md +27 -0
- package/codex/guides/session-distill-workflow.md +54 -2
- package/codex/guides/slide-writing/RUNBOOK.md +137 -0
- package/codex/guides/slide-writing/scripts/pair.py +979 -0
- package/codex/guides/slide-writing/scripts/render.mjs +82 -0
- package/codex/guides/slide-writing.md +195 -0
- package/codex/guides/svg-visualization-guide.md +9 -0
- package/codex/guides/verification-discipline.md +5 -1
- package/compose/assemble.py +290 -14
- package/compose/bootstrap/SKILL.md +119 -0
- package/compose/check-domains.py +102 -9
- package/compose/corpus-state.py +4 -0
- package/compose/corpus.py +387 -0
- package/compose/corpus_catalog.py +882 -0
- package/compose/corpus_install.py +1617 -0
- package/compose/corpus_session.py +726 -0
- package/compose/corpus_store.py +1414 -0
- package/compose/corpus_transaction.py +236 -0
- package/compose/corpus_ui.py +644 -0
- package/compose/domains.json +101 -100
- package/install.sh +63 -18
- package/launch/agent-launch.py +1216 -179
- package/launch/agent-launch.toml +12 -16
- package/launch/i18n/en.toml +112 -7
- package/launch/i18n/ja.toml +112 -7
- package/launch/i18n/ko.toml +112 -7
- package/learn/collect-learning.py +46 -19
- package/learn/migrate-learnings.py +10 -1
- package/package.json +11 -3
- package/provenance.json +1 -1
- package/session-cost.py +22 -2
- package/wrappers/codex-helm.sh +3 -3
|
@@ -23,7 +23,7 @@ Scoped extension of the global Multi-Model Workflow rules. Rules use portable ro
|
|
|
23
23
|
|
|
24
24
|
- FRONTIER: hardest bounded design, authority-changing decisions, triage, final verdicts.
|
|
25
25
|
- HELM: standing main/judgment seat; orchestration and bounded escalation.
|
|
26
|
-
- WORKHORSE: implementation volume and per-item judgments. SWEEP:
|
|
26
|
+
- WORKHORSE: implementation volume and per-item judgments. SWEEP: read-only work applying one explicit rule to each item, returning ambiguity as an exception.
|
|
27
27
|
- VERIFIER-A/B: different review kinds, preferably cross-family. INDEPENDENT-PR-REVIEWER: final review from a different family than the author.
|
|
28
28
|
|
|
29
29
|
- Bind concrete models in Environment Binding and allocate by **difficulty × blast radius**. The main defaults to HELM; first-of-kind/authority-changing mains use FRONTIER at a session boundary; trivial work stays direct.
|
|
@@ -35,7 +35,8 @@ Scoped extension of the global Multi-Model Workflow rules. Rules use portable ro
|
|
|
35
35
|
|
|
36
36
|
Main-context pollution is usually costlier than spawn overhead. Apply these gates in order; the first that fires decides:
|
|
37
37
|
|
|
38
|
-
1. **Independence:** verification
|
|
38
|
+
1. **Independence:** verification and review go outside your own reasoning, not merely outside your conversation. A child carries the standing corpus on both hosts, except Claude's built-in `Explore` and `Plan`, which omit the CLAUDE.md hierarchy. Otherwise a Claude child starts fresh, while Codex `spawn_agent` forks by default — `fork_turns` defaults to `all`, so the child also holds the parent's turn input unless the call passes `none` or a turn count. What a spawn buys is graded by the seat — see Review Independence — never by the fact that it happened.
|
|
39
|
+
Verify a spawn from the artifact: Claude writes the child to its own `agent-<id>.jsonl` beside the session transcript; Codex writes a rollout whose header carries `parent_thread_id`, `agent_nickname`, `agent_path`, `agent_role`. Codex's `--json` stream cannot see a spawn at all — its `collab_tool_call` object is identical whether or not one occurred.
|
|
39
40
|
2. **Parallelism:** independent items spawn in parallel with per-item tracking.
|
|
40
41
|
3. **Residual context:** spawn work whose working log is much larger than the conclusion the main needs, such as broad reads, searches, tests, or implementation bursts.
|
|
41
42
|
4. **Specifiability:** keep work local when it needs the main's live context or unresolved round-trips, especially deep debugging. Grind alone is not a FRONTIER reason.
|
|
@@ -46,6 +47,14 @@ Main-context pollution is usually costlier than spawn overhead. Apply these gate
|
|
|
46
47
|
- Explicit no-fan-out overrides standing authorization.
|
|
47
48
|
- Record one line per gate decision — `SpawnGate: <gate> <tier> spawn|inline — <why>` — plus the FRONTIER disposition. A launch contract's `Delegation=off` lifts the spawn obligation, not the records.
|
|
48
49
|
|
|
50
|
+
### Cost-Driven Down-Spawn (bounded implementation work)
|
|
51
|
+
|
|
52
|
+
For a unit already classified as bounded implementation work, this rule takes the place of gates 4 and 5 above; gates 1–3 and Escalation still come first, and an explicit no-fan-out instruction still wins. It is the measured text — apply it verbatim, do not paraphrase it:
|
|
53
|
+
|
|
54
|
+
> This rule applies at a work-unit boundary of bounded implementation work; an explicit instruction not to fan out always wins. Spawn a WORKHORSE for the unit when it has 5 or more items and is decision-complete, has a machine-checkable done-when, and is self-contained; otherwise do it inline. An unstated count is below 5.
|
|
55
|
+
|
|
56
|
+
Measured 2026-09-08 on the dependent L2 edit family with a claude-opus-5 (xhigh) parent and a claude-sonnet-5 WORKHORSE child: delegating a five-item unit saved about $0.05 per unit and a ten-item unit $0.14–0.18, net of the rule's own cost; a one-item unit cost $0.05 more delegated, and a three-item unit was unresolved at the registered sample. Untested sizes between and above the tested ones rest on the assumption that a saving present at 5 and 10 holds at 6–9 and beyond; the ordering with the gates above, the cost of reading this guide, and the rule's firing rate were not measured. Shipped by guide placement rather than into the global (decision D-20260908-2186cd).
|
|
57
|
+
|
|
49
58
|
## Delegation Mechanics And Teammate Persistence
|
|
50
59
|
|
|
51
60
|
Delegate execution, not decisions. A unit is delegable only when it is decision-complete, self-containedly specifiable, machine-checkable at done-when, and bounded in blast radius. Delegated output is staged until the main accepts it — workers take no external irreversible actions — and handling (brief, verify, correct, integrate) must be clearly subordinate to the work itself. A SWEEP-bound unit applies one explicit rule per item and returns ambiguity as an exception, never resolved.
|
|
@@ -54,11 +63,14 @@ Delegate execution, not decisions. A unit is delegable only when it is decision-
|
|
|
54
63
|
- Bundle related sub-floor tasks up to the decision-complete ceiling. A scout is read-only and reports file:line evidence for named pending decisions, probing the highest kill-risk unknown first.
|
|
55
64
|
- Prompt constants, thresholds, signatures, and judgment criteria are decisions even when stored in code. Discard decision-tainted worker output when review would cost more than a clean re-dispatch.
|
|
56
65
|
- Worker cost grows with request count × transcript prefix. Batch independent reads, minimize edit rounds, and dispatch independent workers/messages together.
|
|
66
|
+
- **Pin the tier before dispatch.** Unpinned, the tier is chosen once the work is in view and tracks task size rather than task difficulty. Claim a cost advantage only from evidence on this task.
|
|
57
67
|
- Use a resident teammate only for dependent slices in one burst. Verify that the CLI preserves its model and context; resume-after-completion may silently change both. Retire after the burst or cache TTL, and persist durable knowledge in files.
|
|
58
68
|
- After a discard or direction change, respawn once a routine round costs about as much as a fresh slice. Recover unique in-flight state to files first.
|
|
59
69
|
- Redirects to busy workers may queue rather than preempt. Check artifacts before destructive redirects, phrase them conditionally, and stop an actively harmful worker by scoped PID/worktree authority.
|
|
60
70
|
- Idle/progress notifications are hypotheses; verify repo artifacts before re-dispatch. An idle signal is liveness decoupled from the report: a subagent can go idle without ever delivering its result, so idle-without-report is not done — request the report explicitly rather than waiting. Cross-reset state belongs in files, not task boards or transcripts. When polling concurrent async jobs, pin the exact id/handle received at dispatch — a "latest" convenience selector can silently point at a sibling job and return plausible-but-wrong results.
|
|
61
71
|
- Give reviewers/subagents a read-only diff, snapshot, or isolated worktree — not the live tree the main is editing — and forbid destructive git ops (checkout --, reset --hard, stash, clean) on any tree with uncommitted work; re-verify tree integrity before trusting results produced mid-edit.
|
|
72
|
+
- Codex `spawn_agent` decides how much of the parent crosses: `fork_turns` defaults to `all`, and takes `none` or a turn count. A `SubagentStart` hook there receives `agent_type` and may return `continue: false`, so a tier rule can be enforced rather than stated.
|
|
73
|
+
- No per-spawn corpus suppression exists on either host: the subagent definition carries model and effort, not scope. Excluding the standing instructions is a process-level act — `claude --setting-sources ''`, or `CODEX_HOME` pointed at a directory holding only `auth.json` — and it removes the tier definitions with them, so a corpus-free reader and a pinned tier cannot come from one process. An emptied `CODEX_HOME` without `auth.json` fails 401; skills still load.
|
|
62
74
|
- Review cost scales with the diff, so layered review preserves delegation savings. Lower reviewer tier before dropping a review kind.
|
|
63
75
|
|
|
64
76
|
## Driving Codex CLI Directly
|
|
@@ -99,6 +111,7 @@ Instruction/config reach is per invocation. A rule in AGENTS.md cannot bind a he
|
|
|
99
111
|
- Prompt caches are per model; each mid-session switch reprocesses the loaded transcript once. Batch work by model and switch at reset boundaries.
|
|
100
112
|
- Prefer a spawned FRONTIER decision. Switch the main only when context fidelity outweighs handoff cost and the judgment cannot be delegated.
|
|
101
113
|
- Avoid unplanned alternation. Planned escalate/return and explicit A/B comparisons are valid when each cache miss is budgeted.
|
|
114
|
+
- Forking preserves conversation content on both hosts and the prompt cache on only one: a Claude `--fork-session` at the same model reuses nearly all of it and loses it across models, while a Codex `exec fork` re-sends at any model. So "fork without changing the model" is a Claude rule; on Codex a fork is priced like a fresh dispatch.
|
|
102
115
|
|
|
103
116
|
## Cross-Verification Economy
|
|
104
117
|
|
|
@@ -120,7 +133,7 @@ How much independence a review actually bought, as an ordinal grade per reviewer
|
|
|
120
133
|
| `perspective_floor` | otherwise — still a real review |
|
|
121
134
|
|
|
122
135
|
- Only upward counts. A different-but-**lower** effort earns nothing and lands on the floor: cheaper is not another perspective.
|
|
123
|
-
- **Isolation is a gate, not a rung.** A reviewer that cannot be shown to run in a fresh context is excluded entirely (`NOT_REVIEW`), never graded low — an in-context "review" is the failure this ladder exists to make visible, so it must not appear as a weak pass. Isolation is realised per mechanism: a fresh read-only subprocess, a hermetic profile, a stdio tool call in a fresh session, a headless host workflow, or a stateless API call. If none of these can deliver the required seat, the review did not happen.
|
|
136
|
+
- **Isolation is a gate, not a rung.** A reviewer that cannot be shown to run in a fresh context is excluded entirely (`NOT_REVIEW`), never graded low — an in-context "review" is the failure this ladder exists to make visible, so it must not appear as a weak pass. Isolation is realised per mechanism: a fresh read-only subprocess, a hermetic profile, a stdio tool call in a fresh session, a headless host workflow, or a stateless API call. If none of these can deliver the required seat, the review did not happen. An in-process subagent clears the conversation and keeps the standing instructions, so it satisfies isolation and still grades only by its seat — spawning is not itself a rung.
|
|
124
137
|
- The floor still requires **at least two distinct perspectives**; one pass on the main's own seat is self-review with extra steps.
|
|
125
138
|
- Multiple ready methods are **coverage, not diversity**. Distinct labels do not prove the perspectives differed.
|
|
126
139
|
- **Achieved is not available.** What can be projected before a review runs is `projected`; a clean verdict without a receipt evidencing a fresh dispatch, the declared packet, a non-empty result and the exact seat is `PROPOSED`, never ACHIEVED. A model echo is not a receipt.
|
|
@@ -222,14 +235,14 @@ Write for the next agent and re-verification, not narrative. Required content:
|
|
|
222
235
|
|
|
223
236
|
This is the human-readable projection of concrete models/tools; `launch/agent-launch.toml` is the machine launch authority and parity checks keep them aligned. Re-probe when the binding is older than ~8 weeks or a newer observable model/tool changes the surface. `agent-bios install` overwrites deployed bindings, so edit the repo copy.
|
|
224
237
|
|
|
225
|
-
Binding (2026-08
|
|
238
|
+
Binding (2026-09-08):
|
|
226
239
|
|
|
227
240
|
| Slot | Binding | Notes |
|
|
228
241
|
|---|---|---|
|
|
229
|
-
| FRONTIER | Claude Fable 5 · GPT-
|
|
242
|
+
| FRONTIER | Claude Fable 5.1 · GPT-6 Astra (read-only; max default; launcher may explicitly select Ultra) | bounded hardest decisions and verdicts |
|
|
230
243
|
| HELM | Claude Opus 5 (xhigh) · GPT-5.6 Sol (xhigh main; main Ultra requires explicit selection; bounded FRONTIER Ultra allowed) | standing main; Codex defaults bypass, explicit sandbox narrows |
|
|
231
|
-
| WORKHORSE | Claude
|
|
232
|
-
| SWEEP | Claude Haiku 4.5 · GPT-5.6 Luna (
|
|
244
|
+
| WORKHORSE | Claude Sonnet 5 (xhigh) · GPT-5.6 Terra (xhigh) | implementation and per-item judgment |
|
|
245
|
+
| SWEEP | Claude Haiku 4.5 (effort omitted) · GPT-5.6 Luna (max) | read-only; one explicit rule per item; not a rebind candidate |
|
|
233
246
|
| VERIFIER-A | plain `codex exec` deep pass — GPT-5.6 Sol at ultra effort, packet on stdin (`-c service_tier="fast"` as explicit fast opt-in) | strongest single reader; cross-family from a Claude main |
|
|
234
247
|
| VERIFIER-B | Claude Code ultracode workflow (keyword-opened, many-agent) | code/execution kind; fan-out counterpart |
|
|
235
248
|
| INDEPENDENT-PR-REVIEWER | Codex CLI | adversarial `gh pr diff` review |
|
|
@@ -241,8 +254,8 @@ Binding (2026-08-10):
|
|
|
241
254
|
Codex direct-drive (verified 0.144.1, 2026-07-12):
|
|
242
255
|
|
|
243
256
|
- `codex-helm` defaults the HELM main to `--dangerously-bypass-approvals-and-sandbox`; explicit `--sandbox` wins in any flag order. Non-Ultra defaults native multi-agent off; explicit main Ultra defaults it on.
|
|
244
|
-
- HELM is instructed to dispatch tiers through internal `codex-run`, which pins model/effort/sandbox. FRONTIER uses a separate `gpt-
|
|
245
|
-
- This is an instruction-backed, live-E2E-verified default, not a security boundary: main bypass and arbitrary expert `-c` remain available by design. `frontier.toml`
|
|
257
|
+
- HELM is instructed to dispatch tiers through internal `codex-run`, which pins model/effort/sandbox. FRONTIER uses a separate `gpt-6-astra`, read-only root: max by default, Ultra for divisible work, lower effort when cost/latency dominates. Nested multi-agent is enabled only for Ultra. Native `codex exec` spawn cannot pin role/effort.
|
|
258
|
+
- This is an instruction-backed, live-E2E-verified default, not a security boundary: main bypass and arbitrary expert `-c` remain available by design. `frontier.toml` pins the direct native FRONTIER default to max; launcher projections overwrite it from the selected tier.
|
|
246
259
|
- `codex-run` owns reach, stdin, schema, profiles, expert `-c`, channel preservation, and exit status. Keep it internal.
|
|
247
260
|
- `claude-run` is its Claude-side twin and the command a composable review contract names for a panel dispatch on that host. Same shape: prompt on stdin, final message on stdout, exit status mirrored, `--model`/`--effort` pinning the seat, everything it does not recognise forwarded to `claude`. It denies the mutating tools by default, which is not the OS-level sandbox `codex-run` gets — do not read the two defaults as equivalent guarantees. Dispatch whatever command the contract names rather than the bare CLI: only the adapter can report what the dispatch actually did, and a review with no receipt stays PROPOSED.
|
|
248
261
|
|
|
@@ -250,21 +263,23 @@ Dispatch packets:
|
|
|
250
263
|
|
|
251
264
|
| Target | Required packet / default |
|
|
252
265
|
|---|---|
|
|
253
|
-
| GPT-
|
|
254
|
-
| GPT-5.6 Terra WORKHORSE | outcome, frozen scope/inputs, authority, done-when, evidence/report, escalation;
|
|
255
|
-
| GPT-5.6 Luna SWEEP | exact search space,
|
|
266
|
+
| GPT-6 Astra FRONTIER | outcome, evidence, decision boundary, stop/verification; max default; read-only |
|
|
267
|
+
| GPT-5.6 Terra WORKHORSE | outcome, frozen scope/inputs, authority, done-when, evidence/report, escalation; xhigh |
|
|
268
|
+
| GPT-5.6 Luna SWEEP | exact search space, one rule per item, ambiguity behavior, stop, output; max; read-only; no architecture/debugging |
|
|
256
269
|
| Claude Opus 5 HELM | xhigh for agentic work; high minimum for sensitive judgment; lower only when bounded/cost-led |
|
|
257
|
-
| Claude
|
|
258
|
-
| Claude Haiku 4.5 SWEEP |
|
|
270
|
+
| Claude Sonnet 5 WORKHORSE | exact scope, apply-to-all rules, tools, verification, report; xhigh default |
|
|
271
|
+
| Claude Haiku 4.5 SWEEP | one explicit rule per item, read-only; effort parameter omitted; ambiguity returned as an exception |
|
|
259
272
|
|
|
260
273
|
Use only task-relevant tools; parallelize independent calls. Worker report: `status`, `files_or_items_touched`, `evidence`, `verification`, `risks_or_escalations`. Official basis: OpenAI [model](https://developers.openai.com/api/docs/guides/latest-model?model=gpt-5.6), [migration](https://developers.openai.com/api/docs/guides/upgrading-to-gpt-5p6-sol), [prompting](https://developers.openai.com/api/docs/guides/prompt-guidance-gpt-5p6), [Codex models](https://learn.chatgpt.com/docs/models); Anthropic [subagents](https://code.claude.com/docs/en/sub-agents), [model effort](https://code.claude.com/docs/en/model-config).
|
|
261
274
|
|
|
262
275
|
## Evidence Base
|
|
263
276
|
|
|
264
|
-
Single owner of numeric defaults
|
|
277
|
+
Single owner of numeric defaults. Dates and workload scopes belong to each observation; recalibration updates this table and dependent inline thresholds.
|
|
265
278
|
|
|
266
279
|
| Evidence | Result / rule supported |
|
|
267
280
|
|---|---|
|
|
281
|
+
| Claude M=40 confirmation (2026-09-06), adopted by owner correction (2026-09-08) | Sonnet 5/xhigh child under Opus 5/xhigh: KEEP confirmed on five fresh paired blocks; modelled cost-to-parity saving 45.5%, lower bound 40.4%. This is scoped cost evidence, not a general quality or billing guarantee. |
|
|
282
|
+
| Owner tier correction (2026-09-08), Codex discovery cells incomplete | Terra/xhigh is the measured experimental effort adopted by owner instruction, not a confirmed Codex KEEP verdict. The two HELM parent seats stay unchanged; SWEEP is not a rebind candidate and remains one-rule-per-item read-only work. |
|
|
268
283
|
| 15 sessions, 3,758 requests, 10 switches | switches consumed 13.9% of uncached input; avoid unplanned switching |
|
|
269
284
|
| 285-call limit incident | 208 post-limit dispatches and 34/35 lost items; breaker default 3 |
|
|
270
285
|
| 99 staged reviews | 15.2% halted after most compute; resume-first |
|
|
@@ -274,3 +289,6 @@ Single owner of numeric defaults; one production environment, 2026-07. Recalibra
|
|
|
274
289
|
| Codex native-spawn probe + HELM E2E | requested max/Ultra native children recorded xhigh/role null; separate read-only roots recorded max and Ultra successfully |
|
|
275
290
|
| 1,075 sessions of 50+ requests, both hosts (2026-08-16; the earlier 62-session top-by-size sample gave ~1,800-2,000) | context grows ~2,400 tok/request (IQR 1,850-2,950), hosts within 7%, ~1,800 in 400+-request sessions; auto-compaction fires at 84-95% of window, never earlier |
|
|
276
291
|
| 2 sessions decomposed by cost component (2026-08) | input 92-94% of cost, output 6-8%, cache hit 95-97%, uncached input 0.0%; an 867K→200K budget cuts cost per request ~4x |
|
|
292
|
+
| 4 dispatches over 3 situations built to trigger the Independence gate, plus a positive control (2026-09-01) | 0 spawns in the 3, 1 in the control; de-minimis absorbed all three and each inline answer was correct — a spawn mandate stated as always-fire did not fire |
|
|
293
|
+
| 60/150-file mechanical scan, N=5 on load-bearing cells (2026-09-02) | inline $0.627→$0.919; tier-pinned delegation $0.665→$0.921; unpinned +57-73%; an N=2 first reading of the same cells reported 19% and 36% savings that N=5 erased |
|
|
294
|
+
| fork cache reuse, both hosts (2026-09-02) | Claude same-model 98.9%, cross-model 0-26%; Codex 14-18% at any model (N=1 per Codex cell) — fork guidance is host-qualified |
|
|
@@ -9,28 +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-
|
|
18
|
+
derived_at: 2026-09-07
|
|
19
19
|
source_pins:
|
|
20
20
|
- doc: prompt-guidance-gpt-5p6
|
|
21
21
|
sha256: 46181efec9fd1160ef537b0379282a14c1ba32380f2f8149a805128253c1115a
|
|
22
|
-
pinned_at: 2026-09-
|
|
23
|
-
- doc:
|
|
24
|
-
sha256:
|
|
25
|
-
pinned_at: 2026-09-
|
|
22
|
+
pinned_at: 2026-09-07
|
|
23
|
+
- doc: model-guidance-gpt-6-astra
|
|
24
|
+
sha256: 2a59b26078e001a4e4e3da10693e80ad5ee1c02cbe472afa6b682308f27b8b22
|
|
25
|
+
pinned_at: 2026-09-07
|
|
26
26
|
targets:
|
|
27
|
+
- gpt-6-astra
|
|
27
28
|
- gpt-5.6-sol
|
|
28
29
|
- gpt-5.6-terra
|
|
29
30
|
- gpt-5.6-luna
|
|
30
31
|
verification_focus:
|
|
31
32
|
- prompt changes are validated by re-running the same evals, not by inspection
|
|
32
33
|
- removals are tested one group at a time so the cause of a delta is known
|
|
33
|
-
- effort changes are compared against the baseline
|
|
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
|
|
34
36
|
---
|
|
35
37
|
|
|
36
38
|
# GPT Prompting Guide
|
|
@@ -40,14 +42,79 @@ composing a prompt for a gpt-tier model — a review packet dispatched
|
|
|
40
42
|
cross-family, a subagent brief, or the main's own instructions when the main is
|
|
41
43
|
Codex.
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
|
51
118
|
|
|
52
119
|
Compose in this order; omit any block that would not change the artifact.
|
|
53
120
|
|
|
@@ -67,8 +134,7 @@ Compose in this order; omit any block that would not change the artifact.
|
|
|
67
134
|
- Coding and debugging: name the validation to run after changes — targeted
|
|
68
135
|
tests for the changed behavior, type/lint checks, build, a minimal smoke test.
|
|
69
136
|
Require prerequisite lookups before edits.
|
|
70
|
-
- Review:
|
|
71
|
-
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
|
|
72
138
|
reviewer with no stated bar defaults to plausible-sounding findings.
|
|
73
139
|
- Research and grounded work: cite only retrieved sources, attach citations to
|
|
74
140
|
the claims they support, and label inference separately from supported fact.
|
|
@@ -85,11 +151,8 @@ Compose in this order; omit any block that would not change the artifact.
|
|
|
85
151
|
This is the default for review.
|
|
86
152
|
- Work that divides into independent workstreams → fan-out. Parallelize
|
|
87
153
|
independent reads; keep dependent steps sequential.
|
|
88
|
-
-
|
|
89
|
-
|
|
90
|
-
representative tasks: `low` for latency-sensitive work, `medium` as the
|
|
91
|
-
balanced default, `high`/`xhigh` only where evals show real gain, `max`
|
|
92
|
-
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.
|
|
93
156
|
- Prefer a self-contained packet over resuming a long history: it is cheaper to
|
|
94
157
|
reason about and cheaper to cache.
|
|
95
158
|
|
|
@@ -131,18 +194,12 @@ or dependent calls alone do not justify it.
|
|
|
131
194
|
priorities hold; once they move, stale reasoning adds tokens and anchors the model to
|
|
132
195
|
a superseded approach. Compact at milestones, not every turn, and treat compacted
|
|
133
196
|
items as opaque.
|
|
134
|
-
- Set the default detail level through the API (`text.verbosity`) and keep the prompt
|
|
135
|
-
for task-specific length and structure; a prompt-only length rule has to be restated
|
|
136
|
-
everywhere.
|
|
137
197
|
- Preserve explicit user values. Where the right value is implicit, give decision
|
|
138
198
|
criteria and let the model reason from context or schema rather than installing
|
|
139
199
|
universal defaults or keyword maps.
|
|
140
200
|
- Keep reusable prefixes stable and avoid churn in large system prompts. Add
|
|
141
201
|
explicit cache breakpoints only where they measurably improve cache behavior —
|
|
142
|
-
|
|
143
|
-
and cache-write counters before adding one.
|
|
144
|
-
- Do not say "be concise" reflexively. This tier is concise by default, and the
|
|
145
|
-
instruction can push responses past useful into thin.
|
|
202
|
+
inspect the active model's cache usage and cost before adding one.
|
|
146
203
|
- After each tool result, ask whether the core request can now be answered with
|
|
147
204
|
useful evidence. If yes, answer.
|
|
148
205
|
- Render any visual artifact before finalizing; inspect layout, clipping,
|
|
@@ -154,21 +211,28 @@ or dependent calls alone do not justify it.
|
|
|
154
211
|
2. Add role, goal, real constraints, and the output shape.
|
|
155
212
|
3. Add only the tools the task needs, each with when-to-use and error behavior.
|
|
156
213
|
4. Add stop rules and the verification the task must pass.
|
|
157
|
-
5.
|
|
158
|
-
|
|
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.
|
|
159
223
|
|
|
160
224
|
## Sources
|
|
161
225
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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.
|
|
165
231
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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.
|
|
169
235
|
`launch/check-prompting-targets.sh` fails when the launch config binds a model
|
|
170
236
|
this guide does not list; that check is about **naming**, and a model added to
|
|
171
237
|
`targets:` satisfies it forever. Whether the guidance was actually re-derived is
|
|
172
238
|
not decidable and is gated nowhere.
|
|
173
|
-
`launch/check-prompting-targets.sh` fails when the launch config binds a model
|
|
174
|
-
this guide does not list.
|
|
@@ -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
|
-
-
|
|
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
|
|
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.
|