@orkestrel/scaffold 0.0.107 → 0.0.109
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/agents/skills/orkestrel-dispatch/scripts/bench.js +326 -91
- package/dist/agents/skills/orkestrel-dispatch/scripts/brief.js +110 -14
- package/dist/agents/skills/orkestrel-dispatch/scripts/chain.js +280 -0
- package/dist/agents/skills/orkestrel-dispatch/scripts/cite.js +188 -26
- package/dist/agents/skills/orkestrel-dispatch/scripts/launch.js +142 -43
- package/dist/agents/skills/orkestrel-dispatch/scripts/login.js +240 -62
- package/dist/agents/skills/orkestrel-dispatch/scripts/patch.js +323 -0
- package/dist/agents/skills/orkestrel-dispatch/scripts/result.js +169 -32
- package/dist/agents/skills/orkestrel-dispatch/scripts/sweep.js +368 -27
- package/dist/agents/skills/orkestrel-falsify/scripts/mutate.js +560 -0
- package/dist/agents/skills/orkestrel-harden/scripts/discovery.js +1052 -205
- package/dist/agents/skills/orkestrel-harden/scripts/measure.js +361 -0
- package/dist/agents/skills/orkestrel-harden/scripts/titles.js +455 -80
- package/dist/agents/skills/orkestrel-parallel/scripts/cases.js +327 -0
- package/dist/agents/skills/orkestrel-publish/scripts/compare.js +298 -51
- package/dist/agents/skills/orkestrel-publish/scripts/pins.js +170 -13
- package/dist/agents/skills/orkestrel-publish/scripts/swap.js +956 -191
- package/dist/agents/skills/orkestrel-publish/scripts/wave.js +707 -112
- package/dist/agents/skills/orkestrel-publish/scripts/window.js +235 -41
- package/dist/agents/skills/orkestrel-scout/scripts/map.js +341 -54
- package/dist/agents/templates/brief.md +1 -1
- package/dist/bin/main.js +51 -46
- package/dist/bin/main.js.map +1 -1
- package/dist/host/AGENTS.md +26 -20
- package/dist/host/agents/orchestration.md +98 -58
- package/dist/host/agents/platforms/posix.md +15 -0
- package/dist/host/agents/platforms/windows.md +37 -0
- package/dist/host/agents/skills/orkestrel-align/SKILL.md +10 -13
- package/dist/host/agents/skills/orkestrel-align/references/fleet.md +4 -10
- package/dist/host/agents/skills/orkestrel-align/references/integration.md +1 -1
- package/dist/host/agents/skills/orkestrel-build/SKILL.md +16 -48
- package/dist/host/agents/skills/orkestrel-build/agents/openai.yaml +1 -1
- package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +19 -16
- package/dist/host/agents/skills/orkestrel-debrief/agents/openai.yaml +1 -1
- package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +15 -28
- package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +5 -6
- package/dist/host/agents/skills/orkestrel-debrief/references/retention.md +12 -14
- package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +36 -24
- package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +14 -11
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/bench.ts +366 -75
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/brief.ts +126 -16
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/chain.ts +323 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/cite.ts +220 -31
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/launch.ts +176 -33
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/login.ts +294 -59
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/patch.ts +401 -0
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/result.ts +199 -34
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/sweep.ts +428 -27
- package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +10 -8
- package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +1 -5
- package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +1 -1
- package/dist/host/agents/skills/orkestrel-falsify/scripts/mutate.ts +701 -0
- package/dist/host/agents/skills/orkestrel-harden/SKILL.md +16 -12
- package/dist/host/agents/skills/orkestrel-harden/references/bindings.md +23 -81
- package/dist/host/agents/skills/orkestrel-harden/references/centralization.md +4 -5
- package/dist/host/agents/skills/orkestrel-harden/references/contract.md +2 -0
- package/dist/host/agents/skills/orkestrel-harden/references/document.md +33 -0
- package/dist/host/agents/skills/orkestrel-harden/references/equivalence.md +6 -3
- package/dist/host/agents/skills/orkestrel-harden/references/hardening.md +8 -4
- package/dist/host/agents/skills/orkestrel-harden/references/research.md +2 -0
- package/dist/host/agents/skills/orkestrel-harden/scripts/discovery.ts +1272 -279
- package/dist/host/agents/skills/orkestrel-harden/scripts/measure.ts +425 -0
- package/dist/host/agents/skills/orkestrel-harden/scripts/titles.ts +603 -98
- package/dist/host/agents/skills/orkestrel-journey/SKILL.md +75 -98
- package/dist/host/agents/skills/orkestrel-journey/references/captures.md +54 -17
- package/dist/host/agents/skills/orkestrel-journey/references/decide.md +1 -20
- package/dist/host/agents/skills/orkestrel-journey/references/layer.md +21 -31
- package/dist/host/agents/skills/orkestrel-journey/references/styles.md +1 -1
- package/dist/host/agents/skills/orkestrel-parallel/SKILL.md +91 -30
- package/dist/host/agents/skills/orkestrel-parallel/agents/openai.yaml +2 -2
- package/dist/host/agents/skills/orkestrel-parallel/references/claude.md +34 -0
- package/dist/host/agents/skills/orkestrel-parallel/references/codex.md +29 -0
- package/dist/host/agents/skills/orkestrel-parallel/references/cursor.md +29 -0
- package/dist/host/agents/skills/orkestrel-parallel/references/t3.md +31 -0
- package/dist/host/agents/skills/orkestrel-parallel/scripts/cases.ts +389 -0
- package/dist/host/agents/skills/orkestrel-polish/SKILL.md +16 -20
- package/dist/host/agents/skills/orkestrel-polish/references/capture-harness.md +16 -26
- package/dist/host/agents/skills/orkestrel-publish/SKILL.md +12 -26
- package/dist/host/agents/skills/orkestrel-publish/agents/openai.yaml +2 -2
- package/dist/host/agents/skills/orkestrel-publish/references/adopt.md +23 -0
- package/dist/host/agents/skills/orkestrel-publish/references/release.md +4 -4
- package/dist/host/agents/skills/orkestrel-publish/references/wave.md +12 -10
- package/dist/host/agents/skills/orkestrel-publish/references/window.md +20 -25
- package/dist/host/agents/skills/orkestrel-publish/scripts/compare.ts +348 -59
- package/dist/host/agents/skills/orkestrel-publish/scripts/pins.ts +202 -22
- package/dist/host/agents/skills/orkestrel-publish/scripts/swap.ts +1061 -191
- package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +812 -140
- package/dist/host/agents/skills/orkestrel-publish/scripts/window.ts +280 -38
- package/dist/host/agents/skills/orkestrel-scout/SKILL.md +3 -3
- package/dist/host/agents/skills/orkestrel-scout/scripts/map.ts +428 -70
- package/dist/host/agents/templates/brief.md +1 -1
- package/dist/host/agents/transports/claude-cli.md +3 -3
- package/dist/host/agents/transports/codex.md +3 -8
- package/dist/host/agents/transports/cursor.md +2 -3
- package/dist/host/claude/AGENTS.md +7 -10
- package/dist/host/claude/agents/analyst.md +3 -3
- package/dist/host/claude/agents/astra.md +3 -3
- package/dist/host/claude/agents/builder.md +1 -1
- package/dist/host/claude/agents/checker.md +1 -1
- package/dist/host/claude/agents/distiller.md +1 -1
- package/dist/host/claude/agents/grok.md +1 -1
- package/dist/host/claude/agents/opus.md +2 -2
- package/dist/host/claude/agents/orkestrel.md +57 -90
- package/dist/host/claude/agents/researcher.md +1 -1
- package/dist/host/claude/agents/reviewer.md +4 -0
- package/dist/host/claude/agents/scout.md +1 -1
- package/dist/host/claude/agents/verifier.md +1 -1
- package/dist/host/claude/rules/application.md +14 -21
- package/dist/host/claude/rules/architecture.md +34 -44
- package/dist/host/claude/rules/browser.md +3 -4
- package/dist/host/claude/rules/campaign.md +55 -0
- package/dist/host/claude/rules/documentation.md +26 -11
- package/dist/host/claude/rules/names.md +9 -4
- package/dist/host/claude/rules/patterns.md +6 -7
- package/dist/host/claude/rules/portability.md +2 -3
- package/dist/host/claude/rules/quality.md +4 -5
- package/dist/host/claude/rules/styles.md +2 -2
- package/dist/host/claude/rules/tests.md +57 -114
- package/dist/host/claude/rules/typescript.md +8 -10
- package/dist/host/claude/rules/workspace.md +21 -19
- package/dist/host/claude/rules/writing.md +3 -3
- package/dist/host/claude/skills/orkestrel-dispatch/SKILL.md +1 -1
- package/dist/host/claude/skills/orkestrel-harden/SKILL.md +1 -1
- package/dist/host/claude/skills/orkestrel-parallel/SKILL.md +1 -1
- package/dist/host/claude/skills/orkestrel-publish/SKILL.md +1 -1
- package/dist/host/claude/skills/orkestrel-scout/SKILL.md +1 -1
- package/dist/host/codex/agents/analyst.toml +9 -3
- package/dist/host/codex/agents/astra.toml +3 -4
- package/dist/host/codex/agents/builder.toml +1 -1
- package/dist/host/codex/agents/opus.toml +3 -4
- package/dist/host/codex/agents/orkestrel.toml +1 -1
- package/dist/host/codex/agents/researcher.toml +2 -2
- package/dist/host/codex/agents/verifier.toml +1 -1
- package/dist/host/codex/config.toml +3 -3
- package/dist/host/configs/helpers.ts +21 -1
- package/dist/host/configs/policy.ts +405 -16
- package/dist/host/cursor/rules/orchestration.mdc +1 -0
- package/dist/host/dotfiles/oxlintrc.json +141 -5
- package/dist/host/guides/agent.md +111 -134
- package/dist/host/guides/capture.md +801 -0
- package/dist/host/guides/probe.md +27 -8
- package/dist/host/guides/scaffold.md +152 -19
- package/dist/host/guides/study.md +534 -440
- package/dist/host/guides/test.md +111 -44
- package/dist/host/manifest.json +199 -242
- package/dist/host/tests/config.test.ts +1558 -219
- package/dist/host/tests/policy.test.ts +127 -1
- package/dist/host/tests/setupPolicy.ts +1389 -39
- package/dist/src/core/index.cjs +239 -87
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +123 -39
- package/dist/src/core/index.d.ts +123 -39
- package/dist/src/core/index.js +234 -86
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +20 -27
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.js +21 -28
- package/dist/src/server/index.js.map +1 -1
- package/package.json +11 -11
- package/dist/agents/skills/orkestrel-dispatch/scripts/helpers.js +0 -283
- package/dist/host/agents/skills/orkestrel-dispatch/references/bench.md +0 -25
- package/dist/host/agents/skills/orkestrel-dispatch/scripts/helpers.ts +0 -333
- package/dist/host/agents/skills/orkestrel-parallel/references/harnesses.md +0 -19
- package/dist/host/guides/supervisor.md +0 -4890
|
@@ -165,7 +165,7 @@ A `Shape` cell holds an interface's data members as bare names in braces, `?` ma
|
|
|
165
165
|
`StageInterface.progress` is the seam a foreign coordinator reads to decide whose budget an expiry
|
|
166
166
|
belongs to, and this is the proof behind it.
|
|
167
167
|
[`RuntimeStage.test.ts`](../tests/src/server/stages/RuntimeStage.test.ts) proves the gauge boundary
|
|
168
|
-
deterministically: it holds one inspection at the results cache with a FIFO, reads `progress`
|
|
168
|
+
deterministically on Vitest 4: it holds one inspection at the results cache with a FIFO, reads `progress`
|
|
169
169
|
elevated while the caller's run is in flight, and reads it level with its pre-inspection value while
|
|
170
170
|
the stage evicts.
|
|
171
171
|
[`LintStage.test.ts`](../tests/src/server/stages/LintStage.test.ts) reads the same boundary at the
|
|
@@ -552,12 +552,31 @@ and proof waits for type readiness and the boot controls. See [Lifecycle](#lifec
|
|
|
552
552
|
the gate only while probe and the gate read one installed copy of each tool.
|
|
553
553
|
|
|
554
554
|
Declare `@orkestrel/probe` as a development dependency of the workspace it inspects. Its
|
|
555
|
-
`typescript` and `vitest` tools are optional peers
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
555
|
+
`typescript` and `vitest` tools are optional peers, with ranges `^6.0.3 || ^7.0.2` and
|
|
556
|
+
`^4.1.12 || ^5.0.5`. Probe resolves them and `oxlint` from that workspace when a direct probe is
|
|
557
|
+
constructed or a server begins onset. Starting refuses TypeScript majors outside 6 and 7 before
|
|
558
|
+
a stage starts. Vue workspaces can retain TypeScript 6 while other workspaces use TypeScript 7.
|
|
559
|
+
|
|
560
|
+
The type stage resolves `tsc` through `typescript/package.json` and its `bin` field. It requires
|
|
561
|
+
neither an in-process compiler API nor an exported `typescript/bin/tsc` subpath. Printed diagnostics
|
|
562
|
+
decide its result, so the differing TypeScript 6 and 7 exit codes do not change a verdict. The
|
|
563
|
+
runtime stage uses the mode-first `createVitest` overload: Vitest 4.1.12 requires that form, and
|
|
564
|
+
Vitest 5.0.5 retains it as a deprecated overload. The `oxlint` package carries no peer range.
|
|
565
|
+
|
|
566
|
+
TypeScript 7's `--showConfig` can succeed with partial JSON for a malformed project. Before
|
|
567
|
+
returning a project's identity, the type stage therefore validates it with `--noEmit` unless
|
|
568
|
+
warming or an earlier unoverlaid check already validated it. Configuration diagnostics name the
|
|
569
|
+
caller’s project rather than the generated scratch configuration.
|
|
570
|
+
|
|
571
|
+
Runtime eviction removes the generated file from Vitest 4's results cache. Vitest 5 exposes no
|
|
572
|
+
per-file cache eviction API, so the stage calls its public `clearCache()` method after each run.
|
|
573
|
+
That call clears results, dependencies, and filesystem module caches. The per-file FIFO cleanup
|
|
574
|
+
instrument applies only to Vitest 4; the runner-retention test checks both versions for generated
|
|
575
|
+
specifications left in the results cache.
|
|
576
|
+
|
|
577
|
+
Vitest 4 installs its termination handlers synchronously; Vitest 5 installs them after resolving
|
|
578
|
+
configuration. Probe removes handlers registered within the factory's async context before signal
|
|
579
|
+
delivery and preserves handlers the host registers outside that context, including during warming.
|
|
561
580
|
|
|
562
581
|
## Registering the server
|
|
563
582
|
|
|
@@ -746,7 +765,7 @@ const claim: Claim = {
|
|
|
746
765
|
const probe = new Probe({ workspace: process.cwd() })
|
|
747
766
|
const verdict = await probe.prove(claim)
|
|
748
767
|
verdict.digest // 'bdf03e5dfd6bd413ead671c7a2940fcf'
|
|
749
|
-
verdict.receipt //
|
|
768
|
+
verdict.receipt?.startsWith(`probe:${verdict.digest}:type:`) // true
|
|
750
769
|
await probe.destroy()
|
|
751
770
|
```
|
|
752
771
|
|
|
@@ -108,9 +108,10 @@ Exported from `@orkestrel/scaffold`, and reachable from
|
|
|
108
108
|
| `Plan` | interface | Holds the compiled, ordered artifact list and the selection it covers. |
|
|
109
109
|
| `PlanSummary` | interface | Represents the tally of one plan by artifact origin. |
|
|
110
110
|
| `Question` | interface | Represents one validation issue raised against a blueprint or a plan. |
|
|
111
|
-
| `
|
|
111
|
+
| `CompileResult` | interface | Represents the replayable outcome of one compile. |
|
|
112
112
|
| `SrcDefinition` | interface | Describes the build and export settings one published `src` environment contributes. |
|
|
113
113
|
| `StylesExtension` | interface | Represents a named sheet face under `src/<name>`. |
|
|
114
|
+
| `ToolchainHold` | interface | Represents one foreign tool range required by a browser framework. |
|
|
114
115
|
| `ViteMachinery` | interface | Names which host-specific pipelines a generated root Vite configuration carries. |
|
|
115
116
|
|
|
116
117
|
#### Constants
|
|
@@ -123,16 +124,18 @@ Exported from `@orkestrel/scaffold`, and reachable from
|
|
|
123
124
|
| `APP_SERVER_DEV_DEPENDENCIES` | const | Lists the development dependencies a private server application adds. |
|
|
124
125
|
| `ARTIFACT_TEMPLATES` | const | Holds formatter-stable template text for source, test, document, guide, and service artifacts. |
|
|
125
126
|
| `AXES` | const | Lists the axes a browser extension may occupy, frozen. |
|
|
126
|
-
| `BASE_DEV_DEPENDENCIES` | const | Holds the tooling versions
|
|
127
|
+
| `BASE_DEV_DEPENDENCIES` | const | Holds the baseline tooling versions, before framework holds apply. |
|
|
127
128
|
| `BIN_CONFIGS` | const | Lists the configuration files a workspace that ships its own executable adds, frozen. |
|
|
128
129
|
| `BIN_ENTRY_PATH` | const | Names the executable entry whose presence makes a workspace `bin`. |
|
|
129
130
|
| `BIN_OUTPUT_PATH` | const | Names the built executable a bin workspace's manifest command runs. |
|
|
130
131
|
| `BROWSE_DEV_DEPENDENCIES` | const | Names the development dependency a browser or styles surface adds. |
|
|
131
132
|
| `BROWSE_UPSTREAM` | const | Lists the packages `@orkestrel/browser` depends on at runtime, directly or transitively, frozen. |
|
|
133
|
+
| `CAPTURE_DEV_DEPENDENCIES` | const | Names the development dependency a browser application's journey axis adds. |
|
|
134
|
+
| `CAPTURE_UPSTREAM` | const | Lists the capture package and its fleet runtime dependency closure, frozen. |
|
|
132
135
|
| `CANON_PATHS` | const | Lists the instruction-canon paths staged for reading rather than for a target, frozen. |
|
|
133
136
|
| `CATALOG_AGENT_PATH` | const | Names the agent file whose marker-bounded package table the catalog verb alone owns. |
|
|
134
|
-
| `
|
|
135
|
-
| `
|
|
137
|
+
| `CATALOG_END_MARKER` | const | Names the marker closing the package table inside `CATALOG_AGENT_PATH`. |
|
|
138
|
+
| `CATALOG_START_MARKER` | const | Names the marker opening the package table inside `CATALOG_AGENT_PATH`. |
|
|
136
139
|
| `CONFIG_TEMPLATES` | const | Holds formatter-stable template text for every configuration artifact. |
|
|
137
140
|
| `CONFORMANCE_TEST_PATH` | const | Names the official-tooling drift proof whose presence makes a workspace `conformance`. |
|
|
138
141
|
| `CONTROL_CHARACTER_PATTERN` | const | Matches the Unicode controls, formatting controls, and line and paragraph separators rejected in text. |
|
|
@@ -203,6 +206,7 @@ Exported from `@orkestrel/scaffold`, and reachable from
|
|
|
203
206
|
| `TARGET_SKILL_NAMES` | const | Lists the package-facing skills a target receives pointers for, frozen and alphabetical. |
|
|
204
207
|
| `THEMES_BARREL_PATH` | const | Names the themes stylesheet marker. |
|
|
205
208
|
| `THEMES_ENTRY_PATH` | const | Names the themes build entry marker. |
|
|
209
|
+
| `TOOLCHAIN_HOLDS` | const | Holds foreign tool ranges required by selected browser frameworks, frozen. |
|
|
206
210
|
| `TREE_TEST_PATH` | const | Names the real-tree proof whose presence makes a workspace `tree`. |
|
|
207
211
|
| `VERSION_PATTERN` | const | Matches the exact `major.minor.patch` version syntax a blueprint declares. |
|
|
208
212
|
| `WORKSPACE_DEV_ENGINES` | const | Holds the `devEngines` record every generated manifest carries. |
|
|
@@ -298,6 +302,7 @@ Exported from `@orkestrel/scaffold`, and reachable from
|
|
|
298
302
|
| `artifactsToQuestions` | function | Measures a drafted artifact list against the laws a whole plan decides. |
|
|
299
303
|
| `blueprintToConfigArtifacts` | function | Compiles every artifact in the `configs` group. |
|
|
300
304
|
| `blueprintToDevDependencies` | function | Projects a blueprint into the development dependencies its manifest declares. |
|
|
305
|
+
| `blueprintToToolchainHolds` | function | Projects a blueprint into the toolchain holds its browser frameworks require. |
|
|
301
306
|
| `blueprintToDocumentArtifacts` | function | Compiles the generated workspace's root documentation. |
|
|
302
307
|
| `blueprintToExports` | function | Projects published environments and sheets into the manifest export map. |
|
|
303
308
|
| `blueprintToFaces` | function | Projects a blueprint into browser extensions restricted to occupied browser axes. |
|
|
@@ -661,7 +666,8 @@ answers a read and grant no verb write authority that it did not already have.
|
|
|
661
666
|
`new --app browser` command selects the journey axis, creates its birth-owned wrapper, defines
|
|
662
667
|
`appJourney` in the root configuration, and excludes the browser integration suite from
|
|
663
668
|
`app:browser`. Its manifest declares `test:journey` and invokes it after `npm run test:app` in
|
|
664
|
-
`test`.
|
|
669
|
+
`test`. It also declares `journey: capture journey` and `capture: capture frames` for explicit
|
|
670
|
+
scoped selections. A selection without a browser application emits no journey axis. `--styles`, `--themes`,
|
|
665
671
|
`--showcase`, and `--extend` select the structural facts and the extensions, and Surfaces and extensions
|
|
666
672
|
states what each emits and what each refuses. Creation leaves `setup` empty, and the remaining
|
|
667
673
|
structural facts take no creation option. Add a root `tests/setup*.test.ts` proof for `setup`,
|
|
@@ -778,6 +784,15 @@ manifest and planned `vite.config.ts` conflict, and the option to exclude `confi
|
|
|
778
784
|
A selection that excludes `configs` proceeds. An advisory alone does not make an aligned target
|
|
779
785
|
drift.
|
|
780
786
|
|
|
787
|
+
The probe workbench separates ordinary probes from benchmarks by filename. `test:probe` collects
|
|
788
|
+
`tmp/probes/**/*.test.ts`. `test:bench` collects `tmp/probes/**/*.bench.ts` and `tests/**/*.bench.ts`
|
|
789
|
+
with the explicit `--mode benchmark` option. Neither script belongs to a gate. In a benchmark file,
|
|
790
|
+
register a regular `it` or `test` callback that receives the context's `bench` fixture. Await
|
|
791
|
+
`bench(name, options, fn).run()` or `bench.compare(...)`; options precede the benchmark function.
|
|
792
|
+
The filename keeps the benchmark out of ordinary test runs, so no mode guard is required. The
|
|
793
|
+
script supplies the `import.meta.env.MODE` marker explicitly rather than relying on the command's
|
|
794
|
+
default mode. See the [Vitest benchmark guide](https://vitest.dev/guide/benchmarking).
|
|
795
|
+
|
|
781
796
|
A gate chain also reaches a sheet or framework face through `vitest run --config <wrapper>` when
|
|
782
797
|
the wrapper path belongs to that face in the planned configuration; a build invocation does not.
|
|
783
798
|
|
|
@@ -809,6 +824,12 @@ section. A name carrying no colon has no family, and a family the section declar
|
|
|
809
824
|
nothing to follow, so each of those is appended after the last declared script instead. `catalog`
|
|
810
825
|
writes no script region; it names the ranges alone.
|
|
811
826
|
|
|
827
|
+
The browser application's journey axis adds `journey` and `capture`. Their generated commands,
|
|
828
|
+
`capture journey` and `capture frames`, have no predecessor forms in the accepted set. Missing
|
|
829
|
+
commands append; generated values remain writable; `replaceManifestScripts` preserves customized
|
|
830
|
+
values while repairing siblings independently, so a selected or wrapped `journey` command survives
|
|
831
|
+
repair. Neither scoped command replaces `test:journey` in the gate chain.
|
|
832
|
+
|
|
812
833
|
The range region and the script region are not groups. `package.json` is birth-owned, so the
|
|
813
834
|
`manifest` group creates it when a workspace is first materialized and never rewrites it afterwards,
|
|
814
835
|
and `--groups` narrows the plan rather than the regions. `repair` and `overwrite` therefore
|
|
@@ -1109,7 +1130,10 @@ writes a suite, and a suite may drive a service the skeleton does not start.
|
|
|
1109
1130
|
`studies` says the workspace holds at least one exact-case `*.test.ts` file beneath `tests/studies`,
|
|
1110
1131
|
nested or direct, outside any `node_modules` or `.git` directory, which Vitest's default exclude
|
|
1111
1132
|
never collects, and it alone registers the `studies` Vitest project over that directory and its
|
|
1112
|
-
`test:studies` script. The project
|
|
1133
|
+
`test:studies` script. The project holds only proofs the `@orkestrel/study` engine drives. An
|
|
1134
|
+
end-to-end proof that no study engine drives is an integration test instead. It goes in
|
|
1135
|
+
`tests/integration.test.ts` when it crosses environments.
|
|
1136
|
+
The project loads `tests/setup.ts` alone. The tests import
|
|
1113
1137
|
`tests/setupStudy.ts`, a harness module the package owns, so scaffold plans no such file and no
|
|
1114
1138
|
project loads it as a setup file. A publishing workspace invokes the project from `prepublishOnly`,
|
|
1115
1139
|
after `npm test` and before the release proof; a `private: true` workspace invokes it from `test`,
|
|
@@ -1162,6 +1186,17 @@ reads `process.env.CAPTURE === '1'` for that boolean. The generated `test:journe
|
|
|
1162
1186
|
`test` chain runs it after the application projects. With the journey axis off, the ordinary
|
|
1163
1187
|
browser project retains its integration suite.
|
|
1164
1188
|
|
|
1189
|
+
The same axis adds `journey: capture journey` and `capture: capture frames`, using the executable
|
|
1190
|
+
from `node_modules/@orkestrel/capture`. Run `npm run journey -- <selector>` for behavior with
|
|
1191
|
+
capture off and `npm run capture -- <selector>` for frames with `CAPTURE=1`. A selector is `all`
|
|
1192
|
+
or a colon-delimited owner path declared by the wrapper. Narrow with `--variant <name>` and
|
|
1193
|
+
`--case <exact-full-name>`; frames also accept `--state <name>`. Replace the selector with
|
|
1194
|
+
`--changed <ref>` and inspect `--plan` before executing the changed set. The package refuses
|
|
1195
|
+
shared changes that cannot be narrowed and prints the explicit whole-suite command.
|
|
1196
|
+
The application wires the wrapper's discovery, tags, portfolios, registry, selection request,
|
|
1197
|
+
and final-case records to the capture protocol before running these commands. Scaffold seeds
|
|
1198
|
+
the dependency and scripts; it defines no application owner or state registry.
|
|
1199
|
+
|
|
1165
1200
|
The generated browser resolver and gate cover Chromium alone. The emitted `configs/browsers.ts` doc
|
|
1166
1201
|
block states the condition that reopens engine selection, and is that condition's one home.
|
|
1167
1202
|
|
|
@@ -1378,10 +1413,13 @@ digest in lowercase hexadecimal. Stamping a stamped page returns it unchanged. `
|
|
|
1378
1413
|
page carrying a repeated or malformed stamp, and a page whose head does not close on its own line.
|
|
1379
1414
|
|
|
1380
1415
|
The journey follows the same modes. The birth-owned `configs/app/vite.journey.config.ts` wrapper
|
|
1381
|
-
keeps your variant list and passes the Vite mode to the root
|
|
1382
|
-
factory, which selects the application through
|
|
1383
|
-
|
|
1384
|
-
|
|
1416
|
+
keeps your variant list and passes the Vite mode to the root
|
|
1417
|
+
`appJourney(variant, variants, mode?, override?)` factory, which selects the application through
|
|
1418
|
+
`resolveApplication` as well. Each variant project collects
|
|
1419
|
+
`tests/app/<application>/integration.test.ts` alone, sets the variant viewport, and provides
|
|
1420
|
+
`variant`, `variants`, and `capture`. The factory merges an optional `UserConfig` override last,
|
|
1421
|
+
through `mergeOverride`, so a wrapper changes only the fields it names and the project keeps its
|
|
1422
|
+
include and exclude replacement, viewport, commands, and plugin rules. The manifest runs `test:journey` for the base
|
|
1385
1423
|
application and `test:journey:<framework>`, the same command with `--mode <framework>`, for each
|
|
1386
1424
|
app-side browser extension, after `npm run test:app` in `test`.
|
|
1387
1425
|
|
|
@@ -1416,6 +1454,15 @@ executable, installs it, runs its checks, builds, projects, journey modes, showc
|
|
|
1416
1454
|
export consumption, and proves that `repair` restores a deleted wrapper byte for byte and that
|
|
1417
1455
|
`audit` reports a stale one.
|
|
1418
1456
|
|
|
1457
|
+
The default `appServer` build emits the single `dist/app/server/main.cjs` that a single-executable
|
|
1458
|
+
embed takes; its dynamic import evaluates only when it runs. The factory defaults `codeSplitting`
|
|
1459
|
+
to `false` on outputs that omit it. An override keeps its output members and explicit splitting
|
|
1460
|
+
values, so an overridden build can emit several files. The vendored `tests/config.test.ts` builds a
|
|
1461
|
+
scratch entry through the real wrapper in each target that holds `app/server`, requires one chunk,
|
|
1462
|
+
and splits it under a control. Scaffold's `tests/src/core/templates.test.ts` runs the emitted file in a staged
|
|
1463
|
+
server root, builds explicit output lists through the factory parameter, and runs the vendored case
|
|
1464
|
+
in staged server targets under a mutation of the factory and of the control.
|
|
1465
|
+
|
|
1419
1466
|
### The migration guard
|
|
1420
1467
|
|
|
1421
1468
|
Vue code belongs to the `vue` extension's faces. `repair` and `overwrite` refuse a target whose
|
|
@@ -1469,7 +1516,7 @@ scaffolding.stages // one CompileRecord per stage that ran
|
|
|
1469
1516
|
compiler.destroy()
|
|
1470
1517
|
```
|
|
1471
1518
|
|
|
1472
|
-
One rule decides the outcome: a `
|
|
1519
|
+
One rule decides the outcome: a `CompileResult` carries a plan exactly when no question blocks. A
|
|
1473
1520
|
refused blueprint is answered rather than raised, so a caller reads the refusal from the value it
|
|
1474
1521
|
asked for. Each stage records its input and its output, a failed stage records the coded reason
|
|
1475
1522
|
beside them, and the stages after a failed one never run.
|
|
@@ -1623,6 +1670,52 @@ fetched bytes rather than prose this workspace wrote, and it reports a top-level
|
|
|
1623
1670
|
neither this package's own, nor `guides/README.md`, nor a catalog row, so an exclusion always
|
|
1624
1671
|
carries its evidence.
|
|
1625
1672
|
|
|
1673
|
+
The Vue override populations enable `policy/no-cross-vue-face` for `cjs`, `cts`, `js`, `jsx`,
|
|
1674
|
+
`mjs`, `mts`, `ts`, `tsx`, and Vue single-file components. The import-free `configs/policy.ts`
|
|
1675
|
+
leaf uses these local exports:
|
|
1676
|
+
|
|
1677
|
+
| Export | Behaviour |
|
|
1678
|
+
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1679
|
+
| `computePolicyTarget` | Computes a lexical destination from the native importer's absolute filename and cwd, consuming relative parents against its actual directory. |
|
|
1680
|
+
| `reportVueImport` | Checks a literal source against complete permitted face roots, refusing unclassifiable locations and traversal above the workspace. |
|
|
1681
|
+
| `VUE_IMPORT_RULE` | Visits parser-admitted static imports, source-bearing named and star exports, their type-only forms, and string-literal dynamic imports through Oxlint's native parser. |
|
|
1682
|
+
| `VUE_SOURCE_ROOTS`, `VUE_APPLICATION_ROOTS` | Hold the frozen destination roots checked before the retained independent restrictions. |
|
|
1683
|
+
|
|
1684
|
+
Native grammar applies before policy visitors. In the canonical fixtures on both Vue faces, `.cjs` static
|
|
1685
|
+
value imports, named and star exports at both importer depths, and the source-less export receive
|
|
1686
|
+
native parser errors. The coverage keeps all original input identities and extensions in a disjoint
|
|
1687
|
+
partition: those seven inputs per face have explicit parser-refusal expectations on both Vue faces;
|
|
1688
|
+
the remaining inputs retain strict rule and collection checks. The `.cjs` literal dynamic imports
|
|
1689
|
+
and nonliteral import controls stay in that parsed population. No `.cts` or other extension inherits
|
|
1690
|
+
a refusal from the `.cjs` observation; each must establish its own native parsing and collection.
|
|
1691
|
+
|
|
1692
|
+
Otherwise-permitted relative imports within `src/vue` or `app/vue` work at arbitrary nesting
|
|
1693
|
+
depth. A nested `../print/index.js` can stay inside Vue while the same text at the face root
|
|
1694
|
+
reaches a forbidden sibling. Application Vue retains relative access to `app/core`, `app/browser`,
|
|
1695
|
+
`src/core`, `src/browser`, and `src/vue`; published Vue retains its independent alias requirements
|
|
1696
|
+
for core and browser. Query and fragment suffixes are excluded from destination calculation
|
|
1697
|
+
without decoding their text. Thus application Vue's `../browser?x` reaches an allowed face, while
|
|
1698
|
+
published Vue's matching relative import still requires the browser alias.
|
|
1699
|
+
|
|
1700
|
+
The existing alias, Node, server, absolute-path, URL, backslash, dot-segment, traversal-spelling,
|
|
1701
|
+
and compiler-API restrictions keep their original specifier matching. Consequently a same-face
|
|
1702
|
+
directory named `server` can still be refused, as can a published Vue directory named `core` or
|
|
1703
|
+
`browser`. Computed imports remain admitted by this boundary rule. Template-literal targets,
|
|
1704
|
+
`TSImportType`, CommonJS resolution, symlinks, URI decoding, and custom resolver remapping are
|
|
1705
|
+
outside its destination claim. POSIX, drive-letter, and UNC helper cases assert lexical behaviour;
|
|
1706
|
+
they do not establish a binary run on another operating system.
|
|
1707
|
+
|
|
1708
|
+
The exact direct folder `app/vue/composables` joins the function-domain register. Its camelCase
|
|
1709
|
+
modules require one named exported function matching the filename. Nested folders, published Vue
|
|
1710
|
+
composables, look-alike names, and the existing structural filename exclusions gain no registration.
|
|
1711
|
+
Every parser-admitted Vue case in `tests/config.test.ts` requires a debugger collection sentinel;
|
|
1712
|
+
a valid composable keeps that sentinel inside its exported function. Parser-refused inputs retain
|
|
1713
|
+
their original text, but require an exact native message, error severity, normalized filename, and
|
|
1714
|
+
source-token label instead of claiming debugger or policy visitation. Both contracts use the same
|
|
1715
|
+
native-linter acquisition helper in `tests/setupPolicy.ts`; the rule reader still refuses missing
|
|
1716
|
+
rule codes or filenames. Scratch controls suppress only the new report, restore only the removed
|
|
1717
|
+
relative regex alternatives, or remove only the Vue composable row.
|
|
1718
|
+
|
|
1626
1719
|
The skill sweep reads named value and type imports from `@orkestrel/*` in every Markdown fence
|
|
1627
1720
|
in `SKILL.md` and its named references, including fences inside lists and blockquotes. It resolves
|
|
1628
1721
|
each entry through that package's exports map — the workspace's own manifest for the package the
|
|
@@ -1893,8 +1986,9 @@ version. The real npm resolver accepts the preserved range. Its narrowed-range c
|
|
|
1893
1986
|
|
|
1894
1987
|
The floors live in scaffold's own `package.json`. `BASE_DEV_DEPENDENCIES` and the tables beside it
|
|
1895
1988
|
derive each row scaffold installs from that manifest, and the self-pin from its `version` field, so
|
|
1896
|
-
the toolchain a generated workspace receives is the toolchain scaffold
|
|
1897
|
-
|
|
1989
|
+
the baseline toolchain a generated workspace receives is the toolchain scaffold declares. A selected
|
|
1990
|
+
browser framework can override a floor through `TOOLCHAIN_HOLDS`. The rows scaffold does
|
|
1991
|
+
not install are seeds — `@orkestrel/capture`, `@vitejs/plugin-vue`, `vue`, `vue-tsc`, `vite-plugin-singlefile`, and the
|
|
1898
1992
|
application-server fleet packages — and each carries the highest triple its supported major served
|
|
1899
1993
|
when it was written.
|
|
1900
1994
|
[`tests/src/core/constants.test.ts`](../tests/src/core/constants.test.ts) names that seeded set, so a
|
|
@@ -1902,10 +1996,48 @@ row entering or leaving the manifest moves a test rather than passing unnoticed.
|
|
|
1902
1996
|
of `STYLES_DEV_DEPENDENCIES`, is a seed as well: it carries the `^1.105.1` range the
|
|
1903
1997
|
`@orkestrel/veneer` checkout declared on 2026-09-30, and that test names it in the seeded set.
|
|
1904
1998
|
|
|
1999
|
+
`CAPTURE_DEV_DEPENDENCIES` seeds `@orkestrel/capture` at `^0.0.1` only when the blueprint's
|
|
2000
|
+
`journey` axis is enabled and its `app` includes `browser`. `CAPTURE_UPSTREAM` withholds that
|
|
2001
|
+
seed from capture itself and its fleet runtime closure: `@orkestrel/contract`,
|
|
2002
|
+
`@orkestrel/emitter`, `@orkestrel/process`, and `@orkestrel/timeout`. The frozen, sorted list
|
|
2003
|
+
follows dependencies and peers from capture's installed manifests and moves with the capture
|
|
2004
|
+
pin. Scaffold does not install capture; planning proofs cover every listed exclusion and an
|
|
2005
|
+
unlisted journey workspace. The installed closure-equality proof lands when scaffold installs
|
|
2006
|
+
capture. A browser source, styles surface, or browser setup without that journey application
|
|
2007
|
+
receives no capture seed. A runtime declaration remains in its existing section instead of
|
|
2008
|
+
being duplicated as a development dependency.
|
|
2009
|
+
|
|
1905
2010
|
Outside the selected showcase pair, a newer major is never crossed for you. `audit` reports one as a non-blocking `dependencies`
|
|
1906
|
-
question, and a person decides whether the generated toolchain supports it.
|
|
1907
|
-
|
|
1908
|
-
|
|
2011
|
+
question, and a person decides whether the generated toolchain supports it.
|
|
2012
|
+
|
|
2013
|
+
`TOOLCHAIN_HOLDS` records framework-specific ranges. `blueprintToToolchainHolds` selects those
|
|
2014
|
+
rows from the blueprint's occupied browser framework faces. A `src/vue` or `app/vue` face selects
|
|
2015
|
+
TypeScript `^6.0.3`: no stable `vue-tsc` runs on TypeScript 7, `@volar/typescript@2.4.30` declares
|
|
2016
|
+
the peer range `typescript <7`, and the TypeScript 7.0 announcement directs Vue projects to stay
|
|
2017
|
+
on TypeScript 6.0. Every workspace without that extension receives TypeScript `^7.0.2`.
|
|
2018
|
+
For a selected hold, `audit` reports the hold and its reason in place of the newer-major question
|
|
2019
|
+
and reports a declaration past the hold. A non-Vue workspace on TypeScript 7 raises no hold
|
|
2020
|
+
question. The constants proof ties each hold to its framework's planned range and scaffold's
|
|
2021
|
+
manifest baseline. Prove the framework on the later major before lifting its hold.
|
|
2022
|
+
|
|
2023
|
+
The dependency tables select these floors:
|
|
2024
|
+
|
|
2025
|
+
| Tool | Range | Scope |
|
|
2026
|
+
| ---------------------------- | ---------- | -------------------------------------------------------------- |
|
|
2027
|
+
| TypeScript | `^7.0.2` | Baseline without a Vue extension |
|
|
2028
|
+
| TypeScript | `^6.0.3` | A selected `src/vue` or `app/vue` face |
|
|
2029
|
+
| Vitest | `^5.0.5` | Every workspace |
|
|
2030
|
+
| `@vitest/browser-playwright` | `^5.0.5` | Browser tooling |
|
|
2031
|
+
| `oxlint` | `^1.90.0` | Every workspace |
|
|
2032
|
+
| `oxfmt` | `^0.75.0` | Every workspace |
|
|
2033
|
+
| `@microsoft/api-extractor` | `^7.60.0` | Declaration builds; uses its bundled TypeScript 6.0.3 engine |
|
|
2034
|
+
| `playwright` | `^1.64.1` | Browser tooling |
|
|
2035
|
+
| Vite | `^8.3.5` | Every workspace |
|
|
2036
|
+
| `@types/node` | `^24.19.2` | Every workspace; generated workspaces support Node `>=22.18.0` |
|
|
2037
|
+
|
|
2038
|
+
Node 26 types admit APIs that the supported runtime lacks. Inside the declared major the verbs
|
|
2039
|
+
raise the floor themselves, which is what makes the caret's own width beside the point:
|
|
2040
|
+
`^0.64.0` admits no `0.65.0`, and `repair` rewrites the range to `^0.65.0` rather than
|
|
1909
2041
|
widening it.
|
|
1910
2042
|
|
|
1911
2043
|
Compatibility and staleness are separate questions, so they are read by separate helpers.
|
|
@@ -2004,7 +2136,7 @@ succeed without making requests; remote hooks run setup. Claude Code Cloud conti
|
|
|
2004
2136
|
the `.claude/AGENTS.md` Claude Code bridge, the `.agents/orchestration.md` agent-operation contract,
|
|
2005
2137
|
the rules under `.claude/rules/` and `.cursor/rules/`, the skills under `.agents/skills/` and
|
|
2006
2138
|
`.claude/skills/`, the templates under `.agents/templates/`, the transport contracts under
|
|
2007
|
-
`.agents/transports/`, the agent roles under `.claude/agents/` and `.codex/agents/`, the
|
|
2139
|
+
`.agents/transports/`, the platform pages under `.agents/platforms/`, the agent roles under `.claude/agents/` and `.codex/agents/`, the
|
|
2008
2140
|
`.codex/config.toml` bench configuration, and the `.mcp.json` and `.cursor/mcp.json` server
|
|
2009
2141
|
registrations. A release stages every one of them, and a target receives a copy only where the plan
|
|
2010
2142
|
claims the path. At the `AGENTS.md` destination it receives the pointer: different content at the
|
|
@@ -2560,7 +2692,7 @@ and the regenerated root configuration registers no project for it. Restore the
|
|
|
2560
2692
|
hand, then run `repair`.
|
|
2561
2693
|
|
|
2562
2694
|
**A fleet target holding Vue code under `app/browser` cannot repair.** On 2026-09-30 the
|
|
2563
|
-
`elements`, `mailbox`,
|
|
2695
|
+
`elements`, `mailbox`, and `roughnotes` checkouts each held `.vue` files under
|
|
2564
2696
|
`app/browser`, read by a recursive count in each local checkout. The migration guard refuses
|
|
2565
2697
|
`repair` and `overwrite` in each of them until its components move to `app/vue`, so each moves them
|
|
2566
2698
|
in its own change before it adopts the release that carries the guard.
|
|
@@ -2804,7 +2936,8 @@ The generated guide index lists each occupied Vue face with its source, tests, a
|
|
|
2804
2936
|
- [`tests/src/bin/main.test.ts`](../tests/src/bin/main.test.ts) — the process entry point.
|
|
2805
2937
|
- [`tests/policy.test.ts`](../tests/policy.test.ts) — the path- and text-shaped policy laws:
|
|
2806
2938
|
mirrors, the root setup mirror, suppressions, the rule map, filenames, manifest scripts, skills,
|
|
2807
|
-
bridges,
|
|
2939
|
+
bridges, the prose sweep over every authored Markdown file, and the text-integrity sweep over the
|
|
2940
|
+
authored and source text. The syntax-shaped laws are the
|
|
2808
2941
|
rules of the vendored oxlint plugin `configs/policy.ts`, proven in `tests/config.test.ts`.
|
|
2809
2942
|
- [`tests/config.test.ts`](../tests/config.test.ts) — the root configuration's aliases, projects,
|
|
2810
2943
|
and outputs, every plugin rule against a case pair drawn from inside and outside its membership
|