@canonical/pragma-cli 0.35.0 → 0.36.0

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 (230) hide show
  1. package/README.md +2 -2
  2. package/bundled-skills/add-standard/SKILL.md +338 -0
  3. package/bundled-skills/adoption-a1-styles/SKILL.md +269 -0
  4. package/bundled-skills/adoption-a2-components/SKILL.md +291 -0
  5. package/bundled-skills/adoption-a3-forms/SKILL.md +260 -0
  6. package/bundled-skills/anatomy-author/ANATOMY_DSL_SPEC.md +406 -0
  7. package/bundled-skills/anatomy-author/SKILL.md +1226 -0
  8. package/bundled-skills/design-auditor/SKILL.md +455 -0
  9. package/bundled-skills/implement-component/SKILL.md +333 -0
  10. package/bundled-skills/specify-component/SKILL.md +331 -0
  11. package/bundled-skills/specify-pattern/SKILL.md +292 -0
  12. package/dist/package.json +16 -15
  13. package/dist/pragma.conf.js +236 -34
  14. package/dist/pragma.conf.js.map +1 -1
  15. package/dist/src/bin.js +1 -1
  16. package/dist/src/bin.js.map +1 -1
  17. package/dist/src/capabilities/colophon/colophon.render.js +1 -1
  18. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -1
  19. package/dist/src/capabilities/create/mount.js +4 -3
  20. package/dist/src/capabilities/create/mount.js.map +1 -1
  21. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +60 -4
  22. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -1
  23. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +8 -8
  24. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -1
  25. package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
  26. package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
  27. package/dist/src/capabilities/doctor/checks/index.js +6 -6
  28. package/dist/src/capabilities/doctor/checks/targetHealth.js +194 -50
  29. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -1
  30. package/dist/src/capabilities/doctor/doctor.render.js +43 -64
  31. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -1
  32. package/dist/src/capabilities/doctor/doctor.verb.js +6 -2
  33. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -1
  34. package/dist/src/capabilities/doctor/runChecks.js +14 -11
  35. package/dist/src/capabilities/doctor/runChecks.js.map +1 -1
  36. package/dist/src/capabilities/graph/query.render.js +2 -2
  37. package/dist/src/capabilities/graph/query.render.js.map +1 -1
  38. package/dist/src/capabilities/info/collectInfo.js +8 -2
  39. package/dist/src/capabilities/info/collectInfo.js.map +1 -1
  40. package/dist/src/capabilities/info/info.render.js +6 -2
  41. package/dist/src/capabilities/info/info.render.js.map +1 -1
  42. package/dist/src/capabilities/prompt/prompt.render.js +2 -2
  43. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -1
  44. package/dist/src/capabilities/setup/buildPlan.js +43 -39
  45. package/dist/src/capabilities/setup/buildPlan.js.map +1 -1
  46. package/dist/src/capabilities/setup/mode.js +2 -2
  47. package/dist/src/capabilities/setup/operations/index.js +4 -4
  48. package/dist/src/capabilities/setup/operations/index.js.map +1 -1
  49. package/dist/src/capabilities/setup/operations/setupGenerator.js +92 -45
  50. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -1
  51. package/dist/src/capabilities/setup/operations/setupLsp.js +88 -36
  52. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -1
  53. package/dist/src/capabilities/setup/operations/setupMcp.js +97 -51
  54. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -1
  55. package/dist/src/capabilities/setup/operations/setupSkills.js +325 -47
  56. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -1
  57. package/dist/src/capabilities/setup/plan.js.map +1 -1
  58. package/dist/src/capabilities/setup/plan.render.js +144 -66
  59. package/dist/src/capabilities/setup/plan.render.js.map +1 -1
  60. package/dist/src/capabilities/setup/setup.render.js +1 -1
  61. package/dist/src/capabilities/setup/setup.verb.js +86 -33
  62. package/dist/src/capabilities/setup/setup.verb.js.map +1 -1
  63. package/dist/src/capabilities/setup/targets.js +110 -45
  64. package/dist/src/capabilities/setup/targets.js.map +1 -1
  65. package/dist/src/capabilities/shared/index.js +6 -5
  66. package/dist/src/capabilities/shared/index.js.map +1 -1
  67. package/dist/src/capabilities/shared/packageManager.js +300 -54
  68. package/dist/src/capabilities/shared/packageManager.js.map +1 -1
  69. package/dist/src/capabilities/skill/discover.js +97 -11
  70. package/dist/src/capabilities/skill/discover.js.map +1 -1
  71. package/dist/src/capabilities/skill/render.js +2 -2
  72. package/dist/src/capabilities/skill/render.js.map +1 -1
  73. package/dist/src/capabilities/sources/installSkills.js +145 -3
  74. package/dist/src/capabilities/sources/installSkills.js.map +1 -1
  75. package/dist/src/capabilities/sources/runUpdate.js +68 -2
  76. package/dist/src/capabilities/sources/runUpdate.js.map +1 -1
  77. package/dist/src/capabilities/sources/update.verb.js +3 -3
  78. package/dist/src/capabilities/sources/update.verb.js.map +1 -1
  79. package/dist/src/capabilities/upgrade/runUpgrade.js +43 -7
  80. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -1
  81. package/dist/src/capabilities/upgrade/upgrade.render.js +10 -2
  82. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -1
  83. package/dist/src/constants.js +6 -1
  84. package/dist/src/constants.js.map +1 -1
  85. package/dist/src/kernel/index.js +11 -2
  86. package/dist/src/kernel/index.js.map +1 -1
  87. package/dist/src/kernel/interactivity.js +68 -0
  88. package/dist/src/kernel/interactivity.js.map +1 -0
  89. package/dist/src/kernel/packs/renderPack.js +3 -3
  90. package/dist/src/kernel/packs/renderPack.js.map +1 -1
  91. package/dist/src/kernel/packs/resolveEntity.js +63 -12
  92. package/dist/src/kernel/packs/resolveEntity.js.map +1 -1
  93. package/dist/src/kernel/packs/runBodies.js +57 -4
  94. package/dist/src/kernel/packs/runBodies.js.map +1 -1
  95. package/dist/src/kernel/packs/schema.js +54 -2
  96. package/dist/src/kernel/packs/schema.js.map +1 -1
  97. package/dist/src/kernel/packs/sparql/applyFilters.js +104 -5
  98. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -1
  99. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +306 -43
  100. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -1
  101. package/dist/src/kernel/packs/types.js.map +1 -1
  102. package/dist/src/kernel/project/cli/buildProgram.js +1 -1
  103. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -1
  104. package/dist/src/kernel/project/cli/dispatch.js +23 -23
  105. package/dist/src/kernel/project/cli/dispatch.js.map +1 -1
  106. package/dist/src/kernel/project/cli/globalFlags.js +4 -1
  107. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -1
  108. package/dist/src/kernel/project/cli/helpFormat.js +1 -2
  109. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -1
  110. package/dist/src/kernel/project/cli/rootHelp.js +34 -4
  111. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -1
  112. package/dist/src/kernel/project/mcp/registerVerb.js +16 -1
  113. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -1
  114. package/dist/src/kernel/render/renderers.js +1 -1
  115. package/dist/src/kernel/render/style.js +29 -9
  116. package/dist/src/kernel/render/style.js.map +1 -1
  117. package/dist/src/kernel/render/vocabulary.js +174 -0
  118. package/dist/src/kernel/render/vocabulary.js.map +1 -0
  119. package/dist/src/kernel/spec/emitReference.js +1 -1
  120. package/dist/src/kernel/spec/emitReference.js.map +1 -1
  121. package/package.json +16 -15
  122. package/pragma.conf.ts +241 -34
  123. package/src/bin.ts +8 -1
  124. package/src/capabilities/block.parity.test.ts +25 -11
  125. package/src/capabilities/block.shipped.exec.test.ts +282 -0
  126. package/src/capabilities/block.tierRank.exec.test.ts +300 -0
  127. package/src/capabilities/colophon/colophon.render.ts +1 -2
  128. package/src/capabilities/colophon/colophon.test.ts +2 -2
  129. package/src/capabilities/create/createGrammar.test.ts +1 -1
  130. package/src/capabilities/create/mount.ts +3 -3
  131. package/src/capabilities/distribution.parity.test.ts +4 -0
  132. package/src/capabilities/doctor/checks/checkPackageRefs.ts +69 -4
  133. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +6 -4
  134. package/src/capabilities/doctor/checks/checkShellCompletions.ts +8 -8
  135. package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
  136. package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
  137. package/src/capabilities/doctor/checks/index.ts +6 -6
  138. package/src/capabilities/doctor/checks/targetHealth.ts +229 -59
  139. package/src/capabilities/doctor/doctor.render.test.ts +108 -32
  140. package/src/capabilities/doctor/doctor.render.ts +56 -80
  141. package/src/capabilities/doctor/doctor.test.ts +247 -35
  142. package/src/capabilities/doctor/doctor.verb.ts +7 -2
  143. package/src/capabilities/doctor/runChecks.ts +14 -11
  144. package/src/capabilities/doctor/types.ts +15 -24
  145. package/src/capabilities/emptyRecovery.test.ts +10 -2
  146. package/src/capabilities/graph/query.render.ts +2 -2
  147. package/src/capabilities/info/collectInfo.ts +8 -1
  148. package/src/capabilities/info/info.render.ts +6 -2
  149. package/src/capabilities/info/info.test.ts +37 -1
  150. package/src/capabilities/info/types.ts +10 -2
  151. package/src/capabilities/prompt/prompt.render.ts +2 -2
  152. package/src/capabilities/renderVocabularySync.test.ts +82 -0
  153. package/src/capabilities/scopeTypeSync.test.ts +29 -15
  154. package/src/capabilities/setup/buildPlan.ts +45 -41
  155. package/src/capabilities/setup/index.ts +1 -1
  156. package/src/capabilities/setup/mode.ts +2 -2
  157. package/src/capabilities/setup/operations/index.ts +6 -1
  158. package/src/capabilities/setup/operations/setupGenerator.ts +144 -70
  159. package/src/capabilities/setup/operations/setupLsp.ts +129 -37
  160. package/src/capabilities/setup/operations/setupMcp.ts +132 -61
  161. package/src/capabilities/setup/operations/setupSkills.ts +392 -58
  162. package/src/capabilities/setup/plan.render.ts +171 -76
  163. package/src/capabilities/setup/plan.ts +17 -12
  164. package/src/capabilities/setup/setup.mcp.correctness.test.ts +9 -9
  165. package/src/capabilities/setup/setup.render.test.ts +50 -36
  166. package/src/capabilities/setup/setup.render.ts +1 -1
  167. package/src/capabilities/setup/setup.test.ts +881 -50
  168. package/src/capabilities/setup/setup.verb.ts +91 -33
  169. package/src/capabilities/setup/targets.ts +120 -52
  170. package/src/capabilities/setup/types.ts +10 -18
  171. package/src/capabilities/shared/index.ts +17 -6
  172. package/src/capabilities/shared/packageManager.test.ts +421 -6
  173. package/src/capabilities/shared/packageManager.ts +394 -59
  174. package/src/capabilities/skill/bundledSkills.test.ts +347 -0
  175. package/src/capabilities/skill/discover.ts +100 -11
  176. package/src/capabilities/skill/render.ts +2 -2
  177. package/src/capabilities/skill/skill.test.ts +17 -4
  178. package/src/capabilities/sources/installSkills.ts +181 -3
  179. package/src/capabilities/sources/runUpdate.ts +78 -2
  180. package/src/capabilities/sources/sources.test.ts +228 -0
  181. package/src/capabilities/sources/update.verb.ts +3 -3
  182. package/src/capabilities/surface.test.ts +2 -2
  183. package/src/capabilities/upgrade/runUpgrade.ts +45 -6
  184. package/src/capabilities/upgrade/types.ts +10 -2
  185. package/src/capabilities/upgrade/upgrade.render.ts +9 -2
  186. package/src/capabilities/upgrade/upgrade.test.ts +72 -0
  187. package/src/constants.ts +6 -1
  188. package/src/identity.test.ts +18 -5
  189. package/src/kernel/completion/entitySource.test.ts +15 -2
  190. package/src/kernel/completion/safety.test.ts +16 -9
  191. package/src/kernel/config/defaults.test.ts +2 -1
  192. package/src/kernel/index.ts +11 -2
  193. package/src/kernel/interactivity.test.ts +76 -0
  194. package/src/kernel/interactivity.ts +69 -0
  195. package/src/kernel/packs/compile.test.ts +92 -0
  196. package/src/kernel/packs/renderPack.ts +3 -3
  197. package/src/kernel/packs/resolveEntity.test.ts +75 -14
  198. package/src/kernel/packs/resolveEntity.ts +88 -24
  199. package/src/kernel/packs/runBodies.ts +84 -19
  200. package/src/kernel/packs/schema.ts +60 -4
  201. package/src/kernel/packs/sparql/applyFilters.ts +125 -4
  202. package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
  203. package/src/kernel/packs/sparql/buildLookupQuery.ts +323 -45
  204. package/src/kernel/packs/toolDescription.test.ts +35 -1
  205. package/src/kernel/packs/types.ts +125 -2
  206. package/src/kernel/project/cli/buildProgram.test.ts +73 -2
  207. package/src/kernel/project/cli/buildProgram.ts +8 -1
  208. package/src/kernel/project/cli/dispatch.test.ts +5 -4
  209. package/src/kernel/project/cli/dispatch.ts +25 -24
  210. package/src/kernel/project/cli/globalFlags.ts +4 -1
  211. package/src/kernel/project/cli/helpFormat.ts +1 -2
  212. package/src/kernel/project/cli/rootHelp.ts +36 -3
  213. package/src/kernel/project/mcp/registerVerb.ts +20 -1
  214. package/src/kernel/render/renderers.ts +1 -1
  215. package/src/kernel/render/style.ts +32 -9
  216. package/src/kernel/render/vocabulary.ts +276 -0
  217. package/src/kernel/spec/emitReference.ts +1 -1
  218. package/src/kernel/spec/types.ts +35 -6
  219. package/src/testing/PARITY_GAPS.ts +9 -3
  220. package/src/testing/behavioral/docExamples.test.ts +4 -2
  221. package/src/testing/behavioral/errorMatrix.mcp.test.ts +110 -7
  222. package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
  223. package/src/testing/behavioral/journeys.packageStories.test.ts +6 -3
  224. package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
  225. package/src/testing/eval/cases/readNouns.ts +245 -9
  226. package/src/testing/fixtures/blockGraph.ts +28 -13
  227. package/src/testing/fixtures/graph/canonical.ts +95 -12
  228. package/dist/src/capabilities/shared/bands.js +0 -16
  229. package/dist/src/capabilities/shared/bands.js.map +0 -1
  230. package/src/capabilities/shared/bands.ts +0 -16
@@ -12,73 +12,95 @@
12
12
  * aligned whether it holds one row or seven. Colour rides the shared TTY seam —
13
13
  * a piped run renders byte-for-byte plain.
14
14
  */
15
- import chalk from "chalk";
16
15
  import { BIN_NAME } from "../../constants.js";
17
16
  import { defaultStyle } from "../../kernel/render/style.js";
18
- import { BAND_LABELS } from "../shared/index.js";
17
+ import { NOT_RUN_GLYPH, OUTCOME_GLYPHS, outcomeRemedyWord, SCOPE_LABELS, SCOPE_PHRASES, } from "../../kernel/render/vocabulary.js";
19
18
  import { planTally, shortenPath, } from "./plan.js";
20
- /** The glyph for a row's outcome. */
21
- const GLYPHS = {
22
- done: "✓",
23
- noop: "✓",
24
- removed: "✓",
25
- kept: "○",
26
- skipped: "○",
27
- failed: "✗",
28
- };
29
- /**
30
- * The marker for a row that carries NO outcome — one the user deselected, so it
31
- * was neither done nor skipped-for-cause. It must not be a ✓: a green check
32
- * against work that never ran is the same lie the old recap told when it
33
- * reported "Setup complete" over a target it had dropped.
34
- */
35
- const NOT_RUN_GLYPH = "·";
19
+ /** The header's scope phrase: `global`, `local project`, or both of them. */
20
+ const scopePhrase = (scope) => SCOPE_PHRASES[scope];
36
21
  /**
37
- * Widen a {@link RenderStyle} with a `red` gated on the SAME colour decision, so
38
- * a failure tint appears only on a colour-capable TTY. Mirrors `doctor`'s own
39
- * styler, which is deliberate: a failed setup row and a failed doctor row are
40
- * the same finding seen twice, and they are tinted alike.
41
- *
42
- * @param style - The shared styler.
43
- * @returns The styler plus `red`.
44
- */
45
- const withRed = (style) => ({
46
- ...style,
47
- red: style.enabled ? (text) => chalk.red(text) : (text) => text,
48
- });
49
- /** The header's band phrase: `global band`, `project band`, or `both bands`. */
50
- const scopePhrase = (scope) => scope === "both" ? "both bands" : `${scope} band`;
51
- /**
52
- * The header line. It names the band and BOTH roots exactly once, which is what
22
+ * The header line. It names the scope and BOTH roots exactly once, which is what
53
23
  * frees every row below to render its paths root-relative instead of repeating
54
- * a 120-character prefix per line.
24
+ * a 120-character prefix per line. The roots are LABELLED (`home:`, `project:`)
25
+ * because the `~` and `.` markers the rows use are only legible once something
26
+ * has said what they stand for.
55
27
  */
56
28
  function header(plan, lead) {
57
29
  const project = shortenPath(plan.roots.project, {
58
30
  global: plan.roots.global,
59
31
  project: "",
60
32
  });
61
- return `${lead} — ${scopePhrase(plan.scope)} (~ · project: ${project})`;
33
+ return `${lead} — ${scopePhrase(plan.scope)} (home: ~ · project: ${project})`;
62
34
  }
63
- /** The middle column: the per-file count when a row has children, else its action. */
64
- const actionCell = (row) => row.children && row.children.length > 0 ? row.detail : row.action;
65
- /** One child rendered inline: `~/.claude.json (add)`. */
66
- const childCell = (child) => `${child.label} (${child.action})`;
35
+ /**
36
+ * The plain verb each action reads as. The middle column is a column of VERBS:
37
+ * what this row will do. It used to render the raw {@link PlanAction} token, so
38
+ * it read as a column of status codes — and `none` was the worst of them,
39
+ * standing equally for "already correct" and "nothing found here". The two are
40
+ * now told apart by the pair: the word says nothing will happen, the detail
41
+ * beside it says what was found.
42
+ *
43
+ * `none` and `skip` are worded direction-neutrally on purpose. The SAME renderer
44
+ * draws the `--undo` plan, where a target-specific negation ("nothing to create"
45
+ * on the `config` row) would be plainly false — there the row is not creating
46
+ * anything, it is declining to delete.
47
+ *
48
+ * The token itself is untouched: `action` is the machine field `--format json`
49
+ * publishes, and this is the display layer over it.
50
+ */
51
+ const ACTION_WORDS = {
52
+ install: "install",
53
+ update: "update",
54
+ link: "link",
55
+ remove: "remove",
56
+ none: "no change",
57
+ skip: "nothing to do",
58
+ };
59
+ /** The distinct actions a row's children carry (empty when it has none). */
60
+ const childActions = (row) => new Set((row.children ?? []).map((child) => child.action));
61
+ /**
62
+ * The middle column.
63
+ *
64
+ * A row with children takes its word from THEM when they agree, because the
65
+ * row-level token can disagree with every one of its own files: registering the
66
+ * MCP server in three files that have never held it plans as `update` (the
67
+ * table's word for "this row has work that is not a fresh install"), and
68
+ * printing `update` over three `(add)` children described the opposite of what
69
+ * the run would do. Before this the cell held the row's DETAIL instead — `3
70
+ * files`, which is a count, not an action, and left the plan with no column
71
+ * that said what would happen.
72
+ */
73
+ function actionCell(row) {
74
+ const kinds = childActions(row);
75
+ if (row.action === "update" && kinds.size === 1 && kinds.has("add")) {
76
+ return ACTION_WORDS.install;
77
+ }
78
+ return ACTION_WORDS[row.action];
79
+ }
80
+ /**
81
+ * One child rendered inline. The per-child action is printed only when the
82
+ * children DISAGREE — when they all do the same thing the row's own verb has
83
+ * just said it, and `lsp no change codium — VSCodium (unchanged)` said
84
+ * "nothing happens here" twice in two columns.
85
+ */
86
+ const childCell = (row, child) => childActions(row).size === 1
87
+ ? child.label
88
+ : `${child.label} (${child.action})`;
67
89
  /** The right column: the children joined, or the row's own detail. */
68
90
  const detailCell = (row) => row.children && row.children.length > 0
69
- ? row.children.map(childCell).join(" · ")
91
+ ? row.children.map((child) => childCell(row, child)).join(" · ")
70
92
  : row.action === "skip"
71
93
  ? (row.reason ?? row.detail)
72
94
  : row.detail;
73
95
  /** Pad every id to the widest, so the three columns line up. */
74
96
  const widthOf = (rows, pick) => Math.max(0, ...rows.map((row) => pick(row).length));
75
- /** Group rows by band, in the plan's own band order. */
76
- function byBand(plan) {
77
- const bands = ["global", "project"];
78
- return bands
79
- .map((band) => [
80
- band,
81
- plan.rows.filter((row) => row.band === band),
97
+ /** Group rows by scope, in the plan's own scope order. */
98
+ function byScope(plan) {
99
+ const scopes = ["global", "project"];
100
+ return scopes
101
+ .map((scope) => [
102
+ scope,
103
+ plan.rows.filter((row) => row.scope === scope),
82
104
  ])
83
105
  .filter(([, rows]) => rows.length > 0);
84
106
  }
@@ -95,10 +117,10 @@ export function renderPlanTable(plan, options = { lead: "Setup plan" }, style =
95
117
  const idWidth = widthOf(plan.rows, (row) => row.target);
96
118
  const actionWidth = widthOf(plan.rows, actionCell);
97
119
  const lines = [style.bold(header(plan, options.lead)), ""];
98
- const groups = byBand(plan);
99
- for (const [band, rows] of groups) {
120
+ const groups = byScope(plan);
121
+ for (const [scope, rows] of groups) {
100
122
  if (plan.scope === "both")
101
- lines.push(style.bold(BAND_LABELS[band]));
123
+ lines.push(style.bold(SCOPE_LABELS[scope]));
102
124
  for (const row of rows) {
103
125
  lines.push(` ${row.target.padEnd(idWidth)} ${actionCell(row).padEnd(actionWidth)} ${style.dim(detailCell(row))}`);
104
126
  }
@@ -107,6 +129,55 @@ export function renderPlanTable(plan, options = { lead: "Setup plan" }, style =
107
129
  lines.push("", options.hint);
108
130
  return lines.join("\n");
109
131
  }
132
+ /**
133
+ * What was DETECTED, rendered before anything is asked.
134
+ *
135
+ * The gap this closes is a rendering one, not an ordering one: detection is
136
+ * complete before the prompt array is even constructed (`buildSetupRun` does
137
+ * resolveRoots → detectTargets → buildPlan, and only then builds `prompts`), and
138
+ * the Ink view mounts no React until the FIRST prompt effect. So the facts were
139
+ * sitting in `run.plan` the whole time with nothing rendering them — the wizard
140
+ * leaked detection only through prompt-label suffixes, and `renderPlanTable` is
141
+ * reached only by `--dry-run` or the non-interactive preview. A wizard run
142
+ * never rendered it at all, and the confirm gate shows an EFFECTS summary, not
143
+ * a detection one.
144
+ *
145
+ * It is a plain-string formatter on purpose. It rides `rt.report` — the non-Ink
146
+ * stderr seam, `--quiet`-aware and a no-op over MCP — because pragma contains no
147
+ * React and no Ink, and three PROTECTED tests exist to keep it that way.
148
+ *
149
+ * The default lists DETECTED rows only; `--verbose` lists everything. "Detected"
150
+ * is `action !== "skip"`, which is not a new partition: it is exactly the
151
+ * predicate the row multiselect already uses to build its choices, so the
152
+ * summary and the question that follows it describe the same set.
153
+ *
154
+ * @param plan - The plan as detected (no outcomes yet).
155
+ * @param options - `verbose` widens detected-only to the whole table.
156
+ * @param style - Injected for tests; defaults to the shared TTY seam.
157
+ * @returns The rendered block, or `undefined` when there is nothing to say.
158
+ */
159
+ export function renderDetectionSummary(plan, options = {}, style = defaultStyle()) {
160
+ const shown = options.verbose
161
+ ? plan.rows
162
+ : plan.rows.filter((row) => row.action !== "skip");
163
+ if (shown.length === 0)
164
+ return undefined;
165
+ const hidden = plan.rows.length - shown.length;
166
+ const idWidth = widthOf(shown, (row) => row.target);
167
+ const actionWidth = widthOf(shown, actionCell);
168
+ const lines = [style.bold(header(plan, "Detected")), ""];
169
+ for (const [scope, rows] of byScope({ ...plan, rows: shown })) {
170
+ if (plan.scope === "both")
171
+ lines.push(style.bold(SCOPE_LABELS[scope]));
172
+ for (const row of rows) {
173
+ lines.push(` ${row.target.padEnd(idWidth)} ${actionCell(row).padEnd(actionWidth)} ${style.dim(detailCell(row))}`);
174
+ }
175
+ }
176
+ if (hidden > 0) {
177
+ lines.push("", style.dim(`${hidden} target${hidden === 1 ? "" : "s"} not detected here — --verbose lists them`));
178
+ }
179
+ return lines.join("\n");
180
+ }
110
181
  /**
111
182
  * One progress line, emitted as a row's outcome lands. Same columns as the
112
183
  * recap, so a reader watching the run and a reader reading the recap afterwards
@@ -118,23 +189,26 @@ export function renderPlanTable(plan, options = { lead: "Setup plan" }, style =
118
189
  * @returns The line.
119
190
  */
120
191
  export function renderProgressLine(row, idWidth, style = defaultStyle()) {
121
- const painted = withRed(style);
122
192
  const outcome = row.outcome;
123
193
  // No outcome at all: the row was offered and left unselected. It is neither a
124
194
  // success nor a skip-for-cause, and painting it green would claim work that
125
195
  // never happened, so it gets a neutral marker and says plainly what it is.
126
196
  if (outcome === undefined) {
127
- return `${painted.dim(NOT_RUN_GLYPH)} ${row.target.padEnd(idWidth)} ${painted.dim(`${row.detail} — not selected`)}`;
197
+ return `${style.dim(NOT_RUN_GLYPH)} ${row.target.padEnd(idWidth)} ${style.dim(`${row.detail} — not selected`)}`;
128
198
  }
129
- const glyph = GLYPHS[outcome.status];
199
+ const glyph = OUTCOME_GLYPHS[outcome.status];
130
200
  const tinted = outcome.status === "failed"
131
- ? painted.red(glyph)
201
+ ? style.red(glyph)
132
202
  : outcome.status === "skipped" || outcome.status === "kept"
133
- ? painted.yellow(glyph)
134
- : painted.green(glyph);
203
+ ? style.yellow(glyph)
204
+ : style.green(glyph);
135
205
  const note = outcome.note;
136
206
  const body = outcome.status === "skipped"
137
- ? `skipped — ${row.reason ?? row.detail}`
207
+ ? // A colon, not a dash: the reasons carry their own em-dash clause
208
+ // ("no skills installed yet — pack skills arrive with …"), and two
209
+ // dashes in one line read as one run-on sentence rather than a label
210
+ // in front of a reason.
211
+ `skipped: ${row.reason ?? row.detail}`
138
212
  : note
139
213
  ? `${row.detail} — ${note}`
140
214
  : row.detail;
@@ -158,9 +232,9 @@ export function renderRecap(plan, lead = "Setup", style = defaultStyle()) {
158
232
  const lines = [
159
233
  style.bold(`${lead}: ${configured} of ${accountable} targets configured — ${scopePhrase(plan.scope)}`),
160
234
  ];
161
- for (const [band, rows] of byBand(plan)) {
235
+ for (const [scope, rows] of byScope(plan)) {
162
236
  if (plan.scope === "both")
163
- lines.push(style.bold(` ${BAND_LABELS[band]}`));
237
+ lines.push(style.bold(` ${SCOPE_LABELS[scope]}`));
164
238
  for (const row of rows) {
165
239
  lines.push(` ${renderProgressLine(row, idWidth, style)}`);
166
240
  const remedy = row.outcome?.remedy;
@@ -168,7 +242,7 @@ export function renderRecap(plan, lead = "Setup", style = defaultStyle()) {
168
242
  lines.push(` ${style.dim(remedy)}`);
169
243
  }
170
244
  }
171
- lines.push("", style.dim(`verify anytime: ${BIN_NAME} doctor`));
245
+ lines.push("", style.dim(`Check this again any time with \`${BIN_NAME} doctor\`.`));
172
246
  return lines.join("\n");
173
247
  }
174
248
  /** The condensed Markdown form — the same rows, one bullet each. */
@@ -179,14 +253,18 @@ export function renderPlanLlm(plan, lead = "Setup") {
179
253
  // Before a run there is no outcome to report, so the row shows its ACTION
180
254
  // behind a neutral marker. Reusing the `noop` glyph here painted every row
181
255
  // of an unapplied plan — skips included — with a green check.
182
- const glyph = status === undefined ? NOT_RUN_GLYPH : GLYPHS[status];
256
+ const glyph = status === undefined ? NOT_RUN_GLYPH : OUTCOME_GLYPHS[status];
183
257
  const state = status ?? row.action;
184
- lines.push(`- ${glyph} **${row.target}** (${row.band}): ${state} — ${detailCell(row)}`);
258
+ lines.push(`- ${glyph} **${row.target}** (${row.scope}): ${state} — ${detailCell(row)}`);
185
259
  for (const child of row.children ?? []) {
186
- lines.push(` - ${childCell(child)}`);
260
+ lines.push(` - ${childCell(row, child)}`);
261
+ }
262
+ // `fix:` for a row that failed, `next:` for one that skipped — a skip is
263
+ // not a fault, and labelling its instruction as a repair is what teaches a
264
+ // reader to treat skips as failures.
265
+ if (row.outcome?.remedy) {
266
+ lines.push(` - _${outcomeRemedyWord(row.outcome.status)}:_ ${row.outcome.remedy}`);
187
267
  }
188
- if (row.outcome?.remedy)
189
- lines.push(` - _fix:_ ${row.outcome.remedy}`);
190
268
  }
191
269
  return lines.join("\n");
192
270
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plan.render.js","sourceRoot":"","sources":["../../../../src/capabilities/setup/plan.render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.render.js","sourceRoot":"","sources":["../../../../src/capabilities/setup/plan.render.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * The plan REPLACED a tagged result union with one member per sub-verb, each
6
6
  * rendering its own sentence in its own vocabulary. That union could not
7
- * describe a run that touched several targets in two bands, so the run-all
7
+ * describe a run that touched several targets in two scopes, so the run-all
8
8
  * reported a list of step names and nothing about what any of them did. One
9
9
  * structure with one renderer is what makes the preview, the progress lines and
10
10
  * the recap agree by construction rather than by review.
@@ -9,18 +9,18 @@
9
9
  * only the self-verb is an MCP tool. `destructive: false` keeps MCP from
10
10
  * advertising the tool as destructive.
11
11
  *
12
- * THE BAND DEFAULT IS GLOBAL. `--scope` used to default to `both`, and `both`
13
- * runs each harness's own default band — which is `project` for most of the
12
+ * THE SCOPE DEFAULT IS GLOBAL. `--scope` used to default to `both`, and `both`
13
+ * runs each harness's own default scope — which is `project` for most of the
14
14
  * registry — so a bare `setup` scattered `.mcp.json`, `.gemini/settings.json`
15
15
  * and `opencode.json` into whatever directory you happened to be standing in.
16
- * The user band is what a machine-level installer configures; the project band
16
+ * The user scope is what a machine-level installer configures; the project scope
17
17
  * is a deliberate, checked-in, team-shared choice, and is now chosen with
18
18
  * `--local` rather than assumed.
19
19
  *
20
- * Every sub-verb registers the scope flags UNIFORMLY. That is what lets the band
20
+ * Every sub-verb registers the scope flags UNIFORMLY. That is what lets the scope
21
21
  * answer come from the table instead of per-verb flag wiring — previously
22
22
  * `setup completions --local` died as an unknown option, while `setup mcp
23
- * --local` worked, for no reason a user could see. Asking a target for a band it
23
+ * --local` worked, for no reason a user could see. Asking a target for a scope it
24
24
  * cannot honour is a usage error (exit 2) with the corrected command; asking the
25
25
  * RUN-ALL for such a band merely filters, and the out-of-band target still shows
26
26
  * as a named row.
@@ -34,14 +34,14 @@ import { BIN_NAME } from "../../constants.js";
34
34
  import { PragmaError } from "../../kernel/error/index.js";
35
35
  import { asVerb } from "../../kernel/spec/asVerb.js";
36
36
  import { resolveSetupMode, setupModeInput } from "./mode.js";
37
- import { planExitFailed, planTally, TARGET_IDS, } from "./plan.js";
38
- import { renderProgressLine, renderRecap } from "./plan.render.js";
37
+ import { isActionable, planExitFailed, planTally, TARGET_IDS, } from "./plan.js";
38
+ import { renderDetectionSummary, renderProgressLine, renderRecap, } from "./plan.render.js";
39
39
  import { renderDryRun, setupFormatters } from "./setup.render.js";
40
40
  /**
41
41
  * The `--scope` flag + its `--global`/`--local` boolean sugars. Registered by
42
- * EVERY setup verb, including the single-band ones: a flag that exists on some
43
- * sub-verbs and not others is a grammar the user has to memorise, and the band
44
- * a single-band target can honour is a question the target table answers.
42
+ * EVERY setup verb, including the single-scope ones: a flag that exists on some
43
+ * sub-verbs and not others is a grammar the user has to memorise, and the scope
44
+ * a single-scope target can honour is a question the target table answers.
45
45
  *
46
46
  * `--global` is a synonym of the default; it stays for scripts and for symmetry
47
47
  * with `--local`.
@@ -50,19 +50,19 @@ const SCOPE_PARAMS = [
50
50
  {
51
51
  kind: "enum",
52
52
  name: "scope",
53
- doc: "Which config band(s) to configure: global (the default), project, or both.",
53
+ doc: "Where to configure: global (your home directory, the default), project (this repository), or both.",
54
54
  values: ["project", "global", "both"],
55
55
  default: "global",
56
56
  },
57
57
  {
58
58
  kind: "boolean",
59
59
  name: "global",
60
- doc: "Shorthand for --scope global (configure the user/home band).",
60
+ doc: "Shorthand for --scope global — configure your home directory.",
61
61
  },
62
62
  {
63
63
  kind: "boolean",
64
64
  name: "local",
65
- doc: "Shorthand for --scope project (configure the per-project band).",
65
+ doc: "Shorthand for --scope project — configure this project only.",
66
66
  },
67
67
  ];
68
68
  /**
@@ -81,32 +81,33 @@ function resolveScope(params) {
81
81
  return scope === "project" || scope === "both" ? scope : "global";
82
82
  }
83
83
  /**
84
- * Reject a sub-verb asked for a band its target cannot hold.
84
+ * Reject a sub-verb asked for a scope its target cannot hold.
85
85
  *
86
86
  * This is a usage error, not a skip: the user typed a contradiction, and
87
- * correcting it is exactly what exit 2 means. The message names the band the
87
+ * correcting it is exactly what exit 2 means. The message names the scope the
88
88
  * target DOES have and prints the command that works, so the correction is one
89
89
  * paste rather than one manual page.
90
90
  *
91
91
  * @param mode - The sub-verb's target, or `all`.
92
92
  * @param scope - The resolved selection.
93
- * @throws PragmaError INVALID_INPUT when the target has no such band.
93
+ * @throws PragmaError INVALID_INPUT when the target has no such scope.
94
94
  */
95
- async function assertBandIsPossible(mode, scope) {
95
+ async function assertScopeIsPossible(mode, scope) {
96
96
  if (mode === "all" || scope === "both")
97
97
  return;
98
98
  const { findTarget } = await import("./targets.js");
99
99
  const target = findTarget(mode);
100
- if (target === undefined || target.bands.includes(scope))
100
+ if (target === undefined || target.scopes.includes(scope))
101
101
  return;
102
- const only = target.bands[0];
103
- const level = only === "global" ? "user-level" : "project-level";
102
+ const only = target.scopes[0];
103
+ const level = only === "global" ? "global only" : "per-project only";
104
+ const asked = scope === "global" ? "globally" : "per project";
104
105
  const corrected = only === "global"
105
106
  ? `${BIN_NAME} setup ${mode}`
106
107
  : `${BIN_NAME} setup ${mode} --local`;
107
108
  throw new PragmaError({
108
109
  code: "INVALID_INPUT",
109
- message: `${mode} is ${level} — it has no ${scope} band.`,
110
+ message: `${mode} is ${level} — it cannot be configured ${asked}.`,
110
111
  recovery: { message: `Run: ${corrected}` },
111
112
  });
112
113
  }
@@ -149,12 +150,12 @@ const SUB_CAPABILITY = {
149
150
  *
150
151
  * @param mode - Which entry point (`all` or one target).
151
152
  * @param rt - The per-invocation runtime (mutated: `rt.exec` and `rt.planData`).
152
- * @param scope - The resolved band selection.
153
+ * @param scope - The resolved scope selection.
153
154
  * @returns The `Task<SetupPlan>` the dispatcher/MCP handler interprets.
154
155
  * @note Impure — runs every target's real detection before returning a Task.
155
156
  */
156
157
  async function runSetup(mode, rt, scope) {
157
- await assertBandIsPossible(mode, scope);
158
+ await assertScopeIsPossible(mode, scope);
158
159
  // Lazy dynamic imports (lazy-React discipline): summon-core's barrel is
159
160
  // React-free, and the non-TTY branch picks autoPrompt/mcpPrompt (never mounts
160
161
  // Ink), so `setup --yes` loads no React — the guard test enforces this.
@@ -174,12 +175,51 @@ async function runSetup(mode, rt, scope) {
174
175
  // — that is what makes the preview honest — so anything it says out loud has
175
176
  // to know which of the two it is.
176
177
  const previewing = interactionMode === "batch-dry-run";
178
+ // A CONVERGED machine has no question to ask. Every row is `none` or `skip`,
179
+ // so nothing composes an effect — and the wizard's confirm gate then mounted
180
+ // Ink to render summon-core's "No operations planned." above a "Proceed?"
181
+ // over an empty tally. For a sub-verb, whose prompt list is empty, that
182
+ // contentless gate was the FIRST AND ONLY thing the user ever saw. The
183
+ // explanation existed the whole time (each row's `none` detail, one child row
184
+ // per file/editor marked `unchanged`) and was dropped at the render seam.
185
+ //
186
+ // So: report the plan instead of asking a question with no content. There is
187
+ // no `preview: true` here — the run really did complete. `applied({})` marks
188
+ // each `none` row `{status:"noop", note:"unchanged"}`, `wasApplied` is then
189
+ // true, and `setupFormatters.plain` renders the recap. That also retires a
190
+ // second defect: a non-interactive converged run used to print the misleading
191
+ // "Nothing was applied. Run again with --yes to apply." over an all-`none`
192
+ // plan. A run whose every DETECTION threw is not converged in this sense —
193
+ // its rows are skips that report `failed` — so it falls through to the normal
194
+ // path, which is the one that raises.
195
+ if (!previewing && run.plan.rows.every((row) => !isActionable(row.action))) {
196
+ const converged = run.applied({});
197
+ if (!planExitFailed(converged))
198
+ return pure(converged);
199
+ }
177
200
  // Adaptation (b): a non-interactive run without `--yes` previews rather than
178
201
  // mutating. It is the same plan the dry-run prints, plus one hint line, at
179
202
  // exit 0 — the invocation completed a real read-only unit of work.
180
203
  if (interactionMode === "refuse") {
181
204
  return pure({ ...run.plan, preview: true });
182
205
  }
206
+ // Say what was DETECTED before asking anything about it. The data has been
207
+ // sitting in `run.plan` since before the prompt list was built — `inkPrompt`
208
+ // mounts no React until the first Prompt effect — so this is a rendering gap,
209
+ // not an ordering one, and closing it is nearly free.
210
+ //
211
+ // It MUST be emitted here, before `execute` is driven: the summary and the
212
+ // Ink frame both write to stderr, and only a line written first lands in
213
+ // scrollback ABOVE the frame. `rt.report` is the non-Ink seam — `--quiet`
214
+ // silences it and it is a no-op over MCP — so no React is loaded to print it.
215
+ // A preview says nothing here: the plan table IS its output.
216
+ if (!previewing) {
217
+ const summary = renderDetectionSummary(run.plan, {
218
+ verbose: rt.globalFlags.verbose,
219
+ });
220
+ if (summary !== undefined)
221
+ rt.report?.(summary);
222
+ }
183
223
  const { transport, yes, signal, abort } = rt.interaction ?? {
184
224
  isTTY: false,
185
225
  transport: "cli",
@@ -195,6 +235,19 @@ async function runSetup(mode, rt, scope) {
195
235
  signal,
196
236
  onCancel: abort,
197
237
  });
238
+ // Live progress in the PLAN's units, not the interpreter's: the wizard's
239
+ // default execution view is the per-effect transcript — right for `create`,
240
+ // whose unit of work IS the file, and wrong here, where one unit is one
241
+ // configured target and the transcript renders eighteen symlink rows for
242
+ // the row the plan called `skills link 9 skills → 2 folders`. Each row
243
+ // event carries the SAME sentence `renderProgressLine` prints, so the
244
+ // watcher and the recap reader see one dialect. `--verbose` withholds the
245
+ // listener, which falls the wizard back to the full effect transcript —
246
+ // the same detected-only-unless-verbose rule the detection summary and
247
+ // doctor already follow.
248
+ if (rt.globalFlags.verbose !== true) {
249
+ run.setRowListener((event) => session.reportStep(event));
250
+ }
198
251
  rt.exec = {
199
252
  promptHandler: session.promptHandler,
200
253
  onEffectStart: session.onEffectStart,
@@ -294,29 +347,29 @@ function setupVerb(path, summary, mode, capability, extras = {}) {
294
347
  run: (params, rt) => runSetup(mode, rt, resolveScope(params)),
295
348
  };
296
349
  }
297
- const setupAllVerb = setupVerb(["setup"], "Configure the global config, completions, the LSP, MCP, and skills.", "all", SELF_CAPABILITY, {
298
- doc: "Plans every target in the selected band, then applies the ones you keep. The user/home band is the default; the scope option chooses the per-project band, or both. A run with no attended terminal prints the plan and applies nothing unless the run is confirmed.",
350
+ const setupAllVerb = setupVerb(["setup"], "Set up your config file, TAB completion, the editor extension, MCP, and skills.", "all", SELF_CAPABILITY, {
351
+ doc: "Shows what each target needs, then applies the ones you keep. Everything is configured in your home directory by default; the scope option moves the run to this project alone, or covers both. Without an attended terminal the plan is printed and nothing is written unless the run is explicitly confirmed.",
299
352
  examples: [
300
353
  { cmd: `${BIN_NAME} setup` },
301
354
  {
302
355
  cmd: `${BIN_NAME} setup --dry-run`,
303
- note: "print the plan, write nothing",
356
+ note: "show the plan, write nothing",
304
357
  },
305
358
  {
306
359
  cmd: `${BIN_NAME} setup --local`,
307
- note: "configure the project band instead",
360
+ note: "configure this project instead of your home directory",
308
361
  },
309
362
  {
310
363
  cmd: `${BIN_NAME} setup mcp`,
311
- note: "just the MCP server registration",
364
+ note: "only register the MCP server",
312
365
  },
313
366
  ],
314
367
  });
315
- const configVerb = setupVerb(["setup", "config"], "Create the global config file with its defaults.", "config", SUB_CAPABILITY);
316
- const mcpVerb = setupVerb(["setup", "mcp"], `Register the ${BIN_NAME} MCP server in detected AI harnesses.`, "mcp", SUB_CAPABILITY);
317
- const completionsVerb = setupVerb(["setup", "completions"], "Install the shell-completion script for your shell.", "completions", SUB_CAPABILITY);
318
- const skillsVerb = setupVerb(["setup", "skills"], "Symlink discovered skills into each AI harness.", "skills", SUB_CAPABILITY);
319
- const lspVerb = setupVerb(["setup", "lsp"], "Ensure the Terrazzo LSP VS Code extension is installed.", "lsp", SUB_CAPABILITY);
368
+ const configVerb = setupVerb(["setup", "config"], "Create your global config file, filled in with the defaults.", "config", SUB_CAPABILITY);
369
+ const mcpVerb = setupVerb(["setup", "mcp"], `Register the ${BIN_NAME} MCP server with the AI harnesses on this machine.`, "mcp", SUB_CAPABILITY);
370
+ const completionsVerb = setupVerb(["setup", "completions"], "Install TAB completion for the shell you are running.", "completions", SUB_CAPABILITY);
371
+ const skillsVerb = setupVerb(["setup", "skills"], "Link the skills you have installed into every AI harness that reads them.", "skills", SUB_CAPABILITY);
372
+ const lspVerb = setupVerb(["setup", "lsp"], "Install the Terrazzo design-token extension into your VS Code-family editors.", "lsp", SUB_CAPABILITY);
320
373
  /** The `setup` capability module (run-all self-verb + five CLI-only sub-verbs). */
321
374
  export const setupModule = {
322
375
  name: "setup",
@@ -1 +1 @@
1
- {"version":3,"file":"setup.verb.js","sourceRoot":"","sources":["../../../../src/capabilities/setup/setup.verb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.verb.js","sourceRoot":"","sources":["../../../../src/capabilities/setup/setup.verb.ts"],"names":[],"mappings":"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"}