@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
@@ -1,7 +1,7 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import * as nodePath from 'node:path';
3
- import { scanImports, loadTsconfigPaths } from '@shrkcrft/boundaries';
4
- import { AreaKind, buildAreaMap } from "./area-map.js";
3
+ import { boundaryRuleSeverity, scanImports, loadTsconfigPaths } from '@shrkcrft/boundaries';
4
+ import { AreaKind, areaIdOf, buildAreaMap, createAreaClassifier, formatClassificationRate, } from "./area-map.js";
5
5
  import { rankAll } from "./task-ranker.js";
6
6
  import { loadOwnershipRules, impactFor } from "./ownership.js";
7
7
  export const IMPACT_ANALYSIS_SCHEMA = 'sharkcraft.impact-analysis/v2';
@@ -243,16 +243,30 @@ function detectWorkspaces(ctx) {
243
243
  }
244
244
  return [...out.values()].sort((a, b) => b.fileCount - a.fileCount);
245
245
  }
246
+ /**
247
+ * The areas the touched files are IN: each file goes through the one
248
+ * classifier and is keyed by `areaIdOf`, exactly as `buildAreaMap` keys its
249
+ * entries, so `boundaryRisks` finds the same entry by id.
250
+ *
251
+ * A prefix match on an entry's `paths` answered a different question.
252
+ * `paths` holds only the top segment, so with a config pattern for
253
+ * `libs/<group>/core/**` EVERY `libs/…` file hit the core area and earned a
254
+ * false `core-area` risk, while `areaCoverage` called the same file
255
+ * unclassified. A touched file whose area has no map entry yet (a planned file
256
+ * in a new directory) still reports the area it would be in.
257
+ */
246
258
  function affectedAreaSummary(ctx) {
247
- const allTouched = unique([...ctx.files]);
248
259
  const out = new Map();
249
- for (const a of ctx.areaMap.areas) {
250
- const hitCount = allTouched.filter((f) => a.paths.some((p) => f === p || f.startsWith(p + '/') || f.startsWith(p))).length;
251
- if (hitCount > 0) {
252
- out.set(a.id, { id: a.id, kind: a.kind, fileCount: hitCount });
253
- }
260
+ for (const f of unique([...ctx.files])) {
261
+ const classification = ctx.classify(f);
262
+ const id = areaIdOf(classification, f);
263
+ const hit = out.get(id);
264
+ if (hit)
265
+ hit.fileCount += 1;
266
+ else
267
+ out.set(id, { id, kind: classification.kind, fileCount: 1 });
254
268
  }
255
- return [...out.values()].sort((a, b) => b.fileCount - a.fileCount);
269
+ return [...out.values()].sort((a, b) => b.fileCount - a.fileCount || a.id.localeCompare(b.id));
256
270
  }
257
271
  function boundaryRisks(ctx, affected) {
258
272
  const risks = [];
@@ -272,7 +286,8 @@ function boundaryRisks(ctx, affected) {
272
286
  risks.push({
273
287
  ruleId,
274
288
  reason: `Affects area ${a.id}; rule ${ruleId} guards that area.`,
275
- severity: (rule.severity ?? 'warning'),
289
+ // The ENFORCED severity — an unset one is `error` (one authority).
290
+ severity: boundaryRuleSeverity(rule),
276
291
  });
277
292
  }
278
293
  }
@@ -377,8 +392,11 @@ function affectedPolicies(ctx, affected, boundary) {
377
392
  }
378
393
  async function ownershipImpactFor(ctx) {
379
394
  try {
380
- const cfg = ctx.inspection.config;
381
- const sources = cfg?.ownership?.sources;
395
+ // The DECLARED ownership-source key — the one `shrk ownership`, `shrk
396
+ // owners` and the MCP ownership tools read. The old `ownership.sources`
397
+ // read named a key the strict schema rejects, so impact silently fell back
398
+ // to the defaults even when `ownershipFiles` was configured.
399
+ const sources = ctx.inspection.config?.ownershipFiles;
382
400
  const { rules } = await loadOwnershipRules(ctx.inspection.projectRoot, sources);
383
401
  if (rules.length === 0)
384
402
  return null;
@@ -552,6 +570,9 @@ export async function analyzeImpact(inspection, input) {
552
570
  }
553
571
  const files = unique([...explicitFiles, ...planTargets, ...specifierTargets]);
554
572
  const task = (input.task ?? '').trim() || files.join(' ') || (input.specifier ?? '');
573
+ // THE classifier — the one buildAreaMap keys its entries by. Affected areas,
574
+ // `core-area`, boundary risks and `areaCoverage` all answer through it.
575
+ const classify = createAreaClassifier(inspection.config?.areaMap);
555
576
  const ctx = {
556
577
  inspection,
557
578
  files,
@@ -561,6 +582,7 @@ export async function analyzeImpact(inspection, input) {
561
582
  maxDepth,
562
583
  limit,
563
584
  areaMap,
585
+ classify,
564
586
  };
565
587
  const { direct, transitive, paths } = closeDependents(reverse, files, maxDepth);
566
588
  const directDependents = direct.slice(0, limit);
@@ -623,7 +645,7 @@ export async function analyzeImpact(inspection, input) {
623
645
  const hitsPolicy = files.some((f) => f.includes('policy') || f.includes('policy-engine'));
624
646
  const hitsTemplates = templates.length > 0 || pipelines.length > 0;
625
647
  const ownershipReview = (ownership?.requiredReviewFiles.length ?? 0) > 0;
626
- const { risk, reasons: riskReasons } = classifyRisk({
648
+ const { risk, reasons: classifiedReasons } = classifyRisk({
627
649
  directCount: direct.length,
628
650
  transitiveCount: transitive.length,
629
651
  boundaryCount: boundaryConcerns.length,
@@ -636,6 +658,28 @@ export async function analyzeImpact(inspection, input) {
636
658
  hitsPolicy,
637
659
  hitsTemplates,
638
660
  });
661
+ // A derived view inherits its input's coverage and prints it: affected
662
+ // areas, boundary risks and `core-area` are only as complete as the area
663
+ // classification. Targets go through the SAME classifier the map uses.
664
+ const areaCoverage = {
665
+ classificationRate: areaMap.classificationRate,
666
+ degraded: areaMap.degraded,
667
+ unclassifiedTargets: files.filter((f) => classify(f).kind === AreaKind.Unknown),
668
+ };
669
+ // It flags, it does not lower the risk: the area-derived signals may be
670
+ // understated, which is the opposite of reassuring.
671
+ const riskReasons = areaCoverage.degraded || areaCoverage.unclassifiedTargets.length > 0
672
+ ? [
673
+ ...classifiedReasons,
674
+ {
675
+ code: 'area-attribution-degraded',
676
+ message: `Area attribution ${areaCoverage.degraded ? 'degraded' : 'partial'}: ` +
677
+ `${formatClassificationRate(areaCoverage.classificationRate)} of the repo classified; ` +
678
+ `${areaCoverage.unclassifiedTargets.length}/${files.length} target(s) in no known area — ` +
679
+ 'core/boundary/area signals may be understated (add areaMap.patterns to sharkcraft.config.ts).',
680
+ },
681
+ ]
682
+ : classifiedReasons;
639
683
  const truncations = [];
640
684
  if (direct.length > limit) {
641
685
  truncations.push({ list: 'directDependents', total: direct.length, shown: limit });
@@ -684,6 +728,7 @@ export async function analyzeImpact(inspection, input) {
684
728
  suggestedReviewCommands,
685
729
  relatedRules,
686
730
  relatedTemplates,
731
+ areaCoverage,
687
732
  risk,
688
733
  riskReasons,
689
734
  explanation,
@@ -1 +1 @@
1
- {"version":3,"file":"impact-render.d.ts","sourceRoot":"","sources":["../src/impact-render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,SAAS,EAAE,CA0Cb;AAiCD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CAgER;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CAyGR;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CAiIR"}
1
+ {"version":3,"file":"impact-render.d.ts","sourceRoot":"","sources":["../src/impact-render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAkB5D,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6BD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,SAAS,EAAE,CA0Cb;AAiCD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CAkER;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CA8GR;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CAiIR"}
@@ -1,3 +1,17 @@
1
+ import { formatClassificationRate } from "./area-map.js";
2
+ /**
3
+ * `Area attribution: degraded (…)` — printed whenever the area map behind this
4
+ * impact view classified too little of the repo, or left a target in no area.
5
+ * Report only: it changes no exit, it says how far the area signals reach.
6
+ */
7
+ function areaAttributionLine(impact) {
8
+ const ac = impact.areaCoverage;
9
+ if (!ac || (!ac.degraded && ac.unclassifiedTargets.length === 0))
10
+ return undefined;
11
+ return (`Area attribution: ${ac.degraded ? 'degraded' : 'partial'} ` +
12
+ `(${formatClassificationRate(ac.classificationRate)} of repo classified; ` +
13
+ `${ac.unclassifiedTargets.length}/${impact.normalizedTargets.length} target(s) unclassified)`);
14
+ }
1
15
  function riskBadgeTag(risk) {
2
16
  switch (risk) {
3
17
  case 'low':
@@ -111,6 +125,9 @@ export function renderImpactText(impact, opts = {}) {
111
125
  for (const r of impact.riskReasons.slice(0, 6))
112
126
  lines.push(` - ${r.code}: ${r.message}`);
113
127
  }
128
+ const areaLine = areaAttributionLine(impact);
129
+ if (areaLine)
130
+ lines.push(areaLine);
114
131
  lines.push(`Targets (${impact.normalizedTargets.length}):`);
115
132
  for (const f of impact.normalizedTargets.slice(0, 12))
116
133
  lines.push(` • ${f}`);
@@ -197,6 +214,11 @@ export function renderImpactMarkdown(impact, opts = {}) {
197
214
  lines.push('_None._');
198
215
  for (const r of impact.riskReasons)
199
216
  lines.push(`- **${r.code}** — ${r.message}`);
217
+ const areaLine = areaAttributionLine(impact);
218
+ if (areaLine) {
219
+ lines.push('');
220
+ lines.push(`> ${areaLine}`);
221
+ }
200
222
  lines.push('');
201
223
  lines.push(`## Direct dependents (${impact.directDependents.length})`);
202
224
  lines.push('');
@@ -1,3 +1,4 @@
1
+ import type { IVerdictCoverage } from '@shrkcrft/core';
1
2
  export declare const IMPORT_HYGIENE_SCHEMA = "sharkcraft.import-hygiene/v1";
2
3
  export declare enum ImportHygieneFindingKind {
3
4
  InlineTypeImport = "inline-type-import",
@@ -24,6 +25,18 @@ export interface IImportHygieneReport {
24
25
  readonly counts: Readonly<Record<string, number>>;
25
26
  readonly verdict: 'ok' | 'warnings' | 'errors';
26
27
  readonly nextCommand: string;
28
+ /**
29
+ * Source files the check was asked to read — the subject list
30
+ * (`importHygieneSubjects` for an explicit `files` request, the tree walk
31
+ * otherwise). Always set by `buildImportHygieneReport`.
32
+ */
33
+ readonly filesInScope?: number;
34
+ /**
35
+ * In-scope files that could not be read (project-relative). Their imports
36
+ * were never checked, so a verdict over them is NOT VERIFIED — never "ok".
37
+ * Always set by `buildImportHygieneReport`.
38
+ */
39
+ readonly unread?: readonly string[];
27
40
  }
28
41
  export interface IImportHygieneOptions {
29
42
  /** Restrict scan to a set of relative file paths (e.g. changed files). */
@@ -58,7 +71,23 @@ export interface IAllowlistEntry {
58
71
  /** Optional ISO date after which this allowlist entry should be re-evaluated. */
59
72
  readonly expiresAt?: string;
60
73
  }
74
+ /**
75
+ * The files of `files` import hygiene actually READS — existing `.ts`/`.tsx`
76
+ * sources, no declarations, no test fixtures (absolute paths). THE authority
77
+ * for "did the hygiene check examine anything?": `buildImportHygieneReport`
78
+ * scans exactly this list, and finish / diff-check count it, so a changeset of
79
+ * deleted files, `.js` edits or test fixtures can never read as a hygiene pass
80
+ * over nothing (round 11).
81
+ */
82
+ export declare function importHygieneSubjects(projectRoot: string, files: readonly string[]): string[];
61
83
  export declare function buildImportHygieneReport(projectRoot: string, options?: IImportHygieneOptions): IImportHygieneReport;
84
+ /**
85
+ * What an import-hygiene run examined, as one coverage record: in-scope files
86
+ * read of in-scope files, naming each unreadable one. THE fold finish,
87
+ * `diff-check` (CLI + MCP) and `check imports` settle on, so an unreadable
88
+ * changed file is NOT VERIFIED (2) on every surface — never a clean pass.
89
+ */
90
+ export declare function importHygieneCoverage(report: Pick<IImportHygieneReport, 'filesInScope' | 'unread'>, unit?: string): IVerdictCoverage;
62
91
  export interface IImportHygieneAllowlistDraft {
63
92
  readonly schema: 'sharkcraft.import-hygiene-allowlist/v1';
64
93
  readonly comment: string;
@@ -89,5 +118,10 @@ export interface IEmitAllowlistOptions {
89
118
  * patterns require per-case justification.
90
119
  */
91
120
  export declare function emitImportHygieneAllowlistDraft(report: IImportHygieneReport, options?: IEmitAllowlistOptions): IImportHygieneAllowlistDraft;
92
- export declare function renderImportHygieneText(report: IImportHygieneReport): string;
121
+ /**
122
+ * Text rendering. `headline` overrides the header word — the CLI passes the
123
+ * SETTLED verdict (`NOT VERIFIED`) so a run that examined nothing, or not
124
+ * everything, never prints `(OK)` above its own NOT VERIFIED line.
125
+ */
126
+ export declare function renderImportHygieneText(report: IImportHygieneReport, headline?: string): string;
93
127
  //# sourceMappingURL=import-hygiene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-hygiene.d.ts","sourceRoot":"","sources":["../src/import-hygiene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-hygiene.d.ts","sourceRoot":"","sources":["../src/import-hygiene.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AAEpE,oBAAY,wBAAwB;IAClC,gBAAgB,uBAAuB;IACvC,cAAc,oBAAoB;IAClC,aAAa,mBAAmB;CACjC;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,gDAAgD;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,UAAU,CAAC;AAEpD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAKvE;AAED,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IACzC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAoPD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAK7F;AA4BD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,CA0DtB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,QAAQ,CAAC,EAC7D,IAAI,GAAE,MAAuB,GAC5B,gBAAgB,CAelB;AAID,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,wCAAwC,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,wBAAwB,GAAG,KAAK,CAAC;IACjD,gEAAgE;IAChE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,qBAA0B,GAClC,4BAA4B,CAyB9B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAqB/F"}
@@ -60,14 +60,23 @@ function loadAllowlist(projectRoot, allowlistFile) {
60
60
  return [];
61
61
  }
62
62
  }
63
- function listSourceFiles(root) {
63
+ /**
64
+ * Every `.ts` / `.tsx` source under `root` (absolute paths). A directory the
65
+ * walk could not LIST (a permission error, not one that vanished) is pushed to
66
+ * `unlistedDirs`: every source beneath it went unexamined, so the report counts
67
+ * it as an unread unit of scope — never a directory that held nothing.
68
+ */
69
+ function listSourceFiles(root, unlistedDirs = []) {
64
70
  const out = [];
65
71
  function walk(dir) {
66
72
  let entries = [];
67
73
  try {
68
74
  entries = readdirSync(dir, { withFileTypes: true });
69
75
  }
70
- catch {
76
+ catch (e) {
77
+ const code = e.code;
78
+ if (code !== 'ENOENT' && code !== 'ENOTDIR')
79
+ unlistedDirs.push(dir);
71
80
  return;
72
81
  }
73
82
  for (const e of entries) {
@@ -87,6 +96,11 @@ function listSourceFiles(root) {
87
96
  walk(root);
88
97
  return out;
89
98
  }
99
+ /**
100
+ * The findings one file holds, or `null` when it could not be READ — a file
101
+ * whose imports were never seen is unexamined, never "no findings" (the
102
+ * `[]` this used to return made an unreadable file read as a clean pass).
103
+ */
90
104
  function scanFile(projectRoot, absFile, allowlist, strictReasons = false) {
91
105
  const findings = [];
92
106
  let rawContent;
@@ -94,7 +108,7 @@ function scanFile(projectRoot, absFile, allowlist, strictReasons = false) {
94
108
  rawContent = readFileSync(absFile, 'utf8');
95
109
  }
96
110
  catch {
97
- return findings;
111
+ return null;
98
112
  }
99
113
  const relFile = nodePath.relative(projectRoot, absFile);
100
114
  const lines = rawContent.split('\n');
@@ -260,6 +274,35 @@ function stripCommentsPreservingOffsets(source) {
260
274
  * drift — a change to a test file no longer spuriously fails an imports gate.
261
275
  */
262
276
  const EXCLUDED_FROM_HYGIENE = /__tests__|\/__fixtures__/;
277
+ /**
278
+ * The files of `files` import hygiene actually READS — existing `.ts`/`.tsx`
279
+ * sources, no declarations, no test fixtures (absolute paths). THE authority
280
+ * for "did the hygiene check examine anything?": `buildImportHygieneReport`
281
+ * scans exactly this list, and finish / diff-check count it, so a changeset of
282
+ * deleted files, `.js` edits or test fixtures can never read as a hygiene pass
283
+ * over nothing (round 11).
284
+ */
285
+ export function importHygieneSubjects(projectRoot, files) {
286
+ return files
287
+ .map((f) => (nodePath.isAbsolute(f) ? f : nodePath.join(projectRoot, f)))
288
+ .filter((f) => presentOrUnknowable(f) && /\.(ts|tsx)$/.test(f) && !/\.d\.ts$/.test(f))
289
+ .filter((f) => !EXCLUDED_FROM_HYGIENE.test(f));
290
+ }
291
+ /**
292
+ * A changed path that is GONE is out of scope. One whose stat fails for any
293
+ * other reason (a parent directory that cannot be listed) is kept: its read
294
+ * then fails and it is reported unread — never dropped as if it were deleted.
295
+ */
296
+ function presentOrUnknowable(abs) {
297
+ try {
298
+ statSync(abs);
299
+ return true;
300
+ }
301
+ catch (e) {
302
+ const code = e.code;
303
+ return code !== 'ENOENT' && code !== 'ENOTDIR';
304
+ }
305
+ }
263
306
  function defaultRoots(projectRoot) {
264
307
  const pkgsDir = nodePath.join(projectRoot, 'packages');
265
308
  if (!existsSync(pkgsDir))
@@ -278,19 +321,36 @@ export function buildImportHygieneReport(projectRoot, options = {}) {
278
321
  : loadAllowlist(projectRoot, options.allowlistFile);
279
322
  const roots = options.roots ?? defaultRoots(projectRoot);
280
323
  let scanned;
281
- if (options.files && options.files.length > 0) {
282
- scanned = options.files
283
- .map((f) => (nodePath.isAbsolute(f) ? f : nodePath.join(projectRoot, f)))
284
- .filter((f) => existsSync(f) && /\.(ts|tsx)$/.test(f) && !/\.d\.ts$/.test(f))
285
- .filter((f) => !EXCLUDED_FROM_HYGIENE.test(f));
324
+ const unlistedDirs = [];
325
+ // An explicit `files` list — EVEN AN EMPTY ONE — is the whole request: `[]`
326
+ // scans nothing (an empty changeset), `undefined` scans the tree. Treating
327
+ // `[]` as "no filter" made `check imports --changed-only` over an empty
328
+ // changeset silently widen to the whole tree (round 11 review).
329
+ if (options.files !== undefined) {
330
+ scanned = importHygieneSubjects(projectRoot, options.files);
286
331
  }
287
332
  else {
288
- scanned = roots.flatMap(listSourceFiles).filter((f) => !EXCLUDED_FROM_HYGIENE.test(f));
333
+ scanned = roots.flatMap((r) => listSourceFiles(r, unlistedDirs)).filter((f) => !EXCLUDED_FROM_HYGIENE.test(f));
289
334
  }
290
335
  const findings = [];
336
+ // A directory the walk could not list is one unexamined unit of scope each
337
+ // (`src/app/sub/`) — counted in `filesInScope` and named in `unread`, so
338
+ // `importHygieneCoverage` settles it NOT VERIFIED rather than a clean pass.
339
+ const unlisted = unlistedDirs
340
+ .map((d) => {
341
+ const rel = nodePath.relative(projectRoot, d).split(nodePath.sep).join('/');
342
+ return rel === '' ? './' : `${rel}/`;
343
+ })
344
+ .filter((d) => !EXCLUDED_FROM_HYGIENE.test(d));
345
+ const unread = [...unlisted];
291
346
  const strictReasons = options.strictAllowlistReasons === true;
292
- for (const f of scanned)
293
- findings.push(...scanFile(projectRoot, f, allowlist, strictReasons));
347
+ for (const f of scanned) {
348
+ const fileFindings = scanFile(projectRoot, f, allowlist, strictReasons);
349
+ if (fileFindings === null)
350
+ unread.push(nodePath.relative(projectRoot, f).split(nodePath.sep).join('/'));
351
+ else
352
+ findings.push(...fileFindings);
353
+ }
294
354
  const counts = { total: findings.length };
295
355
  for (const f of findings) {
296
356
  counts[f.kind] = (counts[f.kind] ?? 0) + 1;
@@ -311,6 +371,30 @@ export function buildImportHygieneReport(projectRoot, options = {}) {
311
371
  : verdict === 'warnings'
312
372
  ? 'Review dynamic imports; allowlist legitimate lazy-load boundaries with a reason.'
313
373
  : 'shrk check imports --changed-only',
374
+ filesInScope: scanned.length + unlisted.length,
375
+ unread,
376
+ };
377
+ }
378
+ /**
379
+ * What an import-hygiene run examined, as one coverage record: in-scope files
380
+ * read of in-scope files, naming each unreadable one. THE fold finish,
381
+ * `diff-check` (CLI + MCP) and `check imports` settle on, so an unreadable
382
+ * changed file is NOT VERIFIED (2) on every surface — never a clean pass.
383
+ */
384
+ export function importHygieneCoverage(report, unit = 'source files') {
385
+ const expected = report.filesInScope ?? 0;
386
+ const unread = report.unread ?? [];
387
+ return {
388
+ unit,
389
+ expected,
390
+ examined: Math.max(0, expected - unread.length),
391
+ ...(unread.length > 0
392
+ ? {
393
+ unexamined: unread.slice(0, 20),
394
+ unexaminedTotal: unread.length,
395
+ reason: 'unreadable, so their imports were never checked',
396
+ }
397
+ : {}),
314
398
  };
315
399
  }
316
400
  /**
@@ -355,9 +439,19 @@ export function emitImportHygieneAllowlistDraft(report, options = {}) {
355
439
  allow: entries,
356
440
  };
357
441
  }
358
- export function renderImportHygieneText(report) {
442
+ /**
443
+ * Text rendering. `headline` overrides the header word — the CLI passes the
444
+ * SETTLED verdict (`NOT VERIFIED`) so a run that examined nothing, or not
445
+ * everything, never prints `(OK)` above its own NOT VERIFIED line.
446
+ */
447
+ export function renderImportHygieneText(report, headline) {
359
448
  const lines = [];
360
- lines.push(`=== Import hygiene (${report.verdict.toUpperCase()}) ===`);
449
+ lines.push(`=== Import hygiene (${headline ?? report.verdict.toUpperCase()}) ===`);
450
+ if (report.filesInScope !== undefined)
451
+ lines.push(` files in scope ${report.filesInScope}`);
452
+ if (report.unread && report.unread.length > 0) {
453
+ lines.push(` unreadable ${report.unread.length} (${report.unread.slice(0, 5).join(', ')}${report.unread.length > 5 ? ', …' : ''})`);
454
+ }
361
455
  lines.push(` scanned files (with findings) ${new Set(report.findings.map((f) => f.file)).size}`);
362
456
  lines.push(` errors ${report.counts['error'] ?? 0}`);
363
457
  lines.push(` warnings ${report.counts['warning'] ?? 0}`);
package/dist/index.d.ts CHANGED
@@ -1,4 +1,9 @@
1
1
  export * from './doctor-result.js';
2
+ export * from './doctor-verdict-kind.js';
3
+ export * from './i-doctor-verdict.js';
4
+ export * from './doctor-verdict.js';
5
+ export * from './quality-gate-status.js';
6
+ export * from './quality-gate-row-status.js';
2
7
  export * from './code-intelligence-doctor.js';
3
8
  export * from './project-overview.js';
4
9
  export * from './sharkcraft-inspector.js';
@@ -8,6 +13,8 @@ export * from './agent-instructions.js';
8
13
  export * from './action-hint-diagnostics.js';
9
14
  export * from './ai-readiness.js';
10
15
  export * from './pack-doctor.js';
16
+ export * from './pack-doctor-verdict.js';
17
+ export * from './i-pack-doctor-verdict.js';
11
18
  export * from './task-packet.js';
12
19
  export * from './context-tuning.js';
13
20
  export * from './resolve-verification-commands.js';
@@ -36,6 +43,8 @@ export * from './adoption-merge-preview.js';
36
43
  export * from './adoption-report-renderer.js';
37
44
  export * from './adoption-check.js';
38
45
  export * from './quality-report.js';
46
+ export * from './quality-gate-examination.js';
47
+ export * from './quality-report-coverage.js';
39
48
  export * from './safety-audit.js';
40
49
  export * from './onboarding-agent-import.js';
41
50
  export * from './monorepo-onboarding.js';
@@ -53,6 +62,17 @@ export * from './dashboard/dashboard-data.js';
53
62
  export * from './dashboard/dashboard-knowledge.js';
54
63
  export * from './git-helpers.js';
55
64
  export * from './boundaries-changed-only.js';
65
+ export * from './run-boundary-check.js';
66
+ export * from './boundary-check-options.model.js';
67
+ export * from './boundary-check-result.model.js';
68
+ export * from './boundary-rule-check.model.js';
69
+ export * from './boundary-rule-set-diff.model.js';
70
+ export * from './boundary-stale-exception-finding.model.js';
71
+ export * from './boundary-configuration-status.js';
72
+ export * from './boundary-configuration-status.model.js';
73
+ export * from './boundary-load-issue.model.js';
74
+ export * from './boundary-rule-sources.js';
75
+ export * from './boundary-rule-invalidation.model.js';
56
76
  export * from './helper-registry.js';
57
77
  export * from './pack-author-ux.js';
58
78
  export * from './pack-test-runner.js';
@@ -100,6 +120,22 @@ export * from './playbook-script.js';
100
120
  export * from './search-index.js';
101
121
  export * from './search-tuning-registry.js';
102
122
  export * from './search-tuning-explain.js';
123
+ export * from './search-document-prefix.js';
124
+ export * from './search-document-id.js';
125
+ export * from './tuning-query-tokens.js';
126
+ export * from './search-tuning-key-status.js';
127
+ export * from './search-tuning-key-resolution.js';
128
+ export * from './search-tuning-key-resolver.js';
129
+ export * from './i-search-tuning-lint-issue.js';
130
+ export * from './i-search-tuning-lint-report.js';
131
+ export * from './search-tuning-lint.js';
132
+ export * from './i-search-tuning-key-probe.js';
133
+ export * from './search-tuning-key-probes.js';
134
+ export * from './i-asset-doctor-flags.js';
135
+ export * from './asset-doctor-proposed-exit.js';
136
+ export * from './i-scaffold-pattern-doctor-report.js';
137
+ export * from './scaffold-pattern-doctor-report.js';
138
+ export * from './settled-unit-states.js';
103
139
  export * from './agent-brief.js';
104
140
  export * from './bundle-replay.js';
105
141
  export * from './bundle-diff.js';
@@ -170,6 +206,34 @@ export * from './ingest-apply.js';
170
206
  export * from './changed-scope.js';
171
207
  export * from './doctor-suppressions.js';
172
208
  export * from './knowledge-stale.js';
209
+ export * from './knowledge-entry-verdict.js';
210
+ export * from './knowledge-unverifiable-reason.js';
211
+ export * from './knowledge-entry-verdict-record.js';
212
+ export * from './knowledge-stale-coverage.js';
213
+ export * from './knowledge-kind-bucket.js';
214
+ export * from './knowledge-reference-kind-bucket.js';
215
+ export * from './knowledge-stale-advisory.js';
216
+ export * from './declared-reference-coverage.js';
217
+ export * from './knowledge-stale-gate.js';
218
+ export * from './knowledge-stale-gate-flags.js';
219
+ export * from './knowledge-stale-gate-input.js';
220
+ export * from './knowledge-stale-gate-result.js';
221
+ export * from './knowledge-stale-gate-rule.js';
222
+ export * from './knowledge-stale-gate-violation.js';
223
+ export * from './knowledge-stale-quality-gate.js';
224
+ export * from './declared-gate-plane-rules.js';
225
+ export * from './i-command-safety.js';
226
+ export * from './knowledge-advisory-code.js';
227
+ export * from './knowledge-aged-entry.js';
228
+ export * from './reference-failure.js';
229
+ export * from './reference-asset-kind.js';
230
+ export * from './reference-subject.js';
231
+ export * from './reference-content-check.js';
232
+ export * from './policy-declaration.js';
233
+ export * from './inspection-discovery.js';
234
+ export * from './knowledge-load-failure.js';
235
+ export * from './symbol-member-kind.js';
236
+ export * from './symbol-member-entry.js';
173
237
  export * from './knowledge-rename.js';
174
238
  export * from './template-drift.js';
175
239
  export * from './barrel-operations.js';
@@ -203,10 +267,36 @@ export * from './acceptance-replay.js';
203
267
  export * from './pack-helper-registry.js';
204
268
  export * from './task-routing-hint-registry.js';
205
269
  export * from './registration-hint-registry.js';
270
+ export * from './routing-recommends-channels.js';
271
+ export * from './registration-hint-discovery-status.js';
206
272
  export * from './import-hygiene.js';
207
273
  export * from './dev-cycle.js';
208
274
  export * from './ci-predict.js';
209
275
  export * from './pack-signature-status.js';
276
+ export * from './pack-asset-freshness.js';
277
+ export * from './contribution-load-failures.js';
278
+ export * from './i-contribution-entry-rejection.js';
279
+ export * from './i-contribution-accepted-entry.js';
280
+ export * from './i-contribution-file-issue.js';
281
+ export * from './i-registry-outcomes.js';
282
+ export * from './i-kind-outcomes.js';
283
+ export * from './framework-extractor-outcomes.js';
284
+ export * from './unresolvable-reason.js';
285
+ export * from './i-unresolvable-reference.js';
286
+ export * from './i-unresolvable-reference-scan.js';
287
+ export * from './i-contribution-file-report.js';
288
+ export * from './i-contributions-report.js';
289
+ export * from './contributions-report.js';
290
+ export * from './i-contribution-file-validation.js';
291
+ export * from './validate-contribution-file.js';
292
+ export * from './typecheck-files.js';
293
+ export * from './helper-view.js';
294
+ export * from './helper-catalog.js';
295
+ export * from './pack-helper-plan.js';
296
+ export * from './substitute-placeholders.js';
297
+ export * from './unregistered-exports.js';
298
+ export * from './pack-manifest-reader.js';
299
+ export * from './pack-typecheck.js';
210
300
  export * from './rule-drift.js';
211
301
  export * from './agent-task-prep.js';
212
302
  export * from './uncertainty-report.js';
@@ -232,5 +322,56 @@ export * from './grounding/nx-projects.js';
232
322
  export * from './why-file.js';
233
323
  export * from './nearest-id.js';
234
324
  export * from './reference-registry.js';
325
+ export * from './i-reference-kind-declaration.js';
326
+ export * from './reference-kind-declarations.js';
327
+ export * from './i-workspace-profile-payload.js';
328
+ export * from './probed-id-source.js';
329
+ export * from './i-probed-id-field.js';
330
+ export * from './probed-id-fields.js';
331
+ export * from './command-resolution-status.js';
332
+ export * from './i-command-resolution.js';
333
+ export * from './i-reference-warm-options.js';
334
+ export * from './i-command-resolve-options.js';
335
+ export * from './reference-id-status.js';
235
336
  export * from './doc-references.js';
337
+ export * from './declared-cross-references.js';
338
+ export * from './declared-xref-status.js';
339
+ export * from './i-declared-xref-field.js';
340
+ export * from './i-declared-xref-issue.js';
341
+ export * from './i-declared-xref-report.js';
342
+ export * from './i-declared-xref-row.js';
343
+ export * from './split-identifier.js';
344
+ export * from './term-query.js';
345
+ export * from './match-terms.js';
346
+ export * from './query-intent-kind.js';
347
+ export * from './query-intent-result.js';
348
+ export * from './query-intent.js';
349
+ export * from './command-safety-level.js';
350
+ export * from './recommendation-source.js';
351
+ export * from './recommendation-suppression.js';
352
+ export * from './recommendation-candidate.js';
353
+ export * from './recommendation-confidence.js';
354
+ export * from './recommendation-ranking-options.js';
355
+ export * from './ranked-recommendations.js';
356
+ export * from './recommend-recipe.js';
357
+ export * from './recommend-recipes.js';
358
+ export * from './recommendation-ranking.js';
359
+ export * from './playbook-load-issue.js';
360
+ export * from './reuse/reuse-tokenize.js';
361
+ export * from './reuse/score-reuse-name.js';
362
+ export * from './reuse/reuse-match-detail.js';
363
+ export * from './reuse/score-reuse-primitive.js';
364
+ export * from './reuse/reuse-suggestion.js';
365
+ export * from './reuse/rank-reuse-suggestions.js';
366
+ export * from './reuse/reuse-candidate.js';
367
+ export * from './reuse/reuse-ranking.js';
368
+ export * from './reuse/rank-reuse-options.js';
369
+ export * from './reuse/rank-reuse-candidates.js';
370
+ export * from './reuse/reuse-curated-status.js';
371
+ export * from './reuse/reuse-curated-coverage.js';
372
+ export * from './reuse/reuse-symbol-lookup.js';
373
+ export * from './reuse/reuse-curated-resolution.js';
374
+ export * from './reuse/resolve-curated-reuse.js';
375
+ export * from './reuse/reuse-coverage-report.js';
376
+ export * from './reuse/compute-reuse-coverage.js';
236
377
  //# sourceMappingURL=index.d.ts.map