@canonical/pragma-cli 0.34.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 (832) hide show
  1. package/README.md +153 -30
  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/.build-ok +0 -0
  13. package/dist/package.json +84 -0
  14. package/dist/pragma.conf.js +1016 -0
  15. package/dist/pragma.conf.js.map +1 -0
  16. package/dist/src/bin.js +356 -0
  17. package/dist/src/bin.js.map +1 -0
  18. package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
  19. package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
  20. package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
  21. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
  22. package/dist/src/capabilities/capabilities/catalog.js +130 -0
  23. package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
  24. package/dist/src/capabilities/capabilities/hints.js +195 -0
  25. package/dist/src/capabilities/capabilities/hints.js.map +1 -0
  26. package/dist/src/capabilities/capabilities/index.js +11 -0
  27. package/dist/src/capabilities/capabilities/index.js.map +1 -0
  28. package/dist/src/capabilities/capabilities/types.js +11 -0
  29. package/dist/src/capabilities/capabilities/types.js.map +1 -0
  30. package/dist/src/capabilities/colophon/collectColophon.js +83 -0
  31. package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
  32. package/dist/src/capabilities/colophon/colophon.render.js +59 -0
  33. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
  34. package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
  35. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
  36. package/dist/src/capabilities/colophon/index.js +5 -0
  37. package/dist/src/capabilities/colophon/index.js.map +1 -0
  38. package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
  39. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
  40. package/dist/src/capabilities/colophon/types.js +10 -0
  41. package/dist/src/capabilities/colophon/types.js.map +1 -0
  42. package/dist/src/capabilities/config/collectConfigShow.js +59 -0
  43. package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
  44. package/dist/src/capabilities/config/field.render.js +22 -0
  45. package/dist/src/capabilities/config/field.render.js.map +1 -0
  46. package/dist/src/capabilities/config/fields.js +46 -0
  47. package/dist/src/capabilities/config/fields.js.map +1 -0
  48. package/dist/src/capabilities/config/get.verb.js +61 -0
  49. package/dist/src/capabilities/config/get.verb.js.map +1 -0
  50. package/dist/src/capabilities/config/index.js +5 -0
  51. package/dist/src/capabilities/config/index.js.map +1 -0
  52. package/dist/src/capabilities/config/runField.js +59 -0
  53. package/dist/src/capabilities/config/runField.js.map +1 -0
  54. package/dist/src/capabilities/config/runGet.js +28 -0
  55. package/dist/src/capabilities/config/runGet.js.map +1 -0
  56. package/dist/src/capabilities/config/runSet.js +53 -0
  57. package/dist/src/capabilities/config/runSet.js.map +1 -0
  58. package/dist/src/capabilities/config/set.verb.js +66 -0
  59. package/dist/src/capabilities/config/set.verb.js.map +1 -0
  60. package/dist/src/capabilities/config/show.render.js +84 -0
  61. package/dist/src/capabilities/config/show.render.js.map +1 -0
  62. package/dist/src/capabilities/config/show.verb.js +44 -0
  63. package/dist/src/capabilities/config/show.verb.js.map +1 -0
  64. package/dist/src/capabilities/config/types.js +5 -0
  65. package/dist/src/capabilities/config/types.js.map +1 -0
  66. package/dist/src/capabilities/config/unset.verb.js +49 -0
  67. package/dist/src/capabilities/config/unset.verb.js.map +1 -0
  68. package/dist/src/capabilities/create/cliProjection.js +195 -0
  69. package/dist/src/capabilities/create/cliProjection.js.map +1 -0
  70. package/dist/src/capabilities/create/constants.js +47 -0
  71. package/dist/src/capabilities/create/constants.js.map +1 -0
  72. package/dist/src/capabilities/create/create.render.js +100 -0
  73. package/dist/src/capabilities/create/create.render.js.map +1 -0
  74. package/dist/src/capabilities/create/create.verb.js +438 -0
  75. package/dist/src/capabilities/create/create.verb.js.map +1 -0
  76. package/dist/src/capabilities/create/createHelp.js +47 -0
  77. package/dist/src/capabilities/create/createHelp.js.map +1 -0
  78. package/dist/src/capabilities/create/createSurface.generated.js +394 -0
  79. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
  80. package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
  81. package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
  82. package/dist/src/capabilities/create/index.js +18 -0
  83. package/dist/src/capabilities/create/index.js.map +1 -0
  84. package/dist/src/capabilities/create/messages.js +16 -0
  85. package/dist/src/capabilities/create/messages.js.map +1 -0
  86. package/dist/src/capabilities/create/mount.js +294 -0
  87. package/dist/src/capabilities/create/mount.js.map +1 -0
  88. package/dist/src/capabilities/create/pathJail.js +65 -0
  89. package/dist/src/capabilities/create/pathJail.js.map +1 -0
  90. package/dist/src/capabilities/create/pickGenerator.js +53 -0
  91. package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
  92. package/dist/src/capabilities/create/types.js +2 -0
  93. package/dist/src/capabilities/create/types.js.map +1 -0
  94. package/dist/src/capabilities/distribution.js +40 -0
  95. package/dist/src/capabilities/distribution.js.map +1 -0
  96. package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
  97. package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
  98. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
  99. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
  100. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +148 -0
  101. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
  102. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
  103. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
  104. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
  105. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
  106. package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
  107. package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
  108. package/dist/src/capabilities/doctor/checks/index.js +27 -0
  109. package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
  110. package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
  111. package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
  112. package/dist/src/capabilities/doctor/checks/targetHealth.js +349 -0
  113. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
  114. package/dist/src/capabilities/doctor/doctor.render.js +164 -0
  115. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
  116. package/dist/src/capabilities/doctor/doctor.verb.js +49 -0
  117. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
  118. package/dist/src/capabilities/doctor/index.js +5 -0
  119. package/dist/src/capabilities/doctor/index.js.map +1 -0
  120. package/dist/src/capabilities/doctor/runChecks.js +86 -0
  121. package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
  122. package/dist/src/capabilities/doctor/types.js +5 -0
  123. package/dist/src/capabilities/doctor/types.js.map +1 -0
  124. package/dist/src/capabilities/graph/index.js +19 -0
  125. package/dist/src/capabilities/graph/index.js.map +1 -0
  126. package/dist/src/capabilities/graph/inspect.render.js +76 -0
  127. package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
  128. package/dist/src/capabilities/graph/inspect.verb.js +53 -0
  129. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
  130. package/dist/src/capabilities/graph/query.render.js +73 -0
  131. package/dist/src/capabilities/graph/query.render.js.map +1 -0
  132. package/dist/src/capabilities/graph/query.verb.js +49 -0
  133. package/dist/src/capabilities/graph/query.verb.js.map +1 -0
  134. package/dist/src/capabilities/graph/runQuery.js +41 -0
  135. package/dist/src/capabilities/graph/runQuery.js.map +1 -0
  136. package/dist/src/capabilities/index.js +56 -0
  137. package/dist/src/capabilities/index.js.map +1 -0
  138. package/dist/src/capabilities/info/collectInfo.js +72 -0
  139. package/dist/src/capabilities/info/collectInfo.js.map +1 -0
  140. package/dist/src/capabilities/info/index.js +5 -0
  141. package/dist/src/capabilities/info/index.js.map +1 -0
  142. package/dist/src/capabilities/info/info.render.js +57 -0
  143. package/dist/src/capabilities/info/info.render.js.map +1 -0
  144. package/dist/src/capabilities/info/info.verb.js +42 -0
  145. package/dist/src/capabilities/info/info.verb.js.map +1 -0
  146. package/dist/src/capabilities/info/types.js +5 -0
  147. package/dist/src/capabilities/info/types.js.map +1 -0
  148. package/dist/src/capabilities/meta/complete.verb.js +43 -0
  149. package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
  150. package/dist/src/capabilities/meta/index.js +13 -0
  151. package/dist/src/capabilities/meta/index.js.map +1 -0
  152. package/dist/src/capabilities/meta/mcp.verb.js +34 -0
  153. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
  154. package/dist/src/capabilities/ontology/index.js +21 -0
  155. package/dist/src/capabilities/ontology/index.js.map +1 -0
  156. package/dist/src/capabilities/ontology/queries.js +123 -0
  157. package/dist/src/capabilities/ontology/queries.js.map +1 -0
  158. package/dist/src/capabilities/ontology/render.js +66 -0
  159. package/dist/src/capabilities/ontology/render.js.map +1 -0
  160. package/dist/src/capabilities/ontology/verbs.js +181 -0
  161. package/dist/src/capabilities/ontology/verbs.js.map +1 -0
  162. package/dist/src/capabilities/prompt/index.js +16 -0
  163. package/dist/src/capabilities/prompt/index.js.map +1 -0
  164. package/dist/src/capabilities/prompt/prompt.render.js +78 -0
  165. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
  166. package/dist/src/capabilities/prompt/types.js +10 -0
  167. package/dist/src/capabilities/prompt/types.js.map +1 -0
  168. package/dist/src/capabilities/prompt/verbs.js +93 -0
  169. package/dist/src/capabilities/prompt/verbs.js.map +1 -0
  170. package/dist/src/capabilities/resources/index.js +10 -0
  171. package/dist/src/capabilities/resources/index.js.map +1 -0
  172. package/dist/src/capabilities/resources/provider.js +423 -0
  173. package/dist/src/capabilities/resources/provider.js.map +1 -0
  174. package/dist/src/capabilities/setup/buildPlan.js +172 -0
  175. package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
  176. package/dist/src/capabilities/setup/index.js +5 -0
  177. package/dist/src/capabilities/setup/index.js.map +1 -0
  178. package/dist/src/capabilities/setup/mode.js +53 -0
  179. package/dist/src/capabilities/setup/mode.js.map +1 -0
  180. package/dist/src/capabilities/setup/operations/index.js +39 -0
  181. package/dist/src/capabilities/setup/operations/index.js.map +1 -0
  182. package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
  183. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
  184. package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
  185. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
  186. package/dist/src/capabilities/setup/operations/setupGenerator.js +390 -0
  187. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
  188. package/dist/src/capabilities/setup/operations/setupLsp.js +329 -0
  189. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
  190. package/dist/src/capabilities/setup/operations/setupMcp.js +253 -0
  191. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
  192. package/dist/src/capabilities/setup/operations/setupSkills.js +594 -0
  193. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
  194. package/dist/src/capabilities/setup/plan.js +128 -0
  195. package/dist/src/capabilities/setup/plan.js.map +1 -0
  196. package/dist/src/capabilities/setup/plan.render.js +271 -0
  197. package/dist/src/capabilities/setup/plan.render.js.map +1 -0
  198. package/dist/src/capabilities/setup/setup.render.js +54 -0
  199. package/dist/src/capabilities/setup/setup.render.js.map +1 -0
  200. package/dist/src/capabilities/setup/setup.verb.js +387 -0
  201. package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
  202. package/dist/src/capabilities/setup/shell.js +196 -0
  203. package/dist/src/capabilities/setup/shell.js.map +1 -0
  204. package/dist/src/capabilities/setup/targets.js +328 -0
  205. package/dist/src/capabilities/setup/targets.js.map +1 -0
  206. package/dist/src/capabilities/setup/types.js +5 -0
  207. package/dist/src/capabilities/setup/types.js.map +1 -0
  208. package/dist/src/capabilities/shared/assertExecOk.js +137 -0
  209. package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
  210. package/dist/src/capabilities/shared/index.js +27 -0
  211. package/dist/src/capabilities/shared/index.js.map +1 -0
  212. package/dist/src/capabilities/shared/packageManager.js +349 -0
  213. package/dist/src/capabilities/shared/packageManager.js.map +1 -0
  214. package/dist/src/capabilities/shared/registry.js +55 -0
  215. package/dist/src/capabilities/shared/registry.js.map +1 -0
  216. package/dist/src/capabilities/skill/discover.js +281 -0
  217. package/dist/src/capabilities/skill/discover.js.map +1 -0
  218. package/dist/src/capabilities/skill/index.js +10 -0
  219. package/dist/src/capabilities/skill/index.js.map +1 -0
  220. package/dist/src/capabilities/skill/render.js +49 -0
  221. package/dist/src/capabilities/skill/render.js.map +1 -0
  222. package/dist/src/capabilities/skill/verbs.js +83 -0
  223. package/dist/src/capabilities/skill/verbs.js.map +1 -0
  224. package/dist/src/capabilities/sources/collectStatus.js +103 -0
  225. package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
  226. package/dist/src/capabilities/sources/index.js +13 -0
  227. package/dist/src/capabilities/sources/index.js.map +1 -0
  228. package/dist/src/capabilities/sources/installSkills.js +309 -0
  229. package/dist/src/capabilities/sources/installSkills.js.map +1 -0
  230. package/dist/src/capabilities/sources/runUpdate.js +460 -0
  231. package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
  232. package/dist/src/capabilities/sources/status.render.js +64 -0
  233. package/dist/src/capabilities/sources/status.render.js.map +1 -0
  234. package/dist/src/capabilities/sources/status.verb.js +40 -0
  235. package/dist/src/capabilities/sources/status.verb.js.map +1 -0
  236. package/dist/src/capabilities/sources/types.js +6 -0
  237. package/dist/src/capabilities/sources/types.js.map +1 -0
  238. package/dist/src/capabilities/sources/update.render.js +34 -0
  239. package/dist/src/capabilities/sources/update.render.js.map +1 -0
  240. package/dist/src/capabilities/sources/update.verb.js +55 -0
  241. package/dist/src/capabilities/sources/update.verb.js.map +1 -0
  242. package/dist/src/capabilities/upgrade/index.js +5 -0
  243. package/dist/src/capabilities/upgrade/index.js.map +1 -0
  244. package/dist/src/capabilities/upgrade/runUpgrade.js +135 -0
  245. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
  246. package/dist/src/capabilities/upgrade/types.js +5 -0
  247. package/dist/src/capabilities/upgrade/types.js.map +1 -0
  248. package/dist/src/capabilities/upgrade/upgrade.render.js +52 -0
  249. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
  250. package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
  251. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
  252. package/dist/src/capabilities/version/index.js +10 -0
  253. package/dist/src/capabilities/version/index.js.map +1 -0
  254. package/dist/src/capabilities/version/version.verb.js +36 -0
  255. package/dist/src/capabilities/version/version.verb.js.map +1 -0
  256. package/dist/src/constants.js +87 -0
  257. package/dist/src/constants.js.map +1 -0
  258. package/dist/src/index.js +12 -0
  259. package/dist/src/index.js.map +1 -0
  260. package/dist/src/kernel/completion/complete.js +66 -0
  261. package/dist/src/kernel/completion/complete.js.map +1 -0
  262. package/dist/src/kernel/completion/emitScripts.js +92 -0
  263. package/dist/src/kernel/completion/emitScripts.js.map +1 -0
  264. package/dist/src/kernel/completion/entitySource.js +285 -0
  265. package/dist/src/kernel/completion/entitySource.js.map +1 -0
  266. package/dist/src/kernel/completion/index.js +14 -0
  267. package/dist/src/kernel/completion/index.js.map +1 -0
  268. package/dist/src/kernel/completion/model.js +301 -0
  269. package/dist/src/kernel/completion/model.js.map +1 -0
  270. package/dist/src/kernel/completion/parse.js +253 -0
  271. package/dist/src/kernel/completion/parse.js.map +1 -0
  272. package/dist/src/kernel/completion/rank.js +101 -0
  273. package/dist/src/kernel/completion/rank.js.map +1 -0
  274. package/dist/src/kernel/completion/resolve.js +100 -0
  275. package/dist/src/kernel/completion/resolve.js.map +1 -0
  276. package/dist/src/kernel/completion/templates/bash.js +209 -0
  277. package/dist/src/kernel/completion/templates/bash.js.map +1 -0
  278. package/dist/src/kernel/completion/templates/fish.js +214 -0
  279. package/dist/src/kernel/completion/templates/fish.js.map +1 -0
  280. package/dist/src/kernel/completion/templates/index.js +23 -0
  281. package/dist/src/kernel/completion/templates/index.js.map +1 -0
  282. package/dist/src/kernel/completion/templates/shared.js +98 -0
  283. package/dist/src/kernel/completion/templates/shared.js.map +1 -0
  284. package/dist/src/kernel/completion/templates/zsh.js +201 -0
  285. package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
  286. package/dist/src/kernel/completion/types.js +13 -0
  287. package/dist/src/kernel/completion/types.js.map +1 -0
  288. package/dist/src/kernel/config/defaults.js +17 -0
  289. package/dist/src/kernel/config/defaults.js.map +1 -0
  290. package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
  291. package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
  292. package/dist/src/kernel/config/findProjectConfig.js +43 -0
  293. package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
  294. package/dist/src/kernel/config/firstRun.js +34 -0
  295. package/dist/src/kernel/config/firstRun.js.map +1 -0
  296. package/dist/src/kernel/config/globalConfig.js +79 -0
  297. package/dist/src/kernel/config/globalConfig.js.map +1 -0
  298. package/dist/src/kernel/config/index.js +16 -0
  299. package/dist/src/kernel/config/index.js.map +1 -0
  300. package/dist/src/kernel/config/paths.js +35 -0
  301. package/dist/src/kernel/config/paths.js.map +1 -0
  302. package/dist/src/kernel/config/readConfig.js +78 -0
  303. package/dist/src/kernel/config/readConfig.js.map +1 -0
  304. package/dist/src/kernel/config/schema.js +130 -0
  305. package/dist/src/kernel/config/schema.js.map +1 -0
  306. package/dist/src/kernel/config/types.js +19 -0
  307. package/dist/src/kernel/config/types.js.map +1 -0
  308. package/dist/src/kernel/config/writeConfigField.js +59 -0
  309. package/dist/src/kernel/config/writeConfigField.js.map +1 -0
  310. package/dist/src/kernel/copy.js +43 -0
  311. package/dist/src/kernel/copy.js.map +1 -0
  312. package/dist/src/kernel/error/PragmaError.js +149 -0
  313. package/dist/src/kernel/error/PragmaError.js.map +1 -0
  314. package/dist/src/kernel/error/constants.js +40 -0
  315. package/dist/src/kernel/error/constants.js.map +1 -0
  316. package/dist/src/kernel/error/fromTaskError.js +96 -0
  317. package/dist/src/kernel/error/fromTaskError.js.map +1 -0
  318. package/dist/src/kernel/error/index.js +13 -0
  319. package/dist/src/kernel/error/index.js.map +1 -0
  320. package/dist/src/kernel/error/recovery.js +52 -0
  321. package/dist/src/kernel/error/recovery.js.map +1 -0
  322. package/dist/src/kernel/error/renderError.js +115 -0
  323. package/dist/src/kernel/error/renderError.js.map +1 -0
  324. package/dist/src/kernel/error/serialize.js +25 -0
  325. package/dist/src/kernel/error/serialize.js.map +1 -0
  326. package/dist/src/kernel/error/types.js +9 -0
  327. package/dist/src/kernel/error/types.js.map +1 -0
  328. package/dist/src/kernel/index.js +34 -0
  329. package/dist/src/kernel/index.js.map +1 -0
  330. package/dist/src/kernel/interactivity.js +68 -0
  331. package/dist/src/kernel/interactivity.js.map +1 -0
  332. package/dist/src/kernel/packs/collect.js +187 -0
  333. package/dist/src/kernel/packs/collect.js.map +1 -0
  334. package/dist/src/kernel/packs/compile.js +304 -0
  335. package/dist/src/kernel/packs/compile.js.map +1 -0
  336. package/dist/src/kernel/packs/disclosure.js +76 -0
  337. package/dist/src/kernel/packs/disclosure.js.map +1 -0
  338. package/dist/src/kernel/packs/glob.js +38 -0
  339. package/dist/src/kernel/packs/glob.js.map +1 -0
  340. package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
  341. package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
  342. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
  343. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
  344. package/dist/src/kernel/packs/graphql/index.js +20 -0
  345. package/dist/src/kernel/packs/graphql/index.js.map +1 -0
  346. package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
  347. package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
  348. package/dist/src/kernel/packs/index.js +34 -0
  349. package/dist/src/kernel/packs/index.js.map +1 -0
  350. package/dist/src/kernel/packs/iri.js +110 -0
  351. package/dist/src/kernel/packs/iri.js.map +1 -0
  352. package/dist/src/kernel/packs/renderPack.js +129 -0
  353. package/dist/src/kernel/packs/renderPack.js.map +1 -0
  354. package/dist/src/kernel/packs/resolveEntity.js +274 -0
  355. package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
  356. package/dist/src/kernel/packs/runBodies.js +140 -0
  357. package/dist/src/kernel/packs/runBodies.js.map +1 -0
  358. package/dist/src/kernel/packs/sample.js +56 -0
  359. package/dist/src/kernel/packs/sample.js.map +1 -0
  360. package/dist/src/kernel/packs/schema.js +421 -0
  361. package/dist/src/kernel/packs/schema.js.map +1 -0
  362. package/dist/src/kernel/packs/sparql/applyFilters.js +167 -0
  363. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
  364. package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
  365. package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
  366. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +480 -0
  367. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
  368. package/dist/src/kernel/packs/sparql/escape.js +21 -0
  369. package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
  370. package/dist/src/kernel/packs/sparql/index.js +31 -0
  371. package/dist/src/kernel/packs/sparql/index.js.map +1 -0
  372. package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
  373. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
  374. package/dist/src/kernel/packs/types.js +30 -0
  375. package/dist/src/kernel/packs/types.js.map +1 -0
  376. package/dist/src/kernel/packs/uniqueness.js +30 -0
  377. package/dist/src/kernel/packs/uniqueness.js.map +1 -0
  378. package/dist/src/kernel/project/cli/buildProgram.js +263 -0
  379. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
  380. package/dist/src/kernel/project/cli/constants.js +27 -0
  381. package/dist/src/kernel/project/cli/constants.js.map +1 -0
  382. package/dist/src/kernel/project/cli/dispatch.js +420 -0
  383. package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
  384. package/dist/src/kernel/project/cli/exitCodes.js +66 -0
  385. package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
  386. package/dist/src/kernel/project/cli/globalFlags.js +219 -0
  387. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
  388. package/dist/src/kernel/project/cli/helpFormat.js +58 -0
  389. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
  390. package/dist/src/kernel/project/cli/index.js +14 -0
  391. package/dist/src/kernel/project/cli/index.js.map +1 -0
  392. package/dist/src/kernel/project/cli/rootHelp.js +227 -0
  393. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
  394. package/dist/src/kernel/project/cli/suggest.js +75 -0
  395. package/dist/src/kernel/project/cli/suggest.js.map +1 -0
  396. package/dist/src/kernel/project/cli/suggestNames.js +96 -0
  397. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
  398. package/dist/src/kernel/project/cli/verbHelp.js +131 -0
  399. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
  400. package/dist/src/kernel/project/mcp/buildServer.js +67 -0
  401. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
  402. package/dist/src/kernel/project/mcp/envelope.js +37 -0
  403. package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
  404. package/dist/src/kernel/project/mcp/index.js +8 -0
  405. package/dist/src/kernel/project/mcp/index.js.map +1 -0
  406. package/dist/src/kernel/project/mcp/instructions.js +44 -0
  407. package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
  408. package/dist/src/kernel/project/mcp/mcpError.js +42 -0
  409. package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
  410. package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
  411. package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
  412. package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
  413. package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
  414. package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
  415. package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
  416. package/dist/src/kernel/project/mcp/registerVerb.js +315 -0
  417. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
  418. package/dist/src/kernel/project/mcp/serve.js +35 -0
  419. package/dist/src/kernel/project/mcp/serve.js.map +1 -0
  420. package/dist/src/kernel/render/compactUri.js +24 -0
  421. package/dist/src/kernel/render/compactUri.js.map +1 -0
  422. package/dist/src/kernel/render/contracts.js +10 -0
  423. package/dist/src/kernel/render/contracts.js.map +1 -0
  424. package/dist/src/kernel/render/disclosure.js +34 -0
  425. package/dist/src/kernel/render/disclosure.js.map +1 -0
  426. package/dist/src/kernel/render/envelope.js +30 -0
  427. package/dist/src/kernel/render/envelope.js.map +1 -0
  428. package/dist/src/kernel/render/formatters.js +27 -0
  429. package/dist/src/kernel/render/formatters.js.map +1 -0
  430. package/dist/src/kernel/render/index.js +15 -0
  431. package/dist/src/kernel/render/index.js.map +1 -0
  432. package/dist/src/kernel/render/prefixes.js +46 -0
  433. package/dist/src/kernel/render/prefixes.js.map +1 -0
  434. package/dist/src/kernel/render/renderers.js +468 -0
  435. package/dist/src/kernel/render/renderers.js.map +1 -0
  436. package/dist/src/kernel/render/style.js +105 -0
  437. package/dist/src/kernel/render/style.js.map +1 -0
  438. package/dist/src/kernel/render/turtle.js +194 -0
  439. package/dist/src/kernel/render/turtle.js.map +1 -0
  440. package/dist/src/kernel/render/vocabulary.js +174 -0
  441. package/dist/src/kernel/render/vocabulary.js.map +1 -0
  442. package/dist/src/kernel/render/writeStdout.js +43 -0
  443. package/dist/src/kernel/render/writeStdout.js.map +1 -0
  444. package/dist/src/kernel/runtime/boot.js +49 -0
  445. package/dist/src/kernel/runtime/boot.js.map +1 -0
  446. package/dist/src/kernel/runtime/facade.js +39 -0
  447. package/dist/src/kernel/runtime/facade.js.map +1 -0
  448. package/dist/src/kernel/runtime/graphpack/build.js +122 -0
  449. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
  450. package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
  451. package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
  452. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
  453. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
  454. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
  455. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
  456. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
  457. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
  458. package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
  459. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
  460. package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
  461. package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
  462. package/dist/src/kernel/runtime/graphpack/index.js +11 -0
  463. package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
  464. package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
  465. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
  466. package/dist/src/kernel/runtime/graphpack/read.js +92 -0
  467. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
  468. package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
  469. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
  470. package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
  471. package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
  472. package/dist/src/kernel/runtime/graphpack/types.js +55 -0
  473. package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
  474. package/dist/src/kernel/runtime/index.js +8 -0
  475. package/dist/src/kernel/runtime/index.js.map +1 -0
  476. package/dist/src/kernel/runtime/loadSession.js +34 -0
  477. package/dist/src/kernel/runtime/loadSession.js.map +1 -0
  478. package/dist/src/kernel/runtime/paths.js +78 -0
  479. package/dist/src/kernel/runtime/paths.js.map +1 -0
  480. package/dist/src/kernel/runtime/probe.js +37 -0
  481. package/dist/src/kernel/runtime/probe.js.map +1 -0
  482. package/dist/src/kernel/runtime/readEntity.js +363 -0
  483. package/dist/src/kernel/runtime/readEntity.js.map +1 -0
  484. package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
  485. package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
  486. package/dist/src/kernel/runtime/refs/index.js +29 -0
  487. package/dist/src/kernel/runtime/refs/index.js.map +1 -0
  488. package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
  489. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
  490. package/dist/src/kernel/runtime/refs/resolve.js +332 -0
  491. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
  492. package/dist/src/kernel/runtime/resolveSources.js +62 -0
  493. package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
  494. package/dist/src/kernel/runtime/store.js +75 -0
  495. package/dist/src/kernel/runtime/store.js.map +1 -0
  496. package/dist/src/kernel/runtime/storeReadiness.js +51 -0
  497. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
  498. package/dist/src/kernel/runtime/types.js +11 -0
  499. package/dist/src/kernel/runtime/types.js.map +1 -0
  500. package/dist/src/kernel/spec/asVerb.js +21 -0
  501. package/dist/src/kernel/spec/asVerb.js.map +1 -0
  502. package/dist/src/kernel/spec/emitReference.js +578 -0
  503. package/dist/src/kernel/spec/emitReference.js.map +1 -0
  504. package/dist/src/kernel/spec/emitSurface.js +202 -0
  505. package/dist/src/kernel/spec/emitSurface.js.map +1 -0
  506. package/dist/src/kernel/spec/index.js +11 -0
  507. package/dist/src/kernel/spec/index.js.map +1 -0
  508. package/dist/src/kernel/spec/surfaceConformance.js +103 -0
  509. package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
  510. package/dist/src/kernel/spec/types.js +14 -0
  511. package/dist/src/kernel/spec/types.js.map +1 -0
  512. package/dist/src/kernel/spec/validate.js +110 -0
  513. package/dist/src/kernel/spec/validate.js.map +1 -0
  514. package/dist/src/kernel/vocabulary.js +97 -0
  515. package/dist/src/kernel/vocabulary.js.map +1 -0
  516. package/dist/src/types.js +11 -0
  517. package/dist/src/types.js.map +1 -0
  518. package/package.json +22 -23
  519. package/pragma.conf.ts +486 -90
  520. package/src/bin.ts +274 -82
  521. package/src/capabilities/block.parity.test.ts +29 -12
  522. package/src/capabilities/block.shipped.exec.test.ts +282 -0
  523. package/src/capabilities/block.tierRank.exec.test.ts +300 -0
  524. package/src/capabilities/capabilities/capabilities.render.ts +1 -1
  525. package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
  526. package/src/capabilities/capabilities/catalog.ts +3 -3
  527. package/src/capabilities/capabilities/hints.ts +32 -7
  528. package/src/capabilities/capabilities/index.ts +1 -1
  529. package/src/capabilities/colophon/collectColophon.ts +35 -24
  530. package/src/capabilities/colophon/colophon.render.ts +24 -1
  531. package/src/capabilities/colophon/colophon.test.ts +42 -21
  532. package/src/capabilities/colophon/colophon.verb.ts +4 -4
  533. package/src/capabilities/config/collectConfigShow.test.ts +1 -0
  534. package/src/capabilities/config/collectConfigShow.ts +3 -3
  535. package/src/capabilities/config/field.render.ts +4 -5
  536. package/src/capabilities/config/fields.ts +17 -10
  537. package/src/capabilities/config/get.verb.ts +70 -0
  538. package/src/capabilities/config/getUnset.test.ts +264 -0
  539. package/src/capabilities/config/index.ts +5 -1
  540. package/src/capabilities/config/runField.ts +40 -22
  541. package/src/capabilities/config/runGet.ts +34 -0
  542. package/src/capabilities/config/runSet.ts +35 -9
  543. package/src/capabilities/config/set.test.ts +48 -14
  544. package/src/capabilities/config/set.verb.ts +8 -7
  545. package/src/capabilities/config/show.render.ts +1 -1
  546. package/src/capabilities/config/show.verb.ts +9 -6
  547. package/src/capabilities/config/types.ts +18 -4
  548. package/src/capabilities/config/unset.verb.ts +58 -0
  549. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  550. package/src/capabilities/create/byteEquality.test.ts +25 -11
  551. package/src/capabilities/create/cliProjection.ts +227 -0
  552. package/src/capabilities/create/constants.ts +36 -61
  553. package/src/capabilities/create/create.mcp.test.ts +89 -5
  554. package/src/capabilities/create/create.render.ts +71 -7
  555. package/src/capabilities/create/create.test.ts +433 -219
  556. package/src/capabilities/create/create.verb.ts +297 -328
  557. package/src/capabilities/create/createGrammar.test.ts +865 -0
  558. package/src/capabilities/create/createHelp.ts +71 -0
  559. package/src/capabilities/create/createSurface.generated.ts +400 -0
  560. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  561. package/src/capabilities/create/cwdJail.test.ts +24 -5
  562. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  563. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  564. package/src/capabilities/create/index.ts +7 -4
  565. package/src/capabilities/create/messages.ts +18 -0
  566. package/src/capabilities/create/mount.ts +391 -0
  567. package/src/capabilities/create/pathJail.test.ts +90 -0
  568. package/src/capabilities/create/pathJail.ts +8 -5
  569. package/src/capabilities/create/pickGenerator.ts +23 -35
  570. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  571. package/src/capabilities/create/types.ts +20 -0
  572. package/src/capabilities/distribution.parity.test.ts +4 -0
  573. package/src/capabilities/distribution.test.ts +3 -1
  574. package/src/capabilities/distribution.ts +10 -15
  575. package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
  576. package/src/capabilities/doctor/checks/checkPackageRefs.ts +75 -8
  577. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
  578. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +76 -29
  579. package/src/capabilities/doctor/checks/checkShellCompletions.ts +63 -17
  580. package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
  581. package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
  582. package/src/capabilities/doctor/checks/index.ts +27 -0
  583. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  584. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  585. package/src/capabilities/doctor/checks/targetHealth.ts +444 -0
  586. package/src/capabilities/doctor/doctor.render.test.ts +125 -38
  587. package/src/capabilities/doctor/doctor.render.ts +74 -74
  588. package/src/capabilities/doctor/doctor.test.ts +338 -37
  589. package/src/capabilities/doctor/doctor.verb.ts +8 -3
  590. package/src/capabilities/doctor/runChecks.ts +65 -63
  591. package/src/capabilities/doctor/types.ts +22 -15
  592. package/src/capabilities/emptyRecovery.test.ts +21 -8
  593. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  594. package/src/capabilities/graph/index.ts +1 -1
  595. package/src/capabilities/graph/inspect.render.ts +70 -22
  596. package/src/capabilities/graph/inspect.test.ts +260 -5
  597. package/src/capabilities/graph/inspect.verb.ts +18 -6
  598. package/src/capabilities/graph/query.render.ts +15 -3
  599. package/src/capabilities/graph/query.verb.ts +3 -3
  600. package/src/capabilities/graph/runQuery.ts +2 -3
  601. package/src/capabilities/index.ts +3 -1
  602. package/src/capabilities/info/collectInfo.ts +13 -5
  603. package/src/capabilities/info/info.render.ts +7 -3
  604. package/src/capabilities/info/info.test.ts +37 -1
  605. package/src/capabilities/info/info.verb.ts +1 -1
  606. package/src/capabilities/info/types.ts +10 -2
  607. package/src/capabilities/lazy.test.ts +32 -0
  608. package/src/capabilities/meta/complete.verb.ts +1 -1
  609. package/src/capabilities/meta/index.ts +1 -1
  610. package/src/capabilities/meta/mcp.verb.ts +10 -8
  611. package/src/capabilities/ontology/index.ts +15 -11
  612. package/src/capabilities/ontology/ontology.test.ts +6 -55
  613. package/src/capabilities/ontology/queries.ts +2 -2
  614. package/src/capabilities/ontology/render.ts +3 -4
  615. package/src/capabilities/ontology/verbs.ts +27 -68
  616. package/src/capabilities/prompt/index.ts +2 -2
  617. package/src/capabilities/prompt/prompt.render.ts +6 -2
  618. package/src/capabilities/prompt/types.ts +1 -1
  619. package/src/capabilities/prompt/verbs.ts +4 -5
  620. package/src/capabilities/reference.test.ts +63 -0
  621. package/src/capabilities/renderVocabularySync.test.ts +82 -0
  622. package/src/capabilities/resources/provider.ts +342 -85
  623. package/src/capabilities/resources/resources.test.ts +355 -59
  624. package/src/capabilities/scopeTypeSync.test.ts +29 -15
  625. package/src/capabilities/setup/buildPlan.ts +240 -0
  626. package/src/capabilities/setup/index.ts +7 -7
  627. package/src/capabilities/setup/mode.ts +74 -0
  628. package/src/capabilities/setup/operations/index.ts +79 -0
  629. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  630. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  631. package/src/capabilities/setup/operations/setupGenerator.ts +478 -334
  632. package/src/capabilities/setup/operations/setupLsp.ts +420 -67
  633. package/src/capabilities/setup/operations/setupMcp.ts +238 -127
  634. package/src/capabilities/setup/operations/setupSkills.ts +667 -105
  635. package/src/capabilities/setup/plan.render.ts +336 -0
  636. package/src/capabilities/setup/plan.ts +241 -0
  637. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  638. package/src/capabilities/setup/setup.render.test.ts +297 -75
  639. package/src/capabilities/setup/setup.render.ts +45 -77
  640. package/src/capabilities/setup/setup.test.ts +1819 -225
  641. package/src/capabilities/setup/setup.verb.ts +288 -78
  642. package/src/capabilities/setup/shell.test.ts +86 -0
  643. package/src/capabilities/setup/shell.ts +137 -11
  644. package/src/capabilities/setup/targets.ts +435 -0
  645. package/src/capabilities/setup/types.ts +23 -70
  646. package/src/capabilities/shared/assertExecOk.ts +68 -10
  647. package/src/capabilities/shared/index.ts +43 -0
  648. package/src/capabilities/shared/packageManager.test.ts +470 -0
  649. package/src/capabilities/shared/packageManager.ts +425 -34
  650. package/src/capabilities/skill/bundledSkills.test.ts +347 -0
  651. package/src/capabilities/skill/discover.ts +131 -10
  652. package/src/capabilities/skill/index.ts +1 -1
  653. package/src/capabilities/skill/render.ts +10 -9
  654. package/src/capabilities/skill/skill.test.ts +22 -7
  655. package/src/capabilities/skill/verbs.ts +3 -4
  656. package/src/capabilities/sources/collectStatus.ts +7 -2
  657. package/src/capabilities/sources/index.ts +1 -1
  658. package/src/capabilities/sources/installSkills.ts +265 -10
  659. package/src/capabilities/sources/runUpdate.ts +131 -23
  660. package/src/capabilities/sources/sources.test.ts +382 -2
  661. package/src/capabilities/sources/status.render.ts +1 -1
  662. package/src/capabilities/sources/status.verb.ts +1 -1
  663. package/src/capabilities/sources/update.render.ts +1 -1
  664. package/src/capabilities/sources/update.verb.ts +4 -4
  665. package/src/capabilities/surface.test.ts +136 -19
  666. package/src/capabilities/upgrade/runUpgrade.ts +53 -14
  667. package/src/capabilities/upgrade/types.ts +10 -2
  668. package/src/capabilities/upgrade/upgrade.render.ts +13 -7
  669. package/src/capabilities/upgrade/upgrade.test.ts +75 -3
  670. package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
  671. package/src/capabilities/version/index.ts +12 -0
  672. package/src/capabilities/version/version.test.ts +66 -0
  673. package/src/capabilities/version/version.verb.ts +39 -0
  674. package/src/constants.ts +36 -1
  675. package/src/identity.test.ts +57 -29
  676. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
  677. package/src/kernel/completion/complete.test.ts +12 -2
  678. package/src/kernel/completion/complete.ts +1 -1
  679. package/src/kernel/completion/emitScripts.ts +1 -1
  680. package/src/kernel/completion/entitySource.test.ts +16 -3
  681. package/src/kernel/completion/entitySource.ts +21 -8
  682. package/src/kernel/completion/model.test.ts +164 -12
  683. package/src/kernel/completion/model.ts +94 -14
  684. package/src/kernel/completion/parse.test.ts +4 -7
  685. package/src/kernel/completion/parse.ts +15 -0
  686. package/src/kernel/completion/resolve.test.ts +0 -1
  687. package/src/kernel/completion/safety.test.ts +50 -35
  688. package/src/kernel/completion/shellDrive.test.ts +28 -9
  689. package/src/kernel/completion/templates/bash.ts +7 -2
  690. package/src/kernel/completion/templates/index.ts +23 -0
  691. package/src/kernel/completion/types.ts +7 -0
  692. package/src/kernel/config/defaults.test.ts +27 -3
  693. package/src/kernel/config/defaults.ts +4 -3
  694. package/src/kernel/config/evaluateProjectConfig.ts +31 -8
  695. package/src/kernel/config/firstRun.test.ts +44 -38
  696. package/src/kernel/config/firstRun.ts +24 -88
  697. package/src/kernel/config/index.ts +1 -1
  698. package/src/kernel/config/readConfig.test.ts +6 -3
  699. package/src/kernel/config/readConfig.ts +1 -1
  700. package/src/kernel/config/schema.ts +3 -1
  701. package/src/kernel/config/types.ts +3 -1
  702. package/src/kernel/copy.test.ts +34 -4
  703. package/src/kernel/copy.ts +54 -0
  704. package/src/kernel/error/PragmaError.test.ts +5 -2
  705. package/src/kernel/error/PragmaError.ts +4 -2
  706. package/src/kernel/error/constants.ts +7 -5
  707. package/src/kernel/error/fromTaskError.ts +28 -6
  708. package/src/kernel/error/recovery.ts +14 -0
  709. package/src/kernel/error/renderError.ts +42 -1
  710. package/src/kernel/error/types.ts +21 -1
  711. package/src/kernel/index.ts +35 -0
  712. package/src/kernel/interactivity.test.ts +76 -0
  713. package/src/kernel/interactivity.ts +69 -0
  714. package/src/kernel/packs/collect.ts +12 -16
  715. package/src/kernel/packs/compile.test.ts +222 -1
  716. package/src/kernel/packs/compile.ts +93 -3
  717. package/src/kernel/packs/disclosure.ts +2 -2
  718. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  719. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
  720. package/src/kernel/packs/graphql/index.ts +20 -0
  721. package/src/kernel/packs/index.ts +40 -0
  722. package/src/kernel/packs/iri.test.ts +73 -0
  723. package/src/kernel/packs/iri.ts +66 -14
  724. package/src/kernel/packs/renderPack.ts +25 -6
  725. package/src/kernel/packs/resolveEntity.test.ts +274 -0
  726. package/src/kernel/packs/resolveEntity.ts +200 -42
  727. package/src/kernel/packs/runBodies.ts +86 -22
  728. package/src/kernel/packs/sample.ts +1 -1
  729. package/src/kernel/packs/schema.ts +78 -5
  730. package/src/kernel/packs/sparql/applyFilters.ts +136 -16
  731. package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
  732. package/src/kernel/packs/sparql/buildLookupQuery.ts +367 -17
  733. package/src/kernel/packs/sparql/index.ts +37 -0
  734. package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
  735. package/src/kernel/packs/sparql/runSelect.ts +3 -4
  736. package/src/kernel/packs/toolDescription.test.ts +77 -4
  737. package/src/kernel/packs/types.ts +136 -0
  738. package/src/kernel/packs/uniqueness.ts +1 -1
  739. package/src/kernel/project/cli/buildProgram.test.ts +218 -12
  740. package/src/kernel/project/cli/buildProgram.ts +84 -18
  741. package/src/kernel/project/cli/constants.ts +34 -0
  742. package/src/kernel/project/cli/dispatch.test.ts +160 -2
  743. package/src/kernel/project/cli/dispatch.ts +226 -45
  744. package/src/kernel/project/cli/exitCodes.ts +1 -1
  745. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  746. package/src/kernel/project/cli/globalFlags.ts +134 -31
  747. package/src/kernel/project/cli/helpFormat.ts +14 -2
  748. package/src/kernel/project/cli/rootHelp.ts +74 -12
  749. package/src/kernel/project/cli/suggest.test.ts +33 -1
  750. package/src/kernel/project/cli/suggest.ts +25 -1
  751. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  752. package/src/kernel/project/cli/verbHelp.ts +23 -7
  753. package/src/kernel/project/mcp/buildServer.ts +7 -4
  754. package/src/kernel/project/mcp/envelope.ts +2 -2
  755. package/src/kernel/project/mcp/instructions.ts +2 -2
  756. package/src/kernel/project/mcp/mcpError.ts +1 -1
  757. package/src/kernel/project/mcp/parity.test.ts +5 -2
  758. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  759. package/src/kernel/project/mcp/prompts/source.ts +2 -2
  760. package/src/kernel/project/mcp/registerVerb.ts +55 -10
  761. package/src/kernel/project/mcp/serve.ts +2 -2
  762. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  763. package/src/kernel/render/contracts.ts +21 -0
  764. package/src/kernel/render/envelope.ts +2 -3
  765. package/src/kernel/render/formatters.ts +1 -1
  766. package/src/kernel/render/renderers.test.ts +243 -6
  767. package/src/kernel/render/renderers.ts +222 -20
  768. package/src/kernel/render/style.test.ts +75 -24
  769. package/src/kernel/render/style.ts +59 -6
  770. package/src/kernel/render/turtle.ts +222 -0
  771. package/src/kernel/render/vocabulary.ts +276 -0
  772. package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
  773. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
  774. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
  775. package/src/kernel/runtime/graphpack/embedded.ts +3 -3
  776. package/src/kernel/runtime/graphpack/manifest.ts +1 -1
  777. package/src/kernel/runtime/graphpack/read.ts +1 -2
  778. package/src/kernel/runtime/loadSession.ts +1 -1
  779. package/src/kernel/runtime/probe.ts +6 -6
  780. package/src/kernel/runtime/readEntity.ts +472 -28
  781. package/src/kernel/runtime/refs/index.ts +39 -0
  782. package/src/kernel/runtime/refs/parseRef.ts +2 -2
  783. package/src/kernel/runtime/refs/resolve.ts +4 -4
  784. package/src/kernel/runtime/storeReadiness.ts +1 -2
  785. package/src/kernel/runtime/types.ts +15 -1
  786. package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
  787. package/src/kernel/spec/emitReference.ts +105 -30
  788. package/src/kernel/spec/emitSurface.ts +48 -6
  789. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  790. package/src/kernel/spec/types.ts +277 -4
  791. package/src/testing/PARITY_GAPS.ts +9 -3
  792. package/src/testing/behavioral/docExamples.test.ts +16 -0
  793. package/src/testing/behavioral/errorMatrix.mcp.test.ts +112 -9
  794. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  795. package/src/testing/behavioral/journeys.cli.test.ts +1 -1
  796. package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
  797. package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
  798. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  799. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  800. package/src/testing/behavioral/journeys.packageStories.test.ts +10 -7
  801. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  802. package/src/testing/behavioral/mcpSurface.test.ts +1 -1
  803. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  804. package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
  805. package/src/testing/eval/cases/effectful.ts +3 -2
  806. package/src/testing/eval/cases/readNouns.ts +245 -9
  807. package/src/testing/fixtures/blockGraph.ts +104 -10
  808. package/src/testing/fixtures/graph/canonical.ts +182 -13
  809. package/src/testing/fixtures/graph/defaultPack.ts +1 -1
  810. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  811. package/src/testing/helpers/projectMcp.ts +32 -6
  812. package/src/testing/helpers/runCli.ts +35 -18
  813. package/src/testing/perf/budgets.test.ts +20 -9
  814. package/src/testing/perf/budgets.ts +58 -9
  815. package/src/testing/perf/codegen.test.ts +126 -0
  816. package/src/testing/perf/globalSetup.test.ts +286 -0
  817. package/src/testing/perf/globalSetup.ts +505 -23
  818. package/src/testing/perf/measure.test.ts +38 -0
  819. package/src/testing/perf/measure.ts +23 -4
  820. package/src/testing/setupXdgIsolation.ts +81 -21
  821. package/src/testing/tempRoot.globalSetup.ts +122 -0
  822. package/dist/pragma +0 -0
  823. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
  824. package/src/capabilities/create/templates.embedded.generated.ts +0 -28
  825. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
  826. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  827. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
  828. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
  829. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  830. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  831. package/src/capabilities/shared/bands.ts +0 -16
  832. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
package/pragma.conf.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * stories those packs supply.
4
4
  *
5
5
  * Consumed three times: statically imported by `src/kernel/config/defaults.ts`
6
- * as the lowest config layer (compiled into the binary — no fs), by
6
+ * as the lowest config layer (compiled with the source — no fs), by
7
7
  * `src/capabilities/distribution.ts` (which compiles the declared stories into
8
8
  * capability modules at module load), and at build time by the bundler. A
9
9
  * NON-magic name on purpose: `findProjectConfig` only discovers
@@ -45,6 +45,12 @@ over GraphQL or raw SPARQL.
45
45
  - **Tokens** — the themeable design values, resolved per theme.
46
46
  - **Standards** — the do / don't coding guidance, categorized and linked to the
47
47
  blocks they govern.
48
+ - **Concepts** — the long-form documentation that belongs to no single block:
49
+ foundations, decision guides, and how-to guides, each typed by a
50
+ \`ds:ConceptType\`.
51
+ - **Implementations** — which library implements which block, in which
52
+ framework, with a source link pinned to the release that shipped it: the
53
+ spec and the code realizing it are edges in one graph.
48
54
 
49
55
  ## How it fits together
50
56
 
@@ -57,8 +63,10 @@ over GraphQL or raw SPARQL.
57
63
  ## Why RDF
58
64
 
59
65
  One graph makes every relationship first-class and queryable: \`block lookup\`
60
- follows edges to modifiers and subcomponents, \`graph query\` runs arbitrary
61
- SPARQL, and \`ontology show\` reads the schema itself. The store is built once
66
+ follows edges to modifiers and subcomponents, \`concept lookup\` reads the
67
+ long-form documentation, \`graph query\` runs arbitrary SPARQL, and
68
+ \`ontology lookup\` reads the schema itself. Which React components implement
69
+ a global-tier block is one query, not an afternoon. The store is built once
62
70
  by \`sources update\` and addressed by content hash, so the domain you query is
63
71
  exactly the domain that was published.`;
64
72
 
@@ -89,8 +97,30 @@ const designSystemStories: readonly PackDefinition[] = [
89
97
  // Base level mirrors the old summary view (name/tier/summary); the default is
90
98
  // `detailed`, matching the old CLI which rendered anatomy and modifiers
91
99
  // without a flag. A derived name that maps onto no schema field is omitted
92
- // (OPTIONAL parity), so a graph lacking whenToUse/whenNotToUse degrades
93
- // gracefully.
100
+ // (OPTIONAL parity), so a graph missing one of these properties degrades
101
+ // gracefully rather than erroring.
102
+ //
103
+ // That graceful degradation is also how this story went silent: it used to
104
+ // read `ds:whenToUse`/`ds:whenNotToUse`, which the ontology RETIRED in favour
105
+ // of a single `ds:usage` — "Subsumes the former whenToUse/whenNotToUse" is
106
+ // that property's own skos:definition. The shipped pack asserts `ds:usage` on
107
+ // all 264 blocks and neither retired term on any of them, so every
108
+ // `block lookup` on every install rendered no usage narrative at all —
109
+ // silently, because a name that maps onto no schema field is exactly the case
110
+ // OPTIONAL parity swallows. The retired terms are NOT kept as a fallback:
111
+ // `ds:usage` subsumes them, so a pack carrying both would print the same
112
+ // guidance twice, and a declaration no shipped graph can satisfy is
113
+ // untestable by construction — which is what let the silence ship.
114
+ // `block.shipped.exec.test.ts` now holds every graph term declared here — the
115
+ // identity property, fields, sections, expand relations, and every term
116
+ // selected beneath them, walked recursively — to being DEFINED as a property
117
+ // by the SHIPPED ontology. Defined, not asserted, and the difference is the
118
+ // whole point: a term the ontology never defines is a story bug that can
119
+ // never render, on any block, on any install — this defect. A term it defines
120
+ // that no instance asserts yet (`ds:figmaLink` today) is a content gap
121
+ // upstream, which the OPTIONAL parity above degrades over gracefully and
122
+ // which this pack has no business failing on. `ds:usage` alone is ALSO held
123
+ // to being asserted, on every block, because its absence is what shipped.
94
124
  //
95
125
  // Disclosure declares the FULL canonical ladder `[summary, standard,
96
126
  // detailed]` — the same set `standard` declares — so a config
@@ -113,14 +143,33 @@ const designSystemStories: readonly PackDefinition[] = [
113
143
  " VALUES ?class { ds:Component ds:Pattern ds:Layout ds:Subcomponent }",
114
144
  " ?uri a ?class .",
115
145
  " OPTIONAL { ?uri ds:name ?dsName }",
116
- " OPTIONAL { ?uri ds:tier ?tierUri }",
146
+ " OPTIONAL { ?uri ds:tier ?tierUri . OPTIONAL { ?tierUri ds:name ?tierName } }",
117
147
  " OPTIONAL { ?uri ds:hasModifierFamily ?family . ?family ds:name ?modName }",
118
148
  ' BIND(COALESCE(?dsName, REPLACE(STR(?uri), "^.*[/#]", "")) AS ?name)',
119
149
  ' BIND(LCASE(REPLACE(STR(?class), "^.*[/#]", "")) AS ?type)',
120
150
  ' BIND(REPLACE(STR(?tierUri), "^.*[/#]", "") AS ?tier)',
151
+ // `ORDER BY ?name` alone is not a total order, and 25 names here are
152
+ // shared by two or three blocks. SPARQL says nothing about tied rows,
153
+ // so the store's scan decided: ONE run gave `Button` launchpad-first
154
+ // and `CheckboxInput` global-first. Tier depth, then `STR(?uri)`,
155
+ // makes it total — the shallower tier leads its name group, and equal
156
+ // depths fall back to a key that cannot tie.
157
+ //
158
+ // The depth is the same one `lookup` ranks by, spelled out because a
159
+ // list query is declared TEXT the kernel does not compose. Only the
160
+ // depth: a browse ordered by NAME is not the place to re-litigate which
161
+ // block the name MEANS (that is `lookup`'s ranking, which also weighs
162
+ // the block's type), and every row here already prints its own type.
163
+ //
164
+ // The depth-0 IF is the store's, not style: oxigraph raises on
165
+ // `0.2 * 0`, and a raising BIND leaves `?tierRank` unbound — which is
166
+ // exactly how a top-tier block silently sorted last (see
167
+ // `sparqlProduct` in kernel/packs/sparql/buildLookupQuery.ts).
168
+ ' BIND(STRLEN(?tierName) - STRLEN(REPLACE(?tierName, "/", "")) AS ?tierDepth)',
169
+ " BIND(COALESCE(IF(?tierDepth = 0, 1, 1 - (0.2 * ?tierDepth)), 0) AS ?tierRank)",
121
170
  "}",
122
- "GROUP BY ?uri ?name ?type ?tier",
123
- "ORDER BY ?name",
171
+ "GROUP BY ?uri ?name ?type ?tier ?tierRank",
172
+ "ORDER BY ?name DESC(?tierRank) STR(?uri)",
124
173
  ].join("\n"),
125
174
  columns: [
126
175
  { field: "name", label: "Name" },
@@ -138,9 +187,48 @@ const designSystemStories: readonly PackDefinition[] = [
138
187
  lookup: {
139
188
  source: "graphql",
140
189
  toolDescription:
141
- 'Get detailed information about one or more design system blocks including anatomy, modifiers, and properties. Use when you need the full spec of specific blocks by name — detail: "summary" trims to the base view. Example: block_lookup { names: ["Button"] }.',
190
+ 'Get detailed information about one or more design system blocks including anatomy, modifiers, and properties. Use when you need the full spec of specific blocks by name — detail: "summary" trims to the base view. Example: block_lookup { name: ["Button"] }.',
142
191
  by: "ds:name",
143
192
  types: ["ds:Component", "ds:Pattern", "ds:Layout", "ds:Subcomponent"],
193
+ // A subcomponent is a PART of a block, never the block someone means:
194
+ // for the query "button" the 86 `…-close_button` subcomponents used to
195
+ // outrank `ds:global.component.button` on the alphabet alone. Weighting
196
+ // them below 1 sinks every one of them under every component at equal
197
+ // match score, lowers their `annotations.priority` in the resource
198
+ // listing, and — since a name resolve now RANKS rather than picks — sorts
199
+ // them under every component a shared name also reaches.
200
+ weights: { "ds:Subcomponent": 0.6 },
201
+ // The other half of that judgement, and the reason it is a PRODUCT and
202
+ // not a tiebreak. 25 live block names are shared by two or three blocks
203
+ // across tiers, and `weights` alone cannot separate two components; the
204
+ // alphabet decided, so `Button` answered with Launchpad's and never
205
+ // mentioned the global one. A tier's DEPTH is what ranks it: `Global` is
206
+ // depth 1 and worth 1, `Apps/Launchpad` is depth 2 and worth 0.8, so
207
+ //
208
+ // Button global component 1 × 1 > launchpad component 1 × 0.8
209
+ // TextInput global SUBcomponent 0.6 × 1 < launchpad component 1 × 0.8
210
+ //
211
+ // — the global block wins where both are whole blocks, and the editorial
212
+ // rule that a whole component beats a part survives the addition. A pure
213
+ // tier tiebreak would have inverted the second case.
214
+ //
215
+ // DERIVED, never enumerated: the depth is the `/` count in the tier's
216
+ // OWN `ds:name` (`"Apps/Launchpad"`), not in its IRI (`ds:apps_launchpad`
217
+ // — the slash exists only in the name), so a tier added upstream tomorrow
218
+ // is ranked correctly without editing anything here.
219
+ //
220
+ // Declared as DATA beside `weights` for the same reason `weights` is:
221
+ // editorial judgement the ontology has not yet made belongs in the config
222
+ // layer, which "wins every harvest" when upstream is silent. `asserted`
223
+ // is the exit: the day `ds:tierRank` is asserted upstream it takes
224
+ // precedence over the derived depth (`COALESCE`), and this whole entry is
225
+ // deleted with no code change.
226
+ scopeWeight: {
227
+ via: "ds:tier",
228
+ by: "ds:name",
229
+ falloff: 0.2,
230
+ asserted: "ds:tierRank",
231
+ },
144
232
  graphqlType: "UIBlock",
145
233
  fields: [
146
234
  { name: "tier", property: "ds:tier", label: "Tier" },
@@ -153,16 +241,19 @@ const designSystemStories: readonly PackDefinition[] = [
153
241
  ],
154
242
  sections: [
155
243
  { name: "summary", property: "ds:summary", label: "Summary" },
244
+ // ONE section, because `ds:usage` is ONE property: its literal is
245
+ // free-text Markdown carrying its own `### When to use` / `### When not
246
+ // to use` sub-sections (78 and 71 of the 126 non-empty ones do), so
247
+ // splitting it back into two headings here would mean parsing prose the
248
+ // graph deliberately keeps whole. The renderer demotes a body's own ATX
249
+ // headings below the section heading, so those sub-sections nest UNDER
250
+ // `### Usage` instead of colliding with it. Half the blocks assert an
251
+ // EMPTY `ds:usage` (138 of 264); the renderer skips empty sections, so
252
+ // those print no heading rather than an empty one.
156
253
  {
157
- name: "whenToUse",
158
- property: "ds:whenToUse",
159
- label: "When to use",
160
- level: "detailed",
161
- },
162
- {
163
- name: "whenNotToUse",
164
- property: "ds:whenNotToUse",
165
- label: "When not to use",
254
+ name: "usage",
255
+ property: "ds:usage",
256
+ label: "Usage",
166
257
  level: "detailed",
167
258
  },
168
259
  {
@@ -231,7 +322,7 @@ const designSystemStories: readonly PackDefinition[] = [
231
322
  sample: {
232
323
  fixedCount: true,
233
324
  toolDescription:
234
- "Return randomly selected complete design-system blocks as exemplars. Use BEFORE writing queries to see actual data shapes, anatomy, and property names.",
325
+ "Return randomly selected complete design-system blocks as exemplars. Use BEFORE writing queries to see actual data shapes, anatomy, and property names. Example: block_sample {}.",
235
326
  },
236
327
  },
237
328
  },
@@ -275,7 +366,7 @@ const designSystemStories: readonly PackDefinition[] = [
275
366
  by: "ds:tokenId",
276
367
  type: "ds:Token",
277
368
  toolDescription:
278
- 'Get type and theme values for one or more design tokens by name. Use when resolving specific tokens\' light/dark values. Example: token_lookup { names: ["color.primary"] }.',
369
+ 'Get type and theme values for one or more design tokens by name. Use when resolving specific tokens\' light/dark values. Example: token_lookup { name: ["color.primary"] }.',
279
370
  fields: [
280
371
  {
281
372
  name: "category",
@@ -288,7 +379,7 @@ const designSystemStories: readonly PackDefinition[] = [
288
379
  sample: {
289
380
  fixedCount: true,
290
381
  toolDescription:
291
- "Return randomly selected complete design tokens (with theme values) as exemplars. Use BEFORE writing queries to see actual data shapes.",
382
+ "Return randomly selected complete design tokens (with theme values) as exemplars. Use BEFORE writing queries to see actual data shapes. Example: token_sample {}.",
292
383
  },
293
384
  },
294
385
  },
@@ -334,7 +425,7 @@ const designSystemStories: readonly PackDefinition[] = [
334
425
  by: "ds:name",
335
426
  type: "ds:ModifierFamily",
336
427
  toolDescription:
337
- 'Get values and usage details for one or more modifier families by name. Use when you need the allowed values of specific families. Example: modifier_lookup { names: ["importance"] }.',
428
+ 'Get values and usage details for one or more modifier families by name. Use when you need the allowed values of specific families. Example: modifier_lookup { name: ["importance"] }.',
338
429
  expand: [
339
430
  {
340
431
  name: "values",
@@ -346,7 +437,7 @@ const designSystemStories: readonly PackDefinition[] = [
346
437
  sample: {
347
438
  fixedCount: true,
348
439
  toolDescription:
349
- "Return randomly selected complete modifier families (with value lists) as exemplars. Use BEFORE writing queries to see actual data shapes.",
440
+ "Return randomly selected complete modifier families (with value lists) as exemplars. Use BEFORE writing queries to see actual data shapes. Example: modifier_sample {}.",
350
441
  },
351
442
  },
352
443
  },
@@ -382,7 +473,7 @@ const designSystemStories: readonly PackDefinition[] = [
382
473
  type: "ds:Tier",
383
474
  description: "Show tiers by name, with the blocks scoped to each.",
384
475
  toolDescription:
385
- 'Get one or more tiers by name, with the blocks scoped directly to each. Use when you need which blocks a specific tier carries. Example: tier_lookup { names: ["apps/lxd"] }.',
476
+ 'Get one or more tiers by name, with the blocks scoped directly to each. Use when you need which blocks a specific tier carries. Example: tier_lookup { name: ["apps/lxd"] }.',
386
477
  expand: [
387
478
  {
388
479
  name: "blocks",
@@ -395,6 +486,234 @@ const designSystemStories: readonly PackDefinition[] = [
395
486
  },
396
487
  ];
397
488
 
489
+ /**
490
+ * The `concept` story the design-system pack also supplies: long-form
491
+ * documentation not bound to a single UIBlock (foundations, how-to guides,
492
+ * decision guides) — ds:Concept entries ingested from Coda. The list stays
493
+ * terse (name/type/summary); the Markdown body is the lookup's payload,
494
+ * served at the `standard` level with knownEdgeCases behind `detailed`.
495
+ */
496
+ const conceptStory: PackDefinition = {
497
+ noun: "concept",
498
+ description: "List design-system concepts.",
499
+ toolDescription:
500
+ 'List design-system concepts — long-form foundations, how-to guides, and decision guides not bound to a single UI block. Optionally filter by type or search. Example: concept_list { type: "Explanation" }.',
501
+ list: {
502
+ query: [
503
+ "SELECT ?uri ?name ?type ?summary",
504
+ "WHERE {",
505
+ " ?uri a ds:Concept ;",
506
+ " ds:name ?name .",
507
+ " OPTIONAL { ?uri ds:conceptType/ds:name ?type . }",
508
+ " OPTIONAL { ?uri ds:summary ?summary . }",
509
+ "}",
510
+ "ORDER BY ?name",
511
+ ].join("\n"),
512
+ columns: [
513
+ { field: "uri", label: "IRI" },
514
+ { field: "name", label: "Name" },
515
+ { field: "type", label: "Type" },
516
+ { field: "summary", label: "Summary" },
517
+ ],
518
+ filters: [
519
+ {
520
+ param: "type",
521
+ variable: "type",
522
+ // `ds:ConceptType` is the vocabulary; the concepts are the population.
523
+ // The shipped graph declares six types and uses two, so validating
524
+ // against the rows rejected "Decision guide" — a type the ontology
525
+ // declares — as an invalid argument instead of answering with the
526
+ // empty list it actually has.
527
+ vocabulary: {
528
+ query: [
529
+ "SELECT DISTINCT ?name WHERE {",
530
+ " ?conceptType a ds:ConceptType ;",
531
+ " ds:name ?name .",
532
+ "}",
533
+ ].join("\n"),
534
+ variable: "name",
535
+ },
536
+ description: "Filter by concept type (e.g. Explanation, How-to guide).",
537
+ },
538
+ ],
539
+ search: {
540
+ variables: ["name", "summary"],
541
+ description: "Search in name and summary.",
542
+ },
543
+ emptyRecovery: {
544
+ message:
545
+ "No concepts in the store. The @canonical/design-system pack provides them; refresh the local store.",
546
+ cli: "sources update",
547
+ },
548
+ },
549
+ lookup: {
550
+ source: "sparql",
551
+ by: "ds:name",
552
+ type: "ds:Concept",
553
+ description:
554
+ "Look up a concept's full documentation by name, IRI, or glob.",
555
+ toolDescription:
556
+ 'Get a design-system concept\'s full Markdown documentation. Address concepts by the name concept_list publishes, by prefixed name (ds:concept.…), by absolute IRI, or by a glob. Example: concept_lookup { name: ["Foundations: Grid"] }.',
557
+ fields: [
558
+ { name: "type", property: "ds:conceptType/ds:name", label: "Type" },
559
+ { name: "tier", property: "ds:tier", label: "Tier" },
560
+ { name: "summary", property: "ds:summary", label: "Summary" },
561
+ ],
562
+ sections: [
563
+ {
564
+ name: "content",
565
+ property: "ds:content",
566
+ label: "Content",
567
+ level: "standard",
568
+ },
569
+ {
570
+ name: "knownEdgeCases",
571
+ property: "ds:knownEdgeCases",
572
+ label: "Known edge cases",
573
+ level: "detailed",
574
+ },
575
+ ],
576
+ disclosure: {
577
+ levels: ["summary", "standard", "detailed"],
578
+ default: "standard",
579
+ },
580
+ },
581
+ };
582
+
583
+ /**
584
+ * The read story the implementation-graph pack supplies — which library
585
+ * implements which block, collected from the `@implements` annotations in this
586
+ * monorepo's source.
587
+ *
588
+ * The join this noun exists for crosses two packs: `ds:implementsBlock` points
589
+ * from an implementation collected HERE at the IRI of a block declared in
590
+ * `@canonical/design-system`. Both land in one store under the pinned `ds:`
591
+ * namespace, so `implementation list` answers "which React components implement
592
+ * a global-tier block" as a query rather than an afternoon of grepping — which
593
+ * is what {@link DESIGN_SYSTEM_COLOPHON} promises.
594
+ *
595
+ * LIST-ONLY, deliberately. A `ds:ImplementationObject` carries no name literal
596
+ * — it IS the edge from a library to a block, plus the two source links — so
597
+ * there is nothing a `lookup` could disclose that the list row does not already
598
+ * hold. The grammar admits a story with only one half; a lookup keyed on a
599
+ * synthesised name would be a name nobody would ever type. The libraries
600
+ * themselves ARE named, and `implementation libraries` lists them through the
601
+ * same list machinery (as `standard categories` does).
602
+ */
603
+ const implementationStory: PackDefinition = {
604
+ noun: "implementation",
605
+ description: "List which library implements which design-system block.",
606
+ toolDescription:
607
+ 'List the implementations of design-system blocks — which library implements which block, on which platform, and the source file it lives in. Optionally filter by platform or library, or search. Example: implementation_list { platform: "react" }.',
608
+ list: {
609
+ // The library is the subject that carries the platform, so the row is
610
+ // assembled from BOTH ends of `ds:hasImplementation`. `?block` prefers the
611
+ // block's own `ds:name` and falls back to its IRI local name, so a row
612
+ // stays readable even when the design-system pack is absent from the store
613
+ // and only the bare `ds:implementsBlock` IRI is known.
614
+ query: [
615
+ "SELECT ?uri ?block ?library ?platform ?source",
616
+ "WHERE {",
617
+ " ?libUri a ds:ImplementationLibrary ;",
618
+ " ds:libraryName ?library ;",
619
+ " ds:hasImplementation ?uri .",
620
+ " ?uri a ds:ImplementationObject ;",
621
+ " ds:implementsBlock ?blockUri .",
622
+ " OPTIONAL { ?libUri ds:platform ?platform }",
623
+ " OPTIONAL { ?uri ds:headLink ?source }",
624
+ " OPTIONAL { ?blockUri ds:name ?dsName }",
625
+ ' BIND(COALESCE(?dsName, REPLACE(STR(?blockUri), "^.*[/#]", "")) AS ?block)',
626
+ "}",
627
+ "ORDER BY ?block ?library",
628
+ ].join("\n"),
629
+ columns: [
630
+ { field: "block", label: "Block" },
631
+ { field: "library", label: "Library" },
632
+ { field: "platform", label: "Platform" },
633
+ { field: "source", label: "Source" },
634
+ { field: "uri", label: "IRI" },
635
+ ],
636
+ filters: [
637
+ // Both vocabularies are read off `ds:ImplementationLibrary`, the subject
638
+ // that carries them — the same terms `implementation libraries`
639
+ // enumerates. A library that implements nothing yet still exists, and
640
+ // asking for it is an empty answer rather than a bad argument.
641
+ {
642
+ param: "platform",
643
+ variable: "platform",
644
+ vocabulary: {
645
+ query: [
646
+ "SELECT DISTINCT ?platform WHERE {",
647
+ " ?lib a ds:ImplementationLibrary ;",
648
+ " ds:platform ?platform .",
649
+ "}",
650
+ ].join("\n"),
651
+ },
652
+ description: "Filter by platform (e.g. react, svelte, typescript).",
653
+ },
654
+ {
655
+ param: "library",
656
+ variable: "library",
657
+ vocabulary: {
658
+ query: [
659
+ "SELECT DISTINCT ?library WHERE {",
660
+ " ?lib a ds:ImplementationLibrary ;",
661
+ " ds:libraryName ?library .",
662
+ "}",
663
+ ].join("\n"),
664
+ },
665
+ description: "Filter by implementation library name.",
666
+ },
667
+ ],
668
+ search: {
669
+ variables: ["block", "library"],
670
+ description: "Search in block and library name.",
671
+ },
672
+ emptyRecovery: {
673
+ message:
674
+ "No implementations in the store. The @canonical/ds-implementations pack provides them; refresh the local store.",
675
+ cli: "sources update",
676
+ },
677
+ },
678
+ verbs: [
679
+ {
680
+ verb: "libraries",
681
+ description: "List the implementation libraries.",
682
+ toolDescription:
683
+ "List the design-system implementation libraries — platform, tier, released version, and how many blocks each one implements. Example: implementation_libraries {}.",
684
+ // `ds:implementationCount` is asserted by the aggregate index on the SAME
685
+ // subject the per-library file describes, so the two merge in the store
686
+ // and the count needs no aggregation here.
687
+ query: [
688
+ "SELECT ?uri ?name ?platform ?tier ?version ?count",
689
+ "WHERE {",
690
+ " ?uri a ds:ImplementationLibrary ;",
691
+ " ds:libraryName ?name .",
692
+ " OPTIONAL { ?uri ds:platform ?platform }",
693
+ " OPTIONAL { ?uri ds:libraryTier ?tierUri }",
694
+ " OPTIONAL { ?uri ds:version ?version }",
695
+ " OPTIONAL { ?uri ds:implementationCount ?count }",
696
+ ' BIND(REPLACE(STR(?tierUri), "^.*[/#]", "") AS ?tier)',
697
+ "}",
698
+ "ORDER BY ?name",
699
+ ].join("\n"),
700
+ columns: [
701
+ { field: "name", label: "Library" },
702
+ { field: "platform", label: "Platform" },
703
+ { field: "tier", label: "Tier" },
704
+ { field: "version", label: "Version" },
705
+ { field: "count", label: "Blocks" },
706
+ { field: "uri", label: "IRI" },
707
+ ],
708
+ emptyRecovery: {
709
+ message:
710
+ "No implementation libraries in the store. The @canonical/ds-implementations pack provides them; refresh the local store.",
711
+ cli: "sources update",
712
+ },
713
+ },
714
+ ],
715
+ };
716
+
398
717
  /**
399
718
  * The read story the code-standards pack supplies — `standard` as declared data.
400
719
  *
@@ -409,20 +728,44 @@ const codeStandardsStories: readonly PackDefinition[] = [
409
728
  noun: "standard",
410
729
  description: "List all code standards.",
411
730
  toolDescription:
412
- "List code standards. Optionally filter by category or search term.",
731
+ 'List code standards: one ROW per standard — its IRI, name, category and description — not the standards themselves. Take a row\'s `name` VERBATIM to standard_lookup for the dos and donts. Optionally filter by category slug (a parent slug answers for its whole branch; standard_categories lists them) or by search term. Example: standard_list { category: "react" }.',
413
732
  list: {
414
733
  query: [
734
+ // `?category` is the LEAF a standard is filed under — what a row
735
+ // displays. `?categories` is that leaf plus every ancestor, which is
736
+ // what `--category` matches against, so asking for a parent answers for
737
+ // the whole branch. The traversal is written ONCE, here, rather than
738
+ // repeated by each consumer.
415
739
  "SELECT ?uri ?name ?category ?description",
740
+ ' (GROUP_CONCAT(DISTINCT ?ancestorSlug; SEPARATOR=" ") AS ?categories)',
416
741
  "WHERE {",
417
742
  " ?uri a cs:CodeStandard ;",
418
743
  " cs:description ?description .",
419
- " OPTIONAL { ?uri cs:name ?n . }",
744
+ // `rdfs:label`, matching `lookup.by` below. Both COALESCE over the
745
+ // SAME property with the SAME IRI fallback, and that agreement IS the
746
+ // two-step grammar: a row's `name` goes VERBATIM to lookup. Keyed on
747
+ // different properties they diverge for exactly the entities carrying
748
+ // one and not the other — 16 standards in the shipped snapshot
749
+ // published `Turtle local-name casing` from `cs:name` while lookup,
750
+ // reading `rdfs:label`, bound the derived slug and answered
751
+ // ENTITY_NOT_FOUND. Change one, change both.
752
+ " OPTIONAL { ?uri rdfs:label ?n . }",
420
753
  ' BIND(COALESCE(?n, REPLACE(STRAFTER(STR(?uri), "#"), "\\\\.", "/")) AS ?name)',
421
754
  " OPTIONAL {",
422
755
  " ?uri cs:hasCategory ?cat .",
423
756
  " ?cat cs:slug ?category .",
757
+ // `skos:broader` is deliberately NOT transitive, and this store
758
+ // (oxigraph) has no reasoner — so `skos:broaderTransitive` returns zero
759
+ // rows and hand-asserting it would be materialisation wearing a
760
+ // standards badge. `broader*` is the only thing that works.
761
+ // The `*` is REFLEXIVE and that is load-bearing: `+` would silently
762
+ // drop every standard filed DIRECTLY on the category being asked for
763
+ // (one of the 8 under `testing` today). Do not "correct" it.
764
+ " ?cat skos:broader* ?ancestor .",
765
+ " ?ancestor cs:slug ?ancestorSlug .",
424
766
  " }",
425
767
  "}",
768
+ "GROUP BY ?uri ?name ?category ?description",
426
769
  "ORDER BY ?name",
427
770
  ].join("\n"),
428
771
  columns: [
@@ -434,28 +777,64 @@ const codeStandardsStories: readonly PackDefinition[] = [
434
777
  filters: [
435
778
  {
436
779
  param: "category",
437
- variable: "category",
438
- description: "Filter by category name.",
780
+ variable: "categories",
781
+ match: "set",
782
+ // The SAME terms `standard categories` enumerates (`cs:Category` /
783
+ // `cs:slug`), so the slugs that surface hands out are exactly the
784
+ // slugs this filter accepts. Read from the graph rather than the
785
+ // returned ROWS: a category the graph declares with no standards
786
+ // filed under it is reported by `standard categories` with count 0,
787
+ // and asking for it must be the documented calm empty list, not
788
+ // INVALID_INPUT.
789
+ vocabulary: {
790
+ query: [
791
+ "SELECT DISTINCT ?slug WHERE {",
792
+ " ?cat a cs:Category ;",
793
+ " cs:slug ?slug .",
794
+ "}",
795
+ ].join("\n"),
796
+ variable: "slug",
797
+ },
798
+ description:
799
+ "Filter by category slug. A parent category answers for its whole branch.",
439
800
  },
440
801
  ],
441
802
  search: {
442
803
  variables: ["name", "description"],
443
804
  description: "Search in name and description.",
444
805
  },
806
+ // Deliberately NOT `sources update`: the code standards ship in the
807
+ // embedded snapshot and answer with no update at all, so the generic
808
+ // build hint is actively wrong here. An empty result on this noun means
809
+ // the filter, and the vocabulary it must be drawn from lives in the graph
810
+ // — which is what `standard categories` reads out.
811
+ emptyRecovery: {
812
+ message:
813
+ "Category slugs come from the graph, and a parent slug answers for its whole branch — read them out rather than guessing.",
814
+ cli: "standard categories",
815
+ },
445
816
  },
446
817
  verbs: [
447
818
  {
448
819
  verb: "categories",
449
- description: "List all standard categories with counts.",
450
- toolDescription: "List all code standard categories.",
820
+ description:
821
+ "List all standard categories with counts (a parent counts its whole branch).",
822
+ toolDescription:
823
+ "List all code standard categories with the number of standards each covers. Categories are a hierarchy: a parent's count includes every descendant, and `standard_list { category }` answers for the same set. Use this to pick a valid slug before filtering. Example: standard_categories {}.",
451
824
  query: [
452
- "SELECT ?name (COUNT(?standard) AS ?count)",
825
+ // The same reflexive roll-up `list` filters with — written the other
826
+ // way round (every category whose broader-chain reaches ?cat), so the
827
+ // count a category reports and the rows `--category` returns are the
828
+ // same set. `COUNT(DISTINCT ?standard)`: a standard reachable by two
829
+ // paths is still one standard.
830
+ "SELECT ?name (COUNT(DISTINCT ?standard) AS ?count)",
453
831
  "WHERE {",
454
832
  " ?cat a cs:Category ;",
455
833
  " cs:slug ?name .",
456
834
  " OPTIONAL {",
835
+ " ?descendant skos:broader* ?cat .",
457
836
  " ?standard a cs:CodeStandard ;",
458
- " cs:hasCategory ?cat .",
837
+ " cs:hasCategory ?descendant .",
459
838
  " }",
460
839
  "}",
461
840
  "GROUP BY ?name",
@@ -465,16 +844,43 @@ const codeStandardsStories: readonly PackDefinition[] = [
465
844
  { field: "name", label: "Category" },
466
845
  { field: "count", label: "Standards" },
467
846
  ],
847
+ // Also not `sources update`. The categories ride the same embedded
848
+ // snapshot, so zero rows means the store did not load — a health
849
+ // question, not a staleness one.
850
+ emptyRecovery: {
851
+ message:
852
+ "The code standards ship with the CLI itself, so no categories at all means the store did not load — not that it is out of date.",
853
+ cli: "doctor",
854
+ },
468
855
  },
469
856
  ],
470
857
  lookup: {
471
858
  source: "sparql",
472
- by: "cs:name",
859
+ // `rdfs:label`, not `cs:name`. The pack pin above moved to v0.1.5, which
860
+ // retired the bespoke `cs:name` for the standard property every RDF
861
+ // consumer already reads — measured against that tag: 0 standards carry
862
+ // `cs:name`, 148 of 148 carry exactly one `rdfs:label`. Left keyed on the
863
+ // retired property, this story would still ANSWER — every title would
864
+ // simply stop reaching a reader and each row would fall back to its
865
+ // IRI-derived name, with nothing raised. That is the same silent shape as
866
+ // reading a retired `ds:whenToUse`, one noun over.
867
+ by: "rdfs:label",
868
+ // The fallback stays, and is now near-inert rather than load-bearing: it
869
+ // covered the ~87% of standards that carried no display title at all, and
870
+ // v0.1.5 gives every one of them a curated label. It remains declared
871
+ // because a pack is data — a future release that drops a label should
872
+ // degrade to the IRI-derived name, not become unaddressable.
873
+ //
874
+ // Deliberately NOT declared on `block`/`token`/`tier`/`concept`: each of
875
+ // those lists REQUIRES its `by` property, so an entity without one is a
876
+ // row they never publish, and making it addressable (or sampleable) here
877
+ // would be the mirror of the defect this repairs.
878
+ nameFallback: "iri",
473
879
  type: "cs:CodeStandard",
474
880
  description:
475
- "Look up detailed information for a standard by name, IRI, or glob.",
881
+ "Look up one or more standards by name, IRI, or glob. --detail standard adds the dos, --detail detailed adds the don'ts.",
476
882
  toolDescription:
477
- "Get detailed information about one or more code standards including dos and donts with code examples. Address standards by name, prefixed name (cs:…), absolute IRI, or glob pattern (react/component/*).",
883
+ 'Get one or more code standards in full, with dos and don\'ts as code examples. `detail` DEFAULTS to "summary", which returns neither: pass detail: "standard" for the dos and detail: "detailed" for dos AND don\'ts. Address a standard by the name standard_list publishes (`react/component/tsdoc`), by prefixed name (`cs:react.component.tsdoc`), by absolute IRI, or by a glob over any of those. Example: standard_lookup { name: ["react/component/tsdoc"], detail: "detailed" }.',
478
884
  fields: [
479
885
  {
480
886
  name: "category",
@@ -520,7 +926,7 @@ const codeStandardsStories: readonly PackDefinition[] = [
520
926
  description:
521
927
  "Return randomly selected complete standard instances as exemplars for shape discovery.",
522
928
  toolDescription:
523
- "Return 1–5 randomly selected complete code standard instances as exemplars. Use BEFORE writing queries to see actual data shapes, property names, and value formats. Each call returns different instances.",
929
+ "Return 1–5 randomly selected complete code standard instances as exemplars. Use BEFORE writing queries to see actual data shapes, property names, and value formats. Each call returns different instances. Example: standard_sample { count: 2 }.",
524
930
  },
525
931
  },
526
932
  },
@@ -529,6 +935,21 @@ const codeStandardsStories: readonly PackDefinition[] = [
529
935
  export default {
530
936
  name: "pragma",
531
937
  help: "Explore the design system",
938
+ // The `--help` wordmark. Data, not code: `kernel/copy.test.ts` forbids any
939
+ // kernel string from naming the distribution, and a wordmark spells the name.
940
+ // Lines rather than one string — the art holds a backtick and backslashes.
941
+ logo: [
942
+ " _",
943
+ " /' `\\",
944
+ " /' )",
945
+ " /' (___,/'____ ____ ____ ,__________ ____",
946
+ " /' )' )--/' ) /' ) /' ) ) /' )",
947
+ " /' /' /' /' /' /' /' /' /' /' /'",
948
+ "(,/' /' (___,/(__(___,/(__/' /' /(__(___,/(__",
949
+ " /'",
950
+ " / /'",
951
+ " (___,/'",
952
+ ],
532
953
  // The toolchain's own colophon — CONTENT this distribution declares, not
533
954
  // machinery: `pragma colophon` renders whatever stands here as its first
534
955
  // section, titled with the distribution's name, before any active pack's
@@ -537,60 +958,16 @@ export default {
537
958
  // form. Both are BODIES with no leading H1 (the renderer supplies the
538
959
  // heading), grounded in this tree's real architecture.
539
960
  colophon: {
540
- markdown: `pragma is a **domain-based toolchain**: one CLI and one MCP server projected
541
- from a single grammar, serving a knowledge-graph domain that reads as data.
542
-
543
- ## The effect monad
544
-
545
- Reads are plain \`async\` functions; a mutation instead *describes* its effects
546
- as a \`Task\` (\`@canonical/task\`) that is interpreted — under the real node
547
- interpreter, a \`--dry-run\` planner, or an \`--undo\` reverser. Describe-then-
548
- interpret means dry-run and undo come for free, and the dispatcher tells the two
549
- worlds apart on one bit: \`capability.mutates\`.
550
-
551
- ## One grammar, many projections
552
-
553
- Every capability is a \`VerbSpec\` — a noun, its params, its effect profile, its
554
- formatters. The CLI commands, the MCP tools, shell completion, and the
555
- surface/docs are all *projections* of that one shape, so they cannot drift. The
556
- projected surface is frozen in a covenant (\`surface/surface.v2.json\`): a single
557
- source of truth a test asserts the live grammar still emits, tool for tool.
558
-
559
- ## LLM-optimized output
560
-
561
- Each verb renders three ways — \`plain\` for a terminal, \`json\` for the machine
562
- envelope, and \`llm\` for condensed Markdown. \`--format llm\` (or a non-interactive
563
- stdout) selects the agent form: the same data, shaped for a model to read. This
564
- colophon is itself a showcase of that render model.
565
-
566
- ## Modular, storeless by construction
567
-
568
- Capabilities ship as **modules** — named bundles of verbs with optional
569
- boot / resource / prompt hooks. A verb declares whether it \`needsStore\`, and
570
- the dispatcher boots the triple store *only* for those; a storeless verb
571
- (\`info\`, \`config\`, \`capabilities\`, \`colophon\`) never pays for the graph.
572
-
573
- ## Scaffolding
574
-
575
- \`pragma create\` scaffolds components, packages, and applications through the
576
- \`@canonical/summon-*\` generators, reusing summon's rich Ink wizard when it runs
577
- interactively.
578
-
579
- ## The domain reads as data
580
-
581
- A domain is a **pack**: a declarative \`PackDefinition\` (its list / lookup
582
- queries) compiled into verbs, backed by a content-addressed graphpack that
583
- \`sources update\` builds once. Swap the pack and the same pragma serves a
584
- different domain — including the domain colophon printed below this one.
961
+ // The architecture handoff is a URL, not a repo path: `docs/` is outside
962
+ // the package's `files` allowlist and is not copied into `dist`, so an
963
+ // installed user has no `docs/architecture.md` to open.
964
+ markdown: `pragma is a **domain-based toolchain** — one CLI and one MCP server
965
+ projected from a single grammar. That machinery is documented at
966
+ https://github.com/canonical/pragma/blob/main/packages/cli/pragma/docs/architecture.md;
967
+ what follows is the domain it serves.
585
968
 
586
969
  Made by the Canonical Webteam — https://canonical.com.`,
587
- summary: `pragma is a domain-based toolchain: one CLI + MCP server projected from a single \`VerbSpec\` grammar.
588
-
589
- - **Effect monad** (\`@canonical/task\`): reads are async; a mutation returns an interpreted \`Task\`, so \`--dry-run\` and \`--undo\` are free. The dispatcher branches on \`capability.mutates\`.
590
- - **One grammar, many projections**: CLI, MCP tools, completion, and docs all project one \`VerbSpec\`; the emitted surface is frozen in a covenant so the projections never drift.
591
- - **LLM-optimized output**: every verb renders \`plain\` / \`json\` / \`llm\`; \`--format llm\` (or a piped stdout) emits condensed Markdown for agents.
592
- - **Modular + storeless**: capability modules; the triple store boots only for \`needsStore\` verbs.
593
- - **Domain as data**: a pack is a declarative \`PackDefinition\` compiled to verbs over a content-addressed graph built by \`sources update\`.
970
+ summary: `pragma is a domain-based toolchain: one CLI + MCP server projected from a single grammar (https://github.com/canonical/pragma/blob/main/packages/cli/pragma/docs/architecture.md). The domain it serves follows.
594
971
 
595
972
  Made by the Canonical Webteam — https://canonical.com.`,
596
973
  },
@@ -599,17 +976,36 @@ Made by the Canonical Webteam — https://canonical.com.`,
599
976
  {
600
977
  name: "@canonical/design-system",
601
978
  source: "git+https://github.com/canonical/design-system.git#main",
602
- stories: designSystemStories,
979
+ stories: [...designSystemStories, conceptStory],
603
980
  },
604
981
  {
605
982
  name: "@canonical/anatomy-dsl",
606
983
  source: "git+https://github.com/canonical/anatomy-dsl.git#main",
607
984
  },
985
+ // Pinned to a TAG, and the only source here that is. The standards are the
986
+ // pack an agent is most likely to quote back at a human as policy, so which
987
+ // revision answered a query has to be recoverable — a floating ref makes
988
+ // "the CLI told me this was the rule" unfalsifiable. The other three still
989
+ // float: they are read for shape and identity, where the newest answer is
990
+ // the right one.
991
+ //
992
+ // Bump this deliberately. `sources update` resolves the tag, so a new
993
+ // upstream release reaches users only when this line moves — which is the
994
+ // point, and the cost.
608
995
  {
609
996
  name: "@canonical/code-standards",
610
- source: "git+https://github.com/canonical/web-code-standards.git#main",
997
+ source: "git+https://github.com/canonical/web-code-standards.git#v0.1.5",
611
998
  stories: codeStandardsStories,
612
999
  },
1000
+ // The implementation graph: ds:ImplementationLibrary / ds:ImplementationObject
1001
+ // nodes collected from `@implements` annotations across this monorepo
1002
+ // (regenerated each release into the root `data/` directory, which is what
1003
+ // a git ref scans — the npm distribution is `@canonical/ds-implementations`).
1004
+ {
1005
+ name: "@canonical/ds-implementations",
1006
+ source: "git+https://github.com/canonical/pragma.git#main",
1007
+ stories: [implementationStory],
1008
+ },
613
1009
  ],
614
1010
  // This distribution's domain namespaces, declared once and read twice.
615
1011
  //