@orkestrel/scaffold 0.0.37 → 0.0.39
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/dist/host/CLAUDE.md +2 -0
- package/dist/host/agents/orchestration.md +68 -27
- package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +7 -2
- package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +3 -0
- package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +6 -0
- package/dist/host/claude/agents/analyst.md +6 -3
- package/dist/host/claude/agents/checker.md +1 -1
- package/dist/host/claude/agents/codex.md +13 -9
- package/dist/host/claude/agents/grok.md +3 -2
- package/dist/host/claude/agents/orkestrel.md +43 -36
- package/dist/host/claude/agents/planner.md +2 -1
- package/dist/host/claude/agents/reviewer.md +15 -14
- package/dist/host/claude/agents/sol.md +4 -2
- package/dist/host/claude/rules/quality.md +2 -1
- package/dist/host/claude/rules/tests.md +1 -0
- package/dist/host/codex/agents/analyst.toml +5 -5
- package/dist/host/codex/agents/claude.toml +34 -0
- package/dist/host/codex/agents/grok.toml +3 -3
- package/dist/host/codex/agents/opus.toml +16 -20
- package/dist/host/codex/agents/planner.toml +12 -17
- package/dist/host/codex/agents/reviewer.toml +13 -18
- package/dist/host/guides/guide.md +193 -98
- package/dist/host/manifest.json +6 -1
- package/dist/host/tests/config.test.ts +10 -7
- package/dist/src/core/index.cjs +9 -9
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.js +9 -9
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +32 -10
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.js +32 -10
- package/dist/src/server/index.js.map +1 -1
- package/package.json +8 -8
package/dist/host/CLAUDE.md
CHANGED
|
@@ -11,6 +11,8 @@ follows it. This file adds only what Claude Code does differently, and cannot we
|
|
|
11
11
|
- Use the Agent tool for a single dispatch, including when later control flow depends on its result.
|
|
12
12
|
- Use a Workflow for a deterministic fan-out, staged pipeline, or loop. Serialize writing nodes.
|
|
13
13
|
- Recover an interrupted Workflow with `resumeFromRunId`.
|
|
14
|
+
- Foreground Bash is hard-capped at 10 minutes regardless of its timeout parameter. Launch anything
|
|
15
|
+
that can exceed it as a harness-tracked background command.
|
|
14
16
|
- Never dispatch an adversarial lane with a context-inheriting subagent type such as `fork`. A lane
|
|
15
17
|
must start clean, or it inherits the Orchestrator's framing and stops being independent.
|
|
16
18
|
|
|
@@ -54,15 +54,16 @@ reasoning effort.
|
|
|
54
54
|
|
|
55
55
|
## The adversarial pass
|
|
56
56
|
|
|
57
|
-
Two lanes run on every design round
|
|
57
|
+
Two lanes run on every design round; an audit round runs the lanes the execution loop's step 5
|
|
58
|
+
names, on the same clean-context terms.
|
|
58
59
|
|
|
59
60
|
| Lane | Argues |
|
|
60
61
|
| -------------- | --------------------------------------------------------------------------- |
|
|
61
62
|
| **Subjective** | Shape, taste, naming, ergonomics, design fit, what the API should feel like |
|
|
62
63
|
| **Objective** | Correctness, constraints, and what the code and contracts actually permit |
|
|
63
64
|
|
|
64
|
-
**
|
|
65
|
-
a lane.
|
|
65
|
+
**A required lane always runs.** Never collapse two required lanes into one. Never let an engine's
|
|
66
|
+
absence stand in for a required lane.
|
|
66
67
|
|
|
67
68
|
### Clean contexts
|
|
68
69
|
|
|
@@ -162,6 +163,9 @@ when the role file already pins it.
|
|
|
162
163
|
job to a bench means shipping that catalog across, which costs more than the bench saves.
|
|
163
164
|
- `codex` is the shared Sol transport contract, not a route. `analyst` and `sol` are the named
|
|
164
165
|
bridges; both bind that contract by reference and pin only their route and sandbox.
|
|
166
|
+
- Mirroring is by work class, not filename. A transport contract is provider-specific:
|
|
167
|
+
`.claude/agents/codex.md` carries the Sol transport on the Claude side, `.codex/agents/claude.toml`
|
|
168
|
+
the Opus transport on the Codex side, and each side's bridges bind their own by reference.
|
|
165
169
|
- Opus and Sol roles use high effort. Native cheap-tier roles use low or medium. Bridge drivers use
|
|
166
170
|
the cheapest tier that can run a CLI.
|
|
167
171
|
- Never route orchestration or acceptance across a bridge.
|
|
@@ -284,18 +288,23 @@ lane instead of re-dispatching against a session-start answer that no longer hol
|
|
|
284
288
|
fully specified taste-free unit to `builder`. Never route implementation to an engine the unit's
|
|
285
289
|
judgment load exceeds.
|
|
286
290
|
4. **Integrate.** Evaluate each distillate against its acceptance criteria, apply shared-file
|
|
287
|
-
patches serially, and route cross-cutting findings.
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
+
patches serially, and route cross-cutting findings. Integration applies exact returned patches
|
|
292
|
+
and mechanical conflict resolution only. A new type, mechanism, behavior, or acceptance
|
|
293
|
+
criterion discovered at integration is a successor brief routed to a writer, never an
|
|
294
|
+
integration edit.
|
|
295
|
+
5. **Audit adversarially.** Audit every nontrivial implementation with at least one lane whose
|
|
296
|
+
engine did not write it. Run the second lane when the first returns FAIL, when the subject is a
|
|
297
|
+
rendered or externally driven surface, or when the unit's claims span both correctness and
|
|
298
|
+
shape. Dispatch `checker` when the acceptance criteria are mechanical — counts, paths, parity
|
|
299
|
+
rows, scope honesty. Record in the round's verdict file when a lane or the checker did not run.
|
|
291
300
|
- State the audit's subject as numbered falsifiable claims and require per-claim verdicts with
|
|
292
|
-
evidence, per the Falsification law in `.claude/rules/quality.md` and the
|
|
293
|
-
dispatch
|
|
301
|
+
evidence, per the Falsification law in `.claude/rules/quality.md` and the `orkestrel-falsify`
|
|
302
|
+
value set, unless the dispatch names a different skill that fixes another.
|
|
294
303
|
- In a fix round, give the unit to an auditor engine that did not write it.
|
|
295
304
|
- Run the `orkestrel-falsify` skill for multi-round audits. It owns the brief anatomy, the
|
|
296
305
|
successor-brief rule, the verdict shape and its single terminal line, and the reconciliation
|
|
297
306
|
discipline.
|
|
298
|
-
- Reconcile
|
|
307
|
+
- Reconcile the lanes that ran. Drop, on the record, any finding no lane can substantiate.
|
|
299
308
|
6. **Verify.** Have one independent `verifier` run the authoritative gates.
|
|
300
309
|
7. **Re-baseline.** Reconcile the remaining plan against what the phase revealed, before dispatching
|
|
301
310
|
the next one.
|
|
@@ -369,11 +378,18 @@ The harness bridge names the concrete mechanism for each of these.
|
|
|
369
378
|
- Send a decision taken mid-campaign to every unit already in flight whose brief it invalidates. An
|
|
370
379
|
executor cannot see a change made after it was dispatched, so it writes the state its brief
|
|
371
380
|
described and the defect surfaces as its own.
|
|
372
|
-
-
|
|
373
|
-
|
|
381
|
+
- Retention is uniform for every unit, whatever engine ran it, including an Orchestrator-owned
|
|
382
|
+
integration, fix, probe, or capture unit: copy the brief, the returned report or distillate, the
|
|
383
|
+
audit verdict, the exact executed script or instrument, and the acceptance evidence into
|
|
384
|
+
`.orkestrel/<package>/` as the unit is dispatched and as it returns, then sweep only the `tmp/`
|
|
385
|
+
launch copies. A capture claim's instrument is acceptance evidence; the frames may be swept once
|
|
386
|
+
the record transcribes them, because the committed instrument re-produces the film. **Bench
|
|
387
|
+
laws** rule 4 owns journals and points here for everything durable.
|
|
374
388
|
- Promote anything that must outlive the campaign into a durable artifact before the sweep — a
|
|
375
389
|
commit message, a guide, a rule, a retrospective. What is only in a swept file did not survive,
|
|
376
390
|
and a debrief that must quote the record verbatim has nothing to quote.
|
|
391
|
+
- Land a process rule stated as binding mid-campaign in the owning rule or contract file in the
|
|
392
|
+
same commit that states it. A campaign artifact is evidence, never a rule's home.
|
|
377
393
|
|
|
378
394
|
### Where campaign artifacts live
|
|
379
395
|
|
|
@@ -447,7 +463,8 @@ wrong is right to stop.
|
|
|
447
463
|
fix the criterion to the property you want rather than to the number you saw.
|
|
448
464
|
- Read the acceptance criteria against the off-limits list, line by line. Every criterion closes
|
|
449
465
|
using owned files alone. A criterion that needs an off-limits file gets that file granted or gets
|
|
450
|
-
struck.
|
|
466
|
+
struck. A file the change will break that appears in neither list is an unscoped file; grant it or
|
|
467
|
+
strike the criterion.
|
|
451
468
|
- Give a small unrelated obligation its own unit. Ride it along in a large one and its scope error
|
|
452
469
|
blocks the primary work, which is a whole unit lost to a detail.
|
|
453
470
|
- Ask what the change will do to the facts you just measured. A criterion fixed to a measured set is
|
|
@@ -471,9 +488,10 @@ wrong is right to stop.
|
|
|
471
488
|
already settled. Where a read-only lane needs executed evidence, produce it separately and hand it
|
|
472
489
|
over: the Orchestrator supplies the evidence and the lane rules on it.
|
|
473
490
|
- Scope a fleet-wide refactor by the files that **consume** a symbol, not by the files that declare
|
|
474
|
-
it. A criterion
|
|
475
|
-
|
|
476
|
-
|
|
491
|
+
it. A criterion that removes a symbol, or that makes an existing state or fixture shape
|
|
492
|
+
unreachable, closes only when every consumer that exercises it is owned, so a brief scoped to the
|
|
493
|
+
declaration alone sends the unit into a typecheck break in a file it cannot edit. Count the
|
|
494
|
+
importers before writing the owned list.
|
|
477
495
|
|
|
478
496
|
### Carry every finding
|
|
479
497
|
|
|
@@ -513,8 +531,9 @@ command that outlives the turn that started it. Every law here binds all of them
|
|
|
513
531
|
launch whose tail is the evidence.
|
|
514
532
|
- Keep network-dependent work out of sandboxed bench execs. Bench sandboxes deny network, so
|
|
515
533
|
lockfile generation, real installs, and live fetches belong to the Orchestrator's own tracked
|
|
516
|
-
commands or
|
|
517
|
-
the signature of this misroute, not of a slow
|
|
534
|
+
commands or to the native `implementer` or `builder` as an ordinary dispatched writing unit. A
|
|
535
|
+
bench exec hanging on `npm` until its cap fires is the signature of this misroute, not of a slow
|
|
536
|
+
bench.
|
|
518
537
|
- A Workflow journals identically and dies identically, so give it the same watch — with one
|
|
519
538
|
correction. A workflow journal writes only at agent start and result, so its mtime goes quiet for
|
|
520
539
|
minutes during healthy work, and the liveness signal is the newest subagent transcript instead. A
|
|
@@ -546,6 +565,10 @@ nothing.
|
|
|
546
565
|
- Kill by process id, never by pattern. `pkill -f` matches the relaunch that is already starting, so
|
|
547
566
|
the pattern that cleans up the old run kills the new one and the cleanup reads as a launch
|
|
548
567
|
failure.
|
|
568
|
+
- A killed `codex exec` is dead only when its process tree is dead: walk the children with
|
|
569
|
+
`ps --ppid` and confirm the `codex-code-mode-host` child is gone. Before dispatching a substitute
|
|
570
|
+
writer, check the owned files' modification times against the baseline — a live orphan is still
|
|
571
|
+
writing the tree the substitute is about to own.
|
|
549
572
|
- Read a failure against what was running when it happened, not against what you believe was
|
|
550
573
|
running. The check costs one command and is the only thing that separates a real failure from
|
|
551
574
|
self-inflicted contention.
|
|
@@ -584,12 +607,9 @@ transport.
|
|
|
584
607
|
running" always has a first-class answer instead of a recollection of a command.
|
|
585
608
|
4. **Ephemeral streams, durable records.** A journal proves a bench is alive and recovers an
|
|
586
609
|
interrupted session. Keep journals under `tmp/`, never commit them, and sweep them at acceptance
|
|
587
|
-
after the final gate evidence is recorded.
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
only the `tmp/` copy. None of it is reproducible from the diff, and a debrief has no primary
|
|
591
|
-
source without it. This rule owns retention for the whole contract; **Dispatch anatomy**
|
|
592
|
-
points here rather than answering it.
|
|
610
|
+
after the final gate evidence is recorded. Durable retention — brief, distillate, verdict,
|
|
611
|
+
instrument, acceptance evidence — is owned by **Dispatch anatomy**; this rule owns only the
|
|
612
|
+
journal stream.
|
|
593
613
|
|
|
594
614
|
### Recovering a dark bench
|
|
595
615
|
|
|
@@ -623,9 +643,14 @@ either publishes packages nobody needed to publish or leaves a consumer pinned t
|
|
|
623
643
|
downstream of it re-pins, re-runs its gates, bumps, and republishes, in layer order.
|
|
624
644
|
- A **development** `devDependencies` bump reaches nobody. Re-pin it, prove the gates still green,
|
|
625
645
|
and commit to `main`. Do not bump the version and do not publish.
|
|
626
|
-
- A development bump that
|
|
627
|
-
|
|
628
|
-
|
|
646
|
+
- A development bump that moves the published artifact is no longer a development bump. Prove the
|
|
647
|
+
direction with the build, not the diff of sources: rebuild after the re-pin and compare `dist/`
|
|
648
|
+
against the published tarball. Compare material content only — exclude sourcemaps and ignore
|
|
649
|
+
whitespace-only differences; a superfluous diff (formatting, blank lines, map noise) moves
|
|
650
|
+
nothing and obliges nothing. A material diff — tokens, declarations, logic — means the published
|
|
651
|
+
surface moved — a forced `src` or `app` edit and a toolchain-changed emit both surface here — so
|
|
652
|
+
that package bumps and publishes on its own account, and its own dependents follow the runtime
|
|
653
|
+
rule above.
|
|
629
654
|
|
|
630
655
|
Every package is `0.0.x`, where a caret pins one exact release. A dependent therefore sees a new
|
|
631
656
|
version only after it re-pins and republishes, so the fleet publishes in topological layer order
|
|
@@ -682,6 +707,9 @@ flag is what stops the gate chain running a second time inside the five minutes.
|
|
|
682
707
|
|
|
683
708
|
### Reaching the approval
|
|
684
709
|
|
|
710
|
+
- Launch the login chain only when the user has signalled they are at the keyboard and will click
|
|
711
|
+
within ten minutes. An approval URL expires unclicked in about ten to fifteen minutes, and an
|
|
712
|
+
overnight gap expires the session credential with it.
|
|
685
713
|
- Run `npm login` before any publish. `npm publish` does not open the browser flow: unauthenticated
|
|
686
714
|
it returns `E404` on `PUT`, which reads as a missing package rather than a missing credential.
|
|
687
715
|
- Pass `--browser=false` to `npm login` and to every `npm publish`. Without it npm prints
|
|
@@ -691,8 +719,14 @@ flag is what stops the gate chain running a second time inside the five minutes.
|
|
|
691
719
|
untouched.
|
|
692
720
|
- Hold stdin open and write nothing to it. Use a fifo held open by a long `sleep`. EOF drops npm to
|
|
693
721
|
the same legacy prompt a stray newline does.
|
|
722
|
+
- A login log showing the spinner and then a legacy `Username:` prompt is an expired attempt, not a
|
|
723
|
+
prompt to answer: kill it by process id and mint a fresh flow.
|
|
694
724
|
- Run the login and every publish under `script -qfc '<command>' <log>`. npm offers the approval only
|
|
695
725
|
when it sees a TTY; without one it fails `EOTP` with no way to answer.
|
|
726
|
+
- Git Bash on Windows ships no `script` binary, so the upload step there is operator-driven: prepare
|
|
727
|
+
the layer, prove the gates, surface the exact `npm publish` command, and the operator runs it in a
|
|
728
|
+
real terminal. Everything before and after the upload — bumps, re-pins, gates, registry reads —
|
|
729
|
+
stays with the Orchestrator. The fifo stdin law still binds on that host.
|
|
696
730
|
- Expect two approvals. `npmjs.com/login/cli/<id>` authenticates the session; `npmjs.com/auth/cli/<id>`
|
|
697
731
|
authorizes the publish and opens the five-minute window. Tell the user both are coming, or the
|
|
698
732
|
second link reads as the first having failed.
|
|
@@ -729,6 +763,11 @@ flag is what stops the gate chain running a second time inside the five minutes.
|
|
|
729
763
|
- Read the result from the registry, not from an exit code: a piped `npm publish` reports the exit
|
|
730
764
|
status of the pipeline, and a CDN read straight after a publish can still serve the previous
|
|
731
765
|
version.
|
|
766
|
+
- A first publish creates the packument and can serve 404 for minutes after success. For a package
|
|
767
|
+
with no prior version treat 404 as pending, not failed, and re-read on an interval before
|
|
768
|
+
reporting either way. A bump serving the old version is CDN lag, same rule.
|
|
769
|
+
- Rule on a pack-time manifest-rewriting warning by fetching the registry's copy of the manifest,
|
|
770
|
+
never by the warning's own text.
|
|
732
771
|
- Re-read the registry before telling the user a package failed. A chain still running, a retry that
|
|
733
772
|
landed, and CDN lag all produce a failure reading that the registry contradicts, and a false
|
|
734
773
|
failure report costs a needless approval and a needless republish.
|
|
@@ -749,6 +788,8 @@ flag is what stops the gate chain running a second time inside the five minutes.
|
|
|
749
788
|
implicit engines, fixed Claude model IDs, or verbose completed-work residue.
|
|
750
789
|
- Evidence a claim about a rendered or externally driven surface with its capture or a real foreign
|
|
751
790
|
client driving it, never with source alone. Where no such surface exists this law is inert.
|
|
791
|
+
- When the Orchestrator writes any part of a unit, that part is briefed, owned, and audited like any
|
|
792
|
+
other part, and its auditor is an engine the Orchestrator does not share.
|
|
752
793
|
- Final acceptance belongs only to the Orchestrator, after independent audit and gate evidence.
|
|
753
794
|
- Accept when the plan's exit criterion is met and the gates are green, not when the last engine
|
|
754
795
|
runs out of appetite. Reopening an accepted criterion is the user's instruction, not an auditor's
|
|
@@ -58,8 +58,13 @@ a practice that worked so it repeats.
|
|
|
58
58
|
src, does src carry application policy, does either duplicate a declared ecosystem
|
|
59
59
|
primitive? Package promotion: what grew into a reusable mechanism that belongs in an
|
|
60
60
|
existing package or justifies a new one — mapped dependency-first so promotion order
|
|
61
|
-
is executable.
|
|
62
|
-
|
|
61
|
+
is executable. Sweep test infrastructure both ways: name every local test helper or
|
|
62
|
+
fixture whose semantics an installed shared-package export already covers (compare
|
|
63
|
+
against the declarations each repository compiles with, and adopt rather than keep),
|
|
64
|
+
and name every instrument two or more packages built independently (count a value set
|
|
65
|
+
fed through one proof loop as one implementation, whether the set sits beside the
|
|
66
|
+
loop or its assertions are spelled out one by one). Every row ends implement, repair,
|
|
67
|
+
retain, or intentionally exclude, with evidence.
|
|
63
68
|
4. **Process retrospective.** Walk the campaign record for both failure and success:
|
|
64
69
|
dispatches that deviated and why; recoveries that worked (codify the mechanism that
|
|
65
70
|
saved them); estimates versus observed durations; audit rounds that caught real
|
|
@@ -73,3 +73,6 @@ delta from the prior round. A tier passes when its models complete the goal with
|
|
|
73
73
|
failed calls and no out-of-band reading (no source excavation, no filesystem search —
|
|
74
74
|
watch for it in the transcript; it means the surface leaked its teaching job to the
|
|
75
75
|
repository).
|
|
76
|
+
|
|
77
|
+
A re-film that drives the surface with live models is a field pass: it carries the
|
|
78
|
+
scoreboard and each lane's journal path like any other round.
|
|
@@ -11,9 +11,15 @@ seeing the other's answer before both return:
|
|
|
11
11
|
|
|
12
12
|
- **Subjective** (design-fit engine): coherence of the role model, charter voice, whether
|
|
13
13
|
each role's job is one job, whether the skill family reads as one system.
|
|
14
|
+
- The subjective lenses, so the lane can state its coverage: role-job singularity;
|
|
15
|
+
charter voice against dispatched usage; lane-swap residue; bridge minimalism;
|
|
16
|
+
vocabulary drift across mirrored files; skill-family seams.
|
|
14
17
|
- **Objective** (correctness engine): evidence-only sweeps of the actual files and the
|
|
15
18
|
campaign record — the lanes below.
|
|
16
19
|
|
|
20
|
+
Each lane returns numbered findings, most severe first, and exactly one terminal line:
|
|
21
|
+
`INSTRAUDIT <LANE>: <n> findings`.
|
|
22
|
+
|
|
17
23
|
Reconcile into rulings; every divergence gets a ruled row with the reason. Convergent
|
|
18
24
|
findings adopt without contest; a finding neither lane can substantiate dies on the
|
|
19
25
|
record.
|
|
@@ -36,7 +36,8 @@ Everything `.agents/orchestration.md`'s dispatch contract requires, plus:
|
|
|
36
36
|
never saw. Propagate the missing file; do not restate its contents in the brief.
|
|
37
37
|
- For an audit: the subject as numbered falsifiable claims, and the skill that fixes the verdict
|
|
38
38
|
shape. The Falsification section of `.claude/rules/quality.md` owns the method and the evidence
|
|
39
|
-
each verdict carries
|
|
39
|
+
each verdict carries. The verdict shape defaults to `orkestrel-falsify`; a dispatch may name a
|
|
40
|
+
different skill that fixes another. That skill owns the value set and the terminal line. Point at
|
|
40
41
|
both; restate neither.
|
|
41
42
|
|
|
42
43
|
## Launching
|
|
@@ -52,8 +53,10 @@ work-class rule. Persist the thread id the moment a response carries it.
|
|
|
52
53
|
|
|
53
54
|
## Return
|
|
54
55
|
|
|
55
|
-
The brief path, the resolved command, the journal path
|
|
56
|
-
|
|
56
|
+
The brief path, the resolved command, and the journal path — and nothing else. Never a cap. The
|
|
57
|
+
Orchestrator launches the exec and reads Sol's answer from the `--output-last-message` file itself;
|
|
58
|
+
you never wait for it, relay it, or endorse it. A follow-up on a finished exec is a fresh dispatch,
|
|
59
|
+
not a continuation.
|
|
57
60
|
|
|
58
61
|
Never edit, implement, reconcile, accept, commit, push, install, read a credential, or spawn any
|
|
59
62
|
agent.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: checker
|
|
3
|
-
description:
|
|
3
|
+
description: "Mechanical conformance review — acceptance criteria, AGENTS.md and applicable-rule letter-of-the-law, scope honesty, and guide/source parity. Reads the actual diff, stays evidence-first, and is dispatched when a unit's acceptance criteria are mechanically checkable. Never edits."
|
|
4
4
|
tools: Read, Grep, Glob
|
|
5
5
|
model: sonnet
|
|
6
6
|
effort: low
|
|
@@ -62,9 +62,9 @@ never travel as shell arguments. Return the exact resolved command with a pointe
|
|
|
62
62
|
repository, and `--output-schema <file>` when the Orchestrator supplies one.
|
|
63
63
|
- The journal at `tmp/codex/<unit>.jsonl` is the live progress record and its mtime is
|
|
64
64
|
the liveness signal the Orchestrator watches. Never re-print the stream into your report.
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
- The Orchestrator reads Sol's answer from the `--output-last-message` file rather than
|
|
66
|
+
stdout, and records the session id (`thread_id` in the journal's opening events)
|
|
67
|
+
beside the result; a follow-up on a finished exec is a fresh dispatch.
|
|
68
68
|
|
|
69
69
|
## The exec sandbox denies network
|
|
70
70
|
|
|
@@ -73,6 +73,10 @@ endpoint — lockfile generation, real installs, live fetches — belongs to the
|
|
|
73
73
|
Orchestrator's own tracked commands or a network-capable native agent. Never put it in a
|
|
74
74
|
brief. A Sol exec hanging on `npm` until its cap fires is this misroute, not a slow bench.
|
|
75
75
|
|
|
76
|
+
The namespace has its own loopback, so a host daemon on `127.0.0.1` is unreachable and a bind can
|
|
77
|
+
fail `EPERM`. It has no IPv6, so `::1` fails `EAFNOSUPPORT`. Any proof that must reach a daemon,
|
|
78
|
+
bind a port, or drive a built server belongs outside the exec.
|
|
79
|
+
|
|
76
80
|
## The exec sandbox mounts `.git` read-only
|
|
77
81
|
|
|
78
82
|
A `workspace-write` exec can write the working tree and cannot write `.git`. Every command
|
|
@@ -107,9 +111,9 @@ and after. Require evidence for every claim and return unsupported claims as dro
|
|
|
107
111
|
|
|
108
112
|
An audit brief states its subject as a numbered list of falsifiable claims rather than a
|
|
109
113
|
diff to read, and requires Sol to attempt refutation. The Falsification section of
|
|
110
|
-
`.claude/rules/quality.md` owns the method and the evidence each verdict carries.
|
|
111
|
-
|
|
112
|
-
terminal line. Point the brief at both; restate neither.
|
|
114
|
+
`.claude/rules/quality.md` owns the method and the evidence each verdict carries. The verdict shape
|
|
115
|
+
defaults to `orkestrel-falsify`; a dispatch may name a different skill that fixes another. That
|
|
116
|
+
skill owns the value set and the terminal line. Point the brief at both; restate neither.
|
|
113
117
|
|
|
114
118
|
## Implementer route
|
|
115
119
|
|
|
@@ -118,9 +122,9 @@ baseline, with owned files, off-limits files, and a deviation contract. The brie
|
|
|
118
122
|
dependency installation, commits, pushes, publishing, credentials, destructive commands,
|
|
119
123
|
shared-file edits, and tree-wide mutating gates.
|
|
120
124
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
125
|
+
The Orchestrator verifies the finished exec with direct evidence — git status, the diff,
|
|
126
|
+
scoped validation — and carries touched files, diffstat, and deviation state into
|
|
127
|
+
integration and review.
|
|
124
128
|
|
|
125
129
|
## Routing exclusion — defensive negative-test units
|
|
126
130
|
|
|
@@ -40,8 +40,9 @@ that never happened. The versioned entry has no console dependency and no such f
|
|
|
40
40
|
|
|
41
41
|
Read an empty shim run as a launch failure until its log is checked for that trace.
|
|
42
42
|
|
|
43
|
-
If nothing responds the bench is dark. Stop with a deviation naming the fallback
|
|
44
|
-
reading to the Orchestrator, `planner`, or
|
|
43
|
+
If nothing responds the bench is dark. Stop with a deviation naming the fallback from the root
|
|
44
|
+
tedious-work ladder — Luna, then Sonnet. Never hand the reading to the Orchestrator, `planner`, or
|
|
45
|
+
`analyst`. Never install or authenticate.
|
|
45
46
|
|
|
46
47
|
Create `tmp/cursor/` first. Write any brief longer than a couple of sentences to
|
|
47
48
|
`tmp/cursor/<unit>-brief.md` and make the prompt a pointer to it; briefs never travel as
|
|
@@ -36,46 +36,51 @@ so network-controlled descriptions never enter agent instruction context.
|
|
|
36
36
|
|
|
37
37
|
| Package | Version | Layer | Runtime dependencies |
|
|
38
38
|
| ----------------------- | -------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
39
|
-
| `@orkestrel/abort` | `0.0.
|
|
39
|
+
| `@orkestrel/abort` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
40
40
|
| `@orkestrel/agent` | `0.0.15` | L5 | `@orkestrel/abort` `^0.0.6`, `@orkestrel/budget` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/queue` `^0.0.8`, `@orkestrel/timeout` `^0.0.6`, `@orkestrel/tool` `^0.0.10`, `@orkestrel/workflow` `^0.0.11`, `@orkestrel/workspace` `^0.0.4` |
|
|
41
|
+
| `@orkestrel/brief` | `0.0.2` | L4 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/interpret` `^0.0.9`, `@orkestrel/reason` `^0.0.6` |
|
|
41
42
|
| `@orkestrel/browser` | `0.0.9` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/html` `^0.0.3`, `@orkestrel/websocket` `^0.0.8` |
|
|
42
|
-
| `@orkestrel/budget` | `0.0.
|
|
43
|
-
| `@orkestrel/console` | `0.0.
|
|
44
|
-
| `@orkestrel/contract` | `0.0.
|
|
45
|
-
| `@orkestrel/csv` | `0.0.
|
|
46
|
-
| `@orkestrel/database` | `0.0.
|
|
47
|
-
| `@orkestrel/emitter` | `0.0.
|
|
48
|
-
| `@orkestrel/
|
|
49
|
-
| `@orkestrel/
|
|
50
|
-
| `@orkestrel/
|
|
51
|
-
| `@orkestrel/
|
|
52
|
-
| `@orkestrel/
|
|
53
|
-
| `@orkestrel/
|
|
54
|
-
| `@orkestrel/
|
|
55
|
-
| `@orkestrel/
|
|
56
|
-
| `@orkestrel/
|
|
43
|
+
| `@orkestrel/budget` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
44
|
+
| `@orkestrel/console` | `0.0.8` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
|
|
45
|
+
| `@orkestrel/contract` | `0.0.12` | L0 | |
|
|
46
|
+
| `@orkestrel/csv` | `0.0.4` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
47
|
+
| `@orkestrel/database` | `0.0.10` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7`, `@orkestrel/indexeddb` `^0.0.8`, `@orkestrel/sqlite` `^0.0.8` |
|
|
48
|
+
| `@orkestrel/emitter` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
49
|
+
| `@orkestrel/form` | `0.0.2` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
|
|
50
|
+
| `@orkestrel/guide` | `0.0.11` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/markdown` `^0.0.8` |
|
|
51
|
+
| `@orkestrel/html` | `0.0.4` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
52
|
+
| `@orkestrel/indexeddb` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
53
|
+
| `@orkestrel/interpret` | `0.0.9` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/reason` `^0.0.6`, `@orkestrel/template` `^0.0.3` |
|
|
54
|
+
| `@orkestrel/markdown` | `0.0.9` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/html` `^0.0.4` |
|
|
55
|
+
| `@orkestrel/mcp` | `0.0.15` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/sse` `^0.0.5`, `@orkestrel/tool` `^0.0.10`, `@orkestrel/websocket` `^0.0.8` |
|
|
56
|
+
| `@orkestrel/middleware` | `0.0.13` | L2 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/budget` `^0.0.7`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/timeout` `^0.0.7` |
|
|
57
|
+
| `@orkestrel/msg` | `0.0.7` | L0 | |
|
|
58
|
+
| `@orkestrel/ndjson` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
57
59
|
| `@orkestrel/ollama` | `0.0.9` | L6 | `@orkestrel/agent` `^0.0.15`, `@orkestrel/budget` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/ndjson` `^0.0.6`, `@orkestrel/timeout` `^0.0.6`, `@orkestrel/tool` `^0.0.10` |
|
|
58
|
-
| `@orkestrel/pool` | `0.0.
|
|
59
|
-
| `@orkestrel/program` | `0.0.
|
|
60
|
-
| `@orkestrel/qualifier` | `0.0.
|
|
60
|
+
| `@orkestrel/pool` | `0.0.8` | L2 | `@orkestrel/emitter` `^0.0.7` |
|
|
61
|
+
| `@orkestrel/program` | `0.0.8` | L4 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/qualifier` `^0.0.9`, `@orkestrel/rater` `^0.0.10`, `@orkestrel/reason` `^0.0.6` |
|
|
62
|
+
| `@orkestrel/qualifier` | `0.0.9` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/reason` `^0.0.6` |
|
|
61
63
|
| `@orkestrel/queue` | `0.0.8` | L3 | `@orkestrel/abort` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/timeout` `^0.0.6` |
|
|
62
|
-
| `@orkestrel/rater` | `0.0.
|
|
63
|
-
| `@orkestrel/reason` | `0.0.
|
|
64
|
+
| `@orkestrel/rater` | `0.0.10` | L3 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/reason` `^0.0.6` |
|
|
65
|
+
| `@orkestrel/reason` | `0.0.7` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
|
|
64
66
|
| `@orkestrel/relation` | `0.0.8` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6` |
|
|
65
|
-
| `@orkestrel/router` | `0.0.
|
|
66
|
-
| `@orkestrel/scaffold` | `0.0.
|
|
67
|
-
| `@orkestrel/sea` | `0.0.
|
|
68
|
-
| `@orkestrel/server` | `0.0.
|
|
69
|
-
| `@orkestrel/sqlite` | `0.0.
|
|
67
|
+
| `@orkestrel/router` | `0.0.10` | L2 | `@orkestrel/abort` `^0.0.7`, `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
|
|
68
|
+
| `@orkestrel/scaffold` | `0.0.38` | L3 | `@orkestrel/console` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/markdown` `^0.0.8`, `@orkestrel/template` `^0.0.3` |
|
|
69
|
+
| `@orkestrel/sea` | `0.0.7` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
|
|
70
|
+
| `@orkestrel/server` | `0.0.12` | L3 | `@orkestrel/abort` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/router` `^0.0.9`, `@orkestrel/timeout` `^0.0.6` |
|
|
71
|
+
| `@orkestrel/sqlite` | `0.0.8` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
70
72
|
| `@orkestrel/sse` | `0.0.5` | L0 | |
|
|
71
|
-
| `@orkestrel/
|
|
72
|
-
| `@orkestrel/
|
|
73
|
-
| `@orkestrel/
|
|
74
|
-
| `@orkestrel/
|
|
75
|
-
| `@orkestrel/
|
|
76
|
-
| `@orkestrel/
|
|
73
|
+
| `@orkestrel/supervisor` | `0.0.1` | L5 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.9`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/workflow` `^0.0.12` |
|
|
74
|
+
| `@orkestrel/table` | `0.0.2` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
|
|
75
|
+
| `@orkestrel/template` | `0.0.4` | L2 | `@orkestrel/contract` `^0.0.12`, `@orkestrel/emitter` `^0.0.7` |
|
|
76
|
+
| `@orkestrel/terminal` | `0.0.9` | L3 | `@orkestrel/console` `^0.0.7`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.9`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/form` `^0.0.1`, `@orkestrel/sse` `^0.0.5` |
|
|
77
|
+
| `@orkestrel/test` | `0.0.6` | L0 | |
|
|
78
|
+
| `@orkestrel/timeout` | `0.0.7` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
79
|
+
| `@orkestrel/tool` | `0.0.11` | L1 | `@orkestrel/contract` `^0.0.12` |
|
|
80
|
+
| `@orkestrel/toolbox` | `0.0.6` | L6 | `@orkestrel/agent` `^0.0.15`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/relation` `^0.0.8`, `@orkestrel/server` `^0.0.12`, `@orkestrel/terminal` `^0.0.7`, `@orkestrel/tool` `^0.0.10`, `@orkestrel/workflow` `^0.0.11`, `@orkestrel/workspace` `^0.0.4` |
|
|
81
|
+
| `@orkestrel/websocket` | `0.0.9` | L2 | `@orkestrel/emitter` `^0.0.7` |
|
|
77
82
|
| `@orkestrel/worker` | `0.0.7` | L4 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/pool` `^0.0.7`, `@orkestrel/queue` `^0.0.8` |
|
|
78
|
-
| `@orkestrel/workflow` | `0.0.
|
|
83
|
+
| `@orkestrel/workflow` | `0.0.12` | L4 | `@orkestrel/abort` `^0.0.6`, `@orkestrel/budget` `^0.0.6`, `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6`, `@orkestrel/queue` `^0.0.8`, `@orkestrel/timeout` `^0.0.6` |
|
|
79
84
|
| `@orkestrel/workspace` | `0.0.4` | L3 | `@orkestrel/contract` `^0.0.11`, `@orkestrel/database` `^0.0.8`, `@orkestrel/emitter` `^0.0.6` |
|
|
80
85
|
|
|
81
86
|
<!-- /orkestrel:catalog -->
|
|
@@ -96,9 +101,11 @@ pin names an older version runs that older version, whatever the registry holds.
|
|
|
96
101
|
|
|
97
102
|
A **development** bump obliges nothing. A `devDependencies` range reaches no consumer of
|
|
98
103
|
the published package, so re-pin it, prove the gates still green, and stop. Never report a
|
|
99
|
-
development bump as a cascade. It becomes one only
|
|
100
|
-
|
|
101
|
-
|
|
104
|
+
development bump as a cascade. It becomes one only when the rebuilt `dist/` differs
|
|
105
|
+
materially from the published artifact after the re-pin — sourcemaps excluded,
|
|
106
|
+
whitespace-only differences ignored — meaning the published surface moved, through a
|
|
107
|
+
forced `src`/`app` edit or a changed toolchain emit, and the package then bumps on that
|
|
108
|
+
account rather than on the dependency's. A superfluous diff obliges nothing.
|
|
102
109
|
|
|
103
110
|
The `Layer` column above is the publish round, derived from the runtime edges in the same
|
|
104
111
|
row. `L0` depends on nothing else in the fleet and publishes first; each later layer
|
|
@@ -24,7 +24,8 @@ Return only:
|
|
|
24
24
|
- `Alternatives`: at most two real alternatives and why the design wins.
|
|
25
25
|
- `Units`: bounded work, each naming its role AND engine so the routing ledger is
|
|
26
26
|
derivable, with ownership, dependencies, and acceptance criteria.
|
|
27
|
-
- `Tensions`:
|
|
27
|
+
- `Tensions`: the choices your lane made on judgment, named for the other lane to
|
|
28
|
+
challenge — or, when you hold both lanes, for the Orchestrator to rule.
|
|
28
29
|
- `Risks`: design-fit risks and the evidence needed to settle them.
|
|
29
30
|
|
|
30
31
|
Your proposal is input to the Orchestrator, never the final decision.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: reviewer
|
|
3
|
-
description:
|
|
3
|
+
description: "Subjective design-fit review of implemented work — API feel, vocabulary, architecture shape, guide voice, and conceptual coherence. Reads the actual diff when the round's triggers name this lane. Never edits."
|
|
4
4
|
tools: Read, Grep, Glob
|
|
5
5
|
model: opus
|
|
6
6
|
effort: high
|
|
@@ -41,20 +41,21 @@ Audit the changed work only through Opus 5's subjective and creative lens:
|
|
|
41
41
|
|
|
42
42
|
Test a design claim by asking whether the shipped artifact still matches it — a
|
|
43
43
|
guide, charter, or name that described the work two revisions ago is drift, and
|
|
44
|
-
that question is what finds it. Anything you cannot settle
|
|
45
|
-
|
|
44
|
+
that question is what finds it. Anything you cannot settle within your lane becomes
|
|
45
|
+
a referral — to the other lane when it is running, to the Orchestrator when you hold
|
|
46
|
+
both — never a verdict of yours.
|
|
46
47
|
|
|
47
48
|
For a rendered or externally driven surface, the supplied capture portfolio is the
|
|
48
49
|
primary evidence and source is corroboration only: cite a capture for every rendered
|
|
49
50
|
claim, mark what the portfolio cannot show as NOT-EVIDENCED instead of inferring it,
|
|
50
|
-
and
|
|
51
|
-
|
|
51
|
+
and return the `orkestrel-falsify` verdict shape and its single terminal line unless
|
|
52
|
+
the dispatch names a different skill that fixes one.
|
|
52
53
|
|
|
53
54
|
Read the actual diff plus enough surrounding code to judge it in context.
|
|
54
55
|
Correctness, security, dependency constraints, test sufficiency, and mechanical
|
|
55
56
|
conformance belong to the independent Sol analyst and checker. If you notice a
|
|
56
|
-
possible objective defect, report it as a specifically evidenced **
|
|
57
|
-
|
|
57
|
+
possible objective defect, report it as a specifically evidenced **referral**
|
|
58
|
+
rather than adjudicating it.
|
|
58
59
|
|
|
59
60
|
## External input
|
|
60
61
|
|
|
@@ -66,13 +67,13 @@ referral** rather than adjudicating it.
|
|
|
66
67
|
|
|
67
68
|
## Output contract — the Verdict
|
|
68
69
|
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
- The `orkestrel-falsify` verdict shape: numbered per-claim verdicts, findings
|
|
71
|
+
outside the claims, and its single terminal line — unless the dispatch names a
|
|
72
|
+
different skill that fixes one.
|
|
73
|
+
- Each required change carries file:line, what is wrong, why it matters, and what
|
|
74
|
+
right looks like — actionable enough to re-dispatch verbatim.
|
|
75
|
+
- **Referrals** — specifically evidenced questions outside your lane, addressed to
|
|
76
|
+
the other lane when it is running and to the Orchestrator when you hold both, with
|
|
74
77
|
no verdict from you.
|
|
75
|
-
- **Advisories** — improvements that do not block.
|
|
76
|
-
- **Confirmations** — each design criterion checked, one line each.
|
|
77
78
|
|
|
78
79
|
You are read-only: you never edit. Return only the verdict, never your process.
|
|
@@ -50,7 +50,9 @@ Writing units are strictly serialized. Never run beside another writer in the sa
|
|
|
50
50
|
|
|
51
51
|
## Return
|
|
52
52
|
|
|
53
|
-
The brief path, the resolved command, the journal path
|
|
54
|
-
|
|
53
|
+
The brief path, the resolved command, and the journal path — and nothing else. Never a cap. The
|
|
54
|
+
Orchestrator launches the exec and reads Sol's answer from the `--output-last-message` file itself;
|
|
55
|
+
you never wait for it, relay it, or endorse it. A follow-up on a finished exec is a fresh dispatch,
|
|
56
|
+
not a continuation.
|
|
55
57
|
|
|
56
58
|
Never edit, judge, reconcile, accept, commit, push, install, read a credential, or spawn any agent.
|