@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
@@ -5,50 +5,124 @@
5
5
  * into a single in-memory list. Patterns are data; this module never executes
6
6
  * shell commands or evaluates pack code beyond a dynamic import.
7
7
  */
8
- import { existsSync } from 'node:fs';
8
+ import { existsSync, readdirSync, statSync } from 'node:fs';
9
9
  import * as nodePath from 'node:path';
10
- import { importModuleViaLoader } from '@shrkcrft/core';
11
- import { isRecognizedScaffoldStrategy, } from '@shrkcrft/plugin-api';
10
+ import { DEAD_SELECTOR_CAUSES, importModuleViaLoader, MARKABLE_UNIT_LISTS, MarkableUnitList, mergeUnitMarks, normalizeUnitList, qualifyListPath, qualifyUnitMarks, RejectionCause, settleUnitLiveness, stampUnitMarks, UnitDeadWeight, UnitLivenessState, unitListProblems, unitProblemsOf, } from '@shrkcrft/core';
11
+ import { isRecognizedScaffoldStrategy, normalizeScaffoldPattern, resolveScaffoldStrategy, } from '@shrkcrft/plugin-api';
12
+ /** THE closed set of a pattern's `confidence` — the loader and the doctor read one set. */
13
+ const SCAFFOLD_CONFIDENCES = new Set(['high', 'medium', 'low']);
14
+ /**
15
+ * THE scaffold-pattern acceptance predicate (round 12, 12.1 / 12.1d): `id`,
16
+ * `templateId`, a non-empty `matchPaths` and a `confidence` from the closed
17
+ * set — `[]` means accepted. `confidence` was checked only by `scaffolds
18
+ * doctor`, so a pattern without one was ACCEPTED and `scaffolds list` crashed
19
+ * on it (`p.pattern.confidence.padEnd`).
20
+ */
21
+ export function scaffoldPatternRejectionReasons(raw) {
22
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
23
+ return ['(entry): must be an object'];
24
+ const p = raw;
25
+ const out = [];
26
+ if (typeof p.id !== 'string' || p.id.length === 0)
27
+ out.push('id: must be a non-empty string');
28
+ if (typeof p.templateId !== 'string' || p.templateId.length === 0) {
29
+ out.push('templateId: must be a non-empty string');
30
+ }
31
+ if (!Array.isArray(p.matchPaths) || p.matchPaths.length === 0) {
32
+ out.push('matchPaths: must be a non-empty array');
33
+ }
34
+ else {
35
+ // Round 13: each entry is a glob string or a well-formed
36
+ // `{ pattern, expectEmpty: true, reason? }` marker — THE core parser's
37
+ // problems, one per bad entry. An object used to load as the glob
38
+ // `[object Object]` (matching nothing, silently).
39
+ out.push(...unitListProblems(p.matchPaths, MATCH_PATHS));
40
+ }
41
+ if ('expectEmptyUnits' in p) {
42
+ out.push(`expectEmptyUnits: derived by the loader — mark the entry itself: matchPaths: [{ pattern, expectEmpty: true }]`);
43
+ }
44
+ if (typeof p.confidence !== 'string' || !SCAFFOLD_CONFIDENCES.has(p.confidence)) {
45
+ out.push(`confidence: must be high|medium|low (got "${String(p.confidence)}")`);
46
+ }
47
+ return out;
48
+ }
49
+ /** THE list path of `matchPaths` — the loader's marks and the doctor's observations share it. */
50
+ const MATCH_PATHS = MARKABLE_UNIT_LISTS[MarkableUnitList.ScaffoldPatternMatchPaths].listPath;
51
+ /**
52
+ * A pattern's `matchPaths` as plain globs plus its marker ledger — idempotent,
53
+ * so a hand-built pattern that still carries `{ pattern, expectEmpty }` entries
54
+ * is read by its units instead of as the glob `[object Object]`.
55
+ */
56
+ function patternUnits(p) {
57
+ const list = Array.isArray(p.matchPaths) ? p.matchPaths : [];
58
+ const n = normalizeUnitList(list, MATCH_PATHS);
59
+ return n.ok
60
+ ? { units: n.value.units, marks: mergeUnitMarks(p.expectEmptyUnits, n.value.marks) }
61
+ : { units: list.filter((g) => typeof g === 'string'), marks: p.expectEmptyUnits ?? [] };
62
+ }
12
63
  export async function loadScaffoldPatternsFromFile(file) {
13
- if (!existsSync(file))
14
- return { patterns: [], warnings: [`scaffold pattern file missing: ${file}`] };
64
+ if (!existsSync(file)) {
65
+ return { patterns: [], indices: [], warnings: [`scaffold pattern file missing: ${file}`], rejected: [] };
66
+ }
15
67
  try {
16
68
  const mod = await importModuleViaLoader(file);
17
69
  const raw = mod.default ?? mod;
18
70
  if (!Array.isArray(raw)) {
19
71
  return {
20
72
  patterns: [],
73
+ indices: [],
21
74
  warnings: [`scaffold pattern file did not default-export an array: ${file}`],
75
+ rejected: [],
22
76
  };
23
77
  }
24
78
  const out = [];
25
- const warnings = [];
26
- for (const candidate of raw) {
27
- if (!candidate || typeof candidate !== 'object') {
28
- warnings.push(`scaffold pattern entry is not an object in ${file}`);
29
- continue;
30
- }
31
- const p = candidate;
32
- if (!p.id || typeof p.id !== 'string') {
33
- warnings.push(`scaffold pattern missing id in ${file}`);
34
- continue;
35
- }
36
- if (!p.templateId || typeof p.templateId !== 'string') {
37
- warnings.push(`scaffold pattern "${p.id}" missing templateId in ${file}`);
38
- continue;
79
+ const indices = [];
80
+ const rejected = [];
81
+ raw.forEach((candidate, index) => {
82
+ const reasons = scaffoldPatternRejectionReasons(candidate);
83
+ if (reasons.length > 0) {
84
+ const id = candidate && typeof candidate === 'object' ? candidate.id : undefined;
85
+ rejected.push({
86
+ file,
87
+ index,
88
+ exportName: 'default',
89
+ ...(typeof id === 'string' && id.length > 0 ? { entryId: id } : {}),
90
+ reasons,
91
+ cause: RejectionCause.Invalid,
92
+ });
93
+ return;
39
94
  }
40
- if (!Array.isArray(p.matchPaths) || p.matchPaths.length === 0) {
41
- warnings.push(`scaffold pattern "${p.id}" must declare matchPaths in ${file}`);
42
- continue;
95
+ // THE normaliser (round 13): `matchPaths` markers become plain globs + the
96
+ // `expectEmptyUnits` ledger (the pack stamp is added by the inspection
97
+ // loader, which knows the pack). A new object — the module's export is
98
+ // never patched.
99
+ const normalized = normalizeScaffoldPattern(candidate);
100
+ if (!normalized.ok) {
101
+ const id = candidate.id;
102
+ rejected.push({
103
+ file,
104
+ index,
105
+ exportName: 'default',
106
+ ...(typeof id === 'string' && id.length > 0 ? { entryId: id } : {}),
107
+ reasons: unitProblemsOf(normalized.error),
108
+ cause: RejectionCause.Invalid,
109
+ });
110
+ return;
43
111
  }
44
- out.push(p);
45
- }
46
- return { patterns: out, warnings };
112
+ const p = normalized.value;
113
+ // The list every consumer iterates (`extractVariablesForFile`): a missing
114
+ // one is normalised to a frozen [] rather than reaching it as undefined.
115
+ out.push(Array.isArray(p.variables) ? p : { ...p, variables: Object.freeze([]) });
116
+ indices.push(index);
117
+ });
118
+ return { patterns: out, indices, warnings: [], rejected };
47
119
  }
48
120
  catch (e) {
49
121
  return {
50
122
  patterns: [],
123
+ indices: [],
51
124
  warnings: [`failed to import scaffold pattern file ${file}: ${e.message}`],
125
+ rejected: [],
52
126
  };
53
127
  }
54
128
  }
@@ -59,22 +133,35 @@ export async function loadScaffoldPatternsFromFile(file) {
59
133
  export async function loadScaffoldPatternsFromInspection(inspection) {
60
134
  const seen = new Map();
61
135
  const warnings = [];
136
+ const rejected = [];
137
+ const duplicate = (p, file, index, prev) => {
138
+ rejected.push({
139
+ file,
140
+ index,
141
+ exportName: 'default',
142
+ entryId: p.id,
143
+ reasons: [`id: "${p.id}" is already declared in ${prev.source.file ?? prev.source.type}`],
144
+ cause: RejectionCause.DuplicateId,
145
+ });
146
+ };
62
147
  // Also load a local sharkcraft/scaffold-patterns.ts when present.
63
148
  if (inspection.sharkcraftDir) {
64
149
  const local = nodePath.join(inspection.sharkcraftDir, 'scaffold-patterns.ts');
65
150
  if (existsSync(local)) {
66
151
  const r = await loadScaffoldPatternsFromFile(local);
67
152
  warnings.push(...r.warnings);
68
- for (const p of r.patterns) {
69
- if (seen.has(p.id)) {
70
- warnings.push(`scaffold pattern "${p.id}" duplicated — local version skipped`);
71
- continue;
153
+ rejected.push(...r.rejected);
154
+ r.patterns.forEach((p, i) => {
155
+ const prev = seen.get(p.id);
156
+ if (prev) {
157
+ duplicate(p, local, r.indices[i] ?? i, prev);
158
+ return;
72
159
  }
73
160
  seen.set(p.id, {
74
161
  pattern: p,
75
162
  source: { type: 'local', file: local },
76
163
  });
77
- }
164
+ });
78
165
  }
79
166
  }
80
167
  for (const pack of inspection.packs.validPacks) {
@@ -83,13 +170,19 @@ export async function loadScaffoldPatternsFromInspection(inspection) {
83
170
  const full = nodePath.resolve(pack.packageRoot, rel);
84
171
  const r = await loadScaffoldPatternsFromFile(full);
85
172
  warnings.push(...r.warnings);
86
- for (const p of r.patterns) {
87
- if (seen.has(p.id)) {
88
- warnings.push(`scaffold pattern "${p.id}" duplicated — pack version skipped`);
173
+ rejected.push(...r.rejected);
174
+ for (const [i, p] of r.patterns.entries()) {
175
+ const prev = seen.get(p.id);
176
+ if (prev) {
177
+ duplicate(p, full, r.indices[i] ?? i, prev);
89
178
  continue;
90
179
  }
91
180
  seen.set(p.id, {
92
- pattern: p,
181
+ // A pack's markers carry the pack (round 13): a pack marker that went
182
+ // live is INFO for the consumer, who cannot edit it.
183
+ pattern: p.expectEmptyUnits
184
+ ? { ...p, expectEmptyUnits: stampUnitMarks(p.expectEmptyUnits, pack.packageName) }
185
+ : p,
93
186
  source: {
94
187
  type: 'pack',
95
188
  packageName: pack.packageName,
@@ -104,10 +197,59 @@ export async function loadScaffoldPatternsFromInspection(inspection) {
104
197
  }
105
198
  }
106
199
  }
107
- return { patterns: [...seen.values()], warnings };
200
+ return { patterns: [...seen.values()], warnings, rejected };
108
201
  }
109
- export function doctorScaffoldPatterns(patterns, inspection) {
202
+ /**
203
+ * `coverage` (optional, from {@link enumerateScaffoldPatternCandidates}) adds
204
+ * the per-unit dead-selector checks: a `matchPaths` glob matching no file, and
205
+ * a pattern matching no file after `excludePaths`. Without it only the
206
+ * definitions are validated (back-compat).
207
+ */
208
+ export function doctorScaffoldPatterns(patterns, inspection, coverage) {
110
209
  const issues = [];
210
+ if (coverage) {
211
+ // Every per-unit finding comes from THE settle (round 13): a dead glob or
212
+ // pattern is a warning; an intended-empty glob and a stale marker are info
213
+ // (the acceptance rides in coverage; went-live fails only through
214
+ // `selectorUnitFails` under `--fail-on-dead-units`).
215
+ const liveness = scaffoldPatternLiveness(patterns, coverage);
216
+ for (const { pattern: p } of patterns) {
217
+ if (!coverage.byPattern.has(p.id))
218
+ continue;
219
+ for (const u of liveness.globs.units.filter((x) => x.list === qualifyListPath(p.id, MATCH_PATHS))) {
220
+ if (u.state === UnitLivenessState.Dead) {
221
+ issues.push({
222
+ patternId: p.id,
223
+ field: 'matchPaths',
224
+ severity: 'warning',
225
+ code: 'matchPaths-matched-nothing',
226
+ target: u.unit,
227
+ message: `matchPaths glob "${u.unit}" matches no file, so the pattern never sees files through it — ${DEAD_SELECTOR_CAUSES}`,
228
+ });
229
+ }
230
+ else if (u.state === UnitLivenessState.IntendedEmpty || u.state === UnitLivenessState.WentLive) {
231
+ issues.push({
232
+ patternId: p.id,
233
+ field: 'matchPaths',
234
+ severity: 'info',
235
+ code: u.state === UnitLivenessState.IntendedEmpty ? 'matchPaths-intended-empty' : 'matchPaths-went-live',
236
+ target: u.unit,
237
+ // THE settle's sentence; the pattern is already the finding's subject.
238
+ message: `matchPaths glob "${u.unit}" — ${u.message}`,
239
+ });
240
+ }
241
+ }
242
+ if (liveness.patterns.dead.some((u) => u.unit === p.id)) {
243
+ issues.push({
244
+ patternId: p.id,
245
+ field: 'matchPaths',
246
+ severity: 'warning',
247
+ code: 'pattern-dead',
248
+ message: 'matches no file (after excludePaths), so inference can never suggest it',
249
+ });
250
+ }
251
+ }
252
+ }
111
253
  const knownTemplateIds = new Set(inspection.templateRegistry.list().map((t) => t.id));
112
254
  for (const { pattern: p } of patterns) {
113
255
  if (!p.title) {
@@ -129,7 +271,7 @@ export function doctorScaffoldPatterns(patterns, inspection) {
129
271
  message: 'appliesWhen is empty — pattern will not be consulted by any lifecycle hook',
130
272
  });
131
273
  }
132
- if (p.confidence !== 'high' && p.confidence !== 'medium' && p.confidence !== 'low') {
274
+ if (!SCAFFOLD_CONFIDENCES.has(String(p.confidence))) {
133
275
  issues.push({
134
276
  patternId: p.id,
135
277
  field: 'confidence',
@@ -208,67 +350,216 @@ export function matchScaffoldPattern(pattern, relativePath) {
208
350
  if (globToRegExp(x).test(path))
209
351
  return false;
210
352
  }
211
- for (const m of pattern.matchPaths) {
353
+ for (const m of patternUnits(pattern).units) {
212
354
  if (globToRegExp(m).test(path))
213
355
  return true;
214
356
  }
215
357
  return false;
216
358
  }
359
+ // ─── Candidate enumeration (the one walker infer and the doctor share) ────────
360
+ /** Directory names the candidate walk never enters. */
361
+ const SCAFFOLD_WALK_SKIP = new Set([
362
+ 'node_modules',
363
+ '.git',
364
+ 'dist',
365
+ '.sharkcraft',
366
+ '__tests__',
367
+ ]);
368
+ /**
369
+ * THE scaffold candidate walker: every file under `root` once (skipping
370
+ * vendor/build/VCS and test dirs), with its project-relative POSIX path.
371
+ * `infer templates` and the scaffold doctor both read it, so the doctor's
372
+ * per-pattern counts equal infer's candidates by construction. Returns the
373
+ * number of files visited.
374
+ */
375
+ export function walkScaffoldCandidateFiles(root, onFile) {
376
+ let walked = 0;
377
+ const visit = (dir) => {
378
+ let entries;
379
+ try {
380
+ entries = readdirSync(dir);
381
+ }
382
+ catch {
383
+ return;
384
+ }
385
+ for (const e of entries) {
386
+ if (SCAFFOLD_WALK_SKIP.has(e))
387
+ continue;
388
+ const full = nodePath.join(dir, e);
389
+ let st;
390
+ try {
391
+ st = statSync(full);
392
+ }
393
+ catch {
394
+ continue;
395
+ }
396
+ if (st.isDirectory())
397
+ visit(full);
398
+ else if (st.isFile()) {
399
+ walked += 1;
400
+ onFile(full, nodePath.relative(root, full).split(nodePath.sep).join('/'));
401
+ }
402
+ }
403
+ };
404
+ if (existsSync(root))
405
+ visit(root);
406
+ return walked;
407
+ }
408
+ /**
409
+ * Walk once and count, per pattern, the files it matches (the runtime matcher,
410
+ * `excludePaths` honoured) and the files each `matchPaths` glob matches on its
411
+ * own (`globToRegExp` — the pattern's own dialect, not the boundaries one).
412
+ */
413
+ export function enumerateScaffoldPatternCandidates(projectRoot, patterns) {
414
+ // Compiled once per walk. A non-string / empty entry compiles to nothing —
415
+ // exactly what `matchScaffoldPattern` makes of it (`/^$/` or a throw) — and
416
+ // the doctor reports it as a definition error.
417
+ const compile = (list) => (list ?? []).map((g) => (typeof g === 'string' && g.length > 0 ? globToRegExp(g) : null));
418
+ const compiled = patterns.map(({ pattern }) => {
419
+ const units = patternUnits(pattern).units;
420
+ return {
421
+ pattern,
422
+ units,
423
+ globs: compile(units),
424
+ excludes: compile(pattern.excludePaths),
425
+ counts: units.map(() => 0),
426
+ files: [],
427
+ };
428
+ });
429
+ const firstMatch = [];
430
+ const walked = walkScaffoldCandidateFiles(projectRoot, (_abs, rel) => {
431
+ let first;
432
+ for (const c of compiled) {
433
+ let anyGlob = false;
434
+ c.globs.forEach((re, i) => {
435
+ if (re && re.test(rel)) {
436
+ c.counts[i] = (c.counts[i] ?? 0) + 1;
437
+ anyGlob = true;
438
+ }
439
+ });
440
+ // `matchScaffoldPattern`'s semantics: excluded first, then any glob.
441
+ if (anyGlob && !c.excludes.some((re) => re !== null && re.test(rel))) {
442
+ c.files.push(rel);
443
+ first ??= c.pattern.id;
444
+ }
445
+ }
446
+ if (first)
447
+ firstMatch.push({ file: rel, patternId: first });
448
+ });
449
+ const byPattern = new Map();
450
+ for (const c of compiled) {
451
+ byPattern.set(c.pattern.id, {
452
+ patternId: c.pattern.id,
453
+ files: c.files,
454
+ perMatchPath: c.units.map((glob, i) => ({ glob, files: c.counts[i] ?? 0 })),
455
+ });
456
+ }
457
+ return { byPattern, firstMatch, walked };
458
+ }
459
+ /**
460
+ * THE two settles over an enumeration (round 13): every `matchPaths` glob
461
+ * (markable: exists = live = it matches a file), and the DERIVED pattern-level
462
+ * unit (does the pattern match a file after `excludePaths`; not authored, so
463
+ * never marked). A pattern whose every glob is intended-empty is left OUT of
464
+ * the pattern-level settle — its glob-level acceptance speaks for it: ONE
465
+ * planned fact is ONE acceptance, not the dead=2 it used to be.
466
+ */
467
+ function scaffoldPatternLiveness(patterns, enumeration) {
468
+ const globObservations = [];
469
+ const marks = [];
470
+ for (const { pattern } of patterns) {
471
+ const list = qualifyListPath(pattern.id, MATCH_PATHS);
472
+ for (const g of enumeration.byPattern.get(pattern.id)?.perMatchPath ?? []) {
473
+ globObservations.push({
474
+ list,
475
+ unit: g.glob,
476
+ label: `${pattern.id}: ${g.glob}`,
477
+ exists: g.files > 0,
478
+ live: g.files > 0,
479
+ matched: g.files,
480
+ liveBecause: `matches ${g.files} file(s)`,
481
+ deadReason: 'matched no file',
482
+ });
483
+ }
484
+ marks.push(...qualifyUnitMarks(patternUnits(pattern).marks, pattern.id));
485
+ }
486
+ const globs = settleUnitLiveness({
487
+ subject: 'scaffold patterns',
488
+ unitLabel: MARKABLE_UNIT_LISTS[MarkableUnitList.ScaffoldPatternMatchPaths].unitLabel,
489
+ weight: UnitDeadWeight.Coverage,
490
+ observations: globObservations,
491
+ marks,
492
+ deadSummary: 'matched no file',
493
+ });
494
+ const patternObservations = [];
495
+ for (const { pattern } of patterns) {
496
+ const own = globs.units.filter((u) => u.list === qualifyListPath(pattern.id, MATCH_PATHS));
497
+ if (own.length > 0 && own.every((u) => u.state === UnitLivenessState.IntendedEmpty))
498
+ continue;
499
+ const files = enumeration.byPattern.get(pattern.id)?.files.length ?? 0;
500
+ patternObservations.push({
501
+ list: 'patterns',
502
+ unit: pattern.id,
503
+ exists: files > 0,
504
+ live: files > 0,
505
+ matched: files,
506
+ liveBecause: `matches ${files} file(s) after excludePaths`,
507
+ deadReason: 'match no file after excludePaths',
508
+ });
509
+ }
510
+ const settledPatterns = settleUnitLiveness({
511
+ subject: 'scaffold patterns',
512
+ unitLabel: 'patterns',
513
+ weight: UnitDeadWeight.Coverage,
514
+ observations: patternObservations,
515
+ marks: [],
516
+ deadSummary: 'match no file after excludePaths',
517
+ });
518
+ return { globs, patterns: settledPatterns };
519
+ }
520
+ /**
521
+ * Per-unit coverage over an enumeration, from THE settles
522
+ * (`scaffoldPatternLiveness`): `matchPaths globs` (examined = globs matching a
523
+ * file; an intended-empty glob is its own printed acceptance) and `patterns`
524
+ * (examined = patterns matching a file after `excludePaths`). Empty when there
525
+ * are no patterns.
526
+ */
527
+ export function scaffoldPatternCoverage(patterns, enumeration) {
528
+ if (patterns.length === 0)
529
+ return { coverage: [], deadUnits: [], liveness: [] };
530
+ const settled = scaffoldPatternLiveness(patterns, enumeration);
531
+ return {
532
+ coverage: [...settled.globs.coverage, ...settled.patterns.coverage],
533
+ deadUnits: [
534
+ ...settled.globs.dead.map((u) => `scaffold pattern ${u.label}`),
535
+ ...settled.patterns.dead.map((u) => `scaffold pattern ${u.unit} (no file)`),
536
+ ],
537
+ liveness: [settled.globs, settled.patterns],
538
+ };
539
+ }
217
540
  export function extractVariablesForFile(pattern, filePath, inspection) {
218
541
  const warnings = [];
219
542
  const values = {};
220
543
  const base = nodePath.basename(filePath).replace(/\.(tsx?|jsx?)$/i, '');
221
544
  const dirSegments = filePath.split(/[\\/]/).slice(0, -1);
222
545
  const dir = dirSegments[dirSegments.length - 1] ?? '';
223
- for (const v of pattern.variables) {
546
+ // THE strategy table (plugin-api `resolveScaffoldStrategy`) — the same one
547
+ // `isRecognizedScaffoldStrategy` reads, so "recognised" and "implemented"
548
+ // cannot drift apart.
549
+ const packageName = inspection.workspace.packageName ?? undefined;
550
+ for (const v of pattern.variables ?? []) {
224
551
  const strat = String(v.from);
225
- let value = '';
226
- if (strat === 'filename.kebab') {
227
- value = base
228
- .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
229
- .replace(/_+/g, '-')
230
- .toLowerCase();
231
- }
232
- else if (strat === 'filename.pascal') {
233
- value = base
234
- .split(/[-_.]/)
235
- .filter(Boolean)
236
- .map((s) => s[0].toUpperCase() + s.slice(1))
237
- .join('');
238
- }
239
- else if (strat === 'className') {
240
- value = pascal(base);
241
- }
242
- else if (strat.startsWith('className.stripPrefix:')) {
243
- const prefix = strat.slice('className.stripPrefix:'.length);
244
- const pascalName = pascal(base);
245
- value = pascalName.startsWith(prefix) ? pascalName.slice(prefix.length) : pascalName;
246
- }
247
- else if (strat === 'functionName') {
248
- value = camel(base);
249
- }
250
- else if (strat === 'directoryName') {
251
- value = dir;
252
- }
253
- else if (strat === 'nearestPackageName') {
254
- value = inspection.workspace.packageName ?? '';
255
- }
256
- else {
552
+ const r = resolveScaffoldStrategy(strat, {
553
+ basename: base,
554
+ directory: dir,
555
+ ...(packageName ? { packageName } : {}),
556
+ });
557
+ if (!r.recognized) {
257
558
  warnings.push(`unrecognized extraction strategy "${strat}" for variable "${v.name}"`);
559
+ continue;
258
560
  }
259
- if (value)
260
- values[v.name] = value;
561
+ if (r.value)
562
+ values[v.name] = r.value;
261
563
  }
262
564
  return { values, warnings };
263
565
  }
264
- function pascal(s) {
265
- return s
266
- .split(/[-_.]/)
267
- .filter(Boolean)
268
- .map((p) => p[0].toUpperCase() + p.slice(1))
269
- .join('');
270
- }
271
- function camel(s) {
272
- const p = pascal(s);
273
- return p ? p[0].toLowerCase() + p.slice(1) : '';
274
- }
@@ -1 +1 @@
1
- {"version":3,"file":"schema-inventory.d.ts","sourceRoot":"","sources":["../src/schema-inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,UAAU,oBAAoB;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,uBAAuB,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACvD,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACjD;AAqOD,wBAAgB,oBAAoB,IAAI,sBAAsB,CAQ7D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAehF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAiBpF;AAED,4DAA4D;AAC5D,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAEjF"}
1
+ {"version":3,"file":"schema-inventory.d.ts","sourceRoot":"","sources":["../src/schema-inventory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,UAAU,oBAAoB;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,uBAAuB,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACvD,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACjD;AAsOD,wBAAgB,oBAAoB,IAAI,sBAAsB,CAQ7D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAehF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAiBpF;AAED,4DAA4D;AAC5D,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAEjF"}
@@ -101,7 +101,7 @@ const SCHEMA_ENTRIES = [
101
101
  ],
102
102
  currentVersion: 'v1',
103
103
  summary: 'Pack manifest envelope (signed). Consumed by `shrk packs *`.',
104
- emittedBy: 'shrk packs build',
104
+ emittedBy: 'shrk packs sign',
105
105
  docs: 'docs/security.md',
106
106
  },
107
107
  {
@@ -192,8 +192,9 @@ const SCHEMA_ENTRIES = [
192
192
  { version: 'v1', status: SchemaStatus.Current },
193
193
  ],
194
194
  currentVersion: 'v1',
195
- summary: 'Compliance profile + check envelope.',
196
- emittedBy: 'shrk compliance check',
195
+ // Its CLI verb was retired; the envelope is emitted by the inspector
196
+ // library (compliance-profiles.ts), so no command is named here.
197
+ summary: 'Compliance profile + check envelope (emitted by the inspector library; its CLI verb was retired).',
197
198
  },
198
199
  {
199
200
  id: 'sharkcraft.review-packet',
@@ -0,0 +1,52 @@
1
+ /**
2
+ * THE search-document id codec: `<prefix>:<id>`.
3
+ *
4
+ * Every search document is keyed `<prefix>:<id>` (`knowledge:auth.login`,
5
+ * `rule:no-foo`, `facet:<construct>:<facet>`), and search tuning matches a
6
+ * boost key against that WHOLE id (`boostIds[doc.id]`). The format used to be
7
+ * hand-written at fourteen sites in the index builder, three in the task ranker
8
+ * and one in the context re-ranker, while the self-config doctor looked the
9
+ * whole key up in BARE-id registries. The two readings disagreed exactly: a
10
+ * correctly prefixed key (which fires) was reported "unknown", and a bare key
11
+ * (which can never fire) passed. One codec, read by every writer and every
12
+ * reader, so they cannot disagree again.
13
+ *
14
+ * Split on the FIRST `:` — facet ids themselves contain a `:`.
15
+ */
16
+ import type { ReferenceKind } from './reference-registry.js';
17
+ import type { SearchDocumentPrefix } from './search-document-prefix.js';
18
+ /** Every search-document prefix, in declaration order. */
19
+ export declare const SEARCH_DOCUMENT_PREFIXES: readonly SearchDocumentPrefix[];
20
+ /** Prefix → the id registry its ids resolve against (`null` = none). */
21
+ export declare const SEARCH_DOCUMENT_ID_KINDS: Readonly<Record<SearchDocumentPrefix, ReferenceKind | null>>;
22
+ /** `searchDocumentId('knowledge', 'auth.login')` → `knowledge:auth.login`. */
23
+ export declare function searchDocumentId(prefix: SearchDocumentPrefix, id: string): string;
24
+ /**
25
+ * `<prefix>:<id>` → `{ prefix, id }`, split on the FIRST `:`. `null` when the
26
+ * key has no `:` or either side is empty. The prefix is NOT validated — pair
27
+ * with {@link isSearchDocumentPrefix}.
28
+ */
29
+ export declare function parseSearchDocumentId(key: string): {
30
+ readonly prefix: string;
31
+ readonly id: string;
32
+ } | null;
33
+ /** True when `prefix` is one `buildSearchIndex` emits. */
34
+ export declare function isSearchDocumentPrefix(prefix: string): prefix is SearchDocumentPrefix;
35
+ /** The `SearchKind` value the prefix's documents carry, or `undefined`. */
36
+ export declare function searchKindForPrefix(prefix: string): string | undefined;
37
+ /** The prefix whose documents carry `searchKind` (`construct-facet` → `facet`). */
38
+ export declare function searchDocumentPrefixForKind(searchKind: string): SearchDocumentPrefix | undefined;
39
+ /** The prefix whose ids live in `kind`'s registry (`path-convention` → `path`). */
40
+ export declare function searchDocumentPrefixForReferenceKind(kind: ReferenceKind): SearchDocumentPrefix | undefined;
41
+ /**
42
+ * The registry entry a search-document id names: `knowledge:gamma.entry` →
43
+ * `{ referenceKind: 'knowledge', id: 'gamma.entry' }`. `undefined` when the id
44
+ * does not parse, its prefix is not one the index emits, or its prefix has no
45
+ * id registry (`doc:`, `preset:`, `facet:`, …) — such a document exists, but
46
+ * no registry can be asked about it.
47
+ */
48
+ export declare function searchDocumentReference(docId: string): {
49
+ readonly referenceKind: ReferenceKind;
50
+ readonly id: string;
51
+ } | undefined;
52
+ //# sourceMappingURL=search-document-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-document-id.d.ts","sourceRoot":"","sources":["../src/search-document-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAiCxE,0DAA0D;AAC1D,eAAO,MAAM,wBAAwB,EAAE,SAAS,oBAAoB,EAEnE,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,aAAa,GAAG,IAAI,CAAC,CAK/F,CAAC;AAEJ,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAI1G;AAED,0DAA0D;AAC1D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,oBAAoB,CAErF;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEtE;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEhG;AAED,mFAAmF;AACnF,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,aAAa,GAAG,oBAAoB,GAAG,SAAS,CAE1G;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,GACZ;IAAE,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAK5E"}