@orkestrel/scaffold 0.0.18 → 0.0.19

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 (65) hide show
  1. package/dist/host/AGENTS.md +4 -2
  2. package/dist/host/CLAUDE.md +22 -10
  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 +81 -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-harden-package/SKILL.md +11 -9
  15. package/dist/host/agents/skills/orkestrel-harden-package/references/centralization.md +44 -59
  16. package/dist/host/agents/skills/orkestrel-harden-package/references/hardening.md +14 -6
  17. package/dist/host/agents/skills/orkestrel-polish-surface/SKILL.md +113 -0
  18. package/dist/host/agents/skills/orkestrel-polish-surface/agents/openai.yaml +4 -0
  19. package/dist/host/agents/skills/orkestrel-polish-surface/references/capture-harness.md +82 -0
  20. package/dist/host/claude/agents/builder.md +2 -0
  21. package/dist/host/claude/agents/codex.md +33 -26
  22. package/dist/host/claude/agents/grok.md +7 -0
  23. package/dist/host/claude/agents/implementer.md +2 -1
  24. package/dist/host/claude/agents/orkestrel.md +20 -15
  25. package/dist/host/claude/agents/planner.md +2 -1
  26. package/dist/host/claude/agents/reviewer.md +6 -0
  27. package/dist/host/claude/rules/documentation.md +1 -0
  28. package/dist/host/claude/rules/names.md +5 -7
  29. package/dist/host/claude/rules/quality.md +7 -5
  30. package/dist/host/claude/rules/styles.md +1 -0
  31. package/dist/host/claude/rules/tests.md +1 -0
  32. package/dist/host/claude/rules/typescript.md +3 -10
  33. package/dist/host/claude/rules/workspace.md +2 -5
  34. package/dist/host/claude/skills/enterprise-bootstrap/SKILL.md +12 -0
  35. package/dist/host/claude/skills/orkestrel-debrief/SKILL.md +12 -0
  36. package/dist/host/claude/skills/orkestrel-polish-surface/SKILL.md +12 -0
  37. package/dist/host/codex/agents/analyst.toml +6 -3
  38. package/dist/host/codex/agents/builder.toml +3 -2
  39. package/dist/host/codex/agents/checker.toml +4 -2
  40. package/dist/host/codex/agents/grok.toml +3 -1
  41. package/dist/host/codex/agents/implementer.toml +4 -2
  42. package/dist/host/codex/agents/opus.toml +5 -3
  43. package/dist/host/codex/agents/orkestrel.toml +6 -5
  44. package/dist/host/codex/agents/planner.toml +6 -2
  45. package/dist/host/codex/agents/reviewer.toml +7 -2
  46. package/dist/host/codex/config.toml +11 -2
  47. package/dist/host/dotfiles/prettierignore +3 -0
  48. package/dist/host/guides/src/scaffold.md +42 -12
  49. package/dist/host/manifest.json +80 -9
  50. package/dist/src/core/index.cjs +162 -14
  51. package/dist/src/core/index.cjs.map +1 -1
  52. package/dist/src/core/index.d.cts +17 -6
  53. package/dist/src/core/index.d.ts +17 -6
  54. package/dist/src/core/index.js +162 -15
  55. package/dist/src/core/index.js.map +1 -1
  56. package/dist/src/server/index.cjs +9 -3
  57. package/dist/src/server/index.cjs.map +1 -1
  58. package/dist/src/server/index.d.cts +2 -1
  59. package/dist/src/server/index.d.ts +2 -1
  60. package/dist/src/server/index.js +10 -4
  61. package/dist/src/server/index.js.map +1 -1
  62. package/package.json +1 -1
  63. package/dist/host/agents/skills/orkestrel-build-application/references/application.md +0 -129
  64. package/dist/host/claude/agents/application.md +0 -30
  65. package/dist/host/codex/agents/application.toml +0 -25
@@ -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
 
@@ -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
@@ -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: Convert a closed campaign's residue into portable truth through field evidence, a findings ledger, fix loops with live re-proof, canon refinement, and disciplined disposal. Use after a campaign or milestone closes to audit what was built and how it was built, when live field testing must precede judgment, when learnings must propagate into skills/rules/guides/scaffold, or when working ledgers must fold into canon and retire.
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
  """
@@ -10,8 +10,9 @@ A unit whose naming, API shape, architecture, or house taste is still open belon
10
10
  implementer: stop and say so.
11
11
 
12
12
  Read AGENTS.md, applicable .claude/rules files, the dispatch-named skill and required
13
- references, and the governing guide/spec before writing. Execute the supplied plan
14
- exactly, in owned files only; shared and off-limits files are report-only and return
13
+ references, and the governing guide/spec before writing. An app-layer unit additionally
14
+ binds .claude/rules/application.md and .claude/rules/workspace.md. Execute the supplied
15
+ plan exactly, in owned files only; shared and off-limits files are report-only and return
15
16
  as exact patches. Add no dependency, suppression, mock, superfluous wrapper, or
16
17
  current-scope TODO/skip/deferral. Never install, commit, push, publish, read
17
18
  credentials, run a destructive command, or run a tree-wide mutating command. Validate
@@ -5,8 +5,10 @@ model_reasoning_effort = "medium"
5
5
  sandbox_mode = "read-only"
6
6
  developer_instructions = """
7
7
  Read AGENTS.md, every rule applicable to changed paths or concepts, the dispatch-named
8
- skill and required references, the governing guide/spec, and the actual diff. Check
9
- each acceptance criterion, naming, placement, centralization, wrappers, declared
8
+ skill and required references, the governing guide/spec, and both the actual diff and
9
+ the repository status supplied with the dispatch. If either is missing, return a
10
+ deviation instead of reconstructing it. Check each acceptance criterion, naming,
11
+ placement, centralization, wrappers, declared
10
12
  dependency reuse, real-test policy, TODO/skip/deferral state, exports, forbidden
11
13
  syntax, owned-file scope, and source/guide parity. Use one evidence pointer per item.
12
14
  Flag judgment questions for reviewer instead of guessing. Never edit or spawn. Return
@@ -7,8 +7,10 @@ developer_instructions = """
7
7
  Act only as a cheap bridge to Cursor Grok. Read AGENTS.md, applicable rules, the
8
8
  dispatch-named skill and references, and the governing guide/spec. Require a bounded
9
9
  question and scope. Resolve the exact model from CURSOR_GROK_MODEL; never guess or
10
- substitute. Invoke Cursor in ask mode:
10
+ substitute. Invoke Cursor in ask mode only for a short bounded ask:
11
11
  agent -p --trust --mode=ask --model "$CURSOR_GROK_MODEL" "<brief>"
12
+ For longer work do not launch anything: return the brief path, the exact resolved
13
+ command, the journal path, and a cap recommendation for the Orchestrator to launch.
12
14
  The brief requires read-only work, concise evidence with file:line pointers, and no
13
15
  raw dumps, design, decisions, or edits. Never use --force, expose CURSOR_API_KEY,
14
16
  read secrets, or edit. Compare git status before and after. Return only the question,
@@ -10,8 +10,10 @@ files, acceptance criteria, and deviation contract. Implement only the bounded u
10
10
  in its explicitly disjoint writable scope within the main checkout. Do not add
11
11
  dependencies, edit shared files, suppress diagnostics, leave current-scope
12
12
  deferrals, use mocks, install, commit, push, publish, read secrets, run destructive
13
- commands, or run tree-wide mutating gates. Validate only owned scope. Stop when
14
- reality diverges; return expected, found, evidence, done/not done, and one short
13
+ commands, or run tree-wide mutating gates. Validate only owned scope. For a defect
14
+ unit, record the exact command and its failing count before the fix and the same
15
+ command's passing count after, and report both. Stop when reality diverges; return
16
+ expected, found, evidence, done/not done, and one short
15
17
  hypothesis. Otherwise return touched paths, diffstat, actual scoped validation, and
16
18
  shared-file patches. Never spawn another agent or accept your own work.
17
19
  """
@@ -14,9 +14,11 @@ to tmp/claude/<unit>.jsonl, gitignored) and record the session id so follow-ups
14
14
  can continue the same session via --resume with context intact.
15
15
  Verify the `claude` CLI is available before dispatch; if it is absent or the
16
16
  dispatch fails, return the failure immediately so the unit can route to the Sol
17
- implementer instead. Be patient: one foreground invocation with a generous
18
- timeout never poll, restart, or kill it. The brief requires owned files,
19
- off-limits files, acceptance criteria, TTTDD, and a deviation contract; it
17
+ implementer instead. An implementation unit is long work: do not launch it. Return
18
+ the brief path, the exact resolved command, the journal path, and a cap
19
+ recommendation, and let the Orchestrator launch it as a tracked background command
20
+ under a hard cap. Never detach a run, poll, restart, or kill one. The brief requires
21
+ owned files, off-limits files, acceptance criteria, TTTDD, and a deviation contract; it
20
22
  forbids dependency installation, commits, pushes, publishing, credentials,
21
23
  destructive commands, shared-file edits, and tree-wide mutating gates. After it
22
24
  returns, verify with git status, the diff, and scoped validation, then return
@@ -7,10 +7,11 @@ developer_instructions = """
7
7
  Read AGENTS.md, applicable .claude/rules files, the dispatch-named skill and required
8
8
  references, guides/src/scaffold.md, the governing package guide, and
9
9
  .claude/agents/orkestrel.md as the canonical ecosystem catalog and operating
10
- reference. Do not edit its generated catalog. Verify only live
11
- state such as versions, ranges, guide parity, branch position, and gate results.
12
- Registry and declared-dependency capabilities must come from live state, exact
13
- installed declarations, and current guides, never memory. Never edit, install, push,
14
- or spawn. Return only the requested primed map, evidence-first health audit, or
10
+ reference. Do not edit its generated catalog. Verify versions, ranges, guide parity,
11
+ branch position, and gate results against manifests, lockfiles, exact installed
12
+ declarations, and current guides, never memory. You read no registry yourself: live
13
+ registry state is evidence the Orchestrator supplies, and without it you report that
14
+ fact as unknown and name what would settle it. Never edit, install, push, or spawn.
15
+ Return only the requested primed map, evidence-first health audit, or
15
16
  dependency blast-radius and topological work-order proposal.
16
17
  """
@@ -9,12 +9,16 @@ dispatch-named skill and references, the governing guide/spec, and the distilled
9
9
  Grok evidence. Pass the exact design brief independently shared with the Sol analyst
10
10
  to:
11
11
  claude -p "<brief>" --model opus --effort high --permission-mode plan
12
+ Run that yourself only for a short bounded design pass; for longer work return the
13
+ brief path, the exact resolved command, the journal path, and a cap recommendation
14
+ for the Orchestrator to launch.
12
15
  Verify that the `claude` CLI is available before dispatch. If it is absent or the
13
16
  dispatch fails, return the failure immediately so the Sol main session can run the
14
17
  design pass itself and record that Opus was unavailable for this round.
15
18
  The brief asks for coherent API shape, vocabulary, ergonomics, at most two
16
- alternatives, bounded units, subjective tensions, and risks. It forbids edits,
17
- commands, reconciliation with Sol, orchestration, and acceptance. Never invoke Fable,
19
+ alternatives, bounded units that each name their role and engine, subjective tensions,
20
+ and risks. It forbids edits, commands, reconciliation with Sol, orchestration, and
21
+ acceptance. Never invoke Fable,
18
22
  read credentials, edit, or spawn. Return the Opus proposal labeled untrusted plus
19
23
  any CLI/auth deviation.
20
24
  """
@@ -8,11 +8,16 @@ Act only as a cheap bridge to Claude Opus 5. Read AGENTS.md, applicable rules, t
8
8
  dispatch-named skill and references, the governing guide/spec, and the actual diff.
9
9
  Pass a bounded design-review brief to:
10
10
  claude -p "<brief>" --model opus --effort high --permission-mode plan
11
+ Run that yourself only for a short bounded review; for longer work return the brief
12
+ path, the exact resolved command, the journal path, and a cap recommendation for the
13
+ Orchestrator to launch.
11
14
  Verify that the `claude` CLI is available before dispatch. If it is absent or the
12
15
  dispatch fails, return the failure immediately so the Sol main session can run the
13
16
  design-audit pass itself and record that Opus was unavailable for this round.
14
17
  Require PASS/FAIL, design-fit blockers with file:line evidence, nonblocking
15
- advisories, and acceptance-criterion confirmations. Forbid edits, commands,
16
- orchestration, reconciliation, and acceptance. Never invoke Fable, read credentials,
18
+ advisories, and acceptance-criterion confirmations. For a rendered or externally
19
+ driven surface, require capture citations as primary evidence and the verdict shape
20
+ of the dispatch-named skill. Forbid edits, commands, orchestration, reconciliation,
21
+ and acceptance. Never invoke Fable, read credentials,
17
22
  edit, or spawn. Return the Opus audit labeled untrusted plus any CLI/auth deviation.
18
23
  """
@@ -40,7 +40,7 @@ planner (Opus 5, subjective) and analyst (Sol, objective) on the
40
40
  SAME design brief in parallel without showing either the other's answer, then
41
41
  reconcile them into one plan; plan bounded units with disjoint ownership; route each
42
42
  nontrivial unit to implementer (Sol) or the opus implementation bridge (Opus 5) —
43
- whichever engine fits the unit — reserving builder/application for fully
43
+ whichever engine fits the unit — reserving builder for fully
44
44
  specified taste-free mechanics; integrate
45
45
  shared files serially; obtain an independent reviewer (Opus 5) design audit and an
46
46
  independent analyst (Sol) correctness audit plus a checker conformance pass; then
@@ -52,7 +52,16 @@ Every dispatch includes objective, context, AGENTS.md, applicable rules, governi
52
52
  skill name/path and required references (or explicit none), guide/spec, owned and
53
53
  off-limits files, permissions, exact output, deviation behavior, and independently
54
54
  checkable acceptance criteria. Writers stop when reality diverges; they do not re-plan
55
- or debug beyond scope.
55
+ or debug beyond scope. After reconciling findings into briefs, every retained finding
56
+ names the brief item that carries it; a finding with no carrier is a dropped finding.
57
+
58
+ A claim about a rendered or externally driven surface is evidenced by its capture
59
+ portfolio or a real foreign client driving it, never by source alone; the campaign
60
+ skill defines the fixed verdict shape and single terminal line for multi-round audits,
61
+ and a fix unit's auditor is an engine that did not write it. Size every long-exec cap
62
+ from the observed high mark of comparable units plus a gate allowance plus explicit
63
+ slack. The first use of any CLI flag, subcommand, quoting form, or stdin combination
64
+ happens in a throwaway probe, never inside a dispatched unit.
56
65
 
57
66
  No executor self-assessment is authoritative. External findings are hypotheses until
58
67
  verified against source. No agent commits, pushes, tags, publishes, installs
@@ -3,3 +3,6 @@
3
3
 
4
4
  # Build output (also gitignored, listed for explicitness).
5
5
  dist/
6
+
7
+ # Generated single-file application showcase.
8
+ demo/showcase.html
@@ -186,10 +186,11 @@ is `'INVALID' | 'BLOCKED' | 'DESTROYED' | 'TARGET' | 'WRITE' | 'FETCH'`.
186
186
  environment contributes, its test-project label, and — on the `src` axis — its `exports` subpath
187
187
  and build formats, or — on the `app` axis — its optional runtime entry.
188
188
 
189
- `ViteMachinery` names the three host-specific pipelines a workspace's generated `vite.config.ts` may
189
+ `ViteMachinery` names the four host-specific pipelines a workspace's generated `vite.config.ts` may
190
190
  carry: `browser` selects the shared root CSS-analysis and Playwright machinery, `vue` selects the
191
191
  single-file-component, HTML, and development-server machinery an application browser environment
192
- needs, and `output` selects build-output containment. The root machinery selection never attaches a
192
+ needs, `output` selects build-output containment, and `showcase` selects the optional single-file
193
+ application-browser projection. The root machinery selection never attaches a
193
194
  `css` property to a nonbrowser project: only the `srcBrowser` and `appBrowser` factories own
194
195
  `ENVIRONMENT_CSS`. It never selects a boundary guarantee — those ship in every shape, as the
195
196
  compilers section sets out.
@@ -197,7 +198,8 @@ compilers section sets out.
197
198
  `ViteFacts` is the optional structural-fact slice shared by every root Vite compiler:
198
199
  `bin`, `integration`, and `service` each select their matching standalone project when `true`;
199
200
  `global` records the exact-case consumer-owned global-setup module and wires it into each eligible
200
- project.
201
+ project; `showcase` records the exact-case consumer-owned showcase wrapper and selects only its
202
+ generated browser machinery.
201
203
 
202
204
  `ViteProjectRegistration` carries one generated project factory identifier and its optional browser
203
205
  label. Root configuration renderers preserve that browser ownership as data through registration
@@ -222,6 +224,7 @@ interface Blueprint {
222
224
  readonly integration: boolean
223
225
  readonly service: boolean
224
226
  readonly global: boolean
227
+ readonly showcase: boolean
225
228
  }
226
229
  ```
227
230
 
@@ -232,7 +235,7 @@ packages — a peer flagged `optional` also gets a `peerDependenciesMeta` entry.
232
235
  package-specific development dependencies merged over the generated baseline, and may carry any
233
236
  valid npm package name.
234
237
 
235
- `bin`, `integration`, `service`, and `global` are structural project facts. All four obey one law:
238
+ `bin`, `integration`, `service`, `global`, and `showcase` are structural project facts. All five obey one law:
236
239
  each is `true` only when the workspace physically ships the directory or exact-case file that
237
240
  defines it — never because of the workspace's name, and never because a sibling fact is set.
238
241
  `deriveBlueprint` probes those paths, so a fresh compile and an audit of a mature repository agree
@@ -254,6 +257,11 @@ on what the workspace is.
254
257
  governing setup-presence fact. A declared `src/browser` project runs that consumer-owned module
255
258
  as `globalSetup`; integration runs it only when `bin` and `integration` are also true.
256
259
  Application-browser, styles, service, and unrelated proof projects never receive it.
260
+ - **`showcase`** — the physical, exact-case regular file
261
+ `configs/app/vite.showcase.config.ts` exists. It is valid only with `app/browser` and turns on the
262
+ computed wrapper, the closed `appShowcase()` root factory, three opt-in scripts, and the
263
+ consumer-only `vite-plugin-singlefile` development dependency. A directory, link, wrong-case
264
+ name, absent wrapper, demo HTML, script, or installed dependency never implies this fact.
257
265
 
258
266
  A service workspace owes two companion files beside that directory, and derivation requires both
259
267
  physically present: `tests/setupService.ts` and `scripts/service.sh`. Either missing companion is a
@@ -374,6 +382,7 @@ From [`constants.ts`](../../src/core/constants.ts).
374
382
  | `HOST_PATHS` | const |
375
383
  | `SERVICE_SCRIPT_PATH` | const |
376
384
  | `GLOBAL_SETUP_PATH` | const |
385
+ | `SHOWCASE_CONFIG_PATH` | const |
377
386
  | `NAME_PATTERN` | const |
378
387
  | `MAX_NAME_LENGTH` | const |
379
388
  | `MAX_DEPENDENCY_NAME_LENGTH` | const |
@@ -425,7 +434,8 @@ host artifacts, and it is the staging manifest rather than the per-plan carried
425
434
  `stageHost` vendors every path on it, while each plan carries the subset `selectHostPaths` selects
426
435
  for that one workspace. `SERVICE_SCRIPT_PATH` names the consumer-owned provisioner a service
427
436
  workspace's audit expects, and `GLOBAL_SETUP_PATH` names the consumer-owned Vitest global-setup
428
- module that independently selected projects can load.
437
+ module that independently selected projects can load. `SHOWCASE_CONFIG_PATH` names the sole
438
+ consumer-owned regular file whose exact physical presence enables the optional app showcase.
429
439
 
430
440
  The bounds are public because they are part of the contract, not implementation trivia.
431
441
  `MAX_ARTIFACT_BYTES` caps one artifact at 5 MiB and `MAX_TOTAL_ARTIFACT_BYTES` caps one blueprint,
@@ -973,8 +983,9 @@ omitting an absent path entirely. `readManifest` reads `package.json` text, and
973
983
  `deriveBlueprint` is the faithful inverse an audit needs: it reconstructs a blueprint from an
974
984
  existing workspace so a mature package is diffed against its own would-be scaffold rather than a
975
985
  dependency-less stand-in. Environments come from `src/<environment>/` and `app/<environment>/`, the
976
- three structural project facts from their directory probes, and `global` from the physical,
977
- exact-case `tests/setupGlobal.ts` file; the service companion law remains the one the blueprint
986
+ three directory-shaped structural project facts from their directory probes, `global` from the
987
+ physical exact-case `tests/setupGlobal.ts` file, and `showcase` from the physical exact-case regular
988
+ file `configs/app/vite.showcase.config.ts`; the service companion law remains the one the blueprint
978
989
  section states — every fact is a reading of the filesystem, never of the name. Dependencies and peers come
979
990
  from the manifest's scoped entries, with an optional peer recovered from
980
991
  `peerDependenciesMeta`; and `extras` is every development dependency minus the complete set
@@ -1129,8 +1140,8 @@ the selected source and application projects from the canonical environment orde
1129
1140
  `viteProjectDefinitions` renders the standalone proof and structural-fact definitions in that same
1130
1141
  order with one blank line between declarations. Both consume `ViteFacts`, so each optional project
1131
1142
  is controlled only by its matching `bin`, `integration`, or `service` blueprint fact; the same
1132
- slice carries `global` to integration and the source-browser compiler without adding another
1133
- project.
1143
+ slice carries `global` to integration and the source-browser compiler, and `showcase` to the
1144
+ application-browser compiler, without adding another test project.
1134
1145
 
1135
1146
  `coreViteConfig`, `srcViteConfig`, `binViteConfig`, and `appViteConfig` emit the thin per-target
1136
1147
  wrappers. `coreViteConfig()` is parameterless and never imports or attaches browser CSS machinery;
@@ -1156,7 +1167,9 @@ that field.
1156
1167
  `configArtifacts`, `sourceArtifacts`, `applicationArtifacts`, `testArtifacts`, and `guideArtifacts`
1157
1168
  are the per-group drafters. When `bin` is selected, `configArtifacts` includes
1158
1169
  `configs/src/tsconfig.bin.json` and `configs/src/vite.bin.config.ts` beside the declared environment
1159
- configuration pairs. `paritySpecifiers` computes the self-specifier and module map the
1170
+ configuration pairs. When `showcase` is selected, it includes the computed thin
1171
+ `configs/app/vite.showcase.config.ts` wrapper beside the ordinary application browser pair.
1172
+ `paritySpecifiers` computes the self-specifier and module map the
1160
1173
  generated parity suite resolves fence imports through. `guideMemberTable`, `guideUsage`,
1161
1174
  `guideMethods`, and `guideTests` render the generated guide's member tables, usage examples, method
1162
1175
  contract, and test inventory. `fillArtifact` fills one template entry into a `template`-origin
@@ -1532,6 +1545,8 @@ a fixed, interleaved order so aggregates sit immediately before their per-enviro
1532
1545
  `build:host` for a bin workspace
1533
1546
  - `dev` when a browser application is selected; `serve` and `serve:build` when a server application
1534
1547
  is selected
1548
+ - `showcase`, `build:showcase`, and `show` only when the physical showcase wrapper is present;
1549
+ `show` builds and copies `dist/showcase/index.html` to `demo/showcase.html`
1535
1550
  - `prepublishOnly` chaining `format:check → lint:check → check → build → test`, followed by
1536
1551
  `test:integration` when the integration axis is selected
1537
1552
 
@@ -1550,6 +1565,10 @@ projects, and nothing there needs a build artifact or a foreign process. Publica
1550
1565
  asymmetry — `prepublishOnly` appends `test:integration`, because a package about to be published
1551
1566
  should prove itself against its own built output, while `test:service` is never in that chain.
1552
1567
  Neither default testing nor publication starts or requires a foreign process.
1568
+ The showcase is likewise outside `build`, `test`, and `prepublishOnly`; it is an explicit projection
1569
+ of `app/browser`, not an environment, test-project row, or source/demo artifact.
1570
+ Its copied `demo/showcase.html` is generated and minified, so the mirrored `.prettierignore` keeps it
1571
+ outside the whole-tree formatter while source and configuration files remain fully gated.
1553
1572
 
1554
1573
  When a prerequisite is absent the proof fails rather than skipping. `test:integration` reads the
1555
1574
  workspace's own built output, so it belongs after `build` — which is exactly where `prepublishOnly`
@@ -1665,6 +1684,17 @@ contract and is reported as computed-artifact drift by `scaffold audit`. The out
1665
1684
  still rejects public directories, browser asset inlining, and output path overrides in a
1666
1685
  post-factory composition as defense in depth; that narrow check is not a general extension seam.
1667
1686
 
1687
+ When the showcase fact is present, the generated root also exports closed
1688
+ `appShowcase(...config: never[])`; both factories reject every argument at runtime and
1689
+ share one fixed internal browser configuration. The ordinary factory retains its strict
1690
+ `script-src 'self'` policy, external asset auditing, and `dist/app/browser` output. The showcase
1691
+ factory alone writes `dist/showcase`, applies `viteSingleFile` with
1692
+ `removeViteModuleLoader: true` and `useRecommendedBuildConfig: true`, uses Oxc and Lightning CSS
1693
+ minification for an `esnext` build without source maps or module preload, and inserts a non-empty ISO
1694
+ `build-id` meta. Its generated CSP admits only the inline script and style required by the
1695
+ self-contained `file://` artifact while retaining `script-src-attr 'none'`, `object-src 'none'`, and
1696
+ `base-uri 'none'`.
1697
+
1668
1698
  The browser development server applies the same trust boundary before Vite's internal middleware.
1669
1699
  Its explicit filesystem allowlist contains only browser/core source roots, browser tests, their
1670
1700
  exact setup files, and installed dependencies. The pre-internal middleware decodes direct,
@@ -2238,8 +2268,8 @@ coreTsconfig()
2238
2268
  srcTsconfig('server')
2239
2269
  appTsconfig('browser', true)
2240
2270
 
2241
- viteMachinery(['core']) // { browser: false, vue: false, output: true }
2242
- viteMachinery([], ['core', 'browser']) // { browser: true, vue: true, output: true }
2271
+ viteMachinery(['core']) // { browser: false, vue: false, output: true, showcase: false }
2272
+ viteMachinery([], ['core', 'browser']) // { browser: true, vue: true, output: true, showcase: false }
2243
2273
  renderViteTest([{ project: 'srcCore' }], false).includes('projects: [srcCore]') // true
2244
2274
  viteHeader(viteMachinery([], ['core', 'browser'])) // the shared header, with browser and Vue support
2245
2275
  coreViteConfig()