@orkestrel/scaffold 0.0.6 → 0.0.8

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.
@@ -68,7 +68,7 @@ export declare function applicationArtifacts(spec: Blueprint): readonly Artifact
68
68
  *
69
69
  * @param src - Published src environments.
70
70
  * @param app - Private app environments.
71
- * @param engine - Whether the workspace also builds scaffold's executable.
71
+ * @param axes - Optional executable, integration, and service project axes.
72
72
  * @returns The root `vite.config.ts` content.
73
73
  *
74
74
  * @example
@@ -76,7 +76,7 @@ export declare function applicationArtifacts(spec: Blueprint): readonly Artifact
76
76
  * applicationViteConfig([], ['core', 'server']).includes('appServer') // true
77
77
  * ```
78
78
  */
79
- export declare function applicationViteConfig(src: readonly Environment[], app: readonly Environment[], engine?: boolean): string;
79
+ export declare function applicationViteConfig(src: readonly Environment[], app: readonly Environment[], axes?: ViteAxes): string;
80
80
 
81
81
  /**
82
82
  * Apply a blueprint's `overrides` over a drafted artifact list — an override
@@ -195,6 +195,45 @@ export declare function auditToReview(audit: Audit): string;
195
195
  /** Tooling versions shared by scaffold and every generated workspace. */
196
196
  export declare const BASE_DEV_DEPENDENCIES: Readonly<Record<string, string>>;
197
197
 
198
+ /** The computed configuration files required by a workspace-owned executable. */
199
+ export declare const BIN_CONFIGS: readonly string[];
200
+
201
+ /**
202
+ * Build the executable's declaration-only `configs/src/tsconfig.bin.json`.
203
+ *
204
+ * @returns The executable `tsconfig` file content, newline-terminated.
205
+ *
206
+ * @example
207
+ * ```ts
208
+ * binTsconfig().includes('"outDir": "../../dist/bin"') // true
209
+ * ```
210
+ */
211
+ export declare function binTsconfig(): string;
212
+
213
+ /**
214
+ * Build the executable's `configs/src/vite.bin.config.ts` wrapper.
215
+ *
216
+ * @returns The executable Vite configuration content, newline-terminated.
217
+ *
218
+ * @example
219
+ * ```ts
220
+ * binViteConfig().includes("banner: '#!/usr/bin/env node'") // true
221
+ * ```
222
+ */
223
+ export declare function binViteConfig(): string;
224
+
225
+ /**
226
+ * Build the executable's dedicated Node-only build and test project.
227
+ *
228
+ * @returns The emitted `srcBin` project definition.
229
+ *
230
+ * @example
231
+ * ```ts
232
+ * binViteProject().includes("label: 'src:bin'") // true
233
+ * ```
234
+ */
235
+ export declare function binViteProject(): string;
236
+
198
237
  /** The closed, JSON-serializable source/application workspace spec. */
199
238
  export declare interface Blueprint {
200
239
  readonly name: string;
@@ -212,8 +251,12 @@ export declare interface Blueprint {
212
251
  readonly version: string;
213
252
  readonly engines: string;
214
253
  readonly overrides: readonly Override[];
215
- /** Structural: `true` only for a repo that ships its own `src/bin` — the self-hosting tax (a `bin` field, the `scaffold` script invoking `dist/bin/scaffold.js` directly, the `check/test/build:src:bin` scripts, `build:host`, the `srcBin` vite project) applies ONLY when `true`, never by name. */
216
- readonly engine: boolean;
254
+ /** Structural: `true` only for a repo that ships its own `src/bin` — the self-hosting tax (the manifest's `bin` entry, the `scaffold` script invoking `dist/bin/scaffold.js` directly, the `check/test/build:src:bin` scripts, `build:host`, the `srcBin` vite project) applies ONLY when `true`, never by name. */
255
+ readonly bin: boolean;
256
+ /** Structural: `true` only for a repo that ships `tests/integration` — a slow, opt-in proof project over the repo's own built output, outside the default run, never by name. */
257
+ readonly integration: boolean;
258
+ /** Structural: `true` only for a repo that ships `tests/service` — a slow, opt-in proof project against a foreign running process, outside the default run, never by name. Derivation requires `tests/setupService.ts` and `scripts/service.sh` beside it and fails `TARGET` otherwise. */
259
+ readonly service: boolean;
217
260
  }
218
261
 
219
262
  /**
@@ -224,9 +267,9 @@ export declare interface Blueprint {
224
267
  * @remarks
225
268
  * `version` / `engines` default `DEFAULT_VERSION` / `DEFAULT_ENGINES`,
226
269
  * `src` defaults `['core']`, and `app` / `keywords` / `dependencies` /
227
- * `peers` / `extras` / `overrides` default `[]`. `description` is OMITTED
228
- * entirely when absent, so the result round-trips the exact-record
229
- * `Blueprint` guard.
270
+ * `peers` / `extras` / `overrides` default `[]`, and `bin` / `integration` /
271
+ * `service` default `false`. `description` is OMITTED entirely when absent, so
272
+ * the result round-trips the exact-record `Blueprint` guard.
230
273
  * @returns A complete `Blueprint`.
231
274
  *
232
275
  * @example
@@ -280,7 +323,9 @@ export declare function blueprintShape(): ObjectShape<{
280
323
  path: StringShape;
281
324
  content: StringShape;
282
325
  }, false>>;
283
- engine: BooleanShape;
326
+ bin: BooleanShape;
327
+ integration: BooleanShape;
328
+ service: BooleanShape;
284
329
  }, false>;
285
330
 
286
331
  /**
@@ -405,7 +450,7 @@ export declare type Category = 'type' | 'alias' | 'constant' | 'factory' | 'enti
405
450
  export declare const CHECKOUT_ACTION_SHA = "de0fac2e4500dabe0009e67214ff5f5447ce83dd";
406
451
 
407
452
  /**
408
- * Build selection-aware GitHub CI without external service dependencies.
453
+ * Build selection-aware GitHub CI, provisioning the declared foreign service before its proof.
409
454
  *
410
455
  * @param spec - The workspace blueprint.
411
456
  * @returns The complete `.github/workflows/ci.yml` content.
@@ -806,21 +851,19 @@ export declare function coreViteConfig(browser?: boolean): string;
806
851
  }, false>;
807
852
 
808
853
  /**
809
- * The host-neutral devDependency baseline every generated workspace needs.
810
- * Browser providers are added only by browser selections or the scaffold
811
- * engine's generated-browser consumer proof. A package's `extras` (code-unit
812
- * sorted) merge in on top, the extras' declared range winning on a name
813
- * collision with the baseline.
854
+ * The complete development dependency set one blueprint emits. The shared
855
+ * baseline is extended by package extras, dev-installed peers, selected
856
+ * browser environments, and the bin axis's browser test provider.
814
857
  *
815
- * @param extras - The blueprint's package-specific `extras` `Dependency[]`.
858
+ * @param spec - The blueprint whose development dependencies are required.
816
859
  * @returns The merged `devDependencies` record.
817
860
  *
818
861
  * @example
819
862
  * ```ts
820
- * devDependenciesFor([])['typescript'] // '^6.0.3'
863
+ * devDependenciesFor(blueprint('router'))['typescript'] // '^6.0.3'
821
864
  * ```
822
865
  */
823
- export declare function devDependenciesFor(extras: readonly Dependency[]): Readonly<Record<string, string>>;
866
+ export declare function devDependenciesFor(spec: Blueprint): Readonly<Record<string, string>>;
824
867
 
825
868
  /**
826
869
  * Diff a plan's artifacts against a target's current content.
@@ -1085,6 +1128,18 @@ export declare function coreViteConfig(browser?: boolean): string;
1085
1128
  */
1086
1129
  export declare function guideMethods(spec: Blueprint): string;
1087
1130
 
1131
+ /**
1132
+ * Build the standalone Node-only guide-parity Vitest project.
1133
+ *
1134
+ * @returns The emitted `guides` project definition.
1135
+ *
1136
+ * @example
1137
+ * ```ts
1138
+ * guidesViteProject().includes("label: 'guides'") // true
1139
+ * ```
1140
+ */
1141
+ export declare function guidesViteProject(): string;
1142
+
1088
1143
  /**
1089
1144
  * One dependency guide fetched from upstream at its `path`, plus its
1090
1145
  * `freshness` verdict against the local mirror.
@@ -1189,7 +1244,7 @@ export declare function coreViteConfig(browser?: boolean): string;
1189
1244
  * `scripts/codex.sh` / `scripts/ollama.sh`), the repository coding-law policy module,
1190
1245
  * the line's seven byte-identical root dotfiles, and the two guides-grouped
1191
1246
  * mirror candidates: the line-wide dev-tooling guide
1192
- * (`guides/src/guide.md`) and the scaffold engine's own self-guide
1247
+ * (`guides/src/guide.md`) and the scaffold bin's own self-guide
1193
1248
  * (`guides/src/scaffold.md`). `stageHost` vendors both; each plan carries the
1194
1249
  * subset selected by `selectHostPaths`, omitting the target blueprint's own
1195
1250
  * guide.
@@ -1245,6 +1300,21 @@ export declare function coreViteConfig(browser?: boolean): string;
1245
1300
  */
1246
1301
  export declare function inferGroup(path: string): Group;
1247
1302
 
1303
+ /**
1304
+ * Build the standalone Node-only installed-consumer integration proof project.
1305
+ *
1306
+ * @param axes - Optional executable and integration axes controlling the shared registry setup.
1307
+ * @returns The emitted `integration` project definition.
1308
+ *
1309
+ * @example
1310
+ * ```ts
1311
+ * integrationViteProject({ bin: true, integration: true }).includes(
1312
+ * "globalSetup: ['./tests/setupIntegration.ts']",
1313
+ * ) // true
1314
+ * ```
1315
+ */
1316
+ export declare function integrationViteProject(axes?: ViteAxes): string;
1317
+
1248
1318
  /** Visible characters forbidden by portable paths and Markdown path cells. */
1249
1319
  export declare const INVALID_PATH_CHARACTER_PATTERN: RegExp;
1250
1320
 
@@ -1953,7 +2023,9 @@ export declare function coreViteConfig(browser?: boolean): string;
1953
2023
  path: StringShape;
1954
2024
  content: StringShape;
1955
2025
  }, false>>;
1956
- engine: BooleanShape;
2026
+ bin: BooleanShape;
2027
+ integration: BooleanShape;
2028
+ service: BooleanShape;
1957
2029
  }, false>;
1958
2030
  groups: ArrayShape<LiteralShape<readonly Group[]>>;
1959
2031
  artifacts: ArrayShape<UnionShape<readonly [ ObjectShape<{
@@ -2016,7 +2088,16 @@ export declare function coreViteConfig(browser?: boolean): string;
2016
2088
  */
2017
2089
  export declare function planToSummary(plan: Plan): PlanSummary;
2018
2090
 
2019
- /** Build the dedicated Node-only repository policy Vitest project. */
2091
+ /**
2092
+ * Build the dedicated standalone Node-only repository-policy Vitest project.
2093
+ *
2094
+ * @returns The emitted `policy` project definition.
2095
+ *
2096
+ * @example
2097
+ * ```ts
2098
+ * policyViteProject().includes("label: 'policy'") // true
2099
+ * ```
2100
+ */
2020
2101
  export declare function policyViteProject(): string;
2021
2102
 
2022
2103
  /**
@@ -2110,6 +2191,22 @@ export declare function coreViteConfig(browser?: boolean): string;
2110
2191
  */
2111
2192
  export declare function renderValue(entry: unknown, indent: string, prefix: string, suffix: string): string;
2112
2193
 
2194
+ /**
2195
+ * Render the root Vitest project registration, preserving browser ownership
2196
+ * supplied by the caller.
2197
+ *
2198
+ * @param registrations - Ordered project factory identifiers with optional browser labels.
2199
+ * @param browser - Whether the generated configuration carries browser machinery.
2200
+ * @returns The rendered root `test` property.
2201
+ *
2202
+ * @example
2203
+ * ```ts
2204
+ * renderViteTest([{ project: 'srcCore' }], false)
2205
+ * // '\ttest: {\n\t\tprojects: [srcCore],\n\t},'
2206
+ * ```
2207
+ */
2208
+ export declare function renderViteTest(registrations: readonly ViteProjectRegistration[], browser: boolean): string;
2209
+
2113
2210
  /**
2114
2211
  * The root `tsconfig.json` — one `@src/<environment>` path alias per declared
2115
2212
  * environment, in declared order.
@@ -2128,7 +2225,8 @@ export declare function coreViteConfig(browser?: boolean): string;
2128
2225
  /**
2129
2226
  * The root `vite.config.ts` — three grounded shapes, chosen by a blueprint's
2130
2227
  * `src`:
2131
- * 1. `core`-only — `srcCore` + `guides`, no Playwright at all (the live
2228
+ * 1. `core`-only — `srcCore` + standalone policy/guides proof projects, no
2229
+ * Playwright at all (the live
2132
2230
  * timeout exemplar: no browser project exists anywhere in the file).
2133
2231
  * 2. Multi-environment (2+ src, always including `core` per the live
2134
2232
  * middleware/router exemplars) — `srcCore` is the shared base;
@@ -2143,10 +2241,9 @@ export declare function coreViteConfig(browser?: boolean): string;
2143
2241
  * environment is `browser` (it must run its own tests in a real browser).
2144
2242
  *
2145
2243
  * @param src - The declared `Environment[]`.
2146
- * @param engine - Structural: `true` appends the `srcBin` project (an
2147
- * executable build target, never a barrel) after the other declared
2148
- * projects the self-hosting tax, grounded against this very repo's own
2149
- * checked-in `vite.config.ts`.
2244
+ * @param axes - Optional structural project axes. `bin` appends the standalone
2245
+ * executable build-and-test project; `integration` and `service` append their
2246
+ * standalone proof projects.
2150
2247
  * @returns The root `vite.config.ts` file content, newline-terminated.
2151
2248
  *
2152
2249
  * @example
@@ -2154,10 +2251,10 @@ export declare function coreViteConfig(browser?: boolean): string;
2154
2251
  * rootViteConfig(['core']).includes('srcCore') // true
2155
2252
  * ```
2156
2253
  */
2157
- export declare function rootViteConfig(src: readonly Environment[], engine?: boolean): string;
2254
+ export declare function rootViteConfig(src: readonly Environment[], axes?: ViteAxes): string;
2158
2255
 
2159
2256
  /** The devDependency range generated packages pin `@orkestrel/scaffold` at. */
2160
- export declare const SCAFFOLD_RANGE = "^0.0.6";
2257
+ export declare const SCAFFOLD_RANGE = "^0.0.8";
2161
2258
 
2162
2259
  /**
2163
2260
  * Carries a `ScaffoldErrorCode` + optional `context` (AGENTS §12).
@@ -2229,6 +2326,21 @@ export declare function coreViteConfig(browser?: boolean): string;
2229
2326
  */
2230
2327
  export declare function serializeTypeScriptString(value: string): string;
2231
2328
 
2329
+ /** The consumer-owned live-service provisioner expected only by service workspaces. */
2330
+ export declare const SERVICE_SCRIPT_PATH = "scripts/service.sh";
2331
+
2332
+ /**
2333
+ * Build the standalone Node-only live-service proof project.
2334
+ *
2335
+ * @returns The emitted `service` project definition.
2336
+ *
2337
+ * @example
2338
+ * ```ts
2339
+ * serviceViteProject().includes("label: 'service'") // true
2340
+ * ```
2341
+ */
2342
+ export declare function serviceViteProject(): string;
2343
+
2232
2344
  /** Immutable official actions/setup-node v6.4.0 commit used by generated CI. */
2233
2345
  export declare const SETUP_NODE_ACTION_SHA = "48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e";
2234
2346
 
@@ -2236,9 +2348,12 @@ export declare function coreViteConfig(browser?: boolean): string;
2236
2348
  * The single non-`core` environment's factory IS the base (Shape 3 of
2237
2349
  * `rootViteConfig`) — the environment's own `viteHeader` (Playwright only when
2238
2350
  * `environment === 'browser'`, per the live sqlite/indexeddb exemplars) prefixes
2239
- * the environment-specific `srcBrowser` / `srcServer` + `guides` projects export.
2351
+ * the environment-specific `srcBrowser` / `srcServer` project, followed by the
2352
+ * standalone policy and guides proof projects and any selected structural-axis
2353
+ * projects.
2240
2354
  *
2241
2355
  * @param environment - The sole declared non-`core` environment.
2356
+ * @param axes - Optional executable, integration, and service project axes.
2242
2357
  * @returns The root `vite.config.ts` file content for a single non-`core` environment, newline-terminated.
2243
2358
  *
2244
2359
  * @example
@@ -2246,7 +2361,7 @@ export declare function coreViteConfig(browser?: boolean): string;
2246
2361
  * singleSrcViteConfig('server').includes('srcServer') // true
2247
2362
  * ```
2248
2363
  */
2249
- export declare function singleSrcViteConfig(environment: 'browser' | 'server'): string;
2364
+ export declare function singleSrcViteConfig(environment: 'browser' | 'server', axes?: ViteAxes): string;
2250
2365
 
2251
2366
  /** Exact lowercase hexadecimal target bytes keyed by artifact-relative path. */
2252
2367
  export declare type Snapshot = Readonly<Record<string, string>>;
@@ -2608,6 +2723,13 @@ export declare function coreViteConfig(browser?: boolean): string;
2608
2723
  readonly note?: string;
2609
2724
  }
2610
2725
 
2726
+ /** Optional structural projects appended to a generated root Vite configuration. */
2727
+ export declare interface ViteAxes {
2728
+ readonly bin?: boolean;
2729
+ readonly integration?: boolean;
2730
+ readonly service?: boolean;
2731
+ }
2732
+
2611
2733
  /**
2612
2734
  * The rendered import / `resolve` header block every `rootViteConfig` shape
2613
2735
  * prefixes — the environment boundary and every guarantee it enforces ship
@@ -2661,7 +2783,7 @@ export declare function coreViteConfig(browser?: boolean): string;
2661
2783
  *
2662
2784
  * @param src - The declared published `Environment[]`.
2663
2785
  * @param app - The declared application `Environment[]`, defaulting to none.
2664
- * @param engine - Whether the workspace also builds its own executable.
2786
+ * @param bin - Whether the workspace also builds its own executable.
2665
2787
  * @returns The machinery set the generated header renders.
2666
2788
  *
2667
2789
  * @example
@@ -2670,6 +2792,42 @@ export declare function coreViteConfig(browser?: boolean): string;
2670
2792
  * viteMachinery([], ['core']) // { browser: false, vue: false, output: false }
2671
2793
  * ```
2672
2794
  */
2673
- export declare function viteMachinery(src: readonly Environment[], app?: readonly Environment[], engine?: boolean): ViteMachinery;
2795
+ export declare function viteMachinery(src: readonly Environment[], app?: readonly Environment[], bin?: boolean): ViteMachinery;
2796
+
2797
+ /**
2798
+ * Render the one ordered proof and structural-axis project definition block.
2799
+ *
2800
+ * @param axes - Optional executable, integration, and service project axes.
2801
+ * @returns Policy, guides, then selected axis project definitions, separated by one blank line.
2802
+ *
2803
+ * @example
2804
+ * ```ts
2805
+ * viteProjectDefinitions({ bin: true }).includes('export const srcBin =') // true
2806
+ * ```
2807
+ */
2808
+ export declare function viteProjectDefinitions(axes?: ViteAxes): string;
2809
+
2810
+ /** One generated Vitest project factory and its optional browser-project label. */
2811
+ export declare interface ViteProjectRegistration {
2812
+ readonly project: string;
2813
+ readonly browser?: string;
2814
+ }
2815
+
2816
+ /**
2817
+ * Derive the one ordered Vitest project registration list shared by every
2818
+ * generated root configuration shape.
2819
+ *
2820
+ * @param src - The declared published environments.
2821
+ * @param app - The declared application environments.
2822
+ * @param axes - Optional executable, integration, and service project axes.
2823
+ * @returns Source projects, application projects, proof projects, then optional axis projects.
2824
+ *
2825
+ * @example
2826
+ * ```ts
2827
+ * viteProjectRegistrations(['core'], [], { integration: true })
2828
+ * // [{ project: 'srcCore' }, { project: 'policy' }, { project: 'guides' }, { project: 'integration' }]
2829
+ * ```
2830
+ */
2831
+ export declare function viteProjectRegistrations(src: readonly Environment[], app?: readonly Environment[], axes?: ViteAxes): readonly ViteProjectRegistration[];
2674
2832
 
2675
2833
  export { }