@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,242 @@
1
+ /**
2
+ * THE contributions report (round 12, ONE-CHANGE) — `shrk packs contributions`'
3
+ * `By file:` section and MCP `get_pack_contributions`' `report`.
4
+ *
5
+ * "Did what I wrote take effect?" has three columns per contributed file:
6
+ * entries ACCEPTED (the inventory's structural entries — every loader-backed
7
+ * kind is structural since 12.1e), entries REJECTED with every reason (THE
8
+ * rejection channel, carried by the inventory), and references that could not
9
+ * be checked because their kind's registry is empty or undeclarable (the
10
+ * self-config doctor's own reference probes, `collectUnresolvableReferences`).
11
+ * Nothing here resolves or loads anything itself.
12
+ */
13
+ import { existsSync } from 'node:fs';
14
+ import * as nodePath from 'node:path';
15
+ import { CONTRIBUTION_FILE_KEYS } from '@shrkcrft/plugin-api';
16
+ import { ContributionKind } from "./contribution-kind.js";
17
+ import { contributionFileLabel, contributionKindOfLoader, formatEntryRejection } from "./contribution-load-failures.js";
18
+ import { buildPackContributionsInventoryAsync, contributionKindForSlot, } from "./pack-contributions-inventory.js";
19
+ import { collectUnresolvableReferences } from "./self-config-doctor-v2.js";
20
+ /** A reference-declaring asset kind → the contribution kind its file is, for a file no other evidence named. */
21
+ const SOURCE_KIND = {
22
+ 'registration-hint': ContributionKind.RegistrationHint,
23
+ 'routing-hint': ContributionKind.TaskRoutingHint,
24
+ convention: ContributionKind.Convention,
25
+ template: ContributionKind.Template,
26
+ knowledge: ContributionKind.Knowledge,
27
+ rule: ContributionKind.Rule,
28
+ 'path-convention': ContributionKind.Path,
29
+ construct: ContributionKind.Construct,
30
+ 'boundary-rule': ContributionKind.Boundary,
31
+ // Round 13: the scan covers search-tuning boost keys, as `search tuning doctor` does.
32
+ 'search-tuning': ContributionKind.SearchTuning,
33
+ };
34
+ /** A load failure's loader `kind` → its contribution kind, through THE table (`contributionKindOfLoader`). */
35
+ function asKind(kind, fallback) {
36
+ return contributionKindOfLoader(kind) ?? fallback;
37
+ }
38
+ /**
39
+ * The report from an already-built inventory and reference scan — the pure
40
+ * half; {@link buildContributionsReport} gathers both.
41
+ */
42
+ export function contributionsReportOf(inspection, inventory, references) {
43
+ const rows = new Map();
44
+ const rel = (abs) => contributionFileLabel(inspection.projectRoot, abs);
45
+ const posix = (file) => file.split(nodePath.sep).join('/');
46
+ const rowFor = (file, kind, packageName) => {
47
+ const key = posix(file);
48
+ let row = rows.get(key);
49
+ if (!row) {
50
+ row = {
51
+ file: key,
52
+ kind,
53
+ ...(packageName ? { packageName } : {}),
54
+ status: 'loaded',
55
+ acceptedIds: new Set(),
56
+ rejected: [],
57
+ unresolvable: new Map(),
58
+ };
59
+ rows.set(key, row);
60
+ }
61
+ if (!row.packageName && packageName)
62
+ row.packageName = packageName;
63
+ return row;
64
+ };
65
+ // 1) Every file a pack manifest declares (a missing one is a `missing` row).
66
+ for (const pack of inspection.packs.validPacks ?? []) {
67
+ const contributions = (pack.manifest?.contributions ?? {});
68
+ for (const slot of CONTRIBUTION_FILE_KEYS) {
69
+ const kind = contributionKindForSlot(slot);
70
+ if (!kind)
71
+ continue;
72
+ for (const r of contributions[slot] ?? []) {
73
+ const abs = nodePath.resolve(pack.packageRoot, r);
74
+ const row = rowFor(rel(abs), kind, pack.packageName);
75
+ if (!existsSync(abs))
76
+ row.status = 'missing';
77
+ }
78
+ }
79
+ }
80
+ // 2) Accepted entries (structural) — and every file the inventory saw.
81
+ for (const e of inventory.entries) {
82
+ if (!e.sourceFile)
83
+ continue;
84
+ const row = rowFor(e.sourceFile, e.kind, e.packageName);
85
+ if (e.extractionMode === 'structural')
86
+ row.acceptedIds.add(e.id);
87
+ }
88
+ // 3) Rejected entries — THE rejection channel.
89
+ for (const r of inventory.rejections) {
90
+ rowFor(r.file, r.kind, r.packageName).rejected.push({
91
+ index: r.index,
92
+ ...(r.exportName ? { exportName: r.exportName } : {}),
93
+ ...(r.entryId !== undefined ? { entryId: r.entryId } : {}),
94
+ reasons: r.reasons,
95
+ cause: r.cause,
96
+ });
97
+ }
98
+ // 4) Files that failed to load.
99
+ for (const f of inventory.loadFailures) {
100
+ const row = rowFor(f.file, asKind(f.kind, ContributionKind.Knowledge), f.packageName);
101
+ row.status = 'failed';
102
+ row.loadError = f.message;
103
+ }
104
+ // 5) References that could not be checked, grouped per (source, field, kind, reason).
105
+ let unattributed = 0;
106
+ for (const u of references.references) {
107
+ if (!u.file) {
108
+ unattributed += 1;
109
+ continue;
110
+ }
111
+ const row = rowFor(rel(u.file), SOURCE_KIND[u.sourceKind] ?? ContributionKind.Knowledge, u.packageName);
112
+ const key = `${u.sourceId}|${u.field}|${u.kind}|${u.reason}`;
113
+ const g = row.unresolvable.get(key) ?? { sourceId: u.sourceId, field: u.field, kind: u.kind, ids: [], reason: u.reason };
114
+ g.ids.push(u.id);
115
+ row.unresolvable.set(key, g);
116
+ }
117
+ const files = [...rows.values()]
118
+ .map((r) => {
119
+ const accepted = r.acceptedIds.size;
120
+ return {
121
+ file: r.file,
122
+ kind: r.kind,
123
+ ...(r.packageName ? { packageName: r.packageName } : {}),
124
+ source: r.packageName ? 'pack' : 'local',
125
+ status: r.status,
126
+ declared: accepted + r.rejected.length,
127
+ accepted,
128
+ acceptedIds: [...r.acceptedIds].sort(),
129
+ rejected: [...r.rejected].sort((a, b) => a.index - b.index),
130
+ ...(r.loadError !== undefined ? { loadError: r.loadError } : {}),
131
+ unresolvableReferences: [...r.unresolvable.values()].map((g) => ({ ...g, ids: [...g.ids] })),
132
+ };
133
+ })
134
+ .sort((a, b) => a.file.localeCompare(b.file) || a.kind.localeCompare(b.kind));
135
+ return summarise(files, references.expected, unattributed);
136
+ }
137
+ /** Totals + THE reference coverage over `files` (`probed` = every reference probed in view). */
138
+ function summarise(files, probed, unattributed) {
139
+ const unresolvable = files.reduce((n, f) => n + f.unresolvableReferences.reduce((m, g) => m + g.ids.length, 0), 0) + unattributed;
140
+ const labels = files.flatMap((f) => f.unresolvableReferences.flatMap((g) => g.ids.map((id) => `${f.file}: ${g.sourceId} ${g.field} → ${g.kind} ${id}`)));
141
+ const referenceCoverage = probed > 0
142
+ ? {
143
+ subject: 'contributed references',
144
+ unit: 'references',
145
+ expected: probed,
146
+ examined: Math.max(0, probed - unresolvable),
147
+ ...(unresolvable > 0 ? { unexamined: labels.slice(0, 20), unexaminedTotal: unresolvable } : {}),
148
+ reason: "could not be checked — their kind's registry is empty in this workspace, or nothing can declare it",
149
+ }
150
+ : undefined;
151
+ return {
152
+ files,
153
+ totals: {
154
+ files: files.length,
155
+ declared: files.reduce((n, f) => n + f.declared, 0),
156
+ accepted: files.reduce((n, f) => n + f.accepted, 0),
157
+ rejected: files.reduce((n, f) => n + f.rejected.length, 0),
158
+ loadFailed: files.filter((f) => f.status === 'failed').length,
159
+ missing: files.filter((f) => f.status === 'missing').length,
160
+ unresolvable,
161
+ },
162
+ ...(referenceCoverage ? { referenceCoverage } : {}),
163
+ };
164
+ }
165
+ /**
166
+ * The report narrowed to `--pack` / `--kind`. A narrowed view settles on the
167
+ * references IN VIEW: its coverage is the view's unresolvable references
168
+ * (examined 0 of them), so a filter can never borrow another file's pass.
169
+ */
170
+ export function filterContributionsReport(report, filter) {
171
+ if (!filter.pack && !filter.kind)
172
+ return report;
173
+ const files = report.files.filter((f) => (!filter.pack || f.packageName === filter.pack) && (!filter.kind || f.kind === filter.kind));
174
+ const inView = files.reduce((n, f) => n + f.unresolvableReferences.reduce((m, g) => m + g.ids.length, 0), 0);
175
+ return summarise(files, inView, 0);
176
+ }
177
+ /** Every contributed file, accepted vs rejected vs unresolvable. */
178
+ export async function buildContributionsReport(inspection, options = {}) {
179
+ const inventory = options.inventory ?? (await buildPackContributionsInventoryAsync(inspection));
180
+ const references = options.references ?? (await collectUnresolvableReferences(inspection));
181
+ return contributionsReportOf(inspection, inventory, references);
182
+ }
183
+ function fileMark(f) {
184
+ if (f.status !== 'loaded' || f.rejected.length > 0)
185
+ return '✗';
186
+ return f.unresolvableReferences.length > 0 ? '~' : '✓';
187
+ }
188
+ function fileSummary(f) {
189
+ if (f.status === 'failed')
190
+ return `FAILED TO LOAD — ${f.loadError ?? 'import error'}`;
191
+ if (f.status === 'missing')
192
+ return 'MISSING on disk — nothing in it takes effect';
193
+ const parts = [`${f.declared} declared`, `${f.accepted} accepted`];
194
+ if (f.rejected.length > 0)
195
+ parts.push(`${f.rejected.length} rejected`);
196
+ const u = f.unresolvableReferences.reduce((n, g) => n + g.ids.length, 0);
197
+ if (u > 0)
198
+ parts.push(`${u} unresolvable reference(s)`);
199
+ return parts.join(' · ');
200
+ }
201
+ /** The `By file:` text section (after `By kind:`). */
202
+ export function renderContributionsByFileText(report) {
203
+ const lines = [];
204
+ const t = report.totals;
205
+ lines.push(`By file (${t.files}): ${t.declared} declared · ${t.accepted} accepted · ${t.rejected} rejected${t.loadFailed > 0 ? ` · ${t.loadFailed} failed to load` : ''}${t.missing > 0 ? ` · ${t.missing} missing` : ''}${t.unresolvable > 0 ? ` · ${t.unresolvable} unresolvable reference(s)` : ''}`);
206
+ for (const f of report.files) {
207
+ lines.push(` ${fileMark(f)} ${f.file} ${f.kind}${f.packageName ? ` [${f.packageName}]` : ''} ${fileSummary(f)}`);
208
+ for (const r of f.rejected)
209
+ lines.push(` rejected ${formatEntryRejection({ ...r, file: f.file })}`);
210
+ for (const g of f.unresolvableReferences) {
211
+ lines.push(` unresolvable ${g.sourceId} ${g.field} → ${g.kind} ${g.ids.map((id) => `'${id}'`).join(', ')} — ${g.reason === 'undeclarable-kind' ? 'no registry can ever hold this kind' : "this kind's registry is empty here"}`);
212
+ }
213
+ }
214
+ return lines.join('\n') + '\n';
215
+ }
216
+ /** The `## By file` markdown section. */
217
+ export function renderContributionsByFileMarkdown(report) {
218
+ const lines = ['## By file', ''];
219
+ if (report.files.length === 0) {
220
+ lines.push('None.');
221
+ return lines.join('\n') + '\n';
222
+ }
223
+ lines.push('| File | Kind | Pack | Status | Declared | Accepted | Rejected | Unresolvable |');
224
+ lines.push('| --- | --- | --- | --- | --- | --- | --- | --- |');
225
+ for (const f of report.files) {
226
+ const u = f.unresolvableReferences.reduce((n, g) => n + g.ids.length, 0);
227
+ lines.push(`| \`${f.file}\` | ${f.kind} | ${f.packageName ?? ''} | ${f.status} | ${f.declared} | ${f.accepted} | ${f.rejected.length} | ${u} |`);
228
+ }
229
+ const detail = report.files.filter((f) => f.rejected.length > 0 || f.unresolvableReferences.length > 0);
230
+ if (detail.length > 0) {
231
+ lines.push('');
232
+ for (const f of detail) {
233
+ lines.push(`- \`${f.file}\``);
234
+ for (const r of f.rejected)
235
+ lines.push(` - rejected: ${formatEntryRejection({ ...r, file: f.file })}`);
236
+ for (const g of f.unresolvableReferences) {
237
+ lines.push(` - unresolvable: ${g.sourceId} ${g.field} → ${g.kind} ${g.ids.join(', ')} (${g.reason})`);
238
+ }
239
+ }
240
+ }
241
+ return lines.join('\n') + '\n';
242
+ }
@@ -0,0 +1,46 @@
1
+ import { ConventionAppliesToFilter, type IConvention } from '@shrkcrft/plugin-api';
2
+ import { ConventionFilterLevel } from './convention-filter-level.js';
3
+ import type { IConventionApplicability } from './i-convention-applicability.js';
4
+ import type { IConventionScope } from './i-convention-scope.js';
5
+ import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
6
+ /** Where each filter is decided — keyed by the enum, so a new filter without a level is a compile error. */
7
+ export declare const CONVENTION_FILTER_LEVELS: Readonly<Record<ConventionAppliesToFilter, ConventionFilterLevel>>;
8
+ /** The convention's declared values for `filter` — `[]` for an absent filter (or a non-list, which the loader refuses). */
9
+ export declare function declaredAppliesTo(convention: IConvention, filter: ConventionAppliesToFilter): readonly string[];
10
+ /**
11
+ * A file path as the per-file filters AND a rule's patterns read it:
12
+ * project-relative, `/`-separated, no leading `./`. `checkConventionsAgainstFiles`
13
+ * normalizes its file list through this once, so the scope test and every
14
+ * `filePattern` / `expectMatch` / `forbidMatch` regex see ONE spelling of a file
15
+ * (round 15 review: `--files ./src/a.ts` was covered by `fileGlobs: ['src/**']`
16
+ * here and then failed `filePattern: '^src/'` on the raw `./src/a.ts` — a false hit).
17
+ *
18
+ * The spelling is REALPATH-canonical (round 15 follow-up, F9): the file and the
19
+ * project root are both resolved through their symlinks before one is made
20
+ * relative to the other, so a symlinked absolute path (`/link/src/a.ts` with
21
+ * `/link → the project`, or macOS `/var/…` for a root at `/private/var/…`)
22
+ * behaves exactly like its target — it read `../link/src/a.ts`, which no
23
+ * `fileGlobs` selected, so the convention was silently not applicable. A path
24
+ * whose target lies OUTSIDE the project (an in-project symlink to a sibling
25
+ * checkout) keeps its lexical in-project spelling: that is where it is in scope.
26
+ */
27
+ export declare function conventionFilePath(inspection: ISharkcraftInspection, file: string): string;
28
+ /**
29
+ * Does `convention` apply here — to the workspace, and (given `file`) to that
30
+ * file? Without `file` only the workspace filters decide; the per-file ones
31
+ * are listed as `decided per file`. See the module doc for the table.
32
+ */
33
+ export declare function conventionApplicability(convention: IConvention, inspection: ISharkcraftInspection, file?: string): IConventionApplicability;
34
+ /**
35
+ * Which of `files` `convention` covers — per file through
36
+ * {@link conventionApplicability}, so `conventions check` and the rule-graph
37
+ * bridge (which both call this) cannot disagree.
38
+ *
39
+ * Not applicable when a workspace filter excludes it, or when `files` is
40
+ * non-empty and no file passes the per-file filters (the per-file reasons
41
+ * then count what each filter selected across the list). An EMPTY list keeps
42
+ * a workspace-applicable convention applicable over nothing — the caller's own
43
+ * empty-scope verdict decides that case.
44
+ */
45
+ export declare function conventionScope(convention: IConvention, inspection: ISharkcraftInspection, files: readonly string[]): IConventionScope;
46
+ //# sourceMappingURL=convention-applicability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convention-applicability.d.ts","sourceRoot":"","sources":["../src/convention-applicability.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,yBAAyB,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,4GAA4G;AAC5G,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,CAMtG,CAAC;AAWH,2HAA2H;AAC3H,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,yBAAyB,GAAG,SAAS,MAAM,EAAE,CAG/G;AAwCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAc1F;AAiED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,qBAAqB,EACjC,IAAI,CAAC,EAAE,MAAM,GACZ,wBAAwB,CAQ1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,WAAW,EACvB,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,gBAAgB,CAkDlB"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * THE convention applicability authority (round 15, 15.1).
3
+ *
4
+ * `IConventionAppliesTo` declares five filters; before this only `fileGlobs`
5
+ * was read — by two different matchers that disagreed (`conventions check`
6
+ * compiled `src/**\/*.ts` so it missed `src/a.ts` and ignored `!`; the
7
+ * rule-graph bridge dropped a convention with no `fileGlobs` that check
8
+ * enforced on every file). `profileIds`, `frameworks` and `languages` were
9
+ * validated, resolved by the doctor, and inert.
10
+ *
11
+ * Every surface now asks THIS module: `conventions check`, the rule-graph
12
+ * bridge, MCP `prepare_agent_task`, and the `conventions list / get / explain`
13
+ * display (which shows the answer and never hides an entry).
14
+ *
15
+ * Semantics — the pack-compatibility precedent (`pack-compatibility.ts`):
16
+ * - within a filter, ANY listed value matches;
17
+ * - EVERY declared filter must match;
18
+ * - an absent or empty filter imposes no constraint.
19
+ *
20
+ * | filter | level | matches when |
21
+ * |------------------|-----------|-----------------------------------------------------------|
22
+ * | `profileIds` | workspace | a listed id is in `inspection.workspace.profiles` |
23
+ * | `frameworks` | workspace | a listed id is in `inspection.workspace.frameworks[].id` |
24
+ * | `languages` | file | the file's language (`fileLanguageOf`) is listed |
25
+ * | `fileGlobs` | file | `globListSelects(file, globs)` — `**` spans zero+ segments, `!` subtracts |
26
+ * | `constructKinds` | reserved | always (not evaluated; the loader warns) |
27
+ */
28
+ import { realpathSync } from 'node:fs';
29
+ import * as nodePath from 'node:path';
30
+ import { globListSelects } from '@shrkcrft/boundaries';
31
+ import { ConventionAppliesToFilter } from '@shrkcrft/plugin-api';
32
+ import { ConventionFilterLevel } from "./convention-filter-level.js";
33
+ import { fileLanguageOf } from "./file-languages.js";
34
+ /** Where each filter is decided — keyed by the enum, so a new filter without a level is a compile error. */
35
+ export const CONVENTION_FILTER_LEVELS = Object.freeze({
36
+ [ConventionAppliesToFilter.ProfileIds]: ConventionFilterLevel.Workspace,
37
+ [ConventionAppliesToFilter.Frameworks]: ConventionFilterLevel.Workspace,
38
+ [ConventionAppliesToFilter.Languages]: ConventionFilterLevel.File,
39
+ [ConventionAppliesToFilter.FileGlobs]: ConventionFilterLevel.File,
40
+ [ConventionAppliesToFilter.ConstructKinds]: ConventionFilterLevel.Reserved,
41
+ });
42
+ /** Reasons are listed workspace filters first, then per-file, then reserved. */
43
+ const FILTER_ORDER = [
44
+ ConventionAppliesToFilter.ProfileIds,
45
+ ConventionAppliesToFilter.Frameworks,
46
+ ConventionAppliesToFilter.Languages,
47
+ ConventionAppliesToFilter.FileGlobs,
48
+ ConventionAppliesToFilter.ConstructKinds,
49
+ ];
50
+ /** The convention's declared values for `filter` — `[]` for an absent filter (or a non-list, which the loader refuses). */
51
+ export function declaredAppliesTo(convention, filter) {
52
+ const value = convention.appliesTo?.[filter];
53
+ return Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
54
+ }
55
+ /** One realpath per distinct file per inspection — `conventionScope` judges every file once per per-file filter. */
56
+ const SPELLINGS = new WeakMap();
57
+ /**
58
+ * `abs` with every symlink resolved. A path that does not exist (a file a diff
59
+ * deleted, a path a test names) resolves through its nearest existing ancestor,
60
+ * so `/var/…/gone.ts` and `/private/var/…/gone.ts` still agree.
61
+ */
62
+ function canonicalPath(abs) {
63
+ let head = abs;
64
+ const tail = [];
65
+ for (;;) {
66
+ try {
67
+ const real = realpathSync(head);
68
+ return tail.length > 0 ? nodePath.join(real, ...tail.reverse()) : real;
69
+ }
70
+ catch {
71
+ const parent = nodePath.dirname(head);
72
+ if (parent === head)
73
+ return abs;
74
+ tail.push(nodePath.basename(head));
75
+ head = parent;
76
+ }
77
+ }
78
+ }
79
+ /** The lexical spelling: project-relative for an absolute path, `/`-separated, no leading `./`. */
80
+ function lexicalFilePath(projectRoot, file) {
81
+ let f = nodePath.isAbsolute(file) ? nodePath.relative(projectRoot, file) : file;
82
+ f = f.replace(/\\/g, '/');
83
+ while (f.startsWith('./'))
84
+ f = f.slice(2);
85
+ return f;
86
+ }
87
+ /**
88
+ * A file path as the per-file filters AND a rule's patterns read it:
89
+ * project-relative, `/`-separated, no leading `./`. `checkConventionsAgainstFiles`
90
+ * normalizes its file list through this once, so the scope test and every
91
+ * `filePattern` / `expectMatch` / `forbidMatch` regex see ONE spelling of a file
92
+ * (round 15 review: `--files ./src/a.ts` was covered by `fileGlobs: ['src/**']`
93
+ * here and then failed `filePattern: '^src/'` on the raw `./src/a.ts` — a false hit).
94
+ *
95
+ * The spelling is REALPATH-canonical (round 15 follow-up, F9): the file and the
96
+ * project root are both resolved through their symlinks before one is made
97
+ * relative to the other, so a symlinked absolute path (`/link/src/a.ts` with
98
+ * `/link → the project`, or macOS `/var/…` for a root at `/private/var/…`)
99
+ * behaves exactly like its target — it read `../link/src/a.ts`, which no
100
+ * `fileGlobs` selected, so the convention was silently not applicable. A path
101
+ * whose target lies OUTSIDE the project (an in-project symlink to a sibling
102
+ * checkout) keeps its lexical in-project spelling: that is where it is in scope.
103
+ */
104
+ export function conventionFilePath(inspection, file) {
105
+ let cache = SPELLINGS.get(inspection);
106
+ if (!cache) {
107
+ cache = { realRoot: canonicalPath(nodePath.resolve(inspection.projectRoot)), files: new Map() };
108
+ SPELLINGS.set(inspection, cache);
109
+ }
110
+ const known = cache.files.get(file);
111
+ if (known !== undefined)
112
+ return known;
113
+ const real = canonicalPath(nodePath.resolve(inspection.projectRoot, file));
114
+ const rel = nodePath.relative(cache.realRoot, real);
115
+ const inside = rel.length > 0 && rel !== '..' && !rel.startsWith(`..${nodePath.sep}`) && !nodePath.isAbsolute(rel);
116
+ const spelled = inside ? rel.split(nodePath.sep).join('/') : lexicalFilePath(inspection.projectRoot, file);
117
+ cache.files.set(file, spelled);
118
+ return spelled;
119
+ }
120
+ function list(values) {
121
+ return `[${values.join(', ')}]`;
122
+ }
123
+ function reason(filter, declared, observed, matched, detail) {
124
+ return {
125
+ filter,
126
+ level: CONVENTION_FILTER_LEVELS[filter],
127
+ declared,
128
+ observed,
129
+ matched,
130
+ message: `appliesTo.${filter} ${list(declared)}: ${detail}`,
131
+ };
132
+ }
133
+ /** A workspace filter: any declared id among the detected ones. */
134
+ function judgeWorkspace(filter, declared, detected, noun) {
135
+ const hit = declared.filter((d) => detected.includes(d));
136
+ if (hit.length > 0)
137
+ return reason(filter, declared, detected, true, `detected ${hit.join(', ')}`);
138
+ const seen = detected.length > 0 ? `detected: ${detected.join(', ')}` : `no ${noun} detected`;
139
+ return reason(filter, declared, detected, false, `none detected (${seen})`);
140
+ }
141
+ function judge(filter, declared, inspection, file) {
142
+ switch (filter) {
143
+ case ConventionAppliesToFilter.ProfileIds:
144
+ return judgeWorkspace(filter, declared, [...(inspection.workspace?.profiles ?? [])], 'profile');
145
+ case ConventionAppliesToFilter.Frameworks:
146
+ return judgeWorkspace(filter, declared, (inspection.workspace?.frameworks ?? []).map((f) => f.id), 'framework');
147
+ case ConventionAppliesToFilter.ConstructKinds:
148
+ return reason(filter, declared, [], true, 'reserved — not evaluated (the convention applies regardless)');
149
+ case ConventionAppliesToFilter.Languages: {
150
+ if (file === undefined)
151
+ return reason(filter, declared, [], true, 'decided per file');
152
+ const path = conventionFilePath(inspection, file);
153
+ const language = fileLanguageOf(path)?.id;
154
+ if (language === undefined)
155
+ return reason(filter, declared, [], false, `${path} has no known language`);
156
+ return reason(filter, declared, [language], declared.includes(language), `${path} is ${language}`);
157
+ }
158
+ case ConventionAppliesToFilter.FileGlobs: {
159
+ if (file === undefined)
160
+ return reason(filter, declared, [], true, 'decided per file');
161
+ const path = conventionFilePath(inspection, file);
162
+ const selected = globListSelects(path, declared);
163
+ return reason(filter, declared, [path], selected, `${selected ? 'selects' : 'does not select'} ${path}`);
164
+ }
165
+ }
166
+ }
167
+ /**
168
+ * Does `convention` apply here — to the workspace, and (given `file`) to that
169
+ * file? Without `file` only the workspace filters decide; the per-file ones
170
+ * are listed as `decided per file`. See the module doc for the table.
171
+ */
172
+ export function conventionApplicability(convention, inspection, file) {
173
+ const reasons = [];
174
+ for (const filter of FILTER_ORDER) {
175
+ const declared = declaredAppliesTo(convention, filter);
176
+ if (declared.length === 0)
177
+ continue;
178
+ reasons.push(judge(filter, declared, inspection, file));
179
+ }
180
+ return { applicable: reasons.every((r) => r.matched), reasons };
181
+ }
182
+ /**
183
+ * Which of `files` `convention` covers — per file through
184
+ * {@link conventionApplicability}, so `conventions check` and the rule-graph
185
+ * bridge (which both call this) cannot disagree.
186
+ *
187
+ * Not applicable when a workspace filter excludes it, or when `files` is
188
+ * non-empty and no file passes the per-file filters (the per-file reasons
189
+ * then count what each filter selected across the list). An EMPTY list keeps
190
+ * a workspace-applicable convention applicable over nothing — the caller's own
191
+ * empty-scope verdict decides that case.
192
+ */
193
+ export function conventionScope(convention, inspection, files) {
194
+ const conventionId = convention.id;
195
+ const workspace = conventionApplicability(convention, inspection);
196
+ if (!workspace.applicable)
197
+ return { conventionId, applicable: false, files: [], reasons: workspace.reasons };
198
+ const perFile = FILTER_ORDER.filter((f) => CONVENTION_FILTER_LEVELS[f] === ConventionFilterLevel.File && declaredAppliesTo(convention, f).length > 0);
199
+ if (perFile.length === 0 || files.length === 0) {
200
+ return { conventionId, applicable: true, files: [...files], reasons: workspace.reasons };
201
+ }
202
+ const covered = [];
203
+ const admitted = new Map();
204
+ const seen = new Map();
205
+ for (const file of files) {
206
+ const verdict = conventionApplicability(convention, inspection, file);
207
+ if (verdict.applicable)
208
+ covered.push(file);
209
+ for (const r of verdict.reasons) {
210
+ if (r.level !== ConventionFilterLevel.File)
211
+ continue;
212
+ if (r.matched)
213
+ admitted.set(r.filter, (admitted.get(r.filter) ?? 0) + 1);
214
+ if (r.filter === ConventionAppliesToFilter.Languages) {
215
+ const s = seen.get(r.filter) ?? new Set();
216
+ for (const o of r.observed)
217
+ s.add(o);
218
+ seen.set(r.filter, s);
219
+ }
220
+ }
221
+ }
222
+ if (covered.length > 0)
223
+ return { conventionId, applicable: true, files: covered, reasons: workspace.reasons };
224
+ // No file passed: say, per declared per-file filter, what it selected across
225
+ // the list. A filter that admitted NO file excluded the convention (matched:
226
+ // false); one that admitted some did not (matched: true) — unless EVERY
227
+ // per-file filter admitted some file and none passed them all: then the
228
+ // intersection excluded it, and each filter says so. So the excluding reasons
229
+ // are never empty and never name a filter that excluded nothing (round 15
230
+ // review: `fileGlobs` read "selects 1 of 1 file(s)" as an excluding reason).
231
+ const n = files.length;
232
+ const intersectionOnly = perFile.every((filter) => (admitted.get(filter) ?? 0) > 0);
233
+ const together = intersectionOnly ? ' — but no file in scope passes every per-file filter together' : '';
234
+ const aggregated = perFile.map((filter) => {
235
+ const declared = declaredAppliesTo(convention, filter);
236
+ const count = admitted.get(filter) ?? 0;
237
+ const matched = count > 0 && !intersectionOnly;
238
+ if (filter === ConventionAppliesToFilter.Languages) {
239
+ const langs = [...(seen.get(filter) ?? new Set())].sort();
240
+ const detail = `${count} of ${n} file(s) in scope ${count === 1 ? 'is' : 'are'} a listed language (seen: ${langs.length > 0 ? langs.join(', ') : 'none known'})${together}`;
241
+ return reason(filter, declared, langs, matched, detail);
242
+ }
243
+ return reason(filter, declared, [], matched, `selects ${count} of ${n} file(s) in scope${together}`);
244
+ });
245
+ const workspaceReasons = workspace.reasons.filter((r) => r.level !== ConventionFilterLevel.File);
246
+ return { conventionId, applicable: false, files: [], reasons: [...workspaceReasons, ...aggregated] };
247
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Where an `appliesTo` filter is decided (round 15, 15.1) — see
3
+ * `conventionApplicability`.
4
+ */
5
+ export declare enum ConventionFilterLevel {
6
+ /** Decided once per workspace, from what the workspace detectors saw (`profileIds`, `frameworks`). */
7
+ Workspace = "workspace",
8
+ /** Decided per file (`fileGlobs`, `languages`). */
9
+ File = "file",
10
+ /** Loaded and never evaluated — the convention applies regardless (`constructKinds`). */
11
+ Reserved = "reserved"
12
+ }
13
+ //# sourceMappingURL=convention-filter-level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convention-filter-level.d.ts","sourceRoot":"","sources":["../src/convention-filter-level.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,qBAAqB;IAC/B,sGAAsG;IACtG,SAAS,cAAc;IACvB,mDAAmD;IACnD,IAAI,SAAS;IACb,yFAAyF;IACzF,QAAQ,aAAa;CACtB"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Where an `appliesTo` filter is decided (round 15, 15.1) — see
3
+ * `conventionApplicability`.
4
+ */
5
+ export var ConventionFilterLevel;
6
+ (function (ConventionFilterLevel) {
7
+ /** Decided once per workspace, from what the workspace detectors saw (`profileIds`, `frameworks`). */
8
+ ConventionFilterLevel["Workspace"] = "workspace";
9
+ /** Decided per file (`fileGlobs`, `languages`). */
10
+ ConventionFilterLevel["File"] = "file";
11
+ /** Loaded and never evaluated — the convention applies regardless (`constructKinds`). */
12
+ ConventionFilterLevel["Reserved"] = "reserved";
13
+ })(ConventionFilterLevel || (ConventionFilterLevel = {}));
@@ -1,5 +1,7 @@
1
- import { type IConvention } from '@shrkcrft/plugin-api';
1
+ import { ConventionSeverity, type IConvention } from '@shrkcrft/plugin-api';
2
2
  import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
3
+ import type { INotApplicableConvention } from './i-not-applicable-convention.js';
4
+ import { type IRejectedEntry } from '@shrkcrft/core';
3
5
  export declare const CONVENTION_REGISTRY_SCHEMA = "sharkcraft.convention-registry/v1";
4
6
  export declare enum ConventionSource {
5
7
  Local = "local",
@@ -13,15 +15,36 @@ export interface IConventionEntry {
13
15
  readonly sourceFile: string;
14
16
  }
15
17
  export interface IConventionDoctorIssue {
16
- readonly severity: 'info' | 'warning' | 'error';
18
+ readonly severity: ConventionSeverity;
17
19
  readonly code: string;
18
20
  readonly message: string;
19
21
  readonly conventionId?: string;
20
22
  readonly source?: string;
21
23
  }
24
+ /** The convention FILES a load discovered, and the ones it could not read — the doctor's coverage. */
25
+ export interface IConventionFileScan {
26
+ /** Every convention file the load tried (local defaults, `conventionFiles`, pack `conventionFiles`). */
27
+ readonly discovered: number;
28
+ /** Discovered but never read (missing, or failed to import) — `file — reason`, project-relative. */
29
+ readonly unread: readonly string[];
30
+ }
31
+ /**
32
+ * THE convention acceptance predicate (round 12, 12.1): every error of
33
+ * `validateConvention`, `<field>: <message>` — `[]` means accepted. The
34
+ * loader and `packs test --load` refuse exactly the same entries.
35
+ */
36
+ export declare function conventionRejectionReasons(raw: unknown): readonly string[];
22
37
  export declare function loadConventions(inspection: ISharkcraftInspection): Promise<{
23
38
  entries: readonly IConventionEntry[];
24
39
  issues: readonly IConventionDoctorIssue[];
40
+ files: IConventionFileScan;
41
+ /**
42
+ * Every declared convention the loader refused (round 12, 12.1) — invalid
43
+ * or a duplicate id — with its position and every reason. The `issues`
44
+ * above still carry the per-field `invalid-convention` lines `conventions
45
+ * doctor` prints; this is the record THE rejection channel lifts.
46
+ */
47
+ rejected: readonly IRejectedEntry[];
25
48
  }>;
26
49
  export declare function listConventions(inspection: ISharkcraftInspection): Promise<readonly IConventionEntry[]>;
27
50
  export declare function findConvention(inspection: ISharkcraftInspection, id: string): Promise<IConventionEntry | null>;
@@ -31,7 +54,7 @@ export interface IConventionCheckHit {
31
54
  readonly ruleId: string;
32
55
  readonly file: string;
33
56
  readonly line?: number;
34
- readonly severity: 'info' | 'warning' | 'error';
57
+ readonly severity: ConventionSeverity;
35
58
  readonly message: string;
36
59
  }
37
60
  export interface IConventionCheckReport {
@@ -39,6 +62,30 @@ export interface IConventionCheckReport {
39
62
  readonly filesScanned: number;
40
63
  readonly hits: readonly IConventionCheckHit[];
41
64
  readonly verdict: 'clean' | 'has-violations';
65
+ /**
66
+ * Conventions that do not apply here (round 15, 15.1) — never evaluated, each
67
+ * with the `appliesTo` filters that excluded it. `conventions check` prints
68
+ * every one and accepts it explicitly (`acceptedBy: 'appliesTo'`).
69
+ */
70
+ readonly notApplicable: readonly INotApplicableConvention[];
71
+ /** How many files in scope each APPLICABLE convention covers, by id (round 15). */
72
+ readonly filesInScope: Readonly<Record<string, number>>;
42
73
  }
43
- export declare function checkConventionsAgainstFiles(inspection: ISharkcraftInspection, files: readonly string[]): Promise<IConventionCheckReport>;
74
+ /**
75
+ * Run the loaded conventions against `files`. Which files a convention covers
76
+ * is `conventionScope` — THE applicability authority (round 15), the same one
77
+ * the rule-graph bridge reads — so every `appliesTo` filter scopes, `**`
78
+ * spans zero or more segments, and a `!` glob subtracts (a private matcher
79
+ * here missed `src/a.ts` under `src/**\/*.ts` and ignored `!`). A convention
80
+ * that does not apply is never evaluated and is reported in `notApplicable`.
81
+ *
82
+ * Per covered file, each rule: `filePattern` and `expectMatch` must match the
83
+ * path (a miss is a hit), `forbidMatch` must not (a match is a hit).
84
+ *
85
+ * Every file is read in ONE spelling — `conventionFilePath` (project-relative,
86
+ * `/`-separated, no `./`), the one the scope test reads — so a rule pattern
87
+ * never tests a spelling the glob did not, and a hit names that path (round 15
88
+ * review: `./src/a.ts` was covered by `src/**` and then failed `^src/`).
89
+ */
90
+ export declare function checkConventionsAgainstFiles(inspection: ISharkcraftInspection, inputFiles: readonly string[]): Promise<IConventionCheckReport>;
44
91
  //# sourceMappingURL=convention-registry.d.ts.map