@astryxdesign/cli 0.7.2-canary.fe2c655 → 0.7.3-canary.02f5fe4

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 (694) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/README.md +216 -162
  3. package/api/build/_adapter.d.mts +66 -0
  4. package/api/build/_adapter.mjs +139 -4
  5. package/api/build/blocks/blocks.d.mts +92 -0
  6. package/api/build/blocks/blocks.mjs +528 -0
  7. package/api/build/blocks/blocks.test.mjs +238 -0
  8. package/api/build/blocks/blocks.weights.json +1 -0
  9. package/api/build/build.doc.mjs +4 -0
  10. package/api/build/build.mjs +25 -6
  11. package/api/build/build.type.mjs +1 -1
  12. package/api/build/help/help.mjs +1 -1
  13. package/api/build/kit/answer.d.mts +18 -0
  14. package/api/build/kit/answer.mjs +195 -0
  15. package/api/build/kit/answer.test.mjs +108 -0
  16. package/api/build/kit/kind.d.mts +25 -0
  17. package/api/build/kit/kind.mjs +170 -0
  18. package/api/build/kit/kit.d.mts +2 -4
  19. package/api/build/kit/kit.mjs +8 -406
  20. package/api/build/kit/rank.d.mts +3 -32
  21. package/api/build/kit/rank.mjs +25 -342
  22. package/api/build/kit/rank.test.mjs +2 -1
  23. package/api/build/kit/signals.d.mts +79 -0
  24. package/api/build/kit/signals.mjs +295 -0
  25. package/api/build/kit/start.d.mts +32 -0
  26. package/api/build/kit/start.mjs +163 -0
  27. package/api/build/kit/words.d.mts +72 -0
  28. package/api/build/kit/words.mjs +202 -0
  29. package/api/build/tree.d.mts +20 -0
  30. package/api/build/tree.mjs +53 -0
  31. package/api/build/tree.test.mjs +185 -0
  32. package/api/build/tree.weights.json +1 -0
  33. package/api/component/_adapter.d.mts +72 -1
  34. package/api/component/_adapter.mjs +251 -23
  35. package/api/component/component-replacement.test.mjs +1 -0
  36. package/api/component/component.doc.mjs +6 -1
  37. package/api/component/component.mjs +97 -16
  38. package/api/component/component.test.mjs +95 -0
  39. package/api/component/doc-links.test.mjs +386 -0
  40. package/api/component/integration-export-name.test.mjs +644 -0
  41. package/api/component/list/list.mjs +42 -4
  42. package/api/discover/_adapter.d.mts +131 -12
  43. package/api/discover/_adapter.mjs +520 -34
  44. package/api/discover/_adapter.test.mjs +641 -17
  45. package/api/discover/_catalog-view.d.mts +16 -5
  46. package/api/discover/_catalog-view.mjs +32 -8
  47. package/api/discover/detail/doc/doc.mjs +9 -1
  48. package/api/discover/discover.d.mts +11 -0
  49. package/api/discover/discover.doc.mjs +9 -7
  50. package/api/discover/discover.mjs +120 -19
  51. package/api/discover/discover.type.d.mts +20 -7
  52. package/api/discover/discover.type.mjs +17 -7
  53. package/api/discover/list/list.d.mts +4 -3
  54. package/api/discover/list/list.mjs +17 -10
  55. package/api/docs/_adapter.d.mts +76 -2
  56. package/api/docs/_adapter.mjs +630 -34
  57. package/api/docs/docs-homes.test.mjs +127 -0
  58. package/api/docs/docs.doc.mjs +5 -4
  59. package/api/docs/docs.mjs +2 -1
  60. package/api/docs/docs.test.mjs +39 -20
  61. package/api/docs/integration-tree.test.mjs +42 -20
  62. package/api/docs/integrationDocs.test.mjs +125 -1
  63. package/api/docs/list/list.mjs +12 -2
  64. package/api/docs/namespace-section.test.mjs +6 -6
  65. package/api/docs/reference-blocks.test.mjs +3 -5
  66. package/api/doctor/_adapter.d.mts +128 -0
  67. package/api/doctor/_adapter.mjs +253 -4
  68. package/api/doctor/doctor.d.mts +217 -0
  69. package/api/doctor/doctor.doc.mjs +3 -2
  70. package/api/doctor/doctor.mjs +691 -52
  71. package/api/doctor/doctor.test.mjs +267 -18
  72. package/api/doctor/release-checks.test.mjs +156 -0
  73. package/api/doctor/theme-checks.mjs +17 -4
  74. package/api/doctor/theme-checks.test.mjs +223 -7
  75. package/api/error.d.mts +10 -0
  76. package/api/error.mjs +25 -0
  77. package/api/gap-report/gap-report.d.mts +3 -0
  78. package/api/gap-report/gap-report.doc.mjs +11 -3
  79. package/api/gap-report/gap-report.mjs +219 -52
  80. package/api/gap-report/gap-report.test.mjs +233 -0
  81. package/api/gap-report/gap-report.type.d.mts +41 -0
  82. package/api/gap-report/gap-report.type.mjs +18 -0
  83. package/api/hook/_adapter.mjs +3 -11
  84. package/api/hook/hook.doc.mjs +4 -0
  85. package/api/hook/hook.mjs +1 -1
  86. package/api/hook/list/list.d.mts +1 -1
  87. package/api/index.d.mts +2 -0
  88. package/api/index.mjs +2 -0
  89. package/api/init/_adapter.d.mts +22 -0
  90. package/api/init/_adapter.mjs +59 -0
  91. package/api/init/init.d.mts +7 -5
  92. package/api/init/init.doc.mjs +45 -10
  93. package/api/init/init.mjs +28 -4
  94. package/api/init/init.test.mjs +18 -2
  95. package/api/init/init.type.d.mts +50 -5
  96. package/api/init/init.type.mjs +39 -5
  97. package/api/init/remove/remove.mjs +17 -4
  98. package/api/init/remove/remove.test.mjs +114 -2
  99. package/api/init/run/run.d.mts +1 -1
  100. package/api/init/run/run.mjs +86 -12
  101. package/api/init/user/user.d.mts +14 -0
  102. package/api/init/user/user.mjs +87 -0
  103. package/api/init/user/user.test.mjs +232 -0
  104. package/api/integration/_adapter.d.mts +53 -0
  105. package/api/integration/_adapter.mjs +132 -0
  106. package/api/integration/add-contribution.component-names.test.mjs +66 -0
  107. package/api/integration/add-contribution.mjs +8 -4
  108. package/api/integration/add-contribution.test.mjs +4 -2
  109. package/api/integration/authoring-checks.mjs +192 -14
  110. package/api/integration/authoring-checks.test.mjs +1028 -0
  111. package/api/integration/authoring-checks.type.d.mts +143 -0
  112. package/api/integration/authoring-checks.type.mjs +74 -2
  113. package/api/integration/check/check.d.mts +96 -0
  114. package/api/integration/check/check.mjs +357 -0
  115. package/api/integration/check/check.test.mjs +489 -0
  116. package/api/integration/integration-check.type.d.mts +118 -0
  117. package/api/integration/integration-check.type.mjs +84 -0
  118. package/api/integration/integrationCheck.doc.d.mts +10 -0
  119. package/api/integration/integrationCheck.doc.mjs +73 -0
  120. package/api/integration/integrationComponentConflicts.doc.mjs +45 -6
  121. package/api/integration/integrationDocConflicts.doc.mjs +22 -5
  122. package/api/integration/pack-check.mjs +486 -123
  123. package/api/integration/pack-check.test.mjs +817 -10
  124. package/api/integration/validate-integration-case-disk.test.mjs +111 -0
  125. package/api/integration/validate-integration-fixes.test.mjs +73 -5
  126. package/api/integration/validate-integration-gaps.test.mjs +1975 -0
  127. package/api/integration/validate-integration.d.mts +23 -2
  128. package/api/integration/validate-integration.mjs +358 -45
  129. package/api/integration/validate-integration.test.mjs +88 -8
  130. package/api/integration/validate-integration.type.d.mts +105 -0
  131. package/api/integration/validate-integration.type.mjs +79 -1
  132. package/api/integration/validate-unread-theme-folders.test.mjs +3 -2
  133. package/api/integration/validateIntegration.doc.mjs +19 -3
  134. package/api/search/ORDERING.md +28 -0
  135. package/api/search/_adapter.d.mts +91 -0
  136. package/api/search/_adapter.mjs +172 -0
  137. package/api/search/_adapter.test.mjs +173 -0
  138. package/api/search/_candidate-score.d.mts +40 -0
  139. package/api/search/_candidate-score.mjs +238 -0
  140. package/api/search/_cards.json +6098 -0
  141. package/api/search/_compound.d.mts +50 -0
  142. package/api/search/_compound.mjs +170 -0
  143. package/api/search/_doc-searcher.d.mts +4 -0
  144. package/api/search/_doc-searcher.mjs +23 -0
  145. package/api/search/_doc-searcher.test.mjs +36 -0
  146. package/api/search/_doc-searcher.weights.json +1 -0
  147. package/api/search/_doc-text.d.mts +30 -0
  148. package/api/search/_doc-text.mjs +87 -0
  149. package/api/search/_entries.d.mts +63 -0
  150. package/api/search/_entries.mjs +232 -0
  151. package/api/search/_entries.test.mjs +48 -0
  152. package/api/search/_features.d.mts +35 -0
  153. package/api/search/_features.mjs +155 -0
  154. package/api/search/_gather-components.d.mts +26 -0
  155. package/api/search/_gather-components.mjs +284 -0
  156. package/api/search/_gather-docs.d.mts +20 -0
  157. package/api/search/_gather-docs.mjs +254 -0
  158. package/api/search/_gather-hooks.d.mts +12 -0
  159. package/api/search/_gather-hooks.mjs +52 -0
  160. package/api/search/_gather-templates.d.mts +25 -0
  161. package/api/search/_gather-templates.mjs +107 -0
  162. package/api/search/_lexical.d.mts +135 -0
  163. package/api/search/_lexical.mjs +351 -0
  164. package/api/search/_main-searcher.d.mts +19 -0
  165. package/api/search/_main-searcher.mjs +115 -0
  166. package/api/search/_main-searcher.test.mjs +106 -0
  167. package/api/search/_main-searcher.weights.json +1 -0
  168. package/api/search/_module-doc.d.mts +32 -0
  169. package/api/search/_module-doc.mjs +78 -0
  170. package/api/search/_order.d.mts +32 -0
  171. package/api/search/_order.mjs +162 -0
  172. package/api/search/_order.test.mjs +72 -0
  173. package/api/search/_priority.d.mts +50 -0
  174. package/api/search/_priority.mjs +139 -0
  175. package/api/search/_query-words.d.mts +25 -0
  176. package/api/search/_query-words.mjs +92 -0
  177. package/api/search/_query.d.mts +65 -0
  178. package/api/search/_query.mjs +176 -0
  179. package/api/search/_result.d.mts +97 -0
  180. package/api/search/_result.mjs +150 -0
  181. package/api/search/_score.d.mts +60 -0
  182. package/api/search/_score.mjs +283 -0
  183. package/api/search/_synonyms.d.mts +21 -0
  184. package/api/search/_synonyms.mjs +67 -0
  185. package/api/search/_template-searcher.d.mts +4 -0
  186. package/api/search/_template-searcher.mjs +23 -0
  187. package/api/search/_template-searcher.test.mjs +40 -0
  188. package/api/search/_template-searcher.weights.json +1 -0
  189. package/api/search/_titles.d.mts +33 -0
  190. package/api/search/_titles.mjs +65 -0
  191. package/api/search/_words.d.mts +64 -0
  192. package/api/search/_words.mjs +157 -0
  193. package/api/search/search.d.mts +22 -236
  194. package/api/search/search.doc.mjs +14 -7
  195. package/api/search/search.domain-priority.test.mjs +108 -18
  196. package/api/search/search.integration-check.test.mjs +24 -0
  197. package/api/search/search.mjs +59 -1904
  198. package/api/search/search.test.mjs +193 -15
  199. package/api/search/search.type.d.mts +20 -2
  200. package/api/search/search.type.mjs +12 -2
  201. package/api/search/tree.d.mts +15 -0
  202. package/api/search/tree.mjs +40 -0
  203. package/api/search/tree.test.mjs +66 -0
  204. package/api/search/tree.weights.json +1 -0
  205. package/api/swizzle/_adapter.mjs +2 -2
  206. package/api/swizzle/copy/copy.mjs +29 -15
  207. package/api/template/template-integration.test.mjs +1 -1
  208. package/api/template/template.mjs +5 -1
  209. package/api/template/template.test.mjs +120 -3
  210. package/api/theme/_adapter.d.mts +16 -0
  211. package/api/theme/_adapter.mjs +32 -5
  212. package/api/theme/build/build.d.mts +2 -1
  213. package/api/theme/build/build.family.test.mjs +64 -0
  214. package/api/theme/build/build.mjs +250 -38
  215. package/api/theme/build/build.packed-old-core.test.mjs +21 -3
  216. package/api/theme/build/font-warning.mjs +5 -3
  217. package/api/theme/build/font-warning.test.mjs +2 -1
  218. package/api/theme/remove/remove.test.mjs +2 -2
  219. package/api/theme/targets/targets.mjs +3 -10
  220. package/api/theme/themeBuild.doc.mjs +4 -4
  221. package/api/theme/themeTargets.doc.mjs +4 -0
  222. package/api/theme/use/use.test.mjs +1 -1
  223. package/api/upgrade/_adapter.d.mts +97 -11
  224. package/api/upgrade/_adapter.mjs +315 -32
  225. package/api/upgrade/registry/registry.d.mts +10 -4
  226. package/api/upgrade/registry/registry.mjs +33 -16
  227. package/api/upgrade/registry/registry.test.mjs +85 -0
  228. package/api/upgrade/run/cli-behind-core.test.mjs +438 -0
  229. package/api/upgrade/run/run.d.mts +4 -2
  230. package/api/upgrade/run/run.mjs +48 -4
  231. package/api/upgrade/run/run.test.mjs +417 -3
  232. package/api/upgrade/status/status.d.mts +21 -5
  233. package/api/upgrade/status/status.mjs +45 -8
  234. package/api/upgrade/upgrade.doc.mjs +16 -8
  235. package/api/upgrade/upgrade.mjs +18 -3
  236. package/api/upgrade/upgrade.test.mjs +194 -0
  237. package/api/upgrade/upgrade.type.d.mts +28 -3
  238. package/api/upgrade/upgrade.type.mjs +24 -7
  239. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  240. package/assets/codemods/registry.mjs +1 -0
  241. package/assets/codemods/runner.mjs +7 -1
  242. package/assets/codemods/transforms/v0.7.0/__tests__/validate-data-token-ownership.test.mjs +11 -0
  243. package/assets/codemods/transforms/v0.7.0/validate-data-token-ownership.mjs +3 -3
  244. package/assets/codemods/transforms/v0.7.2/__tests__/migrate-list-edge-compensation-to-edge.test.mjs +120 -0
  245. package/assets/codemods/transforms/v0.7.2/index.mjs +20 -0
  246. package/assets/codemods/transforms/v0.7.2/migrate-list-edge-compensation-to-edge.mjs +198 -0
  247. package/assets/discover/official-packages.json +367 -0
  248. package/assets/docs/README.md +10 -0
  249. package/assets/docs/author-a-theme.doc.mjs +5 -5
  250. package/assets/docs/browser-support.doc.mjs +1 -1
  251. package/assets/docs/getting-started.doc.mjs +26 -6
  252. package/assets/docs/is-my-code-good.doc.mjs +287 -0
  253. package/assets/docs/styling-overview.doc.mjs +1 -1
  254. package/assets/docs/theme.doc.dense.mjs +1 -1
  255. package/assets/docs/theme.doc.mjs +2 -2
  256. package/assets/docs/theme.doc.zh.mjs +1 -1
  257. package/assets/docs/tree/add-a-component.doc.mjs +22 -2
  258. package/assets/docs/tree/add-a-theme.doc.mjs +14 -4
  259. package/assets/docs/tree/add-a-topic.doc.mjs +54 -9
  260. package/assets/docs/tree/agent-guidance.doc.mjs +19 -5
  261. package/assets/docs/tree/api.doc.mjs +6 -0
  262. package/assets/docs/tree/authoring.doc.mjs +61 -0
  263. package/assets/docs/tree/block-template.doc.mjs +8 -20
  264. package/assets/docs/tree/build-the-template.doc.mjs +1 -1
  265. package/assets/docs/tree/building-blocks.doc.mjs +6 -2
  266. package/assets/docs/tree/check-the-props.doc.mjs +201 -0
  267. package/assets/docs/tree/check-your-docs.doc.mjs +69 -11
  268. package/assets/docs/tree/checks.doc.mjs +32 -24
  269. package/assets/docs/tree/ci-and-containers.doc.mjs +101 -0
  270. package/assets/docs/tree/cli-command.doc.mjs +142 -0
  271. package/assets/docs/tree/cli.doc.mjs +7 -1
  272. package/assets/docs/tree/codemods.doc.mjs +17 -7
  273. package/assets/docs/tree/commands.doc.mjs +7 -1
  274. package/assets/docs/tree/component-family.doc.mjs +8 -6
  275. package/assets/docs/tree/component-imports.doc.mjs +21 -3
  276. package/assets/docs/tree/components.doc.mjs +7 -1
  277. package/assets/docs/tree/computer-agent-guide.doc.mjs +160 -0
  278. package/assets/docs/tree/computer-integrations.doc.mjs +93 -0
  279. package/assets/docs/tree/configuration.doc.mjs +8 -4
  280. package/assets/docs/tree/debug-and-gap-reports.doc.mjs +41 -22
  281. package/assets/docs/tree/define-the-theme.doc.mjs +7 -6
  282. package/assets/docs/tree/describe-the-component.doc.mjs +3 -3
  283. package/assets/docs/tree/docs.doc.mjs +9 -3
  284. package/assets/docs/tree/document-the-template.doc.mjs +1 -1
  285. package/assets/docs/tree/document-the-theme.doc.mjs +4 -4
  286. package/assets/docs/tree/export-template-assets.doc.mjs +1 -1
  287. package/assets/docs/tree/extend-or-replace.doc.mjs +19 -9
  288. package/assets/docs/{authoring.doc.mjs → tree/field-reference.doc.mjs} +4 -3
  289. package/assets/docs/tree/fonts-and-assets.doc.mjs +3 -3
  290. package/assets/docs/tree/generate-a-palette.doc.mjs +8 -6
  291. package/assets/docs/tree/global-integrations.doc.mjs +124 -0
  292. package/assets/docs/tree/global.doc.mjs +131 -0
  293. package/assets/docs/tree/grade-template-with-agent.doc.mjs +5 -5
  294. package/assets/docs/tree/help.doc.mjs +2 -2
  295. package/assets/docs/tree/host-entry.doc.mjs +128 -0
  296. package/assets/docs/tree/install-once.doc.mjs +105 -0
  297. package/assets/docs/tree/layout-spacing.doc.mjs +2 -3
  298. package/assets/docs/tree/layout.doc.mjs +6 -6
  299. package/assets/docs/tree/links.doc.mjs +7 -6
  300. package/assets/docs/tree/migration-setup.doc.mjs +3 -2
  301. package/assets/docs/tree/migration-verification.doc.mjs +0 -1
  302. package/assets/docs/tree/migration.doc.mjs +0 -1
  303. package/assets/docs/tree/monorepos.doc.mjs +84 -0
  304. package/assets/docs/tree/package-and-test.doc.mjs +1 -1
  305. package/assets/docs/tree/page-template.doc.mjs +4 -8
  306. package/assets/docs/tree/problems.doc.mjs +205 -0
  307. package/assets/docs/tree/project-global-or-both.doc.mjs +131 -0
  308. package/assets/docs/tree/publishing.doc.mjs +6 -6
  309. package/assets/docs/tree/quick-start.doc.mjs +54 -28
  310. package/assets/docs/tree/reference.doc.mjs +192 -0
  311. package/assets/docs/tree/replace-a-core-component.doc.mjs +15 -7
  312. package/assets/docs/tree/replace-a-core-template.doc.mjs +10 -12
  313. package/assets/docs/tree/scaffold.doc.mjs +1 -1
  314. package/assets/docs/tree/sections-and-placement.doc.mjs +9 -11
  315. package/assets/docs/tree/see-it-in-an-app.doc.mjs +17 -5
  316. package/assets/docs/tree/ship.doc.mjs +2 -2
  317. package/assets/docs/tree/short-and-findable.doc.mjs +9 -8
  318. package/assets/docs/tree/single-component.doc.mjs +15 -6
  319. package/assets/docs/tree/start-a-template.doc.mjs +18 -8
  320. package/assets/docs/tree/subcomponent.doc.mjs +6 -6
  321. package/assets/docs/tree/template-assets.doc.mjs +2 -2
  322. package/assets/docs/tree/template-doc-overview.doc.mjs +6 -17
  323. package/assets/docs/tree/template-fonts.doc.mjs +1 -1
  324. package/assets/docs/tree/template-grading-rubric.doc.mjs +17 -38
  325. package/assets/docs/tree/template-icons.doc.mjs +1 -1
  326. package/assets/docs/tree/template-images-media.doc.mjs +1 -1
  327. package/assets/docs/tree/template-styles.doc.mjs +2 -2
  328. package/assets/docs/tree/templates.doc.mjs +7 -1
  329. package/assets/docs/tree/test-in-an-app.doc.mjs +7 -7
  330. package/assets/docs/tree/test-template-in-app.doc.mjs +5 -5
  331. package/assets/docs/tree/themes.doc.mjs +5 -1
  332. package/assets/docs/tree/tokens-and-setup.doc.mjs +19 -15
  333. package/assets/docs/tree/tokens-data.doc.mjs +2 -2
  334. package/assets/docs/tree/troubleshooting.doc.mjs +29 -13
  335. package/assets/docs/tree/type-scale.doc.mjs +3 -3
  336. package/assets/docs/tree/uninstall.doc.mjs +109 -0
  337. package/assets/docs/tree/updates.doc.mjs +92 -0
  338. package/assets/docs/tree/upgrading.doc.mjs +6 -6
  339. package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +15 -3
  340. package/assets/docs/tree/verify-packed-template.doc.mjs +3 -3
  341. package/assets/docs/tree/versioning.doc.mjs +14 -9
  342. package/assets/docs/tree/who-answers.doc.mjs +119 -0
  343. package/assets/docs/tree/write-good-templates.doc.mjs +1 -1
  344. package/assets/docs/tree/write-the-template-file.doc.mjs +7 -6
  345. package/assets/docs/use-a-theme.doc.mjs +2 -2
  346. package/assets/docs/use-integrations.doc.mjs +120 -0
  347. package/assets/docs/working-with-ai.doc.mjs +70 -13
  348. package/assets/templates/themes/butter/butterTheme.ts +4 -2
  349. package/assets/templates/themes/stone/stoneTheme.ts +4 -2
  350. package/assets/templates/themes/y2k/y2kTheme.ts +4 -2
  351. package/assets/theme.template.ts +1 -1
  352. package/authoring/codemod/codemod.doc.mjs +7 -3
  353. package/authoring/config/config.doc.mjs +9 -6
  354. package/authoring/config/type.ts +4 -2
  355. package/authoring/debug/parse.d.mts +5 -5
  356. package/authoring/discover/discover.doc.mjs +7 -1
  357. package/authoring/doctypes/_schema.d.mts +8 -3
  358. package/authoring/doctypes/_schema.mjs +1 -0
  359. package/authoring/doctypes/base/graph-fields.doc.mjs +6 -4
  360. package/authoring/doctypes/command/command.doc.mjs +20 -12
  361. package/authoring/doctypes/command/type.ts +14 -0
  362. package/authoring/doctypes/component/component.doc.mjs +30 -27
  363. package/authoring/doctypes/component/type.ts +21 -8
  364. package/authoring/doctypes/enum/enum.doc.mjs +7 -4
  365. package/authoring/doctypes/function/function.doc.mjs +9 -8
  366. package/authoring/doctypes/hook/hook.doc.mjs +5 -4
  367. package/authoring/doctypes/hook/type.ts +4 -0
  368. package/authoring/doctypes/namespace/namespace.doc.mjs +7 -6
  369. package/authoring/doctypes/reference/reference.doc.mjs +12 -11
  370. package/authoring/doctypes/schema/schema.doc.mjs +10 -10
  371. package/authoring/doctypes/template/integration-template.doc.d.mts +11 -0
  372. package/authoring/doctypes/template/integration-template.doc.mjs +49 -0
  373. package/authoring/doctypes/template/parse.d.mts +6 -2
  374. package/authoring/doctypes/template/parse.mjs +3 -1
  375. package/authoring/doctypes/template/template.doc.mjs +3 -3
  376. package/authoring/doctypes/template/type.ts +22 -0
  377. package/authoring/doctypes/theme/theme.doc.mjs +2 -2
  378. package/authoring/gap-report/gap-report.doc.mjs +2 -2
  379. package/authoring/identity/identity.doc.mjs +3 -3
  380. package/authoring/index.d.ts +2 -0
  381. package/authoring/integration/integration.doc.mjs +30 -6
  382. package/authoring/integration/parse.test.mjs +21 -0
  383. package/authoring/integration/schema.d.mts +16 -3
  384. package/authoring/integration/schema.mjs +34 -2
  385. package/authoring/integration/type.ts +13 -1
  386. package/clients/cli/bin/astryx.mjs +11 -65
  387. package/clients/cli/cli-command.test.mjs +166 -0
  388. package/clients/cli/command-result-coverage.test.mjs +6 -5
  389. package/clients/cli/commands/blog.doc.mjs +1 -0
  390. package/clients/cli/commands/build-theme.batch-report.test.mjs +17 -3
  391. package/clients/cli/commands/build-theme.color-scheme.test.mjs +1 -1
  392. package/clients/cli/commands/build-theme.font-warning.test.mjs +3 -3
  393. package/clients/cli/commands/build-theme.path-safety.test.mjs +224 -6
  394. package/clients/cli/commands/build-theme.registry.test.mjs +5 -2
  395. package/clients/cli/commands/build.doc.mjs +1 -0
  396. package/clients/cli/commands/build.exit-codes-doc.test.mjs +4 -0
  397. package/clients/cli/commands/cli-postinstall.test.mjs +49 -1
  398. package/clients/cli/commands/component.doc.mjs +1 -0
  399. package/clients/cli/commands/{component/index.mjs → component.mjs} +37 -37
  400. package/clients/cli/commands/component.test.mjs +6 -6
  401. package/clients/cli/commands/discover.broken-integration.test.mjs +11 -7
  402. package/clients/cli/commands/discover.doc.mjs +9 -1
  403. package/clients/cli/commands/discover.mjs +144 -93
  404. package/clients/cli/commands/discover.no-source.test.mjs +448 -33
  405. package/clients/cli/commands/discover.sources.test.mjs +20 -1
  406. package/clients/cli/commands/docs.doc.mjs +3 -2
  407. package/clients/cli/commands/docs.mjs +50 -20
  408. package/clients/cli/commands/docs.test.mjs +16 -16
  409. package/clients/cli/commands/doctor-integration-components.doc.mjs +19 -4
  410. package/clients/cli/commands/doctor-integration-docs.doc.mjs +20 -5
  411. package/clients/cli/commands/doctor-integration-templates.doc.mjs +1 -0
  412. package/clients/cli/commands/doctor-integration-validate.doc.mjs +22 -2
  413. package/clients/cli/commands/doctor-integration.test.mjs +936 -3
  414. package/clients/cli/commands/doctor.doc.mjs +12 -2
  415. package/clients/cli/commands/doctor.mjs +332 -7
  416. package/clients/cli/commands/doctor.test.mjs +75 -4
  417. package/clients/cli/commands/gap-report.doc.mjs +15 -2
  418. package/clients/cli/commands/gap-report.mjs +24 -2
  419. package/clients/cli/commands/gap-report.test.mjs +79 -0
  420. package/clients/cli/commands/hook.doc.mjs +1 -0
  421. package/clients/cli/commands/{hook/index.mjs → hook.mjs} +22 -22
  422. package/clients/cli/commands/import-hint-correctness.test.mjs +1 -1
  423. package/clients/cli/commands/init.behavior.test.mjs +235 -1
  424. package/clients/cli/commands/init.doc.mjs +55 -10
  425. package/clients/cli/commands/init.flag-help.test.mjs +1 -0
  426. package/clients/cli/commands/init.mjs +2 -2
  427. package/clients/cli/commands/integration-add.doc.mjs +7 -0
  428. package/clients/cli/commands/integration-authoring.test.mjs +49 -3
  429. package/clients/cli/commands/integration-check.doc.mjs +93 -0
  430. package/clients/cli/commands/integration-check.test.mjs +489 -0
  431. package/clients/cli/commands/integration-pack.doc.mjs +8 -1
  432. package/clients/cli/commands/integration-verify.doc.mjs +8 -1
  433. package/clients/cli/commands/integration.doc.mjs +6 -2
  434. package/clients/cli/commands/integration.mjs +119 -7
  435. package/clients/cli/commands/json-contract.test.mjs +11 -2
  436. package/clients/cli/commands/manifest.doc.mjs +2 -1
  437. package/clients/cli/commands/manifest.mjs +67 -0
  438. package/clients/cli/commands/outside-project.test.mjs +874 -0
  439. package/clients/cli/commands/postinstall.doc.mjs +23 -0
  440. package/clients/cli/commands/postinstall.mjs +31 -0
  441. package/clients/cli/commands/search.doc.mjs +1 -0
  442. package/clients/cli/commands/search.mjs +16 -11
  443. package/clients/cli/commands/search.test.mjs +429 -296
  444. package/clients/cli/commands/setup-nudge.test.mjs +180 -2
  445. package/clients/cli/commands/swizzle.doc.mjs +7 -0
  446. package/clients/cli/commands/swizzle.mjs +5 -3
  447. package/clients/cli/commands/swizzle.routing.test.mjs +19 -2
  448. package/clients/cli/commands/template.doc.mjs +1 -0
  449. package/clients/cli/commands/text-json-parity.test.mjs +5 -0
  450. package/clients/cli/commands/theme-add-lifecycle.test.mjs +3 -3
  451. package/clients/cli/commands/theme-add.doc.mjs +8 -1
  452. package/clients/cli/commands/theme-build.doc.mjs +3 -2
  453. package/clients/cli/commands/theme-eject.doc.mjs +1 -0
  454. package/clients/cli/commands/theme-list.behavior.test.mjs +6 -0
  455. package/clients/cli/commands/theme-list.doc.mjs +1 -0
  456. package/clients/cli/commands/theme-palette-generate.doc.mjs +1 -0
  457. package/clients/cli/commands/theme-remove.doc.mjs +7 -0
  458. package/clients/cli/commands/theme-targets.doc.mjs +1 -0
  459. package/clients/cli/commands/theme-template.doc.mjs +1 -0
  460. package/clients/cli/commands/theme-use.doc.mjs +7 -0
  461. package/clients/cli/commands/{build-theme.mjs → theme.mjs} +27 -14
  462. package/clients/cli/commands/upgrade.config-ordering.test.mjs +2 -1
  463. package/clients/cli/commands/upgrade.doc.mjs +26 -3
  464. package/clients/cli/commands/upgrade.file-protection.test.mjs +3 -2
  465. package/clients/cli/commands/upgrade.hook-output.test.mjs +2 -1
  466. package/clients/cli/commands/upgrade.mjs +9 -2
  467. package/clients/cli/commands/upgrade.older-cli.test.mjs +160 -0
  468. package/clients/cli/commands/upgrade.subfolder-path.test.mjs +97 -0
  469. package/clients/cli/index.mjs +156 -100
  470. package/clients/cli/lib/cli-error.mjs +4 -1
  471. package/clients/cli/lib/component-format.mjs +1 -1
  472. package/clients/cli/lib/component-format.test.mjs +1 -1
  473. package/clients/cli/lib/define-command.mjs +14 -9
  474. package/clients/cli/lib/exit-codes.test.mjs +5 -0
  475. package/clients/cli/lib/json-shim.mjs +3 -1
  476. package/clients/cli/lib/manifest.d.ts +9 -0
  477. package/clients/cli/lib/manifest.mjs +17 -1
  478. package/clients/cli/lib/manifest.test.mjs +37 -0
  479. package/clients/cli/lib/welcome-box.mjs +50 -0
  480. package/clients/cli/run.mjs +108 -0
  481. package/foundation/agent-docs/agent-doc-state.d.mts +67 -13
  482. package/foundation/agent-docs/agent-doc-state.mjs +123 -14
  483. package/foundation/agent-docs/agent-docs.d.mts +104 -15
  484. package/foundation/agent-docs/agent-docs.mjs +1028 -114
  485. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +1239 -17
  486. package/foundation/agent-docs/agent-docs.test.mjs +683 -39
  487. package/foundation/agent-docs/computer-agent-text.d.mts +170 -0
  488. package/foundation/agent-docs/computer-agent-text.mjs +750 -0
  489. package/foundation/agent-docs/computer-agent-text.test.mjs +699 -0
  490. package/foundation/config/project.d.mts +35 -3
  491. package/foundation/config/project.mjs +243 -26
  492. package/foundation/config/project.test.mjs +122 -0
  493. package/foundation/config/theme-state.mjs +5 -4
  494. package/foundation/discovery/authoring-self-docs.d.mts +7 -0
  495. package/foundation/discovery/authoring-self-docs.mjs +17 -4
  496. package/foundation/discovery/authoring-self-docs.test.mjs +15 -3
  497. package/foundation/discovery/authoring-surface.d.mts +1 -1
  498. package/foundation/discovery/authoring-surface.mjs +2 -2
  499. package/foundation/discovery/authoring-surface.test.mjs +1 -1
  500. package/foundation/discovery/cli-self-docs.d.mts +2 -1
  501. package/foundation/discovery/cli-self-docs.mjs +22 -4
  502. package/foundation/discovery/cli-self-docs.test.mjs +3 -2
  503. package/foundation/discovery/component-discovery.d.mts +227 -10
  504. package/foundation/discovery/component-discovery.export-names.test.mjs +760 -0
  505. package/foundation/discovery/component-discovery.mjs +940 -57
  506. package/foundation/discovery/component-discovery.test.mjs +96 -0
  507. package/foundation/discovery/component-loader.d.mts +1 -1
  508. package/foundation/discovery/component-replacement.mjs +20 -1
  509. package/foundation/discovery/component-replacement.test.mjs +40 -0
  510. package/foundation/discovery/copied-passages.d.mts +216 -0
  511. package/foundation/discovery/copied-passages.mjs +720 -0
  512. package/foundation/discovery/copied-passages.test.mjs +124 -0
  513. package/foundation/discovery/doc-consistency.d.mts +34 -0
  514. package/foundation/discovery/doc-consistency.mjs +513 -0
  515. package/foundation/discovery/doc-consistency.test.mjs +347 -0
  516. package/foundation/discovery/doc-fluff.d.mts +112 -0
  517. package/foundation/discovery/doc-fluff.mjs +328 -0
  518. package/foundation/discovery/doc-fluff.test.mjs +142 -0
  519. package/foundation/discovery/doc-types.d.mts +157 -0
  520. package/foundation/discovery/doc-types.mjs +1231 -0
  521. package/foundation/discovery/doc-types.test.mjs +744 -0
  522. package/foundation/discovery/docs-discovery.d.mts +88 -0
  523. package/foundation/discovery/docs-discovery.mjs +97 -3
  524. package/foundation/discovery/integration-doc-files.d.mts +22 -0
  525. package/foundation/discovery/integration-doc-files.mjs +231 -0
  526. package/foundation/discovery/integration-doc-files.test.mjs +246 -0
  527. package/foundation/discovery/module-exports.d.mts +68 -0
  528. package/foundation/discovery/module-exports.mjs +609 -31
  529. package/foundation/discovery/module-exports.test.mjs +172 -0
  530. package/foundation/discovery/package-tsconfig.d.mts +14 -0
  531. package/foundation/discovery/package-tsconfig.mjs +228 -0
  532. package/foundation/discovery/package-tsconfig.test.mjs +210 -0
  533. package/foundation/discovery/project-typescript.d.mts +32 -0
  534. package/foundation/discovery/project-typescript.mjs +89 -0
  535. package/foundation/discovery/prop-drift.d.mts +297 -0
  536. package/foundation/discovery/prop-drift.mjs +2428 -0
  537. package/foundation/discovery/prop-drift.test.mjs +2337 -0
  538. package/foundation/discovery/runner-allowlist.d.mts +38 -0
  539. package/foundation/discovery/runner-allowlist.mjs +51 -0
  540. package/foundation/discovery/runner-commands.d.mts +77 -0
  541. package/foundation/discovery/runner-commands.mjs +294 -0
  542. package/foundation/discovery/runner-commands.test.mjs +128 -0
  543. package/foundation/discovery/stray-pointers.d.mts +52 -0
  544. package/foundation/discovery/stray-pointers.mjs +293 -0
  545. package/foundation/discovery/stray-pointers.test.mjs +86 -0
  546. package/foundation/discovery/template-adapter.mjs +92 -6
  547. package/foundation/discovery/template-needs.mjs +6 -46
  548. package/foundation/discovery/theme-discovery.mjs +147 -3
  549. package/foundation/discovery/theme-imports.mjs +8 -4
  550. package/foundation/discovery/theme-imports.test.mjs +1 -1
  551. package/foundation/discovery/type-match.d.mts +53 -0
  552. package/foundation/discovery/type-match.mjs +660 -0
  553. package/foundation/discovery/type-match.test.mjs +169 -0
  554. package/foundation/discovery/type-text.d.mts +68 -0
  555. package/foundation/discovery/type-text.mjs +658 -0
  556. package/foundation/discovery/type-text.test.mjs +196 -0
  557. package/foundation/discovery/unresolved-references.d.mts +62 -0
  558. package/foundation/discovery/unresolved-references.mjs +790 -0
  559. package/foundation/discovery/unresolved-references.test.mjs +567 -0
  560. package/foundation/doc-compiler/doc-loads.test.mjs +84 -10
  561. package/foundation/doc-compiler/inputs.mjs +27 -1
  562. package/foundation/doc-compiler/inputs.test.mjs +0 -1
  563. package/foundation/doc-compiler/links.d.mts +41 -5
  564. package/foundation/doc-compiler/links.mjs +167 -28
  565. package/foundation/doc-compiler/links.test.mjs +97 -4
  566. package/foundation/doc-compiler/read.d.mts +1 -1
  567. package/foundation/doc-compiler/read.mjs +59 -1
  568. package/foundation/doc-compiler/read.test.mjs +11 -2
  569. package/foundation/doc-compiler/split-topic-keywords.test.mjs +3 -2
  570. package/foundation/doc-compiler/tree.d.mts +32 -6
  571. package/foundation/doc-compiler/tree.mjs +107 -44
  572. package/foundation/doc-compiler/tree.test.mjs +14 -7
  573. package/foundation/env/cli-command.d.mts +83 -0
  574. package/foundation/env/cli-command.mjs +152 -0
  575. package/foundation/env/cli-command.test.mjs +129 -0
  576. package/foundation/env/node-version.test.mjs +15 -3
  577. package/foundation/env/package-manager.d.mts +93 -9
  578. package/foundation/env/package-manager.global.test.mjs +66 -0
  579. package/foundation/env/package-manager.mjs +184 -13
  580. package/foundation/env/package-manager.test.mjs +341 -15
  581. package/foundation/env/project-scope.d.mts +9 -0
  582. package/foundation/env/project-scope.mjs +33 -0
  583. package/foundation/env/search-path.d.mts +42 -0
  584. package/foundation/env/search-path.mjs +205 -0
  585. package/foundation/env/search-path.test.mjs +122 -0
  586. package/foundation/env/user-dirs.d.mts +39 -0
  587. package/foundation/env/user-dirs.mjs +93 -0
  588. package/foundation/env/user-dirs.test.mjs +72 -0
  589. package/foundation/env/user-settings.d.mts +46 -0
  590. package/foundation/env/user-settings.mjs +106 -0
  591. package/foundation/env/user-settings.test.mjs +64 -0
  592. package/foundation/fs/file-protection.mjs +15 -1
  593. package/foundation/fs/module-loader.d.mts +2 -1
  594. package/foundation/fs/module-loader.mjs +60 -4
  595. package/foundation/fs/module-loader.stdout.test.mjs +3 -2
  596. package/foundation/fs/module-loader.test.mjs +194 -0
  597. package/foundation/fs/path-compare.d.mts +33 -0
  598. package/foundation/fs/path-compare.mjs +73 -0
  599. package/foundation/fs/paths.d.mts +122 -4
  600. package/foundation/fs/paths.mjs +675 -29
  601. package/foundation/fs/paths.test.mjs +439 -54
  602. package/foundation/fs/read-record.d.mts +18 -0
  603. package/foundation/fs/read-record.mjs +131 -0
  604. package/foundation/fs/read-record.test.mjs +77 -0
  605. package/foundation/integrations/autolink.d.mts +2 -1
  606. package/foundation/integrations/autolink.mjs +4 -13
  607. package/foundation/integrations/cli-peer-version.d.mts +36 -0
  608. package/foundation/integrations/cli-peer-version.mjs +132 -0
  609. package/foundation/integrations/cli-peer-version.test.mjs +354 -0
  610. package/foundation/integrations/computer-integrations.d.mts +81 -0
  611. package/foundation/integrations/computer-integrations.mjs +345 -0
  612. package/foundation/integrations/computer-integrations.test.mjs +292 -0
  613. package/foundation/integrations/contribution-inventory.d.mts +26 -20
  614. package/foundation/integrations/contribution-inventory.mjs +97 -8
  615. package/foundation/integrations/exports-subpaths.d.mts +57 -0
  616. package/foundation/integrations/exports-subpaths.mjs +113 -0
  617. package/foundation/integrations/integration-warnings.mjs +3 -2
  618. package/foundation/integrations/integration-warnings.test.mjs +8 -9
  619. package/foundation/integrations/integrations.d.mts +51 -1
  620. package/foundation/integrations/integrations.mjs +106 -4
  621. package/foundation/integrations/issue.ts +6 -0
  622. package/foundation/integrations/public-imports.d.mts +118 -0
  623. package/foundation/integrations/public-imports.mjs +1769 -0
  624. package/foundation/integrations/public-imports.test.mjs +1793 -0
  625. package/foundation/integrations/validate-contributions.d.mts +117 -0
  626. package/foundation/integrations/validate-contributions.mjs +1209 -14
  627. package/foundation/release/agent-text-worker.d.mts +4 -0
  628. package/foundation/release/agent-text-worker.mjs +52 -0
  629. package/foundation/release/cache.d.mts +310 -0
  630. package/foundation/release/cache.mjs +1216 -0
  631. package/foundation/release/cache.test.mjs +923 -0
  632. package/foundation/release/choose.d.mts +207 -0
  633. package/foundation/release/choose.mjs +677 -0
  634. package/foundation/release/choose.test.mjs +427 -0
  635. package/foundation/release/core-worker.d.mts +4 -0
  636. package/foundation/release/core-worker.mjs +38 -0
  637. package/foundation/release/global-state.d.mts +263 -0
  638. package/foundation/release/global-state.mjs +474 -0
  639. package/foundation/release/global-state.test.mjs +381 -0
  640. package/foundation/release/handoff.d.mts +79 -0
  641. package/foundation/release/handoff.e2e.test.mjs +278 -0
  642. package/foundation/release/handoff.mjs +524 -0
  643. package/foundation/release/lock-lease.d.mts +23 -0
  644. package/foundation/release/lock-lease.mjs +80 -0
  645. package/foundation/release/notices.d.mts +307 -0
  646. package/foundation/release/notices.mjs +707 -0
  647. package/foundation/release/notices.test.mjs +586 -0
  648. package/foundation/release/npm-guard.d.mts +4 -0
  649. package/foundation/release/npm-guard.mjs +126 -0
  650. package/foundation/release/project.d.mts +141 -0
  651. package/foundation/release/project.mjs +466 -0
  652. package/foundation/release/project.test.mjs +288 -0
  653. package/foundation/release/refresh-worker.d.mts +4 -0
  654. package/foundation/release/refresh-worker.mjs +27 -0
  655. package/foundation/release/run-context.d.mts +47 -0
  656. package/foundation/release/run-context.mjs +163 -0
  657. package/foundation/release/update-notice-env.d.mts +28 -0
  658. package/foundation/release/update-notice-env.mjs +39 -0
  659. package/foundation/response/base.d.ts +26 -3
  660. package/foundation/response/error-codes.d.mts +3 -1
  661. package/foundation/response/error-codes.doc.mjs +12 -0
  662. package/foundation/response/error-codes.mjs +17 -0
  663. package/foundation/response/error-codes.test.mjs +2 -0
  664. package/foundation/response/json-contract.test.mjs +7 -2
  665. package/foundation/response/json.mjs +4 -1
  666. package/foundation/response/response-types.doc.mjs +22 -11
  667. package/foundation/response/response-types.doc.test.mjs +46 -0
  668. package/foundation/response/response.doc.mjs +3 -3
  669. package/foundation/route/route.d.mts +285 -0
  670. package/foundation/route/route.mjs +324 -0
  671. package/foundation/route/route.test.mjs +153 -0
  672. package/foundation/runtime/hosted-runtime.test.mjs +403 -0
  673. package/foundation/runtime/locked-versions.d.mts +32 -0
  674. package/foundation/runtime/locked-versions.mjs +65 -0
  675. package/foundation/runtime/package-root.d.mts +91 -0
  676. package/foundation/runtime/package-root.mjs +174 -0
  677. package/foundation/runtime/package-set.d.mts +62 -0
  678. package/foundation/runtime/package-set.mjs +130 -0
  679. package/foundation/runtime/package-set.test.mjs +432 -0
  680. package/foundation/text/string-utils.d.mts +2 -1
  681. package/foundation/text/string-utils.mjs +16 -5
  682. package/foundation/text/suggest-order.d.mts +72 -0
  683. package/foundation/text/suggest-order.mjs +363 -0
  684. package/foundation/text/suggest-order.test.mjs +259 -0
  685. package/foundation/xle/browser-imports.test.mjs +74 -0
  686. package/foundation/xle/registry.mjs +4 -0
  687. package/foundation/xle/registry.test.mjs +28 -0
  688. package/host/door-conformance.test.mjs +274 -0
  689. package/host/index.d.ts +116 -0
  690. package/host/index.mjs +295 -0
  691. package/host/index.test.mjs +302 -0
  692. package/package.json +16 -11
  693. package/scripts/postinstall.mjs +24 -5
  694. package/assets/docs/tree/integrations.doc.mjs +0 -40
@@ -0,0 +1,53 @@
1
+ // @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
2
+ // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
+
4
+ /**
5
+ * Each component doc's props compared with the component's TypeScript props,
6
+ * read with the project's own compiler (spec:AST-039 FR12). Without one, the
7
+ * report says the comparison was skipped.
8
+ * @param {any} integration a loaded integration
9
+ * @param {string} cwd
10
+ * @returns {Promise<import('../../foundation/discovery/prop-drift.mjs').PropDriftReport>}
11
+ */
12
+ export function integrationPropDrift(integration: any, cwd: string): Promise<import("../../foundation/discovery/prop-drift.mjs").PropDriftReport>;
13
+ /**
14
+ * The passages two of a package's topics, or one of them and a Core topic,
15
+ * repeat word for word (architecture:cli-surface DEC-8). Reads the package's
16
+ * topics and Core's guides.
17
+ *
18
+ * @param {Parameters<typeof findCopiedPassages>[0]} discovered the package's
19
+ * docs, as discoverIntegrationDocs returns them
20
+ */
21
+ export function integrationCopiedPassages(discovered: Parameters<typeof findCopiedPassages>[0]): Promise<import("./authoring-checks.type.mjs").CopiedPassage[]>;
22
+ /**
23
+ * Padding phrases and low-density topics in a package's prose
24
+ * (architecture:cli-surface DEC-8). Reads the package's topics, and Core's
25
+ * guides for the density median a finding names.
26
+ *
27
+ * @param {Parameters<typeof findFluff>[0]} discovered the package's docs, as
28
+ * discoverIntegrationDocs returns them
29
+ */
30
+ export function integrationFluff(discovered: Parameters<typeof findFluff>[0]): Promise<import("./authoring-checks.type.mjs").DocFluff[]>;
31
+ /**
32
+ * Code spans in a package's prose that write `astryx docs <name>` for a doc
33
+ * that exists, where `{@link generic:<name>}` would be checked
34
+ * (architecture:cli-surface DEC-8). Reads the package's topics, its own
35
+ * component docs, and the names of Core's docs.
36
+ *
37
+ * @param {Parameters<typeof findStrayPointers>[0]} discovered the package's
38
+ * docs, as discoverIntegrationDocs returns them
39
+ * @param {any} [integration] the loaded integration, whose component docs are
40
+ * read too
41
+ */
42
+ export function integrationStrayPointers(discovered: Parameters<typeof findStrayPointers>[0], integration?: any): Promise<import("./authoring-checks.type.mjs").StrayPointer[]>;
43
+ /**
44
+ * Each Astryx command a package's topics write with a package runner. A
45
+ * package whose topics cannot be discovered has none here: the other checks
46
+ * report topics that do not load.
47
+ * @param {any} integration a loaded integration
48
+ * @returns {Promise<import('../../foundation/discovery/runner-commands.mjs').RunnerCommand[]>}
49
+ */
50
+ export function integrationRunnerCommands(integration: any): Promise<import("../../foundation/discovery/runner-commands.mjs").RunnerCommand[]>;
51
+ import { findCopiedPassages } from '../../foundation/discovery/copied-passages.mjs';
52
+ import { findFluff } from '../../foundation/discovery/doc-fluff.mjs';
53
+ import { findStrayPointers } from '../../foundation/discovery/stray-pointers.mjs';
@@ -0,0 +1,132 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file The integration subject's access to the environment (INV21): reading
5
+ * one package's component docs and sources with the project's own TypeScript,
6
+ * and its topics.
7
+ *
8
+ * @input a loaded integration and the directory the command runs in
9
+ * @output the reports the integration checks attach to their results
10
+ * @position api/integration (internal; not exported from ./api)
11
+ */
12
+
13
+ import {
14
+ discoverValidIntegrationComponents,
15
+ forEachIntegrationDoc,
16
+ integrationSourceForDoc,
17
+ } from '../../foundation/discovery/component-discovery.mjs';
18
+ import {discoverIntegrationDocs} from '../../foundation/discovery/docs-discovery.mjs';
19
+ import {comparePropDocs} from '../../foundation/discovery/prop-drift.mjs';
20
+ import {findCopiedPassages} from '../../foundation/discovery/copied-passages.mjs';
21
+ import {findFluff} from '../../foundation/discovery/doc-fluff.mjs';
22
+ import {findRunnerCommands} from '../../foundation/discovery/runner-commands.mjs';
23
+ import {findStrayPointers} from '../../foundation/discovery/stray-pointers.mjs';
24
+
25
+ /**
26
+ * Each component doc's props compared with the component's TypeScript props,
27
+ * read with the project's own compiler (spec:AST-039 FR12). Without one, the
28
+ * report says the comparison was skipped.
29
+ * @param {any} integration a loaded integration
30
+ * @param {string} cwd
31
+ * @returns {Promise<import('../../foundation/discovery/prop-drift.mjs').PropDriftReport>}
32
+ */
33
+ export async function integrationPropDrift(integration, cwd) {
34
+ const packageDir = /** @type {{__packageDir?: string}} */ (integration)
35
+ .__packageDir;
36
+ const {components} = await discoverValidIntegrationComponents(integration);
37
+ // Every doc the package ships has its prop tables compared or listed as not
38
+ // compared. A doc discovery leaves out (a hidden one, a second doc for one
39
+ // name, or one whose source or own file doesn't load) gets a record under
40
+ // its file name.
41
+ const recorded = new Set(components.map(c => c.docPath));
42
+ /** @type {typeof components} */
43
+ const left = [];
44
+ forEachIntegrationDoc(integration?.components, (docPath, stem) => {
45
+ if (recorded.has(docPath)) return;
46
+ recorded.add(docPath);
47
+ left.push({
48
+ name: stem,
49
+ package: integration.name,
50
+ docPath,
51
+ sourcePath: integrationSourceForDoc(docPath),
52
+ issuesUrl: integration.issuesUrl,
53
+ group: null,
54
+ });
55
+ });
56
+ return comparePropDocs([...components, ...left], {
57
+ packageDir: packageDir ?? cwd,
58
+ resolveFrom: [cwd, packageDir],
59
+ });
60
+ }
61
+
62
+ /**
63
+ * The passages two of a package's topics, or one of them and a Core topic,
64
+ * repeat word for word (architecture:cli-surface DEC-8). Reads the package's
65
+ * topics and Core's guides.
66
+ *
67
+ * @param {Parameters<typeof findCopiedPassages>[0]} discovered the package's
68
+ * docs, as discoverIntegrationDocs returns them
69
+ */
70
+ export function integrationCopiedPassages(discovered) {
71
+ return findCopiedPassages(discovered);
72
+ }
73
+
74
+ /**
75
+ * Padding phrases and low-density topics in a package's prose
76
+ * (architecture:cli-surface DEC-8). Reads the package's topics, and Core's
77
+ * guides for the density median a finding names.
78
+ *
79
+ * @param {Parameters<typeof findFluff>[0]} discovered the package's docs, as
80
+ * discoverIntegrationDocs returns them
81
+ */
82
+ export function integrationFluff(discovered) {
83
+ return findFluff(discovered);
84
+ }
85
+
86
+ /**
87
+ * Code spans in a package's prose that write `astryx docs <name>` for a doc
88
+ * that exists, where `{@link generic:<name>}` would be checked
89
+ * (architecture:cli-surface DEC-8). Reads the package's topics, its own
90
+ * component docs, and the names of Core's docs.
91
+ *
92
+ * @param {Parameters<typeof findStrayPointers>[0]} discovered the package's
93
+ * docs, as discoverIntegrationDocs returns them
94
+ * @param {any} [integration] the loaded integration, whose component docs are
95
+ * read too
96
+ */
97
+ export async function integrationStrayPointers(discovered, integration) {
98
+ /** @type {{name: string, file: string}[]} */
99
+ const components = [];
100
+ if (integration?.components) {
101
+ const seen = new Set();
102
+ try {
103
+ const {components: records} =
104
+ await discoverValidIntegrationComponents(integration);
105
+ for (const record of records) {
106
+ if (!record.docPath || seen.has(record.docPath)) continue;
107
+ seen.add(record.docPath);
108
+ components.push({name: record.name, file: record.docPath});
109
+ }
110
+ } catch {
111
+ // `validate` reports component docs that do not load.
112
+ }
113
+ }
114
+ return findStrayPointers({...discovered, components});
115
+ }
116
+
117
+ /**
118
+ * Each Astryx command a package's topics write with a package runner. A
119
+ * package whose topics cannot be discovered has none here: the other checks
120
+ * report topics that do not load.
121
+ * @param {any} integration a loaded integration
122
+ * @returns {Promise<import('../../foundation/discovery/runner-commands.mjs').RunnerCommand[]>}
123
+ */
124
+ export async function integrationRunnerCommands(integration) {
125
+ let discovered;
126
+ try {
127
+ discovered = await discoverIntegrationDocs(integration);
128
+ } catch {
129
+ return [];
130
+ }
131
+ return findRunnerCommands(discovered);
132
+ }
@@ -98,6 +98,72 @@ describe('integrationAddComponent name collisions', () => {
98
98
  expect(snapshot()).toEqual(before);
99
99
  });
100
100
 
101
+ it('adds a name a family doc lists but the module it imports does not export', async () => {
102
+ fs.writeFileSync(
103
+ path.join(tmpDir, 'package.json'),
104
+ `${JSON.stringify({name: '@acme/widgets', version: '1.0.0', files: ['dist'], exports: {'./tabs': './components/tabs/index.ts'}}, null, 2)}\n`,
105
+ );
106
+ const tabs = path.join(tmpDir, 'components', 'tabs');
107
+ fs.mkdirSync(tabs, {recursive: true});
108
+ fs.writeFileSync(
109
+ path.join(tabs, 'AcmeTabs.doc.mjs'),
110
+ "export default {type: 'component', name: 'AcmeTabs', import: '@acme/widgets/tabs', description: 'x', components: [{name: 'AcmeTabExtra', description: 'x'}]};\n",
111
+ );
112
+ fs.writeFileSync(
113
+ path.join(tabs, 'AcmeTabs.tsx'),
114
+ 'export function AcmeTabs() { return null; }\nexport function AcmeTabExtra() { return null; }\n',
115
+ );
116
+ fs.writeFileSync(
117
+ path.join(tabs, 'index.ts'),
118
+ "export {AcmeTabs} from './AcmeTabs';\n",
119
+ );
120
+
121
+ const result = await integrationAdd('component', 'AcmeTabExtra', {
122
+ cwd: tmpDir,
123
+ dryRun: true,
124
+ });
125
+ expect(result.data.files).toContain('components/AcmeTabExtra.doc.mjs');
126
+ });
127
+
128
+ it('refuses a member a family exports through built output', async () => {
129
+ fs.writeFileSync(
130
+ path.join(tmpDir, 'package.json'),
131
+ `${JSON.stringify({name: '@acme/widgets', version: '1.0.0', files: ['dist'], exports: {'./tabs': './dist/tabs/index.js'}}, null, 2)}\n`,
132
+ );
133
+ const tabs = path.join(tmpDir, 'components', 'tabs');
134
+ fs.mkdirSync(tabs, {recursive: true});
135
+ fs.writeFileSync(
136
+ path.join(tabs, 'AcmeTabs.doc.mjs'),
137
+ "export default {type: 'component', name: 'AcmeTabs', import: '@acme/widgets/tabs', description: 'x', components: [{name: 'AcmeTab', description: 'x'}]};\n",
138
+ );
139
+ fs.writeFileSync(
140
+ path.join(tabs, 'AcmeTabs.tsx'),
141
+ 'export function AcmeTabs() { return null; }\n',
142
+ );
143
+ fs.writeFileSync(
144
+ path.join(tabs, 'AcmeTab.tsx'),
145
+ 'export function AcmeTab() { return null; }\n',
146
+ );
147
+ const dist = path.join(tmpDir, 'dist', 'tabs');
148
+ fs.mkdirSync(dist, {recursive: true});
149
+ fs.writeFileSync(
150
+ path.join(dist, 'index.js'),
151
+ "export {AcmeTabs} from './tabs.js';\nexport {AcmeTab} from './tab.js';\n",
152
+ );
153
+ fs.writeFileSync(
154
+ path.join(dist, 'tabs.js'),
155
+ 'export function AcmeTabs() { return null; }\n',
156
+ );
157
+ fs.writeFileSync(
158
+ path.join(dist, 'tab.js'),
159
+ 'export function AcmeTab() { return null; }\n',
160
+ );
161
+
162
+ await expect(
163
+ integrationAdd('component', 'AcmeTab', {cwd: tmpDir, dryRun: true}),
164
+ ).rejects.toThrow('Refusing to add component "AcmeTab"');
165
+ });
166
+
101
167
  it('still adds a component whose name is free', async () => {
102
168
  writeAuthoredComponent('components/AcmeWidget/AcmeWidget.doc.mjs');
103
169
 
@@ -264,9 +264,13 @@ async function addComponent(name, options) {
264
264
  ERROR_CODES.ERR_FILE_EXISTS,
265
265
  );
266
266
  }
267
- // Discovery keys components by doc stem anywhere under the root, so a second
268
- // doc with this name would shadow one of the two.
269
- const existingDoc = findIntegrationComponentDoc({components: root}, name);
267
+ // A second doc under a name discovery already records, by a doc's file name
268
+ // anywhere under the root or by a name a doc documents, would shadow one of
269
+ // the two.
270
+ const existingDoc = findIntegrationComponentDoc(
271
+ {name: owner, components: root, __packageDir: packageDir},
272
+ name,
273
+ );
270
274
  if (existingDoc != null) {
271
275
  throw new AstryxError(
272
276
  `Refusing to add component "${name}": ${projectPath(path.relative(packageDir, existingDoc))} already defines it.`,
@@ -691,7 +695,7 @@ async function addTemplate(name, options) {
691
695
  const sourcePath = projectPath(path.relative(packageDir, sourceFile));
692
696
  const extensionlessPath = sourcePath.replace(/\.tsx?$/u, '');
693
697
  const blockFields = templateType === 'block' ? '\n aspectRatio: 1,' : '';
694
- const specContents = `/** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */\nexport default {\n type: '${templateType}',\n name: '${name}',\n displayName: '${kebabToTitle(name)}',\n description: '${kebabToTitle(name)} template.',${blockFields}\n};\n`;
698
+ const specContents = `/** @type {import('@astryxdesign/cli/authoring').IntegrationTemplateDoc} */\nexport default {\n type: '${templateType}',\n name: '${name}',\n displayName: '${kebabToTitle(name)}',\n description: '${kebabToTitle(name)} template.',${blockFields}\n};\n`;
695
699
  const sourceContents = `export default function ${pascalName}() {\n return <div>${kebabToTitle(name)}</div>;\n}\n`;
696
700
 
697
701
  /** @type {import('./add-helpers.mjs').WritePlan[]} */
@@ -536,7 +536,9 @@ describe('integrationAdd template', () => {
536
536
  path.join(tmpDir, 'templates/my-widget.doc.mjs'),
537
537
  'utf-8',
538
538
  );
539
- expect(spec).toContain("@astryxdesign/cli/authoring').TemplateDoc");
539
+ expect(spec).toContain(
540
+ "@astryxdesign/cli/authoring').IntegrationTemplateDoc",
541
+ );
540
542
  expect(spec).toContain("type: 'page'");
541
543
  expect(spec).toContain("name: 'my-widget'");
542
544
 
@@ -830,7 +832,7 @@ describe('typed descriptor conformance', () => {
830
832
  for (const [relativePath, type] of [
831
833
  ['components/MyWidget.doc.mjs', 'ComponentDoc'],
832
834
  ['docs/my-guide.doc.mjs', 'ReferenceDoc'],
833
- ['templates/my-page.doc.mjs', 'TemplateDoc'],
835
+ ['templates/my-page.doc.mjs', 'IntegrationTemplateDoc'],
834
836
  ['themes/ocean/oceanTheme.doc.mjs', 'ThemeDoc'],
835
837
  ]) {
836
838
  const source = fs.readFileSync(path.join(tmpDir, relativePath), 'utf-8');
@@ -3,6 +3,10 @@
3
3
  /**
4
4
  * @file Integration authoring diagnostics against the built-in Core catalog.
5
5
  *
6
+ * The components check also compares each component doc's props with the
7
+ * component's TypeScript props (foundation/discovery/prop-drift.mjs); those
8
+ * findings are warnings under `propDrift`.
9
+ *
6
10
  * Templates may intentionally replace Core identities; undeclared same-id
7
11
  * overlaps stay fail-closed and require package selection. The CLI package
8
12
  * version gates replacement-specific fields so 0.6.x keeps its released shape.
@@ -14,17 +18,25 @@
14
18
  * @position Public integration-authoring API over private discovery adapters.
15
19
  */
16
20
 
21
+ import path from 'node:path';
17
22
  import {getCliInvocation} from '../../foundation/env/package-manager.mjs';
18
23
  import {
24
+ packageComponentLinkProblems,
19
25
  packageDocsProblems,
20
26
  packageReferenceProblems,
21
27
  } from '../docs/_adapter.mjs';
22
- import {findCoreDir} from '../../foundation/fs/paths.mjs';
28
+ import {findProjectCoreDir} from '../../foundation/fs/paths.mjs';
23
29
  import {
24
30
  discoverIntegrationComponents,
25
31
  discoverOwnedComponents,
26
32
  } from '../../foundation/discovery/component-discovery.mjs';
27
33
  import {loadComponentReplacements} from '../component/_adapter.mjs';
34
+ import {
35
+ integrationCopiedPassages,
36
+ integrationFluff,
37
+ integrationPropDrift,
38
+ integrationStrayPointers,
39
+ } from './_adapter.mjs';
28
40
  import {
29
41
  discoverBuiltinTopics,
30
42
  discoverIntegrationDocs,
@@ -39,6 +51,8 @@ import {
39
51
  validateInstalledIntegration,
40
52
  validateLocalIntegration,
41
53
  } from './validate-integration.mjs';
54
+ import {rootProblem} from '../../foundation/integrations/validate-contributions.mjs';
55
+ import {normalizeProviderId} from '../../foundation/identity/provider-identity.mjs';
42
56
 
43
57
  /** @param {string} value */
44
58
  export function shellArg(value) {
@@ -46,15 +60,61 @@ export function shellArg(value) {
46
60
  return `'${value.replace(/'/g, `'\\''`)}'`;
47
61
  }
48
62
 
63
+ /**
64
+ * The provider ID a package without a name is checked under: a valid bare
65
+ * package name no published package can hold (npm names are lowercase).
66
+ */
67
+ const UNNAMED_PROVIDER = 'astryx-unnamed-local-package';
68
+
69
+ /**
70
+ * A message as the package sees it: the stand-in provider ID gone, its docs
71
+ * named by their path in the package.
72
+ * @param {string} message
73
+ */
74
+ function unnamedShown(message) {
75
+ return message
76
+ .split(`${UNNAMED_PROVIDER}/`)
77
+ .join('')
78
+ .split(UNNAMED_PROVIDER)
79
+ .join('this package');
80
+ }
81
+
49
82
  /**
50
83
  * Resolve one local or installed integration for an authoring check.
51
84
  * @param {string | undefined} pkg
52
85
  * @param {string} cwd
53
86
  */
54
87
  async function resolveIntegration(pkg, cwd) {
55
- return pkg
56
- ? validateInstalledIntegration(pkg, cwd)
57
- : validateLocalIntegration(cwd);
88
+ const resolved = pkg
89
+ ? await validateInstalledIntegration(pkg, cwd)
90
+ : await validateLocalIntegration(cwd);
91
+ const integration = resolved.found ? resolved.integration : undefined;
92
+ if (!integration) return resolved;
93
+ // A root that is not a readable folder is reported in the issues; the
94
+ // checks read nothing from it rather than fail on it.
95
+ /** @type {typeof integration & {__unnamed?: boolean}} */
96
+ const usable = {...integration};
97
+ // The provider ID readers key the package on: the manifest's providerId,
98
+ // else its name. A package with neither (validate warned about it) is
99
+ // still checked; the docs check names its docs under a stand-in ID.
100
+ try {
101
+ usable.providerId = normalizeProviderId(
102
+ integration.__declaredProviderId ?? integration.name,
103
+ );
104
+ } catch {
105
+ usable.__unnamed = true;
106
+ }
107
+ for (const kind of /** @type {const} */ ([
108
+ 'components',
109
+ 'templates',
110
+ 'codemods',
111
+ 'docs',
112
+ 'themes',
113
+ ])) {
114
+ const root = usable[kind];
115
+ if (root != null && rootProblem(root)) usable[kind] = undefined;
116
+ }
117
+ return {...resolved, integration: usable};
58
118
  }
59
119
 
60
120
  /**
@@ -242,7 +302,24 @@ export async function integrationComponentConflicts(pkg, options = {}) {
242
302
  };
243
303
  }
244
304
 
245
- const coreDir = findCoreDir(cwd);
305
+ // Each documented prop against the component's TypeScript props, read with
306
+ // the project's own compiler; without one the report says it was skipped.
307
+ const propDrift = await integrationPropDrift(resolved.integration, cwd);
308
+
309
+ // A link in a component doc's text reads as the command that opens its doc,
310
+ // as one in a topic does; one that names no doc prints as written, so it is
311
+ // a warning (spec:AST-047 FR9). The package's own topics are linkable.
312
+ const ownDocs = resolved.integration.docs
313
+ ? await discoverIntegrationDocs(resolved.integration)
314
+ : null;
315
+ for (const {severity, message} of await packageComponentLinkProblems(
316
+ resolved.integration,
317
+ ownDocs,
318
+ )) {
319
+ issues.push({code: 'invalid_doc_graph', severity, message});
320
+ }
321
+
322
+ const coreDir = findProjectCoreDir(cwd);
246
323
  if (!coreDir) {
247
324
  issues.push({
248
325
  code: 'core_not_found',
@@ -252,7 +329,7 @@ export async function integrationComponentConflicts(pkg, options = {}) {
252
329
  });
253
330
  return {
254
331
  type: 'integration.component-conflicts',
255
- data: {validated, name, version, conflicts: [], issues},
332
+ data: {validated, name, version, conflicts: [], issues, propDrift},
256
333
  };
257
334
  }
258
335
 
@@ -296,7 +373,7 @@ export async function integrationComponentConflicts(pkg, options = {}) {
296
373
 
297
374
  return {
298
375
  type: 'integration.component-conflicts',
299
- data: {validated, name, version, conflicts, issues},
376
+ data: {validated, name, version, conflicts, issues, propDrift},
300
377
  };
301
378
  }
302
379
 
@@ -314,15 +391,64 @@ export async function integrationDocConflicts(pkg, options = {}) {
314
391
  const version = resolved.found ? (resolved.version ?? null) : null;
315
392
  const issues = [...resolved.issues];
316
393
 
394
+ /** @type {import('./authoring-checks.type.mjs').CopiedPassage[]} */
395
+ const copiedPassages = [];
396
+ /** @type {import('./authoring-checks.type.mjs').DocFluff[]} */
397
+ const fluff = [];
398
+ /** @type {import('./authoring-checks.type.mjs').StrayPointer[]} */
399
+ const strayPointers = [];
400
+ // Like the other findings' `doc`, a fluff or stray-pointer `file` is
401
+ // relative to the package root.
402
+ const packageDir = /** @type {any} */ (resolved.integration)?.__packageDir;
403
+ const fromPackage = (/** @type {string} */ file) =>
404
+ typeof packageDir === 'string'
405
+ ? path.relative(packageDir, file).split(path.sep).join('/')
406
+ : file;
317
407
  if (!resolved.integration?.docs || name == null) {
408
+ // A package that ships components and no topics still has component docs
409
+ // a written pointer can sit in.
410
+ if (name != null && resolved.integration?.components) {
411
+ strayPointers.push(
412
+ ...(
413
+ await integrationStrayPointers(
414
+ {records: [], guides: []},
415
+ resolved.integration,
416
+ )
417
+ ).map(each => ({...each, file: fromPackage(each.file)})),
418
+ );
419
+ for (const {message} of strayPointers) {
420
+ issues.push({code: 'stray_doc_pointer', severity: 'warning', message});
421
+ }
422
+ }
318
423
  return {
319
424
  type: 'integration.doc-conflicts',
320
- data: {validated, name, version, findings: [], issues},
425
+ data: {
426
+ validated,
427
+ name,
428
+ version,
429
+ findings: [],
430
+ copiedPassages,
431
+ fluff,
432
+ strayPointers,
433
+ issues,
434
+ },
321
435
  };
322
436
  }
323
437
 
438
+ // The docs tree names a package's docs by its provider ID, which a
439
+ // package.json without a name does not give: its docs are checked under a
440
+ // stand-in ID, which no message names.
441
+ const unnamed = /** @type {{__unnamed?: boolean}} */ (resolved.integration)
442
+ .__unnamed;
443
+ const docsIntegration = unnamed
444
+ ? {
445
+ ...resolved.integration,
446
+ name: UNNAMED_PROVIDER,
447
+ providerId: UNNAMED_PROVIDER,
448
+ }
449
+ : resolved.integration;
324
450
  const [discovered, builtinTopics] = await Promise.all([
325
- discoverIntegrationDocs(resolved.integration),
451
+ discoverIntegrationDocs(docsIntegration),
326
452
  Promise.resolve(discoverBuiltinTopics()),
327
453
  ]);
328
454
  const {records, errors} = discovered;
@@ -392,25 +518,77 @@ export async function integrationDocConflicts(pkg, options = {}) {
392
518
  // its docs (spec:AST-046, spec:AST-047).
393
519
  if (errors.length === 0) {
394
520
  for (const {severity, message} of await packageDocsProblems(
395
- /** @type {{name: string}} */ (resolved.integration),
521
+ /** @type {{name: string}} */ (docsIntegration),
396
522
  discovered,
397
523
  )) {
398
- issues.push({code: 'invalid_doc_graph', severity, message});
524
+ issues.push({
525
+ code: 'invalid_doc_graph',
526
+ severity,
527
+ message: unnamedShown(message),
528
+ });
399
529
  }
400
530
 
401
531
  // A reference block includes content rather than linking to it, so one
402
532
  // that cannot include what it names loses that content for every reader:
403
533
  // an error, where a link that names no doc still prints as written.
404
534
  for (const message of await packageReferenceProblems(
405
- /** @type {{name: string}} */ (resolved.integration),
535
+ /** @type {{name: string}} */ (docsIntegration),
406
536
  discovered,
407
537
  )) {
408
- issues.push({code: 'invalid_doc_reference', severity: 'error', message});
538
+ issues.push({
539
+ code: 'invalid_doc_reference',
540
+ severity: 'error',
541
+ message: unnamedShown(message),
542
+ });
543
+ }
544
+
545
+ // One fact has one owner: a passage two topics repeat goes stale in one
546
+ // of them. Each is listed and is a warning (architecture:cli-surface
547
+ // DEC-8), so `integration check --strict` fails until it is fixed;
548
+ // `doctor integration docs` keeps its exit code, as it fails on errors.
549
+ copiedPassages.push(
550
+ ...(await integrationCopiedPassages(discovered)).map(passage => ({
551
+ ...passage,
552
+ message: unnamedShown(passage.message),
553
+ })),
554
+ );
555
+ for (const {message} of copiedPassages) {
556
+ issues.push({code: 'copied_passage', severity: 'warning', message});
557
+ }
558
+ // Docs should be dense: padding phrases and mostly-glue topics, listed
559
+ // and warned about the same way (DEC-8).
560
+ fluff.push(
561
+ ...(await integrationFluff(discovered)).map(each => ({
562
+ ...each,
563
+ file: fromPackage(each.file),
564
+ message: unnamedShown(each.message),
565
+ })),
566
+ );
567
+ for (const {message} of fluff) {
568
+ issues.push({code: 'doc_fluff', severity: 'warning', message});
569
+ }
570
+ // A pointer to a doc is a link, so doctor checks it (DEC-8).
571
+ strayPointers.push(
572
+ ...(await integrationStrayPointers(discovered, resolved.integration)).map(
573
+ each => ({...each, file: fromPackage(each.file)}),
574
+ ),
575
+ );
576
+ for (const {message} of strayPointers) {
577
+ issues.push({code: 'stray_doc_pointer', severity: 'warning', message});
409
578
  }
410
579
  }
411
580
 
412
581
  return {
413
582
  type: 'integration.doc-conflicts',
414
- data: {validated, name, version, findings, issues},
583
+ data: {
584
+ validated,
585
+ name,
586
+ version,
587
+ findings,
588
+ copiedPassages,
589
+ fluff,
590
+ strayPointers,
591
+ issues,
592
+ },
415
593
  };
416
594
  }