@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
@@ -26,6 +26,16 @@
26
26
  * ours to pin): 4 `ds:Component` (Button, Modal, LXD Panel, Beta Widget),
27
27
  * `importance` family with value `primary`, code standard
28
28
  * `code/function/purity`.
29
+ *
30
+ * Two of those anchors exist to pin an ABSENCE, and are load-bearing for the
31
+ * "declared, not inferred" halves of the read grammar:
32
+ * - `ds:token.legacy.borderRadius` — a `ds:Token` with no `ds:tokenId`, which
33
+ * `token list` therefore never publishes and `token lookup`/`token sample`
34
+ * must never reach (`PackLookup.nameFallback` is declared by `standard`
35
+ * alone).
36
+ * - `cs:archive` — a `cs:Category` with no standards, which `standard
37
+ * categories` reports at count 0 and `standard list --category archive` must
38
+ * answer with a calm empty list rather than INVALID_INPUT.
29
39
  */
30
40
 
31
41
  import { BLOCK_PREFIXES, BLOCK_TTL } from "../blockGraph.js";
@@ -76,13 +86,46 @@ ds:token.spacing.medium a ds:Token ;
76
86
  ds:tokenType ds:type.spacing ;
77
87
  ds:valueLight "16px" ;
78
88
  ds:valueDark "16px" .
89
+
90
+ # A ds:Token carrying NO ds:tokenId — the entity "token list" does not publish,
91
+ # because its query REQUIRES the id. It is here to pin what a lookup may NOT
92
+ # reach: "token lookup" addresses by ds:tokenId, and a story whose list requires
93
+ # its "by" property must not become addressable (or sampleable) under a name
94
+ # derived from its IRI. See PackLookup.nameFallback, declared by the "standard"
95
+ # story alone — the one story whose list DOES publish such a name.
96
+ ds:token.legacy.borderRadius a ds:Token ;
97
+ ds:tokenType ds:type.spacing ;
98
+ ds:valueLight "4px" ;
99
+ ds:valueDark "4px" .
79
100
  `;
80
101
 
81
- /** The `cs:` (code standards) section — reused verbatim from `standard/parity.test.ts`'s
82
- * fixture shape so `code/function/purity`/`react/component/*` are stable, shared
83
- * anchor names rather than a second invented set. */
102
+ /**
103
+ * The `cs:` (code standards) section — shaped like the SHIPPED code-standards
104
+ * graph, not like a convenience fixture.
105
+ *
106
+ * Two facts about the real data are reproduced here on purpose, because the
107
+ * eval harness was blind to both while every fixture standard carried a
108
+ * `cs:name`:
109
+ *
110
+ * 1. **Most standards carry NO `cs:name`.** The shipped graph asserts it on 22
111
+ * of 156 (~13%); one of the eight standards below carries one (~13%). The
112
+ * ontology says so deliberately — `cs:name` is "an optional human-readable
113
+ * display title" that "never participates in identity", the canonical
114
+ * identifier being the compact IRI. So the name `standard list` publishes for
115
+ * the other seven is SYNTHESIZED from the IRI local name
116
+ * (`cs:react.component.props` → `react/component/props`), and a lookup that
117
+ * cannot resolve a synthesized name cannot resolve the graph.
118
+ * 2. **Categories are a two-level SKOS tree.** `cs:testing.unit skos:broader
119
+ * cs:testing`, exactly as the shipped graph declares for `testing.*` and
120
+ * `ui_blocks.nojs`, and one standard sits DIRECTLY on the parent — the case a
121
+ * non-reflexive roll-up (`skos:broader+`) silently drops.
122
+ *
123
+ * Anchor names (`code/function/purity`, `react/component/*`) are unchanged; they
124
+ * are simply reached the way the real graph reaches them.
125
+ */
84
126
  const CS_TTL = `
85
127
  @prefix cs: <http://pragma.canonical.com/codestandards#> .
128
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
86
129
 
87
130
  cs:CodeStandard a owl:Class .
88
131
  cs:Category a owl:Class .
@@ -97,27 +140,66 @@ cs:dont a owl:ObjectProperty ; rdfs:domain cs:CodeStandard ; rdfs:range cs:Examp
97
140
  cs:language a owl:DatatypeProperty ; rdfs:domain cs:Example ; rdfs:range xsd:string .
98
141
  cs:code a owl:DatatypeProperty ; rdfs:domain cs:Example ; rdfs:range xsd:string .
99
142
 
100
- cs:cat.react a cs:Category ; cs:slug "react" .
101
- cs:cat.code a cs:Category ; cs:slug "code" .
143
+ # ---- Categories: flat roots, plus one two-level branch (testing) ----
144
+ cs:react a cs:Category ; rdfs:label "React" ; cs:slug "react" .
145
+ cs:code a cs:Category ; rdfs:label "Code" ; cs:slug "code" .
146
+ cs:turtle a cs:Category ; rdfs:label "Turtle" ; cs:slug "turtle" .
147
+ cs:testing a cs:Category ; rdfs:label "Testing" ; cs:slug "testing" .
148
+ cs:testing.unit a cs:Category ;
149
+ rdfs:label "Unit testing" ;
150
+ cs:slug "testing-unit" ;
151
+ skos:broader cs:testing .
102
152
 
153
+ # A category the graph DECLARES with no standards filed under it. The
154
+ # "standard categories" verb lists it with count 0, so
155
+ # "standard list --category archive" must be the documented calm empty list — a
156
+ # real slug, an empty answer. Validity read off the returned ROWS instead of the
157
+ # graph called it INVALID_INPUT.
158
+ cs:archive a cs:Category ;
159
+ rdfs:label "Archive" ;
160
+ cs:slug "archive" .
161
+
162
+ # ---- Standards. Seven of eight carry NO cs:name (the shipped ~13% split). ----
103
163
  cs:react.component.props a cs:CodeStandard ;
104
- cs:name "react/component/props" ;
105
164
  cs:description "Type component props explicitly." ;
106
- cs:hasCategory cs:cat.react ;
165
+ cs:hasCategory cs:react ;
107
166
  cs:do [ a cs:Example ; cs:description "Do type props" ; cs:language "tsx" ; cs:code "interface P {}" ] ;
108
167
  cs:dont [ a cs:Example ; cs:description "Avoid any" ; cs:language "tsx" ; cs:code "props: any" ] .
109
168
 
110
169
  cs:react.component.structure a cs:CodeStandard ;
111
- cs:name "react/component/structure" ;
112
170
  cs:description "Keep folder structure flat." ;
113
- cs:hasCategory cs:cat.react ;
171
+ cs:hasCategory cs:react ;
114
172
  cs:extends cs:react.component.props ;
115
173
  cs:do [ a cs:Example ; cs:description "Do flatten" ; cs:language "text" ; cs:code "src/Button.tsx" ] .
116
174
 
117
175
  cs:code.function.purity a cs:CodeStandard ;
118
- cs:name "code/function/purity" ;
119
176
  cs:description "Prefer pure functions." ;
120
- cs:hasCategory cs:cat.code .
177
+ cs:hasCategory cs:code .
178
+
179
+ # The standard sitting DIRECTLY on the parent category: a skos:broader+
180
+ # roll-up loses it, a reflexive skos:broader* keeps it.
181
+ cs:testing.smoke a cs:CodeStandard ;
182
+ cs:description "Keep one end-to-end smoke path green." ;
183
+ cs:hasCategory cs:testing .
184
+
185
+ cs:testing.unit.isolation a cs:CodeStandard ;
186
+ cs:description "Isolate the unit under test." ;
187
+ cs:hasCategory cs:testing.unit .
188
+
189
+ cs:testing.unit.naming a cs:CodeStandard ;
190
+ cs:description "Name a unit test for the behaviour it pins." ;
191
+ cs:hasCategory cs:testing.unit ;
192
+ cs:do [ a cs:Example ; cs:description "Do name the behaviour" ; cs:language "ts" ; cs:code "it(\\"rejects an empty batch\\")" ] .
193
+
194
+ cs:testing.unit.fixtures a cs:CodeStandard ;
195
+ cs:description "Share one fixture per behavioural claim." ;
196
+ cs:hasCategory cs:testing.unit .
197
+
198
+ # The ~13%: a display title that adds something the IRI does not.
199
+ cs:turtle.naming.local_name_casing a cs:CodeStandard ;
200
+ cs:name "Turtle local-name casing" ;
201
+ cs:description "Use snake_case for multi-word local-name segments." ;
202
+ cs:hasCategory cs:turtle .
121
203
  `;
122
204
 
123
205
  /** The `ds:Prompt` workflow templates — the ONE source both the `prompt_list`/
@@ -160,19 +242,106 @@ ds:prompt.configure a ds:Prompt ;
160
242
  ds:prompt.scaffold-component a ds:Prompt ;
161
243
  rdfs:label "scaffold-component" ;
162
244
  rdfs:comment "Scaffold a new component and align it to the standards." ;
163
- ds:promptBody "Scaffold the {{componentName}} component in {{framework}}. Use create_component with the component path and --framework {{framework}}, then review the generated files against the react/component standards via standard_lookup." ;
245
+ ds:promptBody "Scaffold the {{componentName}} component in {{framework}}. Use create_component with framework {{framework}} and the component path, then review the generated files against the react/component standards via standard_lookup." ;
164
246
  ds:promptArgument [ ds:argName "componentName" ; rdfs:comment "Component name/path (e.g. Button)." ; ds:argRequired true ] ;
165
247
  ds:promptArgument [ ds:argName "framework" ; rdfs:comment "react | svelte | lit." ; ds:argRequired false ] .
166
248
  `;
167
249
 
250
+ /** The `ds:Concept` section — long-form documentation entries the `concept`
251
+ * story reads. Mirrors the real design-system data shape (canonical/design-system#64):
252
+ * `ds:name`/`ds:summary`/`ds:tier` base, the Markdown body in `ds:content`
253
+ * (standard disclosure), `ds:knownEdgeCases` (detailed), and `ds:conceptType`
254
+ * → a named `ds:ConceptType` individual carrying its own `ds:name`. */
255
+ const CONCEPT_TTL = `
256
+ ds:Concept a owl:Class .
257
+ ds:ConceptType a owl:Class .
258
+ ds:content a owl:DatatypeProperty ; rdfs:domain ds:Concept ; rdfs:range xsd:string .
259
+ ds:knownEdgeCases a owl:DatatypeProperty ; rdfs:domain ds:Concept ; rdfs:range xsd:string .
260
+ ds:conceptType a owl:ObjectProperty ; rdfs:domain ds:Concept ; rdfs:range ds:ConceptType .
261
+
262
+ ds:concepttype.Explanation a ds:ConceptType ;
263
+ ds:name "Explanation" ;
264
+ ds:summary "Concept documentation that deepens understanding of a topic." .
265
+
266
+ ds:concepttype.How-to-guide a ds:ConceptType ;
267
+ ds:name "How-to guide" ;
268
+ ds:summary "Concept documentation that walks through solving a problem." .
269
+
270
+ ds:concept.Foundations-Grid a ds:Concept ;
271
+ ds:name "Foundations: Grid" ;
272
+ ds:summary "How the grid system underpins every layout." ;
273
+ ds:tier ds:global ;
274
+ ds:conceptType ds:concepttype.Explanation ;
275
+ ds:content "The grid is the shared spatial contract every block lays out against." ;
276
+ ds:knownEdgeCases "Nested grids inherit the outer gutter unless re-declared." .
277
+
278
+ ds:concept.Question-mark-vs-information-icon a ds:Concept ;
279
+ ds:name "Question mark vs information icon" ;
280
+ ds:summary "Deciding between the information icon and the question mark icon." ;
281
+ ds:tier ds:global ;
282
+ ds:conceptType ds:concepttype.How-to-guide ;
283
+ ds:content "The information icon offers context proactively; the question mark answers a question the user already has." ;
284
+ ds:knownEdgeCases "Icon interpretation depends on the user's prior conventions." .
285
+ `;
286
+
287
+ /**
288
+ * The implementation graph: two libraries whose `ds:implementsBlock` edges point
289
+ * at `BLOCK_TTL`'s own Button/Modal IRIs, so a test can prove the cross-pack
290
+ * join (an implementation collected from source resolving to a block declared by
291
+ * the design system) rather than just the shape of a row. Button is implemented
292
+ * TWICE, on two platforms — the case `--platform` has to separate.
293
+ */
294
+ const IMPLEMENTATION_TTL = `
295
+ ds:ImplementationLibrary a owl:Class .
296
+ ds:ImplementationObject a owl:Class .
297
+ ds:hasImplementation a owl:ObjectProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range ds:ImplementationObject .
298
+ ds:implementsBlock a owl:ObjectProperty ; rdfs:domain ds:ImplementationObject ; rdfs:range ds:UIBlock .
299
+ ds:libraryName a owl:DatatypeProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range xsd:string .
300
+ ds:platform a owl:DatatypeProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range xsd:string .
301
+ ds:libraryTier a owl:ObjectProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range ds:Tier .
302
+ ds:implementationCount a owl:DatatypeProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range xsd:integer .
303
+ ds:headLink a owl:DatatypeProperty ; rdfs:domain ds:ImplementationObject ; rdfs:range xsd:string .
304
+ ds:versionedLink a owl:DatatypeProperty ; rdfs:domain ds:ImplementationObject ; rdfs:range xsd:string .
305
+
306
+ ds:implementation.library.react-ds-global a ds:ImplementationLibrary ;
307
+ ds:libraryName "@canonical/react-ds-global" ;
308
+ ds:platform "react" ;
309
+ ds:libraryTier ds:global ;
310
+ ds:version "0.34.0" ;
311
+ ds:implementationCount 2 ;
312
+ ds:hasImplementation ds:implementation.react-ds-global.button,
313
+ ds:implementation.react-ds-global.modal .
314
+
315
+ ds:implementation.react-ds-global.button a ds:ImplementationObject ;
316
+ ds:implementsBlock ds:button ;
317
+ ds:headLink "https://example.test/react/Button.tsx" .
318
+
319
+ ds:implementation.react-ds-global.modal a ds:ImplementationObject ;
320
+ ds:implementsBlock ds:modal ;
321
+ ds:headLink "https://example.test/react/Modal.tsx" .
322
+
323
+ ds:implementation.library.svelte-ds-global a ds:ImplementationLibrary ;
324
+ ds:libraryName "@canonical/svelte-ds-global" ;
325
+ ds:platform "svelte" ;
326
+ ds:libraryTier ds:global ;
327
+ ds:version "0.34.0" ;
328
+ ds:implementationCount 1 ;
329
+ ds:hasImplementation ds:implementation.svelte-ds-global.button .
330
+
331
+ ds:implementation.svelte-ds-global.button a ds:ImplementationObject ;
332
+ ds:implementsBlock ds:button ;
333
+ ds:headLink "https://example.test/svelte/Button.svelte" .
334
+ `;
335
+
168
336
  /** The prefixes the canonical store is built and queried with. */
169
337
  export const CANONICAL_PREFIXES: Readonly<Record<string, string>> = {
170
338
  ...BLOCK_PREFIXES,
171
339
  cs: "http://pragma.canonical.com/codestandards#",
340
+ skos: "http://www.w3.org/2004/02/skos/core#",
172
341
  };
173
342
 
174
343
  /** The full canonical Turtle: PR3's `BLOCK_TTL` verbatim, plus the sections above. */
175
- export const CANONICAL_TTL = `${BLOCK_TTL}\n${DS_EXTRA_TTL}\n${CS_TTL}\n${PROMPT_TTL}`;
344
+ export const CANONICAL_TTL = `${BLOCK_TTL}\n${DS_EXTRA_TTL}\n${CS_TTL}\n${PROMPT_TTL}\n${CONCEPT_TTL}\n${IMPLEMENTATION_TTL}`;
176
345
 
177
346
  /** Default viewing config: no tier set, `normal` channel — drops the beta-only block. */
178
347
  export const CANONICAL_CONFIG = { channel: "normal" as const };
@@ -171,7 +171,7 @@ ex:beta ex:name "Beta" .
171
171
  /**
172
172
  * A malformed Turtle source — a subject/predicate with no object — drives the
173
173
  * `sources update` data-error classification path (a NAMED `CONFIG_ERROR`, not
174
- * an INTERNAL "please report this issue").
174
+ * an INTERNAL "report this issue").
175
175
  */
176
176
  export const MALFORMED_TTL = `@prefix ex: <https://ex.test/#> .
177
177
  ex:One a ex:Widget .
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Blank the @canonical/* dependency ranges inside a scaffolded application's
3
+ * `my-app/package.json` — identically on every snapshot — before a byte
4
+ * comparison. The application generator resolves its range through each
5
+ * producer's OWN `npm view` call (no timeout, no shared cache), so an
6
+ * asymmetric registry outcome (one producer reaches npm and another does
7
+ * not, or a @canonical/* release lands between the calls) would turn
8
+ * `^0.34.0` vs `^0.33.0` across all 11 ranges into a red that says nothing
9
+ * about the code under test. The networked cases prove the TEMPLATE surface;
10
+ * range truth belongs to the offline cells, where the outcome is forced
11
+ * (`capabilities/create/shippedCreate.subprocess.test.ts`).
12
+ *
13
+ * The regex preserves the dependency KEY (`$1`), so a key-set or
14
+ * non-@canonical divergence still fails; only the range value collapses.
15
+ * Deliberately import-free — a pure string transform no module-graph guard
16
+ * can ever see.
17
+ *
18
+ * @param tree - A tree snapshot (relative path → contents).
19
+ * @param manifestPath - The scaffolded manifest's path within the tree.
20
+ * @returns A NEW map with the manifest's @canonical/* ranges blanked; the
21
+ * input is untouched. A tree without the manifest comes back copied as-is.
22
+ */
23
+ export function blankCanonicalRanges(
24
+ tree: ReadonlyMap<string, string>,
25
+ manifestPath = "my-app/package.json",
26
+ ): Map<string, string> {
27
+ const out = new Map(tree);
28
+ const manifest = out.get(manifestPath);
29
+ if (manifest !== undefined) {
30
+ out.set(
31
+ manifestPath,
32
+ manifest.replaceAll(/("@canonical\/[^"]+": )"[^"]+"/g, '$1"<range>"'),
33
+ );
34
+ }
35
+ return out;
36
+ }
@@ -10,6 +10,7 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
10
10
  import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
11
11
  import type {
12
12
  CallToolResult,
13
+ Resource,
13
14
  ServerCapabilities,
14
15
  } from "@modelcontextprotocol/sdk/types.js";
15
16
  import { buildServer } from "../../kernel/project/mcp/buildServer.js";
@@ -34,12 +35,29 @@ export interface McpHarness {
34
35
  ): Promise<Record<string, unknown>>;
35
36
  /** List the registered tools. */
36
37
  listTools(): Promise<ToolInfo[]>;
37
- /** List the resources exposed by the `{+uri}` template's list callback. */
38
- listResources(): Promise<{ uri: string; name: string }[]>;
38
+ /**
39
+ * List the resources exposed by the `{+uri}` template's list callback.
40
+ *
41
+ * The WHOLE wire entry (title, annotations, `_meta`, …), not a projection of
42
+ * it: the listing's cost and its navigability are both properties of what
43
+ * actually crosses the wire, and a helper that trimmed the entry would hide
44
+ * exactly the fields under test.
45
+ */
46
+ listResources(): Promise<Resource[]>;
39
47
  /** Read one resource by URI; returns the first content's parsed/raw text. */
40
48
  readResource(uri: string): Promise<{ mimeType?: string; text: string }>;
41
- /** Complete a resource-template variable against a partial value. */
42
- completeResource(partial: string): Promise<string[]>;
49
+ /**
50
+ * Complete a resource-template variable against a partial value.
51
+ *
52
+ * Returns the full completion result — `total` and `hasMore` are derived by
53
+ * the SDK from the callback's array, so they are the only witness that a
54
+ * truncated result admits to being truncated.
55
+ */
56
+ completeResource(partial: string): Promise<{
57
+ values: string[];
58
+ total?: number;
59
+ hasMore?: boolean;
60
+ }>;
43
61
  /** The server capabilities negotiated at initialize (tools/resources/prompts). */
44
62
  serverCapabilities(): ServerCapabilities | undefined;
45
63
  /** The `serverInfo` the server introduced itself with at initialize. */
@@ -100,7 +118,7 @@ export async function projectMcp(
100
118
  },
101
119
  async listResources() {
102
120
  const { resources } = await client.listResources();
103
- return resources.map((r) => ({ uri: r.uri, name: r.name }));
121
+ return resources;
104
122
  },
105
123
  async readResource(uri) {
106
124
  const result = await client.readResource({ uri });
@@ -117,7 +135,15 @@ export async function projectMcp(
117
135
  ref: { type: "ref/resource", uri: "pragma:{+uri}" },
118
136
  argument: { name: "uri", value: partial },
119
137
  });
120
- return result.completion.values;
138
+ return {
139
+ values: result.completion.values,
140
+ ...(result.completion.total === undefined
141
+ ? {}
142
+ : { total: result.completion.total }),
143
+ ...(result.completion.hasMore === undefined
144
+ ? {}
145
+ : { hasMore: result.completion.hasMore }),
146
+ };
121
147
  },
122
148
  serverCapabilities() {
123
149
  return client.getServerCapabilities();
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Test helper: spawn-and-CAPTURE the real `pragma` binary.
2
+ * Test helper: spawn-and-CAPTURE the real `pragma` entry point.
3
3
  *
4
4
  * {@link measureCommand} (the perf helper) discards stdout/stderr — it only
5
5
  * times spawns. This is the complementary helper for tests that need to READ
6
6
  * what the process printed: the true end-to-end boundary (argv parsing,
7
- * first-run, the compiled/`bun` entry point, real process exit codes).
7
+ * first-run, the shipped entry point, real process exit codes).
8
8
  *
9
9
  * Kept THIN — most behavioral coverage should run in-process via
10
10
  * `executeVerb`/`projectCli`/`projectMcp`; reserve `runCli` for tests where the
@@ -18,9 +18,12 @@ import { tmpdir } from "node:os";
18
18
  import { join } from "node:path";
19
19
  import { fileURLToPath } from "node:url";
20
20
 
21
- /** The compiled binary the perf `globalSetup` guarantees exists before tests run. */
22
- const COMPILED_BINARY = fileURLToPath(
23
- new URL("../../../dist/pragma", import.meta.url),
21
+ /**
22
+ * The shipped entry the perf `globalSetup` guarantees exists before tests run —
23
+ * the `bin` the published package points at, run the way a consumer runs it.
24
+ */
25
+ const SHIPPED_ENTRY = fileURLToPath(
26
+ new URL("../../../dist/src/bin.js", import.meta.url),
24
27
  );
25
28
 
26
29
  /** The `bin.ts` entry point, for fast source-mode spawns (no rebuild). */
@@ -37,11 +40,12 @@ export interface RunCliOptions {
37
40
  */
38
41
  readonly env?: Record<string, string | undefined>;
39
42
  /**
40
- * `"compiled"` (default) spawns `dist/pragma` — the true release boundary.
41
- * `"source"` spawns `bun src/bin.ts` — faster, no rebuild required, for
42
- * journeys that do not test the compiled-binary boundary itself.
43
+ * `"shipped"` (default) spawns `node dist/src/bin.js` — the true release
44
+ * boundary, exactly what a consumer's `pragma` runs. `"source"` spawns
45
+ * `bun src/bin.ts` — faster, no rebuild required, for journeys that do not
46
+ * test the shipped-entry boundary itself.
43
47
  */
44
- readonly mode?: "compiled" | "source";
48
+ readonly mode?: "shipped" | "source";
45
49
  /** Spawn timeout in milliseconds (default 20000). */
46
50
  readonly timeoutMs?: number;
47
51
  }
@@ -76,7 +80,7 @@ function seededXdgConfigHome(): string {
76
80
  /**
77
81
  * Spawn the real `pragma` CLI and capture its output.
78
82
  *
79
- * @param args - Argv passed to the binary (no `pragma`/`bun` prefix).
83
+ * @param args - Argv passed to the CLI (no `pragma`/runtime prefix).
80
84
  * @param options - cwd, env overrides, mode, and timeout.
81
85
  * @returns The captured stdout/stderr/exitCode/signal.
82
86
  * @note Impure — spawns a child process.
@@ -85,17 +89,30 @@ export function runCli(
85
89
  args: readonly string[],
86
90
  options: RunCliOptions = {},
87
91
  ): RunCliResult {
88
- const mode = options.mode ?? "compiled";
89
- const command = mode === "compiled" ? COMPILED_BINARY : "bun";
90
- const spawnArgs = mode === "compiled" ? [...args] : [SOURCE_ENTRY, ...args];
92
+ const mode = options.mode ?? "shipped";
93
+ // Both modes spawn a RUNTIME with an entry argument now — the built entry is
94
+ // emitted JavaScript, not a self-executing binary, so `node` names it.
95
+ const command = mode === "shipped" ? process.execPath : "bun";
96
+ const entry = mode === "shipped" ? SHIPPED_ENTRY : SOURCE_ENTRY;
97
+ const spawnArgs = [entry, ...args];
98
+
99
+ // Colour OFF by default: these tests assert on bytes, and nx exports
100
+ // FORCE_COLOR to its test tasks, so a spawned CLI colours its help even
101
+ // through a pipe — green locally, red in CI, for a difference no assertion
102
+ // meant to make. NO_COLOR is the one convention the style seam obeys
103
+ // unconditionally. FORCE_COLOR is DELETED rather than overridden: Bun warns
104
+ // on stderr when it sees both, and stderr is part of what is asserted.
105
+ // `options.env` still wins, so a test that wants colour asks for it.
106
+ const env: NodeJS.ProcessEnv = {
107
+ ...process.env,
108
+ NO_COLOR: "1",
109
+ XDG_CONFIG_HOME: seededXdgConfigHome(),
110
+ };
111
+ delete env.FORCE_COLOR;
91
112
 
92
113
  const result = spawnSync(command, spawnArgs, {
93
114
  cwd: options.cwd,
94
- env: {
95
- ...process.env,
96
- XDG_CONFIG_HOME: seededXdgConfigHome(),
97
- ...options.env,
98
- },
115
+ env: { ...env, ...options.env },
99
116
  encoding: "utf-8",
100
117
  timeout: options.timeoutMs ?? 20_000,
101
118
  });
@@ -15,8 +15,19 @@ import {
15
15
  } from "./budgets.js";
16
16
  import { measureCommand, percentile, trimmedMean } from "./measure.js";
17
17
 
18
- /** The compiled binary the perf globalSetup guarantees exists. */
19
- const BINARY = fileURLToPath(new URL("../../../dist/pragma", import.meta.url));
18
+ /**
19
+ * The shipped entry the perf globalSetup guarantees exists, spawned through
20
+ * `node` — which is what a consumer's `pragma` does, so node's own startup is
21
+ * inside every sample rather than excluded from it. The budgets below are
22
+ * ceilings on what a user waits, not on what a bundler produced.
23
+ */
24
+ const NODE = process.execPath;
25
+ const ENTRY = fileURLToPath(
26
+ new URL("../../../dist/src/bin.js", import.meta.url),
27
+ );
28
+
29
+ /** Argv for one CLI invocation through the shipped entry. */
30
+ const cli = (...args: string[]): string[] => [ENTRY, ...args];
20
31
 
21
32
  /** Fresh XDG dirs so spawned runs never touch real state (and first-run is isolated). */
22
33
  const perfEnv = {
@@ -25,7 +36,7 @@ const perfEnv = {
25
36
  };
26
37
 
27
38
  /**
28
- * Protected budget suite. Spawns the standalone `dist/pragma`, discards
39
+ * Protected budget suite. Spawns the shipped entry through `node`, discards
29
40
  * warmups, and asserts median + p95 against the ceilings in budgets.ts. Given
30
41
  * spawn-time variance, each spawn case retries.
31
42
  */
@@ -45,7 +56,7 @@ describe("perf budgets (PROTECTED)", () => {
45
56
  });
46
57
 
47
58
  it("pragma --help stays under budget", { retry: 2 }, () => {
48
- const result = measureCommand(BINARY, ["--help"], {
59
+ const result = measureCommand(NODE, cli("--help"), {
49
60
  runs: 15,
50
61
  warmups: 3,
51
62
  env: perfEnv,
@@ -55,7 +66,7 @@ describe("perf budgets (PROTECTED)", () => {
55
66
  });
56
67
 
57
68
  it("pragma __complete stays under budget", { retry: 3 }, () => {
58
- const result = measureCommand(BINARY, ["__complete", "config"], {
69
+ const result = measureCommand(NODE, cli("__complete", "config"), {
59
70
  runs: 30,
60
71
  warmups: 5,
61
72
  env: perfEnv,
@@ -77,8 +88,8 @@ describe("perf budgets (PROTECTED)", () => {
77
88
  // dir → an empty walk, but it exercises the discoverSkills path per spawn;
78
89
  // enforce the same robust statistic as the noun case.
79
90
  const result = measureCommand(
80
- BINARY,
81
- ["__complete", "skill", "lookup", "do"],
91
+ NODE,
92
+ cli("__complete", "skill", "lookup", "do"),
82
93
  {
83
94
  runs: 30,
84
95
  warmups: 5,
@@ -94,13 +105,13 @@ describe("perf budgets (PROTECTED)", () => {
94
105
 
95
106
  it("warm store-backed verb stays under budget", { retry: 2 }, () => {
96
107
  // __store-probe boots the embedded pack from its n-quads cache and queries
97
- // it — the full store-backed verb cost in the compiled binary. The first
108
+ // it — the full store-backed verb cost through the shipped entry. The first
98
109
  // spawn materializes the pack; warmups absorb it, then it is a cache hit.
99
110
  // Note that with 9 kept samples a nearest-rank p95 IS the maximum (see
100
111
  // BUDGETS.md's p95-stabilization section) — deliberately kept, because the
101
112
  // honest statistic here is the one that catches real cost, and the ceiling
102
113
  // is sized with a 1.25× margin over a projected p95 to absorb it.
103
- const result = measureCommand(BINARY, ["__store-probe"], {
114
+ const result = measureCommand(NODE, cli("__store-probe"), {
104
115
  runs: 12,
105
116
  warmups: 3,
106
117
  env: {
@@ -1,29 +1,78 @@
1
1
  /**
2
- * Performance budgets for the compiled `pragma` binary.
2
+ * Performance budgets for the shipped `pragma` entry.
3
3
  *
4
4
  * The ceilings the protected budget tests assert against. The surface
5
5
  * covenant's designed target for `--help`/`__complete` is 50 ms; the day-1 perf
6
- * spike (commit 6) found that unrealistic on the build hardware (cold Bun
7
- * process start alone is ~45 ms here), so — per the plan — those ceilings are
8
- * set to roughly 2× the measured median rather than silently weakening the
9
- * target. {@link BUDGET_WARM_STORE_MS} is derived differently (from a projected
6
+ * spike (commit 6) found that unrealistic on the build hardware (cold process
7
+ * start alone is ~45 ms here), so — per the plan — those ceilings are set to
8
+ * roughly 2× the measured median rather than silently weakening the target.
9
+ *
10
+ * A CEILING IS RELATIVE TO THE ARTIFACT IT WAS MEASURED ON. These were derived
11
+ * against a `bun build --compile` executable. The distribution now ships
12
+ * JavaScript that `node` executes, which costs roughly 2× on the fast paths, so
13
+ * a ceiling set at 2× the binary's median lands at the emit's median — where it
14
+ * cannot separate a regression from a slow runner. `__complete` proved that
15
+ * exactly: three CI attempts at 100.15, 100.20 and 100.37 ms against a 100 ms
16
+ * ceiling. Re-derived below on the same rule, against the artifact that now
17
+ * ships; the designed 50 ms target is recorded as unmet rather than quietly
18
+ * moved. {@link BUDGET_WARM_STORE_MS} is derived differently (from a projected
10
19
  * p95, and it lands TIGHTER than 2× its median); its arithmetic is written out
11
20
  * in full in BUDGETS.md, as are the measurements and environment for all of
12
21
  * them.
13
22
  */
14
23
 
15
- /** `pragma --help` ceiling (ms). Designed 50; measured median ~61 → 2×. */
24
+ /**
25
+ * `pragma --help` ceiling (ms). Designed 50; the rule is 2× the measured median.
26
+ *
27
+ * Down from the provisional 220, which covered the create surface's eager
28
+ * registration imports on the capabilities barrel. Those are gone — the
29
+ * registered flag spellings are baked into `createSurface.generated.ts` at
30
+ * build time, the mount's adapter loads behind `CliProjection.prepare()`, and
31
+ * the bare-help path no longer loads Commander at all — and the lazy-graph
32
+ * guard in `lazy.test.ts` pins all three so the cost cannot creep back
33
+ * silently.
34
+ *
35
+ * MEASURED, paired: the pre-refactor tree and this one were each built and
36
+ * spawned alternately, 40 kept samples per cell, so drift on a shared box hits
37
+ * both arms. Median 74.6 → 64.7 ms; net of each arm's own `--version` control,
38
+ * the work this path does went 49.3 → 35.3 ms (−28%). 2 × 64.7 = 129.5, so
39
+ * 130 is the rule's own number rather than a number the rule tolerates. It is
40
+ * also where this path sat before the regression. BUDGETS.md carries the full
41
+ * table, the reference-box projection, and why this is the floor.
42
+ */
16
43
  export const BUDGET_HELP_MS = 130;
17
44
 
18
- /** `pragma __complete …` ceiling (ms). Designed 50; measured median ~46 → 2×. */
19
- export const BUDGET_COMPLETE_MS = 100;
45
+ /**
46
+ * `pragma __complete …` ceiling (ms). Designed 50 — **not met, and recorded as
47
+ * such**: the shipped entry cannot reach it, because node's own start is most
48
+ * of that number before pragma runs a line.
49
+ *
50
+ * Down from the provisional 220 for the same reason as {@link BUDGET_HELP_MS}:
51
+ * the eager create-surface imports both fast paths paid for are deferred, and
52
+ * completion additionally sheds Commander — nothing on the `__complete`
53
+ * closure imports it any more.
54
+ *
55
+ * MEASURED in the same paired run: median 79.1 → 69.2 ms for the noun case and
56
+ * 74.2 → 69.3 ms for the name-source case; net of the control, 53.7 → 39.7 ms
57
+ * and 48.9 → 39.8 ms.
58
+ *
59
+ * 2× the slower median is 138.5, BELOW this 150 — and it stays 150 anyway,
60
+ * because a ceiling is relative to the box as well as the artifact. This box's
61
+ * cold start is 25–30 ms against the reference box's 45.5; projecting the
62
+ * measured work onto the reference box gives a ~85 ms median, whose 2× is
63
+ * ~170. CI has already run this path at a ~100 ms trimmed mean. Cutting to 140
64
+ * on a local median would be deriving a ceiling on hardware the suite does not
65
+ * run on. Completion is typed interactively, so this stays the budget most
66
+ * worth defending — see BUDGETS.md for the arithmetic.
67
+ */
68
+ export const BUDGET_COMPLETE_MS = 150;
20
69
 
21
70
  /** Warm project-config (`pragma.config.ts`) load ceiling (ms). Cache hit is sub-ms. */
22
71
  export const BUDGET_PROJECT_CONFIG_MS = 10;
23
72
 
24
73
  /**
25
74
  * Warm store-backed verb ceiling (ms) — a store boot from the cached n-quads
26
- * dump plus a query, in the compiled binary.
75
+ * dump plus a query, through the shipped entry.
27
76
  *
28
77
  * Re-derived when the embed became the distribution's real 8 479-triple graph
29
78
  * instead of a 23-triple sample. Netted against a `--version` control from the