@canonical/pragma-cli 0.35.0 → 0.37.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 (295) 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 +24 -20
  13. package/dist/pragma.conf.js +266 -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/capabilities/hints.js +1 -1
  18. package/dist/src/capabilities/capabilities/hints.js.map +1 -1
  19. package/dist/src/capabilities/colophon/colophon.render.js +1 -1
  20. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -1
  21. package/dist/src/capabilities/create/create.verb.js +2 -1
  22. package/dist/src/capabilities/create/create.verb.js.map +1 -1
  23. package/dist/src/capabilities/create/createSurface.generated.js +23 -1
  24. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -1
  25. package/dist/src/capabilities/create/mount.js +4 -3
  26. package/dist/src/capabilities/create/mount.js.map +1 -1
  27. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +11 -6
  28. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -1
  29. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +60 -4
  30. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -1
  31. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +8 -8
  32. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -1
  33. package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
  34. package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
  35. package/dist/src/capabilities/doctor/checks/index.js +6 -6
  36. package/dist/src/capabilities/doctor/checks/isSupportedNodeVersion.js +38 -0
  37. package/dist/src/capabilities/doctor/checks/isSupportedNodeVersion.js.map +1 -0
  38. package/dist/src/capabilities/doctor/checks/targetHealth.js +194 -50
  39. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -1
  40. package/dist/src/capabilities/doctor/doctor.render.js +43 -64
  41. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -1
  42. package/dist/src/capabilities/doctor/doctor.verb.js +6 -2
  43. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -1
  44. package/dist/src/capabilities/doctor/runChecks.js +14 -11
  45. package/dist/src/capabilities/doctor/runChecks.js.map +1 -1
  46. package/dist/src/capabilities/graph/query.render.js +2 -2
  47. package/dist/src/capabilities/graph/query.render.js.map +1 -1
  48. package/dist/src/capabilities/info/collectInfo.js +8 -2
  49. package/dist/src/capabilities/info/collectInfo.js.map +1 -1
  50. package/dist/src/capabilities/info/info.render.js +6 -2
  51. package/dist/src/capabilities/info/info.render.js.map +1 -1
  52. package/dist/src/capabilities/prompt/prompt.render.js +2 -2
  53. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -1
  54. package/dist/src/capabilities/setup/buildPlan.js +43 -39
  55. package/dist/src/capabilities/setup/buildPlan.js.map +1 -1
  56. package/dist/src/capabilities/setup/mode.js +2 -2
  57. package/dist/src/capabilities/setup/operations/index.js +4 -4
  58. package/dist/src/capabilities/setup/operations/index.js.map +1 -1
  59. package/dist/src/capabilities/setup/operations/setupCompletions.js +6 -2
  60. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -1
  61. package/dist/src/capabilities/setup/operations/setupConfig.js +4 -2
  62. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -1
  63. package/dist/src/capabilities/setup/operations/setupGenerator.js +156 -58
  64. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -1
  65. package/dist/src/capabilities/setup/operations/setupLsp.js +136 -38
  66. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -1
  67. package/dist/src/capabilities/setup/operations/setupMcp.js +101 -52
  68. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -1
  69. package/dist/src/capabilities/setup/operations/setupSkills.js +329 -49
  70. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -1
  71. package/dist/src/capabilities/setup/plan.js.map +1 -1
  72. package/dist/src/capabilities/setup/plan.render.js +144 -66
  73. package/dist/src/capabilities/setup/plan.render.js.map +1 -1
  74. package/dist/src/capabilities/setup/setup.render.js +1 -1
  75. package/dist/src/capabilities/setup/setup.verb.js +165 -63
  76. package/dist/src/capabilities/setup/setup.verb.js.map +1 -1
  77. package/dist/src/capabilities/setup/targets.js +122 -51
  78. package/dist/src/capabilities/setup/targets.js.map +1 -1
  79. package/dist/src/capabilities/shared/index.js +7 -6
  80. package/dist/src/capabilities/shared/index.js.map +1 -1
  81. package/dist/src/capabilities/shared/packageManager.js +300 -54
  82. package/dist/src/capabilities/shared/packageManager.js.map +1 -1
  83. package/dist/src/capabilities/skill/discover.js +97 -11
  84. package/dist/src/capabilities/skill/discover.js.map +1 -1
  85. package/dist/src/capabilities/skill/render.js +2 -2
  86. package/dist/src/capabilities/skill/render.js.map +1 -1
  87. package/dist/src/capabilities/sources/installSkills.js +145 -3
  88. package/dist/src/capabilities/sources/installSkills.js.map +1 -1
  89. package/dist/src/capabilities/sources/runUpdate.js +68 -2
  90. package/dist/src/capabilities/sources/runUpdate.js.map +1 -1
  91. package/dist/src/capabilities/sources/update.verb.js +3 -3
  92. package/dist/src/capabilities/sources/update.verb.js.map +1 -1
  93. package/dist/src/capabilities/upgrade/runUpgrade.js +43 -7
  94. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -1
  95. package/dist/src/capabilities/upgrade/upgrade.render.js +10 -2
  96. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -1
  97. package/dist/src/constants.js +13 -2
  98. package/dist/src/constants.js.map +1 -1
  99. package/dist/src/kernel/index.js +11 -2
  100. package/dist/src/kernel/index.js.map +1 -1
  101. package/dist/src/kernel/interactivity.js +68 -0
  102. package/dist/src/kernel/interactivity.js.map +1 -0
  103. package/dist/src/kernel/packs/renderPack.js +3 -3
  104. package/dist/src/kernel/packs/renderPack.js.map +1 -1
  105. package/dist/src/kernel/packs/resolveEntity.js +63 -12
  106. package/dist/src/kernel/packs/resolveEntity.js.map +1 -1
  107. package/dist/src/kernel/packs/runBodies.js +57 -4
  108. package/dist/src/kernel/packs/runBodies.js.map +1 -1
  109. package/dist/src/kernel/packs/schema.js +54 -2
  110. package/dist/src/kernel/packs/schema.js.map +1 -1
  111. package/dist/src/kernel/packs/sparql/applyFilters.js +104 -5
  112. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -1
  113. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +310 -43
  114. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -1
  115. package/dist/src/kernel/packs/types.js.map +1 -1
  116. package/dist/src/kernel/project/cli/buildProgram.js +1 -1
  117. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -1
  118. package/dist/src/kernel/project/cli/dispatch.js +46 -24
  119. package/dist/src/kernel/project/cli/dispatch.js.map +1 -1
  120. package/dist/src/kernel/project/cli/globalFlags.js +4 -1
  121. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -1
  122. package/dist/src/kernel/project/cli/helpFormat.js +1 -2
  123. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -1
  124. package/dist/src/kernel/project/cli/rootHelp.js +42 -9
  125. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -1
  126. package/dist/src/kernel/project/mcp/registerVerb.js +16 -1
  127. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -1
  128. package/dist/src/kernel/render/renderers.js +1 -1
  129. package/dist/src/kernel/render/style.js +29 -9
  130. package/dist/src/kernel/render/style.js.map +1 -1
  131. package/dist/src/kernel/render/vocabulary.js +174 -0
  132. package/dist/src/kernel/render/vocabulary.js.map +1 -0
  133. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +2 -3
  134. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -1
  135. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +1 -1
  136. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -1
  137. package/dist/src/kernel/runtime/graphpack/embedded/pack.manifest.generated.js +4 -0
  138. package/dist/src/kernel/runtime/graphpack/embedded/pack.manifest.generated.js.map +1 -0
  139. package/dist/src/kernel/runtime/graphpack/embedded.js +13 -6
  140. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -1
  141. package/dist/src/kernel/runtime/graphpack/read.js +14 -9
  142. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -1
  143. package/dist/src/kernel/runtime/loadSession.js +3 -1
  144. package/dist/src/kernel/runtime/loadSession.js.map +1 -1
  145. package/dist/src/kernel/runtime/probe.js +1 -1
  146. package/dist/src/kernel/runtime/probe.js.map +1 -1
  147. package/dist/src/kernel/runtime/refs/parseRef.js +17 -1
  148. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -1
  149. package/dist/src/kernel/runtime/refs/resolve.js +9 -3
  150. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -1
  151. package/dist/src/kernel/spec/emitReference.js +1 -1
  152. package/dist/src/kernel/spec/emitReference.js.map +1 -1
  153. package/package.json +24 -20
  154. package/pragma.conf.ts +272 -34
  155. package/src/bin.ts +8 -1
  156. package/src/capabilities/block.parity.test.ts +25 -11
  157. package/src/capabilities/block.shipped.exec.test.ts +282 -0
  158. package/src/capabilities/block.tierRank.exec.test.ts +300 -0
  159. package/src/capabilities/capabilities/hints.ts +1 -1
  160. package/src/capabilities/colophon/colophon.render.ts +1 -2
  161. package/src/capabilities/colophon/colophon.test.ts +2 -2
  162. package/src/capabilities/config/collectConfigShow.test.ts +1 -0
  163. package/src/capabilities/create/byteEquality.test.ts +28 -1
  164. package/src/capabilities/create/create.test.ts +1 -0
  165. package/src/capabilities/create/create.verb.ts +2 -1
  166. package/src/capabilities/create/createGrammar.test.ts +5 -2
  167. package/src/capabilities/create/createSurface.generated.ts +23 -1
  168. package/src/capabilities/create/crossCli.subprocess.test.ts +10 -3
  169. package/src/capabilities/create/mount.ts +3 -3
  170. package/src/capabilities/distribution.parity.test.ts +4 -0
  171. package/src/capabilities/doctor/checks/checkNodeVersion.test.ts +49 -0
  172. package/src/capabilities/doctor/checks/checkNodeVersion.ts +11 -7
  173. package/src/capabilities/doctor/checks/checkPackageRefs.ts +69 -4
  174. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +6 -4
  175. package/src/capabilities/doctor/checks/checkShellCompletions.ts +8 -8
  176. package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
  177. package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
  178. package/src/capabilities/doctor/checks/index.ts +6 -6
  179. package/src/capabilities/doctor/checks/isSupportedNodeVersion.test.ts +111 -0
  180. package/src/capabilities/doctor/checks/isSupportedNodeVersion.ts +34 -0
  181. package/src/capabilities/doctor/checks/mcpCommand.test.ts +7 -1
  182. package/src/capabilities/doctor/checks/targetHealth.ts +229 -59
  183. package/src/capabilities/doctor/doctor.render.test.ts +108 -32
  184. package/src/capabilities/doctor/doctor.render.ts +56 -80
  185. package/src/capabilities/doctor/doctor.test.ts +247 -35
  186. package/src/capabilities/doctor/doctor.verb.ts +7 -2
  187. package/src/capabilities/doctor/runChecks.ts +14 -11
  188. package/src/capabilities/doctor/types.ts +15 -24
  189. package/src/capabilities/emptyRecovery.test.ts +10 -2
  190. package/src/capabilities/graph/query.render.ts +2 -2
  191. package/src/capabilities/info/collectInfo.ts +8 -1
  192. package/src/capabilities/info/info.render.ts +6 -2
  193. package/src/capabilities/info/info.test.ts +37 -1
  194. package/src/capabilities/info/types.ts +10 -2
  195. package/src/capabilities/lazy.test.ts +26 -2
  196. package/src/capabilities/listLookup.shipped.exec.test.ts +340 -0
  197. package/src/capabilities/prompt/prompt.render.ts +2 -2
  198. package/src/capabilities/renderVocabularySync.test.ts +82 -0
  199. package/src/capabilities/resources/resources.test.ts +38 -2
  200. package/src/capabilities/scopeTypeSync.test.ts +29 -15
  201. package/src/capabilities/setup/buildPlan.ts +45 -41
  202. package/src/capabilities/setup/index.ts +1 -1
  203. package/src/capabilities/setup/mode.ts +2 -2
  204. package/src/capabilities/setup/operations/index.ts +6 -1
  205. package/src/capabilities/setup/operations/setupCompletions.ts +9 -2
  206. package/src/capabilities/setup/operations/setupConfig.ts +7 -2
  207. package/src/capabilities/setup/operations/setupGenerator.ts +227 -84
  208. package/src/capabilities/setup/operations/setupLsp.ts +203 -38
  209. package/src/capabilities/setup/operations/setupMcp.ts +139 -62
  210. package/src/capabilities/setup/operations/setupSkills.ts +399 -60
  211. package/src/capabilities/setup/plan.render.ts +171 -76
  212. package/src/capabilities/setup/plan.ts +17 -12
  213. package/src/capabilities/setup/setup.mcp.correctness.test.ts +9 -9
  214. package/src/capabilities/setup/setup.render.test.ts +50 -36
  215. package/src/capabilities/setup/setup.render.ts +1 -1
  216. package/src/capabilities/setup/setup.test.ts +1126 -50
  217. package/src/capabilities/setup/setup.verb.ts +174 -68
  218. package/src/capabilities/setup/targets.ts +138 -60
  219. package/src/capabilities/setup/types.ts +10 -18
  220. package/src/capabilities/shared/index.ts +18 -6
  221. package/src/capabilities/shared/packageManager.test.ts +421 -6
  222. package/src/capabilities/shared/packageManager.ts +394 -59
  223. package/src/capabilities/skill/bundledSkills.test.ts +347 -0
  224. package/src/capabilities/skill/discover.ts +100 -11
  225. package/src/capabilities/skill/render.ts +2 -2
  226. package/src/capabilities/skill/skill.test.ts +17 -4
  227. package/src/capabilities/sources/installSkills.ts +181 -3
  228. package/src/capabilities/sources/runUpdate.ts +78 -2
  229. package/src/capabilities/sources/sources.test.ts +228 -0
  230. package/src/capabilities/sources/update.verb.ts +3 -3
  231. package/src/capabilities/surface.test.ts +14 -6
  232. package/src/capabilities/upgrade/runUpgrade.ts +45 -6
  233. package/src/capabilities/upgrade/types.ts +10 -2
  234. package/src/capabilities/upgrade/upgrade.render.ts +9 -2
  235. package/src/capabilities/upgrade/upgrade.test.ts +72 -0
  236. package/src/constants.ts +14 -1
  237. package/src/identity.test.ts +18 -5
  238. package/src/kernel/completion/entitySource.test.ts +15 -2
  239. package/src/kernel/completion/safety.test.ts +16 -9
  240. package/src/kernel/config/defaults.test.ts +19 -3
  241. package/src/kernel/config/readConfig.test.ts +1 -1
  242. package/src/kernel/index.ts +11 -2
  243. package/src/kernel/interactivity.test.ts +76 -0
  244. package/src/kernel/interactivity.ts +69 -0
  245. package/src/kernel/packs/compile.test.ts +92 -0
  246. package/src/kernel/packs/renderPack.ts +3 -3
  247. package/src/kernel/packs/resolveEntity.test.ts +75 -14
  248. package/src/kernel/packs/resolveEntity.ts +88 -24
  249. package/src/kernel/packs/runBodies.ts +84 -19
  250. package/src/kernel/packs/schema.ts +60 -4
  251. package/src/kernel/packs/sparql/applyFilters.ts +125 -4
  252. package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
  253. package/src/kernel/packs/sparql/buildLookupQuery.ts +327 -45
  254. package/src/kernel/packs/toolDescription.test.ts +35 -1
  255. package/src/kernel/packs/types.ts +125 -2
  256. package/src/kernel/project/cli/buildProgram.test.ts +73 -2
  257. package/src/kernel/project/cli/buildProgram.ts +8 -1
  258. package/src/kernel/project/cli/dispatch.test.ts +5 -4
  259. package/src/kernel/project/cli/dispatch.ts +48 -25
  260. package/src/kernel/project/cli/globalFlags.ts +4 -1
  261. package/src/kernel/project/cli/helpFormat.ts +1 -2
  262. package/src/kernel/project/cli/rootHelp.ts +44 -8
  263. package/src/kernel/project/mcp/registerVerb.ts +20 -1
  264. package/src/kernel/render/prefixes.test.ts +2 -0
  265. package/src/kernel/render/renderers.ts +1 -1
  266. package/src/kernel/render/style.ts +32 -9
  267. package/src/kernel/render/vocabulary.ts +276 -0
  268. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +2 -3
  269. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
  270. package/src/kernel/runtime/graphpack/embedded/pack.manifest.generated.ts +3 -0
  271. package/src/kernel/runtime/graphpack/embedded.ts +14 -6
  272. package/src/kernel/runtime/graphpack/graphpack.test.ts +31 -5
  273. package/src/kernel/runtime/graphpack/read.ts +14 -12
  274. package/src/kernel/runtime/loadSession.ts +3 -1
  275. package/src/kernel/runtime/probe.ts +1 -1
  276. package/src/kernel/runtime/refs/parseRef.test.ts +49 -1
  277. package/src/kernel/runtime/refs/parseRef.ts +25 -1
  278. package/src/kernel/runtime/refs/resolve.ts +9 -3
  279. package/src/kernel/runtime/types.ts +17 -0
  280. package/src/kernel/spec/emitReference.ts +1 -1
  281. package/src/kernel/spec/types.ts +35 -6
  282. package/src/testing/PARITY_GAPS.ts +9 -3
  283. package/src/testing/behavioral/docExamples.test.ts +4 -2
  284. package/src/testing/behavioral/errorMatrix.mcp.test.ts +110 -7
  285. package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
  286. package/src/testing/behavioral/journeys.packageStories.test.ts +6 -3
  287. package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
  288. package/src/testing/eval/cases/readNouns.ts +245 -9
  289. package/src/testing/fixtures/blockGraph.ts +28 -13
  290. package/src/testing/fixtures/graph/canonical.ts +95 -12
  291. package/src/testing/helpers/runCli.test.ts +44 -0
  292. package/src/testing/helpers/runCli.ts +27 -3
  293. package/dist/src/capabilities/shared/bands.js +0 -16
  294. package/dist/src/capabilities/shared/bands.js.map +0 -1
  295. 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.