@shrkcrft/inspector 0.1.0-alpha.30 → 0.1.0-alpha.32

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 (771) hide show
  1. package/dist/acceptance-replay.js +1 -1
  2. package/dist/agent-contract-templates.js +6 -6
  3. package/dist/agent-contract.d.ts.map +1 -1
  4. package/dist/agent-contract.js +13 -8
  5. package/dist/agent-orchestration.js +2 -2
  6. package/dist/agent-task-prep.d.ts +16 -0
  7. package/dist/agent-task-prep.d.ts.map +1 -1
  8. package/dist/agent-task-prep.js +60 -5
  9. package/dist/ai-readiness.d.ts.map +1 -1
  10. package/dist/ai-readiness.js +21 -3
  11. package/dist/architecture-map.d.ts +16 -0
  12. package/dist/architecture-map.d.ts.map +1 -1
  13. package/dist/architecture-map.js +42 -26
  14. package/dist/area-explore.d.ts +2 -2
  15. package/dist/area-explore.d.ts.map +1 -1
  16. package/dist/area-explore.js +36 -16
  17. package/dist/area-map.d.ts +56 -11
  18. package/dist/area-map.d.ts.map +1 -1
  19. package/dist/area-map.js +106 -25
  20. package/dist/asset-doctor-proposed-exit.d.ts +21 -0
  21. package/dist/asset-doctor-proposed-exit.d.ts.map +1 -0
  22. package/dist/asset-doctor-proposed-exit.js +22 -0
  23. package/dist/asset-provenance.js +1 -1
  24. package/dist/boundaries-changed-only.d.ts +24 -1
  25. package/dist/boundaries-changed-only.d.ts.map +1 -1
  26. package/dist/boundaries-changed-only.js +12 -2
  27. package/dist/boundary-check-options.model.d.ts +40 -0
  28. package/dist/boundary-check-options.model.d.ts.map +1 -0
  29. package/dist/boundary-check-options.model.js +1 -0
  30. package/dist/boundary-check-result.model.d.ts +89 -0
  31. package/dist/boundary-check-result.model.d.ts.map +1 -0
  32. package/dist/boundary-check-result.model.js +1 -0
  33. package/dist/boundary-configuration-status.d.ts +38 -0
  34. package/dist/boundary-configuration-status.d.ts.map +1 -0
  35. package/dist/boundary-configuration-status.js +118 -0
  36. package/dist/boundary-configuration-status.model.d.ts +37 -0
  37. package/dist/boundary-configuration-status.model.d.ts.map +1 -0
  38. package/dist/boundary-configuration-status.model.js +1 -0
  39. package/dist/boundary-load-issue.model.d.ts +30 -0
  40. package/dist/boundary-load-issue.model.d.ts.map +1 -0
  41. package/dist/boundary-load-issue.model.js +1 -0
  42. package/dist/boundary-rule-check.model.d.ts +44 -0
  43. package/dist/boundary-rule-check.model.d.ts.map +1 -0
  44. package/dist/boundary-rule-check.model.js +1 -0
  45. package/dist/boundary-rule-invalidation.model.d.ts +31 -0
  46. package/dist/boundary-rule-invalidation.model.d.ts.map +1 -0
  47. package/dist/boundary-rule-invalidation.model.js +1 -0
  48. package/dist/boundary-rule-set-diff.model.d.ts +75 -0
  49. package/dist/boundary-rule-set-diff.model.d.ts.map +1 -0
  50. package/dist/boundary-rule-set-diff.model.js +1 -0
  51. package/dist/boundary-rule-sources.d.ts +28 -0
  52. package/dist/boundary-rule-sources.d.ts.map +1 -0
  53. package/dist/boundary-rule-sources.js +110 -0
  54. package/dist/boundary-stale-exception-finding.model.d.ts +12 -0
  55. package/dist/boundary-stale-exception-finding.model.d.ts.map +1 -0
  56. package/dist/boundary-stale-exception-finding.model.js +1 -0
  57. package/dist/boundary-unit-liveness.d.ts +35 -0
  58. package/dist/boundary-unit-liveness.d.ts.map +1 -0
  59. package/dist/boundary-unit-liveness.js +71 -0
  60. package/dist/change-intent.d.ts +3 -0
  61. package/dist/change-intent.d.ts.map +1 -1
  62. package/dist/change-intent.js +61 -27
  63. package/dist/changes-summary.d.ts.map +1 -1
  64. package/dist/changes-summary.js +19 -9
  65. package/dist/ci-integrity-report.js +1 -1
  66. package/dist/ci-predict.d.ts.map +1 -1
  67. package/dist/ci-predict.js +38 -5
  68. package/dist/code-intelligence-doctor.d.ts +6 -0
  69. package/dist/code-intelligence-doctor.d.ts.map +1 -1
  70. package/dist/code-intelligence-doctor.js +22 -7
  71. package/dist/codemod-assist.d.ts.map +1 -1
  72. package/dist/codemod-assist.js +3 -1
  73. package/dist/command-recommender.d.ts +45 -2
  74. package/dist/command-recommender.d.ts.map +1 -1
  75. package/dist/command-recommender.js +41 -263
  76. package/dist/command-resolution-status.d.ts +44 -0
  77. package/dist/command-resolution-status.d.ts.map +1 -0
  78. package/dist/command-resolution-status.js +44 -0
  79. package/dist/command-safety-level.d.ts +15 -0
  80. package/dist/command-safety-level.d.ts.map +1 -0
  81. package/dist/command-safety-level.js +43 -0
  82. package/dist/command-taxonomy.js +1 -1
  83. package/dist/comment-syntax.d.ts +15 -0
  84. package/dist/comment-syntax.d.ts.map +1 -0
  85. package/dist/comment-syntax.js +15 -0
  86. package/dist/compliance-evidence.js +1 -1
  87. package/dist/compliance-profiles.js +1 -1
  88. package/dist/construct-registry.d.ts +40 -0
  89. package/dist/construct-registry.d.ts.map +1 -1
  90. package/dist/construct-registry.js +186 -82
  91. package/dist/context-tuning.d.ts +4 -0
  92. package/dist/context-tuning.d.ts.map +1 -1
  93. package/dist/context-tuning.js +10 -7
  94. package/dist/contract-template-registry.d.ts +10 -0
  95. package/dist/contract-template-registry.d.ts.map +1 -1
  96. package/dist/contract-template-registry.js +59 -33
  97. package/dist/contribution-kind.d.ts +52 -0
  98. package/dist/contribution-kind.d.ts.map +1 -0
  99. package/dist/contribution-kind.js +52 -0
  100. package/dist/contribution-load-failures.d.ts +122 -0
  101. package/dist/contribution-load-failures.d.ts.map +1 -0
  102. package/dist/contribution-load-failures.js +592 -0
  103. package/dist/contributions-report.d.ts +28 -0
  104. package/dist/contributions-report.d.ts.map +1 -0
  105. package/dist/contributions-report.js +242 -0
  106. package/dist/convention-applicability.d.ts +46 -0
  107. package/dist/convention-applicability.d.ts.map +1 -0
  108. package/dist/convention-applicability.js +247 -0
  109. package/dist/convention-filter-level.d.ts +13 -0
  110. package/dist/convention-filter-level.d.ts.map +1 -0
  111. package/dist/convention-filter-level.js +13 -0
  112. package/dist/convention-registry.d.ts +51 -4
  113. package/dist/convention-registry.d.ts.map +1 -1
  114. package/dist/convention-registry.js +135 -60
  115. package/dist/coverage-report.d.ts.map +1 -1
  116. package/dist/coverage-report.js +6 -6
  117. package/dist/custom-checks.d.ts +60 -1
  118. package/dist/custom-checks.d.ts.map +1 -1
  119. package/dist/custom-checks.js +161 -6
  120. package/dist/dashboard/dashboard-data.d.ts +6 -0
  121. package/dist/dashboard/dashboard-data.d.ts.map +1 -1
  122. package/dist/dashboard/dashboard-data.js +99 -8
  123. package/dist/dashboard/dashboard-knowledge.d.ts.map +1 -1
  124. package/dist/dashboard/dashboard-knowledge.js +14 -2
  125. package/dist/decision-records.d.ts +24 -0
  126. package/dist/decision-records.d.ts.map +1 -1
  127. package/dist/decision-records.js +231 -84
  128. package/dist/declared-cross-references.d.ts +61 -0
  129. package/dist/declared-cross-references.d.ts.map +1 -0
  130. package/dist/declared-cross-references.js +550 -0
  131. package/dist/declared-gate-plane-rules.d.ts +24 -0
  132. package/dist/declared-gate-plane-rules.d.ts.map +1 -0
  133. package/dist/declared-gate-plane-rules.js +39 -0
  134. package/dist/declared-reference-coverage.d.ts +27 -0
  135. package/dist/declared-reference-coverage.d.ts.map +1 -0
  136. package/dist/declared-reference-coverage.js +55 -0
  137. package/dist/declared-xref-status.d.ts +19 -0
  138. package/dist/declared-xref-status.d.ts.map +1 -0
  139. package/dist/declared-xref-status.js +19 -0
  140. package/dist/delegate-pack-recipes.d.ts +13 -2
  141. package/dist/delegate-pack-recipes.d.ts.map +1 -1
  142. package/dist/delegate-pack-recipes.js +45 -14
  143. package/dist/demo-package.js +2 -2
  144. package/dist/demo-script.js +2 -2
  145. package/dist/demo-workflow.js +3 -3
  146. package/dist/dev-cycle.js +1 -1
  147. package/dist/dev-session.js +1 -1
  148. package/dist/doc-references.d.ts +23 -2
  149. package/dist/doc-references.d.ts.map +1 -1
  150. package/dist/doc-references.js +96 -17
  151. package/dist/doctor-result.d.ts +8 -0
  152. package/dist/doctor-result.d.ts.map +1 -1
  153. package/dist/doctor-verdict-kind.d.ts +19 -0
  154. package/dist/doctor-verdict-kind.d.ts.map +1 -0
  155. package/dist/doctor-verdict-kind.js +19 -0
  156. package/dist/doctor-verdict.d.ts +18 -0
  157. package/dist/doctor-verdict.d.ts.map +1 -0
  158. package/dist/doctor-verdict.js +28 -0
  159. package/dist/drift.d.ts +17 -0
  160. package/dist/drift.d.ts.map +1 -1
  161. package/dist/drift.js +40 -10
  162. package/dist/entrypoint-matrix.d.ts.map +1 -1
  163. package/dist/entrypoint-matrix.js +4 -1
  164. package/dist/feedback-ingestion.d.ts +28 -2
  165. package/dist/feedback-ingestion.d.ts.map +1 -1
  166. package/dist/feedback-ingestion.js +75 -20
  167. package/dist/file-languages.d.ts +9 -0
  168. package/dist/file-languages.d.ts.map +1 -0
  169. package/dist/file-languages.js +91 -0
  170. package/dist/fix-preview.d.ts.map +1 -1
  171. package/dist/fix-preview.js +87 -22
  172. package/dist/framework-extractor-outcomes.d.ts +27 -0
  173. package/dist/framework-extractor-outcomes.d.ts.map +1 -0
  174. package/dist/framework-extractor-outcomes.js +83 -0
  175. package/dist/fuzzy-impact.d.ts.map +1 -1
  176. package/dist/fuzzy-impact.js +3 -2
  177. package/dist/git-helpers.d.ts +29 -4
  178. package/dist/git-helpers.d.ts.map +1 -1
  179. package/dist/git-helpers.js +69 -10
  180. package/dist/healing-plan.d.ts.map +1 -1
  181. package/dist/healing-plan.js +3 -4
  182. package/dist/helper-catalog.d.ts +25 -0
  183. package/dist/helper-catalog.d.ts.map +1 -0
  184. package/dist/helper-catalog.js +91 -0
  185. package/dist/helper-registry.d.ts.map +1 -1
  186. package/dist/helper-registry.js +17 -1
  187. package/dist/helper-view.d.ts +33 -0
  188. package/dist/helper-view.d.ts.map +1 -0
  189. package/dist/helper-view.js +1 -0
  190. package/dist/i-asset-doctor-flags.d.ts +16 -0
  191. package/dist/i-asset-doctor-flags.d.ts.map +1 -0
  192. package/dist/i-asset-doctor-flags.js +1 -0
  193. package/dist/i-command-resolution.d.ts +22 -0
  194. package/dist/i-command-resolution.d.ts.map +1 -0
  195. package/dist/i-command-resolution.js +1 -0
  196. package/dist/i-command-resolve-options.d.ts +24 -0
  197. package/dist/i-command-resolve-options.d.ts.map +1 -0
  198. package/dist/i-command-resolve-options.js +1 -0
  199. package/dist/i-command-safety.d.ts +13 -0
  200. package/dist/i-command-safety.d.ts.map +1 -0
  201. package/dist/i-command-safety.js +1 -0
  202. package/dist/i-contribution-accepted-entry.d.ts +18 -0
  203. package/dist/i-contribution-accepted-entry.d.ts.map +1 -0
  204. package/dist/i-contribution-accepted-entry.js +1 -0
  205. package/dist/i-contribution-entry-rejection.d.ts +21 -0
  206. package/dist/i-contribution-entry-rejection.d.ts.map +1 -0
  207. package/dist/i-contribution-entry-rejection.js +1 -0
  208. package/dist/i-contribution-file-issue.d.ts +18 -0
  209. package/dist/i-contribution-file-issue.d.ts.map +1 -0
  210. package/dist/i-contribution-file-issue.js +1 -0
  211. package/dist/i-contribution-file-report.d.ts +40 -0
  212. package/dist/i-contribution-file-report.d.ts.map +1 -0
  213. package/dist/i-contribution-file-report.js +1 -0
  214. package/dist/i-contribution-file-validation.d.ts +32 -0
  215. package/dist/i-contribution-file-validation.d.ts.map +1 -0
  216. package/dist/i-contribution-file-validation.js +1 -0
  217. package/dist/i-contributions-report.d.ts +31 -0
  218. package/dist/i-contributions-report.d.ts.map +1 -0
  219. package/dist/i-contributions-report.js +1 -0
  220. package/dist/i-convention-applicability-reason.d.ts +29 -0
  221. package/dist/i-convention-applicability-reason.d.ts.map +1 -0
  222. package/dist/i-convention-applicability-reason.js +1 -0
  223. package/dist/i-convention-applicability.d.ts +9 -0
  224. package/dist/i-convention-applicability.d.ts.map +1 -0
  225. package/dist/i-convention-applicability.js +1 -0
  226. package/dist/i-convention-scope.d.ts +19 -0
  227. package/dist/i-convention-scope.d.ts.map +1 -0
  228. package/dist/i-convention-scope.js +1 -0
  229. package/dist/i-declared-xref-field.d.ts +25 -0
  230. package/dist/i-declared-xref-field.d.ts.map +1 -0
  231. package/dist/i-declared-xref-field.js +1 -0
  232. package/dist/i-declared-xref-issue.d.ts +25 -0
  233. package/dist/i-declared-xref-issue.d.ts.map +1 -0
  234. package/dist/i-declared-xref-issue.js +1 -0
  235. package/dist/i-declared-xref-report.d.ts +48 -0
  236. package/dist/i-declared-xref-report.d.ts.map +1 -0
  237. package/dist/i-declared-xref-report.js +1 -0
  238. package/dist/i-declared-xref-row.d.ts +29 -0
  239. package/dist/i-declared-xref-row.d.ts.map +1 -0
  240. package/dist/i-declared-xref-row.js +1 -0
  241. package/dist/i-doctor-verdict.d.ts +10 -0
  242. package/dist/i-doctor-verdict.d.ts.map +1 -0
  243. package/dist/i-doctor-verdict.js +1 -0
  244. package/dist/i-file-language.d.ts +11 -0
  245. package/dist/i-file-language.d.ts.map +1 -0
  246. package/dist/i-file-language.js +1 -0
  247. package/dist/i-kind-outcomes.d.ts +13 -0
  248. package/dist/i-kind-outcomes.d.ts.map +1 -0
  249. package/dist/i-kind-outcomes.js +1 -0
  250. package/dist/i-not-applicable-convention.d.ts +17 -0
  251. package/dist/i-not-applicable-convention.d.ts.map +1 -0
  252. package/dist/i-not-applicable-convention.js +1 -0
  253. package/dist/i-pack-doctor-verdict.d.ts +15 -0
  254. package/dist/i-pack-doctor-verdict.d.ts.map +1 -0
  255. package/dist/i-pack-doctor-verdict.js +1 -0
  256. package/dist/i-probed-id-field.d.ts +17 -0
  257. package/dist/i-probed-id-field.d.ts.map +1 -0
  258. package/dist/i-probed-id-field.js +1 -0
  259. package/dist/i-reference-kind-declaration.d.ts +38 -0
  260. package/dist/i-reference-kind-declaration.d.ts.map +1 -0
  261. package/dist/i-reference-kind-declaration.js +1 -0
  262. package/dist/i-reference-pack-origin.d.ts +13 -0
  263. package/dist/i-reference-pack-origin.d.ts.map +1 -0
  264. package/dist/i-reference-pack-origin.js +1 -0
  265. package/dist/i-reference-warm-options.d.ts +21 -0
  266. package/dist/i-reference-warm-options.d.ts.map +1 -0
  267. package/dist/i-reference-warm-options.js +1 -0
  268. package/dist/i-registry-outcomes.d.ts +16 -0
  269. package/dist/i-registry-outcomes.d.ts.map +1 -0
  270. package/dist/i-registry-outcomes.js +1 -0
  271. package/dist/i-scaffold-pattern-doctor-report.d.ts +35 -0
  272. package/dist/i-scaffold-pattern-doctor-report.d.ts.map +1 -0
  273. package/dist/i-scaffold-pattern-doctor-report.js +1 -0
  274. package/dist/i-search-tuning-key-probe.d.ts +30 -0
  275. package/dist/i-search-tuning-key-probe.d.ts.map +1 -0
  276. package/dist/i-search-tuning-key-probe.js +1 -0
  277. package/dist/i-search-tuning-lint-issue.d.ts +61 -0
  278. package/dist/i-search-tuning-lint-issue.d.ts.map +1 -0
  279. package/dist/i-search-tuning-lint-issue.js +1 -0
  280. package/dist/i-search-tuning-lint-report.d.ts +38 -0
  281. package/dist/i-search-tuning-lint-report.d.ts.map +1 -0
  282. package/dist/i-search-tuning-lint-report.js +1 -0
  283. package/dist/i-stale-path-hint-input.d.ts +18 -0
  284. package/dist/i-stale-path-hint-input.d.ts.map +1 -0
  285. package/dist/i-stale-path-hint-input.js +1 -0
  286. package/dist/i-unresolvable-reference-scan.d.ts +14 -0
  287. package/dist/i-unresolvable-reference-scan.d.ts.map +1 -0
  288. package/dist/i-unresolvable-reference-scan.js +1 -0
  289. package/dist/i-unresolvable-reference.d.ts +29 -0
  290. package/dist/i-unresolvable-reference.d.ts.map +1 -0
  291. package/dist/i-unresolvable-reference.js +1 -0
  292. package/dist/i-unverifiable-remedy-group.d.ts +10 -0
  293. package/dist/i-unverifiable-remedy-group.d.ts.map +1 -0
  294. package/dist/i-unverifiable-remedy-group.js +1 -0
  295. package/dist/i-workspace-profile-payload.d.ts +12 -0
  296. package/dist/i-workspace-profile-payload.d.ts.map +1 -0
  297. package/dist/i-workspace-profile-payload.js +1 -0
  298. package/dist/impact-analysis.d.ts +15 -0
  299. package/dist/impact-analysis.d.ts.map +1 -1
  300. package/dist/impact-analysis.js +58 -13
  301. package/dist/impact-render.d.ts.map +1 -1
  302. package/dist/impact-render.js +22 -0
  303. package/dist/import-hygiene.d.ts +35 -1
  304. package/dist/import-hygiene.d.ts.map +1 -1
  305. package/dist/import-hygiene.js +107 -13
  306. package/dist/index.d.ts +158 -0
  307. package/dist/index.d.ts.map +1 -1
  308. package/dist/index.js +197 -0
  309. package/dist/inspection-discovery.d.ts +45 -0
  310. package/dist/inspection-discovery.d.ts.map +1 -0
  311. package/dist/inspection-discovery.js +70 -0
  312. package/dist/knowledge-advisory-code.d.ts +17 -0
  313. package/dist/knowledge-advisory-code.d.ts.map +1 -0
  314. package/dist/knowledge-advisory-code.js +17 -0
  315. package/dist/knowledge-aged-entry.d.ts +10 -0
  316. package/dist/knowledge-aged-entry.d.ts.map +1 -0
  317. package/dist/knowledge-aged-entry.js +1 -0
  318. package/dist/knowledge-authoring.d.ts +25 -2
  319. package/dist/knowledge-authoring.d.ts.map +1 -1
  320. package/dist/knowledge-authoring.js +53 -13
  321. package/dist/knowledge-contribution-slots.d.ts +18 -0
  322. package/dist/knowledge-contribution-slots.d.ts.map +1 -0
  323. package/dist/knowledge-contribution-slots.js +25 -0
  324. package/dist/knowledge-entry-rejections.d.ts +17 -0
  325. package/dist/knowledge-entry-rejections.d.ts.map +1 -0
  326. package/dist/knowledge-entry-rejections.js +79 -0
  327. package/dist/knowledge-entry-verdict-record.d.ts +34 -0
  328. package/dist/knowledge-entry-verdict-record.d.ts.map +1 -0
  329. package/dist/knowledge-entry-verdict-record.js +1 -0
  330. package/dist/knowledge-entry-verdict.d.ts +17 -0
  331. package/dist/knowledge-entry-verdict.d.ts.map +1 -0
  332. package/dist/knowledge-entry-verdict.js +17 -0
  333. package/dist/knowledge-graph.d.ts +6 -0
  334. package/dist/knowledge-graph.d.ts.map +1 -1
  335. package/dist/knowledge-graph.js +18 -7
  336. package/dist/knowledge-kind-bucket.d.ts +19 -0
  337. package/dist/knowledge-kind-bucket.d.ts.map +1 -0
  338. package/dist/knowledge-kind-bucket.js +1 -0
  339. package/dist/knowledge-load-failure.d.ts +23 -0
  340. package/dist/knowledge-load-failure.d.ts.map +1 -0
  341. package/dist/knowledge-load-failure.js +1 -0
  342. package/dist/knowledge-min-referenced-valve.d.ts +12 -0
  343. package/dist/knowledge-min-referenced-valve.d.ts.map +1 -0
  344. package/dist/knowledge-min-referenced-valve.js +12 -0
  345. package/dist/knowledge-reference-kind-bucket.d.ts +11 -0
  346. package/dist/knowledge-reference-kind-bucket.d.ts.map +1 -0
  347. package/dist/knowledge-reference-kind-bucket.js +1 -0
  348. package/dist/knowledge-rejected-entry.d.ts +28 -0
  349. package/dist/knowledge-rejected-entry.d.ts.map +1 -0
  350. package/dist/knowledge-rejected-entry.js +1 -0
  351. package/dist/knowledge-rename-command.d.ts +20 -0
  352. package/dist/knowledge-rename-command.d.ts.map +1 -0
  353. package/dist/knowledge-rename-command.js +34 -0
  354. package/dist/knowledge-rename-verb.d.ts +11 -0
  355. package/dist/knowledge-rename-verb.d.ts.map +1 -0
  356. package/dist/knowledge-rename-verb.js +11 -0
  357. package/dist/knowledge-rename.d.ts +1 -1
  358. package/dist/knowledge-rename.d.ts.map +1 -1
  359. package/dist/knowledge-rename.js +6 -5
  360. package/dist/knowledge-stale-advisory.d.ts +14 -0
  361. package/dist/knowledge-stale-advisory.d.ts.map +1 -0
  362. package/dist/knowledge-stale-advisory.js +1 -0
  363. package/dist/knowledge-stale-coverage.d.ts +19 -0
  364. package/dist/knowledge-stale-coverage.d.ts.map +1 -0
  365. package/dist/knowledge-stale-coverage.js +1 -0
  366. package/dist/knowledge-stale-gate-flags.d.ts +33 -0
  367. package/dist/knowledge-stale-gate-flags.d.ts.map +1 -0
  368. package/dist/knowledge-stale-gate-flags.js +1 -0
  369. package/dist/knowledge-stale-gate-input.d.ts +46 -0
  370. package/dist/knowledge-stale-gate-input.d.ts.map +1 -0
  371. package/dist/knowledge-stale-gate-input.js +1 -0
  372. package/dist/knowledge-stale-gate-result.d.ts +33 -0
  373. package/dist/knowledge-stale-gate-result.d.ts.map +1 -0
  374. package/dist/knowledge-stale-gate-result.js +1 -0
  375. package/dist/knowledge-stale-gate-rule.d.ts +33 -0
  376. package/dist/knowledge-stale-gate-rule.d.ts.map +1 -0
  377. package/dist/knowledge-stale-gate-rule.js +1 -0
  378. package/dist/knowledge-stale-gate-violation.d.ts +13 -0
  379. package/dist/knowledge-stale-gate-violation.d.ts.map +1 -0
  380. package/dist/knowledge-stale-gate-violation.js +1 -0
  381. package/dist/knowledge-stale-gate.d.ts +85 -0
  382. package/dist/knowledge-stale-gate.d.ts.map +1 -0
  383. package/dist/knowledge-stale-gate.js +501 -0
  384. package/dist/knowledge-stale-quality-gate.d.ts +26 -0
  385. package/dist/knowledge-stale-quality-gate.d.ts.map +1 -0
  386. package/dist/knowledge-stale-quality-gate.js +140 -0
  387. package/dist/knowledge-stale.d.ts +132 -9
  388. package/dist/knowledge-stale.d.ts.map +1 -1
  389. package/dist/knowledge-stale.js +1193 -294
  390. package/dist/knowledge-unverifiable-reason.d.ts +12 -0
  391. package/dist/knowledge-unverifiable-reason.d.ts.map +1 -0
  392. package/dist/knowledge-unverifiable-reason.js +12 -0
  393. package/dist/knowledge-unverifiable-remedy.d.ts +56 -0
  394. package/dist/knowledge-unverifiable-remedy.d.ts.map +1 -0
  395. package/dist/knowledge-unverifiable-remedy.js +0 -0
  396. package/dist/loader-diagnostics.d.ts +14 -2
  397. package/dist/loader-diagnostics.d.ts.map +1 -1
  398. package/dist/match-terms.d.ts +48 -0
  399. package/dist/match-terms.d.ts.map +1 -0
  400. package/dist/match-terms.js +155 -0
  401. package/dist/migration-profile-registry.d.ts +10 -0
  402. package/dist/migration-profile-registry.d.ts.map +1 -1
  403. package/dist/migration-profile-registry.js +57 -34
  404. package/dist/migration-readiness.d.ts.map +1 -1
  405. package/dist/migration-readiness.js +1 -3
  406. package/dist/nearest-id.d.ts +10 -26
  407. package/dist/nearest-id.d.ts.map +1 -1
  408. package/dist/nearest-id.js +9 -59
  409. package/dist/pack-asset-freshness.d.ts +65 -0
  410. package/dist/pack-asset-freshness.d.ts.map +1 -0
  411. package/dist/pack-asset-freshness.js +340 -0
  412. package/dist/pack-author-ux.d.ts +24 -3
  413. package/dist/pack-author-ux.d.ts.map +1 -1
  414. package/dist/pack-author-ux.js +87 -93
  415. package/dist/pack-contributions-inventory.d.ts +79 -39
  416. package/dist/pack-contributions-inventory.d.ts.map +1 -1
  417. package/dist/pack-contributions-inventory.js +445 -286
  418. package/dist/pack-doctor-verdict.d.ts +29 -0
  419. package/dist/pack-doctor-verdict.d.ts.map +1 -0
  420. package/dist/pack-doctor-verdict.js +45 -0
  421. package/dist/pack-doctor.d.ts +74 -1
  422. package/dist/pack-doctor.d.ts.map +1 -1
  423. package/dist/pack-doctor.js +281 -1
  424. package/dist/pack-helper-plan.d.ts +24 -0
  425. package/dist/pack-helper-plan.d.ts.map +1 -0
  426. package/dist/pack-helper-plan.js +77 -0
  427. package/dist/pack-helper-registry.d.ts +14 -0
  428. package/dist/pack-helper-registry.d.ts.map +1 -1
  429. package/dist/pack-helper-registry.js +76 -37
  430. package/dist/pack-manifest-reader.d.ts +8 -0
  431. package/dist/pack-manifest-reader.d.ts.map +1 -0
  432. package/dist/pack-manifest-reader.js +79 -0
  433. package/dist/pack-release-check.d.ts +14 -1
  434. package/dist/pack-release-check.d.ts.map +1 -1
  435. package/dist/pack-release-check.js +23 -1
  436. package/dist/pack-signature-status.d.ts +18 -6
  437. package/dist/pack-signature-status.d.ts.map +1 -1
  438. package/dist/pack-signature-status.js +59 -105
  439. package/dist/pack-test-runner.d.ts +27 -5
  440. package/dist/pack-test-runner.d.ts.map +1 -1
  441. package/dist/pack-test-runner.js +91 -35
  442. package/dist/pack-typecheck.d.ts +8 -0
  443. package/dist/pack-typecheck.d.ts.map +1 -0
  444. package/dist/pack-typecheck.js +76 -0
  445. package/dist/plan-review.d.ts +2 -0
  446. package/dist/plan-review.d.ts.map +1 -1
  447. package/dist/plan-review.js +17 -5
  448. package/dist/plan-simulation.d.ts.map +1 -1
  449. package/dist/plan-simulation.js +16 -5
  450. package/dist/playbook-load-issue.d.ts +16 -0
  451. package/dist/playbook-load-issue.d.ts.map +1 -0
  452. package/dist/playbook-load-issue.js +1 -0
  453. package/dist/playbook-registry.d.ts +32 -1
  454. package/dist/playbook-registry.d.ts.map +1 -1
  455. package/dist/playbook-registry.js +144 -55
  456. package/dist/policy-declaration.d.ts +18 -0
  457. package/dist/policy-declaration.d.ts.map +1 -0
  458. package/dist/policy-declaration.js +1 -0
  459. package/dist/policy-engine.d.ts +8 -0
  460. package/dist/policy-engine.d.ts.map +1 -1
  461. package/dist/policy-engine.js +26 -9
  462. package/dist/policy-overrides.d.ts.map +1 -1
  463. package/dist/policy-overrides.js +4 -4
  464. package/dist/policy-registry.d.ts +27 -0
  465. package/dist/policy-registry.d.ts.map +1 -1
  466. package/dist/policy-registry.js +87 -20
  467. package/dist/probed-id-fields.d.ts +21 -0
  468. package/dist/probed-id-fields.d.ts.map +1 -0
  469. package/dist/probed-id-fields.js +25 -0
  470. package/dist/probed-id-source.d.ts +11 -0
  471. package/dist/probed-id-source.d.ts.map +1 -0
  472. package/dist/probed-id-source.js +11 -0
  473. package/dist/profile-registry.d.ts +25 -2
  474. package/dist/profile-registry.d.ts.map +1 -1
  475. package/dist/profile-registry.js +59 -6
  476. package/dist/propose-knowledge.js +3 -2
  477. package/dist/quality-gate-examination.d.ts +15 -0
  478. package/dist/quality-gate-examination.d.ts.map +1 -0
  479. package/dist/quality-gate-examination.js +15 -0
  480. package/dist/quality-gate-row-status.d.ts +19 -0
  481. package/dist/quality-gate-row-status.d.ts.map +1 -0
  482. package/dist/quality-gate-row-status.js +28 -0
  483. package/dist/quality-gate-status.d.ts +16 -0
  484. package/dist/quality-gate-status.d.ts.map +1 -0
  485. package/dist/quality-gate-status.js +16 -0
  486. package/dist/quality-html.d.ts.map +1 -1
  487. package/dist/quality-html.js +14 -3
  488. package/dist/quality-report-coverage.d.ts +26 -0
  489. package/dist/quality-report-coverage.d.ts.map +1 -0
  490. package/dist/quality-report-coverage.js +48 -0
  491. package/dist/quality-report.d.ts +28 -1
  492. package/dist/quality-report.d.ts.map +1 -1
  493. package/dist/quality-report.js +263 -35
  494. package/dist/query-intent-kind.d.ts +18 -0
  495. package/dist/query-intent-kind.d.ts.map +1 -0
  496. package/dist/query-intent-kind.js +18 -0
  497. package/dist/query-intent-result.d.ts +23 -0
  498. package/dist/query-intent-result.d.ts.map +1 -0
  499. package/dist/query-intent-result.js +1 -0
  500. package/dist/query-intent.d.ts +18 -0
  501. package/dist/query-intent.d.ts.map +1 -0
  502. package/dist/query-intent.js +336 -0
  503. package/dist/query-resolver.d.ts +18 -0
  504. package/dist/query-resolver.d.ts.map +1 -1
  505. package/dist/query-resolver.js +7 -4
  506. package/dist/ranked-recommendations.d.ts +36 -0
  507. package/dist/ranked-recommendations.d.ts.map +1 -0
  508. package/dist/ranked-recommendations.js +1 -0
  509. package/dist/ranker-explainability.d.ts.map +1 -1
  510. package/dist/ranker-explainability.js +38 -10
  511. package/dist/recommend-recipe.d.ts +17 -0
  512. package/dist/recommend-recipe.d.ts.map +1 -0
  513. package/dist/recommend-recipe.js +1 -0
  514. package/dist/recommend-recipes.d.ts +9 -0
  515. package/dist/recommend-recipes.d.ts.map +1 -0
  516. package/dist/recommend-recipes.js +106 -0
  517. package/dist/recommendation-candidate.d.ts +30 -0
  518. package/dist/recommendation-candidate.d.ts.map +1 -0
  519. package/dist/recommendation-candidate.js +1 -0
  520. package/dist/recommendation-confidence.d.ts +27 -0
  521. package/dist/recommendation-confidence.d.ts.map +1 -0
  522. package/dist/recommendation-confidence.js +1 -0
  523. package/dist/recommendation-ranking-options.d.ts +24 -0
  524. package/dist/recommendation-ranking-options.d.ts.map +1 -0
  525. package/dist/recommendation-ranking-options.js +1 -0
  526. package/dist/recommendation-ranking.d.ts +50 -0
  527. package/dist/recommendation-ranking.d.ts.map +1 -0
  528. package/dist/recommendation-ranking.js +527 -0
  529. package/dist/recommendation-source.d.ts +23 -0
  530. package/dist/recommendation-source.d.ts.map +1 -0
  531. package/dist/recommendation-source.js +23 -0
  532. package/dist/recommendation-suppression.d.ts +14 -0
  533. package/dist/recommendation-suppression.d.ts.map +1 -0
  534. package/dist/recommendation-suppression.js +14 -0
  535. package/dist/reference-asset-kind.d.ts +14 -0
  536. package/dist/reference-asset-kind.d.ts.map +1 -0
  537. package/dist/reference-asset-kind.js +14 -0
  538. package/dist/reference-content-check.d.ts +32 -0
  539. package/dist/reference-content-check.d.ts.map +1 -0
  540. package/dist/reference-content-check.js +143 -0
  541. package/dist/reference-failure.d.ts +31 -0
  542. package/dist/reference-failure.d.ts.map +1 -0
  543. package/dist/reference-failure.js +31 -0
  544. package/dist/reference-id-status.d.ts +15 -0
  545. package/dist/reference-id-status.d.ts.map +1 -0
  546. package/dist/reference-id-status.js +15 -0
  547. package/dist/reference-kind-declarations.d.ts +42 -0
  548. package/dist/reference-kind-declarations.d.ts.map +1 -0
  549. package/dist/reference-kind-declarations.js +142 -0
  550. package/dist/reference-lookup.d.ts +6 -0
  551. package/dist/reference-lookup.d.ts.map +1 -1
  552. package/dist/reference-lookup.js +13 -5
  553. package/dist/reference-pack-origin.d.ts +18 -0
  554. package/dist/reference-pack-origin.d.ts.map +1 -0
  555. package/dist/reference-pack-origin.js +38 -0
  556. package/dist/reference-registry.d.ts +109 -11
  557. package/dist/reference-registry.d.ts.map +1 -1
  558. package/dist/reference-registry.js +186 -30
  559. package/dist/reference-subject.d.ts +20 -0
  560. package/dist/reference-subject.d.ts.map +1 -0
  561. package/dist/reference-subject.js +1 -0
  562. package/dist/registration-hint-discovery-status.d.ts +25 -0
  563. package/dist/registration-hint-discovery-status.d.ts.map +1 -0
  564. package/dist/registration-hint-discovery-status.js +25 -0
  565. package/dist/registration-hint-registry.d.ts +80 -0
  566. package/dist/registration-hint-registry.d.ts.map +1 -1
  567. package/dist/registration-hint-registry.js +356 -138
  568. package/dist/registry-lifecycle.d.ts +200 -19
  569. package/dist/registry-lifecycle.d.ts.map +1 -1
  570. package/dist/registry-lifecycle.js +526 -136
  571. package/dist/release-readiness.d.ts.map +1 -1
  572. package/dist/release-readiness.js +10 -7
  573. package/dist/release-smoke.d.ts.map +1 -1
  574. package/dist/release-smoke.js +11 -7
  575. package/dist/report-site.d.ts.map +1 -1
  576. package/dist/report-site.js +25 -7
  577. package/dist/repository-intelligence.d.ts.map +1 -1
  578. package/dist/repository-intelligence.js +3 -2
  579. package/dist/repository-knowledge-model.d.ts.map +1 -1
  580. package/dist/repository-knowledge-model.js +18 -5
  581. package/dist/repository-stats.d.ts.map +1 -1
  582. package/dist/repository-stats.js +3 -77
  583. package/dist/resolve-project-config.d.ts +64 -0
  584. package/dist/resolve-project-config.d.ts.map +1 -1
  585. package/dist/resolve-project-config.js +250 -33
  586. package/dist/reuse/compute-reuse-coverage.d.ts +29 -0
  587. package/dist/reuse/compute-reuse-coverage.d.ts.map +1 -0
  588. package/dist/reuse/compute-reuse-coverage.js +198 -0
  589. package/dist/reuse/rank-reuse-candidates.d.ts +38 -0
  590. package/dist/reuse/rank-reuse-candidates.d.ts.map +1 -0
  591. package/dist/reuse/rank-reuse-candidates.js +212 -0
  592. package/dist/reuse/rank-reuse-options.d.ts +20 -0
  593. package/dist/reuse/rank-reuse-options.d.ts.map +1 -0
  594. package/dist/reuse/rank-reuse-options.js +1 -0
  595. package/dist/reuse/rank-reuse-suggestions.d.ts +15 -0
  596. package/dist/reuse/rank-reuse-suggestions.d.ts.map +1 -0
  597. package/dist/reuse/rank-reuse-suggestions.js +31 -0
  598. package/dist/reuse/resolve-curated-reuse.d.ts +43 -0
  599. package/dist/reuse/resolve-curated-reuse.d.ts.map +1 -0
  600. package/dist/reuse/resolve-curated-reuse.js +115 -0
  601. package/dist/reuse/reuse-candidate.d.ts +29 -0
  602. package/dist/reuse/reuse-candidate.d.ts.map +1 -0
  603. package/dist/reuse/reuse-candidate.js +1 -0
  604. package/dist/reuse/reuse-coverage-report.d.ts +74 -0
  605. package/dist/reuse/reuse-coverage-report.d.ts.map +1 -0
  606. package/dist/reuse/reuse-coverage-report.js +1 -0
  607. package/dist/reuse/reuse-curated-coverage.d.ts +36 -0
  608. package/dist/reuse/reuse-curated-coverage.d.ts.map +1 -0
  609. package/dist/reuse/reuse-curated-coverage.js +1 -0
  610. package/dist/reuse/reuse-curated-resolution.d.ts +36 -0
  611. package/dist/reuse/reuse-curated-resolution.d.ts.map +1 -0
  612. package/dist/reuse/reuse-curated-resolution.js +1 -0
  613. package/dist/reuse/reuse-curated-status.d.ts +21 -0
  614. package/dist/reuse/reuse-curated-status.d.ts.map +1 -0
  615. package/dist/reuse/reuse-curated-status.js +21 -0
  616. package/dist/reuse/reuse-match-detail.d.ts +15 -0
  617. package/dist/reuse/reuse-match-detail.d.ts.map +1 -0
  618. package/dist/reuse/reuse-match-detail.js +1 -0
  619. package/dist/reuse/reuse-ranking.d.ts +37 -0
  620. package/dist/reuse/reuse-ranking.d.ts.map +1 -0
  621. package/dist/reuse/reuse-ranking.js +1 -0
  622. package/dist/reuse/reuse-suggestion.d.ts +19 -0
  623. package/dist/reuse/reuse-suggestion.d.ts.map +1 -0
  624. package/dist/reuse/reuse-suggestion.js +1 -0
  625. package/dist/reuse/reuse-symbol-lookup.d.ts +28 -0
  626. package/dist/reuse/reuse-symbol-lookup.d.ts.map +1 -0
  627. package/dist/reuse/reuse-symbol-lookup.js +1 -0
  628. package/dist/reuse/reuse-tokenize.d.ts +11 -0
  629. package/dist/reuse/reuse-tokenize.d.ts.map +1 -0
  630. package/dist/reuse/reuse-tokenize.js +26 -0
  631. package/dist/reuse/score-reuse-name.d.ts +16 -0
  632. package/dist/reuse/score-reuse-name.d.ts.map +1 -0
  633. package/dist/reuse/score-reuse-name.js +35 -0
  634. package/dist/reuse/score-reuse-primitive.d.ts +33 -0
  635. package/dist/reuse/score-reuse-primitive.d.ts.map +1 -0
  636. package/dist/reuse/score-reuse-primitive.js +92 -0
  637. package/dist/review-packet.d.ts +2 -0
  638. package/dist/review-packet.d.ts.map +1 -1
  639. package/dist/review-packet.js +13 -6
  640. package/dist/role-views.d.ts.map +1 -1
  641. package/dist/role-views.js +16 -16
  642. package/dist/routing-recommends-channels.d.ts +24 -0
  643. package/dist/routing-recommends-channels.d.ts.map +1 -0
  644. package/dist/routing-recommends-channels.js +19 -0
  645. package/dist/run-boundary-check.d.ts +118 -0
  646. package/dist/run-boundary-check.d.ts.map +1 -0
  647. package/dist/run-boundary-check.js +592 -0
  648. package/dist/safety-audit.js +1 -1
  649. package/dist/scaffold-coverage.js +1 -1
  650. package/dist/scaffold-pattern-doctor-report.d.ts +19 -0
  651. package/dist/scaffold-pattern-doctor-report.d.ts.map +1 -0
  652. package/dist/scaffold-pattern-doctor-report.js +54 -0
  653. package/dist/scaffold-patterns.d.ts +75 -1
  654. package/dist/scaffold-patterns.d.ts.map +1 -1
  655. package/dist/scaffold-patterns.js +375 -84
  656. package/dist/schema-inventory.d.ts.map +1 -1
  657. package/dist/schema-inventory.js +4 -3
  658. package/dist/search-document-id.d.ts +52 -0
  659. package/dist/search-document-id.d.ts.map +1 -0
  660. package/dist/search-document-id.js +72 -0
  661. package/dist/search-document-prefix.d.ts +7 -0
  662. package/dist/search-document-prefix.d.ts.map +1 -0
  663. package/dist/search-document-prefix.js +1 -0
  664. package/dist/search-index.d.ts.map +1 -1
  665. package/dist/search-index.js +20 -23
  666. package/dist/search-tuning-explain.d.ts +6 -0
  667. package/dist/search-tuning-explain.d.ts.map +1 -1
  668. package/dist/search-tuning-explain.js +19 -17
  669. package/dist/search-tuning-key-probes.d.ts +16 -0
  670. package/dist/search-tuning-key-probes.d.ts.map +1 -0
  671. package/dist/search-tuning-key-probes.js +65 -0
  672. package/dist/search-tuning-key-resolution.d.ts +25 -0
  673. package/dist/search-tuning-key-resolution.d.ts.map +1 -0
  674. package/dist/search-tuning-key-resolution.js +1 -0
  675. package/dist/search-tuning-key-resolver.d.ts +4 -0
  676. package/dist/search-tuning-key-resolver.d.ts.map +1 -0
  677. package/dist/search-tuning-key-resolver.js +107 -0
  678. package/dist/search-tuning-key-status.d.ts +24 -0
  679. package/dist/search-tuning-key-status.d.ts.map +1 -0
  680. package/dist/search-tuning-key-status.js +24 -0
  681. package/dist/search-tuning-lint.d.ts +9 -0
  682. package/dist/search-tuning-lint.d.ts.map +1 -0
  683. package/dist/search-tuning-lint.js +468 -0
  684. package/dist/search-tuning-registry.d.ts +43 -0
  685. package/dist/search-tuning-registry.d.ts.map +1 -1
  686. package/dist/search-tuning-registry.js +214 -49
  687. package/dist/self-audit.d.ts +12 -0
  688. package/dist/self-audit.d.ts.map +1 -1
  689. package/dist/self-audit.js +36 -10
  690. package/dist/self-config-doctor-v2.d.ts +145 -3
  691. package/dist/self-config-doctor-v2.d.ts.map +1 -1
  692. package/dist/self-config-doctor-v2.js +1369 -182
  693. package/dist/self-config-doctor.d.ts +20 -1
  694. package/dist/self-config-doctor.d.ts.map +1 -1
  695. package/dist/self-config-doctor.js +55 -281
  696. package/dist/settled-unit-states.d.ts +9 -0
  697. package/dist/settled-unit-states.d.ts.map +1 -0
  698. package/dist/settled-unit-states.js +14 -0
  699. package/dist/sharkcraft-inspector.d.ts +34 -0
  700. package/dist/sharkcraft-inspector.d.ts.map +1 -1
  701. package/dist/sharkcraft-inspector.js +314 -27
  702. package/dist/spec/spec-evidence.d.ts.map +1 -1
  703. package/dist/spec/spec-evidence.js +14 -20
  704. package/dist/split-identifier.d.ts +21 -0
  705. package/dist/split-identifier.d.ts.map +1 -0
  706. package/dist/split-identifier.js +27 -0
  707. package/dist/stale-path-hint.d.ts +3 -0
  708. package/dist/stale-path-hint.d.ts.map +1 -0
  709. package/dist/stale-path-hint.js +47 -0
  710. package/dist/start-here.d.ts.map +1 -1
  711. package/dist/start-here.js +1 -2
  712. package/dist/substitute-placeholders.d.ts +8 -0
  713. package/dist/substitute-placeholders.d.ts.map +1 -0
  714. package/dist/substitute-placeholders.js +9 -0
  715. package/dist/symbol-index.d.ts +33 -0
  716. package/dist/symbol-index.d.ts.map +1 -1
  717. package/dist/symbol-index.js +241 -3
  718. package/dist/symbol-member-entry.d.ts +26 -0
  719. package/dist/symbol-member-entry.d.ts.map +1 -0
  720. package/dist/symbol-member-entry.js +1 -0
  721. package/dist/symbol-member-kind.d.ts +14 -0
  722. package/dist/symbol-member-kind.d.ts.map +1 -0
  723. package/dist/symbol-member-kind.js +14 -0
  724. package/dist/task-packet.d.ts.map +1 -1
  725. package/dist/task-packet.js +52 -9
  726. package/dist/task-ranker.d.ts +8 -0
  727. package/dist/task-ranker.d.ts.map +1 -1
  728. package/dist/task-ranker.js +25 -13
  729. package/dist/task-risk.js +1 -1
  730. package/dist/task-routing-hint-registry.d.ts +20 -1
  731. package/dist/task-routing-hint-registry.d.ts.map +1 -1
  732. package/dist/task-routing-hint-registry.js +186 -42
  733. package/dist/template-authoring.d.ts +1 -1
  734. package/dist/template-authoring.d.ts.map +1 -1
  735. package/dist/template-authoring.js +2 -1
  736. package/dist/template-drift.d.ts.map +1 -1
  737. package/dist/template-drift.js +30 -9
  738. package/dist/template-lint.d.ts.map +1 -1
  739. package/dist/template-lint.js +160 -2
  740. package/dist/term-query.d.ts +10 -0
  741. package/dist/term-query.d.ts.map +1 -0
  742. package/dist/term-query.js +1 -0
  743. package/dist/test-definitions.d.ts +6 -3
  744. package/dist/test-definitions.d.ts.map +1 -1
  745. package/dist/test-runner.d.ts +95 -10
  746. package/dist/test-runner.d.ts.map +1 -1
  747. package/dist/test-runner.js +309 -308
  748. package/dist/tuning-query-tokens.d.ts +29 -0
  749. package/dist/tuning-query-tokens.d.ts.map +1 -0
  750. package/dist/tuning-query-tokens.js +51 -0
  751. package/dist/typecheck-files.d.ts +36 -0
  752. package/dist/typecheck-files.d.ts.map +1 -0
  753. package/dist/typecheck-files.js +158 -0
  754. package/dist/uncertainty.js +1 -1
  755. package/dist/universal-search.d.ts.map +1 -1
  756. package/dist/universal-search.js +5 -3
  757. package/dist/unregistered-exports.d.ts +19 -0
  758. package/dist/unregistered-exports.d.ts.map +1 -0
  759. package/dist/unregistered-exports.js +141 -0
  760. package/dist/unresolvable-reason.d.ts +11 -0
  761. package/dist/unresolvable-reason.d.ts.map +1 -0
  762. package/dist/unresolvable-reason.js +11 -0
  763. package/dist/upgrade-advisor.d.ts.map +1 -1
  764. package/dist/upgrade-advisor.js +16 -9
  765. package/dist/validate-contribution-file.d.ts +4 -0
  766. package/dist/validate-contribution-file.d.ts.map +1 -0
  767. package/dist/validate-contribution-file.js +233 -0
  768. package/dist/why-file.d.ts +3 -0
  769. package/dist/why-file.d.ts.map +1 -1
  770. package/dist/why-file.js +12 -7
  771. package/package.json +17 -17
@@ -0,0 +1,550 @@
1
+ /**
2
+ * Declared cross-references — the ids assets name in `related`-style fields.
3
+ *
4
+ * Assets point at each other by id across every namespace: a knowledge entry's
5
+ * `related` / `seeAlso` / `supersededBy` and its action hints, a construct's
6
+ * `related*` fields and its facets, a boundary rule's `related*`, a template's
7
+ * `related`. None of it used to be resolved by anything: a renamed or deleted
8
+ * asset left dangling ids behind, and every doctor still printed ✓ while the
9
+ * dead link produced a silently smaller result for whoever followed it.
10
+ *
11
+ * This module is the ONE answer to "which declared asset fields carry ids"
12
+ * ({@link DECLARED_XREF_FIELDS}); every id is resolved through the ONE resolver
13
+ * (`reference-registry.ts`). The self-config doctor, `self-config
14
+ * broken-links|resolve|xrefs`, `packs doctor`, `templates drift`, `knowledge
15
+ * remove` and `shrk quality` all read this collector rather than walking the
16
+ * fields themselves — a second walker would drift from this one, and the one
17
+ * nobody runs would be the wrong one.
18
+ *
19
+ * The prose twin is `doc-references.ts` (ids cited in free text).
20
+ */
21
+ import * as nodePath from 'node:path';
22
+ import { listConstructs } from "./construct-registry.js";
23
+ import { DeclaredXrefStatus } from "./declared-xref-status.js";
24
+ import { nearestIds } from "./nearest-id.js";
25
+ import { ALL_ID_REFERENCE_KINDS, isCacheBackedKind, isReferenceCacheWarm, referenceIdPool, referenceIdSets, warmReferenceRegistries, } from "./reference-registry.js";
26
+ export const DECLARED_XREF_SCHEMA = 'sharkcraft.declared-xrefs/v1';
27
+ /**
28
+ * THE table of declared fields that carry cross-reference ids.
29
+ *
30
+ * Severity: a dangling `related`-style id shrinks a result silently but does
31
+ * not misroute anyone, so it is a warning (`--strict` makes it fail);
32
+ * `supersededBy` ROUTES a reader to the current entry, so a dangling one is an
33
+ * error. Another cluster that validates ids inside an asset field adds a row
34
+ * here — it never writes its own loop.
35
+ */
36
+ export const DECLARED_XREF_FIELDS = Object.freeze([
37
+ { sourceKind: 'knowledge', field: 'related', accepts: 'any', severity: 'warning', relation: 'related' },
38
+ { sourceKind: 'knowledge', field: 'seeAlso', accepts: 'any', severity: 'warning', relation: 'related' },
39
+ { sourceKind: 'knowledge', field: 'supersededBy', accepts: ['knowledge'], severity: 'error', relation: 'supersedes' },
40
+ { sourceKind: 'knowledge', field: 'actionHints.relatedKnowledge', accepts: ['knowledge'], severity: 'warning', relation: 'related' },
41
+ { sourceKind: 'knowledge', field: 'actionHints.relatedTemplates', accepts: ['template'], severity: 'warning', relation: 'related' },
42
+ { sourceKind: 'knowledge', field: 'actionHints.relatedPathConventions', accepts: ['path-convention'], severity: 'warning', relation: 'related' },
43
+ { sourceKind: 'construct', field: 'relatedKnowledge', accepts: ['knowledge'], severity: 'warning', relation: 'related' },
44
+ { sourceKind: 'construct', field: 'relatedRules', accepts: ['rule', 'boundary-rule'], severity: 'warning', relation: 'related' },
45
+ { sourceKind: 'construct', field: 'relatedTemplates', accepts: ['template'], severity: 'warning', relation: 'related' },
46
+ { sourceKind: 'construct', field: 'relatedPipelines', accepts: ['pipeline'], severity: 'warning', relation: 'related' },
47
+ { sourceKind: 'construct', field: 'relatedPathConventions', accepts: ['path-convention'], severity: 'warning', relation: 'related' },
48
+ // Facet values are free-form (an event topic, a token name) unless the value
49
+ // DECLARES what it names via `resolvesAs` — only those are resolved.
50
+ { sourceKind: 'construct', field: 'facets', accepts: 'declared', severity: 'warning', relation: 'related' },
51
+ { sourceKind: 'boundary-rule', field: 'relatedRules', accepts: ['rule', 'boundary-rule'], severity: 'warning', relation: 'related' },
52
+ { sourceKind: 'boundary-rule', field: 'relatedPathConventions', accepts: ['path-convention'], severity: 'warning', relation: 'related' },
53
+ { sourceKind: 'template', field: 'related', accepts: 'any', severity: 'warning', relation: 'related' },
54
+ ]);
55
+ /**
56
+ * Knowledge fields whose SHAPE is validated at load (`validateKnowledgeEntries`,
57
+ * code `invalid-cross-reference`). The collector does not re-report a malformed
58
+ * member there — one code path per question.
59
+ */
60
+ const LOAD_VALIDATED_KNOWLEDGE_FIELDS = new Set(['related', 'seeAlso', 'supersededBy']);
61
+ /** Knowledge-backed kinds: removing a knowledge entry removes the rule / path it also is. */
62
+ export const KNOWLEDGE_BACKED_KINDS = Object.freeze([
63
+ 'knowledge',
64
+ 'rule',
65
+ 'path-convention',
66
+ ]);
67
+ function relativeFile(projectRoot, file) {
68
+ if (!file)
69
+ return undefined;
70
+ if (!nodePath.isAbsolute(file))
71
+ return file;
72
+ const rel = nodePath.relative(projectRoot, file);
73
+ return rel.startsWith('..') ? file : rel;
74
+ }
75
+ function packOf(info) {
76
+ return info?.type === 'pack' && info.packageName ? { packageName: info.packageName } : {};
77
+ }
78
+ function listOf(reg) {
79
+ const list = reg?.list;
80
+ return typeof list === 'function' ? (list.call(reg) ?? []) : [];
81
+ }
82
+ /** Every asset that can declare a cross-reference, with where it lives. */
83
+ function collectSources(inspection, warm) {
84
+ const root = inspection.projectRoot;
85
+ const sources = [];
86
+ const unread = [];
87
+ for (const e of inspection.knowledgeEntries) {
88
+ const info = inspection.entrySources.get(e.id);
89
+ const file = relativeFile(root, info?.file ?? e.source?.origin);
90
+ sources.push({ kind: 'knowledge', id: e.id, asset: e, ...(file ? { file } : {}), ...packOf(info) });
91
+ }
92
+ const constructs = listConstructs(inspection);
93
+ // Constructs load asynchronously; on a cold cache there is nothing to walk,
94
+ // which must read as "could not look", never as "no constructs declare ids".
95
+ if (!warm && constructs.length === 0)
96
+ unread.push('construct');
97
+ for (const c of constructs) {
98
+ sources.push({
99
+ kind: 'construct',
100
+ id: c.id,
101
+ asset: c,
102
+ ...(c.sourceFile ? { file: c.sourceFile } : {}),
103
+ ...(c.source === 'pack' && c.packageName ? { packageName: c.packageName } : {}),
104
+ });
105
+ }
106
+ for (const r of listOf(inspection.boundaryRegistry)) {
107
+ const info = inspection.boundarySources.get(r.id);
108
+ const file = relativeFile(root, info?.file);
109
+ sources.push({ kind: 'boundary-rule', id: r.id, asset: r, ...(file ? { file } : {}), ...packOf(info) });
110
+ }
111
+ // `templateRegistry`, not `inspection.templates`: the same source `shrk
112
+ // templates list` (and the reference registry) reads.
113
+ for (const t of listOf(inspection.templateRegistry)) {
114
+ const info = inspection.templateSources.get(t.id);
115
+ const file = relativeFile(root, info?.file);
116
+ sources.push({ kind: 'template', id: t.id, asset: t, ...(file ? { file } : {}), ...packOf(info) });
117
+ }
118
+ return { sources, unread };
119
+ }
120
+ function readPath(asset, path) {
121
+ let cur = asset;
122
+ for (const key of path.split('.')) {
123
+ if (!cur || typeof cur !== 'object')
124
+ return undefined;
125
+ cur = cur[key];
126
+ }
127
+ return cur;
128
+ }
129
+ /** The string ids a field value holds, deduped, plus why it is malformed (if it is). */
130
+ function idsOf(value) {
131
+ if (value === undefined || value === null)
132
+ return { ids: [] };
133
+ // A scalar where a list belongs is the common authoring typo — honoured, as
134
+ // the action-hint formatter honours it, rather than walked as characters.
135
+ if (typeof value === 'string') {
136
+ return value.trim().length > 0 ? { ids: [value] } : { ids: [], malformed: 'is an empty string' };
137
+ }
138
+ if (!Array.isArray(value))
139
+ return { ids: [], malformed: `is a ${typeof value}, not a list of ids` };
140
+ const ids = [];
141
+ let bad = 0;
142
+ for (const m of value) {
143
+ if (typeof m === 'string' && m.trim().length > 0) {
144
+ if (!ids.includes(m))
145
+ ids.push(m);
146
+ }
147
+ else {
148
+ bad += 1;
149
+ }
150
+ }
151
+ return bad > 0 ? { ids, malformed: `has ${bad} member(s) that are not non-empty string ids` } : { ids };
152
+ }
153
+ function acceptsLabel(accepts) {
154
+ return accepts === 'any' ? 'any kind' : accepts.join(' | ');
155
+ }
156
+ function resolveId(ctx, source, field, accepts, severity, relation, targetId, facetId) {
157
+ const resolvedAs = ALL_ID_REFERENCE_KINDS.filter((k) => ctx.sets.get(k)?.has(targetId) === true);
158
+ const acceptedKinds = accepts === 'any' ? ALL_ID_REFERENCE_KINDS : accepts;
159
+ const where = `${source.kind} "${source.id}" ${field}${facetId ? ` [${facetId}]` : ''}`;
160
+ let status;
161
+ let reason = '';
162
+ if (resolvedAs.some((k) => acceptedKinds.includes(k))) {
163
+ status = DeclaredXrefStatus.Ok;
164
+ }
165
+ else {
166
+ // A negative answer is only trustworthy when every registry the id could
167
+ // live in was actually looked at.
168
+ const cold = ctx.warm ? [] : acceptedKinds.filter(isCacheBackedKind);
169
+ const emptyTyped = ctx.warm &&
170
+ accepts !== 'any' &&
171
+ acceptedKinds.every((k) => isCacheBackedKind(k) && (ctx.sets.get(k)?.size ?? 0) === 0);
172
+ if (cold.length > 0) {
173
+ status = DeclaredXrefStatus.Unverified;
174
+ reason = `the ${cold.join(' / ')} registr${cold.length === 1 ? 'y was' : 'ies were'} not warmed (warmReferenceRegistries), so it could not be looked up`;
175
+ }
176
+ else if (emptyTyped) {
177
+ status = DeclaredXrefStatus.Unverified;
178
+ reason = `the ${acceptedKinds.join(' / ')} registry is empty — it may have failed to load, so the id could not be looked up`;
179
+ }
180
+ else {
181
+ status = resolvedAs.length === 0 ? DeclaredXrefStatus.Dangling : DeclaredXrefStatus.WrongKind;
182
+ }
183
+ }
184
+ let didYouMean = [];
185
+ if (status === DeclaredXrefStatus.Dangling || status === DeclaredXrefStatus.WrongKind) {
186
+ const key = acceptedKinds.join(',');
187
+ let pool = ctx.pools.get(key);
188
+ if (!pool) {
189
+ pool = referenceIdPool(ctx.inspection, acceptedKinds);
190
+ ctx.pools.set(key, pool);
191
+ }
192
+ // Never suggest the source's own id: following that advice writes a
193
+ // self-reference (a self-supersession the validator rejects as an error).
194
+ didYouMean = nearestIds(targetId, pool)
195
+ .map((n) => n.id)
196
+ .filter((id) => id !== source.id);
197
+ }
198
+ const hint = didYouMean.length > 0 ? ` — did you mean "${didYouMean[0]}"?` : '';
199
+ const message = status === DeclaredXrefStatus.Ok
200
+ ? `${where} → "${targetId}" resolves as ${resolvedAs.join(' | ')}`
201
+ : status === DeclaredXrefStatus.Dangling
202
+ ? `${where} names "${targetId}", which no registry has (the field accepts ${acceptsLabel(accepts)})${hint}`
203
+ : status === DeclaredXrefStatus.WrongKind
204
+ ? `${where} names "${targetId}", which is a ${resolvedAs.join(' | ')} — the field accepts ${acceptsLabel(accepts)}${hint}`
205
+ : `${where} names "${targetId}" — NOT VERIFIED: ${reason}`;
206
+ return {
207
+ sourceKind: source.kind,
208
+ sourceId: source.id,
209
+ field,
210
+ ...(facetId !== undefined ? { facetId } : {}),
211
+ targetId,
212
+ ...(source.file ? { file: source.file } : {}),
213
+ ...(source.packageName ? { packageName: source.packageName } : {}),
214
+ accepts,
215
+ resolvedAs,
216
+ status,
217
+ severity: status === DeclaredXrefStatus.Dangling || status === DeclaredXrefStatus.WrongKind ? severity : 'info',
218
+ relation,
219
+ message,
220
+ didYouMean,
221
+ };
222
+ }
223
+ function issueAt(source, field, code, severity, message, targetId, facetId) {
224
+ return {
225
+ code,
226
+ severity,
227
+ sourceKind: source.kind,
228
+ sourceId: source.id,
229
+ field,
230
+ ...(targetId !== undefined ? { targetId } : {}),
231
+ ...(facetId !== undefined ? { facetId } : {}),
232
+ ...(source.file ? { file: source.file } : {}),
233
+ ...(source.packageName ? { packageName: source.packageName } : {}),
234
+ message,
235
+ };
236
+ }
237
+ const KNOWN_KINDS = new Set(ALL_ID_REFERENCE_KINDS);
238
+ /** Resolve every facet value that declares what it names; count the rest. */
239
+ function collectFacetRows(ctx, source, spec, rows, issues) {
240
+ let undeclared = 0;
241
+ const facets = readPath(source.asset, 'facets');
242
+ if (!facets || typeof facets !== 'object')
243
+ return 0;
244
+ for (const [name, values] of Object.entries(facets)) {
245
+ if (!Array.isArray(values))
246
+ continue;
247
+ const field = `facets.${name}`;
248
+ for (const v of values) {
249
+ if (!v || typeof v !== 'object')
250
+ continue;
251
+ const fv = v;
252
+ const facetId = typeof fv.id === 'string' ? fv.id : undefined;
253
+ if (fv.resolvesAs === undefined) {
254
+ undeclared += 1;
255
+ continue;
256
+ }
257
+ const declared = Array.isArray(fv.resolvesAs)
258
+ ? fv.resolvesAs
259
+ : [fv.resolvesAs];
260
+ const unknown = declared.filter((k) => typeof k !== 'string' || !KNOWN_KINDS.has(k));
261
+ for (const k of unknown) {
262
+ // A typo'd kind is the `$use` failure shape: the value would otherwise
263
+ // resolve against nothing and read as "not an id".
264
+ issues.push(issueAt(source, field, 'xref-unknown-kind', 'error', `${source.kind} "${source.id}" ${field}${facetId ? ` [${facetId}]` : ''} declares resolvesAs "${String(k)}", which is not a reference kind (expected one of: ${ALL_ID_REFERENCE_KINDS.join(', ')}).`, typeof fv.value === 'string' ? fv.value : undefined, facetId));
265
+ }
266
+ const accepts = declared.filter((k) => typeof k === 'string' && KNOWN_KINDS.has(k));
267
+ if (accepts.length === 0)
268
+ continue;
269
+ if (typeof fv.value !== 'string' || fv.value.trim().length === 0) {
270
+ issues.push(issueAt(source, field, 'xref-malformed', 'warning', `${source.kind} "${source.id}" ${field}${facetId ? ` [${facetId}]` : ''} declares resolvesAs but its value is not a non-empty string id.`, undefined, facetId));
271
+ continue;
272
+ }
273
+ rows.push(resolveId(ctx, source, field, accepts, spec.severity, spec.relation, fv.value, facetId));
274
+ }
275
+ }
276
+ return undeclared;
277
+ }
278
+ /** Strongly-connected components of size > 1 — each one a supersession cycle. */
279
+ function supersessionCycles(succ) {
280
+ let counter = 0;
281
+ const index = new Map();
282
+ const low = new Map();
283
+ const stack = [];
284
+ const onStack = new Set();
285
+ const out = [];
286
+ const visit = (v) => {
287
+ index.set(v, counter);
288
+ low.set(v, counter);
289
+ counter += 1;
290
+ stack.push(v);
291
+ onStack.add(v);
292
+ for (const w of succ.get(v) ?? []) {
293
+ if (!index.has(w)) {
294
+ visit(w);
295
+ low.set(v, Math.min(low.get(v) ?? 0, low.get(w) ?? 0));
296
+ }
297
+ else if (onStack.has(w)) {
298
+ low.set(v, Math.min(low.get(v) ?? 0, index.get(w) ?? 0));
299
+ }
300
+ }
301
+ if (low.get(v) === index.get(v)) {
302
+ const comp = [];
303
+ let w;
304
+ do {
305
+ w = stack.pop();
306
+ if (w === undefined)
307
+ break;
308
+ onStack.delete(w);
309
+ comp.push(w);
310
+ } while (w !== v);
311
+ if (comp.length > 1)
312
+ out.push(comp.sort());
313
+ }
314
+ };
315
+ for (const v of [...succ.keys()].sort())
316
+ if (!index.has(v))
317
+ visit(v);
318
+ return out;
319
+ }
320
+ /** The current (non-superseded) entries reachable from `start`, cycle-safe. */
321
+ function terminalSuccessors(start, succ, inCycle) {
322
+ const terminals = new Set();
323
+ const seen = new Set();
324
+ const queue = [start];
325
+ while (queue.length > 0) {
326
+ const cur = queue.shift();
327
+ if (cur === undefined || seen.has(cur) || inCycle.has(cur))
328
+ continue;
329
+ seen.add(cur);
330
+ const next = succ.get(cur);
331
+ if (!next || next.length === 0)
332
+ terminals.add(cur);
333
+ else
334
+ queue.push(...next);
335
+ }
336
+ return [...terminals].sort();
337
+ }
338
+ /**
339
+ * `supersededBy` graph checks: a cycle has no current entry (error); a target
340
+ * that is itself superseded makes a reader hop twice (warning, naming the
341
+ * terminal successor). Existence of each target is the row check's job.
342
+ */
343
+ function checkSupersession(ctx, sources, issues) {
344
+ const knowledge = ctx.sets.get('knowledge') ?? new Set();
345
+ const byId = new Map();
346
+ const succ = new Map();
347
+ for (const s of sources) {
348
+ if (s.kind !== 'knowledge')
349
+ continue;
350
+ byId.set(s.id, s);
351
+ // Self-supersession is a load-time error (`invalid-cross-reference`).
352
+ const next = idsOf(readPath(s.asset, 'supersededBy')).ids.filter((t) => t !== s.id && knowledge.has(t));
353
+ if (next.length > 0)
354
+ succ.set(s.id, next);
355
+ }
356
+ if (succ.size === 0)
357
+ return;
358
+ const inCycle = new Set();
359
+ for (const cycle of supersessionCycles(succ)) {
360
+ for (const m of cycle)
361
+ inCycle.add(m);
362
+ const first = byId.get(cycle[0] ?? '');
363
+ if (!first)
364
+ continue;
365
+ issues.push(issueAt(first, 'supersededBy', 'xref-superseded-cycle', 'error', `supersededBy forms a cycle among ${cycle.map((c) => `"${c}"`).join(', ')} — none of them is current, so a reader following the chain never arrives.`, (succ.get(first.id) ?? []).find((t) => cycle.includes(t))));
366
+ }
367
+ for (const [from, next] of succ) {
368
+ if (inCycle.has(from))
369
+ continue;
370
+ const source = byId.get(from);
371
+ if (!source)
372
+ continue;
373
+ for (const target of next) {
374
+ if (!succ.has(target) || inCycle.has(target))
375
+ continue;
376
+ const terminals = terminalSuccessors(target, succ, inCycle);
377
+ issues.push(issueAt(source, 'supersededBy', 'xref-superseded-chain', 'warning', `knowledge "${from}" is superseded by "${target}", which is itself superseded — point it at the current entr${terminals.length === 1 ? 'y' : 'ies'}: ${terminals.map((t) => `"${t}"`).join(', ') || '(none — the chain ends in a cycle)'}.`, target));
378
+ }
379
+ }
380
+ }
381
+ /**
382
+ * Resolve every declared cross-reference id. Synchronous: call it AFTER
383
+ * `warmReferenceRegistries` (or use {@link buildDeclaredXrefReport}). On a cold
384
+ * cache the cache-backed kinds cannot be looked up, so an id that might live
385
+ * in one is `unverified` — never `dangling` — and constructs are reported in
386
+ * `examined.unreadSources`. Never throws: a registry that will not load is its
387
+ * own surface's problem.
388
+ */
389
+ export function collectDeclaredXrefs(inspection) {
390
+ const warm = isReferenceCacheWarm(inspection);
391
+ const ctx = { inspection, sets: referenceIdSets(inspection), warm, pools: new Map() };
392
+ const { sources, unread } = collectSources(inspection, warm);
393
+ const rows = [];
394
+ const issues = [];
395
+ let facetValuesUndeclared = 0;
396
+ const sourcesByKind = {};
397
+ for (const source of sources) {
398
+ sourcesByKind[source.kind] = (sourcesByKind[source.kind] ?? 0) + 1;
399
+ for (const spec of DECLARED_XREF_FIELDS) {
400
+ if (spec.sourceKind !== source.kind)
401
+ continue;
402
+ if (spec.accepts === 'declared') {
403
+ facetValuesUndeclared += collectFacetRows(ctx, source, spec, rows, issues);
404
+ continue;
405
+ }
406
+ const { ids, malformed } = idsOf(readPath(source.asset, spec.field));
407
+ if (malformed && !(source.kind === 'knowledge' && LOAD_VALIDATED_KNOWLEDGE_FIELDS.has(spec.field))) {
408
+ issues.push(issueAt(source, spec.field, 'xref-malformed', 'warning', `${source.kind} "${source.id}" ${spec.field} ${malformed}.`));
409
+ }
410
+ for (const id of ids) {
411
+ rows.push(resolveId(ctx, source, spec.field, spec.accepts, spec.severity, spec.relation, id));
412
+ }
413
+ }
414
+ }
415
+ checkSupersession(ctx, sources, issues);
416
+ const byField = {};
417
+ const counts = { ids: rows.length, ok: 0, dangling: 0, wrongKind: 0, unverified: 0, errors: 0, warnings: 0 };
418
+ for (const r of rows) {
419
+ const key = `${r.sourceKind}.${r.field.startsWith('facets.') ? 'facets' : r.field}`;
420
+ const f = (byField[key] ??= { ids: 0, dangling: 0, wrongKind: 0, unverified: 0 });
421
+ f.ids += 1;
422
+ if (r.status === DeclaredXrefStatus.Ok)
423
+ counts.ok += 1;
424
+ else if (r.status === DeclaredXrefStatus.Dangling) {
425
+ counts.dangling += 1;
426
+ f.dangling += 1;
427
+ }
428
+ else if (r.status === DeclaredXrefStatus.WrongKind) {
429
+ counts.wrongKind += 1;
430
+ f.wrongKind += 1;
431
+ }
432
+ else {
433
+ counts.unverified += 1;
434
+ f.unverified += 1;
435
+ }
436
+ if (r.severity === 'error')
437
+ counts.errors += 1;
438
+ else if (r.severity === 'warning')
439
+ counts.warnings += 1;
440
+ }
441
+ for (const i of issues) {
442
+ if (i.severity === 'error')
443
+ counts.errors += 1;
444
+ else
445
+ counts.warnings += 1;
446
+ }
447
+ return {
448
+ schema: DECLARED_XREF_SCHEMA,
449
+ rows,
450
+ issues,
451
+ counts,
452
+ examined: {
453
+ sources: sources.length,
454
+ sourcesByKind,
455
+ ids: rows.length,
456
+ fields: Object.keys(byField).length,
457
+ byField,
458
+ facetValuesUndeclared,
459
+ cacheWarm: warm,
460
+ unreadSources: unread,
461
+ },
462
+ };
463
+ }
464
+ /** Warm the async registries, then {@link collectDeclaredXrefs}. */
465
+ export async function buildDeclaredXrefReport(inspection) {
466
+ await warmReferenceRegistries(inspection);
467
+ return collectDeclaredXrefs(inspection);
468
+ }
469
+ /** True for a row a reader following it would find broken: dangling or wrong-kind. */
470
+ export function isBrokenXref(row) {
471
+ return row.status === DeclaredXrefStatus.Dangling || row.status === DeclaredXrefStatus.WrongKind;
472
+ }
473
+ /**
474
+ * Who points at `targetId` — the reverse direction. With `asKinds`, only rows
475
+ * whose field could mean an id of one of those kinds (a construct's
476
+ * `relatedTemplates: ['x']` is not a reference to a knowledge entry `x`).
477
+ */
478
+ export function reverseXrefs(report, targetId, asKinds) {
479
+ return report.rows.filter((r) => r.targetId === targetId &&
480
+ (!asKinds || r.accepts === 'any' || r.accepts.some((k) => asKinds.includes(k))));
481
+ }
482
+ /**
483
+ * The collector's coverage: every declared id must have been LOOKED UP. An
484
+ * unverified id (or a source that could not be enumerated) is an unexamined
485
+ * unit, so a verdict over it can never settle to a pass.
486
+ */
487
+ export function declaredXrefCoverage(report) {
488
+ const unread = report.examined.unreadSources.map((k) => `${k} assets (registry not warmed)`);
489
+ const unverified = report.rows
490
+ .filter((r) => r.status === DeclaredXrefStatus.Unverified)
491
+ .map((r) => `${r.sourceKind}:${r.sourceId} ${r.field} → ${r.targetId}`);
492
+ const labels = [...unread, ...unverified];
493
+ return {
494
+ unit: 'declared cross-reference ids',
495
+ expected: report.counts.ids + unread.length,
496
+ examined: report.counts.ids - report.counts.unverified,
497
+ ...(labels.length > 0
498
+ ? {
499
+ unexamined: labels.slice(0, 20),
500
+ unexaminedTotal: labels.length,
501
+ reason: 'could not be looked up (registry not warmed, or empty)',
502
+ }
503
+ : {}),
504
+ };
505
+ }
506
+ /** The one-line summary every renderer prints (`N ids across M fields · …`). */
507
+ export function declaredXrefSummaryLine(report) {
508
+ const c = report.counts;
509
+ if (c.ids === 0 && report.issues.length === 0) {
510
+ return `none declared — nothing examined (${report.examined.sources} asset(s) walked)`;
511
+ }
512
+ const issues = report.issues.length > 0 ? ` · ${report.issues.length} declaration issue(s)` : '';
513
+ return `${c.ids} id(s) across ${report.examined.fields} field(s) · ${c.dangling} dangling · ${c.wrongKind} wrong-kind · ${c.unverified} unverified${issues}`;
514
+ }
515
+ /**
516
+ * The self-config graph plus one edge per declared cross-reference; dangling
517
+ * and wrong-kind ones are also `brokenEdges`, so `self-config broken-links`
518
+ * agrees with the doctor instead of printing ✓ over dead ids.
519
+ */
520
+ export function withDeclaredXrefEdges(graph, report) {
521
+ const edges = [...graph.edges];
522
+ const brokenEdges = [...graph.brokenEdges];
523
+ for (const r of report.rows) {
524
+ const edge = {
525
+ from: { id: r.sourceId, kind: r.sourceKind, ...(r.file ? { source: r.file } : {}) },
526
+ to: { id: r.targetId, kind: r.resolvedAs[0] ?? (r.accepts === 'any' ? 'unknown' : (r.accepts[0] ?? 'unknown')) },
527
+ relation: r.field,
528
+ };
529
+ edges.push(edge);
530
+ if (isBrokenXref(r))
531
+ brokenEdges.push(edge);
532
+ }
533
+ return { ...graph, edges, brokenEdges };
534
+ }
535
+ /**
536
+ * The resolver `formatEntryFull` renders cross-references with (the knowledge
537
+ * package sits below this layer and cannot resolve ids itself). Warm first: on
538
+ * a cold cache an unresolvable id is `unverified`, never "unresolved".
539
+ */
540
+ export function buildKnowledgeRefResolver(inspection) {
541
+ const sets = referenceIdSets(inspection);
542
+ const warm = isReferenceCacheWarm(inspection);
543
+ return (id) => {
544
+ const kinds = ALL_ID_REFERENCE_KINDS.filter((k) => sets.get(k)?.has(id) === true);
545
+ if (kinds.length === 0)
546
+ return warm ? { kinds } : { kinds, unverified: true };
547
+ const title = inspection.index.get(id)?.title ?? inspection.templateRegistry.get(id)?.name;
548
+ return { kinds, ...(title ? { title } : {}) };
549
+ };
550
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * How many data-defined gate-plane rules the project declares, per plane —
3
+ * read through `resolveProjectConfig` (THE config reader that sees
4
+ * pack-contributed planes) under THE plane → config-key list beside the config
5
+ * schema (`GATE_PLANE_CONFIG_KEY`), the one the CLI's `collectGateRules` reads.
6
+ *
7
+ * Two "no config was read" answers, kept apart (round 11 review R12-REG-2):
8
+ * - NO config — the loader found no `sharkcraft/` folder
9
+ * (`isProjectConfigAbsent`, the answer `finish` reads as "gate not
10
+ * applicable"): zero rules and no `loadError`; there are no planes to run;
11
+ * - a config that EXISTS but failed to load: `loadError` is set, since
12
+ * nothing can be said about what it declares.
13
+ *
14
+ * `buildQualityReport` consumers other than `shrk quality` (MCP, the
15
+ * dashboard, the report site) do not run the planes — some spawn shells — so
16
+ * they report a not-run `gate-planes` row from this count; `shrk quality`
17
+ * runs them.
18
+ */
19
+ export declare function declaredGatePlaneRules(projectRoot: string): Promise<{
20
+ readonly total: number;
21
+ readonly byPlane: Readonly<Record<string, number>>;
22
+ readonly loadError?: string;
23
+ }>;
24
+ //# sourceMappingURL=declared-gate-plane-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declared-gate-plane-rules.d.ts","sourceRoot":"","sources":["../src/declared-gate-plane-rules.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBtH"}
@@ -0,0 +1,39 @@
1
+ import { GATE_PLANE_CONFIG_KEY, GATE_PLANE_ORDER } from '@shrkcrft/config';
2
+ import { isProjectConfigAbsent, resolveProjectConfig } from "./resolve-project-config.js";
3
+ /**
4
+ * How many data-defined gate-plane rules the project declares, per plane —
5
+ * read through `resolveProjectConfig` (THE config reader that sees
6
+ * pack-contributed planes) under THE plane → config-key list beside the config
7
+ * schema (`GATE_PLANE_CONFIG_KEY`), the one the CLI's `collectGateRules` reads.
8
+ *
9
+ * Two "no config was read" answers, kept apart (round 11 review R12-REG-2):
10
+ * - NO config — the loader found no `sharkcraft/` folder
11
+ * (`isProjectConfigAbsent`, the answer `finish` reads as "gate not
12
+ * applicable"): zero rules and no `loadError`; there are no planes to run;
13
+ * - a config that EXISTS but failed to load: `loadError` is set, since
14
+ * nothing can be said about what it declares.
15
+ *
16
+ * `buildQualityReport` consumers other than `shrk quality` (MCP, the
17
+ * dashboard, the report site) do not run the planes — some spawn shells — so
18
+ * they report a not-run `gate-planes` row from this count; `shrk quality`
19
+ * runs them.
20
+ */
21
+ export async function declaredGatePlaneRules(projectRoot) {
22
+ const resolved = await resolveProjectConfig(projectRoot);
23
+ if (!resolved.ok) {
24
+ return isProjectConfigAbsent(resolved.error)
25
+ ? { total: 0, byPlane: {} }
26
+ : { total: 0, byPlane: {}, loadError: resolved.error.message };
27
+ }
28
+ const config = resolved.value.config;
29
+ const byPlane = {};
30
+ let total = 0;
31
+ for (const plane of GATE_PLANE_ORDER) {
32
+ const list = config[GATE_PLANE_CONFIG_KEY[plane]];
33
+ const n = Array.isArray(list) ? list.length : 0;
34
+ if (n > 0)
35
+ byPlane[plane] = n;
36
+ total += n;
37
+ }
38
+ return { total, byPlane };
39
+ }
@@ -0,0 +1,27 @@
1
+ import type { IVerdictCoverage } from '@shrkcrft/core';
2
+ import { type IKnowledgeAnchorCheck, type IKnowledgeReferenceCheck } from './knowledge-stale.js';
3
+ /** Why a malformed reference is unexamined — the words every surface prints. */
4
+ export declare const MALFORMED_REFERENCE_REASON = "malformed (a kind outside the vocabulary, a required field missing, a field of the wrong type, or a root that cannot resolve where it is declared), so never checked \u2014 each INVALID row names its problem, `shrk doctor` each knowledge entry\u2019s";
5
+ /**
6
+ * THE fold of declared references into one coverage record.
7
+ *
8
+ * A reference whose outcome was CHECKED (ok / stale / missing —
9
+ * `isCheckableOutcome`) was examined. A MALFORMED one (`invalid`) was declared
10
+ * to be checked and never was: it is expected, not examined, so a run holding
11
+ * one is never a clean pass. An `unknown` one (a url, an unpinned or ambiguous
12
+ * symbol, a file that failed to read) is neither: the stale-check accounts for
13
+ * it at the ENTRY level (an entry with nothing checkable is unverifiable), so
14
+ * it leaves both sides here — which is why a scope of ONLY unknown references
15
+ * is `expected: 0`, "nothing to examine", never a pass.
16
+ *
17
+ * `shrk knowledge stale-check` / `verify` (and so `shrk quality`, MCP
18
+ * `get_quality_report`, the dashboard) and the `shrk gate` knowledge-symbol
19
+ * gate all settle on this one record — the gate used to count every
20
+ * non-stale, non-missing reference as "resolving", so a malformed or unpinned
21
+ * reference read as a pass there while the stale-check said 2.
22
+ */
23
+ export declare function declaredReferenceCoverage(input: {
24
+ readonly references: readonly IKnowledgeReferenceCheck[];
25
+ readonly anchors?: readonly IKnowledgeAnchorCheck[];
26
+ }): IVerdictCoverage;
27
+ //# sourceMappingURL=declared-reference-coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declared-reference-coverage.d.ts","sourceRoot":"","sources":["../src/declared-reference-coverage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAK9B,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,8PAK4M,CAAC;AAEpP;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACrD,GAAG,gBAAgB,CA0BnB"}