@orkestrel/scaffold 0.0.108 → 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.
Files changed (157) hide show
  1. package/dist/agents/skills/orkestrel-dispatch/scripts/bench.js +326 -91
  2. package/dist/agents/skills/orkestrel-dispatch/scripts/brief.js +110 -14
  3. package/dist/agents/skills/orkestrel-dispatch/scripts/chain.js +280 -0
  4. package/dist/agents/skills/orkestrel-dispatch/scripts/cite.js +188 -26
  5. package/dist/agents/skills/orkestrel-dispatch/scripts/launch.js +142 -43
  6. package/dist/agents/skills/orkestrel-dispatch/scripts/login.js +240 -62
  7. package/dist/agents/skills/orkestrel-dispatch/scripts/patch.js +323 -0
  8. package/dist/agents/skills/orkestrel-dispatch/scripts/result.js +169 -32
  9. package/dist/agents/skills/orkestrel-dispatch/scripts/sweep.js +290 -69
  10. package/dist/agents/skills/orkestrel-falsify/scripts/mutate.js +560 -0
  11. package/dist/agents/skills/orkestrel-harden/scripts/discovery.js +1052 -205
  12. package/dist/agents/skills/orkestrel-harden/scripts/measure.js +361 -0
  13. package/dist/agents/skills/orkestrel-harden/scripts/titles.js +455 -80
  14. package/dist/agents/skills/orkestrel-parallel/scripts/cases.js +327 -0
  15. package/dist/agents/skills/orkestrel-publish/scripts/compare.js +298 -51
  16. package/dist/agents/skills/orkestrel-publish/scripts/pins.js +170 -13
  17. package/dist/agents/skills/orkestrel-publish/scripts/swap.js +956 -191
  18. package/dist/agents/skills/orkestrel-publish/scripts/wave.js +707 -112
  19. package/dist/agents/skills/orkestrel-publish/scripts/window.js +235 -41
  20. package/dist/agents/skills/orkestrel-scout/scripts/map.js +341 -54
  21. package/dist/agents/templates/brief.md +1 -1
  22. package/dist/bin/main.js +51 -46
  23. package/dist/bin/main.js.map +1 -1
  24. package/dist/host/AGENTS.md +23 -21
  25. package/dist/host/agents/orchestration.md +43 -18
  26. package/dist/host/agents/platforms/windows.md +3 -3
  27. package/dist/host/agents/skills/orkestrel-align/SKILL.md +10 -13
  28. package/dist/host/agents/skills/orkestrel-align/references/fleet.md +4 -10
  29. package/dist/host/agents/skills/orkestrel-align/references/integration.md +1 -1
  30. package/dist/host/agents/skills/orkestrel-build/SKILL.md +16 -48
  31. package/dist/host/agents/skills/orkestrel-build/agents/openai.yaml +1 -1
  32. package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +19 -16
  33. package/dist/host/agents/skills/orkestrel-debrief/agents/openai.yaml +1 -1
  34. package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +15 -28
  35. package/dist/host/agents/skills/orkestrel-debrief/references/instruction-audit.md +5 -6
  36. package/dist/host/agents/skills/orkestrel-debrief/references/retention.md +4 -6
  37. package/dist/host/agents/skills/orkestrel-dispatch/SKILL.md +31 -20
  38. package/dist/host/agents/skills/orkestrel-dispatch/references/launch.md +3 -4
  39. package/dist/host/agents/skills/orkestrel-dispatch/scripts/bench.ts +366 -75
  40. package/dist/host/agents/skills/orkestrel-dispatch/scripts/brief.ts +126 -16
  41. package/dist/host/agents/skills/orkestrel-dispatch/scripts/chain.ts +323 -0
  42. package/dist/host/agents/skills/orkestrel-dispatch/scripts/cite.ts +220 -31
  43. package/dist/host/agents/skills/orkestrel-dispatch/scripts/launch.ts +176 -33
  44. package/dist/host/agents/skills/orkestrel-dispatch/scripts/login.ts +294 -59
  45. package/dist/host/agents/skills/orkestrel-dispatch/scripts/patch.ts +401 -0
  46. package/dist/host/agents/skills/orkestrel-dispatch/scripts/result.ts +199 -34
  47. package/dist/host/agents/skills/orkestrel-dispatch/scripts/sweep.ts +330 -69
  48. package/dist/host/agents/skills/orkestrel-falsify/SKILL.md +10 -8
  49. package/dist/host/agents/skills/orkestrel-falsify/references/brief.md +1 -5
  50. package/dist/host/agents/skills/orkestrel-falsify/references/reconcile.md +1 -1
  51. package/dist/host/agents/skills/orkestrel-falsify/scripts/mutate.ts +701 -0
  52. package/dist/host/agents/skills/orkestrel-harden/SKILL.md +16 -12
  53. package/dist/host/agents/skills/orkestrel-harden/references/bindings.md +23 -81
  54. package/dist/host/agents/skills/orkestrel-harden/references/centralization.md +4 -5
  55. package/dist/host/agents/skills/orkestrel-harden/references/contract.md +2 -0
  56. package/dist/host/agents/skills/orkestrel-harden/references/document.md +33 -0
  57. package/dist/host/agents/skills/orkestrel-harden/references/equivalence.md +6 -3
  58. package/dist/host/agents/skills/orkestrel-harden/references/hardening.md +8 -4
  59. package/dist/host/agents/skills/orkestrel-harden/references/research.md +2 -0
  60. package/dist/host/agents/skills/orkestrel-harden/scripts/discovery.ts +1272 -279
  61. package/dist/host/agents/skills/orkestrel-harden/scripts/measure.ts +425 -0
  62. package/dist/host/agents/skills/orkestrel-harden/scripts/titles.ts +603 -98
  63. package/dist/host/agents/skills/orkestrel-journey/SKILL.md +75 -98
  64. package/dist/host/agents/skills/orkestrel-journey/references/captures.md +54 -17
  65. package/dist/host/agents/skills/orkestrel-journey/references/decide.md +1 -20
  66. package/dist/host/agents/skills/orkestrel-journey/references/layer.md +21 -31
  67. package/dist/host/agents/skills/orkestrel-journey/references/styles.md +1 -1
  68. package/dist/host/agents/skills/orkestrel-parallel/SKILL.md +28 -24
  69. package/dist/host/agents/skills/orkestrel-parallel/references/claude.md +15 -13
  70. package/dist/host/agents/skills/orkestrel-parallel/references/codex.md +1 -0
  71. package/dist/host/agents/skills/orkestrel-parallel/references/cursor.md +13 -13
  72. package/dist/host/agents/skills/orkestrel-parallel/scripts/cases.ts +389 -0
  73. package/dist/host/agents/skills/orkestrel-polish/SKILL.md +16 -20
  74. package/dist/host/agents/skills/orkestrel-polish/references/capture-harness.md +16 -26
  75. package/dist/host/agents/skills/orkestrel-publish/SKILL.md +12 -26
  76. package/dist/host/agents/skills/orkestrel-publish/agents/openai.yaml +2 -2
  77. package/dist/host/agents/skills/orkestrel-publish/references/adopt.md +23 -0
  78. package/dist/host/agents/skills/orkestrel-publish/references/release.md +4 -4
  79. package/dist/host/agents/skills/orkestrel-publish/references/wave.md +10 -9
  80. package/dist/host/agents/skills/orkestrel-publish/references/window.md +20 -25
  81. package/dist/host/agents/skills/orkestrel-publish/scripts/compare.ts +348 -59
  82. package/dist/host/agents/skills/orkestrel-publish/scripts/pins.ts +202 -22
  83. package/dist/host/agents/skills/orkestrel-publish/scripts/swap.ts +1061 -191
  84. package/dist/host/agents/skills/orkestrel-publish/scripts/wave.ts +812 -140
  85. package/dist/host/agents/skills/orkestrel-publish/scripts/window.ts +280 -38
  86. package/dist/host/agents/skills/orkestrel-scout/SKILL.md +3 -3
  87. package/dist/host/agents/skills/orkestrel-scout/scripts/map.ts +428 -70
  88. package/dist/host/agents/templates/brief.md +1 -1
  89. package/dist/host/agents/transports/claude-cli.md +3 -3
  90. package/dist/host/agents/transports/codex.md +2 -7
  91. package/dist/host/agents/transports/cursor.md +2 -3
  92. package/dist/host/claude/AGENTS.md +2 -2
  93. package/dist/host/claude/agents/analyst.md +3 -3
  94. package/dist/host/claude/agents/astra.md +3 -3
  95. package/dist/host/claude/agents/builder.md +1 -1
  96. package/dist/host/claude/agents/checker.md +1 -1
  97. package/dist/host/claude/agents/distiller.md +1 -1
  98. package/dist/host/claude/agents/grok.md +1 -1
  99. package/dist/host/claude/agents/opus.md +2 -2
  100. package/dist/host/claude/agents/orkestrel.md +57 -90
  101. package/dist/host/claude/agents/researcher.md +1 -1
  102. package/dist/host/claude/agents/reviewer.md +4 -0
  103. package/dist/host/claude/agents/scout.md +1 -1
  104. package/dist/host/claude/agents/verifier.md +1 -1
  105. package/dist/host/claude/rules/application.md +14 -21
  106. package/dist/host/claude/rules/architecture.md +34 -44
  107. package/dist/host/claude/rules/browser.md +3 -4
  108. package/dist/host/claude/rules/campaign.md +2 -2
  109. package/dist/host/claude/rules/documentation.md +25 -12
  110. package/dist/host/claude/rules/names.md +9 -4
  111. package/dist/host/claude/rules/patterns.md +6 -7
  112. package/dist/host/claude/rules/portability.md +1 -1
  113. package/dist/host/claude/rules/quality.md +4 -5
  114. package/dist/host/claude/rules/styles.md +2 -2
  115. package/dist/host/claude/rules/tests.md +57 -114
  116. package/dist/host/claude/rules/typescript.md +7 -9
  117. package/dist/host/claude/rules/workspace.md +21 -19
  118. package/dist/host/claude/rules/writing.md +2 -5
  119. package/dist/host/claude/skills/orkestrel-dispatch/SKILL.md +1 -1
  120. package/dist/host/claude/skills/orkestrel-harden/SKILL.md +1 -1
  121. package/dist/host/claude/skills/orkestrel-publish/SKILL.md +1 -1
  122. package/dist/host/claude/skills/orkestrel-scout/SKILL.md +1 -1
  123. package/dist/host/codex/agents/analyst.toml +9 -3
  124. package/dist/host/codex/agents/astra.toml +3 -4
  125. package/dist/host/codex/agents/builder.toml +1 -1
  126. package/dist/host/codex/agents/opus.toml +3 -4
  127. package/dist/host/codex/agents/orkestrel.toml +1 -1
  128. package/dist/host/codex/agents/researcher.toml +2 -2
  129. package/dist/host/codex/agents/verifier.toml +1 -1
  130. package/dist/host/configs/helpers.ts +21 -1
  131. package/dist/host/configs/policy.ts +299 -15
  132. package/dist/host/dotfiles/oxlintrc.json +137 -3
  133. package/dist/host/guides/agent.md +111 -134
  134. package/dist/host/guides/capture.md +801 -0
  135. package/dist/host/guides/probe.md +27 -8
  136. package/dist/host/guides/scaffold.md +96 -18
  137. package/dist/host/guides/study.md +534 -440
  138. package/dist/host/guides/test.md +111 -44
  139. package/dist/host/manifest.json +160 -240
  140. package/dist/host/tests/config.test.ts +971 -187
  141. package/dist/host/tests/policy.test.ts +127 -1
  142. package/dist/host/tests/setupPolicy.ts +893 -33
  143. package/dist/src/core/index.cjs +214 -86
  144. package/dist/src/core/index.cjs.map +1 -1
  145. package/dist/src/core/index.d.cts +122 -38
  146. package/dist/src/core/index.d.ts +122 -38
  147. package/dist/src/core/index.js +209 -85
  148. package/dist/src/core/index.js.map +1 -1
  149. package/dist/src/server/index.cjs +20 -27
  150. package/dist/src/server/index.cjs.map +1 -1
  151. package/dist/src/server/index.js +21 -28
  152. package/dist/src/server/index.js.map +1 -1
  153. package/package.json +11 -11
  154. package/dist/agents/skills/orkestrel-dispatch/scripts/helpers.js +0 -283
  155. package/dist/host/agents/skills/orkestrel-dispatch/references/bench.md +0 -25
  156. package/dist/host/agents/skills/orkestrel-dispatch/scripts/helpers.ts +0 -333
  157. package/dist/host/guides/supervisor.md +0 -4890
package/dist/bin/main.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { align, renderTable, strip, stripControls, width } from "@orkestrel/console";
3
3
  import { attempt, isArray, isDefined, isError, isInstance, isRecord, isString, parseJSON } from "@orkestrel/contract";
4
- import { AXES, BIN_ENTRY_PATH, CATALOG_AGENT_PATH, CONFORMANCE_TEST_PATH, Compiler, DEPENDENCY_NAME_PATTERN, ENVIRONMENTS, FRAMEWORKS, GLOBAL_SETUP_PATH, GROUPS, GUIDES_TEST_PATH, HOST_PATHS, INTEGRATION_TEST_PATH, JOURNEY_CONFIG_PATH, MAX_MANIFEST_BYTES, MAX_PATH_LENGTH, RESERVED_SHEET_NAMES, SERVICE_SETUP_PATH, SHEET_ENTRY_NAME, SHOWCASE_CONFIG_PATH, SHOWCASE_DEV_DEPENDENCIES, SHOWCASE_PAGES_PATH, SKILLS_CONFIG_PATH, STYLES_ENTRY_PATH, ScaffoldError, THEMES_BARREL_PATH, THEMES_ENTRY_PATH, TREE_TEST_PATH, blueprintToConfigArtifacts, blueprintToDevDependencies, blueprintToFaces, blueprintToManifestOverrides, blueprintToProjects, blueprintToScripts, blueprintToSheets, blueprintToTestArtifacts, blueprintToWritableScripts, compareVersions, createBlueprint, extractRangeMajor, extractVersion, isFloorPath, isScaffoldError, isSheetName, iterateAnswers, manifestToDependencies, manifestToName, nameToGuide, parseExtension, replaceManifestOverrides, replaceManifestScripts, replacePlanRanges } from "../src/core/index.js";
4
+ import { AXES, BIN_ENTRY_PATH, CATALOG_AGENT_PATH, CONFORMANCE_TEST_PATH, Compiler, DEPENDENCY_NAME_PATTERN, ENVIRONMENTS, FRAMEWORKS, GLOBAL_SETUP_PATH, GROUPS, GUIDES_TEST_PATH, HOST_PATHS, INTEGRATION_TEST_PATH, JOURNEY_CONFIG_PATH, MAX_MANIFEST_BYTES, MAX_PATH_LENGTH, RESERVED_SHEET_NAMES, SERVICE_SETUP_PATH, SHEET_ENTRY_NAME, SHOWCASE_CONFIG_PATH, SHOWCASE_DEV_DEPENDENCIES, SHOWCASE_PAGES_PATH, SKILLS_CONFIG_PATH, STYLES_ENTRY_PATH, ScaffoldError, THEMES_BARREL_PATH, THEMES_ENTRY_PATH, TREE_TEST_PATH, blueprintToConfigArtifacts, blueprintToDevDependencies, blueprintToFaces, blueprintToManifestOverrides, blueprintToProjects, blueprintToScripts, blueprintToSheets, blueprintToTestArtifacts, blueprintToToolchainHolds, blueprintToWritableScripts, compareVersions, createBlueprint, extractRangeMajor, extractVersion, isFloorPath, isScaffoldError, isSheetName, iterateAnswers, manifestToDependencies, manifestToName, nameToGuide, parseExtension, replaceManifestOverrides, replaceManifestScripts, replacePlanRanges } from "../src/core/index.js";
5
5
  import { MAX_INVENTORY_PATHS, Materializer, Upstream, filesToHost, isExactCaseFile, isPhysicalDirectory, isWorktree, listFiles, readFileText, readHostFloor, readHostManifest, readSnapshot, resolveContainedPath } from "../src/server/index.js";
6
6
  import { createSession } from "@orkestrel/process/server";
7
7
  import { createMarkdown, flattenText, isTableNode } from "@orkestrel/markdown";
@@ -10,7 +10,7 @@ import { normalize } from "node:path";
10
10
  import { parseArgs } from "node:util";
11
11
  var package_default = {
12
12
  name: "@orkestrel/scaffold",
13
- version: "0.0.108",
13
+ version: "0.0.109",
14
14
  description: "Scaffold workspaces with commands: new, audit, repair, catalog, and overwrite.",
15
15
  keywords: [
16
16
  "audit",
@@ -87,7 +87,7 @@ var package_default = {
87
87
  "test:templates": "vitest run --config vite.config.ts --no-cache --reporter=dot --project templates",
88
88
  "test:distribution": "vitest run --config vite.config.ts --no-cache --reporter=dot --project distribution",
89
89
  "test:probe": "vitest run --config vite.config.ts --no-cache --reporter=verbose --project probe",
90
- "test:bench": "vitest bench --config vite.config.ts --no-cache --project probe",
90
+ "test:bench": "vitest bench --config vite.config.ts --no-cache --project \"probe (bench)\" --mode benchmark",
91
91
  "test:setup": "vitest run --config vite.config.ts --no-cache --reporter=dot --project setup",
92
92
  "build": "npm run clean && npm run build:src && npm run build:host && npm run build:skills && npm run build:inventory",
93
93
  "build:src": "npm run build:src:core && npm run build:src:server && npm run build:src:bin",
@@ -109,25 +109,24 @@ var package_default = {
109
109
  "@orkestrel/template": "^0.0.10"
110
110
  },
111
111
  devDependencies: {
112
- "@microsoft/api-extractor": "^7.59.4",
112
+ "@microsoft/api-extractor": "^7.60.0",
113
113
  "@orkestrel/browser": "^0.0.29",
114
114
  "@orkestrel/guide": "^0.0.25",
115
115
  "@orkestrel/html": "^0.0.12",
116
- "@orkestrel/probe": "^0.0.24",
117
- "@orkestrel/test": "^0.0.29",
116
+ "@orkestrel/probe": "^0.0.25",
117
+ "@orkestrel/test": "^0.0.30",
118
118
  "@types/node": "^24.19.2",
119
- "@vitest/browser-playwright": "^4.1.11",
120
- "oxfmt": "^0.74.0",
121
- "oxlint": "^1.89.0",
122
- "playwright": "^1.63.0",
123
- "typescript": "^6.0.3",
119
+ "@vitest/browser-playwright": "^5.0.5",
120
+ "oxfmt": "^0.75.0",
121
+ "oxlint": "^1.90.0",
122
+ "playwright": "^1.64.1",
123
+ "typescript": "^7.0.2",
124
124
  "vite": "^8.3.5",
125
- "vitest": "^4.1.12"
125
+ "vitest": "^5.0.5"
126
126
  },
127
127
  engines: { "node": ">=22.18.0" }
128
128
  };
129
- //#endregion
130
- //#region src/bin/constants.ts
129
+ // src/bin/constants.ts
131
130
  /**
132
131
  * Names the command the executable installs as.
133
132
  *
@@ -342,8 +341,7 @@ var SHEET_IMPORT_PATTERN = /from\s+(['"])[^'"]*dist\/src\/[^'"]+\.css\?raw\1/u;
342
341
  * refuses it, while a protocol-relative `//` specifier is outside this pattern.
343
342
  */
344
343
  var ROOT_IMPORT_PATTERN = /^\s*import\s[^'"]*?(['"])(\/(?!\/)[^'"]*)\1/gmu;
345
- //#endregion
346
- //#region src/bin/errors.ts
344
+ // src/bin/errors.ts
347
345
  /**
348
346
  * Represents the error raised when a command line is not a command.
349
347
  *
@@ -399,8 +397,7 @@ var UsageError = class extends Error {
399
397
  function isUsageError(value) {
400
398
  return isInstance(value, UsageError);
401
399
  }
402
- //#endregion
403
- //#region src/bin/helpers.ts
400
+ // src/bin/helpers.ts
404
401
  /**
405
402
  * Reads the option name out of the token usage displays it as.
406
403
  *
@@ -832,13 +829,15 @@ function releasesToExit(releases) {
832
829
  return releases.some((release) => release.lookup !== "found" || release.name.startsWith("@orkestrel/") && release.range !== `^${release.latest}`) ? 1 : 0;
833
830
  }
834
831
  /**
835
- * Projects foreign floor and supported-major drift into audit questions.
832
+ * Projects foreign floor, supported-major, and held-major drift into audit questions.
836
833
  *
837
834
  * @param releases - The release verdicts to measure.
838
835
  * @param served - Alternate release verdicts used to detect a newer served major.
839
- * @returns One non-blocking question for each stale floor and each crossed major.
836
+ * @param holds - The toolchain holds selected for this workspace; default: none.
837
+ * @returns One non-blocking question for each stale floor, each crossed major, and each declaration
838
+ * past its hold. A held tool's newer served major reads as its hold and the reason.
840
839
  */
841
- function releasesToQuestions(releases, served = releases) {
840
+ function releasesToQuestions(releases, served = releases, holds = {}) {
842
841
  return Iterator.from(releases).flatMap((release) => {
843
842
  if (release.name.startsWith("@orkestrel/")) return [];
844
843
  const declared = extractRangeMajor(release.range);
@@ -847,15 +846,25 @@ function releasesToQuestions(releases, served = releases) {
847
846
  const floor = extractVersion(release.range.startsWith("^") || release.range.startsWith("~") ? release.range.slice(1) : release.range);
848
847
  const alternate = served.find((candidate) => candidate.name === release.name);
849
848
  const published = release.major ?? (alternate?.lookup === "found" ? extractVersion(alternate.latest)?.[0] : void 0);
850
- return [...declared !== void 0 && current !== void 0 && resolved !== void 0 && floor !== void 0 && resolved[0] === declared && compareVersions(current, floor.join(".")) > 0 ? [{
851
- field: "dependencies",
852
- message: `${release.name} declares the floor ${release.range}, while the registry serves ${current} within major ${String(declared)}.`,
853
- blocking: false
854
- }] : [], ...declared !== void 0 && published !== void 0 && declared < published ? [{
855
- field: "dependencies",
856
- message: `${release.name} declares major ${String(declared)}, while the registry serves major ${String(published)}.`,
857
- blocking: false
858
- }] : []];
849
+ const hold = Object.hasOwn(holds, release.name) ? holds[release.name] : void 0;
850
+ const held = hold === void 0 ? void 0 : extractRangeMajor(hold.range);
851
+ return [
852
+ ...declared !== void 0 && current !== void 0 && resolved !== void 0 && floor !== void 0 && resolved[0] === declared && compareVersions(current, floor.join(".")) > 0 ? [{
853
+ field: "dependencies",
854
+ message: `${release.name} declares the floor ${release.range}, while the registry serves ${current} within major ${String(declared)}.`,
855
+ blocking: false
856
+ }] : [],
857
+ ...declared !== void 0 && published !== void 0 && declared < published ? [{
858
+ field: "dependencies",
859
+ message: hold !== void 0 && held === declared ? `${release.name} is held at major ${String(declared)}, while the registry serves major ${String(published)}: ${hold.reason}.` : `${release.name} declares major ${String(declared)}, while the registry serves major ${String(published)}.`,
860
+ blocking: false
861
+ }] : [],
862
+ ...declared !== void 0 && hold !== void 0 && held !== void 0 && declared > held ? [{
863
+ field: "dependencies",
864
+ message: `${release.name} declares major ${String(declared)}, past its hold at major ${String(held)}: ${hold.reason}.`,
865
+ blocking: false
866
+ }] : []
867
+ ];
859
868
  }).toArray();
860
869
  }
861
870
  /**
@@ -1615,8 +1624,7 @@ function findGitRefusal(target, count, chunk) {
1615
1624
  if (count + chunk.records.length > MAX_INVENTORY_PATHS) return `The git query for target at ${target} exceeded the working-tree inventory limit.`;
1616
1625
  return chunk.pending.length > MAX_PATH_LENGTH + 3 ? `The git query for target at ${target} returned an unfinished record beyond the supported path limit.` : void 0;
1617
1626
  }
1618
- //#endregion
1619
- //#region src/bin/GitQuery.ts
1627
+ // src/bin/GitQuery.ts
1620
1628
  /**
1621
1629
  * Represents one git query read as its NUL-separated records.
1622
1630
  *
@@ -1727,8 +1735,7 @@ var GitQuery = class {
1727
1735
  if (!this.#controller.signal.aborted) this.#controller.abort(new ScaffoldError("TARGET", message, { target: this.#target }));
1728
1736
  }
1729
1737
  };
1730
- //#endregion
1731
- //#region src/bin/CLI.ts
1738
+ // src/bin/CLI.ts
1732
1739
  /**
1733
1740
  * Represents the executable: one command line in, one exit code out.
1734
1741
  *
@@ -1882,7 +1889,7 @@ var CLI = class {
1882
1889
  const groups = selectionToGroups(command.groups);
1883
1890
  const declared = manifestToWritableDependencies(manifest, blueprint);
1884
1891
  const versions = await this.#versions(declared, command.offline === true, blueprint);
1885
- const questions = [...this.#targetQuestions(target, blueprint, groups), ...releasesToQuestions(versions.releases)];
1892
+ const questions = [...this.#targetQuestions(target, blueprint, groups), ...releasesToQuestions(versions.releases, void 0, blueprintToToolchainHolds(blueprint))];
1886
1893
  const host = await this.#host(command.from, target, command.offline === true);
1887
1894
  try {
1888
1895
  const [measured] = this.#survey(host.materializer, blueprint, target, groups);
@@ -2359,9 +2366,9 @@ var CLI = class {
2359
2366
  #compile(blueprint, groups) {
2360
2367
  const compiler = new Compiler();
2361
2368
  try {
2362
- const scaffolding = compiler.compile(blueprint, groups);
2363
- if (scaffolding.plan !== void 0 && scaffolding.questions.length === 0) return scaffolding.plan;
2364
- throw new ScaffoldError("BLOCKED", scaffolding.questions.map((question) => `${question.field}: ${question.message}`).join(" "), { questions: scaffolding.questions.length });
2369
+ const result = compiler.compile(blueprint, groups);
2370
+ if (result.plan !== void 0 && result.questions.length === 0) return result.plan;
2371
+ throw new ScaffoldError("BLOCKED", result.questions.map((question) => `${question.field}: ${question.message}`).join(" "), { questions: result.questions.length });
2365
2372
  } finally {
2366
2373
  compiler.destroy();
2367
2374
  }
@@ -2369,13 +2376,13 @@ var CLI = class {
2369
2376
  #survey(materializer, blueprint, target, groups) {
2370
2377
  const compiler = new Compiler();
2371
2378
  try {
2372
- const scaffolding = compiler.compile(blueprint, groups);
2373
- if (scaffolding.plan === void 0) return [compiler.audit(blueprint, {}, groups), void 0];
2374
- const measured = materializer.audit(scaffolding.plan, target);
2379
+ const result = compiler.compile(blueprint, groups);
2380
+ if (result.plan === void 0) return [compiler.audit(blueprint, {}, groups), void 0];
2381
+ const measured = materializer.audit(result.plan, target);
2375
2382
  return [{
2376
2383
  ...measured,
2377
- questions: [...measured.questions, ...scaffolding.questions]
2378
- }, scaffolding.plan];
2384
+ questions: [...measured.questions, ...result.questions]
2385
+ }, result.plan];
2379
2386
  } finally {
2380
2387
  compiler.destroy();
2381
2388
  }
@@ -2781,13 +2788,11 @@ var CLI = class {
2781
2788
  this.#diagnostic(sanitizeLine(line));
2782
2789
  }
2783
2790
  };
2784
- //#endregion
2785
- //#region src/bin/main.ts
2791
+ // src/bin/main.ts
2786
2792
  process.stdout.on("error", (error) => {
2787
2793
  if ("code" in error && error.code === "EPIPE") return;
2788
2794
  throw error;
2789
2795
  });
2790
2796
  process.exitCode = await new CLI({ upstream: environmentToUpstream(process.env) }).execute(process.argv.slice(2));
2791
- //#endregion
2792
2797
 
2793
2798
  //# sourceMappingURL=main.js.map