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

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 (693) 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 +51 -4
  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/command-recommender.d.ts +45 -2
  72. package/dist/command-recommender.d.ts.map +1 -1
  73. package/dist/command-recommender.js +41 -263
  74. package/dist/command-resolution-status.d.ts +44 -0
  75. package/dist/command-resolution-status.d.ts.map +1 -0
  76. package/dist/command-resolution-status.js +44 -0
  77. package/dist/command-safety-level.d.ts +15 -0
  78. package/dist/command-safety-level.d.ts.map +1 -0
  79. package/dist/command-safety-level.js +43 -0
  80. package/dist/command-taxonomy.js +1 -1
  81. package/dist/compliance-evidence.js +1 -1
  82. package/dist/compliance-profiles.js +1 -1
  83. package/dist/construct-registry.d.ts +40 -0
  84. package/dist/construct-registry.d.ts.map +1 -1
  85. package/dist/construct-registry.js +186 -82
  86. package/dist/context-tuning.d.ts +4 -0
  87. package/dist/context-tuning.d.ts.map +1 -1
  88. package/dist/context-tuning.js +10 -7
  89. package/dist/contract-template-registry.d.ts +10 -0
  90. package/dist/contract-template-registry.d.ts.map +1 -1
  91. package/dist/contract-template-registry.js +59 -33
  92. package/dist/contribution-kind.d.ts +52 -0
  93. package/dist/contribution-kind.d.ts.map +1 -0
  94. package/dist/contribution-kind.js +52 -0
  95. package/dist/contribution-load-failures.d.ts +106 -0
  96. package/dist/contribution-load-failures.d.ts.map +1 -0
  97. package/dist/contribution-load-failures.js +575 -0
  98. package/dist/contributions-report.d.ts +28 -0
  99. package/dist/contributions-report.d.ts.map +1 -0
  100. package/dist/contributions-report.js +242 -0
  101. package/dist/convention-registry.d.ts +22 -0
  102. package/dist/convention-registry.d.ts.map +1 -1
  103. package/dist/convention-registry.js +79 -39
  104. package/dist/coverage-report.d.ts.map +1 -1
  105. package/dist/coverage-report.js +6 -6
  106. package/dist/custom-checks.d.ts +60 -1
  107. package/dist/custom-checks.d.ts.map +1 -1
  108. package/dist/custom-checks.js +159 -6
  109. package/dist/dashboard/dashboard-data.d.ts +6 -0
  110. package/dist/dashboard/dashboard-data.d.ts.map +1 -1
  111. package/dist/dashboard/dashboard-data.js +99 -8
  112. package/dist/dashboard/dashboard-knowledge.d.ts.map +1 -1
  113. package/dist/dashboard/dashboard-knowledge.js +14 -2
  114. package/dist/decision-records.d.ts +20 -0
  115. package/dist/decision-records.d.ts.map +1 -1
  116. package/dist/decision-records.js +68 -20
  117. package/dist/declared-cross-references.d.ts +61 -0
  118. package/dist/declared-cross-references.d.ts.map +1 -0
  119. package/dist/declared-cross-references.js +550 -0
  120. package/dist/declared-gate-plane-rules.d.ts +24 -0
  121. package/dist/declared-gate-plane-rules.d.ts.map +1 -0
  122. package/dist/declared-gate-plane-rules.js +39 -0
  123. package/dist/declared-reference-coverage.d.ts +27 -0
  124. package/dist/declared-reference-coverage.d.ts.map +1 -0
  125. package/dist/declared-reference-coverage.js +50 -0
  126. package/dist/declared-xref-status.d.ts +19 -0
  127. package/dist/declared-xref-status.d.ts.map +1 -0
  128. package/dist/declared-xref-status.js +19 -0
  129. package/dist/delegate-pack-recipes.d.ts +13 -2
  130. package/dist/delegate-pack-recipes.d.ts.map +1 -1
  131. package/dist/delegate-pack-recipes.js +45 -14
  132. package/dist/demo-package.js +2 -2
  133. package/dist/demo-script.js +2 -2
  134. package/dist/demo-workflow.js +3 -3
  135. package/dist/dev-cycle.js +1 -1
  136. package/dist/dev-session.js +1 -1
  137. package/dist/doc-references.d.ts +23 -2
  138. package/dist/doc-references.d.ts.map +1 -1
  139. package/dist/doc-references.js +96 -17
  140. package/dist/doctor-result.d.ts +8 -0
  141. package/dist/doctor-result.d.ts.map +1 -1
  142. package/dist/doctor-verdict-kind.d.ts +19 -0
  143. package/dist/doctor-verdict-kind.d.ts.map +1 -0
  144. package/dist/doctor-verdict-kind.js +19 -0
  145. package/dist/doctor-verdict.d.ts +18 -0
  146. package/dist/doctor-verdict.d.ts.map +1 -0
  147. package/dist/doctor-verdict.js +28 -0
  148. package/dist/drift.d.ts +17 -0
  149. package/dist/drift.d.ts.map +1 -1
  150. package/dist/drift.js +40 -10
  151. package/dist/entrypoint-matrix.d.ts.map +1 -1
  152. package/dist/entrypoint-matrix.js +4 -1
  153. package/dist/feedback-ingestion.d.ts +28 -2
  154. package/dist/feedback-ingestion.d.ts.map +1 -1
  155. package/dist/feedback-ingestion.js +68 -19
  156. package/dist/fix-preview.d.ts.map +1 -1
  157. package/dist/fix-preview.js +9 -5
  158. package/dist/framework-extractor-outcomes.d.ts +27 -0
  159. package/dist/framework-extractor-outcomes.d.ts.map +1 -0
  160. package/dist/framework-extractor-outcomes.js +83 -0
  161. package/dist/fuzzy-impact.js +1 -1
  162. package/dist/healing-plan.d.ts.map +1 -1
  163. package/dist/healing-plan.js +3 -4
  164. package/dist/helper-catalog.d.ts +25 -0
  165. package/dist/helper-catalog.d.ts.map +1 -0
  166. package/dist/helper-catalog.js +91 -0
  167. package/dist/helper-registry.d.ts.map +1 -1
  168. package/dist/helper-registry.js +17 -1
  169. package/dist/helper-view.d.ts +33 -0
  170. package/dist/helper-view.d.ts.map +1 -0
  171. package/dist/helper-view.js +1 -0
  172. package/dist/i-asset-doctor-flags.d.ts +16 -0
  173. package/dist/i-asset-doctor-flags.d.ts.map +1 -0
  174. package/dist/i-asset-doctor-flags.js +1 -0
  175. package/dist/i-command-resolution.d.ts +22 -0
  176. package/dist/i-command-resolution.d.ts.map +1 -0
  177. package/dist/i-command-resolution.js +1 -0
  178. package/dist/i-command-resolve-options.d.ts +24 -0
  179. package/dist/i-command-resolve-options.d.ts.map +1 -0
  180. package/dist/i-command-resolve-options.js +1 -0
  181. package/dist/i-command-safety.d.ts +13 -0
  182. package/dist/i-command-safety.d.ts.map +1 -0
  183. package/dist/i-command-safety.js +1 -0
  184. package/dist/i-contribution-accepted-entry.d.ts +18 -0
  185. package/dist/i-contribution-accepted-entry.d.ts.map +1 -0
  186. package/dist/i-contribution-accepted-entry.js +1 -0
  187. package/dist/i-contribution-entry-rejection.d.ts +21 -0
  188. package/dist/i-contribution-entry-rejection.d.ts.map +1 -0
  189. package/dist/i-contribution-entry-rejection.js +1 -0
  190. package/dist/i-contribution-file-issue.d.ts +18 -0
  191. package/dist/i-contribution-file-issue.d.ts.map +1 -0
  192. package/dist/i-contribution-file-issue.js +1 -0
  193. package/dist/i-contribution-file-report.d.ts +40 -0
  194. package/dist/i-contribution-file-report.d.ts.map +1 -0
  195. package/dist/i-contribution-file-report.js +1 -0
  196. package/dist/i-contribution-file-validation.d.ts +24 -0
  197. package/dist/i-contribution-file-validation.d.ts.map +1 -0
  198. package/dist/i-contribution-file-validation.js +1 -0
  199. package/dist/i-contributions-report.d.ts +31 -0
  200. package/dist/i-contributions-report.d.ts.map +1 -0
  201. package/dist/i-contributions-report.js +1 -0
  202. package/dist/i-declared-xref-field.d.ts +25 -0
  203. package/dist/i-declared-xref-field.d.ts.map +1 -0
  204. package/dist/i-declared-xref-field.js +1 -0
  205. package/dist/i-declared-xref-issue.d.ts +25 -0
  206. package/dist/i-declared-xref-issue.d.ts.map +1 -0
  207. package/dist/i-declared-xref-issue.js +1 -0
  208. package/dist/i-declared-xref-report.d.ts +48 -0
  209. package/dist/i-declared-xref-report.d.ts.map +1 -0
  210. package/dist/i-declared-xref-report.js +1 -0
  211. package/dist/i-declared-xref-row.d.ts +29 -0
  212. package/dist/i-declared-xref-row.d.ts.map +1 -0
  213. package/dist/i-declared-xref-row.js +1 -0
  214. package/dist/i-doctor-verdict.d.ts +10 -0
  215. package/dist/i-doctor-verdict.d.ts.map +1 -0
  216. package/dist/i-doctor-verdict.js +1 -0
  217. package/dist/i-kind-outcomes.d.ts +13 -0
  218. package/dist/i-kind-outcomes.d.ts.map +1 -0
  219. package/dist/i-kind-outcomes.js +1 -0
  220. package/dist/i-pack-doctor-verdict.d.ts +15 -0
  221. package/dist/i-pack-doctor-verdict.d.ts.map +1 -0
  222. package/dist/i-pack-doctor-verdict.js +1 -0
  223. package/dist/i-probed-id-field.d.ts +17 -0
  224. package/dist/i-probed-id-field.d.ts.map +1 -0
  225. package/dist/i-probed-id-field.js +1 -0
  226. package/dist/i-reference-kind-declaration.d.ts +38 -0
  227. package/dist/i-reference-kind-declaration.d.ts.map +1 -0
  228. package/dist/i-reference-kind-declaration.js +1 -0
  229. package/dist/i-reference-warm-options.d.ts +21 -0
  230. package/dist/i-reference-warm-options.d.ts.map +1 -0
  231. package/dist/i-reference-warm-options.js +1 -0
  232. package/dist/i-registry-outcomes.d.ts +16 -0
  233. package/dist/i-registry-outcomes.d.ts.map +1 -0
  234. package/dist/i-registry-outcomes.js +1 -0
  235. package/dist/i-scaffold-pattern-doctor-report.d.ts +35 -0
  236. package/dist/i-scaffold-pattern-doctor-report.d.ts.map +1 -0
  237. package/dist/i-scaffold-pattern-doctor-report.js +1 -0
  238. package/dist/i-search-tuning-key-probe.d.ts +30 -0
  239. package/dist/i-search-tuning-key-probe.d.ts.map +1 -0
  240. package/dist/i-search-tuning-key-probe.js +1 -0
  241. package/dist/i-search-tuning-lint-issue.d.ts +61 -0
  242. package/dist/i-search-tuning-lint-issue.d.ts.map +1 -0
  243. package/dist/i-search-tuning-lint-issue.js +1 -0
  244. package/dist/i-search-tuning-lint-report.d.ts +38 -0
  245. package/dist/i-search-tuning-lint-report.d.ts.map +1 -0
  246. package/dist/i-search-tuning-lint-report.js +1 -0
  247. package/dist/i-unresolvable-reference-scan.d.ts +14 -0
  248. package/dist/i-unresolvable-reference-scan.d.ts.map +1 -0
  249. package/dist/i-unresolvable-reference-scan.js +1 -0
  250. package/dist/i-unresolvable-reference.d.ts +29 -0
  251. package/dist/i-unresolvable-reference.d.ts.map +1 -0
  252. package/dist/i-unresolvable-reference.js +1 -0
  253. package/dist/i-workspace-profile-payload.d.ts +12 -0
  254. package/dist/i-workspace-profile-payload.d.ts.map +1 -0
  255. package/dist/i-workspace-profile-payload.js +1 -0
  256. package/dist/impact-analysis.d.ts +15 -0
  257. package/dist/impact-analysis.d.ts.map +1 -1
  258. package/dist/impact-analysis.js +58 -13
  259. package/dist/impact-render.d.ts.map +1 -1
  260. package/dist/impact-render.js +22 -0
  261. package/dist/import-hygiene.d.ts +35 -1
  262. package/dist/import-hygiene.d.ts.map +1 -1
  263. package/dist/import-hygiene.js +107 -13
  264. package/dist/index.d.ts +141 -0
  265. package/dist/index.d.ts.map +1 -1
  266. package/dist/index.js +172 -0
  267. package/dist/inspection-discovery.d.ts +45 -0
  268. package/dist/inspection-discovery.d.ts.map +1 -0
  269. package/dist/inspection-discovery.js +70 -0
  270. package/dist/knowledge-advisory-code.d.ts +17 -0
  271. package/dist/knowledge-advisory-code.d.ts.map +1 -0
  272. package/dist/knowledge-advisory-code.js +17 -0
  273. package/dist/knowledge-aged-entry.d.ts +10 -0
  274. package/dist/knowledge-aged-entry.d.ts.map +1 -0
  275. package/dist/knowledge-aged-entry.js +1 -0
  276. package/dist/knowledge-authoring.d.ts +24 -1
  277. package/dist/knowledge-authoring.d.ts.map +1 -1
  278. package/dist/knowledge-authoring.js +46 -7
  279. package/dist/knowledge-entry-verdict-record.d.ts +22 -0
  280. package/dist/knowledge-entry-verdict-record.d.ts.map +1 -0
  281. package/dist/knowledge-entry-verdict-record.js +1 -0
  282. package/dist/knowledge-entry-verdict.d.ts +17 -0
  283. package/dist/knowledge-entry-verdict.d.ts.map +1 -0
  284. package/dist/knowledge-entry-verdict.js +17 -0
  285. package/dist/knowledge-graph.d.ts +6 -0
  286. package/dist/knowledge-graph.d.ts.map +1 -1
  287. package/dist/knowledge-graph.js +18 -7
  288. package/dist/knowledge-kind-bucket.d.ts +19 -0
  289. package/dist/knowledge-kind-bucket.d.ts.map +1 -0
  290. package/dist/knowledge-kind-bucket.js +1 -0
  291. package/dist/knowledge-load-failure.d.ts +23 -0
  292. package/dist/knowledge-load-failure.d.ts.map +1 -0
  293. package/dist/knowledge-load-failure.js +1 -0
  294. package/dist/knowledge-reference-kind-bucket.d.ts +11 -0
  295. package/dist/knowledge-reference-kind-bucket.d.ts.map +1 -0
  296. package/dist/knowledge-reference-kind-bucket.js +1 -0
  297. package/dist/knowledge-stale-advisory.d.ts +14 -0
  298. package/dist/knowledge-stale-advisory.d.ts.map +1 -0
  299. package/dist/knowledge-stale-advisory.js +1 -0
  300. package/dist/knowledge-stale-coverage.d.ts +19 -0
  301. package/dist/knowledge-stale-coverage.d.ts.map +1 -0
  302. package/dist/knowledge-stale-coverage.js +1 -0
  303. package/dist/knowledge-stale-gate-flags.d.ts +33 -0
  304. package/dist/knowledge-stale-gate-flags.d.ts.map +1 -0
  305. package/dist/knowledge-stale-gate-flags.js +1 -0
  306. package/dist/knowledge-stale-gate-input.d.ts +46 -0
  307. package/dist/knowledge-stale-gate-input.d.ts.map +1 -0
  308. package/dist/knowledge-stale-gate-input.js +1 -0
  309. package/dist/knowledge-stale-gate-result.d.ts +33 -0
  310. package/dist/knowledge-stale-gate-result.d.ts.map +1 -0
  311. package/dist/knowledge-stale-gate-result.js +1 -0
  312. package/dist/knowledge-stale-gate-rule.d.ts +33 -0
  313. package/dist/knowledge-stale-gate-rule.d.ts.map +1 -0
  314. package/dist/knowledge-stale-gate-rule.js +1 -0
  315. package/dist/knowledge-stale-gate-violation.d.ts +13 -0
  316. package/dist/knowledge-stale-gate-violation.d.ts.map +1 -0
  317. package/dist/knowledge-stale-gate-violation.js +1 -0
  318. package/dist/knowledge-stale-gate.d.ts +83 -0
  319. package/dist/knowledge-stale-gate.d.ts.map +1 -0
  320. package/dist/knowledge-stale-gate.js +429 -0
  321. package/dist/knowledge-stale-quality-gate.d.ts +26 -0
  322. package/dist/knowledge-stale-quality-gate.d.ts.map +1 -0
  323. package/dist/knowledge-stale-quality-gate.js +110 -0
  324. package/dist/knowledge-stale.d.ts +122 -9
  325. package/dist/knowledge-stale.d.ts.map +1 -1
  326. package/dist/knowledge-stale.js +996 -291
  327. package/dist/knowledge-unverifiable-reason.d.ts +12 -0
  328. package/dist/knowledge-unverifiable-reason.d.ts.map +1 -0
  329. package/dist/knowledge-unverifiable-reason.js +12 -0
  330. package/dist/loader-diagnostics.d.ts +14 -2
  331. package/dist/loader-diagnostics.d.ts.map +1 -1
  332. package/dist/match-terms.d.ts +48 -0
  333. package/dist/match-terms.d.ts.map +1 -0
  334. package/dist/match-terms.js +155 -0
  335. package/dist/migration-profile-registry.d.ts +10 -0
  336. package/dist/migration-profile-registry.d.ts.map +1 -1
  337. package/dist/migration-profile-registry.js +57 -34
  338. package/dist/migration-readiness.d.ts.map +1 -1
  339. package/dist/migration-readiness.js +1 -3
  340. package/dist/nearest-id.d.ts +10 -26
  341. package/dist/nearest-id.d.ts.map +1 -1
  342. package/dist/nearest-id.js +9 -59
  343. package/dist/pack-asset-freshness.d.ts +65 -0
  344. package/dist/pack-asset-freshness.d.ts.map +1 -0
  345. package/dist/pack-asset-freshness.js +340 -0
  346. package/dist/pack-author-ux.d.ts +24 -3
  347. package/dist/pack-author-ux.d.ts.map +1 -1
  348. package/dist/pack-author-ux.js +87 -93
  349. package/dist/pack-contributions-inventory.d.ts +79 -39
  350. package/dist/pack-contributions-inventory.d.ts.map +1 -1
  351. package/dist/pack-contributions-inventory.js +443 -286
  352. package/dist/pack-doctor-verdict.d.ts +29 -0
  353. package/dist/pack-doctor-verdict.d.ts.map +1 -0
  354. package/dist/pack-doctor-verdict.js +45 -0
  355. package/dist/pack-doctor.d.ts +74 -1
  356. package/dist/pack-doctor.d.ts.map +1 -1
  357. package/dist/pack-doctor.js +281 -1
  358. package/dist/pack-helper-plan.d.ts +24 -0
  359. package/dist/pack-helper-plan.d.ts.map +1 -0
  360. package/dist/pack-helper-plan.js +77 -0
  361. package/dist/pack-helper-registry.d.ts +14 -0
  362. package/dist/pack-helper-registry.d.ts.map +1 -1
  363. package/dist/pack-helper-registry.js +76 -37
  364. package/dist/pack-manifest-reader.d.ts +8 -0
  365. package/dist/pack-manifest-reader.d.ts.map +1 -0
  366. package/dist/pack-manifest-reader.js +79 -0
  367. package/dist/pack-release-check.d.ts +14 -1
  368. package/dist/pack-release-check.d.ts.map +1 -1
  369. package/dist/pack-release-check.js +23 -1
  370. package/dist/pack-signature-status.d.ts +18 -6
  371. package/dist/pack-signature-status.d.ts.map +1 -1
  372. package/dist/pack-signature-status.js +59 -105
  373. package/dist/pack-test-runner.d.ts +27 -5
  374. package/dist/pack-test-runner.d.ts.map +1 -1
  375. package/dist/pack-test-runner.js +91 -35
  376. package/dist/pack-typecheck.d.ts +8 -0
  377. package/dist/pack-typecheck.d.ts.map +1 -0
  378. package/dist/pack-typecheck.js +76 -0
  379. package/dist/plan-review.d.ts +2 -0
  380. package/dist/plan-review.d.ts.map +1 -1
  381. package/dist/plan-review.js +17 -5
  382. package/dist/plan-simulation.d.ts.map +1 -1
  383. package/dist/plan-simulation.js +16 -5
  384. package/dist/playbook-load-issue.d.ts +16 -0
  385. package/dist/playbook-load-issue.d.ts.map +1 -0
  386. package/dist/playbook-load-issue.js +1 -0
  387. package/dist/playbook-registry.d.ts +32 -1
  388. package/dist/playbook-registry.d.ts.map +1 -1
  389. package/dist/playbook-registry.js +144 -55
  390. package/dist/policy-declaration.d.ts +18 -0
  391. package/dist/policy-declaration.d.ts.map +1 -0
  392. package/dist/policy-declaration.js +1 -0
  393. package/dist/policy-engine.d.ts +8 -0
  394. package/dist/policy-engine.d.ts.map +1 -1
  395. package/dist/policy-engine.js +26 -9
  396. package/dist/policy-overrides.d.ts.map +1 -1
  397. package/dist/policy-overrides.js +4 -4
  398. package/dist/policy-registry.d.ts +27 -0
  399. package/dist/policy-registry.d.ts.map +1 -1
  400. package/dist/policy-registry.js +87 -20
  401. package/dist/probed-id-fields.d.ts +21 -0
  402. package/dist/probed-id-fields.d.ts.map +1 -0
  403. package/dist/probed-id-fields.js +25 -0
  404. package/dist/probed-id-source.d.ts +11 -0
  405. package/dist/probed-id-source.d.ts.map +1 -0
  406. package/dist/probed-id-source.js +11 -0
  407. package/dist/profile-registry.d.ts +25 -2
  408. package/dist/profile-registry.d.ts.map +1 -1
  409. package/dist/profile-registry.js +59 -6
  410. package/dist/quality-gate-examination.d.ts +15 -0
  411. package/dist/quality-gate-examination.d.ts.map +1 -0
  412. package/dist/quality-gate-examination.js +15 -0
  413. package/dist/quality-gate-row-status.d.ts +19 -0
  414. package/dist/quality-gate-row-status.d.ts.map +1 -0
  415. package/dist/quality-gate-row-status.js +28 -0
  416. package/dist/quality-gate-status.d.ts +16 -0
  417. package/dist/quality-gate-status.d.ts.map +1 -0
  418. package/dist/quality-gate-status.js +16 -0
  419. package/dist/quality-html.d.ts.map +1 -1
  420. package/dist/quality-html.js +14 -3
  421. package/dist/quality-report-coverage.d.ts +26 -0
  422. package/dist/quality-report-coverage.d.ts.map +1 -0
  423. package/dist/quality-report-coverage.js +48 -0
  424. package/dist/quality-report.d.ts +28 -1
  425. package/dist/quality-report.d.ts.map +1 -1
  426. package/dist/quality-report.js +263 -35
  427. package/dist/query-intent-kind.d.ts +18 -0
  428. package/dist/query-intent-kind.d.ts.map +1 -0
  429. package/dist/query-intent-kind.js +18 -0
  430. package/dist/query-intent-result.d.ts +23 -0
  431. package/dist/query-intent-result.d.ts.map +1 -0
  432. package/dist/query-intent-result.js +1 -0
  433. package/dist/query-intent.d.ts +18 -0
  434. package/dist/query-intent.d.ts.map +1 -0
  435. package/dist/query-intent.js +336 -0
  436. package/dist/query-resolver.d.ts +18 -0
  437. package/dist/query-resolver.d.ts.map +1 -1
  438. package/dist/query-resolver.js +7 -4
  439. package/dist/ranked-recommendations.d.ts +36 -0
  440. package/dist/ranked-recommendations.d.ts.map +1 -0
  441. package/dist/ranked-recommendations.js +1 -0
  442. package/dist/ranker-explainability.d.ts.map +1 -1
  443. package/dist/ranker-explainability.js +38 -10
  444. package/dist/recommend-recipe.d.ts +17 -0
  445. package/dist/recommend-recipe.d.ts.map +1 -0
  446. package/dist/recommend-recipe.js +1 -0
  447. package/dist/recommend-recipes.d.ts +9 -0
  448. package/dist/recommend-recipes.d.ts.map +1 -0
  449. package/dist/recommend-recipes.js +106 -0
  450. package/dist/recommendation-candidate.d.ts +30 -0
  451. package/dist/recommendation-candidate.d.ts.map +1 -0
  452. package/dist/recommendation-candidate.js +1 -0
  453. package/dist/recommendation-confidence.d.ts +27 -0
  454. package/dist/recommendation-confidence.d.ts.map +1 -0
  455. package/dist/recommendation-confidence.js +1 -0
  456. package/dist/recommendation-ranking-options.d.ts +24 -0
  457. package/dist/recommendation-ranking-options.d.ts.map +1 -0
  458. package/dist/recommendation-ranking-options.js +1 -0
  459. package/dist/recommendation-ranking.d.ts +50 -0
  460. package/dist/recommendation-ranking.d.ts.map +1 -0
  461. package/dist/recommendation-ranking.js +527 -0
  462. package/dist/recommendation-source.d.ts +23 -0
  463. package/dist/recommendation-source.d.ts.map +1 -0
  464. package/dist/recommendation-source.js +23 -0
  465. package/dist/recommendation-suppression.d.ts +14 -0
  466. package/dist/recommendation-suppression.d.ts.map +1 -0
  467. package/dist/recommendation-suppression.js +14 -0
  468. package/dist/reference-asset-kind.d.ts +14 -0
  469. package/dist/reference-asset-kind.d.ts.map +1 -0
  470. package/dist/reference-asset-kind.js +14 -0
  471. package/dist/reference-content-check.d.ts +32 -0
  472. package/dist/reference-content-check.d.ts.map +1 -0
  473. package/dist/reference-content-check.js +143 -0
  474. package/dist/reference-failure.d.ts +31 -0
  475. package/dist/reference-failure.d.ts.map +1 -0
  476. package/dist/reference-failure.js +31 -0
  477. package/dist/reference-id-status.d.ts +15 -0
  478. package/dist/reference-id-status.d.ts.map +1 -0
  479. package/dist/reference-id-status.js +15 -0
  480. package/dist/reference-kind-declarations.d.ts +42 -0
  481. package/dist/reference-kind-declarations.d.ts.map +1 -0
  482. package/dist/reference-kind-declarations.js +142 -0
  483. package/dist/reference-lookup.d.ts +6 -0
  484. package/dist/reference-lookup.d.ts.map +1 -1
  485. package/dist/reference-lookup.js +13 -5
  486. package/dist/reference-registry.d.ts +109 -11
  487. package/dist/reference-registry.d.ts.map +1 -1
  488. package/dist/reference-registry.js +186 -30
  489. package/dist/reference-subject.d.ts +20 -0
  490. package/dist/reference-subject.d.ts.map +1 -0
  491. package/dist/reference-subject.js +1 -0
  492. package/dist/registration-hint-discovery-status.d.ts +25 -0
  493. package/dist/registration-hint-discovery-status.d.ts.map +1 -0
  494. package/dist/registration-hint-discovery-status.js +25 -0
  495. package/dist/registration-hint-registry.d.ts +80 -0
  496. package/dist/registration-hint-registry.d.ts.map +1 -1
  497. package/dist/registration-hint-registry.js +356 -138
  498. package/dist/registry-lifecycle.d.ts +200 -19
  499. package/dist/registry-lifecycle.d.ts.map +1 -1
  500. package/dist/registry-lifecycle.js +526 -136
  501. package/dist/release-readiness.d.ts.map +1 -1
  502. package/dist/release-readiness.js +10 -7
  503. package/dist/release-smoke.d.ts.map +1 -1
  504. package/dist/release-smoke.js +11 -7
  505. package/dist/report-site.d.ts.map +1 -1
  506. package/dist/report-site.js +25 -7
  507. package/dist/repository-intelligence.d.ts.map +1 -1
  508. package/dist/repository-intelligence.js +3 -2
  509. package/dist/repository-knowledge-model.d.ts.map +1 -1
  510. package/dist/repository-knowledge-model.js +18 -5
  511. package/dist/resolve-project-config.d.ts +64 -0
  512. package/dist/resolve-project-config.d.ts.map +1 -1
  513. package/dist/resolve-project-config.js +240 -32
  514. package/dist/reuse/compute-reuse-coverage.d.ts +29 -0
  515. package/dist/reuse/compute-reuse-coverage.d.ts.map +1 -0
  516. package/dist/reuse/compute-reuse-coverage.js +198 -0
  517. package/dist/reuse/rank-reuse-candidates.d.ts +38 -0
  518. package/dist/reuse/rank-reuse-candidates.d.ts.map +1 -0
  519. package/dist/reuse/rank-reuse-candidates.js +212 -0
  520. package/dist/reuse/rank-reuse-options.d.ts +20 -0
  521. package/dist/reuse/rank-reuse-options.d.ts.map +1 -0
  522. package/dist/reuse/rank-reuse-options.js +1 -0
  523. package/dist/reuse/rank-reuse-suggestions.d.ts +15 -0
  524. package/dist/reuse/rank-reuse-suggestions.d.ts.map +1 -0
  525. package/dist/reuse/rank-reuse-suggestions.js +31 -0
  526. package/dist/reuse/resolve-curated-reuse.d.ts +43 -0
  527. package/dist/reuse/resolve-curated-reuse.d.ts.map +1 -0
  528. package/dist/reuse/resolve-curated-reuse.js +115 -0
  529. package/dist/reuse/reuse-candidate.d.ts +29 -0
  530. package/dist/reuse/reuse-candidate.d.ts.map +1 -0
  531. package/dist/reuse/reuse-candidate.js +1 -0
  532. package/dist/reuse/reuse-coverage-report.d.ts +74 -0
  533. package/dist/reuse/reuse-coverage-report.d.ts.map +1 -0
  534. package/dist/reuse/reuse-coverage-report.js +1 -0
  535. package/dist/reuse/reuse-curated-coverage.d.ts +36 -0
  536. package/dist/reuse/reuse-curated-coverage.d.ts.map +1 -0
  537. package/dist/reuse/reuse-curated-coverage.js +1 -0
  538. package/dist/reuse/reuse-curated-resolution.d.ts +36 -0
  539. package/dist/reuse/reuse-curated-resolution.d.ts.map +1 -0
  540. package/dist/reuse/reuse-curated-resolution.js +1 -0
  541. package/dist/reuse/reuse-curated-status.d.ts +21 -0
  542. package/dist/reuse/reuse-curated-status.d.ts.map +1 -0
  543. package/dist/reuse/reuse-curated-status.js +21 -0
  544. package/dist/reuse/reuse-match-detail.d.ts +15 -0
  545. package/dist/reuse/reuse-match-detail.d.ts.map +1 -0
  546. package/dist/reuse/reuse-match-detail.js +1 -0
  547. package/dist/reuse/reuse-ranking.d.ts +37 -0
  548. package/dist/reuse/reuse-ranking.d.ts.map +1 -0
  549. package/dist/reuse/reuse-ranking.js +1 -0
  550. package/dist/reuse/reuse-suggestion.d.ts +19 -0
  551. package/dist/reuse/reuse-suggestion.d.ts.map +1 -0
  552. package/dist/reuse/reuse-suggestion.js +1 -0
  553. package/dist/reuse/reuse-symbol-lookup.d.ts +28 -0
  554. package/dist/reuse/reuse-symbol-lookup.d.ts.map +1 -0
  555. package/dist/reuse/reuse-symbol-lookup.js +1 -0
  556. package/dist/reuse/reuse-tokenize.d.ts +11 -0
  557. package/dist/reuse/reuse-tokenize.d.ts.map +1 -0
  558. package/dist/reuse/reuse-tokenize.js +26 -0
  559. package/dist/reuse/score-reuse-name.d.ts +16 -0
  560. package/dist/reuse/score-reuse-name.d.ts.map +1 -0
  561. package/dist/reuse/score-reuse-name.js +35 -0
  562. package/dist/reuse/score-reuse-primitive.d.ts +33 -0
  563. package/dist/reuse/score-reuse-primitive.d.ts.map +1 -0
  564. package/dist/reuse/score-reuse-primitive.js +92 -0
  565. package/dist/review-packet.d.ts +2 -0
  566. package/dist/review-packet.d.ts.map +1 -1
  567. package/dist/review-packet.js +13 -6
  568. package/dist/role-views.d.ts.map +1 -1
  569. package/dist/role-views.js +16 -16
  570. package/dist/routing-recommends-channels.d.ts +24 -0
  571. package/dist/routing-recommends-channels.d.ts.map +1 -0
  572. package/dist/routing-recommends-channels.js +19 -0
  573. package/dist/run-boundary-check.d.ts +118 -0
  574. package/dist/run-boundary-check.d.ts.map +1 -0
  575. package/dist/run-boundary-check.js +592 -0
  576. package/dist/safety-audit.js +1 -1
  577. package/dist/scaffold-coverage.js +1 -1
  578. package/dist/scaffold-pattern-doctor-report.d.ts +19 -0
  579. package/dist/scaffold-pattern-doctor-report.d.ts.map +1 -0
  580. package/dist/scaffold-pattern-doctor-report.js +54 -0
  581. package/dist/scaffold-patterns.d.ts +75 -1
  582. package/dist/scaffold-patterns.d.ts.map +1 -1
  583. package/dist/scaffold-patterns.js +375 -84
  584. package/dist/schema-inventory.d.ts.map +1 -1
  585. package/dist/schema-inventory.js +4 -3
  586. package/dist/search-document-id.d.ts +52 -0
  587. package/dist/search-document-id.d.ts.map +1 -0
  588. package/dist/search-document-id.js +72 -0
  589. package/dist/search-document-prefix.d.ts +7 -0
  590. package/dist/search-document-prefix.d.ts.map +1 -0
  591. package/dist/search-document-prefix.js +1 -0
  592. package/dist/search-index.d.ts.map +1 -1
  593. package/dist/search-index.js +20 -23
  594. package/dist/search-tuning-explain.d.ts +6 -0
  595. package/dist/search-tuning-explain.d.ts.map +1 -1
  596. package/dist/search-tuning-explain.js +19 -17
  597. package/dist/search-tuning-key-probes.d.ts +16 -0
  598. package/dist/search-tuning-key-probes.d.ts.map +1 -0
  599. package/dist/search-tuning-key-probes.js +65 -0
  600. package/dist/search-tuning-key-resolution.d.ts +25 -0
  601. package/dist/search-tuning-key-resolution.d.ts.map +1 -0
  602. package/dist/search-tuning-key-resolution.js +1 -0
  603. package/dist/search-tuning-key-resolver.d.ts +4 -0
  604. package/dist/search-tuning-key-resolver.d.ts.map +1 -0
  605. package/dist/search-tuning-key-resolver.js +107 -0
  606. package/dist/search-tuning-key-status.d.ts +24 -0
  607. package/dist/search-tuning-key-status.d.ts.map +1 -0
  608. package/dist/search-tuning-key-status.js +24 -0
  609. package/dist/search-tuning-lint.d.ts +9 -0
  610. package/dist/search-tuning-lint.d.ts.map +1 -0
  611. package/dist/search-tuning-lint.js +468 -0
  612. package/dist/search-tuning-registry.d.ts +43 -0
  613. package/dist/search-tuning-registry.d.ts.map +1 -1
  614. package/dist/search-tuning-registry.js +214 -49
  615. package/dist/self-audit.d.ts +12 -0
  616. package/dist/self-audit.d.ts.map +1 -1
  617. package/dist/self-audit.js +36 -10
  618. package/dist/self-config-doctor-v2.d.ts +145 -3
  619. package/dist/self-config-doctor-v2.d.ts.map +1 -1
  620. package/dist/self-config-doctor-v2.js +1304 -181
  621. package/dist/self-config-doctor.d.ts +20 -1
  622. package/dist/self-config-doctor.d.ts.map +1 -1
  623. package/dist/self-config-doctor.js +53 -280
  624. package/dist/settled-unit-states.d.ts +9 -0
  625. package/dist/settled-unit-states.d.ts.map +1 -0
  626. package/dist/settled-unit-states.js +14 -0
  627. package/dist/sharkcraft-inspector.d.ts +34 -0
  628. package/dist/sharkcraft-inspector.d.ts.map +1 -1
  629. package/dist/sharkcraft-inspector.js +273 -26
  630. package/dist/spec/spec-evidence.d.ts.map +1 -1
  631. package/dist/spec/spec-evidence.js +14 -20
  632. package/dist/split-identifier.d.ts +21 -0
  633. package/dist/split-identifier.d.ts.map +1 -0
  634. package/dist/split-identifier.js +27 -0
  635. package/dist/start-here.d.ts.map +1 -1
  636. package/dist/start-here.js +1 -2
  637. package/dist/substitute-placeholders.d.ts +8 -0
  638. package/dist/substitute-placeholders.d.ts.map +1 -0
  639. package/dist/substitute-placeholders.js +9 -0
  640. package/dist/symbol-index.d.ts +33 -0
  641. package/dist/symbol-index.d.ts.map +1 -1
  642. package/dist/symbol-index.js +241 -3
  643. package/dist/symbol-member-entry.d.ts +26 -0
  644. package/dist/symbol-member-entry.d.ts.map +1 -0
  645. package/dist/symbol-member-entry.js +1 -0
  646. package/dist/symbol-member-kind.d.ts +14 -0
  647. package/dist/symbol-member-kind.d.ts.map +1 -0
  648. package/dist/symbol-member-kind.js +14 -0
  649. package/dist/task-packet.d.ts.map +1 -1
  650. package/dist/task-packet.js +52 -9
  651. package/dist/task-ranker.d.ts +8 -0
  652. package/dist/task-ranker.d.ts.map +1 -1
  653. package/dist/task-ranker.js +25 -13
  654. package/dist/task-risk.js +1 -1
  655. package/dist/task-routing-hint-registry.d.ts +20 -1
  656. package/dist/task-routing-hint-registry.d.ts.map +1 -1
  657. package/dist/task-routing-hint-registry.js +186 -42
  658. package/dist/template-drift.d.ts.map +1 -1
  659. package/dist/template-drift.js +30 -9
  660. package/dist/template-lint.d.ts.map +1 -1
  661. package/dist/template-lint.js +160 -2
  662. package/dist/term-query.d.ts +10 -0
  663. package/dist/term-query.d.ts.map +1 -0
  664. package/dist/term-query.js +1 -0
  665. package/dist/test-definitions.d.ts +6 -3
  666. package/dist/test-definitions.d.ts.map +1 -1
  667. package/dist/test-runner.d.ts +95 -10
  668. package/dist/test-runner.d.ts.map +1 -1
  669. package/dist/test-runner.js +309 -308
  670. package/dist/tuning-query-tokens.d.ts +29 -0
  671. package/dist/tuning-query-tokens.d.ts.map +1 -0
  672. package/dist/tuning-query-tokens.js +51 -0
  673. package/dist/typecheck-files.d.ts +36 -0
  674. package/dist/typecheck-files.d.ts.map +1 -0
  675. package/dist/typecheck-files.js +158 -0
  676. package/dist/uncertainty.js +1 -1
  677. package/dist/universal-search.d.ts.map +1 -1
  678. package/dist/universal-search.js +5 -3
  679. package/dist/unregistered-exports.d.ts +19 -0
  680. package/dist/unregistered-exports.d.ts.map +1 -0
  681. package/dist/unregistered-exports.js +141 -0
  682. package/dist/unresolvable-reason.d.ts +11 -0
  683. package/dist/unresolvable-reason.d.ts.map +1 -0
  684. package/dist/unresolvable-reason.js +11 -0
  685. package/dist/upgrade-advisor.d.ts.map +1 -1
  686. package/dist/upgrade-advisor.js +16 -9
  687. package/dist/validate-contribution-file.d.ts +4 -0
  688. package/dist/validate-contribution-file.d.ts.map +1 -0
  689. package/dist/validate-contribution-file.js +228 -0
  690. package/dist/why-file.d.ts +3 -0
  691. package/dist/why-file.d.ts.map +1 -1
  692. package/dist/why-file.js +7 -3
  693. 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)}`);
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)}`);
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
+ }
@@ -1,5 +1,6 @@
1
1
  import { type IConvention } from '@shrkcrft/plugin-api';
2
2
  import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
3
+ import { type IRejectedEntry } from '@shrkcrft/core';
3
4
  export declare const CONVENTION_REGISTRY_SCHEMA = "sharkcraft.convention-registry/v1";
4
5
  export declare enum ConventionSource {
5
6
  Local = "local",
@@ -19,9 +20,30 @@ export interface IConventionDoctorIssue {
19
20
  readonly conventionId?: string;
20
21
  readonly source?: string;
21
22
  }
23
+ /** The convention FILES a load discovered, and the ones it could not read — the doctor's coverage. */
24
+ export interface IConventionFileScan {
25
+ /** Every convention file the load tried (local defaults, `conventionFiles`, pack `conventionFiles`). */
26
+ readonly discovered: number;
27
+ /** Discovered but never read (missing, or failed to import) — `file — reason`, project-relative. */
28
+ readonly unread: readonly string[];
29
+ }
30
+ /**
31
+ * THE convention acceptance predicate (round 12, 12.1): every error of
32
+ * `validateConvention`, `<field>: <message>` — `[]` means accepted. The
33
+ * loader and `packs test --load` refuse exactly the same entries.
34
+ */
35
+ export declare function conventionRejectionReasons(raw: unknown): readonly string[];
22
36
  export declare function loadConventions(inspection: ISharkcraftInspection): Promise<{
23
37
  entries: readonly IConventionEntry[];
24
38
  issues: readonly IConventionDoctorIssue[];
39
+ files: IConventionFileScan;
40
+ /**
41
+ * Every declared convention the loader refused (round 12, 12.1) — invalid
42
+ * or a duplicate id — with its position and every reason. The `issues`
43
+ * above still carry the per-field `invalid-convention` lines `conventions
44
+ * doctor` prints; this is the record THE rejection channel lifts.
45
+ */
46
+ rejected: readonly IRejectedEntry[];
25
47
  }>;
26
48
  export declare function listConventions(inspection: ISharkcraftInspection): Promise<readonly IConventionEntry[]>;
27
49
  export declare function findConvention(inspection: ISharkcraftInspection, id: string): Promise<IConventionEntry | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"convention-registry.d.ts","sourceRoot":"","sources":["../src/convention-registry.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA4BD,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAA;CAAE,CAAC,CAoF9F;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAGtC;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,qBAAqB,EACjC,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGlC;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAG5C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAC9C;AAiBD,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,sBAAsB,CAAC,CAqCjC"}
1
+ {"version":3,"file":"convention-registry.d.ts","sourceRoot":"","sources":["../src/convention-registry.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,oBAAY,gBAAgB;IAC1B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,sGAAsG;AACtG,MAAM,WAAW,mBAAmB;IAClC,wGAAwG;IACxG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oGAAoG;IACpG,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAK1E;AAyBD,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC;IACT,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC1C,KAAK,EAAE,mBAAmB,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CACrC,CAAC,CA0HD;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAGtC;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,qBAAqB,EACjC,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAGlC;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAG5C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAC9C;AAiBD,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,qBAAqB,EACjC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,sBAAsB,CAAC,CAqCjC"}
@@ -6,7 +6,7 @@
6
6
  import { existsSync } from 'node:fs';
7
7
  import * as nodePath from 'node:path';
8
8
  import { validateConvention, } from '@shrkcrft/plugin-api';
9
- import { importModuleViaLoader } from '@shrkcrft/core';
9
+ import { importModuleViaLoader, readContributionExport, RejectionCause, } from '@shrkcrft/core';
10
10
  export const CONVENTION_REGISTRY_SCHEMA = 'sharkcraft.convention-registry/v1';
11
11
  export var ConventionSource;
12
12
  (function (ConventionSource) {
@@ -14,15 +14,26 @@ export var ConventionSource;
14
14
  ConventionSource["Pack"] = "pack";
15
15
  ConventionSource["Fixture"] = "fixture";
16
16
  })(ConventionSource || (ConventionSource = {}));
17
- async function importDefault(file) {
18
- const mod = (await importModuleViaLoader(file));
19
- if (Array.isArray(mod.default))
20
- return mod.default;
21
- if (mod.default && typeof mod.default === 'object')
22
- return [mod.default];
23
- if (Array.isArray(mod.conventions))
24
- return mod.conventions;
25
- return [];
17
+ async function importConventions(file) {
18
+ return readContributionExport(await importModuleViaLoader(file), { namedKeys: ['conventions'] });
19
+ }
20
+ /**
21
+ * THE convention acceptance predicate (round 12, 12.1): every error of
22
+ * `validateConvention`, `<field>: <message>` — `[]` means accepted. The
23
+ * loader and `packs test --load` refuse exactly the same entries.
24
+ */
25
+ export function conventionRejectionReasons(raw) {
26
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
27
+ return ['(entry): must be an object'];
28
+ const v = validateConvention(raw);
29
+ if (v.valid)
30
+ return [];
31
+ return v.issues.length > 0 ? v.issues.map((i) => `${i.field}: ${i.message}`) : ['(entry): failed validation'];
32
+ }
33
+ /** A declared entry's string `id`, when it has one. */
34
+ function entryIdOf(raw) {
35
+ const id = raw && typeof raw === 'object' ? raw.id : undefined;
36
+ return typeof id === 'string' ? id : undefined;
26
37
  }
27
38
  function localFiles(inspection) {
28
39
  const out = [];
@@ -34,56 +45,84 @@ function localFiles(inspection) {
34
45
  if (existsSync(abs))
35
46
  out.push(abs);
36
47
  }
37
- const cfg = inspection.config;
38
- for (const rel of cfg?.conventionFiles ?? []) {
48
+ // `conventionFiles` is a declared config key (typed, schema-validated).
49
+ for (const rel of inspection.config?.conventionFiles ?? []) {
39
50
  out.push(nodePath.isAbsolute(rel) ? rel : nodePath.join(dir, rel));
40
51
  }
41
- return out;
52
+ // One scan per DISTINCT file: `conventionFiles: ['conventions.ts']` names the
53
+ // default file again, and loading it twice listed every doctor issue twice.
54
+ return [...new Set(out.map((f) => nodePath.resolve(f)))];
42
55
  }
43
56
  export async function loadConventions(inspection) {
44
57
  const entries = [];
45
58
  const issues = [];
46
- const seen = new Set();
47
- const ingest = (raw, source, packageName, sourceFile) => {
48
- const v = validateConvention(raw);
49
- if (!v.valid) {
50
- for (const i of v.issues) {
59
+ const rejected = [];
60
+ const seen = new Map();
61
+ let discovered = 0;
62
+ const unread = [];
63
+ const rel = (file) => nodePath.relative(inspection.projectRoot, file) || file;
64
+ const ingest = (raw, source, packageName, sourceFile, at) => {
65
+ const id = entryIdOf(raw);
66
+ // Shape warnings never drop the convention; they are said out loud.
67
+ if (raw && typeof raw === 'object' && !Array.isArray(raw)) {
68
+ for (const w of validateConvention(raw).warnings) {
51
69
  issues.push({
52
- severity: 'error',
53
- code: 'invalid-convention',
54
- message: `${i.field}: ${i.message}`,
55
- conventionId: typeof raw.id === 'string' ? raw.id : undefined,
70
+ severity: 'warning',
71
+ code: 'convention-shape',
72
+ message: `${w.field}: ${w.message}`,
73
+ conventionId: id,
56
74
  source: sourceFile,
57
75
  });
58
76
  }
77
+ }
78
+ const reasons = conventionRejectionReasons(raw);
79
+ if (reasons.length > 0) {
80
+ for (const r of reasons) {
81
+ issues.push({ severity: 'error', code: 'invalid-convention', message: r, conventionId: id, source: sourceFile });
82
+ }
83
+ rejected.push({ ...at, ...(id !== undefined ? { entryId: id } : {}), reasons, cause: RejectionCause.Invalid });
59
84
  return;
60
85
  }
61
- if (seen.has(raw.id)) {
86
+ const conv = raw;
87
+ const prev = seen.get(conv.id);
88
+ if (prev !== undefined) {
62
89
  issues.push({
63
90
  severity: 'error',
64
91
  code: 'duplicate-id',
65
- message: `Convention "${raw.id}" already loaded; skipping ${sourceFile}.`,
66
- conventionId: raw.id,
92
+ message: `Convention "${conv.id}" already loaded; skipping ${sourceFile}.`,
93
+ conventionId: conv.id,
67
94
  source: sourceFile,
68
95
  });
96
+ rejected.push({
97
+ ...at,
98
+ entryId: conv.id,
99
+ reasons: [`id: "${conv.id}" is already declared in ${prev}`],
100
+ cause: RejectionCause.DuplicateId,
101
+ });
69
102
  return;
70
103
  }
71
- seen.add(raw.id);
104
+ seen.set(conv.id, sourceFile);
72
105
  entries.push({
73
- convention: raw,
106
+ convention: conv,
74
107
  source,
75
108
  ...(packageName ? { packageName } : {}),
76
109
  sourceFile,
77
110
  });
78
111
  };
112
+ const ingestAll = (exp, file, source, packageName, sourceFile) => {
113
+ exp.items.forEach((c, i) => ingest(c, source, packageName, sourceFile, {
114
+ file,
115
+ index: exp.single ? -1 : i,
116
+ ...(exp.exportName ? { exportName: exp.exportName } : {}),
117
+ }));
118
+ };
79
119
  for (const file of localFiles(inspection)) {
120
+ discovered += 1;
80
121
  try {
81
- const list = await importDefault(file);
82
- const rel = nodePath.relative(inspection.projectRoot, file) || file;
83
- for (const c of list)
84
- ingest(c, ConventionSource.Local, undefined, rel);
122
+ ingestAll(await importConventions(file), file, ConventionSource.Local, undefined, rel(file));
85
123
  }
86
124
  catch (e) {
125
+ unread.push(`${rel(file)} — failed to load`);
87
126
  issues.push({
88
127
  severity: 'warning',
89
128
  code: 'load-failed',
@@ -94,33 +133,34 @@ export async function loadConventions(inspection) {
94
133
  }
95
134
  for (const pack of inspection.packs.validPacks ?? []) {
96
135
  const contributions = (pack.manifest?.contributions ?? {});
97
- for (const rel of contributions.conventionFiles ?? []) {
98
- const file = nodePath.resolve(pack.packageRoot, rel);
136
+ for (const packRel of contributions.conventionFiles ?? []) {
137
+ discovered += 1;
138
+ const file = nodePath.resolve(pack.packageRoot, packRel);
99
139
  if (!existsSync(file)) {
140
+ unread.push(`${rel(file)} — missing (declared by ${pack.packageName})`);
100
141
  issues.push({
101
142
  severity: 'warning',
102
143
  code: 'missing-file',
103
- message: `Pack ${pack.packageName} declares ${rel} but file is missing.`,
144
+ message: `Pack ${pack.packageName} declares ${packRel} but file is missing.`,
104
145
  source: file,
105
146
  });
106
147
  continue;
107
148
  }
108
149
  try {
109
- const list = await importDefault(file);
110
- for (const c of list)
111
- ingest(c, ConventionSource.Pack, pack.packageName, rel);
150
+ ingestAll(await importConventions(file), file, ConventionSource.Pack, pack.packageName, packRel);
112
151
  }
113
152
  catch (e) {
153
+ unread.push(`${rel(file)} — failed to load (${pack.packageName})`);
114
154
  issues.push({
115
155
  severity: 'warning',
116
156
  code: 'load-failed',
117
- message: `Pack ${pack.packageName} (${rel}): ${e.message}`,
157
+ message: `Pack ${pack.packageName} (${packRel}): ${e.message}`,
118
158
  source: file,
119
159
  });
120
160
  }
121
161
  }
122
162
  }
123
- return { entries, issues };
163
+ return { entries, issues, files: { discovered, unread }, rejected };
124
164
  }
125
165
  export async function listConventions(inspection) {
126
166
  const { entries } = await loadConventions(inspection);
@@ -1 +1 @@
1
- {"version":3,"file":"coverage-report.d.ts","sourceRoot":"","sources":["../src/coverage-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAOD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,CA2NtF"}
1
+ {"version":3,"file":"coverage-report.d.ts","sourceRoot":"","sources":["../src/coverage-report.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAOD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,CA0NtF"}
@@ -1,6 +1,7 @@
1
1
  import { hasActionHints, hasMeaningfulActionHints, KNOWLEDGE_TYPES_NO_ACTION, } from '@shrkcrft/knowledge';
2
2
  import { resolvePreset, resolvePresetReferences } from '@shrkcrft/presets';
3
3
  import { inspectionReferenceLookup } from "./reference-lookup.js";
4
+ import { referenceIdExists } from "./reference-registry.js";
4
5
  function pct(covered, total) {
5
6
  if (total === 0)
6
7
  return 100;
@@ -72,8 +73,6 @@ export function buildCoverageReport(inspection) {
72
73
  });
73
74
  const actionable = eligible.filter((e) => e.noAction !== true && !KNOWLEDGE_TYPES_NO_ACTION.has(e.type));
74
75
  const total = actionable.length;
75
- const knowledgeIds = new Set(inspection.knowledgeEntries.map((x) => x.id));
76
- const templateIds = new Set(inspection.templates.map((t) => t.id));
77
76
  const missing = [];
78
77
  let covered = 0;
79
78
  for (const e of actionable) {
@@ -83,10 +82,11 @@ export function buildCoverageReport(inspection) {
83
82
  }
84
83
  // Reward RESOLVED cross-references: a hint whose related ids actually
85
84
  // point at real entries/templates is substantive even without a command.
85
+ // Resolved through THE reference registry, not private id sets.
86
86
  const a = e.actionHints;
87
87
  const resolvedXref = !!a &&
88
- ((a.relatedKnowledge?.some((id) => knowledgeIds.has(id)) ?? false) ||
89
- (a.relatedTemplates?.some((id) => templateIds.has(id)) ?? false));
88
+ ((a.relatedKnowledge?.some((id) => referenceIdExists(inspection, 'knowledge', id)) ?? false) ||
89
+ (a.relatedTemplates?.some((id) => referenceIdExists(inspection, 'template', id)) ?? false));
90
90
  if (resolvedXref) {
91
91
  covered += 1;
92
92
  continue;
@@ -119,8 +119,8 @@ export function buildCoverageReport(inspection) {
119
119
  missing.push(`${p.id} — no step references`);
120
120
  continue;
121
121
  }
122
- const allResolve = refs.every((id) => inspection.templates.some((t) => t.id === id) ||
123
- inspection.knowledgeEntries.some((e) => e.id === id));
122
+ const allResolve = refs.every((id) => referenceIdExists(inspection, 'template', id) ||
123
+ referenceIdExists(inspection, 'knowledge', id));
124
124
  if (allResolve)
125
125
  covered += 1;
126
126
  else
@@ -1,4 +1,5 @@
1
1
  import { type IKnowledgeEntry } from '@shrkcrft/knowledge';
2
+ import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
2
3
  export declare const CUSTOM_CHECK_REPORT_SCHEMA = "sharkcraft.custom-check/v1";
3
4
  export declare const CUSTOM_CHECKS_REGISTRY_SCHEMA = "sharkcraft.custom-checks-registry/v1";
4
5
  export declare enum CustomCheckScope {
@@ -70,6 +71,19 @@ export interface ICustomCheckRegistryEntry {
70
71
  /** Validation findings about the descriptor itself. */
71
72
  warnings: readonly string[];
72
73
  }
74
+ /** A `metadata.checks` declaration the registry found but does not register — it can never run. */
75
+ export interface ICustomCheckIgnoredDeclaration {
76
+ /** The entry that declared it. */
77
+ entryId: string;
78
+ /** Its knowledge `type` (`'rule'` only for a Markdown rule whose metadata the loader dropped). */
79
+ entryType: string;
80
+ /** The declaring file, project-relative when the root is known. */
81
+ source?: string;
82
+ /** Why it is not registered, and what to do instead. */
83
+ reason: string;
84
+ /** The check ids it declared, when readable — `checks run <id>` names where they went. */
85
+ checkIds: readonly string[];
86
+ }
73
87
  export interface ICustomCheckRegistry {
74
88
  schema: typeof CUSTOM_CHECKS_REGISTRY_SCHEMA;
75
89
  generatedAt: string;
@@ -78,25 +92,70 @@ export interface ICustomCheckRegistry {
78
92
  id: string;
79
93
  ruleIds: readonly string[];
80
94
  }[];
95
+ /** Declared on a rule, but unusable (no id, no command, a non-array `metadata.checks`). */
81
96
  invalid: readonly {
82
97
  ruleId: string;
83
98
  reason: string;
99
+ source?: string;
100
+ checkId?: string;
84
101
  }[];
102
+ /** Declared where the registry does not read (a non-rule entry, a Markdown rule). */
103
+ ignored: readonly ICustomCheckIgnoredDeclaration[];
104
+ /** `type: 'rule'` entries scanned — via {@link isRuleEntry}, the set `shrk rules list` shows. */
105
+ scannedRules: number;
106
+ }
107
+ /** The inspection-free inputs of {@link buildCustomChecksRegistry}. */
108
+ export interface IBuildCustomChecksOptions {
109
+ /** Makes each declaration's `source` project-relative. */
110
+ readonly projectRoot?: string;
85
111
  }
86
112
  /** Read the descriptors a rule declares under `metadata.checks`. */
87
113
  export declare function readDescriptorsFromRule(rule: IKnowledgeEntry): readonly ICustomCheckDescriptor[];
88
- export declare function buildCustomChecksRegistry(entries: readonly IKnowledgeEntry[]): ICustomCheckRegistry;
114
+ export declare function buildCustomChecksRegistry(entries: readonly IKnowledgeEntry[], options?: IBuildCustomChecksOptions): ICustomCheckRegistry;
115
+ /**
116
+ * Every declaration the registry saw: registered + invalid + ignored (an
117
+ * ignored entry whose ids are unreadable still counts as one). The `expected`
118
+ * of the doctor's coverage — 0 means nothing was declared at all.
119
+ */
120
+ export declare function declaredCustomCheckCount(registry: ICustomCheckRegistry): number;
121
+ /** Where `metadata.checks[]` is read from — what the empty state names instead of "add it to a rule". */
122
+ export interface ICustomCheckScanSurface {
123
+ /** Project-relative TypeScript files (that exist — what the loader reads) whose `type: 'rule'` entries are scanned. */
124
+ readonly files: readonly {
125
+ readonly file: string;
126
+ readonly via: string;
127
+ }[];
128
+ /** Existing Markdown files listed as knowledge / rule sources — their entries cannot carry metadata. */
129
+ readonly markdownFiles: readonly string[];
130
+ /** `type: 'rule'` entries that came from Markdown. */
131
+ readonly markdownRules: number;
132
+ }
133
+ /**
134
+ * The concrete surface the custom-checks registry scans: local `ruleFiles` /
135
+ * `knowledgeFiles` / `docsFiles` and every valid pack's `ruleFiles` /
136
+ * `knowledgeFiles` — split into TypeScript (scanned) and Markdown (cannot
137
+ * carry metadata).
138
+ */
139
+ export declare function customCheckScanSurface(inspection: ISharkcraftInspection): ICustomCheckScanSurface;
89
140
  export interface ICustomCheckDoctorReport {
90
141
  schema: 'sharkcraft.custom-checks-doctor/v1';
91
142
  generatedAt: string;
92
143
  totalChecks: number;
93
144
  warnings: number;
94
145
  errors: number;
146
+ /** Declarations seen (registered + invalid + ignored) — 0 means nothing was declared. */
147
+ declaredChecks: number;
148
+ /** Declarations that can never run because the registry does not read them. */
149
+ ignored: number;
150
+ /** `type: 'rule'` entries scanned. */
151
+ scannedRules: number;
95
152
  details: readonly {
96
153
  ruleId: string;
97
154
  checkId: string;
98
155
  severity: 'error' | 'warning' | 'info';
99
156
  message: string;
157
+ /** The declaring file, when known. */
158
+ source?: string;
100
159
  }[];
101
160
  }
102
161
  export declare function doctorCustomChecks(registry: ICustomCheckRegistry): ICustomCheckDoctorReport;
@@ -1 +1 @@
1
- {"version":3,"file":"custom-checks.d.ts","sourceRoot":"","sources":["../src/custom-checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"custom-checks.d.ts","sourceRoot":"","sources":["../src/custom-checks.ts"],"names":[],"mappings":"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"}