@orkestrel/scaffold 0.0.60 → 0.0.61
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/README.md +13 -10
- package/dist/bin/main.js +632 -320
- package/dist/bin/main.js.map +1 -1
- package/dist/host/CLAUDE.md +5 -1
- package/dist/host/agents/orchestration.md +44 -19
- package/dist/host/agents/skills/enterprise-bootstrap/references/components.md +5 -5
- package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +2 -2
- package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +10 -9
- package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +21 -11
- package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +20 -2
- package/dist/host/agents/skills/orkestrel-harden-package/SKILL.md +1 -1
- package/dist/host/agents/skills/orkestrel-harden-package/references/hardening.md +1 -1
- package/dist/host/agents/skills/orkestrel-harden-package/references/research.md +1 -1
- package/dist/host/agents/templates/brief.md +16 -7
- package/dist/host/agents/transports/claude.md +4 -2
- package/dist/host/agents/transports/codex.md +4 -1
- package/dist/host/claude/agents/analyst.md +3 -1
- package/dist/host/claude/agents/application.md +1 -1
- package/dist/host/claude/agents/builder.md +3 -3
- package/dist/host/claude/agents/checker.md +5 -0
- package/dist/host/claude/agents/grok.md +15 -5
- package/dist/host/claude/agents/implementer.md +1 -1
- package/dist/host/claude/agents/orkestrel.md +2 -2
- package/dist/host/claude/agents/planner.md +10 -0
- package/dist/host/claude/agents/reviewer.md +14 -8
- package/dist/host/claude/agents/sol.md +3 -1
- package/dist/host/claude/agents/verifier.md +2 -4
- package/dist/host/claude/rules/architecture.md +7 -5
- package/dist/host/claude/rules/documentation.md +1 -0
- package/dist/host/claude/rules/names.md +23 -5
- package/dist/host/claude/rules/patterns.md +1 -0
- package/dist/host/claude/rules/quality.md +1 -1
- package/dist/host/claude/rules/tests.md +3 -3
- package/dist/host/claude/rules/typescript.md +4 -1
- package/dist/host/claude/rules/writing.md +2 -2
- package/dist/host/codex/agents/builder.toml +6 -6
- package/dist/host/codex/agents/checker.toml +2 -1
- package/dist/host/codex/agents/grok.toml +12 -5
- package/dist/host/codex/agents/implementer.toml +2 -2
- package/dist/host/codex/agents/opus.toml +6 -1
- package/dist/host/codex/agents/planner.toml +11 -6
- package/dist/host/codex/agents/reviewer.toml +8 -6
- package/dist/host/guides/scaffold.md +39 -14
- package/dist/host/manifest.json +41 -41
- package/dist/host/scripts/codex.sh +0 -0
- package/dist/host/scripts/cursor.sh +0 -0
- package/dist/host/scripts/deps.sh +0 -0
- package/dist/host/scripts/ollama.sh +0 -0
- package/dist/src/core/index.cjs +420 -278
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +361 -220
- package/dist/src/core/index.d.ts +361 -220
- package/dist/src/core/index.js +417 -279
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +208 -170
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.d.cts +276 -152
- package/dist/src/server/index.d.ts +276 -152
- package/dist/src/server/index.js +200 -172
- package/dist/src/server/index.js.map +1 -1
- package/package.json +4 -3
package/dist/host/CLAUDE.md
CHANGED
|
@@ -9,7 +9,8 @@ follows it. This file adds only what Claude Code does differently, and cannot we
|
|
|
9
9
|
## Dispatch mechanism
|
|
10
10
|
|
|
11
11
|
- Use the Agent tool for a single dispatch, including when later control flow depends on its result.
|
|
12
|
-
- Use a Workflow for a deterministic fan-out, staged pipeline, or loop. Serialize writing nodes
|
|
12
|
+
- Use a Workflow for a deterministic fan-out, staged pipeline, or loop. Serialize writing nodes, and
|
|
13
|
+
name each node's model alias per § Models.
|
|
13
14
|
- Recover an interrupted Workflow with `resumeFromRunId`.
|
|
14
15
|
- Foreground Bash is hard-capped at 10 minutes regardless of its timeout parameter. Launch anything
|
|
15
16
|
that can exceed it as a harness-tracked background command.
|
|
@@ -20,6 +21,9 @@ follows it. This file adds only what Claude Code does differently, and cannot we
|
|
|
20
21
|
|
|
21
22
|
- Use the aliases `opus` and `sonnet`. Never use a fixed Claude model ID and never use `inherit`.
|
|
22
23
|
- Never set `CLAUDE_CODE_SUBAGENT_MODEL`. It flattens the engine split.
|
|
24
|
+
- Every Workflow `agent()` node names its model alias explicitly. The Workflow custom-agent path
|
|
25
|
+
does not apply a role file's `model:` pin, so a node that omits the alias runs on the session
|
|
26
|
+
model and the lane reads normal on the wrong engine.
|
|
23
27
|
- Run the main session on `opus` at high effort, set by `/model opus` or `"model": "opus"`. Opus 5
|
|
24
28
|
is the Orchestrator in this harness. Its Orchestrator duties are unchanged if it is configured
|
|
25
29
|
otherwise.
|
|
@@ -35,8 +35,7 @@ One workflow runs across all providers. Each engine has one job and never takes
|
|
|
35
35
|
- Route each nontrivial implementation unit to Opus or Sol. Objective, constraint-heavy,
|
|
36
36
|
mechanical-precision work goes to Sol. API-shape, naming, and documentation-voice work goes to
|
|
37
37
|
Opus. Cursor Composer is not an implementation route, and no `composer` role exists.
|
|
38
|
-
- Design runs the adversarial pass.
|
|
39
|
-
engine did not write the work.
|
|
38
|
+
- Design runs the adversarial pass. § Execution loop's audit step fixes which lanes an audit runs.
|
|
40
39
|
|
|
41
40
|
## Orchestration by harness
|
|
42
41
|
|
|
@@ -64,12 +63,15 @@ the execution loop's audit step names, on the same clean-context terms.
|
|
|
64
63
|
|
|
65
64
|
| Lane | Argues |
|
|
66
65
|
| -------------- | --------------------------------------------------------------------------- |
|
|
67
|
-
| **Subjective** | Shape, taste, naming, ergonomics, design fit,
|
|
66
|
+
| **Subjective** | Shape, taste, naming, ergonomics, design fit, the feel the API must present |
|
|
68
67
|
| **Objective** | Correctness, constraints, and what the code and contracts actually permit |
|
|
69
68
|
|
|
70
69
|
**A required lane always runs.** Never collapse required lanes into one. Never let an engine's
|
|
71
70
|
absence stand in for a required lane.
|
|
72
71
|
|
|
72
|
+
Call a lane the round did not dispatch **not run**. `dark` names a bench that cannot round-trip and
|
|
73
|
+
names nothing else, so never write it of a lane. A verdict file's recorded reason uses those words.
|
|
74
|
+
|
|
73
75
|
### Clean contexts
|
|
74
76
|
|
|
75
77
|
- Dispatch each lane as a fresh subagent. Never run a lane inside the Orchestrator's own context.
|
|
@@ -134,6 +136,9 @@ Fall back in this order and record the substitution:
|
|
|
134
136
|
nothing, and returns the required distillate.
|
|
135
137
|
- Work directly on a typo, a one-line fix, or a single lookup. Orchestrate when isolation,
|
|
136
138
|
parallelism, independent review, or substantial context justifies it.
|
|
139
|
+
- Dispatch staging, packing, gate-chain invocation, and instrument authorship as units — `builder`
|
|
140
|
+
for a fully specified script, `verifier` for its evidence — each with a brief and an audit like
|
|
141
|
+
any other unit. Only the commit and the push stay with the Orchestrator.
|
|
137
142
|
|
|
138
143
|
## Roles
|
|
139
144
|
|
|
@@ -196,8 +201,8 @@ Every role honours this floor. No dispatch may widen it.
|
|
|
196
201
|
those roles cannot inspect the tree by writing to it, the Orchestrator supplies the actual diff
|
|
197
202
|
and status evidence in every review dispatch.
|
|
198
203
|
- `verifier` has no edit or write tools and never fixes a failure.
|
|
199
|
-
- Run writing
|
|
200
|
-
|
|
204
|
+
- Run one writing role per checkout, on disjoint checkouts, each dispatched from a clean committed
|
|
205
|
+
baseline and each owning disjoint files. In a single checkout that is one writer at a time.
|
|
201
206
|
- Treat every shared file as report-only.
|
|
202
207
|
- No role commits, pushes, tags, publishes, installs dependencies, or runs a destructive command.
|
|
203
208
|
- No role runs `git checkout`, `git restore`, `git stash`, `git reset`, or `git clean`. Each discards
|
|
@@ -249,8 +254,8 @@ Every role honours this floor. No dispatch may widen it.
|
|
|
249
254
|
Concurrent executors share a filesystem unless isolated. Follow these rules to prevent clobbered
|
|
250
255
|
edits, formatter and build races, cache phantoms, and validation cross-talk.
|
|
251
256
|
|
|
252
|
-
1. Serialize
|
|
253
|
-
dispatch so git is the rollback mechanism.
|
|
257
|
+
1. Serialize writers as § Permission floor states: one per checkout, checkouts disjoint. Commit a
|
|
258
|
+
checkpoint before each writing dispatch so git is the rollback mechanism.
|
|
254
259
|
2. Assign disjoint owned files plus explicit shared and off-limits files.
|
|
255
260
|
3. Keep shared files report-only. Executors return exact patches for serial integration.
|
|
256
261
|
4. Restrict concurrent executors to read-only, scoped validation. A tree-wide result may contain a
|
|
@@ -272,8 +277,8 @@ edits, formatter and build races, cache phantoms, and validation cross-talk.
|
|
|
272
277
|
and a flake makes that look like it worked. Refuse the failed row, name it, and re-run it alone
|
|
273
278
|
before deciding what it was.
|
|
274
279
|
9. Run a fleet pass in slices that report as they finish, never as one block. A block hides its first
|
|
275
|
-
failure behind every target that follows, so the failure surfaces after the work it
|
|
276
|
-
|
|
280
|
+
failure behind every target that follows, so the failure surfaces after the work it exists to
|
|
281
|
+
stop. A slice hands control back while most of the fleet is still unstarted.
|
|
277
282
|
10. Re-run a timing or resource failure alone before believing it. Concurrent slices, builds, and
|
|
278
283
|
suites make a container miss deadlines it meets when idle, so a red result under load is a
|
|
279
284
|
question rather than an answer. A unit re-running the file alone is not alone: its own exec,
|
|
@@ -326,21 +331,21 @@ longer holds.
|
|
|
326
331
|
ends the campaign, each to end implemented, repaired, retained, or intentionally excluded on
|
|
327
332
|
evidence. A plan that names work but not its end can only be abandoned, never finished.
|
|
328
333
|
3. **Implement.** Route each nontrivial objective unit to the Sol `implementer` and each nontrivial
|
|
329
|
-
subjective unit to the Opus `implementer`, in the
|
|
330
|
-
fully specified taste-free unit to `builder`. Never route implementation to an
|
|
331
|
-
judgment load exceeds.
|
|
334
|
+
subjective unit to the Opus `implementer`, in the checkout the unit writes, one writer per
|
|
335
|
+
checkout. Route a fully specified taste-free unit to `builder`. Never route implementation to an
|
|
336
|
+
engine the unit's judgment load exceeds.
|
|
332
337
|
4. **Integrate.** Evaluate each distillate against its acceptance criteria, apply shared-file
|
|
333
338
|
patches serially, and route cross-cutting findings. Integration applies exact returned patches
|
|
334
339
|
and mechanical conflict resolution only. A new type, mechanism, behavior, or acceptance
|
|
335
340
|
criterion discovered at integration is a successor brief routed to a writer, never an
|
|
336
341
|
integration edit.
|
|
337
|
-
5. **Audit adversarially.** Audit every nontrivial implementation with
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
342
|
+
5. **Audit adversarially.** Audit every nontrivial implementation with the objective lane and the
|
|
343
|
+
subjective lane — `analyst` and `reviewer`, the way the design step names its lanes — at least
|
|
344
|
+
one of them on an engine that did not write the work. Dispatch `checker` in addition when the
|
|
345
|
+
acceptance criteria are mechanical — counts, paths, parity rows, scope honesty — never in place
|
|
346
|
+
of a lane. A round that runs fewer lanes than its brief names, or omits the checker its criteria
|
|
347
|
+
call for, records the deviation in its verdict file with that round's own reason, never a
|
|
348
|
+
template sentence.
|
|
344
349
|
- State the audit's subject as numbered falsifiable claims and require per-claim verdicts with
|
|
345
350
|
evidence, per the Falsification law in `.claude/rules/quality.md` and the `orkestrel-falsify`
|
|
346
351
|
value set, unless the dispatch names a different skill that fixes another.
|
|
@@ -447,6 +452,8 @@ The harness bridge names the concrete mechanism for each of these.
|
|
|
447
452
|
the record transcribes them, because the committed instrument re-produces the film. The **Bench
|
|
448
453
|
laws** rule "Ephemeral streams, durable records" owns journals and points here for everything
|
|
449
454
|
durable.
|
|
455
|
+
- Name a retained log with the `<unit>.log.txt` pattern, never with a bare `.log` suffix, which the
|
|
456
|
+
root `.gitignore` file ignores.
|
|
450
457
|
- Promote anything that must outlive the campaign into a durable artifact before the sweep — a
|
|
451
458
|
commit message, a guide, a rule, a retrospective. What is only in a swept file did not survive,
|
|
452
459
|
and a debrief that must quote the record verbatim has nothing to quote.
|
|
@@ -461,6 +468,11 @@ The harness bridge names the concrete mechanism for each of these.
|
|
|
461
468
|
wave's plan, routing ledger, and verdicts sit together rather than split across the packages they
|
|
462
469
|
rule on.
|
|
463
470
|
- Never put them in the package they are about. A published package's tree is its product.
|
|
471
|
+
- Where the orchestrator's repository is itself a subject package, keep `.orkestrel/` as the
|
|
472
|
+
artifact home and stage every landing chain by path, never with `git add -A`. Run that
|
|
473
|
+
checkout's own CLI through the built `node dist/bin/main.js` entry, never through the `npx`
|
|
474
|
+
launcher, and record its audit reading beside the landing instead of gating the landing on it.
|
|
475
|
+
Commit the records before the landing's commit step, never during it.
|
|
464
476
|
- Claim nothing outside `.orkestrel/` unless Orkestrel scaffold mandates it. Everything Orkestrel
|
|
465
477
|
owns in a consumer's tree lives beneath that folder, so a convention can be settled there without
|
|
466
478
|
colliding with a convention that is not Orkestrel's.
|
|
@@ -537,6 +549,9 @@ each check. Then run this checklist against what you filled.
|
|
|
537
549
|
derived from it, and a template change with the materialized copy the package generates from it.
|
|
538
550
|
- Read each criterion against the off-limits list, line by line. Grant the file a criterion needs or
|
|
539
551
|
strike that criterion. A file the change will break that appears in neither list is unscoped.
|
|
552
|
+
- Where a scope line names the `tests/**` or `src/**` glob, name the paths the `scaffold repair`
|
|
553
|
+
command restores as off-limits in the same sentence. Bound a criterion wider than its Sites by
|
|
554
|
+
the brief's scope.
|
|
540
555
|
- Scope a unit that changes a mechanism to own the prose describing it. Where a brief scopes that
|
|
541
556
|
prose out, name the carrier and dispatch it before the change ships.
|
|
542
557
|
- Give a small unrelated obligation its own unit.
|
|
@@ -747,6 +762,8 @@ transport.
|
|
|
747
762
|
|
|
748
763
|
### Recovering a dark bench
|
|
749
764
|
|
|
765
|
+
- A probe that finds no bench binary records the bench dark and, in the same turn, names to the user
|
|
766
|
+
the install command and the bench it unblocks. Re-probe when the user answers.
|
|
750
767
|
- A probe that finds a bench binary present but authentication unavailable starts recovery in the
|
|
751
768
|
same turn. Do not record the bench dark and wait.
|
|
752
769
|
- Background the login command with its output captured under `tmp/<bench>/`, surface the
|
|
@@ -775,6 +792,9 @@ five-minute upload window in `references/window.md`. Load the skill when the use
|
|
|
775
792
|
release, and follow it there rather than reconstructing the procedure here. What remains in this
|
|
776
793
|
section binds an executor who is not publishing.
|
|
777
794
|
|
|
795
|
+
A wave over unpublished tips derives its order per run from the graph and records only the round
|
|
796
|
+
each package landed in, never the order itself.
|
|
797
|
+
|
|
778
798
|
### Fixing a dependency before it publishes
|
|
779
799
|
|
|
780
800
|
A defect a consumer meets sometimes lives in a package the consumer only has from the registry.
|
|
@@ -793,6 +813,11 @@ Build the dependency from source, pack it, and **install the tarball** into the
|
|
|
793
813
|
- **Rebuild and repack whenever the source moves.** A stale tarball is the same defect as a stale
|
|
794
814
|
`dist/`, and it is worse for being invisible: the consumer's gates go green against a fix that no
|
|
795
815
|
longer exists in the dependency's tree.
|
|
816
|
+
- **Run one unit per checkout, at that checkout's catalog layer.** Give a checkout with no rows an
|
|
817
|
+
adopt unit only when its typecheck against the staged closure reddens.
|
|
818
|
+
- **Fetch and merge the dependency's default branch before packing it**, wherever another session
|
|
819
|
+
can move that branch. A pack from a stale tip ships the consumer a dependency the dependency's own
|
|
820
|
+
repository no longer has.
|
|
796
821
|
- **Restore the registry copy before any gate that must prove the published artifact, and before
|
|
797
822
|
publishing anything.** A distribution proof run against a local tarball proves the local tarball.
|
|
798
823
|
The release still follows layer order: the dependency publishes first, then the consumer re-pins to
|
|
@@ -625,7 +625,7 @@ Real switchable tab panels (JS-driven — buttons, not scroll anchors):
|
|
|
625
625
|
</div>
|
|
626
626
|
```
|
|
627
627
|
|
|
628
|
-
**Responsive offcanvas** — the canonical sidebar-that-becomes-a-drawer: replace `.offcanvas` with `.offcanvas-{sm|md|lg|xl|xxl}`. Content renders **inline above** that breakpoint and as an **offcanvas below** it. Close buttons inside a responsive offcanvas need an explicit `data-bs-target`. Always set `aria-labelledby` (it is conceptually a dialog; `role="dialog"` is added by JS). Width/height
|
|
628
|
+
**Responsive offcanvas** — the canonical sidebar-that-becomes-a-drawer: replace `.offcanvas` with `.offcanvas-{sm|md|lg|xl|xxl}`. Content renders **inline above** that breakpoint and as an **offcanvas below** it. Close buttons inside a responsive offcanvas need an explicit `data-bs-target`. Always set `aria-labelledby` (it is conceptually a dialog; `role="dialog"` is added by JS). Width/height through `--bs-offcanvas-width` (400px) / `--bs-offcanvas-height` (30vh). Full app-shell pattern: [bootstrap-reference.md](bootstrap-reference.md) → App shell.
|
|
629
629
|
|
|
630
630
|
### Pagination
|
|
631
631
|
|
|
@@ -802,7 +802,7 @@ Popovers are **opt-in**: they do nothing until initialized in JS (see [JavaScrip
|
|
|
802
802
|
</div>
|
|
803
803
|
```
|
|
804
804
|
|
|
805
|
-
Gotcha: the spied element must be a scroll container (height/overflow, or focusable
|
|
805
|
+
Gotcha: the spied element must be a scroll container (height/overflow, or focusable through `tabindex="0"`), and heading IDs must match the nav `href`s exactly. Scrollspy highlights position in one long page — it is not a substitute for real tabs.
|
|
806
806
|
|
|
807
807
|
### Spinners
|
|
808
808
|
|
|
@@ -899,7 +899,7 @@ Modifiers (combine freely):
|
|
|
899
899
|
</div>
|
|
900
900
|
```
|
|
901
901
|
|
|
902
|
-
Toasts are **opt-in** — hidden until `.show()` is called (or shown
|
|
902
|
+
Toasts are **opt-in** — hidden until `.show()` is called (or shown through a trigger). Keep the container in the DOM before showing so the live region announces. Use `role="status"`/`aria-live="polite"` for confirmations; reserve `role="alert"`/`assertive` for urgent messages. Errors requiring action are never toasts — see [bootstrap-reference.md](bootstrap-reference.md) → Feedback discipline.
|
|
903
903
|
|
|
904
904
|
### Tooltip (Requires Popper.js)
|
|
905
905
|
|
|
@@ -926,7 +926,7 @@ Toasts are **opt-in** — hidden until `.show()` is called (or shown via a trigg
|
|
|
926
926
|
</button>
|
|
927
927
|
```
|
|
928
928
|
|
|
929
|
-
Tooltips are **opt-in** (JS init required, below). Only attach to focusable elements so keyboard users can trigger them; never put essential information _only_ in a tooltip, and never report form errors
|
|
929
|
+
Tooltips are **opt-in** (JS init required, below). Only attach to focusable elements so keyboard users can trigger them; never put essential information _only_ in a tooltip, and never report form errors through a tooltip. `data-bs-html` with untrusted content is an XSS vector.
|
|
930
930
|
|
|
931
931
|
## JavaScript Initialization
|
|
932
932
|
|
|
@@ -949,7 +949,7 @@ const myToast = bootstrap.Toast.getOrCreateInstance('#myToast')
|
|
|
949
949
|
myToast.show()
|
|
950
950
|
```
|
|
951
951
|
|
|
952
|
-
Constructors accept elements or CSS selector strings. Full lifecycle — `getInstance`, `dispose()` on unmount, event pairs (`show.bs.*` / `shown.bs.*`), async behavior, and why
|
|
952
|
+
Constructors accept elements or CSS selector strings. Full lifecycle — `getInstance`, `dispose()` on unmount, event pairs (`show.bs.*` / `shown.bs.*`), async behavior, and why an SPA prefers a framework wrapper: [bootstrap-reference.md](bootstrap-reference.md) → JavaScript lifecycle.
|
|
953
953
|
|
|
954
954
|
## Icons
|
|
955
955
|
|
|
@@ -71,8 +71,8 @@ a practice that worked so it repeats.
|
|
|
71
71
|
4. **Process retrospective.** Walk the campaign record for both failure and success:
|
|
72
72
|
dispatches that deviated and why; recoveries that worked (codify the mechanism that
|
|
73
73
|
saved them); estimates versus observed durations; audit rounds that caught real
|
|
74
|
-
defects versus rounds that churned; anything the orchestrator absorbed that
|
|
75
|
-
|
|
74
|
+
defects versus rounds that churned; anything the orchestrator absorbed that a dispatch
|
|
75
|
+
owned, or dispatched that the orchestrator owned.
|
|
76
76
|
5. **Instruction-set audit.** Audit the agents, rules, skills, and orchestration
|
|
77
77
|
contract themselves against the campaign record, using the adversarial method in
|
|
78
78
|
[instruction-audit.md](references/instruction-audit.md). What confused an executor is
|
|
@@ -7,11 +7,12 @@ evidence-first treatment as any surface.
|
|
|
7
7
|
## Blind passes, one brief
|
|
8
8
|
|
|
9
9
|
Run the subjective lane and the objective lane on the SAME brief, in parallel, neither
|
|
10
|
-
seeing the other's answer before both return. `
|
|
11
|
-
|
|
10
|
+
seeing the other's answer before both return. `.agents/orchestration.md` § Engine
|
|
11
|
+
assignment decides which engine and which role holds each lane, including under a dark
|
|
12
|
+
bench; read the assignment there and name it in the dispatch.
|
|
12
13
|
|
|
13
14
|
Each lane returns numbered findings, most severe first, and exactly one terminal line:
|
|
14
|
-
`INSTRAUDIT <LANE>: <
|
|
15
|
+
`INSTRAUDIT <LANE>: <finding ids, or none>`. Each charter defaults to the `orkestrel-falsify`
|
|
15
16
|
verdict shape and takes a different shape the dispatch names, so name `orkestrel-debrief`
|
|
16
17
|
in the dispatch and this shape binds.
|
|
17
18
|
|
|
@@ -25,9 +26,9 @@ record.
|
|
|
25
26
|
|
|
26
27
|
## The subjective lens list
|
|
27
28
|
|
|
28
|
-
Held by
|
|
29
|
-
role's job is one job, and whether the skill family reads as one system. This section
|
|
30
|
-
the lens list's only normative home, and the lane states its coverage against it.
|
|
29
|
+
Held by the subjective lane. It judges coherence of the role model, charter voice, whether
|
|
30
|
+
each role's job is one job, and whether the skill family reads as one system. This section
|
|
31
|
+
is the lens list's only normative home, and the lane states its coverage against it.
|
|
31
32
|
|
|
32
33
|
- **Role-job singularity.** Is each charter's work cohesive? A charter describing bundled
|
|
33
34
|
jobs is either a role to split or a bundle no dispatch sends whole.
|
|
@@ -48,9 +49,9 @@ the lens list's only normative home, and the lane states its coverage against it
|
|
|
48
49
|
|
|
49
50
|
## The objective lens list
|
|
50
51
|
|
|
51
|
-
Held by
|
|
52
|
-
record. This section is the lens list's only normative home, and the lane states
|
|
53
|
-
against it.
|
|
52
|
+
Held by the objective lane. It runs evidence-only sweeps of the actual files and the
|
|
53
|
+
campaign record. This section is the lens list's only normative home, and the lane states
|
|
54
|
+
its coverage against it.
|
|
54
55
|
|
|
55
56
|
- **Duplication diff.** Whole-line and obligation-level comparison across charters, rules,
|
|
56
57
|
and skills. A charter that restates a rule drifts from it; a rule restated elsewhere has
|
|
@@ -72,13 +72,15 @@ nobody claimed.
|
|
|
72
72
|
brief that points at a rule file, section, or guide the executor cannot find delivers nothing while
|
|
73
73
|
looking like authority — and it fails silently, because an auditor does not report a heading it
|
|
74
74
|
never saw. Check before dispatch; propagate the missing file rather than restating its contents in
|
|
75
|
-
the brief. This is the reason restatement felt necessary, and it is the wrong cure.
|
|
75
|
+
the brief. This is the reason restatement felt necessary, and it is the wrong cure. Where the
|
|
76
|
+
executor's tree carries a superseded vendored copy of an authority, take the stale-authority
|
|
77
|
+
branch in `references/brief.md` § "What not to put in a brief".
|
|
76
78
|
- Run the **adversarial pass** on one identical brief: a subjective lane and an objective
|
|
77
79
|
lane, each a fresh subagent with a clean context, blind to each other. Reconcile them yourself.
|
|
78
80
|
`.agents/orchestration.md` owns lane definitions, engine assignment, and what happens when an
|
|
79
81
|
engine is dark; do not restate them here.
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
+
- `.agents/orchestration.md` § Execution loop owns which lanes a round runs and the deviation a
|
|
83
|
+
short round records; § Engine assignment owns the substitution.
|
|
82
84
|
- **Pair every finder with an independent refuter when the round fans out past the subjective and
|
|
83
85
|
objective lanes.** The
|
|
84
86
|
refuter receives one slice's findings, never that finder's work, and is briefed to BREAK them
|
|
@@ -135,27 +137,35 @@ comparable; a round that invents its own cannot be read against the last one.
|
|
|
135
137
|
| --------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
136
138
|
| `CONFIRMED` | attacked and it held | as the Falsification law requires |
|
|
137
139
|
| `BROKEN` | falsified | as the Falsification law requires — note it says _input, **state, or interleaving**_, so a concurrency claim is falsified by an interleaving, not by an input |
|
|
138
|
-
| `UNRESOLVED` | cannot be decided from the evidence available | what would settle it
|
|
140
|
+
| `UNRESOLVED` | cannot be decided from the evidence available | what would settle it; a claim whose only evidence is the writer's own report takes this value |
|
|
139
141
|
| `NOT-EVIDENCED` | a claim about a rendered or externally driven surface the supplied capture cannot show | which capture is missing |
|
|
140
142
|
|
|
141
143
|
`CONFIRMED` and `BROKEN` defer; only `UNRESOLVED` and `NOT-EVIDENCED` are this skill's, because
|
|
142
144
|
the law does not name them. `BROKEN` and `UNRESOLVED` are **separate**: a claim nobody could
|
|
143
145
|
decide has not been falsified, and it cannot supply the fields falsification requires.
|
|
144
|
-
`NOT-EVIDENCED` is the
|
|
145
|
-
not re-invented.
|
|
146
|
+
`NOT-EVIDENCED` is the auditing lanes' own token; it is kept, not re-invented.
|
|
146
147
|
|
|
147
148
|
2. **Findings fitting no claim**, if any, each substantiated to the same standard as `BROKEN`.
|
|
148
149
|
|
|
149
|
-
3. **
|
|
150
|
+
3. **Attacked and held**: the claims this round attacked and could not break, each with the attack
|
|
151
|
+
that failed, and the adjacent behaviour that looks like the defect and is correct. This is where
|
|
152
|
+
the next round reads what has already been tried, so a claim listed here without its attack is
|
|
153
|
+
worth nothing to it. A claim's own `CONFIRMED` line already carries the evidence that convinced
|
|
154
|
+
the auditor, so list here only the attacks no verdict line carries and the adjacent behaviour.
|
|
155
|
+
|
|
156
|
+
4. **One terminal line**, and only one:
|
|
150
157
|
|
|
151
158
|
```text
|
|
152
|
-
VERDICT: PASS
|
|
153
|
-
VERDICT: FAIL
|
|
159
|
+
VERDICT: PASS
|
|
160
|
+
VERDICT: FAIL <claim numbers>; outside the claims: <finding ids>
|
|
154
161
|
```
|
|
155
162
|
|
|
156
|
-
|
|
163
|
+
The claim numbers are every claim that is not `CONFIRMED`. Write `none` in a slot the round
|
|
164
|
+
leaves empty, so a `FAIL` driven only by a finding outside the claims still names both.
|
|
165
|
+
|
|
166
|
+
**`PASS` requires all of this**: every claim `CONFIRMED`, nothing `UNRESOLVED`, nothing
|
|
157
167
|
`NOT-EVIDENCED`, and no substantiated finding outside the claims. A single substantiated finding
|
|
158
|
-
forces `FAIL`
|
|
168
|
+
forces `FAIL` however the numbered claims landed — otherwise a round can report a real
|
|
159
169
|
defect and still emit the word that authorises the release.
|
|
160
170
|
|
|
161
171
|
No process diary. No summary of what was read.
|
|
@@ -36,6 +36,21 @@ an executor inventing an answer and building on it silently.
|
|
|
36
36
|
**The threshold.** State that a finding is worth more than a clean pass, and why: the alternative is
|
|
37
37
|
a consumer finding it after publication, when the version is already spent.
|
|
38
38
|
|
|
39
|
+
## The read-only audit lane's brief
|
|
40
|
+
|
|
41
|
+
An audit lane writes nothing and runs nothing, so its brief carries fewer rows than a writing
|
|
42
|
+
unit's. Give a lane every row § Anatomy names — the subject with the evidence
|
|
43
|
+
§ "Evidence, by subject type" requires of each row it occupies, what the round decides, already
|
|
44
|
+
established, the numbered falsifiable claims, the unknowns, and the threshold — plus its own
|
|
45
|
+
**Role and lane** row (the role, its engine, and which lane it holds) and **Output** row (the
|
|
46
|
+
verdict shape and its single terminal line). Review evidence folds into the subject.
|
|
47
|
+
|
|
48
|
+
Omit the rows a writer needs and a lane cannot use: owned, shared, and off-limits files; the
|
|
49
|
+
Execution line's writer form, keeping the sentence that the lane performs the assignment directly
|
|
50
|
+
and spawns nothing; and acceptance criteria stated as gate commands. A lane that holds no shell
|
|
51
|
+
cannot close a gate criterion, so a brief handing it one is asking for a ruling on the writer's
|
|
52
|
+
report.
|
|
53
|
+
|
|
39
54
|
## The successor rule
|
|
40
55
|
|
|
41
56
|
A re-run **amends**; it never restates. Rewriting a brief from scratch loses the shape of what has
|
|
@@ -71,7 +86,7 @@ repair to carry the next defect; a round that finds them is converging, not fail
|
|
|
71
86
|
accumulated damage no single diff shows.
|
|
72
87
|
- **"The self-declared sound-and-unchanged verdicts are sound."** A writer's table saying a site
|
|
73
88
|
needed no change is a claim like any other, made by the party least able to test it. Require the
|
|
74
|
-
auditor to pick the ones it considers most likely wrong and actually attack them
|
|
89
|
+
auditor to pick the ones it considers most likely wrong and actually attack them.
|
|
75
90
|
|
|
76
91
|
## Instructions that change auditor behaviour
|
|
77
92
|
|
|
@@ -92,7 +107,10 @@ the brief, by the orchestrator.
|
|
|
92
107
|
## What not to put in a brief
|
|
93
108
|
|
|
94
109
|
- Laws already binding from `AGENTS.md` and the rule files. Reference them; restating invites drift
|
|
95
|
-
between the copy and the original.
|
|
110
|
+
between the copy and the original. Where the executor's tree carries a vendored copy of an
|
|
111
|
+
authority the canon has since superseded, quote the landed text with its canonical path and mark
|
|
112
|
+
the quotation as superseding the vendored copy, because a bare reference resolves to the stale
|
|
113
|
+
copy the executor holds.
|
|
96
114
|
- Any hint of what the other auditor is finding, or has found.
|
|
97
115
|
- Your own hypothesis about where the defect is, beyond what the claims state. An auditor handed a
|
|
98
116
|
suspect investigates the suspect and stops.
|
|
@@ -47,7 +47,7 @@ Load [hardening.md](references/hardening.md) for the hardening lane and for any
|
|
|
47
47
|
6. **Prove each defect before repairing it.** A repair begins with a test that fails for that defect: record the exact command and its failing count before the fix and the same command's passing count after. A repair with no red-then-green record is unproven.
|
|
48
48
|
7. **Consolidate.** Run the complete centralization and wrapper sweep. Update all call sites to the real symbol rather than leaving aliases or 1:1 delegates.
|
|
49
49
|
8. **Challenge seams.** Add deterministic tests for invariants, boundaries, failures, lifecycle, cleanup, cancellation, concurrency, hostile input, and resource pressure as applicable, under the test rules' real-implementation law.
|
|
50
|
-
9. **Use live services deliberately.** Put real external services/models in their dedicated project, require readiness, and make each request minimally sufficient,
|
|
50
|
+
9. **Use live services deliberately.** Put real external services/models in their dedicated project, require readiness, and make each request minimally sufficient, stable across the service's nondeterminism, and behaviorally meaningful. When the claim is that a foreign client can use this package, drive one representative real client end to end.
|
|
51
51
|
10. **Document the final behavior.** Update the governing guide, examples, method tables, limitations, and parity coverage. Document architectural limits honestly.
|
|
52
52
|
11. **Audit completion.** Inspect test discovery, `.todo`/`.skip`/conditional skip use, source/test helper duplication, exports, environment isolation, unexpected text corruption, and the entire diff.
|
|
53
53
|
12. **Verify.** Run the repository-prescribed gates in order and inspect the generated outputs relevant to the request.
|
|
@@ -50,7 +50,7 @@ Keep live tests in a dedicated project with explicit readiness, setup, timeout,
|
|
|
50
50
|
- For model tests, constrain temperature/seed/options when the real API supports it, but do not claim determinism the provider does not promise.
|
|
51
51
|
- Increase context or workload incrementally only when the scenario requires it.
|
|
52
52
|
- Test instruction precedence, long-context behavior, summarization, tool calls, scopes, and state transitions through observable outcomes.
|
|
53
|
-
- Avoid redundant expensive calls; one request
|
|
53
|
+
- Avoid redundant expensive calls; one request proves one primary claim.
|
|
54
54
|
|
|
55
55
|
Keep live projects outside the fast default suite when repository policy requires it, while making their explicit command authoritative for the campaign.
|
|
56
56
|
|
|
@@ -35,7 +35,7 @@ Include:
|
|
|
35
35
|
|
|
36
36
|
- public and internal behavior needed by real consumers;
|
|
37
37
|
- official upstream capabilities that fit the requested scope;
|
|
38
|
-
- architectural limitations that cannot or
|
|
38
|
+
- architectural limitations that cannot or must not be copied;
|
|
39
39
|
- legacy features worth salvaging;
|
|
40
40
|
- every `TODO`, deferred branch, placeholder, or documented omission in scope.
|
|
41
41
|
|
|
@@ -10,6 +10,10 @@ copy `# Unit UNIT_ID — SHORT_SUBJECT`. Delete each italic reminder as you fill
|
|
|
10
10
|
under, and leave no row blank: fill a row you cannot close with a named unknown label, and
|
|
11
11
|
describe that label under § Unknowns with how the unit reports back on it.
|
|
12
12
|
|
|
13
|
+
For a read-only audit lane, fill the rows
|
|
14
|
+
`.agents/skills/orkestrel-falsify/references/brief.md` § "The read-only audit lane's brief" names
|
|
15
|
+
and delete the rest of this template.
|
|
16
|
+
|
|
13
17
|
## Role and engine
|
|
14
18
|
|
|
15
19
|
ROLE_NAME on ENGINE_NAME, reached as TRANSPORT.
|
|
@@ -73,7 +77,7 @@ answer around._
|
|
|
73
77
|
_Grant a behaviour with the tests that pin it, a constant with every fixture and expectation derived
|
|
74
78
|
from it, a template with the materialized copy the package generates from it, and a mechanism with
|
|
75
79
|
the prose describing it: the comment beside the code it edits and the guide passage stating the
|
|
76
|
-
behaviour it moves._
|
|
80
|
+
behaviour it moves. A unit that moves a published symbol owns the package `README.md`._
|
|
77
81
|
|
|
78
82
|
**Shared (report-only).** SHARED_FILES
|
|
79
83
|
|
|
@@ -84,21 +88,25 @@ edits nothing in this row._
|
|
|
84
88
|
|
|
85
89
|
_Name each file the unit must not touch, and read every acceptance criterion against this row line by
|
|
86
90
|
line. Grant the file a criterion needs, or strike that criterion. A file the change breaks that
|
|
87
|
-
appears in no row of this section is unscoped.
|
|
91
|
+
appears in no row of this section is unscoped. Never list `tmp/probe/` off-limits: it is the unit's
|
|
92
|
+
probe home, and `.claude/rules/tests.md` puts every runtime probe there._
|
|
88
93
|
|
|
89
94
|
**What asserts the state this change ends.** FILES_THE_RESULT_MAKES_FALSE
|
|
90
95
|
|
|
91
96
|
_List every file the result makes false rather than every file that declares the thing changing: the
|
|
92
97
|
test asserting the reversed behaviour, the fixture carrying the raised value, the golden digest over
|
|
93
98
|
generated output, the consumer script naming the removed union member. Derive the list by running the
|
|
94
|
-
suite; where you cannot run it, name the search's bound so the unit re-derives the list.
|
|
95
|
-
|
|
99
|
+
suite; where you cannot run it, name the search's bound so the unit re-derives the list. A rename's
|
|
100
|
+
search bound is a word-boundary sweep over the old name followed by a case-insensitive sweep over
|
|
101
|
+
its `-s`, `-ed`, and `-ing` inflections. End each entry in Owned, in Shared, or with a named carrier
|
|
102
|
+
dispatched before this change ships._
|
|
96
103
|
|
|
97
104
|
**Tools and limits.** ALLOWED_TOOLS, PERMISSION_LIMITS
|
|
98
105
|
|
|
99
106
|
_Check the § Output mechanism and every acceptance criterion's verification method against this
|
|
100
107
|
allowlist. A read-only lane writes no report file and runs no probe, so hand it the rendered evidence
|
|
101
|
-
instead.
|
|
108
|
+
instead. A rename moves the file with the shell's `mv`, never `git mv`; `git add -N` is permitted
|
|
109
|
+
only to render diff evidence._
|
|
102
110
|
|
|
103
111
|
## Execution
|
|
104
112
|
|
|
@@ -138,8 +146,9 @@ criterion behind it. Where the change edits a file the repository vendors or dig
|
|
|
138
146
|
regeneration step ahead of every gate that reads the generated artifact. Ask what the change does
|
|
139
147
|
to every fact you measured, and fix each criterion to the state the unit finishes in. Close each
|
|
140
148
|
criterion with owned files alone, and name the property the unit must change; record a consequence
|
|
141
|
-
you expect to follow as an observation, never as a criterion. A
|
|
142
|
-
|
|
149
|
+
you expect to follow as an observation, never as a criterion. A criterion that closes on an
|
|
150
|
+
instrument's reading names that instrument's negative control and the class the control proves the
|
|
151
|
+
instrument can see. A scoped run over the unit's own owned files stays a legitimate criterion._
|
|
143
152
|
|
|
144
153
|
**Observations, not criteria.** TIMING_SENSITIVE_OR_WHOLE_SUITE_GATES
|
|
145
154
|
|
|
@@ -21,8 +21,10 @@ with the permission mode the route pins. Never substitute a fixed Claude model i
|
|
|
21
21
|
|
|
22
22
|
Verify that the `claude` CLI resolves and is authenticated before first use. On either
|
|
23
23
|
failure return it immediately with the fallback named, so the Sol main session records
|
|
24
|
-
Opus unavailable for the round.
|
|
25
|
-
|
|
24
|
+
Opus unavailable for the round. Where the binary is absent, that report names the install
|
|
25
|
+
command for the `claude` CLI, so the Orchestrator can put it to the user in the same turn
|
|
26
|
+
it records the bench dark and re-probe when the user answers. Never install, authenticate,
|
|
27
|
+
or substitute an API key, access token, or copied auth file.
|
|
26
28
|
|
|
27
29
|
Journal every run: redirect --output-format stream-json to tmp/claude/<unit>.jsonl,
|
|
28
30
|
which is gitignored, and record the session id. A bench unit with no journal ran on its
|
|
@@ -119,7 +119,7 @@ skill owns the value set and the terminal line. Point the brief at both; restate
|
|
|
119
119
|
|
|
120
120
|
## Implementer route
|
|
121
121
|
|
|
122
|
-
Sandbox `workspace-write`,
|
|
122
|
+
Sandbox `workspace-write`, the checkout the route writes in, its sole serial writer from a clean committed
|
|
123
123
|
baseline, with owned files, off-limits files, and a deviation contract. The brief forbids
|
|
124
124
|
dependency installation, commits, pushes, publishing, credentials, destructive commands,
|
|
125
125
|
shared-file edits, and tree-wide mutating gates.
|
|
@@ -147,6 +147,9 @@ negative tests is unaffected.
|
|
|
147
147
|
|
|
148
148
|
- Verify `codex --version` before first use. On Windows `codex` resolves in Bash through
|
|
149
149
|
the extensionless npm shim; if it does not, invoke `codex.cmd`.
|
|
150
|
+
- Binary absent: report it so the Orchestrator can record the bench dark and, in the same turn,
|
|
151
|
+
name to the user the install command for `@openai/codex` and the bench it unblocks. The
|
|
152
|
+
Orchestrator re-probes when the user answers. Never install it yourself.
|
|
150
153
|
- Binary present but authentication unavailable: report it so the Orchestrator can start
|
|
151
154
|
device-auth recovery in the same turn. It backgrounds `codex login --device-auth` with
|
|
152
155
|
output captured to `tmp/codex/login.log`, surfaces the verification URL and one-time code
|
|
@@ -34,7 +34,9 @@ Everything `.agents/orchestration.md`'s dispatch contract requires, plus:
|
|
|
34
34
|
- **Every authority the brief references must exist in the tree the exec is rooted in.** Check
|
|
35
35
|
before dispatch. A brief citing a rule file or section the executor cannot find delivers nothing
|
|
36
36
|
while looking like authority, and it fails silently — an auditor does not report a heading it
|
|
37
|
-
never saw. Propagate the missing file
|
|
37
|
+
never saw. Propagate the missing file rather than restating its contents in the brief, and take
|
|
38
|
+
the stale-authority branch in `.agents/skills/orkestrel-falsify/references/brief.md` § "What not
|
|
39
|
+
to put in a brief" where the executor's tree carries a superseded vendored copy.
|
|
38
40
|
- For an audit: the subject as numbered falsifiable claims, and the skill that fixes the verdict
|
|
39
41
|
shape. The Falsification section of `.claude/rules/quality.md` owns the method and the evidence
|
|
40
42
|
each verdict carries. The verdict shape defaults to `orkestrel-falsify`; a dispatch may name a
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: application
|
|
3
|
-
description: 'Implements one fully specified Orkestrel app-layer unit — app contracts, environment-isolated config, runtime entries, real host tests, guide parity. Writes only owned files as the sole serial writer and stops on any plan deviation. Nontrivial app design belongs to GPT-5.6 Sol or Opus 5.'
|
|
3
|
+
description: 'Implements one fully specified Orkestrel app-layer unit — app contracts, environment-isolated config, runtime entries, real host tests, guide parity. Writes only owned files in the checkout the unit writes as the sole serial writer and stops on any plan deviation. Nontrivial app design belongs to GPT-5.6 Sol or Opus 5.'
|
|
4
4
|
tools: Read, Grep, Glob, Edit, Write, Bash
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: low
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: builder
|
|
3
|
-
description: 'Implements one small, fully specified, taste-free unit exactly as dispatched. Writes only owned files in the
|
|
3
|
+
description: 'Implements one small, fully specified, taste-free unit exactly as dispatched. Writes only owned files in the checkout the unit writes as the sole serial writer, validates narrowly, and stops on any plan deviation. Nontrivial implementation belongs to GPT-5.6 Sol or Opus 5.'
|
|
4
4
|
tools: Read, Grep, Glob, Edit, Write, Bash
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: low
|
|
@@ -19,8 +19,8 @@ dispatch contract.
|
|
|
19
19
|
|
|
20
20
|
- Before writing, read **AGENTS.md**, every applicable `.claude/rules/*.md`, the
|
|
21
21
|
dispatch-named skill and required references, and the governing guide/spec. All bind you
|
|
22
|
-
as written there, and this charter restates none of them.
|
|
23
|
-
|
|
22
|
+
as written there, and this charter restates none of them.
|
|
23
|
+
- An app-layer unit belongs to `application`: stop and say so.
|
|
24
24
|
- Write ONLY the owned files named in your dispatch. Shared or off-limits files are
|
|
25
25
|
report-only: if one needs a change, RETURN the exact patch — never edit it.
|
|
26
26
|
- NO tree-wide or mutating commands: never `format`, lint `--fix`, or `build`.
|
|
@@ -37,6 +37,11 @@ No judgment calls: a question that needs one becomes a **referral** — specific
|
|
|
37
37
|
evidenced, addressed to the subjective lane when it is running and to the
|
|
38
38
|
Orchestrator when it is not — never a guess and never a verdict of yours.
|
|
39
39
|
|
|
40
|
+
Rule a claim whose only evidence is the writer's report `UNRESOLVED`, never
|
|
41
|
+
`CONFIRMED`, whatever the brief says. A quoted command and exit code inside a
|
|
42
|
+
report is the writer quoting itself, so it evidences nothing until a lane that ran
|
|
43
|
+
the command supplies the reading.
|
|
44
|
+
|
|
40
45
|
## Output contract
|
|
41
46
|
|
|
42
47
|
Return the shape fixed by the dispatch.
|