@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
@@ -0,0 +1,333 @@
1
+ ---
2
+ name: implement-component
3
+ description: Implement a specified design-system component with pragma create, following the live code standards; also runs as a guided tutorial on a worked example
4
+ ---
5
+
6
+ # Implement Component
7
+
8
+ Take an APPROVED spec — from `specify-component`, or an existing documented block — to
9
+ working code. The defining discipline: the applicable code standards are pulled and held
10
+ open DURING implementation, so they shape the code as it is written, not only in review.
11
+
12
+ ## Working mode
13
+
14
+ This skill often runs alongside a senior engineer or designer. When it does, work as
15
+ their assistant: lay out where the flow stands, do the legwork (spec reads, standard
16
+ pulls, scaffolding), and surface decisions rather than absorbing them silently. The
17
+ points to raise with the person rather than decide alone: a thin or ambiguous spec
18
+ field, any deviation from a pulled standard, the target package for a tier outside the
19
+ naming convention, and API naming the spec does not fix. When running fully
20
+ autonomously (only on explicit request), list those judgment calls in the PR.
21
+
22
+ ## When to Use
23
+
24
+ - An approved spec — from `specify-component`, or an existing documented block — needs
25
+ working code
26
+ - A scaffolded component needs to be implemented against the live code standards
27
+
28
+ ## When NOT to Use
29
+
30
+ - No approved spec yet — run `specify-component` first (`specify-pattern` for a pattern)
31
+ - Only the anatomy is missing — that is `anatomy-author`
32
+ - Adopting existing components into an app — the `adoption-a1-styles` /
33
+ `adoption-a2-components` / `adoption-a3-forms` tracks, not this skill
34
+
35
+ ## Opening move: ask, or offer the tutorial
36
+
37
+ Activation is an opening, not a starting gun. Unless the first message already names
38
+ the work, ask for the starting point — as a suggestion carrying an example, not as a
39
+ form to fill in:
40
+
41
+ > To get started, tell me which block to implement — a name like "Badge", or point me
42
+ > at the spec it came out of. If the target framework or package isn't obvious, say
43
+ > that too.
44
+
45
+ If you are unsure whether the thing is specified at all, take the name anyway:
46
+ pre-flight is what decides, and it routes to `specify-component` when the spec turns
47
+ out not to be there. Ask again only for what the next step genuinely blocks on.
48
+
49
+ If the activation message already carries the starting point, do not re-ask — say what
50
+ you took it to be, and go.
51
+
52
+ Offer the tutorial in the same breath, because this skill doubles as one:
53
+
54
+ > Or if you'd rather see the flow first, I can run it as a tutorial: I'll pick a small
55
+ > documented block from the graph and walk you through it from pre-flight to review.
56
+
57
+ Tutorial mode is the step narration below, turned up: the same outcome-path-conclusion
58
+ frame, with the reasoning at each decision gate made fully explicit and a check that
59
+ the person is with you before the next step. Stop short of anything that lands — no
60
+ commit, no PR — unless they ask to keep what you built.
61
+
62
+ ## Every step is narrated: outcome, path, conclusion
63
+
64
+ Every step is addressed to the person — once before it runs, once when it ends. This is
65
+ not tutorial manner. It holds in the ordinary flow too: the person is the design
66
+ authority, and they can only steer a step they saw coming. A decision gate met cold is
67
+ a decision they cannot really make.
68
+
69
+ **Open** the step with what it is FOR — the outcome it should leave behind — and how
70
+ you are about to get there. **Close** it with a sentence saying what it established and
71
+ what that means for the step after. One sentence each is enough; the failure mode is
72
+ silence, not length, and a step whose outcome looks obvious still gets its sentence
73
+ rather than a shrug.
74
+
75
+ Do:
76
+
77
+ > **Pulling the standards, before any code.** The outcome is a shortlist held open
78
+ > while the Badge is written, so the code is shaped by the standards as it is written
79
+ > rather than corrected in review. The path is `pragma standard categories` for the
80
+ > live set, then `standard list --category <name>` for each one that applies.
81
+ >
82
+ > …
83
+ >
84
+ > So: `react`, `storybook` and `testing-unit` are the live shortlist and nothing in
85
+ > them contradicts the spec — implementation can proceed against them, with `css` and
86
+ > `styling` held back for the token work.
87
+
88
+ Don't:
89
+
90
+ > Step 3 — Pull the standards NOW
91
+ >
92
+ > Categories exist for: react (16), testing (+coverage/integration/regression/unit),
93
+ > storybook (11), css (15), styling (4).
94
+
95
+ Both carry the same facts. Only the first says what the step was trying to achieve and
96
+ what it settled — and only the first lets the person cut in with the thing they know
97
+ and the graph does not, which is the whole reason they are here.
98
+
99
+ ## Asked about the skill: methodology and outcomes first
100
+
101
+ A question about what this skill does — what it covers, what its steps are, how it
102
+ works — is answered in that order: the METHOD it applies and the OUTCOMES it leaves
103
+ the person holding come first, the step-by-step breakdown comes after.
104
+
105
+ Two or three sentences of method is enough: what the skill treats as its object, the
106
+ discipline that makes it work, and what exists at the end that did not exist before.
107
+ The enumeration then reads as steps in service of something, rather than as a list to
108
+ be got through.
109
+
110
+ What this prevents is a table of contents standing in for an answer. A reply opening
111
+ with the step names tells someone who already knows the skill nothing new, and someone
112
+ who does not, nothing at all.
113
+
114
+ So, asked what this skill is:
115
+
116
+ > It takes an approved spec to working code, and the discipline that defines it is
117
+ > that the applicable code standards are pulled and held open DURING implementation —
118
+ > so they shape the code as it is written, not only in review. You end holding a
119
+ > scaffolded and implemented component, any deviation from a standard recorded next to
120
+ > that standard's name, and an independent review of the result.
121
+
122
+ Then, and only then, the breakdown.
123
+
124
+ ## Pre-flight
125
+
126
+ 1. **Read the spec.**
127
+ - Documented block: `pragma block lookup <Name>` — anatomy, modifiers, properties in
128
+ one read (MCP: block_lookup); `pragma graph inspect <uri>` for the full triple view.
129
+ A bare name can match blocks in several tiers, and `block lookup` silently picks
130
+ one — it resolves `ds:name` globally and cannot be steered to a tier. Take the
131
+ picked block's tier from the lookup's own `- Tier:` line, and check for other
132
+ tiers carrying the name with the name query below, then address the tier you
133
+ want by its IRI.
134
+
135
+ ```bash
136
+ pragma graph query "SELECT ?b WHERE { ?b ds:name ?n . FILTER(LCASE(?n) = LCASE('<Name>')) }" # every tier carrying the name
137
+ ```
138
+
139
+ If the lookup picked the wrong tier's block, read the one you want with
140
+ `pragma graph inspect <IRI from that row>` instead — step 2 derives the package
141
+ from the tier of the block confirmed HERE.
142
+
143
+ **Check the entry is a spec before building on it — whatever class it is.**
144
+ A row resolving is not the same as a block being documented: many entries
145
+ across every class carry an empty `ds:summary`, `ds:usage` and `ds:anatomyDsl`,
146
+ and `block lookup <Name>` still answers for them with a heading, a blank line
147
+ and a `- Tier:` row. Judge the BASE DEFINITION: if `ds:summary`, `ds:usage` and
148
+ `ds:anatomyDsl` all came back filled, the block is documented — implement it,
149
+ and raise any single thin field (empty guidelines, say) as a gap rather than a
150
+ blocker. If all three came back empty, there is no spec here to implement: route
151
+ it to `specify-component`, per the When NOT to Use rules above.
152
+
153
+ Then read whatever `ds:documentationStage` tag came back. The tag vocabulary is
154
+ the graph's, not this skill's, so do not expect a fixed value list; **if the
155
+ predicate is absent, no stage is recorded for that block** — say so and carry on
156
+ with what the fields told you. The tag's MEANING is graph data too:
157
+
158
+ ```bash
159
+ pragma graph inspect ds:tag.<name> # the tag the stage read returned; ds:whenToApply says what it means
160
+ ```
161
+
162
+ Split the action on what `ds:whenToApply` says. A tag meaning the block was
163
+ rejected or triaged out, or that it is only PROPOSED or postponed — not yet
164
+ accepted into the system: this is not an approved spec, route it to
165
+ `specify-component`. A tag meaning the documentation is UNFINISHED: proceed, and
166
+ say so in the PR — route to `anatomy-author` only the fields that actually came
167
+ back empty, not the whole block. A tag whose `ds:whenToApply` comes back blank:
168
+ the meaning is unrecorded — treat it as unknown, and say so.
169
+
170
+ If the name has no row and the lookup errors, the block may be a Group — `block list`/`block lookup` cover no groups; the name query above returns its IRI for `pragma graph inspect <IRI>`.
171
+ Groups are the one UIBlock class `block list` deliberately omits, so the graph
172
+ entry is their only documentation surface — but the check above is the same
173
+ check: read the base definition, then the stage.
174
+
175
+ The inspect renders `ds:hasProperty` only as opaque blank-node labels; for the
176
+ property content use the lookup's Properties section — only when the lookup
177
+ resolved the block you want — or bind the property query to the block confirmed
178
+ above. (A `block list` row prints the `ds:` form — `graph inspect` takes it
179
+ as-is, but a SPARQL body needs the full IRI: join `https://ds.canonical.com/`
180
+ with the row's dotted name, e.g. for the global Button,
181
+ `<https://ds.canonical.com/global.component.button>`; the name query above
182
+ prints that full form directly. The bracketed prefixed form `<ds:…>` silently
183
+ returns an EMPTY table, not an error.)
184
+
185
+ ```bash
186
+ pragma graph query "SELECT ?p ?v WHERE { <https://ds.canonical.com/<dotted name from that row>> ds:hasProperty ?x . ?x ?p ?v }"
187
+ ```
188
+ - New block: the `specs/…` file its specify flow produced.
189
+ 2. **Confirm the target package and tier.** The spec names its tier; `pragma tier list`
190
+ shows what exists. Where a package exists for the tier, its name follows a
191
+ convention — the graph carries no package field: `@canonical/<framework>-ds-global`
192
+ for the `global` tier, `@canonical/<framework>-ds-app` for the shared `apps` tier,
193
+ and `@canonical/<framework>-ds-app-<app>` for an app-specific tier
194
+ (`apps_lxd` → `@canonical/react-ds-app-lxd`). The `<app>` segment is the package's
195
+ own short name, not always the tier suffix (the `apps_workplaceengineering` tier's
196
+ package is `@canonical/svelte-ds-app-wpe`) — confirm the derived package actually
197
+ resolves in the workspace before installing or scaffolding into it. Tiers outside
198
+ `global`/`apps*` have no package convention today: there the target package is a
199
+ decision to raise, not to derive.
200
+ 3. **Pull the applicable standards NOW.**
201
+
202
+ ```bash
203
+ pragma standard categories # what categories exist today
204
+ pragma standard list --category react # swap react for the target framework category
205
+ ```
206
+
207
+ > The covered set is whatever the graph answers today. Query it live — never copy its
208
+ > output into documentation, PRs, or this skill.
209
+
210
+ Repeat the `--category` listing for the testing, storybook, css, and styling
211
+ categories that apply to this component — take the category names from the
212
+ `standard categories` output, not from memory.
213
+
214
+ Then read the shortlisted standards' Do/Don't pairs — few-shot material to keep
215
+ open in the working context while writing. The pairs live in the graph; pull them
216
+ per category:
217
+
218
+ ```bash
219
+ pragma graph query "SELECT ?s ?kind ?caption ?code WHERE { ?s cs:hasCategory cs:react . { ?s cs:do ?x . BIND('do' AS ?kind) } UNION { ?s cs:dont ?x . BIND('dont' AS ?kind) } ?x cs:description ?caption . OPTIONAL { ?x cs:code ?code } }"
220
+ ```
221
+
222
+ Keep `cs:code` OPTIONAL as written — some pairs carry a caption and no code
223
+ snippet, and requiring the code triple silently drops those standards from the
224
+ result.
225
+
226
+ For ONE standard, bind the same query to its IRI. (`pragma graph inspect cs:<id>`
227
+ shows which predicates a standard carries, but renders `cs:do`/`cs:dont` only as
228
+ opaque blank-node labels — the pairs come back through the query, not the
229
+ inspect):
230
+
231
+ ```bash
232
+ pragma graph query "SELECT ?kind ?caption ?code WHERE { BIND(<http://pragma.canonical.com/codestandards#react.component.barrel_exports> AS ?s) { ?s cs:do ?x . BIND('do' AS ?kind) } UNION { ?s cs:dont ?x . BIND('dont' AS ?kind) } ?x cs:description ?caption . OPTIONAL { ?x cs:code ?code } }"
233
+ ```
234
+
235
+ Swap `cs:react` for each shortlisted category, using the category's GRAPH ID — not
236
+ its display name. `standard categories` prints display names (`testing-coverage`);
237
+ the graph ids differ (`testing.coverage`), and a display name pasted into the
238
+ query returns an empty table, not an error. List the exact IRIs with
239
+ `pragma graph query "SELECT DISTINCT ?c WHERE { ?s cs:hasCategory ?c }"` and paste
240
+ one in full `<…>` form, e.g.:
241
+
242
+ ```bash
243
+ pragma graph query "SELECT ?s ?kind ?caption ?code WHERE { ?s cs:hasCategory <http://pragma.canonical.com/codestandards#testing.coverage> . { ?s cs:do ?x . BIND('do' AS ?kind) } UNION { ?s cs:dont ?x . BIND('dont' AS ?kind) } ?x cs:description ?caption . OPTIONAL { ?x cs:code ?code } }"
244
+ ```
245
+
246
+ (Inside a SPARQL body a local name with more than one dot does not parse; a
247
+ single dot — `cs:testing.unit` — is fine.) `pragma standard lookup <name>` and
248
+ `pragma standard sample` resolve only the standards that carry a `cs:name`
249
+ title — today only a few do — so for the rest the graph query above is the read
250
+ path. (MCP: standard_categories / standard_list / graph_query / graph_inspect.)
251
+
252
+ ## Scaffold
253
+
254
+ ```bash
255
+ pragma create component react src/components/Button
256
+ ```
257
+
258
+ - The framework is a tree segment — `pragma create component <framework> <path>` with
259
+ `react`, `svelte`, or `lit` as the segment; the path's final segment is the
260
+ PascalCase component name.
261
+ - Run it from inside the target package confirmed in pre-flight step 2 — the path is
262
+ package-relative (in the ds packages, components live at `src/lib/component/<Name>`,
263
+ so the path there is `src/lib/component/Button`, not the generic example above).
264
+ - Plan-first: preview with `--dry-run`, apply non-interactively with `--yes`, reverse
265
+ with `--undo`. Run without `--yes` to answer the generator's prompts interactively.
266
+ - The scaffold's include options (styles, stories, SSR tests) are prompt-derived and
267
+ discoverable — read them from the leaf's own help, never from a copied table:
268
+
269
+ ```bash
270
+ pragma create component react --help
271
+ ```
272
+
273
+ - MCP: the `create_component` tool ({framework, componentPath, …}); it returns a plan
274
+ unless `confirm: true`.
275
+
276
+ The same generator is available as `summon component react src/components/Button` —
277
+ `pragma create <args…>` and `summon <args…>` are one machine in two binaries, identical
278
+ grammar. Teach and use the pragma spelling.
279
+
280
+ ## Implement following the pulled standards
281
+
282
+ Write the component against the open Do/Don't pairs from pre-flight. When a case comes
283
+ up that the shortlist does not cover, widen before improvising: re-run
284
+ `pragma standard categories`, list the further categories that could apply
285
+ (`pragma standard list --category <c>`), and pull their Do/Don't pairs with the same
286
+ graph query as pre-flight. Each surface takes its own spelling: `--category` takes the
287
+ DISPLAY name `standard categories` prints (`testing-coverage`); the SPARQL body takes
288
+ the category's graph id from the `SELECT DISTINCT ?c` read there (`testing.coverage`) —
289
+ never the other way around. An empty pair table has two causes: a display name pasted
290
+ into the query, or a category that records standards but no Do/Don't pairs at all —
291
+ `pragma standard list --category <c>` distinguishes them (it lists the category's
292
+ standards either way; when no pairs exist, work from those standards' descriptions).
293
+
294
+ A standard you disagree with is feedback for the standards repo, not a license to
295
+ deviate silently.
296
+
297
+ ## Post-flight
298
+
299
+ - Fill in the stories and tests the scaffold stubbed — the spec's properties, modifiers,
300
+ and states each get exercised.
301
+ - Register the component per the package's convention (barrel/export registration).
302
+ - Run the package's own `bun run check` and `bun run test` (the repo-standard script
303
+ names) until green.
304
+
305
+ ## Close: independent review
306
+
307
+ Finish by invoking the `standards-review` skill as the independent quality gate over the
308
+ diff:
309
+
310
+ ```bash
311
+ pragma skill lookup standards-review
312
+ ```
313
+
314
+ It ships from canonical/web-code-standards once that skill lands; until then the
315
+ lookup will not resolve. Fall back to re-reading the pre-flight Do/Don't material
316
+ against the diff yourself, and say in the PR that the independent gate was
317
+ unavailable.
318
+
319
+ ## Related skills
320
+
321
+ - `specify-component` — upstream: produces the spec this skill implements
322
+ - `anatomy-author` — the structure contract the implementation must honor
323
+
324
+ ## Support
325
+
326
+ If this skill leads somewhere broken — a command that errors, guidance that
327
+ contradicts what the live system answers, a gap the flow cannot cover — you are not
328
+ stuck:
329
+
330
+ - Raise an issue in the pragma repo: https://github.com/canonical/pragma/issues —
331
+ include the skill name, what was run, and expected vs. actual outcome.
332
+ - Or contact the design-system team owners directly through your organization's
333
+ professional messaging channels for assistance.
@@ -0,0 +1,331 @@
1
+ ---
2
+ name: specify-component
3
+ description: Specify a new design-system component with the knowledge graph, from graph search to a sync-safe spec file; also runs as a guided tutorial on a worked example
4
+ ---
5
+
6
+ # Specify Component
7
+
8
+ Create a NEW component on the design/spec side, using the full power of the knowledge
9
+ graph. This skill supersedes the retired component-specifier skill (a name that no
10
+ longer resolves) with an eight-step flow: nothing is invented before the graph has been
11
+ searched, the entry shape comes from the ontology, and the output is a standalone spec
12
+ file the data sync cannot destroy.
13
+
14
+ In a fresh session, orient first:
15
+
16
+ ```bash
17
+ pragma capabilities
18
+ ```
19
+
20
+ ## Working mode: assistant to a design authority
21
+
22
+ Most of the time this skill runs in collaboration with a senior designer or engineer —
23
+ they are the design authority, you are the assistant whose job is to make them
24
+ successful. Default to that mode:
25
+
26
+ - Lay out the workflow direction: say which step comes next and why, so the person
27
+ always knows where the flow stands.
28
+ - Do the legwork yourself — graph searches, ontology reads, benchmark research — and
29
+ bring back digestible findings, not raw dumps.
30
+ - Bring each decision to the person as a recommendation plus a question, never as a
31
+ fait accompli. They hold context the graph does not — history, intent, naming
32
+ precedent, roadmap — so ask the questions that draw that knowledge out, and use it.
33
+
34
+ Full autonomy is the exception, not the default: run the whole flow alone only when
35
+ explicitly asked to. Even then, list every judgment call made unilaterally in the
36
+ final report so a human can revisit them.
37
+
38
+ Decision gates — in collaboration, pause at each and resolve it WITH the person:
39
+
40
+ 1. The step-1 verdict: exists/extend vs. a named gap.
41
+ 2. The step-2 category choice (which `ds:UIBlock` subclass the entry is).
42
+ 3. The step-3 boundary: how the definition disambiguates from its neighbors.
43
+ 4. The step-4 adopt/reject decisions from the benchmark.
44
+ 5. Whether the step-5 state gate fires, and the state model when it does.
45
+
46
+ ## When to Use
47
+
48
+ - A component is proposed that the design system may not cover yet
49
+ - An existing component needs a formally specified sibling or replacement
50
+ - A gap found during adoption or implementation needs to become a real spec
51
+
52
+ ## When NOT to Use
53
+
54
+ - Implementing an already-specified component — use `implement-component`
55
+ - Specifying a pattern (a recurring arrangement of components) — use `specify-pattern`
56
+ - Writing only the anatomy for an existing block — use `anatomy-author`
57
+
58
+ ## Opening move: ask, or offer the tutorial
59
+
60
+ Activation is an opening, not a starting gun. Unless the first message already names
61
+ the work, ask for the starting point — as a suggestion carrying an example, not as a
62
+ form to fill in:
63
+
64
+ > To get started, tell me the component you'd like to work on — a name if it has one,
65
+ > or just the idea, like "it should let someone pick a date".
66
+
67
+ Rough is fine, and often better: step 1 turns an idea into a graph search, and the
68
+ search regularly renames the thing. Ask again only for what the next step genuinely
69
+ blocks on.
70
+
71
+ If the activation message already carries the starting point, do not re-ask — say what
72
+ you took it to be, and go.
73
+
74
+ Offer the tutorial in the same breath, because this skill doubles as one:
75
+
76
+ > Or if you'd rather see the flow first, I can run it as a tutorial: I'll take a
77
+ > plausible example — a date picker, say — and walk you through the eight steps on it.
78
+
79
+ Tutorial mode is the step narration below, turned up: the same outcome-path-conclusion
80
+ frame, with the reasoning at each decision gate made fully explicit and a check that
81
+ the person is with you before the next step. Stop short of anything that lands — no spec
82
+ file written, no proposal filed — unless they ask to keep what you built.
83
+
84
+ ## Every step is narrated: outcome, path, conclusion
85
+
86
+ Every step is addressed to the person — once before it runs, once when it ends. This is
87
+ not tutorial manner. It holds in the ordinary flow too: the person is the design
88
+ authority, and they can only steer a step they saw coming. A decision gate met cold is
89
+ a decision they cannot really make.
90
+
91
+ **Open** the step with what it is FOR — the outcome it should leave behind — and how
92
+ you are about to get there. **Close** it with a sentence saying what it established and
93
+ what that means for the step after. One sentence each is enough; the failure mode is
94
+ silence, not length, and a step whose outcome looks obvious still gets its sentence
95
+ rather than a shrug.
96
+
97
+ Do:
98
+
99
+ > **Step 1 — search the graph.** The outcome is a verdict: the thing already exists,
100
+ > an existing block should be extended, or there is a named gap worth specifying. The
101
+ > path is `pragma block list` for the catalog, then `block lookup` on the closest
102
+ > candidates.
103
+ >
104
+ > …
105
+ >
106
+ > So: nothing covers date entry, and the nearest neighbour (`Input`) stops at free
107
+ > text — a real gap, and one that step 2 has to place as a component rather than a
108
+ > pattern.
109
+
110
+ Don't:
111
+
112
+ > Step 1 — Search the graph
113
+ >
114
+ > 87 blocks. No date picker. Closest: Input, Select.
115
+
116
+ Both carry the same facts. Only the first says what the step was trying to achieve and
117
+ what it settled — and only the first lets the person cut in with the thing they know
118
+ and the graph does not, which is the whole reason they are here.
119
+
120
+ ## Asked about the skill: methodology and outcomes first
121
+
122
+ A question about what this skill does — what it covers, what its steps are, how it
123
+ works — is answered in that order: the METHOD it applies and the OUTCOMES it leaves
124
+ the person holding come first, the step-by-step breakdown comes after.
125
+
126
+ Two or three sentences of method is enough: what the skill treats as its object, the
127
+ discipline that makes it work, and what exists at the end that did not exist before.
128
+ The enumeration then reads as steps in service of something, rather than as a list to
129
+ be got through.
130
+
131
+ What this prevents is a table of contents standing in for an answer. A reply opening
132
+ with the step names tells someone who already knows the skill nothing new, and someone
133
+ who does not, nothing at all.
134
+
135
+ So, asked what this skill is:
136
+
137
+ > It specifies a component against the knowledge graph, and the discipline is that
138
+ > nothing is invented before the graph has been searched: the entry's category comes
139
+ > from the ontology rather than from taste, the boundary is drawn against its real
140
+ > neighbours, and a benchmark decides what is adopted and what is refused. You end
141
+ > holding a standalone spec file the data sync cannot destroy, plus a record of every
142
+ > judgment call it took to get there.
143
+
144
+ Then, and only then, the breakdown.
145
+
146
+ ## The spec falls under standards too
147
+
148
+ A spec is Turtle, and Turtle has standards — the `turtle` category, with `ui-blocks`
149
+ governing how blocks are modelled (take the actual set from
150
+ `pragma standard categories`, not from this list). Pull them before writing and hold
151
+ the Do/Don't pairs open; a spec that contradicts a pulled standard carries a DECLARED
152
+ deviation in the proposal, ideally also filed as an issue. The standards apply
153
+ independent of any package dependency and are open to contribution: a missing or
154
+ wrong modelling rule is something to propose a change for, not to silently work
155
+ around.
156
+
157
+ ## The eight steps
158
+
159
+ ### 1. Search the graph
160
+
161
+ Before anything is invented, find what already exists:
162
+
163
+ ```bash
164
+ pragma block list # every component, pattern, layout and subcomponent, with its type and tier
165
+ pragma block lookup <Name-or-glob> # full spec of candidates: anatomy, modifiers, properties (MCP: block_lookup); a glob repeats a multi-tier name once per IRI and every repeat is the SAME block — the fragment query below lists the tiers
166
+ pragma block sample # real entry shapes — read these BEFORE writing queries
167
+ pragma modifier list # the modifier families blocks draw from
168
+ pragma tier list # the tiers a block can live in
169
+ ```
170
+
171
+ Search by name fragment when the naming is uncertain:
172
+
173
+ ```bash
174
+ pragma graph query "SELECT ?b ?name WHERE { ?b ds:name ?name . FILTER(CONTAINS(LCASE(?name), 'crumb')) }"
175
+ ```
176
+
177
+ > The covered set is whatever the graph answers today. Query it live — never copy its
178
+ > output into documentation, PRs, or this skill.
179
+
180
+ Outcome gate: **either "exists — stop or extend it" or a NAMED gap.** No spec is written
181
+ without one of those two sentences, naming the blocks that were checked.
182
+
183
+ ### 2. Understand the ontology
184
+
185
+ Read the shape the entry must satisfy:
186
+
187
+ ```bash
188
+ pragma ontology lookup ds # the design-system vocabulary
189
+ pragma ontology lookup ds --class UIBlock # the block-level properties every entry carries
190
+ pragma ontology lookup ds --class Component # what Component itself declares
191
+ ```
192
+
193
+ `--class` shows only what a class declares itself — usage, guidelines, properties,
194
+ and tier are declared on `ds:UIBlock` and inherited by its subclasses; `summary` and
195
+ `name` sit further up the chain on `ds:Entity`
196
+ (`pragma ontology lookup ds --class Entity`).
197
+
198
+ The documented conventions the entry follows:
199
+
200
+ - `ds:summary` — what the component is, in one or two sentences
201
+ - `ds:usage` — markdown with `### When to use` and `### When not to use` sections
202
+ - `ds:guidelines` — markdown; Accessibility material lives here by convention
203
+ (contrast, alternative text, keyboard and focus behavior)
204
+ - `ds:hasProperty` — one entry per property: name, type, summary, optional, default,
205
+ constraints
206
+ - Modifier families the component participates in
207
+ - The tier it belongs to
208
+ - The category definitions — `pragma ontology lookup ds` above lists every `ds:UIBlock` subclass; read what each one means with `pragma graph inspect ds:<Subclass>`
209
+ (each prints its `skos:definition`; `--class` prints declared properties, not
210
+ definitions), and state which category the entry belongs to BEFORE writing
211
+
212
+ Each field's acceptance criteria live on the property itself —
213
+ `pragma graph inspect ds:usage` / `ds:guidelines` print the `ds:acceptanceCriteria`
214
+ the content must satisfy; read them before writing the field.
215
+
216
+ Do not trust this list over the data: run `pragma block sample` and mirror what real
217
+ entries carry today. The draw is RANDOM and many blocks are near-empty, so a sample can come back content-free and teach you nothing: re-run it until it lands on a filled entry, or inspect a block you already know is documented.
218
+
219
+ ### 3. Define the principles
220
+
221
+ Write the component's main definition — and write it to DISAMBIGUATE. Name the closest
222
+ existing blocks found in step 1 and state the boundary explicitly: "unlike X, this …".
223
+ A definition that could equally describe a step-1 neighbor is not done.
224
+
225
+ ### 4. Research & benchmark
226
+
227
+ Study the same affordance or role in other design systems — React Aria, Carbon,
228
+ Material, shadcn (list extensible). Compare:
229
+
230
+ - API shape
231
+ - Accessibility pattern
232
+ - Naming
233
+ - State model
234
+ - Composition
235
+
236
+ Output: a short comparison table plus an explicit statement of what pragma adopts, what
237
+ it rejects, and why.
238
+
239
+ ### 5. State-complexity gate
240
+
241
+ Decide whether the component carries complex, state-machine-like state: many interacting
242
+ modes, async transitions, orchestration across parts.
243
+
244
+ Calibration: a Button — hover, active, disabled visual states — does NOT fire this
245
+ gate; a Combobox — open/closed, filtering, async loading, selection moving between
246
+ input and list — does.
247
+
248
+ If YES, write a **"States & interaction"** section INSIDE the guidelines content of the
249
+ spec (the v0 home for the state spec), covering:
250
+
251
+ - The states
252
+ - Events and transitions between them
253
+ - The initial state
254
+ - Error states
255
+ - Keyboard interactions per state
256
+
257
+ If NO, say so in the spec and move on.
258
+
259
+ ### 6. Write the documentation (without the anatomy)
260
+
261
+ Write the spec in markdown or Turtle following the step-2 structure: definition, usage,
262
+ guidelines (including the step-5 section when it fired), properties. The anatomy is
263
+ step 7, not here.
264
+
265
+ **Output location (hard rule)**: a standalone spec file the sync cannot destroy.
266
+
267
+ - In canonical/design-system: `specs/<tier>.<type>.<snake_name>.{md,ttl}`
268
+ (e.g. `specs/global.component.carousel.md` — step 1 must have shown the name to be
269
+ a genuine gap first)
270
+ - In any other repo: that repo's design-docs location
271
+
272
+ NEVER write into design-system `data/` — it is regenerated destructively from Coda by
273
+ CI, and hand edits are overwritten by the next sync. Database entry is a separate,
274
+ currently-human step: a person pastes the spec content into Coda.
275
+
276
+ ### 7. Write the anatomy DSL
277
+
278
+ Delegate to the `anatomy-author` skill:
279
+
280
+ ```bash
281
+ pragma skill lookup anatomy-author
282
+ ```
283
+
284
+ The skill covers named and anonymous nodes, edges with cardinality, slot names, and
285
+ CTI-inspired style keys; the full ANATOMY_DSL_SPEC ships beside it as
286
+ `ANATOMY_DSL_SPEC.md` in the installed `anatomy-author` skill folder (the lookup
287
+ renders SKILL.md only — open that file directly for the complete spec). The produced
288
+ DSL lands in the step-6 spec file
289
+ under `specs/` — in a `.md` spec as its anatomy section, in a `.ttl` spec as the
290
+ block's `ds:anatomyDsl` string literal — never under `data/`; entry into Coda stays
291
+ the human step.
292
+
293
+ ### 8. Pair with tokens — placeholder
294
+
295
+ **Left blank for now** — token pairing content lands with the token work. Do not invent
296
+ token guidance.
297
+
298
+ ## Response format
299
+
300
+ Report the spec-file path, then the eight step outcomes as a checklist (the reported
301
+ path ends in `.ttl` instead when step 6 took the Turtle branch):
302
+
303
+ ```markdown
304
+ Spec: specs/<tier>.<type>.<snake_name>.md
305
+
306
+ - [ ] 1. Graph searched — verdict: exists/extend OR named gap (blocks checked: …)
307
+ - [ ] 2. Ontology shape read (classes and conventions applied)
308
+ - [ ] 3. Principles defined, disambiguated from: …
309
+ - [ ] 4. Benchmarked against: … (adopt/reject decisions stated)
310
+ - [ ] 5. State gate: fired/not fired (States & interaction section: yes/no)
311
+ - [ ] 6. Documentation written to the sync-safe location
312
+ - [ ] 7. Anatomy DSL written via anatomy-author
313
+ - [ ] 8. Token pairing: placeholder (deferred)
314
+ ```
315
+
316
+ ## Related skills
317
+
318
+ - `anatomy-author` — the step-7 engine
319
+ - `specify-pattern` — the same skeleton, context-first, for recurring arrangements
320
+ - `implement-component` — what happens after the spec is approved
321
+
322
+ ## Support
323
+
324
+ If this skill leads somewhere broken — a command that errors, guidance that
325
+ contradicts what the live system answers, a gap the flow cannot cover — you are not
326
+ stuck:
327
+
328
+ - Raise an issue in the pragma repo: https://github.com/canonical/pragma/issues —
329
+ include the skill name, what was run, and expected vs. actual outcome.
330
+ - Or contact the design-system team owners directly through your organization's
331
+ professional messaging channels for assistance.