@orkestrel/scaffold 0.0.64 → 0.0.66

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.
@@ -977,7 +977,7 @@
977
977
  },
978
978
  {
979
979
  "type": "command",
980
- "command": "\"$CLAUDE_PROJECT_DIR\"/scripts/ollama.sh",
980
+ "command": "if [ \"${CLAUDE_CODE_REMOTE:-}\" = \"true\" ]; then \"$CLAUDE_PROJECT_DIR\"/scripts/ollama.sh; fi",
981
981
  "timeout": 600
982
982
  },
983
983
  {
@@ -1,25 +1,26 @@
1
1
  ---
2
2
  name: enterprise-bootstrap
3
3
  description: >-
4
- Design and build distinctive, production-grade user interfaces with Bootstrap
5
- 5.3 and intentional frontend craft, in any host project and on any stack. Use
6
- for Bootstrap user-interface work — creating, restyling, or
4
+ Design and build distinctive, production-grade UI with Bootstrap 5.3 on any
5
+ stack. Use for any Bootstrap interface work — creating, restyling, or
7
6
  extending pages, screens, components, layouts, app shells, dashboards, admin
8
7
  panels, SaaS tools, data tables, filter bars, forms, wizards, navigation,
9
8
  modals, empty/loading/error states, dark mode, marketing surfaces — whenever
10
9
  the task touches HTML/CSS/visual design, mentions Bootstrap or its components,
11
- or must look professional and avoid templated defaults. Covers aesthetics,
12
- typography, color modes, design tokens, accessibility (WCAG 2.2 AA),
13
- responsive layout, and enterprise app patterns. The `orkestrel-polish-surface`
14
- skill owns a requested verdict, round, or campaign over a surface that already
15
- renders, including a review that changes nothing. In that campaign's fix
16
- units, use this skill for Bootstrap craft.
10
+ asks for visual hierarchy, polish, a design system, or spacing/type/color
11
+ scales, or must look professional rather than like stock Bootstrap. Covers
12
+ aesthetics, typography, color modes, design tokens, elevation, finishing
13
+ details, accessibility (WCAG 2.2 AA), responsive layout, and enterprise app
14
+ patterns. The `orkestrel-polish-surface` skill owns a requested verdict,
15
+ round, or campaign over a surface that already renders, including a review
16
+ that changes nothing; in that campaign's fix units, use this skill for
17
+ Bootstrap craft.
17
18
  ---
18
19
 
19
20
  # Load the canonical workflow
20
21
 
21
22
  Read `.agents/skills/enterprise-bootstrap/SKILL.md` completely, then read every
22
- reference layer it names for the work in hand. Follow that canonical package before acting.
23
+ reference layer it names for the work in hand. Follow that canonical skill before acting.
23
24
 
24
25
  This bridge contains no independent process. `AGENTS.md`, applicable rules, the
25
26
  canonical skill, and the governing guide/spec remain authoritative in that order.
@@ -33,7 +33,7 @@ print. Limits states what that leaves unproven and what covers it instead.
33
33
  npm install --save-dev @orkestrel/scaffold
34
34
  ```
35
35
 
36
- The executable needs Node 22.12 or later. Run it through `npx` without installing:
36
+ The executable needs Node 22.18.0 or later. Run it through `npx` without installing:
37
37
 
38
38
  ```sh
39
39
  npx @orkestrel/scaffold --help
@@ -149,13 +149,14 @@ Exported from `@orkestrel/scaffold`, and reachable from
149
149
  | `MAX_TOTAL_ARTIFACT_BYTES` | const | Caps the bytes retained across one whole plan or audit. |
150
150
  | `MAX_TOTAL_REGISTRY_BYTES` | const | Caps the decoded bytes accepted across one registry-reading call. |
151
151
  | `MINIMUM_NODE_VERSION` | const | Names the oldest Node version the generated toolchain supports. |
152
+ | `MINIMUM_NPM_VERSION` | const | Names the oldest npm version the generated toolchain supports. |
152
153
  | `NAME_PATTERN` | const | Matches the bare workspace name syntax: lowercase alphanumeric with hyphens, letter first. |
153
154
  | `ORCHESTRATION_PATH_NAMES` | const | Lists the exact root paths that wire an agent bench or own an orchestration directory, frozen. |
154
155
  | `ORCHESTRATION_PATH_PREFIXES` | const | Lists the path prefixes whose contents instruct or wire an agent, frozen. |
155
156
  | `ORKESTREL_RANGE_PATTERN` | const | Matches the exact caret-pinned pre-1.0 range accepted for an `@orkestrel/*` runtime dependency. |
156
157
  | `PRINT_WIDTH` | const | Caps the columns one emitted line may occupy, matching `printWidth` in `.oxfmtrc.json`. |
157
158
  | `RELEASE_PROOF_COMMAND` | const | Names the `prepublishOnly` row that runs the packed-package proof against a real registry. |
158
- | `SERVICE_SCRIPT_PATH` | const | Names the provisioner skeleton a workspace with declared service vendors is given once. |
159
+ | `SERVICE_SCRIPT_PATH` | const | Names the inventory skeleton a workspace with declared service vendors is given once. |
159
160
  | `SERVICE_SETUP_PATH` | const | Names the live-service readiness module whose presence makes a workspace `service`. |
160
161
  | `SERVICE_TEST_INCLUDE` | const | Names the include the live-service project covers, which is a directory rather than one proof. |
161
162
  | `SHOWCASE_CONFIG_PATH` | const | Names the Vite wrapper whose presence makes a workspace `showcase`. |
@@ -164,6 +165,7 @@ Exported from `@orkestrel/scaffold`, and reachable from
164
165
  | `SRC_MATRIX` | const | Holds the build and export settings each published `src` environment contributes, frozen. |
165
166
  | `TAB_WIDTH` | const | Sets the columns one tab occupies when the formatter measures a line, matching `tabWidth`. |
166
167
  | `VERSION_PATTERN` | const | Matches the exact `major.minor.patch` version syntax a blueprint declares. |
168
+ | `WORKSPACE_DEV_ENGINES` | const | Holds the `devEngines` record every generated manifest carries. |
167
169
  | `WORKSPACE_OWNED_PATHS` | const | Lists the vendored paths whose present bytes belong to each workspace, frozen. |
168
170
 
169
171
  #### Guards
@@ -565,9 +567,10 @@ other structural facts do not need creation flags. Add a root `tests/setup*.test
565
567
  `setup`, `tests/guides.test.ts` for `guides`, `tests/integration.test.ts` for `integration`,
566
568
  `tests/conformance.test.ts` for `conformance`, `tests/setupService.ts` for `service`,
567
569
  `tests/setupGlobal.ts` for `global`, and `configs/app/vite.showcase.config.ts` for `showcase`;
568
- reading verbs detect each exact-case file and register its fixed machinery. Add `scripts/service.sh`
569
- for `vendors`. Reading verbs preserve and protect that birth-owned script, but do not infer its
570
- vendor list from edited text.
570
+ reading verbs detect each exact-case file and register its fixed machinery. An explicitly supplied
571
+ plan with `vendors` owns and protects the birth-owned `scripts/service.sh` inventory skeleton.
572
+ Reading verbs do not infer its vendor list from edited text and cannot preserve an arbitrary present
573
+ script on that basis.
571
574
 
572
575
  `distribution` is not on that list. Publishing at least one `src` environment is its whole
573
576
  condition, and scaffold writes `tests/distribution.test.ts` itself rather than waiting for you to.
@@ -586,10 +589,10 @@ and `configs/app/vite.showcase.config.ts` selects `showcase`. A containing direc
586
589
  the fact by itself. `tests/distribution.test.ts` selects nothing: the published `src` axis the
587
590
  target ships already decides the `distribution` project, and the file is planned from that.
588
591
 
589
- `vendors` is not reconstructed. Its only artifact, `scripts/service.sh`, is birth-owned, so edited
590
- script text is not a trustworthy declaration of a vendor list. A present script remains in the
591
- target and remains protected from deletion through the owned scripts inventory, but a reading verb
592
- does not infer vendors from it.
592
+ `vendors` is not reconstructed. Its artifact, `scripts/service.sh`, is a birth-owned inventory
593
+ skeleton rather than a working installer, so edited script text is not a trustworthy declaration of
594
+ a vendor list. A target-reading verb derives no vendor list from a present script. Only an
595
+ explicitly supplied plan with `vendors` owns that birth artifact.
593
596
 
594
597
  That is why the live-service project follows `service` rather than `vendors`. A reading verb has to
595
598
  plan the project before it can say anything about a target that runs one, and a vendor list it
@@ -774,7 +777,7 @@ const blueprint = createBlueprint('router', {
774
777
  })
775
778
 
776
779
  blueprint.version // '0.0.1'
777
- blueprint.engines // '>=22.12.0'
780
+ blueprint.engines // '>=22.18.0'
778
781
  ```
779
782
 
780
783
  `src` selects published library environments and `app` selects private application environments.
@@ -846,12 +849,13 @@ is the one proof scaffold generates from the workspace's own shape.
846
849
 
847
850
  `service` says the workspace runs a live-service Vitest project over `tests/service`, and it alone
848
851
  registers that project, its `test:service` script, and the `tests/setupService.ts` readiness module
849
- the project names. A publishing workspace invokes it from `prepublishOnly`; a `private: true`
850
- workspace invokes it from `test`, which is the only gate it has. Its longer timeouts and disabled
851
- file parallelism are the same in both. `vendors` names each external service the workspace drives
852
- and emits `scripts/service.sh`, the provisioner that starts them. Neither is derivable from the
853
- other: a workspace may declare vendors before it writes a suite, and a suite may drive a service the
854
- skeleton does not start.
852
+ the project names. The caller prepares the external service before it invokes the project, and the
853
+ setup module verifies readiness. A publishing workspace invokes the project from `prepublishOnly`;
854
+ a `private: true` workspace invokes it from `test`, which is the only gate it has. Its longer
855
+ timeouts and disabled file parallelism are the same in each workspace form. `vendors` names each external service the
856
+ workspace drives and emits `scripts/service.sh`, an inventory skeleton that starts nothing. The
857
+ vendor inventory and live-service setup are independent: a workspace may declare vendors before it
858
+ writes a suite, and a suite may drive a service the skeleton does not start.
855
859
 
856
860
  `integration` projects a cross-environment composition proof for any workspace, independently of
857
861
  whether it has a published `src`. Its generated seed imports every selected `src` and `app`
@@ -901,7 +905,7 @@ one that answers it. So `new` refuses on any question, blocking or not, before i
901
905
  `audit` and `repair` carry the same questions through, because a target that already has that shape
902
906
  still has to be described and restored.
903
907
 
904
- A library caller creating a fresh workspace applies `new`'s rule itself:
908
+ A library caller creating a fresh workspace itself applies the rule the `new` command follows:
905
909
 
906
910
  ```ts
907
911
  import { Compiler, createBlueprint } from '@orkestrel/scaffold'
@@ -1059,8 +1063,9 @@ after a write it prints `next: npm run format`.
1059
1063
 
1060
1064
  Scaffold owns the `scripts` directory. An audit for the orchestration group reports every unplanned
1061
1065
  member as foreign. `overwrite` deletes an unplanned tracked member only when the tree is clean, its
1062
- observed bytes still match, and the path is not protected. A planned birth-owned
1063
- `scripts/service.sh` survives that deletion pass.
1066
+ observed bytes still match, and the path is not protected. An unplanned tracked
1067
+ `scripts/service.sh` is retired on that basis. An explicitly planned birth-owned script survives
1068
+ that deletion pass.
1064
1069
 
1065
1070
  `tests/distribution.test.ts` is the one proof scaffold generates, and the one test artifact it
1066
1071
  claims by presence. Generation is the line, not writing: scaffold writes the vendored
@@ -1252,11 +1257,30 @@ licence, the harness permission file, the scaffold-owned `scripts` directory, th
1252
1257
  shared policy register, the shared policy proof, the shared policy plugin, the shared configuration
1253
1258
  leaf and its proof, the byte-identical root dotfiles, and the guide mirrors a generated workspace
1254
1259
  starts from. It is a candidate list rather than a plan, because a workspace never mirrors its own
1255
- guide. The session-start hooks inside `scripts` split by job:
1256
- the bench probe reports whether a bench CLI resolves, and the dependency hook installs the
1257
- lockfile's closure in a remote session. What wires a bench stays in the canon, and a session reads
1260
+ guide. The session-start hooks inside `scripts` split by job. The bench probe reports whether a
1261
+ bench CLI resolves, and the dependency hook installs the lockfile's closure in a remote session.
1262
+ The Ollama hook invokes `scripts/ollama.sh` only when `CLAUDE_CODE_REMOTE=true`; direct invocation
1263
+ remains available for live-service setup. What wires a bench stays in the canon, and a session reads
1258
1264
  it at its primary root.
1259
1265
 
1266
+ `scripts/ollama.sh` defaults to `http://127.0.0.1:11434` and `qwen3.5:2b-q4_K_M`. It requires Node
1267
+ for native URL and JSON handling and curl for the HTTP protocol. The script accepts an HTTP or HTTPS
1268
+ origin without credentials, path, query, or fragment. It reuses any reachable daemon without
1269
+ requiring a local Ollama executable. It inspects the selected model through `/api/show`, pulls only
1270
+ after a `404` absence response, and warms the model through a completed non-streaming `/api/chat`
1271
+ request with a 30-minute keep-alive. Version readiness, pull completion, and warm completion each
1272
+ require a `2xx` HTTP status; redirects and error statuses fail even when their bodies report
1273
+ completion.
1274
+
1275
+ When an HTTP loopback endpoint is unreachable, the script may start an installed Ollama executable
1276
+ in an owned POSIX process group. A failure sends that owned group `TERM`, then sends `KILL` if it
1277
+ does not stop within 5 seconds; a reused daemon remains untouched. Direct reuse works from Git Bash on Windows, but local startup there fails because Bash
1278
+ cannot safely terminate the Windows process tree. Automatic installation is limited to Linux cloud
1279
+ or CI automation. The official installer download follows only HTTPS redirects, must be nonempty,
1280
+ and runs within the remaining setup deadline. The installer may require root or `sudo`, and its own
1281
+ platform prerequisites remain authoritative. The full setup deadline is 590 seconds, including a
1282
+ 60-second local startup allowance, within the hook's 600-second timeout.
1283
+
1260
1284
  `CANON_PATHS` is the instruction canon, staged for reading instead: the `AGENTS.md` coding contract,
1261
1285
  the `CLAUDE.md` harness bridge, the `.agents/orchestration.md` agent-operation contract, the rules
1262
1286
  under `.claude/rules/` and `.cursor/rules/`, the skills under `.agents/skills/` and `.claude/skills/`,
@@ -1424,6 +1448,23 @@ except the manifest.
1424
1448
  - One host artifact per vendored path the workspace selects. A vendored directory is one planned
1425
1449
  path that expands into the files the data root stores beneath it.
1426
1450
 
1451
+ Every generated manifest declares the toolchain it is gated on. The `engines.node` field carries
1452
+ the blueprint's `engines` value, which defaults to the `>=22.18.0` range. The
1453
+ `devEngines.packageManager` record names npm at the `>=11.6.0` range with its `onFail` key set to
1454
+ the `error` value, and no blueprint field varies that record. An npm at 10.9.0 or later reads that
1455
+ record. Such an npm earlier than 11.6.0 refuses the `npm install` command in a generated workspace
1456
+ with the `EBADDEVENGINES` code, before resolving the dependency graph.
1457
+ npm 10.9.7 refuses an `npm run` command in such a workspace with the same code. The releases
1458
+ measured earlier than 10.9.0, npm 10.5.0 and npm 10.8.3, ignore the record and fail inside
1459
+ dependency resolution instead. Every Node release at 22.18.0 or later bundles an npm at 10.9.0 or
1460
+ later. A generated workspace on Node 22.18.0 or later therefore meets an npm that ignores the record
1461
+ only under an npm other than the bundled one. Run a generated workspace on npm 11.6.0 or later:
1462
+ every release from 10.9.0 up to 11.6.0 refuses it, and 11.6.0 installs it. Read the ambient
1463
+ version with the `npm --version` command. Raise it with the `npm install --global npm@11.6.0`
1464
+ command before the first install; that command installs an npm that reports
1465
+ 11.6.0. The npm readings come from a Linux host on Node 22.22.2, on 2026-09-13, and the bundled
1466
+ versions come from the Node release index read that day.
1467
+
1427
1468
  A workspace publishing a `src` environment rolls each published face's declarations up from that
1428
1469
  face's own Vite config. The seeded config calls `declarationRollup` from the vendored
1429
1470
  `configs/helpers.ts`, which runs the workspace's own compiler as a command —
@@ -28,7 +28,7 @@
28
28
  "storage": "agents/skills/enterprise-bootstrap/SKILL.md",
29
29
  "destination": ".agents/skills/enterprise-bootstrap/SKILL.md",
30
30
  "executable": false,
31
- "digest": "6ed9e288539cbe7a7fbd25b13cf759ecedd72101189e0317fbabf82d1aa1aef4"
31
+ "digest": "fd2f390a4b3cc40bd2ca62a726e33a96132269fc3c4d466f948c36b7d0173cbe"
32
32
  },
33
33
  {
34
34
  "storage": "agents/skills/enterprise-bootstrap/agents/openai.yaml",
@@ -40,37 +40,49 @@
40
40
  "storage": "agents/skills/enterprise-bootstrap/references/bootstrap-reference.md",
41
41
  "destination": ".agents/skills/enterprise-bootstrap/references/bootstrap-reference.md",
42
42
  "executable": false,
43
- "digest": "98379b5905cba4cc3725df7ddd8fd9ec19dce75ff89e68499b20ac27c53478c7"
43
+ "digest": "0406dbdf44881b9e33e27c9ead6d9ae67ab6a226e5ff7ec6e71cf07b53e5083c"
44
+ },
45
+ {
46
+ "storage": "agents/skills/enterprise-bootstrap/references/color-modes.md",
47
+ "destination": ".agents/skills/enterprise-bootstrap/references/color-modes.md",
48
+ "executable": false,
49
+ "digest": "4a7d30374e60add9207a87197c65c576dd0e0ee52ab97064597b6b31af2bc34e"
44
50
  },
45
51
  {
46
52
  "storage": "agents/skills/enterprise-bootstrap/references/components.md",
47
53
  "destination": ".agents/skills/enterprise-bootstrap/references/components.md",
48
54
  "executable": false,
49
- "digest": "252de08e786aa41834f13df4d115e33b3c56d897ccea00b95ed4912da62fbd89"
55
+ "digest": "2fde6b3dc9e168461192b01183f194aca61974b27721ca406ba684da295833e4"
50
56
  },
51
57
  {
52
58
  "storage": "agents/skills/enterprise-bootstrap/references/frontend-design.md",
53
59
  "destination": ".agents/skills/enterprise-bootstrap/references/frontend-design.md",
54
60
  "executable": false,
55
- "digest": "8ce1985267316610f4b68582cc993fa2d3f3a504e3e7f2c35e9d9d0e982891a1"
61
+ "digest": "758a87d744e632d0789f6b7175f5eb7496961640dc80886eaa70e28e7e4f2bca"
56
62
  },
57
63
  {
58
64
  "storage": "agents/skills/enterprise-bootstrap/references/inputs.md",
59
65
  "destination": ".agents/skills/enterprise-bootstrap/references/inputs.md",
60
66
  "executable": false,
61
- "digest": "17fb8a977d34a0ef25f5155ac6459e805cc4f691d819995eb85838dca6c8fa46"
67
+ "digest": "ec68bd122f83b186aaeebcfeea80ee745c143aeefde2f4d7e1b72d710b48dd61"
62
68
  },
63
69
  {
64
70
  "storage": "agents/skills/enterprise-bootstrap/references/inspection.md",
65
71
  "destination": ".agents/skills/enterprise-bootstrap/references/inspection.md",
66
72
  "executable": false,
67
- "digest": "48b202e331c17a26f8262b30095898e6d147906847a74d3779907c0aad4de43b"
73
+ "digest": "c2c7ed7027c8208b0ffa255abc8ca245c2ae534b5b4f311a9fe03e1e842c6f32"
74
+ },
75
+ {
76
+ "storage": "agents/skills/enterprise-bootstrap/references/responsive-layout.md",
77
+ "destination": ".agents/skills/enterprise-bootstrap/references/responsive-layout.md",
78
+ "executable": false,
79
+ "digest": "44e709e8df187495e6343048891ca9ff1ff9d3f30d86e00ad8cbd97c8e29bf20"
68
80
  },
69
81
  {
70
82
  "storage": "agents/skills/enterprise-bootstrap/references/utilities.md",
71
83
  "destination": ".agents/skills/enterprise-bootstrap/references/utilities.md",
72
84
  "executable": false,
73
- "digest": "0601721056882a7d45bfaa9ca0a03aa39e1259876f16546d4bf19b4b9496e023"
85
+ "digest": "8cec05a193672bc543439a3aa46cf7b4ffc5573527b3fe047ad575fbe73f4a2c"
74
86
  },
75
87
  {
76
88
  "storage": "agents/skills/orkestrel-align-packages/SKILL.md",
@@ -340,7 +352,7 @@
340
352
  "storage": "claude/agents/orkestrel.md",
341
353
  "destination": ".claude/agents/orkestrel.md",
342
354
  "executable": false,
343
- "digest": "b6c285b9923947460066ebc08f5778891ae2eac14800f40cdbcc53a63875554a"
355
+ "digest": "a1938acb42922f35b63413ecc04a7721f7c22466b9e201e830f3ec80532333fc"
344
356
  },
345
357
  {
346
358
  "storage": "claude/agents/planner.md",
@@ -448,7 +460,7 @@
448
460
  "storage": "claude/rules/workspace.md",
449
461
  "destination": ".claude/rules/workspace.md",
450
462
  "executable": false,
451
- "digest": "5e69fa5bb2b439c640d1d73204418309d310a9de5a28212b8756de09f4af5d2d"
463
+ "digest": "5fbf4f0e9803ef1e4cbaa12a2cfb896cec1188f9c2fc3e020b93923319c91b2f"
452
464
  },
453
465
  {
454
466
  "storage": "claude/rules/writing.md",
@@ -460,13 +472,13 @@
460
472
  "storage": "claude/settings.json",
461
473
  "destination": ".claude/settings.json",
462
474
  "executable": false,
463
- "digest": "c5c379bf5001754d11b94e692f7624e0a59c7e4b2b2072569b115c3723c24ee7"
475
+ "digest": "52c5aafe0f3a891a909a5ce26ad761abb38f2ab931f084f5ca147abb7680c419"
464
476
  },
465
477
  {
466
478
  "storage": "claude/skills/enterprise-bootstrap/SKILL.md",
467
479
  "destination": ".claude/skills/enterprise-bootstrap/SKILL.md",
468
480
  "executable": false,
469
- "digest": "1e2c83abb2a7c6a2e41dc210202d25124f6a30cfdc1bbd44d6b9c59dded6d93f"
481
+ "digest": "c8ae2dbc8337238899334cd205afe3617ef64298ac39c043b8cd3fe0885103f2"
470
482
  },
471
483
  {
472
484
  "storage": "claude/skills/orkestrel-align-packages/SKILL.md",
@@ -682,7 +694,7 @@
682
694
  "storage": "guides/scaffold.md",
683
695
  "destination": "guides/scaffold.md",
684
696
  "executable": false,
685
- "digest": "660f6f9443c16252ad92afb0c78802908c5d2ded69a461a8e83bb12c71ea43db"
697
+ "digest": "3f26b6d6649a7fb5882c02d674c5c10386706e87a5305b863a0d2028a2bf5043"
686
698
  },
687
699
  {
688
700
  "storage": "scripts/codex.sh",
@@ -706,7 +718,7 @@
706
718
  "storage": "scripts/ollama.sh",
707
719
  "destination": "scripts/ollama.sh",
708
720
  "executable": true,
709
- "digest": "666979b75f02c7f550c3acc74a02b67594407b887e6a8b90f0ba38a0d79bec07"
721
+ "digest": "be5cb42991792190d7f61c7b8eef568eaf207db67cce5d2ccc223af814f2d6fa"
710
722
  },
711
723
  {
712
724
  "storage": "tests/config.test.ts",
@@ -773,5 +785,5 @@
773
785
  ".cursor/rules",
774
786
  "scripts"
775
787
  ],
776
- "digest": "0327bc72ce35efe56b959fea41d06a8334b9c9fd318b6ea005efd46b8ef0fd46"
788
+ "digest": "50fad5d60acc60ca69beacdee573bd99cccb9ab1fc31462ece80bea1c1c53ff4"
777
789
  }