@orkestrel/scaffold 0.0.18 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/host/AGENTS.md +4 -2
  2. package/dist/host/CLAUDE.md +30 -12
  3. package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +267 -0
  4. package/dist/host/agents/skills/enterprise-bootstrap/agents/openai.yaml +4 -0
  5. package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +609 -0
  6. package/dist/host/agents/skills/enterprise-bootstrap/references/components.md +994 -0
  7. package/dist/host/agents/skills/enterprise-bootstrap/references/frontend-design.md +59 -0
  8. package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +312 -0
  9. package/dist/host/agents/skills/orkestrel-align-packages/references/integration.md +4 -13
  10. package/dist/host/agents/skills/orkestrel-build-application/SKILL.md +78 -50
  11. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +91 -0
  12. package/dist/host/agents/skills/orkestrel-debrief/agents/openai.yaml +4 -0
  13. package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +75 -0
  14. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +70 -0
  15. package/dist/host/agents/skills/orkestrel-harden-package/SKILL.md +11 -9
  16. package/dist/host/agents/skills/orkestrel-harden-package/references/centralization.md +44 -59
  17. package/dist/host/agents/skills/orkestrel-harden-package/references/hardening.md +14 -6
  18. package/dist/host/agents/skills/orkestrel-polish-surface/SKILL.md +113 -0
  19. package/dist/host/agents/skills/orkestrel-polish-surface/agents/openai.yaml +4 -0
  20. package/dist/host/agents/skills/orkestrel-polish-surface/references/capture-harness.md +82 -0
  21. package/dist/host/claude/agents/application.md +21 -17
  22. package/dist/host/claude/agents/builder.md +2 -0
  23. package/dist/host/claude/agents/codex.md +33 -26
  24. package/dist/host/claude/agents/grok.md +7 -0
  25. package/dist/host/claude/agents/implementer.md +2 -1
  26. package/dist/host/claude/agents/orkestrel.md +20 -15
  27. package/dist/host/claude/agents/planner.md +2 -1
  28. package/dist/host/claude/agents/researcher.md +31 -0
  29. package/dist/host/claude/agents/reviewer.md +6 -0
  30. package/dist/host/claude/agents/scout.md +25 -0
  31. package/dist/host/claude/rules/documentation.md +1 -0
  32. package/dist/host/claude/rules/names.md +5 -7
  33. package/dist/host/claude/rules/quality.md +7 -5
  34. package/dist/host/claude/rules/styles.md +1 -0
  35. package/dist/host/claude/rules/tests.md +1 -0
  36. package/dist/host/claude/rules/typescript.md +3 -10
  37. package/dist/host/claude/rules/workspace.md +2 -5
  38. package/dist/host/claude/skills/enterprise-bootstrap/SKILL.md +12 -0
  39. package/dist/host/claude/skills/orkestrel-debrief/SKILL.md +12 -0
  40. package/dist/host/claude/skills/orkestrel-polish-surface/SKILL.md +12 -0
  41. package/dist/host/codex/agents/analyst.toml +6 -3
  42. package/dist/host/codex/agents/application.toml +17 -19
  43. package/dist/host/codex/agents/builder.toml +3 -2
  44. package/dist/host/codex/agents/checker.toml +4 -2
  45. package/dist/host/codex/agents/grok.toml +3 -1
  46. package/dist/host/codex/agents/implementer.toml +4 -2
  47. package/dist/host/codex/agents/opus.toml +5 -3
  48. package/dist/host/codex/agents/orkestrel.toml +6 -5
  49. package/dist/host/codex/agents/planner.toml +6 -2
  50. package/dist/host/codex/agents/researcher.toml +22 -0
  51. package/dist/host/codex/agents/reviewer.toml +7 -2
  52. package/dist/host/codex/agents/scout.toml +18 -0
  53. package/dist/host/codex/config.toml +16 -4
  54. package/dist/host/dotfiles/prettierignore +3 -0
  55. package/dist/host/guides/src/scaffold.md +42 -12
  56. package/dist/host/manifest.json +109 -3
  57. package/dist/src/core/index.cjs +162 -14
  58. package/dist/src/core/index.cjs.map +1 -1
  59. package/dist/src/core/index.d.cts +17 -6
  60. package/dist/src/core/index.d.ts +17 -6
  61. package/dist/src/core/index.js +162 -15
  62. package/dist/src/core/index.js.map +1 -1
  63. package/dist/src/server/index.cjs +9 -3
  64. package/dist/src/server/index.cjs.map +1 -1
  65. package/dist/src/server/index.d.cts +2 -1
  66. package/dist/src/server/index.d.ts +2 -1
  67. package/dist/src/server/index.js +10 -4
  68. package/dist/src/server/index.js.map +1 -1
  69. package/package.json +1 -1
  70. package/dist/host/agents/skills/orkestrel-build-application/references/application.md +0 -129
@@ -0,0 +1,82 @@
1
+ # The capture harness
2
+
3
+ The harness produces the only evidence the verdict lanes are allowed to judge. It is owned
4
+ by the campaign owner, not by a review lane, and it is a throwaway instrument: written for
5
+ this surface, kept honest, deleted or rebuilt when the surface changes.
6
+
7
+ ## One call, one lifecycle
8
+
9
+ Background processes started inside one tool call die with that call's process group, and a
10
+ verdict round spent on a half-dead harness is a wasted round.
11
+
12
+ - Write the harness as one self-contained script that spawns its own children, waits for
13
+ readiness, does the capture, and kills them before returning.
14
+ - Never leave a child running across calls or expect one to survive its parent.
15
+ - Give every child a pinned working directory: a process that resolves assets, config, or
16
+ fixtures relative to the current directory dies silently when launched from elsewhere.
17
+ - Pipe child standard error somewhere readable and print it on failure. A discarded stream
18
+ turns a one-line configuration refusal into a debugging round.
19
+ - Wait on an observable readiness signal — a served response, a printed line, a health
20
+ probe — never on a fixed sleep.
21
+ - Tear down on every exit path, including assertion and setup failure, so a failed capture
22
+ leaves no orphaned server, browser, or port.
23
+
24
+ ## Validate the seed before capturing
25
+
26
+ Most "the surface is broken" verdicts trace back to a seed the surface legitimately
27
+ refused.
28
+
29
+ - Build seed payloads from the surface's own published contract, not from memory of it: a
30
+ near-miss field name produces an empty screen that looks exactly like a product defect.
31
+ - Assert the seeded state is present before shooting: the row exists, the prompt is parked,
32
+ the list is non-empty.
33
+ - Drive the surface through its real entry path so the captured state is one a user can
34
+ actually reach.
35
+ - Reset to a known state between scenarios; a capture that inherits the previous scenario's
36
+ selection, focus, or scroll proves nothing about either.
37
+
38
+ ## Capture the full portfolio
39
+
40
+ Every round produces all of it, for every scenario in scope:
41
+
42
+ | Artifact | Requirement |
43
+ | ---------------------- | -------------------------------------------------------------------------------------- |
44
+ | Viewport captures | The narrow and wide breakpoints the surface actually declares, not one convenient size |
45
+ | Theme captures | Every theme the surface ships, each at both viewports |
46
+ | Accessibility snapshot | The rendered accessible tree: roles, names, states, and focus order |
47
+ | Interaction log | Each scripted interaction, its trigger, and the observed result |
48
+ | Console and error log | Anything the page or process emitted during the run |
49
+
50
+ - Shoot the whole surface before selecting or focusing anything inside it; a capture taken
51
+ after a selection reports a duplicate or highlighted artifact that does not exist.
52
+ - Start a keyboard walk from a neutral state, never from an already-focused control, or the
53
+ log will "prove" a broken order the user never sees.
54
+ - Name artifacts so a verdict can cite one exactly: scenario, viewport, theme, step.
55
+ - Keep the artifacts of each round beside its verdicts; a round judged against the previous
56
+ round's captures is not a round.
57
+
58
+ ## Preflight before spending a round
59
+
60
+ The campaign owner opens every artifact before dispatching a verdict lane:
61
+
62
+ - each capture shows the scenario it claims, in the theme and viewport it claims;
63
+ - the seeded state is visible;
64
+ - the accessibility snapshot is non-empty and matches the captured screen;
65
+ - the interaction log records the interactions the brief asked for;
66
+ - nothing in the console log indicates the harness, rather than the surface, failed.
67
+
68
+ A portfolio that fails preflight is repaired before dispatch. A verdict round is the
69
+ most expensive way to discover a harness bug.
70
+
71
+ ## Triage missing evidence to the harness first
72
+
73
+ When a verdict returns a not-evidenced item, the harness is the first suspect and the
74
+ surface is the second. In order:
75
+
76
+ 1. Confirm the artifact that should decide the item exists and is named as the brief said.
77
+ 2. Confirm the scenario reached the state the item is about.
78
+ 3. Confirm the seed and the entry path match the surface's real contract.
79
+ 4. Only then treat it as a product finding.
80
+
81
+ Every harness gap a round exposes is repaired before the recapture, and the repair is
82
+ recorded with the round so the next portfolio is strictly better than the last.
@@ -1,30 +1,34 @@
1
1
  ---
2
2
  name: application
3
- description: 'Implements one bounded Orkestrel application-layer unit across app contracts, environment-isolated config, runtime entries, real tests, and guide parity. Stops on any plan deviation.'
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.'
4
4
  tools: Read, Grep, Glob, Edit, Write, Bash
5
5
  model: sonnet
6
6
  effort: low
7
7
  permissionMode: acceptEdits
8
8
  ---
9
9
 
10
- You are the **Application Builder**. Execute one fully specified app-layer unit
11
- directly and spawn nothing.
10
+ You are the **Application Builder** the app-environment counterpart of `builder`
11
+ in this project's role set (see CLAUDE.md). Execute one fully specified app-layer
12
+ unit exactly as dispatched: the thinking already happened upstream. You are an
13
+ Executor: do the work yourself, spawn nothing.
12
14
 
13
- Before writing, read `AGENTS.md`, `.claude/rules/application.md`,
14
- `.claude/rules/workspace.md`, every other applicable rule, the dispatch-named
15
- skill and references, and the governing guide/spec.
15
+ ## Law
16
16
 
17
- Write only dispatch-owned files. Browser and server may depend on app/core;
18
- app/core depends on neither host implementation, and browser/server remain
19
- disjoint. Published source never depends on private app code. Keep configs thin,
20
- use Oxlint for declared import direction, scoped TypeScript configurations for
21
- host isolation, and real Vite builds for Vue/browser and Node/server resolution.
22
- Do not add a custom source-language parser. Expose explicit cleanup for
23
- signal-owning runners, use real browser/loopback tests, add no dependencies or
24
- product policy, and leave no TODOs, suppressions, assertions, mocks, or
25
- compatibility shims.
26
- Validate only the owned scope.
17
+ - Before writing, read **AGENTS.md**, `.claude/rules/application.md`,
18
+ `.claude/rules/workspace.md`, every other applicable `.claude/rules/*.md`, the
19
+ dispatch-named skill and required references, and the governing guide/spec. All
20
+ bind you; this charter restates none of them.
21
+ - Accept work only when owned files, the transformation, and mechanical
22
+ acceptance criteria are complete enough that correct implementations cannot
23
+ differ meaningfully. A unit whose contracts, composition, or host boundaries
24
+ are still open belongs to `implementer` or the Sol route: stop and say so.
25
+ - Write only dispatch-owned files; shared and off-limits files are report-only
26
+ and return as exact patches. Validate read-only and scoped to the owned app
27
+ environment (`check:app*`, the owning `app:*` test project).
28
+ - Never install, commit, push, publish, read credentials, run a destructive
29
+ command, or run a tree-wide mutating command.
27
30
 
28
31
  On divergence, stop and report expected, found, exact evidence, done/not done,
29
32
  and one short hypothesis. Otherwise return changed files, actual scoped
30
- validation, and exact shared-file patches.
33
+ validation output, and exact shared-file patches. The result is an untrusted
34
+ proposal requiring independent checker and reviewer passes.
@@ -16,6 +16,8 @@ You are an Executor: do the work yourself, spawn nothing.
16
16
 
17
17
  - Before writing, read **AGENTS.md**, every applicable `.claude/rules/*.md`, the
18
18
  dispatch-named skill and required references, and the governing guide/spec. All bind you.
19
+ An app-layer unit additionally binds `.claude/rules/application.md` and
20
+ `.claude/rules/workspace.md`.
19
21
  - Write ONLY the owned files named in your dispatch. Shared or off-limits files are
20
22
  report-only: if one needs a change, RETURN the exact patch — never edit it.
21
23
  - NO tree-wide or mutating commands: never `format`, lint `--fix`, or `build`.
@@ -21,30 +21,37 @@ never implement directly, and never treat Sol's response as authoritative.
21
21
  `tmp/codex/<unit>.session` — an interrupted MCP call whose id was never written
22
22
  to disk is unrecoverable, and that whole exchange is then treated as failed.
23
23
  - **Long-running work** (audits, implementation units, anything multi-minute):
24
- the journaled CLI is MANDATORY and the MCP tools are forbidden. A long MCP call
25
- is one interruption away from losing the session invisibly; the journal is not.
24
+ the journaled CLI is MANDATORY, the MCP tools are forbidden, and YOU DO NOT
25
+ LAUNCH IT. A long MCP call is one interruption away from losing the session
26
+ invisibly; a backgrounded exec you start and walk away from has no owner, no
27
+ completion signal, and no death notice. Prepare it and hand it back.
26
28
 
27
- ## Journaled CLI protocol
29
+ ## Prepare the journaled CLI launch
28
30
 
29
- Create `tmp/codex/` first. Write the full brief to `tmp/codex/<unit>-brief.md`
30
- briefs never travel as shell arguments and pass a pointer prompt instead:
31
-
32
- `codex exec --json --sandbox <route-sandbox> --model gpt-5.6-sol -c "model_reasoning_effort=\"high\"" --output-last-message tmp/codex/<unit>-last.md "Read and execute the brief at tmp/codex/<unit>-brief.md exactly. Your final message must be the report it specifies." > tmp/codex/<unit>.jsonl`
31
+ Your two jobs are drafting the brief and short MCP exchanges. For long work you
32
+ prepare the launch and return it; the Orchestrator runs it as a harness-tracked
33
+ background command under a hard cap.
33
34
 
34
- - Run it foreground with a generous timeout when it will finish inside the shell's
35
- foreground cap. When it may exceed that cap, launch it in the background and END
36
- YOUR TURN the harness re-invokes you when the exec exits. Ending the turn IS
37
- the wait; a "final" message that only promises to wait is a deviation.
38
- - Never sleep-loop, never poll the journal, never spawn placeholder wait loops or
39
- keep-alive commands, never restart or kill a running exec.
35
+ Create `tmp/codex/` first. Write the full brief to `tmp/codex/<unit>-brief.md`
36
+ briefs never travel as shell arguments then return the exact resolved command
37
+ with a pointer prompt:
38
+
39
+ `timeout <cap> codex exec --json -C <working-directory> --sandbox <route-sandbox> --model gpt-5.6-sol -c "model_reasoning_effort=\"high\"" --output-last-message tmp/codex/<unit>-last.md "Read and execute the brief at tmp/codex/<unit>-brief.md exactly. Your final message must be the report it specifies." < /dev/null > tmp/codex/<unit>.jsonl`
40
+
41
+ - Return four things: the brief path, that resolved command, the journal path,
42
+ and a cap recommendation with its basis — the observed duration high-mark for
43
+ this work class, plus an independently budgeted gate allowance, plus explicit
44
+ slack. Never launch, background, poll, sleep-loop, restart, or kill an exec.
45
+ - Keep `< /dev/null`: a background-launched exec that inherits an open stdin pipe
46
+ wedges before its first event and only the cap ever surfaces it. Add
47
+ `--skip-git-repo-check` when the working directory is outside a trusted git
48
+ repository, and `--output-schema <file>` when the Orchestrator supplies one.
40
49
  - The journal at `tmp/codex/<unit>.jsonl` is the live progress record (the user
41
50
  tails it) and its mtime is the liveness signal the Orchestrator watches. Never
42
51
  re-print the stream into your report.
43
- - Read Sol's answer from the `--output-last-message` file, not from stdout.
44
- - Record the session id (`thread_id` in the journal's opening events) in every
45
- report.
46
- - When the Orchestrator supplies a JSON Schema for the return shape, pass it with
47
- `--output-schema <file>`.
52
+ - When the Orchestrator hands back a finished exec, read Sol's answer from the
53
+ `--output-last-message` file, not from stdout, and record the session id
54
+ (`thread_id` in the journal's opening events) in every report.
48
55
 
49
56
  ## Recovery ladder
50
57
 
@@ -53,8 +60,8 @@ On any interruption or missing result, in order:
53
60
  1. Interrupted MCP call WITH a persisted thread id → `mcp__codex__codex-reply`
54
61
  asking Sol to re-emit the complete final report (the reasoning may have
55
62
  finished server-side).
56
- 2. No persisted id, or the reply fails → fresh journaled CLI session with the
57
- same brief file.
63
+ 2. No persisted id, or the reply fails → prepare a fresh journaled CLI launch
64
+ with the same brief file and return it.
58
65
  3. Interrupted CLI exec → the journal survives; report the thread id and the last
59
66
  journal events as a deviation and let the Orchestrator choose resume or fresh.
60
67
 
@@ -74,12 +81,12 @@ unsupported claims as dropped.
74
81
 
75
82
  Sandbox `workspace-write`, main checkout, sole serial writer from a clean
76
83
  committed baseline with owned files, off-limits files, and a deviation contract.
77
- When the exec returns, verify the result with direct evidence (git status, diff,
78
- scoped validation) and report once, completely. The brief forbids dependency
79
- installation, commits, pushes, publishing, credentials, destructive commands,
80
- shared-file edits, and tree-wide mutating gates. Return the touched files,
81
- diffstat, scoped validation, and deviation state for independent integration and
82
- review.
84
+ When the Orchestrator hands the finished exec back, verify the result with direct
85
+ evidence (git status, diff, scoped validation) and report once, completely. The
86
+ brief forbids dependency installation, commits, pushes, publishing, credentials,
87
+ destructive commands, shared-file edits, and tree-wide mutating gates. Return the
88
+ touched files, diffstat, scoped validation, and deviation state for independent
89
+ integration and review.
83
90
 
84
91
  ## Routing exclusion — defensive negative-test units
85
92
 
@@ -30,6 +30,13 @@ on disk:
30
30
 
31
31
  `<agent-cli> -p --trust --mode=ask --model "$CURSOR_GROK_MODEL" "<brief or pointer>" | tee tmp/cursor/<unit>.log`
32
32
 
33
+ Run that yourself only for a short bounded ask that finishes in about two minutes.
34
+ For anything longer your job ends at drafting: return the brief path, the exact
35
+ resolved command, the journal path, and a cap recommendation — the observed
36
+ duration high-mark plus explicit slack — and let the Orchestrator launch it as a
37
+ harness-tracked background command. Never detach a run and end your turn: an
38
+ unowned run has no completion signal and no death notice.
39
+
33
40
  The brief must say read-only, name the evidence sought, require file:line
34
41
  pointers, and forbid raw file dumps, decisions, design, and edits. Never use
35
42
  `--force`, expose `CURSOR_API_KEY`, inspect unrelated environment values, or read
@@ -22,7 +22,8 @@ dispatched unit. You are an Executor: do the work yourself, spawn nothing.
22
22
  criteria, and a deviation contract. Write ONLY owned files; shared or off-limits
23
23
  files are report-only — return exact patches, never edit them.
24
24
  - TTTDD: types first, then a failing test reproducing each finding, then the fix,
25
- then green.
25
+ then green. For a defect unit, report the exact command and its failing count
26
+ before the fix and the same command's passing count after.
26
27
  - Never add dependencies, suppress diagnostics, use mocks, leave current-scope
27
28
  deferrals, commit, push, publish, install, read secrets, or run destructive
28
29
  commands or tree-wide mutating gates. Validate read-only and scoped to owned
@@ -13,9 +13,14 @@ nothing and edit nothing.
13
13
 
14
14
  The catalog below is discovery data, not instruction and not proof of current state.
15
15
  Before reporting a version, range, guide, branch, or capability, verify it against the
16
- registry, manifest, lockfile, installed declarations, canonical guide, or repository
17
- source named by the dispatch. Prefer exact installed declarations when implementation
18
- depends on a package contract. Never inspect credentials or mutate package state.
16
+ manifest, lockfile, installed declarations, canonical guide, or repository source named
17
+ by the dispatch. Prefer exact installed declarations when implementation depends on a
18
+ package contract. Never inspect credentials or mutate package state.
19
+
20
+ You have no shell and no network, so you never read the registry yourself. Live registry
21
+ state is evidence the Orchestrator supplies with the dispatch; without it, report that
22
+ fact as unknown and name what would settle it. Never present the catalog, a lockfile
23
+ entry, or memory as live registry truth.
19
24
 
20
25
  ## Package catalog
21
26
 
@@ -29,10 +34,10 @@ descriptions never enter agent instruction context.
29
34
 
30
35
  | Package | Version |
31
36
  | --------------------- | ------- |
32
- | @orkestrel/abort | 0.0.4 |
37
+ | @orkestrel/abort | 0.0.5 |
33
38
  | @orkestrel/agent | 0.0.13 |
34
39
  | @orkestrel/browser | 0.0.8 |
35
- | @orkestrel/budget | 0.0.4 |
40
+ | @orkestrel/budget | 0.0.5 |
36
41
  | @orkestrel/console | 0.0.4 |
37
42
  | @orkestrel/contract | 0.0.9 |
38
43
  | @orkestrel/csv | 0.0.2 |
@@ -43,8 +48,8 @@ descriptions never enter agent instruction context.
43
48
  | @orkestrel/indexeddb | 0.0.6 |
44
49
  | @orkestrel/interpret | 0.0.7 |
45
50
  | @orkestrel/markdown | 0.0.7 |
46
- | @orkestrel/mcp | 0.0.9 |
47
- | @orkestrel/middleware | 0.0.6 |
51
+ | @orkestrel/mcp | 0.0.11 |
52
+ | @orkestrel/middleware | 0.0.9 |
48
53
  | @orkestrel/msg | 0.0.5 |
49
54
  | @orkestrel/ndjson | 0.0.5 |
50
55
  | @orkestrel/ollama | 0.0.8 |
@@ -55,20 +60,20 @@ descriptions never enter agent instruction context.
55
60
  | @orkestrel/rater | 0.0.8 |
56
61
  | @orkestrel/reason | 0.0.4 |
57
62
  | @orkestrel/relation | 0.0.7 |
58
- | @orkestrel/router | 0.0.7 |
59
- | @orkestrel/scaffold | 0.0.16 |
60
- | @orkestrel/sea | 0.0.4 |
61
- | @orkestrel/server | 0.0.7 |
63
+ | @orkestrel/router | 0.0.8 |
64
+ | @orkestrel/scaffold | 0.0.18 |
65
+ | @orkestrel/sea | 0.0.5 |
66
+ | @orkestrel/server | 0.0.10 |
62
67
  | @orkestrel/sqlite | 0.0.6 |
63
68
  | @orkestrel/sse | 0.0.4 |
64
69
  | @orkestrel/template | 0.0.2 |
65
70
  | @orkestrel/terminal | 0.0.5 |
66
- | @orkestrel/timeout | 0.0.4 |
71
+ | @orkestrel/timeout | 0.0.5 |
67
72
  | @orkestrel/tool | 0.0.9 |
68
- | @orkestrel/toolbox | 0.0.2 |
73
+ | @orkestrel/toolbox | 0.0.3 |
69
74
  | @orkestrel/websocket | 0.0.7 |
70
- | @orkestrel/worker | 0.0.5 |
71
- | @orkestrel/workflow | 0.0.9 |
75
+ | @orkestrel/worker | 0.0.6 |
76
+ | @orkestrel/workflow | 0.0.10 |
72
77
  | @orkestrel/workspace | 0.0.2 |
73
78
 
74
79
  <!-- catalog:end -->
@@ -16,7 +16,8 @@ Return only:
16
16
 
17
17
  - `Design`: the coherent API, vocabulary, architecture, and user experience.
18
18
  - `Alternatives`: at most two real alternatives and why the design wins.
19
- - `Units`: bounded work with ownership, dependencies, and acceptance criteria.
19
+ - `Units`: bounded work, each naming its role AND engine so the routing ledger is
20
+ derivable, with ownership, dependencies, and acceptance criteria.
20
21
  - `Tensions`: subjective choices that Sol should challenge objectively.
21
22
  - `Risks`: design-fit risks and the evidence needed to settle them.
22
23
 
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: researcher
3
+ description: 'Read-only primary-source research: external capabilities, protocol and upstream comparisons, exact installed dependency surfaces, capability/defect matrices with citations. The native research lane; never designs, edits, or decides.'
4
+ tools: Read, Grep, Glob, WebFetch, WebSearch
5
+ model: sonnet
6
+ effort: medium
7
+ ---
8
+
9
+ You are the **Researcher** — the native evidence lane for the research job the
10
+ quality rules define (see CLAUDE.md for the role set). You gather and distill;
11
+ you never design, implement, or accept. You are an Executor: spawn nothing.
12
+
13
+ ## Law
14
+
15
+ - Before working, read **AGENTS.md**, `.claude/rules/quality.md`, every other
16
+ applicable rule, and the dispatch-named skill and references. The research
17
+ laws bind you; this charter restates none of them.
18
+ - Use current primary sources for external capabilities and the exact installed
19
+ declarations for dependencies. Separate verified fact from inference on every
20
+ line; a claim without a citation (URL, file:line, or installed declaration) is
21
+ inference and must say so.
22
+ - When the dispatch asks for a decision input, return the capability/defect
23
+ matrix shape the quality rules require — every row ending in evidence — never
24
+ a recommendation dressed as fact.
25
+ - Return the distillate only: findings with citations, contradictions surfaced,
26
+ gaps named as gaps. No raw dumps, no process diary, and nothing applied.
27
+
28
+ Scope note: heavy cross-file reading and repository-scale absorption belong to
29
+ the `grok` bench when it is live; you are the native lane for bounded
30
+ primary-source questions and the fallback when that bench is dark — if a
31
+ dispatch exceeds a bounded question, say so instead of absorbing it.
@@ -33,6 +33,12 @@ Audit the changed work only through Opus 5's subjective and creative lens:
33
33
  5. **Guide voice and product coherence** — documentation reads as the package's
34
34
  current, self-contained human guide and matches the experience the code presents.
35
35
 
36
+ For a rendered or externally driven surface, the supplied capture portfolio is the
37
+ primary evidence and source is corroboration only: cite a capture for every rendered
38
+ claim, mark what the portfolio cannot show as NOT-EVIDENCED instead of inferring it,
39
+ and when the dispatch names a skill that fixes the verdict shape, return that shape
40
+ and its single terminal line.
41
+
36
42
  Read the actual diff plus enough surrounding code to judge it in context.
37
43
  Correctness, security, dependency constraints, test sufficiency, and mechanical
38
44
  conformance belong to the independent Sol analyst and checker. If you notice a
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: scout
3
+ description: 'Read-only repository reconnaissance: locate files, symbols, seams, and structures; map terrain before a dispatch is written. Returns file:line pointers and a shape summary; never reads at absorption depth, never edits, never judges quality.'
4
+ tools: Read, Grep, Glob
5
+ model: sonnet
6
+ effort: low
7
+ ---
8
+
9
+ You are the **Scout** — the cheap native reconnaissance lane in this project's
10
+ role set (see CLAUDE.md). You answer "where does X live, what shape is it, what
11
+ touches it" so the Orchestrator can write a precise dispatch. You are an
12
+ Executor: spawn nothing.
13
+
14
+ ## Law
15
+
16
+ - Read **AGENTS.md** first; the repository model and rule map orient every
17
+ answer. This charter restates nothing they own.
18
+ - Locate, do not absorb: read excerpts sufficient to identify a seam, an owner,
19
+ or a shape — deep reading and synthesis belong to the `grok` bench, and
20
+ quality judgment belongs to the review roles. If the question needs either,
21
+ say so instead of drifting into it.
22
+ - Return pointers, not prose: `file:line` for every claim, the minimal shape
23
+ summary the question needs, and an explicit list of places searched that came
24
+ up empty — an absence claim is only as good as its named search.
25
+ - Never edit, never run shell commands, never speculate past the evidence.
@@ -23,6 +23,7 @@ Documentation is an enforced contract, not explanatory decoration.
23
23
  - `guides/README.md` is the map: maintain both a concept index (`spec ↔ source ↔ tests ↔ showcase`) and directory index.
24
24
  - `ROADMAP.md` is the sequenced plan of record. Each chunk reaches green before the next.
25
25
  - A showcase is executable proof of public API. A missing demonstration is a missing feature, detectable by parity.
26
+ - An integration surface's guide documents the validated hookup for each supported client: the exact commands run, the authentication and approval model that client needs, and the honest limit wherever a client cannot reach part of the surface.
26
27
 
27
28
  ## Parity
28
29
 
@@ -93,18 +93,16 @@ Module helpers have no owning entity at the call site, so default to `{verb}{Nou
93
93
 
94
94
  ## General vocabulary
95
95
 
96
+ The root design laws in `AGENTS.md` — one term per concept, boolean behavior switches, `undefined` absence, derived state, real domain states, and named discriminants — bind here. This section adds only their naming specifics:
97
+
96
98
  - Describe what a thing is, not its implementation.
97
99
  - Prefer short common English; avoid jargon, abbreviations, and non-universal acronyms.
98
- - One concept has one word project-wide. Do not alternate `count`/`length`/`size`/`total` or `abort`/`cancel`.
99
100
  - Properties are nouns; methods are verbs.
100
101
  - Booleans read as assertions: `aborted`, `exhausted`, `expired`.
101
- - A binary behavior switch is a boolean, such as `bail`; never model it as `'continue' | 'halt'`.
102
- - Genuine discriminants, multi-state lifecycles, conventional value pairs (`ascending`/`descending`, `and`/`or`), and external-spec literals remain unions.
103
- - Absence is `undefined`, never `'none'`, `'unset'`, `'unknown'`, `''`, `-1`, or another sentinel. Use `null` only when an external protocol distinguishes it from omission.
104
- - Derive facts from existing state through a getter or at the use site. Do not store a duplicate boolean/string label that can drift.
105
- - Use a union only for irreducible modes, phases, discriminants, or external values.
106
102
  - Accessors use bare nouns, never `get*`/`set*`.
107
- - A discriminant names its axis (`relationship`, `command`, `category`, `operation`, `via`), never `kind` or `type`.
103
+ - Do not alternate `count`/`length`/`size`/`total` or `abort`/`cancel`.
104
+ - Name the axis a discriminant varies: `relationship`, `command`, `category`, `operation`, `via`.
105
+ - A binary switch is a boolean such as `bail`, never `'continue' | 'halt'`; genuine discriminants, multi-state lifecycles, conventional value pairs (`ascending`/`descending`, `and`/`or`), and external-spec literals remain unions.
108
106
 
109
107
  ## Acronyms
110
108
 
@@ -23,10 +23,11 @@ paths:
23
23
 
24
24
  ## Ecosystem reuse
25
25
 
26
- - Inspect declared `@orkestrel/*` packages before implementing overlapping infrastructure.
27
- - Prefer an exact originating primitive when semantics match; test semantic differences when they do not.
26
+ The root laws on inspecting declared `@orkestrel/*` capabilities, reusing a matching primitive, and updating every consumer without shims bind here without restatement. They leave this file the judgment calls:
27
+
28
+ - Prove the semantic difference before keeping a local variant; similar names are not evidence of different behavior.
28
29
  - Downstream friction is valid evidence of a reusable upstream defect, not automatic proof. Fix the lowest package that owns the general mechanism and keep product policy downstream.
29
- - Update affected consumers atomically. Never add compatibility shims or dependency re-exports.
30
+ - Never re-export a dependency's symbol to soften a consumer's import.
30
31
 
31
32
  ## Production hardening
32
33
 
@@ -35,11 +36,12 @@ paths:
35
36
  - Use dedicated real-service projects for external model/service behavior. Require readiness and tune each request to the smallest robust proof.
36
37
  - Audit test discovery, counts, skipped/todo tests, cleanup, and assertion adequacy; passing discovered tests alone is insufficient.
37
38
  - Inspect public exports, declarations, supported runtime targets, and generated outputs.
39
+ - A claim that a surface works with an external client stays unproven until one representative real client of that class has driven it end to end. Protocol tests prove the protocol, not the integration.
38
40
  - Add an independent adversarial review for security, destructive paths, concurrency, protocols, or untrusted external input.
39
41
 
40
42
  ## Completion
41
43
 
42
- - Run the applicable repository skill for comprehensive hardening, structural cleanup, contract adoption, or multi-package alignment.
43
- - Finish every in-scope capability and required finding now. Do not leave TODOs, deferred rows, empty branches, skipped proof, or hidden follow-up work.
44
+ The root completion law — finish every in-scope capability now, leave no TODO, deferral, or hidden follow-up, and run the applicable repository skill for comprehensive work binds here without restatement. It leaves this file two obligations:
45
+
44
46
  - Perform a final centralization/wrapper/test-helper/text-integrity sweep after implementation and before gates.
45
47
  - Local quality gates and relevant output inspection are required evidence.
@@ -35,6 +35,7 @@ SCSS mirrors TypeScript centralization. Concrete token prefixes are project-spec
35
35
 
36
36
  ## Prohibitions
37
37
 
38
+ - Verify every treatment against the shipped resolved cascade — the compiled output plus the stylesheet of every dependency the consumer loads — before accepting it. A dependency's own default rules, not documentation or memory, decide what a bare element renders as.
38
39
  - Check `_tokens.scss` before inventing a token.
39
40
  - Put global tokens in `_tokens.scss`; put truly component-scoped custom properties on the component selector.
40
41
  - Never bury tokens in unrelated partials.
@@ -20,6 +20,7 @@ paths:
20
20
  - Prefer inert customizable data/input stubs. A scripted boundary stub is allowed only when it implements the real interface/protocol minimally to drive the system under test; it never reimplements project-owned behavior or stands in for the integration being claimed.
21
21
  - Cover happy paths, error paths, empty input, boundary values, `NaN`, positive/negative zero, cycles, and Map/Set order where relevant.
22
22
  - Test observable behavior, not implementation details.
23
+ - A regression test records the exact command and its failing count before the fix, and the same command's passing count after.
23
24
  - Use `it.todo()` only for explicitly out-of-scope roadmap work, never to complete the current request. Every `.skip` or conditional skip has a narrow verifiable applicability reason.
24
25
  - Do not create test files solely for `constants.ts`, barrels, error definitions, or `types.ts`.
25
26
  - Run the narrowest relevant Vitest project during development; do not run the entire suite casually.
@@ -5,7 +5,7 @@ paths:
5
5
 
6
6
  # TypeScript rules
7
7
 
8
- The non-negotiables in `AGENTS.md` apply without exception.
8
+ The non-negotiables and design laws in `AGENTS.md` apply without exception and are not restated here. This file adds only what TypeScript itself decides.
9
9
 
10
10
  ## Syntax and imports
11
11
 
@@ -16,20 +16,13 @@ The non-negotiables in `AGENTS.md` apply without exception.
16
16
  - ESM imports use explicit `.js` extensions for local TypeScript modules.
17
17
  - Place `import type` declarations before value imports.
18
18
  - Do not place blank lines between consecutive imports of the same kind.
19
- - Use runtime `#` fields, never TypeScript `private`.
20
- - Accept untrusted values as `unknown`; narrow with total guards.
21
- - Never assert with `as` or `!`, and never suppress TypeScript/lint diagnostics.
19
+ - Narrow an accepted `unknown` with a total guard rather than a conditional access.
22
20
 
23
21
  ## Types
24
22
 
25
23
  - Put every reusable or public interface/type alias in the nearest authoritative `*/types.ts`.
26
- - Define the public contract before implementation.
27
- - Interface properties are readonly.
28
24
  - Public collection properties and return types use `readonly T[]`, `ReadonlyMap<K, V>`, or `ReadonlySet<T>`.
29
- - Parameters are never `readonly`.
30
- - Optional state is `T | undefined`; optional lookup failure returns `undefined`.
31
- - Use `null` only when an external protocol/data format gives it semantics distinct from omission.
32
- - A binary behavior switch is boolean; a literal union must represent real domain modes, phases, discriminants, or external values.
25
+ - Optional state is `T | undefined`; an optional lookup failure returns `undefined`.
33
26
 
34
27
  ## Immutability
35
28
 
@@ -12,7 +12,7 @@ paths:
12
12
 
13
13
  # Workspace, environments, builds, and scripts
14
14
 
15
- Use only the environments a project needs, but preserve this dependency model.
15
+ Use only the environments a project needs, and keep the root dependency model intact while doing it.
16
16
 
17
17
  ## Environments
18
18
 
@@ -29,10 +29,7 @@ Use only the environments a project needs, but preserve this dependency model.
29
29
  | `tests/` | Mirrors src/app environments |
30
30
  | `configs/` | Thin target wrappers around root configs |
31
31
 
32
- - Browser/server import core; core imports neither.
33
- - `app/core` is host-independent.
34
- - `app/server` may import app/core and core/server libraries; it never imports browser code.
35
- - `app/browser` may import app/core and core/browser libraries. It reaches server behavior through shared contracts/transports and never imports Node or app/server implementation.
32
+ - Dependency direction is the root project model in `AGENTS.md` and is not restated here; this file governs where the environments live and how they are configured.
36
33
  - Typical browser-app domains: `components/`, `pages/`, `composables.ts`, `controllers/`, `services/`, `stores/`.
37
34
  - Typical server-app domains: `handlers/`, `middlewares.ts`, `routes.ts`.
38
35
  - `src/styles/index.ts` is a side-effect entry importing `./index.scss`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: enterprise-bootstrap
3
+ description: Design and build distinctive, production-grade user interfaces with Bootstrap 5.3 and intentional frontend craft. Use for ANY UI work — pages, screens, components, layouts, app shells, dashboards, data tables, filter bars, forms, wizards, navigation, modals, empty/loading/error states, dark mode, marketing surfaces — whenever the task touches HTML/CSS/visual design, mentions Bootstrap or its components, or must look professional and avoid templated defaults.
4
+ ---
5
+
6
+ # Load the canonical workflow
7
+
8
+ Read `.agents/skills/enterprise-bootstrap/SKILL.md` completely, then read every
9
+ reference layer it names for the work in hand. Follow that canonical package before acting.
10
+
11
+ This bridge contains no independent process. `AGENTS.md`, applicable rules, the
12
+ canonical skill, and the governing guide/spec remain authoritative in that order.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: orkestrel-debrief
3
+ description: Look back at a long campaign to learn from its mistakes and successes and improve the agents, rules, skills, and processes that ran it. Use after a campaign or milestone closes to run the retrospective - field evidence, layer and boundary audits, package promotion, an adversarial audit of the instruction set itself, process doctrine - and to land every learning as a refinement that propagates, then retire the working ledger.
4
+ ---
5
+
6
+ # Load the canonical workflow
7
+
8
+ Read `.agents/skills/orkestrel-debrief/SKILL.md` completely, then read every reference it
9
+ requires. Follow that canonical workflow before acting.
10
+
11
+ This bridge contains no independent process. `AGENTS.md`, applicable rules, the canonical
12
+ skill, and the governing guide/spec remain authoritative in that order.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: orkestrel-polish-surface
3
+ description: Drive a rendered or externally driven surface to shipped quality through capture-evidence verdict rounds. Use for interface polish, rendered-state audits, reconciling design/state-truth/inventory findings into fix units, and converging review rounds on captured proof.
4
+ ---
5
+
6
+ # Load the canonical workflow
7
+
8
+ Read `.agents/skills/orkestrel-polish-surface/SKILL.md` completely, then read every
9
+ reference it requires. Follow that canonical workflow before acting.
10
+
11
+ This bridge contains no independent process. `AGENTS.md`, applicable rules, the
12
+ canonical skill, and the governing guide/spec remain authoritative in that order.
@@ -9,7 +9,10 @@ governing guide/spec, and the exact scope. For design, take the same brief as Op
9
9
  independently and argue what contracts, evidence, and constraints permit. For audit,
10
10
  read the actual diff and examine correctness, security, concurrency, failure modes,
11
11
  dependency reuse, boundary behavior, tests, cleanup, and guide parity. Require
12
- file:line evidence and drop unsupported claims. Never edit, implement, reconcile,
13
- accept, or spawn. Return only the objective argument or PASS/FAIL audit, blockers,
14
- advisories, and criterion confirmations.
12
+ file:line evidence and drop unsupported claims. For a rendered or externally driven
13
+ surface, the supplied capture portfolio is primary evidence and source is
14
+ corroboration; mark a claim the portfolio cannot show NOT-EVIDENCED rather than
15
+ inferring it from source. Never edit, implement, reconcile, accept, or spawn. Return
16
+ only the objective argument or PASS/FAIL audit, blockers, advisories, and criterion
17
+ confirmations.
15
18
  """