@ontrails/warden 1.0.0-beta.13 → 1.0.0-beta.15

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 (474) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +30 -0
  3. package/README.md +31 -20
  4. package/dist/cli.d.ts +19 -2
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +261 -64
  7. package/dist/cli.js.map +1 -1
  8. package/dist/draft.d.ts +5 -0
  9. package/dist/draft.d.ts.map +1 -0
  10. package/dist/draft.js +16 -0
  11. package/dist/draft.js.map +1 -0
  12. package/dist/drift.d.ts +10 -7
  13. package/dist/drift.d.ts.map +1 -1
  14. package/dist/drift.js +50 -16
  15. package/dist/drift.js.map +1 -1
  16. package/dist/formatters.d.ts +2 -1
  17. package/dist/formatters.d.ts.map +1 -1
  18. package/dist/formatters.js +15 -4
  19. package/dist/formatters.js.map +1 -1
  20. package/dist/index.d.ts +9 -17
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +10 -17
  23. package/dist/index.js.map +1 -1
  24. package/dist/rules/ast.d.ts +412 -7
  25. package/dist/rules/ast.d.ts.map +1 -1
  26. package/dist/rules/ast.js +1847 -102
  27. package/dist/rules/ast.js.map +1 -1
  28. package/dist/rules/circular-refs.d.ts +6 -0
  29. package/dist/rules/circular-refs.d.ts.map +1 -0
  30. package/dist/rules/circular-refs.js +83 -0
  31. package/dist/rules/circular-refs.js.map +1 -0
  32. package/dist/rules/context-no-surface-types.d.ts.map +1 -1
  33. package/dist/rules/context-no-surface-types.js +59 -3
  34. package/dist/rules/context-no-surface-types.js.map +1 -1
  35. package/dist/rules/contour-exists.d.ts +7 -0
  36. package/dist/rules/contour-exists.d.ts.map +1 -0
  37. package/dist/rules/contour-exists.js +113 -0
  38. package/dist/rules/contour-exists.js.map +1 -0
  39. package/dist/rules/contour-ids.d.ts +10 -0
  40. package/dist/rules/contour-ids.d.ts.map +1 -0
  41. package/dist/rules/contour-ids.js +12 -0
  42. package/dist/rules/contour-ids.js.map +1 -0
  43. package/dist/rules/cross-declarations.d.ts.map +1 -1
  44. package/dist/rules/cross-declarations.js +171 -57
  45. package/dist/rules/cross-declarations.js.map +1 -1
  46. package/dist/rules/dead-internal-trail.d.ts +3 -0
  47. package/dist/rules/dead-internal-trail.d.ts.map +1 -0
  48. package/dist/rules/dead-internal-trail.js +80 -0
  49. package/dist/rules/dead-internal-trail.js.map +1 -0
  50. package/dist/rules/draft-file-marking.d.ts +6 -0
  51. package/dist/rules/draft-file-marking.d.ts.map +1 -0
  52. package/dist/rules/draft-file-marking.js +87 -0
  53. package/dist/rules/draft-file-marking.js.map +1 -0
  54. package/dist/rules/draft-visible-debt.d.ts +12 -0
  55. package/dist/rules/draft-visible-debt.d.ts.map +1 -0
  56. package/dist/rules/draft-visible-debt.js +50 -0
  57. package/dist/rules/draft-visible-debt.js.map +1 -0
  58. package/dist/rules/error-mapping-completeness.d.ts +13 -0
  59. package/dist/rules/error-mapping-completeness.d.ts.map +1 -0
  60. package/dist/rules/error-mapping-completeness.js +160 -0
  61. package/dist/rules/error-mapping-completeness.js.map +1 -0
  62. package/dist/rules/example-valid.d.ts +6 -0
  63. package/dist/rules/example-valid.d.ts.map +1 -0
  64. package/dist/rules/example-valid.js +203 -0
  65. package/dist/rules/example-valid.js.map +1 -0
  66. package/dist/rules/fires-declarations.d.ts +16 -0
  67. package/dist/rules/fires-declarations.d.ts.map +1 -0
  68. package/dist/rules/fires-declarations.js +444 -0
  69. package/dist/rules/fires-declarations.js.map +1 -0
  70. package/dist/rules/implementation-returns-result.d.ts +9 -0
  71. package/dist/rules/implementation-returns-result.d.ts.map +1 -1
  72. package/dist/rules/implementation-returns-result.js +638 -76
  73. package/dist/rules/implementation-returns-result.js.map +1 -1
  74. package/dist/rules/incomplete-accessor-for-standard-op.d.ts +30 -0
  75. package/dist/rules/incomplete-accessor-for-standard-op.d.ts.map +1 -0
  76. package/dist/rules/incomplete-accessor-for-standard-op.js +226 -0
  77. package/dist/rules/incomplete-accessor-for-standard-op.js.map +1 -0
  78. package/dist/rules/incomplete-crud.d.ts +21 -0
  79. package/dist/rules/incomplete-crud.d.ts.map +1 -0
  80. package/dist/rules/incomplete-crud.js +368 -0
  81. package/dist/rules/incomplete-crud.js.map +1 -0
  82. package/dist/rules/index.d.ts +40 -7
  83. package/dist/rules/index.d.ts.map +1 -1
  84. package/dist/rules/index.js +91 -15
  85. package/dist/rules/index.js.map +1 -1
  86. package/dist/rules/intent-propagation.d.ts +3 -0
  87. package/dist/rules/intent-propagation.d.ts.map +1 -0
  88. package/dist/rules/intent-propagation.js +57 -0
  89. package/dist/rules/intent-propagation.js.map +1 -0
  90. package/dist/rules/missing-reconcile.d.ts +3 -0
  91. package/dist/rules/missing-reconcile.d.ts.map +1 -0
  92. package/dist/rules/missing-reconcile.js +44 -0
  93. package/dist/rules/missing-reconcile.js.map +1 -0
  94. package/dist/rules/missing-visibility.d.ts +3 -0
  95. package/dist/rules/missing-visibility.d.ts.map +1 -0
  96. package/dist/rules/missing-visibility.js +63 -0
  97. package/dist/rules/missing-visibility.js.map +1 -0
  98. package/dist/rules/no-direct-impl-in-route.d.ts.map +1 -1
  99. package/dist/rules/no-direct-impl-in-route.js +0 -3
  100. package/dist/rules/no-direct-impl-in-route.js.map +1 -1
  101. package/dist/rules/no-direct-implementation-call.js +1 -1
  102. package/dist/rules/no-direct-implementation-call.js.map +1 -1
  103. package/dist/rules/no-sync-result-assumption.d.ts.map +1 -1
  104. package/dist/rules/no-sync-result-assumption.js +870 -61
  105. package/dist/rules/no-sync-result-assumption.js.map +1 -1
  106. package/dist/rules/no-throw-in-detour-recover.d.ts +3 -0
  107. package/dist/rules/no-throw-in-detour-recover.d.ts.map +1 -0
  108. package/dist/rules/no-throw-in-detour-recover.js +147 -0
  109. package/dist/rules/no-throw-in-detour-recover.js.map +1 -0
  110. package/dist/rules/no-throw-in-detour-target.d.ts +4 -1
  111. package/dist/rules/no-throw-in-detour-target.d.ts.map +1 -1
  112. package/dist/rules/no-throw-in-detour-target.js +6 -3
  113. package/dist/rules/no-throw-in-detour-target.js.map +1 -1
  114. package/dist/rules/no-throw-in-implementation.d.ts +4 -2
  115. package/dist/rules/no-throw-in-implementation.d.ts.map +1 -1
  116. package/dist/rules/no-throw-in-implementation.js +6 -4
  117. package/dist/rules/no-throw-in-implementation.js.map +1 -1
  118. package/dist/rules/on-references-exist.d.ts +14 -0
  119. package/dist/rules/on-references-exist.d.ts.map +1 -0
  120. package/dist/rules/on-references-exist.js +109 -0
  121. package/dist/rules/on-references-exist.js.map +1 -0
  122. package/dist/rules/orphaned-signal.d.ts +3 -0
  123. package/dist/rules/orphaned-signal.d.ts.map +1 -0
  124. package/dist/rules/orphaned-signal.js +67 -0
  125. package/dist/rules/orphaned-signal.js.map +1 -0
  126. package/dist/rules/permit-governance.d.ts +3 -0
  127. package/dist/rules/permit-governance.d.ts.map +1 -0
  128. package/dist/rules/permit-governance.js +15 -0
  129. package/dist/rules/permit-governance.js.map +1 -0
  130. package/dist/rules/reference-exists.d.ts +6 -0
  131. package/dist/rules/reference-exists.d.ts.map +1 -0
  132. package/dist/rules/reference-exists.js +47 -0
  133. package/dist/rules/reference-exists.js.map +1 -0
  134. package/dist/rules/registry-names.d.ts +8 -0
  135. package/dist/rules/registry-names.d.ts.map +1 -0
  136. package/dist/rules/registry-names.js +83 -0
  137. package/dist/rules/registry-names.js.map +1 -0
  138. package/dist/rules/resource-declarations.d.ts +14 -0
  139. package/dist/rules/resource-declarations.d.ts.map +1 -0
  140. package/dist/rules/resource-declarations.js +413 -0
  141. package/dist/rules/resource-declarations.js.map +1 -0
  142. package/dist/rules/resource-exists.d.ts +6 -0
  143. package/dist/rules/resource-exists.d.ts.map +1 -0
  144. package/dist/rules/resource-exists.js +90 -0
  145. package/dist/rules/resource-exists.js.map +1 -0
  146. package/dist/rules/resource-id-grammar.d.ts +3 -0
  147. package/dist/rules/resource-id-grammar.d.ts.map +1 -0
  148. package/dist/rules/resource-id-grammar.js +39 -0
  149. package/dist/rules/resource-id-grammar.js.map +1 -0
  150. package/dist/rules/specs.d.ts.map +1 -1
  151. package/dist/rules/specs.js +5 -1
  152. package/dist/rules/specs.js.map +1 -1
  153. package/dist/rules/types.d.ts +53 -4
  154. package/dist/rules/types.d.ts.map +1 -1
  155. package/dist/rules/unreachable-detour-shadowing.d.ts +3 -0
  156. package/dist/rules/unreachable-detour-shadowing.d.ts.map +1 -0
  157. package/dist/rules/unreachable-detour-shadowing.js +202 -0
  158. package/dist/rules/unreachable-detour-shadowing.js.map +1 -0
  159. package/dist/rules/valid-describe-refs.d.ts.map +1 -1
  160. package/dist/rules/valid-describe-refs.js +132 -16
  161. package/dist/rules/valid-describe-refs.js.map +1 -1
  162. package/dist/rules/valid-detour-contract.d.ts +3 -0
  163. package/dist/rules/valid-detour-contract.d.ts.map +1 -0
  164. package/dist/rules/valid-detour-contract.js +47 -0
  165. package/dist/rules/valid-detour-contract.js.map +1 -0
  166. package/dist/rules/valid-detour-refs.d.ts.map +1 -1
  167. package/dist/rules/valid-detour-refs.js +73 -82
  168. package/dist/rules/valid-detour-refs.js.map +1 -1
  169. package/dist/rules/warden-export-symmetry.d.ts +7 -0
  170. package/dist/rules/warden-export-symmetry.d.ts.map +1 -0
  171. package/dist/rules/warden-export-symmetry.js +352 -0
  172. package/dist/rules/warden-export-symmetry.js.map +1 -0
  173. package/dist/rules/warden-rules-use-ast.d.ts +17 -0
  174. package/dist/rules/warden-rules-use-ast.d.ts.map +1 -0
  175. package/dist/rules/warden-rules-use-ast.js +778 -0
  176. package/dist/rules/warden-rules-use-ast.js.map +1 -0
  177. package/dist/trails/circular-refs.trail.d.ts +24 -0
  178. package/dist/trails/circular-refs.trail.d.ts.map +1 -0
  179. package/dist/trails/circular-refs.trail.js +29 -0
  180. package/dist/trails/circular-refs.trail.js.map +1 -0
  181. package/dist/trails/context-no-surface-types.trail.d.ts +2 -2
  182. package/dist/trails/context-no-surface-types.trail.d.ts.map +1 -1
  183. package/dist/trails/context-no-trailhead-types.trail.d.ts +2 -2
  184. package/dist/trails/context-no-trailhead-types.trail.d.ts.map +1 -1
  185. package/dist/trails/contour-exists.trail.d.ts +24 -0
  186. package/dist/trails/contour-exists.trail.d.ts.map +1 -0
  187. package/dist/trails/contour-exists.trail.js +21 -0
  188. package/dist/trails/contour-exists.trail.js.map +1 -0
  189. package/dist/trails/cross-declarations.trail.d.ts +2 -2
  190. package/dist/trails/cross-declarations.trail.d.ts.map +1 -1
  191. package/dist/trails/dead-internal-trail.trail.d.ts +24 -0
  192. package/dist/trails/dead-internal-trail.trail.d.ts.map +1 -0
  193. package/dist/trails/dead-internal-trail.trail.js +26 -0
  194. package/dist/trails/dead-internal-trail.trail.js.map +1 -0
  195. package/dist/trails/{provision-declarations.trail.d.ts → draft-file-marking.trail.d.ts} +3 -3
  196. package/dist/trails/draft-file-marking.trail.d.ts.map +1 -0
  197. package/dist/trails/draft-file-marking.trail.js +16 -0
  198. package/dist/trails/draft-file-marking.trail.js.map +1 -0
  199. package/dist/trails/draft-visible-debt.trail.d.ts +13 -0
  200. package/dist/trails/draft-visible-debt.trail.d.ts.map +1 -0
  201. package/dist/trails/draft-visible-debt.trail.js +16 -0
  202. package/dist/trails/draft-visible-debt.trail.js.map +1 -0
  203. package/dist/trails/error-mapping-completeness.trail.d.ts +13 -0
  204. package/dist/trails/error-mapping-completeness.trail.d.ts.map +1 -0
  205. package/dist/trails/error-mapping-completeness.trail.js +29 -0
  206. package/dist/trails/error-mapping-completeness.trail.js.map +1 -0
  207. package/dist/trails/{follow-declarations.trail.d.ts → example-valid.trail.d.ts} +3 -3
  208. package/dist/trails/example-valid.trail.d.ts.map +1 -0
  209. package/dist/trails/example-valid.trail.js +25 -0
  210. package/dist/trails/example-valid.trail.js.map +1 -0
  211. package/dist/trails/fires-declarations.trail.d.ts +13 -0
  212. package/dist/trails/fires-declarations.trail.d.ts.map +1 -0
  213. package/dist/trails/fires-declarations.trail.js +22 -0
  214. package/dist/trails/fires-declarations.trail.js.map +1 -0
  215. package/dist/trails/implementation-returns-result.trail.d.ts +2 -2
  216. package/dist/trails/implementation-returns-result.trail.d.ts.map +1 -1
  217. package/dist/trails/incomplete-accessor-for-standard-op.trail.d.ts +12 -0
  218. package/dist/trails/incomplete-accessor-for-standard-op.trail.d.ts.map +1 -0
  219. package/dist/trails/incomplete-accessor-for-standard-op.trail.js +60 -0
  220. package/dist/trails/incomplete-accessor-for-standard-op.trail.js.map +1 -0
  221. package/dist/trails/incomplete-crud.trail.d.ts +24 -0
  222. package/dist/trails/incomplete-crud.trail.d.ts.map +1 -0
  223. package/dist/trails/incomplete-crud.trail.js +39 -0
  224. package/dist/trails/incomplete-crud.trail.js.map +1 -0
  225. package/dist/trails/index.d.ts +29 -7
  226. package/dist/trails/index.d.ts.map +1 -1
  227. package/dist/trails/index.js +28 -6
  228. package/dist/trails/index.js.map +1 -1
  229. package/dist/trails/intent-propagation.trail.d.ts +24 -0
  230. package/dist/trails/intent-propagation.trail.d.ts.map +1 -0
  231. package/dist/trails/intent-propagation.trail.js +30 -0
  232. package/dist/trails/intent-propagation.trail.js.map +1 -0
  233. package/dist/trails/missing-reconcile.trail.d.ts +24 -0
  234. package/dist/trails/missing-reconcile.trail.d.ts.map +1 -0
  235. package/dist/trails/missing-reconcile.trail.js +33 -0
  236. package/dist/trails/missing-reconcile.trail.js.map +1 -0
  237. package/dist/trails/missing-visibility.trail.d.ts +24 -0
  238. package/dist/trails/missing-visibility.trail.d.ts.map +1 -0
  239. package/dist/trails/missing-visibility.trail.js +22 -0
  240. package/dist/trails/missing-visibility.trail.js.map +1 -0
  241. package/dist/trails/no-direct-impl-in-route.trail.d.ts +2 -2
  242. package/dist/trails/no-direct-impl-in-route.trail.d.ts.map +1 -1
  243. package/dist/trails/no-direct-implementation-call.trail.d.ts +2 -2
  244. package/dist/trails/no-direct-implementation-call.trail.d.ts.map +1 -1
  245. package/dist/trails/no-sync-result-assumption.trail.d.ts +2 -2
  246. package/dist/trails/no-sync-result-assumption.trail.d.ts.map +1 -1
  247. package/dist/trails/no-throw-in-detour-recover.trail.d.ts +13 -0
  248. package/dist/trails/no-throw-in-detour-recover.trail.d.ts.map +1 -0
  249. package/dist/trails/no-throw-in-detour-recover.trail.js +24 -0
  250. package/dist/trails/no-throw-in-detour-recover.trail.js.map +1 -0
  251. package/dist/trails/no-throw-in-detour-target.trail.d.ts +13 -3
  252. package/dist/trails/no-throw-in-detour-target.trail.d.ts.map +1 -1
  253. package/dist/trails/no-throw-in-implementation.trail.d.ts +2 -2
  254. package/dist/trails/no-throw-in-implementation.trail.d.ts.map +1 -1
  255. package/dist/trails/on-references-exist.trail.d.ts +24 -0
  256. package/dist/trails/on-references-exist.trail.d.ts.map +1 -0
  257. package/dist/trails/on-references-exist.trail.js +21 -0
  258. package/dist/trails/on-references-exist.trail.js.map +1 -0
  259. package/dist/trails/orphaned-signal.trail.d.ts +24 -0
  260. package/dist/trails/orphaned-signal.trail.d.ts.map +1 -0
  261. package/dist/trails/orphaned-signal.trail.js +36 -0
  262. package/dist/trails/orphaned-signal.trail.js.map +1 -0
  263. package/dist/trails/permit-governance.trail.d.ts +12 -0
  264. package/dist/trails/permit-governance.trail.d.ts.map +1 -0
  265. package/dist/trails/permit-governance.trail.js +47 -0
  266. package/dist/trails/permit-governance.trail.js.map +1 -0
  267. package/dist/trails/prefer-schema-inference.trail.d.ts +2 -2
  268. package/dist/trails/prefer-schema-inference.trail.d.ts.map +1 -1
  269. package/dist/trails/reference-exists.trail.d.ts +24 -0
  270. package/dist/trails/reference-exists.trail.d.ts.map +1 -0
  271. package/dist/trails/reference-exists.trail.js +25 -0
  272. package/dist/trails/reference-exists.trail.js.map +1 -0
  273. package/dist/trails/resource-declarations.trail.d.ts +13 -0
  274. package/dist/trails/resource-declarations.trail.d.ts.map +1 -0
  275. package/dist/trails/{provision-declarations.trail.js → resource-declarations.trail.js} +7 -7
  276. package/dist/trails/resource-declarations.trail.js.map +1 -0
  277. package/dist/trails/resource-exists.trail.d.ts +24 -0
  278. package/dist/trails/resource-exists.trail.d.ts.map +1 -0
  279. package/dist/trails/{provision-exists.trail.js → resource-exists.trail.js} +8 -8
  280. package/dist/trails/resource-exists.trail.js.map +1 -0
  281. package/dist/trails/resource-id-grammar.trail.d.ts +13 -0
  282. package/dist/trails/resource-id-grammar.trail.d.ts.map +1 -0
  283. package/dist/trails/resource-id-grammar.trail.js +38 -0
  284. package/dist/trails/resource-id-grammar.trail.js.map +1 -0
  285. package/dist/trails/run.d.ts +25 -9
  286. package/dist/trails/run.d.ts.map +1 -1
  287. package/dist/trails/run.js +63 -19
  288. package/dist/trails/run.js.map +1 -1
  289. package/dist/trails/schema.d.ts +28 -3
  290. package/dist/trails/schema.d.ts.map +1 -1
  291. package/dist/trails/schema.js +57 -4
  292. package/dist/trails/schema.js.map +1 -1
  293. package/dist/trails/unreachable-detour-shadowing.trail.d.ts +13 -0
  294. package/dist/trails/unreachable-detour-shadowing.trail.d.ts.map +1 -0
  295. package/dist/trails/unreachable-detour-shadowing.trail.js +44 -0
  296. package/dist/trails/unreachable-detour-shadowing.trail.js.map +1 -0
  297. package/dist/trails/valid-describe-refs.trail.d.ts +12 -3
  298. package/dist/trails/valid-describe-refs.trail.d.ts.map +1 -1
  299. package/dist/trails/valid-detour-contract.trail.d.ts +12 -0
  300. package/dist/trails/valid-detour-contract.trail.d.ts.map +1 -0
  301. package/dist/trails/valid-detour-contract.trail.js +66 -0
  302. package/dist/trails/valid-detour-contract.trail.js.map +1 -0
  303. package/dist/trails/valid-detour-refs.trail.d.ts +13 -3
  304. package/dist/trails/valid-detour-refs.trail.d.ts.map +1 -1
  305. package/dist/trails/warden-export-symmetry.trail.d.ts +13 -0
  306. package/dist/trails/warden-export-symmetry.trail.d.ts.map +1 -0
  307. package/dist/trails/warden-export-symmetry.trail.js +16 -0
  308. package/dist/trails/warden-export-symmetry.trail.js.map +1 -0
  309. package/dist/trails/warden-rules-use-ast.trail.d.ts +13 -0
  310. package/dist/trails/warden-rules-use-ast.trail.d.ts.map +1 -0
  311. package/dist/trails/warden-rules-use-ast.trail.js +41 -0
  312. package/dist/trails/warden-rules-use-ast.trail.js.map +1 -0
  313. package/dist/trails/wrap-rule.d.ts +16 -2
  314. package/dist/trails/wrap-rule.d.ts.map +1 -1
  315. package/dist/trails/wrap-rule.js +71 -11
  316. package/dist/trails/wrap-rule.js.map +1 -1
  317. package/package.json +7 -4
  318. package/src/__tests__/ast.test.ts +613 -0
  319. package/src/__tests__/circular-refs.test.ts +121 -0
  320. package/src/__tests__/cli.test.ts +360 -32
  321. package/src/__tests__/contour-exists.test.ts +203 -0
  322. package/src/__tests__/cross-declarations.test.ts +245 -0
  323. package/src/__tests__/dead-internal-trail.test.ts +81 -0
  324. package/src/__tests__/draft-rules-context.test.ts +150 -0
  325. package/src/__tests__/drift.test.ts +75 -5
  326. package/src/__tests__/error-mapping-completeness.test.ts +56 -0
  327. package/src/__tests__/example-valid.test.ts +101 -0
  328. package/src/__tests__/fires-declarations-param-destructure.test.ts +54 -0
  329. package/src/__tests__/fires-declarations.test.ts +652 -0
  330. package/src/__tests__/formatters.test.ts +2 -2
  331. package/src/__tests__/implementation-returns-result.test.ts +1016 -2
  332. package/src/__tests__/incomplete-accessor-for-standard-op.test.ts +337 -0
  333. package/src/__tests__/incomplete-crud.test.ts +498 -0
  334. package/src/__tests__/intent-propagation.test.ts +116 -0
  335. package/src/__tests__/missing-reconcile.test.ts +154 -0
  336. package/src/__tests__/missing-visibility.test.ts +108 -0
  337. package/src/__tests__/no-sync-result-assumption.test.ts +870 -39
  338. package/src/__tests__/no-throw-in-detour-recover.test.ts +93 -0
  339. package/src/__tests__/no-throw-in-implementation.test.ts +88 -0
  340. package/src/__tests__/on-references-exist.test.ts +151 -0
  341. package/src/__tests__/orphaned-signal.test.ts +137 -0
  342. package/src/__tests__/permit-governance.test.ts +66 -0
  343. package/src/__tests__/reference-exists.test.ts +281 -0
  344. package/src/__tests__/resource-declarations.test.ts +448 -0
  345. package/src/__tests__/resource-exists.test.ts +122 -0
  346. package/src/__tests__/resource-id-grammar.test.ts +50 -0
  347. package/src/__tests__/rules.test.ts +17 -77
  348. package/src/__tests__/topo-aware-rule.test.ts +257 -0
  349. package/src/__tests__/trails.test.ts +2 -2
  350. package/src/__tests__/unreachable-detour-shadowing.test.ts +128 -0
  351. package/src/__tests__/valid-describe-refs.test.ts +183 -0
  352. package/src/__tests__/valid-detour-contract.test.ts +86 -0
  353. package/src/__tests__/warden-export-symmetry.test.ts +251 -0
  354. package/src/__tests__/warden-rules-use-ast.test.ts +468 -0
  355. package/src/__tests__/wrap-rule.test.ts +3 -3
  356. package/src/cli.ts +458 -91
  357. package/src/draft.ts +22 -0
  358. package/src/drift.ts +63 -21
  359. package/src/formatters.ts +15 -4
  360. package/src/index.ts +62 -23
  361. package/src/rules/ast.ts +2715 -119
  362. package/src/rules/circular-refs.ts +154 -0
  363. package/src/rules/{context-no-trailhead-types.ts → context-no-surface-types.ts} +72 -12
  364. package/src/rules/contour-exists.ts +251 -0
  365. package/src/rules/contour-ids.ts +15 -0
  366. package/src/rules/cross-declarations.ts +277 -69
  367. package/src/rules/dead-internal-trail.ts +141 -0
  368. package/src/rules/draft-file-marking.ts +160 -0
  369. package/src/rules/draft-visible-debt.ts +87 -0
  370. package/src/rules/error-mapping-completeness.ts +273 -0
  371. package/src/rules/example-valid.ts +401 -0
  372. package/src/rules/fires-declarations.ts +609 -0
  373. package/src/rules/implementation-returns-result.ts +1042 -122
  374. package/src/rules/incomplete-accessor-for-standard-op.ts +315 -0
  375. package/src/rules/incomplete-crud.ts +579 -0
  376. package/src/rules/index.ts +95 -16
  377. package/src/rules/intent-propagation.ts +142 -0
  378. package/src/rules/missing-reconcile.ts +98 -0
  379. package/src/rules/missing-visibility.ts +110 -0
  380. package/src/rules/no-direct-impl-in-route.ts +0 -4
  381. package/src/rules/no-direct-implementation-call.ts +1 -1
  382. package/src/rules/no-sync-result-assumption.ts +1134 -96
  383. package/src/rules/no-throw-in-detour-recover.ts +225 -0
  384. package/src/rules/no-throw-in-implementation.ts +6 -4
  385. package/src/rules/on-references-exist.ts +194 -0
  386. package/src/rules/orphaned-signal.ts +150 -0
  387. package/src/rules/permit-governance.ts +25 -0
  388. package/src/rules/reference-exists.ts +98 -0
  389. package/src/rules/registry-names.ts +83 -0
  390. package/src/rules/{provision-declarations.ts → resource-declarations.ts} +208 -138
  391. package/src/rules/{provision-exists.ts → resource-exists.ts} +48 -51
  392. package/src/rules/resource-id-grammar.ts +65 -0
  393. package/src/rules/specs.ts +5 -1
  394. package/src/rules/types.ts +57 -4
  395. package/src/rules/unreachable-detour-shadowing.ts +375 -0
  396. package/src/rules/valid-describe-refs.ts +160 -32
  397. package/src/rules/valid-detour-contract.ts +78 -0
  398. package/src/rules/warden-export-symmetry.ts +533 -0
  399. package/src/rules/warden-rules-use-ast.ts +996 -0
  400. package/src/trails/circular-refs.trail.ts +29 -0
  401. package/src/trails/{context-no-trailhead-types.trail.ts → context-no-surface-types.trail.ts} +4 -4
  402. package/src/trails/contour-exists.trail.ts +21 -0
  403. package/src/trails/dead-internal-trail.trail.ts +26 -0
  404. package/src/trails/draft-file-marking.trail.ts +16 -0
  405. package/src/trails/draft-visible-debt.trail.ts +16 -0
  406. package/src/trails/error-mapping-completeness.trail.ts +29 -0
  407. package/src/trails/example-valid.trail.ts +25 -0
  408. package/src/trails/fires-declarations.trail.ts +22 -0
  409. package/src/trails/incomplete-accessor-for-standard-op.trail.ts +76 -0
  410. package/src/trails/incomplete-crud.trail.ts +39 -0
  411. package/src/trails/index.ts +40 -7
  412. package/src/trails/intent-propagation.trail.ts +30 -0
  413. package/src/trails/missing-reconcile.trail.ts +33 -0
  414. package/src/trails/missing-visibility.trail.ts +22 -0
  415. package/src/trails/no-throw-in-detour-recover.trail.ts +24 -0
  416. package/src/trails/on-references-exist.trail.ts +21 -0
  417. package/src/trails/orphaned-signal.trail.ts +36 -0
  418. package/src/trails/permit-governance.trail.ts +51 -0
  419. package/src/trails/reference-exists.trail.ts +25 -0
  420. package/src/trails/{provision-declarations.trail.ts → resource-declarations.trail.ts} +6 -6
  421. package/src/trails/{provision-exists.trail.ts → resource-exists.trail.ts} +7 -7
  422. package/src/trails/resource-id-grammar.trail.ts +39 -0
  423. package/src/trails/run.ts +121 -24
  424. package/src/trails/schema.ts +66 -4
  425. package/src/trails/unreachable-detour-shadowing.trail.ts +45 -0
  426. package/src/trails/valid-detour-contract.trail.ts +71 -0
  427. package/src/trails/warden-export-symmetry.trail.ts +16 -0
  428. package/src/trails/warden-rules-use-ast.trail.ts +45 -0
  429. package/src/trails/wrap-rule.ts +104 -12
  430. package/tsconfig.tests.json +10 -0
  431. package/tsconfig.tsbuildinfo +1 -1
  432. package/dist/rules/follow-declarations.d.ts +0 -13
  433. package/dist/rules/follow-declarations.d.ts.map +0 -1
  434. package/dist/rules/follow-declarations.js +0 -264
  435. package/dist/rules/follow-declarations.js.map +0 -1
  436. package/dist/rules/provision-declarations.d.ts +0 -14
  437. package/dist/rules/provision-declarations.d.ts.map +0 -1
  438. package/dist/rules/provision-declarations.js +0 -344
  439. package/dist/rules/provision-declarations.js.map +0 -1
  440. package/dist/rules/provision-exists.d.ts +0 -6
  441. package/dist/rules/provision-exists.d.ts.map +0 -1
  442. package/dist/rules/provision-exists.js +0 -89
  443. package/dist/rules/provision-exists.js.map +0 -1
  444. package/dist/rules/service-declarations.d.ts +0 -16
  445. package/dist/rules/service-declarations.d.ts.map +0 -1
  446. package/dist/rules/service-declarations.js +0 -346
  447. package/dist/rules/service-declarations.js.map +0 -1
  448. package/dist/rules/service-exists.d.ts +0 -8
  449. package/dist/rules/service-exists.d.ts.map +0 -1
  450. package/dist/rules/service-exists.js +0 -91
  451. package/dist/rules/service-exists.js.map +0 -1
  452. package/dist/trails/follow-declarations.trail.d.ts.map +0 -1
  453. package/dist/trails/follow-declarations.trail.js +0 -22
  454. package/dist/trails/follow-declarations.trail.js.map +0 -1
  455. package/dist/trails/provision-declarations.trail.d.ts.map +0 -1
  456. package/dist/trails/provision-declarations.trail.js.map +0 -1
  457. package/dist/trails/provision-exists.trail.d.ts +0 -15
  458. package/dist/trails/provision-exists.trail.d.ts.map +0 -1
  459. package/dist/trails/provision-exists.trail.js.map +0 -1
  460. package/dist/trails/service-declarations.trail.d.ts +0 -26
  461. package/dist/trails/service-declarations.trail.d.ts.map +0 -1
  462. package/dist/trails/service-declarations.trail.js +0 -27
  463. package/dist/trails/service-declarations.trail.js.map +0 -1
  464. package/dist/trails/service-exists.trail.d.ts +0 -32
  465. package/dist/trails/service-exists.trail.d.ts.map +0 -1
  466. package/dist/trails/service-exists.trail.js +0 -29
  467. package/dist/trails/service-exists.trail.js.map +0 -1
  468. package/src/__tests__/no-throw-in-detour-target.test.ts +0 -78
  469. package/src/__tests__/provision-declarations.test.ts +0 -318
  470. package/src/__tests__/provision-exists.test.ts +0 -122
  471. package/src/rules/no-throw-in-detour-target.ts +0 -150
  472. package/src/rules/valid-detour-refs.ts +0 -187
  473. package/src/trails/no-throw-in-detour-target.trail.ts +0 -20
  474. package/src/trails/valid-detour-refs.trail.ts +0 -24
@@ -44,7 +44,7 @@ const getStringValue = (node) => {
44
44
  * Returns the string value if a simple `const <name> = '...'` or `"..."` is
45
45
  * found in the source. Returns null for anything more complex.
46
46
  */
47
- const resolveConstString = (name, sourceCode) => {
47
+ const deriveConstString = (name, sourceCode) => {
48
48
  const pattern = new RegExp(`const\\s+${name}\\s*=\\s*(?:'([^']*)'|"([^"]*)")`);
49
49
  const match = pattern.exec(sourceCode);
50
50
  if (!match) {
@@ -58,10 +58,10 @@ const resolveIdentifierElement = (el, sourceCode) => {
58
58
  if (!name) {
59
59
  return null;
60
60
  }
61
- return resolveConstString(name, sourceCode);
61
+ return deriveConstString(name, sourceCode);
62
62
  };
63
63
  /** Resolve an array element to a static trail ID when possible. */
64
- const resolveCrossElementId = (element, sourceCode) => {
64
+ const deriveCrossElementId = (element, sourceCode) => {
65
65
  if (isStringLiteral(element)) {
66
66
  return getStringValue(element);
67
67
  }
@@ -86,21 +86,39 @@ const getCrossElements = (config) => {
86
86
  const elements = arrayNode['elements'];
87
87
  return elements ?? null;
88
88
  };
89
- /** Collect string IDs from array elements, resolving identifiers when possible. */
90
- const collectStringIds = (elements, sourceCode) => {
89
+ /**
90
+ * Collect string IDs from array elements, resolving identifiers when possible.
91
+ *
92
+ * Trail-object references (`crosses: [showGist]`) cannot be resolved at lint
93
+ * time; they're normalized at runtime by `trail()`. When any entry is
94
+ * unresolved, `hasUnresolved` is set so callers can soften diagnostics.
95
+ */
96
+ /** Classify a single element and accumulate into the id set. */
97
+ const classifyCrossElement = (element, sourceCode, ids) => {
98
+ const resolved = deriveCrossElementId(element, sourceCode);
99
+ if (!resolved) {
100
+ // Element could not be statically resolved
101
+ return true;
102
+ }
103
+ ids.add(resolved);
104
+ return false;
105
+ };
106
+ const resolveDeclaredCrossElements = (elements, sourceCode) => {
91
107
  const ids = new Set();
108
+ let hasUnresolved = false;
92
109
  for (const element of elements) {
93
- const resolved = resolveCrossElementId(element, sourceCode);
94
- if (resolved) {
95
- ids.add(resolved);
110
+ if (classifyCrossElement(element, sourceCode, ids)) {
111
+ hasUnresolved = true;
96
112
  }
97
113
  }
98
- return ids;
114
+ return { hasUnresolved, ids };
99
115
  };
100
- /** Extract string literal elements from a `crosses: [...]` array property. */
116
+ /** Extract declared crosses from a `crosses: [...]` array. */
101
117
  const extractDeclaredCrosses = (config, sourceCode) => {
102
118
  const elements = getCrossElements(config);
103
- return elements ? collectStringIds(elements, sourceCode) : new Set();
119
+ return elements
120
+ ? resolveDeclaredCrossElements(elements, sourceCode)
121
+ : { hasUnresolved: false, ids: new Set() };
104
122
  };
105
123
  // ---------------------------------------------------------------------------
106
124
  // Called crossing extraction — member expression helpers
@@ -115,89 +133,172 @@ const extractMemberPair = (callee) => {
115
133
  const propName = identifierName(callee.property);
116
134
  return objName && propName ? { objName, propName } : null;
117
135
  };
118
- /** Extract the first argument string from a CallExpression's arguments list. */
119
- const extractFirstStringArg = (node) => {
120
- const args = node['arguments'];
121
- if (!args || args.length === 0) {
122
- return null;
123
- }
124
- const [firstArg] = args;
125
- if (!firstArg || !isStringLiteral(firstArg)) {
126
- return null;
127
- }
128
- return getStringValue(firstArg);
129
- };
130
136
  /**
131
137
  * Extract the second parameter name from a blaze function node.
132
138
  *
133
- * Handles `(input, ctx) => ...`, `async (input, context) => ...`, and
134
- * `function(input, ctx) { ... }` forms.
139
+ * Handles `(input, ctx) => ...`, `async (input, context) => ...`,
140
+ * `function(input, ctx) { ... }`, and defaulted params like
141
+ * `(input, ctx = fallback) => ...` (AssignmentPattern whose `.left` is the
142
+ * Identifier).
135
143
  */
136
144
  const extractContextParamName = (blazeBody) => {
137
145
  const params = blazeBody['params'];
138
146
  if (!params || params.length < 2) {
139
147
  return null;
140
148
  }
141
- return identifierName(params[1]);
149
+ const [, param] = params;
150
+ if (param?.type === 'AssignmentPattern') {
151
+ const { left } = param;
152
+ return identifierName(left);
153
+ }
154
+ return identifierName(param);
142
155
  };
143
156
  /** Check if a callee is a member-style cross call: <ctxName>.cross(...). */
144
157
  const isMemberCrossCall = (callee, ctxNames) => {
145
158
  const pair = extractMemberPair(callee);
146
159
  return !!pair && ctxNames.has(pair.objName) && pair.propName === 'cross';
147
160
  };
148
- /**
149
- * Check if a node is a `<ctxName>.cross(...)` call and return the string trail ID.
150
- *
151
- * Also matches bare `cross(...)` calls from destructuring.
152
- */
153
- const extractCrossCallId = (node, ctxNames) => {
161
+ const unresolvedCross = () => ({
162
+ hasUnresolved: true,
163
+ ids: [],
164
+ });
165
+ const resolveBatchCrossTupleTarget = (element, sourceCode) => {
166
+ if (element.type !== 'ArrayExpression') {
167
+ return null;
168
+ }
169
+ const tupleElements = element['elements'];
170
+ const [target] = tupleElements ?? [];
171
+ return target ? deriveCrossElementId(target, sourceCode) : null;
172
+ };
173
+ const collectBatchCrossId = (element, sourceCode, ids) => {
174
+ const resolved = resolveBatchCrossTupleTarget(element, sourceCode);
175
+ if (!resolved) {
176
+ return true;
177
+ }
178
+ ids.push(resolved);
179
+ return false;
180
+ };
181
+ /** Extract statically-resolved trail IDs from `ctx.cross([[trail, input], ...])`. */
182
+ const extractBatchCrossIds = (firstArg, sourceCode) => {
183
+ if (firstArg?.type !== 'ArrayExpression') {
184
+ return null;
185
+ }
186
+ const elements = firstArg['elements'];
187
+ const ids = [];
188
+ let hasUnresolved = false;
189
+ for (const element of elements ?? []) {
190
+ if (collectBatchCrossId(element, sourceCode, ids)) {
191
+ hasUnresolved = true;
192
+ }
193
+ }
194
+ return { hasUnresolved, ids };
195
+ };
196
+ const extractDirectCrossIds = (firstArg) => {
197
+ if (!firstArg || !isStringLiteral(firstArg)) {
198
+ return null;
199
+ }
200
+ const value = getStringValue(firstArg);
201
+ return value ? { hasUnresolved: false, ids: [value] } : unresolvedCross();
202
+ };
203
+ const isCrossCallExpression = (callee, ctxNames) => isMemberCrossCall(callee, ctxNames) || identifierName(callee) === 'cross';
204
+ const extractCrossFirstArg = (node) => {
205
+ const args = node['arguments'];
206
+ return args?.[0];
207
+ };
208
+ const resolveCrossCallNode = (node, ctxNames) => {
154
209
  if (node.type !== 'CallExpression') {
155
210
  return null;
156
211
  }
157
212
  const callee = node['callee'];
158
- if (!callee) {
213
+ if (!callee || !isCrossCallExpression(callee, ctxNames)) {
159
214
  return null;
160
215
  }
161
- if (isMemberCrossCall(callee, ctxNames)) {
162
- return extractFirstStringArg(node);
216
+ return node;
217
+ };
218
+ const resolveCrossCallTargets = (firstArg, sourceCode) => {
219
+ const direct = extractDirectCrossIds(firstArg);
220
+ if (direct) {
221
+ return direct;
163
222
  }
164
- if (identifierName(callee) === 'cross') {
165
- return extractFirstStringArg(node);
223
+ const batch = extractBatchCrossIds(firstArg, sourceCode);
224
+ return batch ?? unresolvedCross();
225
+ };
226
+ /**
227
+ * Check if a node is a `<ctxName>.cross(...)` call and return any statically
228
+ * resolvable target IDs.
229
+ *
230
+ * Also matches bare `cross(...)` calls from destructuring. When the first
231
+ * argument is a non-string expression (e.g. a trail object identifier like
232
+ * `ctx.cross(showGist, input)`), marks the call as unresolved so callers can
233
+ * track that a cross call exists but its target cannot be statically resolved.
234
+ */
235
+ const extractCrossCall = (node, ctxNames, sourceCode) => {
236
+ const crossCall = resolveCrossCallNode(node, ctxNames);
237
+ if (!crossCall) {
238
+ return null;
166
239
  }
167
- return null;
240
+ return resolveCrossCallTargets(extractCrossFirstArg(crossCall), sourceCode);
168
241
  };
169
- /** Build the set of context parameter names to match against. */
242
+ /**
243
+ * Build the set of context parameter names to match against.
244
+ *
245
+ * Returns ONLY the actual second-parameter name from the blaze signature.
246
+ * No seeded defaults: if the blaze has no second parameter, the returned set
247
+ * is empty and no `ctx.cross(...)` / `context.cross(...)` calls are tracked
248
+ * for that blaze. An unrelated closure-scoped `ctx` identifier is not the
249
+ * trail context and must not be treated as one.
250
+ *
251
+ * Mirrors `fires-declarations.ts` and `resource-declarations.ts` for the same
252
+ * reason.
253
+ */
170
254
  const buildCtxNames = (body) => {
171
- const ctxNames = new Set(['ctx', 'context']);
255
+ const ctxNames = new Set();
172
256
  const paramName = extractContextParamName(body);
173
257
  if (paramName) {
174
258
  ctxNames.add(paramName);
175
259
  }
176
260
  return ctxNames;
177
261
  };
262
+ /** Collect cross call results from a single blaze body. */
263
+ const collectCrossCallsFromBody = (body, ids, sourceCode) => {
264
+ const ctxNames = buildCtxNames(body);
265
+ let foundUnresolved = false;
266
+ walk(body, (node) => {
267
+ const extracted = extractCrossCall(node, ctxNames, sourceCode);
268
+ if (!extracted) {
269
+ return;
270
+ }
271
+ if (extracted.hasUnresolved) {
272
+ foundUnresolved = true;
273
+ }
274
+ for (const id of extracted.ids) {
275
+ ids.add(id);
276
+ }
277
+ });
278
+ return foundUnresolved;
279
+ };
178
280
  /** Walk blaze bodies and collect all statically resolvable ctx.cross() trail IDs. */
179
- const extractCalledCrosses = (config) => {
281
+ const extractCalledCrosses = (config, sourceCode) => {
180
282
  const ids = new Set();
283
+ let hasUnresolved = false;
181
284
  for (const body of findBlazeBodies(config)) {
182
- const ctxNames = buildCtxNames(body);
183
- walk(body, (node) => {
184
- const id = extractCrossCallId(node, ctxNames);
185
- if (id) {
186
- ids.add(id);
187
- }
188
- });
285
+ if (collectCrossCallsFromBody(body, ids, sourceCode)) {
286
+ hasUnresolved = true;
287
+ }
189
288
  }
190
- return ids;
289
+ return { hasUnresolved, ids };
191
290
  };
192
291
  // ---------------------------------------------------------------------------
193
292
  // Diagnostic builders
194
293
  // ---------------------------------------------------------------------------
195
- const buildUndeclaredDiagnostic = (trailId, crossedId, filePath, line) => ({
294
+ const buildUndeclaredDiagnostic = (trailId, crossedId, filePath, line, softened = false) => ({
196
295
  filePath,
197
296
  line,
198
- message: `Trail "${trailId}": ctx.cross('${crossedId}') called but '${crossedId}' is not declared in crosses`,
297
+ message: softened
298
+ ? `Trail "${trailId}": ctx.cross('${crossedId}') called but '${crossedId}' is not declared in crosses (may be declared via trail object references)`
299
+ : `Trail "${trailId}": ctx.cross('${crossedId}') called but '${crossedId}' is not declared in crosses`,
199
300
  rule: 'cross-declarations',
200
- severity: 'error',
301
+ severity: softened ? 'warn' : 'error',
201
302
  });
202
303
  const buildUnusedDiagnostic = (trailId, crossedId, filePath, line) => ({
203
304
  filePath,
@@ -213,7 +314,7 @@ const buildUnusedDiagnostic = (trailId, crossedId, filePath, line) => ({
213
314
  const reportUndeclared = (called, declared, ctx, diagnostics) => {
214
315
  for (const id of called) {
215
316
  if (!declared.has(id)) {
216
- diagnostics.push(buildUndeclaredDiagnostic(ctx.trailId, id, ctx.filePath, ctx.line));
317
+ diagnostics.push(buildUndeclaredDiagnostic(ctx.trailId, id, ctx.filePath, ctx.line, ctx.softened));
217
318
  }
218
319
  }
219
320
  };
@@ -227,14 +328,27 @@ const reportUnused = (declared, called, ctx, diagnostics) => {
227
328
  };
228
329
  const checkTrailDefinition = (def, filePath, sourceCode, diagnostics) => {
229
330
  const declared = extractDeclaredCrosses(def.config, sourceCode);
230
- const called = extractCalledCrosses(def.config);
231
- if (declared.size === 0 && called.size === 0) {
331
+ const called = extractCalledCrosses(def.config, sourceCode);
332
+ if (declared.ids.size === 0 &&
333
+ !declared.hasUnresolved &&
334
+ called.ids.size === 0 &&
335
+ !called.hasUnresolved) {
232
336
  return;
233
337
  }
234
338
  const line = offsetToLine(sourceCode, def.start);
235
339
  const ctx = { filePath, line, trailId: def.id };
236
- reportUndeclared(called, declared, ctx, diagnostics);
237
- reportUnused(declared, called, ctx, diagnostics);
340
+ // When the declared array contains trail object references we can't resolve,
341
+ // downgrade "undeclared" diagnostics from error to warn. The developer still
342
+ // sees genuinely undeclared calls, but we can't statically prove the call
343
+ // isn't covered by a trail object entry the runtime will normalize.
344
+ reportUndeclared(called.ids, declared.ids, { ...ctx, softened: declared.hasUnresolved }, diagnostics);
345
+ // When all ctx.cross() calls are statically resolved, report unused
346
+ // declarations. When some calls use trail object references (unresolved),
347
+ // skip — a declared string like 'gist.show' might be the target of an
348
+ // unresolved `ctx.cross(showGist)` call, producing false positives.
349
+ if (!called.hasUnresolved) {
350
+ reportUnused(declared.ids, called.ids, ctx, diagnostics);
351
+ }
238
352
  };
239
353
  // ---------------------------------------------------------------------------
240
354
  // Rule
@@ -1 +1 @@
1
- {"version":3,"file":"cross-declarations.js","sourceRoot":"","sources":["../../src/rules/cross-declarations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross-declarations.js","sourceRoot":"","sources":["../../src/rules/cross-declarations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectAwareWardenRule } from './types.js';
2
+ export declare const deadInternalTrail: ProjectAwareWardenRule;
3
+ //# sourceMappingURL=dead-internal-trail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-internal-trail.d.ts","sourceRoot":"","sources":["../../src/rules/dead-internal-trail.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AA+FpB,eAAO,MAAM,iBAAiB,EAAE,sBA8B/B,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { collectCrossTargetTrailIds, findConfigProperty, findTrailDefinitions, getStringValue, isStringLiteral, offsetToLine, parse, } from './ast.js';
2
+ import { isTestFile } from './scan.js';
3
+ const isNonEmptyActivationValue = (onValue) => {
4
+ // Identifier reference (e.g. `on: signalsArray`) — conservatively treat as
5
+ // having activation to avoid false positives. We can't cheaply resolve what
6
+ // the identifier binds to, so assume it's a non-empty activation.
7
+ if (onValue.type === 'Identifier') {
8
+ return true;
9
+ }
10
+ if (onValue.type !== 'ArrayExpression') {
11
+ return false;
12
+ }
13
+ const elements = onValue['elements'];
14
+ return (elements?.length ?? 0) > 0;
15
+ };
16
+ const hasOnActivation = (config) => {
17
+ const onProp = findConfigProperty(config, 'on');
18
+ const onValue = onProp?.value;
19
+ return onValue ? isNonEmptyActivationValue(onValue) : false;
20
+ };
21
+ const hasExplicitInternalVisibility = (config) => {
22
+ const visibilityProp = findConfigProperty(config, 'visibility');
23
+ const visibilityValue = visibilityProp?.value;
24
+ return (!!visibilityValue &&
25
+ isStringLiteral(visibilityValue) &&
26
+ getStringValue(visibilityValue) === 'internal');
27
+ };
28
+ /** Check legacy `meta: { internal: true }` convention (mirrors runtime effectiveVisibility). */
29
+ const hasLegacyMetaInternal = (config) => {
30
+ const metaProp = findConfigProperty(config, 'meta');
31
+ const metaValue = metaProp?.value;
32
+ if (!metaValue || metaValue.type !== 'ObjectExpression') {
33
+ return false;
34
+ }
35
+ const internalProp = findConfigProperty(metaValue, 'internal');
36
+ const internalValue = internalProp?.value;
37
+ return (internalValue?.type === 'BooleanLiteral' &&
38
+ internalValue.value === true);
39
+ };
40
+ const isInternalTrail = (config) => hasExplicitInternalVisibility(config) || hasLegacyMetaInternal(config);
41
+ const buildDeadInternalTrailDiagnostic = (trailId, filePath, line) => ({
42
+ filePath,
43
+ line,
44
+ message: `Trail "${trailId}" is marked visibility: 'internal' but nothing crosses it and it has no on: activation. Internal trails should stay reachable through ctx.cross() or reactive activation.`,
45
+ rule: 'dead-internal-trail',
46
+ severity: 'warn',
47
+ });
48
+ const checkDeadInternalTrails = (ast, sourceCode, filePath, crossedTrailIds) => {
49
+ if (isTestFile(filePath) || !ast) {
50
+ return [];
51
+ }
52
+ const diagnostics = [];
53
+ for (const def of findTrailDefinitions(ast)) {
54
+ if (def.kind !== 'trail' || !isInternalTrail(def.config)) {
55
+ continue;
56
+ }
57
+ if (hasOnActivation(def.config) || crossedTrailIds.has(def.id)) {
58
+ continue;
59
+ }
60
+ diagnostics.push(buildDeadInternalTrailDiagnostic(def.id, filePath, offsetToLine(sourceCode, def.start)));
61
+ }
62
+ return diagnostics;
63
+ };
64
+ export const deadInternalTrail = {
65
+ check(sourceCode, filePath) {
66
+ const ast = parse(filePath, sourceCode);
67
+ return checkDeadInternalTrails(ast, sourceCode, filePath, ast ? collectCrossTargetTrailIds(ast, sourceCode) : new Set());
68
+ },
69
+ checkWithContext(sourceCode, filePath, context) {
70
+ const ast = parse(filePath, sourceCode);
71
+ const localCrossTargetTrailIds = ast
72
+ ? collectCrossTargetTrailIds(ast, sourceCode)
73
+ : new Set();
74
+ return checkDeadInternalTrails(ast, sourceCode, filePath, context.crossTargetTrailIds ?? localCrossTargetTrailIds);
75
+ },
76
+ description: 'Warn when an internal trail has no crossings anywhere in the project and no on: activation.',
77
+ name: 'dead-internal-trail',
78
+ severity: 'warn',
79
+ };
80
+ //# sourceMappingURL=dead-internal-trail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-internal-trail.js","sourceRoot":"","sources":["../../src/rules/dead-internal-trail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { WardenRule } from './types.js';
2
+ /**
3
+ * Ensures files containing draft ids are visibly marked as draft-bearing files.
4
+ */
5
+ export declare const draftFileMarking: WardenRule;
6
+ //# sourceMappingURL=draft-file-marking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-file-marking.d.ts","sourceRoot":"","sources":["../../src/rules/draft-file-marking.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAmI/D;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAa9B,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { isDraftId } from '@ontrails/core';
2
+ import { isDraftMarkedFile } from '../draft.js';
3
+ import { collectFrameworkDraftPrefixConstantOffsets, findStringLiterals, hasIgnoreCommentOnLine, offsetToLine, parse, splitSourceLines, } from './ast.js';
4
+ const messageForMissingMarker = (draftId) => `Draft id "${draftId}" appears in source, but the file is not draft-marked. ` +
5
+ 'Rename it with an _draft. prefix or a .draft. trailing segment.';
6
+ const makeDiagnostic = (sourceCode, filePath, start, message, severity) => ({
7
+ filePath,
8
+ line: offsetToLine(sourceCode, start),
9
+ message,
10
+ rule: 'draft-file-marking',
11
+ severity,
12
+ });
13
+ const collectDraftMatches = (sourceCode, filePath, ast) => {
14
+ const frameworkConstantOffsets = collectFrameworkDraftPrefixConstantOffsets(ast, filePath);
15
+ const lines = splitSourceLines(sourceCode);
16
+ return findStringLiterals(ast, (value) => isDraftId(value)).filter((match) => {
17
+ if (frameworkConstantOffsets.has(match.start)) {
18
+ return false;
19
+ }
20
+ if (hasIgnoreCommentOnLine(lines, offsetToLine(sourceCode, match.start))) {
21
+ return false;
22
+ }
23
+ return true;
24
+ });
25
+ };
26
+ const draftMissingMarkerDiagnostic = (sourceCode, filePath, ast) => {
27
+ const draftMatches = collectDraftMatches(sourceCode, filePath, ast);
28
+ if (!draftMatches.length || isDraftMarkedFile(filePath)) {
29
+ return null;
30
+ }
31
+ const [first] = draftMatches;
32
+ if (!first) {
33
+ return null;
34
+ }
35
+ return makeDiagnostic(sourceCode, filePath, first.start, messageForMissingMarker(first.value), 'error');
36
+ };
37
+ const draftMarkedWithoutIdsDiagnostic = (filePath, ast) => {
38
+ // Deciding whether the file's `_draft.` marker is still warranted is a
39
+ // question about *all* draft ids present in source, not just the unsuppressed
40
+ // ones. Pragma-suppressed ids still justify a draft-marked filename — a user
41
+ // intentionally silencing them has not removed the draft content. We
42
+ // therefore filter only the framework-constant declarations (which are not
43
+ // draft ids at all) and bypass the pragma filter that `collectDraftMatches`
44
+ // applies.
45
+ const frameworkConstantOffsets = collectFrameworkDraftPrefixConstantOffsets(ast, filePath);
46
+ const unsuppressedDraftIds = findStringLiterals(ast, (value) => isDraftId(value)).filter((match) => !frameworkConstantOffsets.has(match.start));
47
+ if (unsuppressedDraftIds.length > 0) {
48
+ return null;
49
+ }
50
+ if (!isDraftMarkedFile(filePath)) {
51
+ return null;
52
+ }
53
+ return {
54
+ filePath,
55
+ line: 1,
56
+ message: 'File is draft-marked but no longer contains draft ids. Remove the draft filename marker or finish the promotion cleanup.',
57
+ rule: 'draft-file-marking',
58
+ severity: 'warn',
59
+ };
60
+ };
61
+ const collectDraftFileMarkingDiagnostics = (sourceCode, filePath, ast) => {
62
+ const missingMarkerDiagnostic = draftMissingMarkerDiagnostic(sourceCode, filePath, ast);
63
+ if (missingMarkerDiagnostic) {
64
+ return [missingMarkerDiagnostic];
65
+ }
66
+ const markedWithoutIdsDiagnostic = draftMarkedWithoutIdsDiagnostic(filePath, ast);
67
+ if (markedWithoutIdsDiagnostic) {
68
+ return [markedWithoutIdsDiagnostic];
69
+ }
70
+ return [];
71
+ };
72
+ /**
73
+ * Ensures files containing draft ids are visibly marked as draft-bearing files.
74
+ */
75
+ export const draftFileMarking = {
76
+ check(sourceCode, filePath) {
77
+ const ast = parse(filePath, sourceCode);
78
+ if (!ast) {
79
+ return [];
80
+ }
81
+ return collectDraftFileMarkingDiagnostics(sourceCode, filePath, ast);
82
+ },
83
+ description: 'Require draft-bearing files to use _draft.* or *.draft.* filename markers.',
84
+ name: 'draft-file-marking',
85
+ severity: 'error',
86
+ };
87
+ //# sourceMappingURL=draft-file-marking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-file-marking.js","sourceRoot":"","sources":["../../src/rules/draft-file-marking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { WardenRule } from './types.js';
2
+ /**
3
+ * Warns when draft ids are still present so the debt stays visible during
4
+ * review even when the file is correctly marked.
5
+ *
6
+ * Severity is intentionally `warn`, not `error`. The hard rejection layer for
7
+ * draft state leaking into established outputs is `validateEstablishedTopo` at
8
+ * runtime — it blocks topo export, trailhead projection, and lockfile writes.
9
+ * This rule surfaces the debt for human reviewers without duplicating that layer.
10
+ */
11
+ export declare const draftVisibleDebt: WardenRule;
12
+ //# sourceMappingURL=draft-visible-debt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-visible-debt.d.ts","sourceRoot":"","sources":["../../src/rules/draft-visible-debt.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,YAAY,CAAC;AAsD/D;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAa9B,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { isDraftId } from '@ontrails/core';
2
+ import { collectFrameworkDraftPrefixConstantOffsets, findStringLiterals, hasIgnoreCommentOnLine, offsetToLine, parse, splitSourceLines, } from './ast.js';
3
+ const createDiagnostic = (sourceCode, filePath, match) => ({
4
+ filePath,
5
+ line: offsetToLine(sourceCode, match.start),
6
+ message: `Draft id "${match.value}" is still visible debt. ` +
7
+ 'Established trailheads, lock export, and OpenAPI generation will reject it until it is promoted.',
8
+ rule: 'draft-visible-debt',
9
+ severity: 'warn',
10
+ });
11
+ const isSuppressedMatch = (match, sourceCode, lines, frameworkConstantOffsets) => frameworkConstantOffsets.has(match.start) ||
12
+ hasIgnoreCommentOnLine(lines, offsetToLine(sourceCode, match.start));
13
+ const collectDraftVisibleDebtDiagnostics = (sourceCode, filePath, ast) => {
14
+ const frameworkConstantOffsets = collectFrameworkDraftPrefixConstantOffsets(ast, filePath);
15
+ const lines = splitSourceLines(sourceCode);
16
+ const seen = new Set();
17
+ return findStringLiterals(ast, (value) => isDraftId(value)).flatMap((match) => {
18
+ if (isSuppressedMatch(match, sourceCode, lines, frameworkConstantOffsets)) {
19
+ return [];
20
+ }
21
+ const key = `${match.value}:${String(match.start)}`;
22
+ if (seen.has(key)) {
23
+ return [];
24
+ }
25
+ seen.add(key);
26
+ return [createDiagnostic(sourceCode, filePath, match)];
27
+ });
28
+ };
29
+ /**
30
+ * Warns when draft ids are still present so the debt stays visible during
31
+ * review even when the file is correctly marked.
32
+ *
33
+ * Severity is intentionally `warn`, not `error`. The hard rejection layer for
34
+ * draft state leaking into established outputs is `validateEstablishedTopo` at
35
+ * runtime — it blocks topo export, trailhead projection, and lockfile writes.
36
+ * This rule surfaces the debt for human reviewers without duplicating that layer.
37
+ */
38
+ export const draftVisibleDebt = {
39
+ check(sourceCode, filePath) {
40
+ const ast = parse(filePath, sourceCode);
41
+ if (!ast) {
42
+ return [];
43
+ }
44
+ return collectDraftVisibleDebtDiagnostics(sourceCode, filePath, ast);
45
+ },
46
+ description: 'Warn when draft ids remain in source so the debt stays visible during review.',
47
+ name: 'draft-visible-debt',
48
+ severity: 'warn',
49
+ };
50
+ //# sourceMappingURL=draft-visible-debt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-visible-debt.js","sourceRoot":"","sources":["../../src/rules/draft-visible-debt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EACL,0CAA0C,EAC1C,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,KAAK,EACL,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAGlB,MAAM,gBAAgB,GAAG,CACvB,UAAkB,EAClB,QAAgB,EAChB,KAAuC,EACrB,EAAE,CAAC,CAAC;IACtB,QAAQ;IACR,IAAI,EAAE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;IAC3C,OAAO,EACL,aAAa,KAAK,CAAC,KAAK,2BAA2B;QACnD,kGAAkG;IACpG,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,MAAM;CACjB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CACxB,KAAwB,EACxB,UAAkB,EAClB,KAAwB,EACxB,wBAA6C,EACpC,EAAE,CACX,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACzC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvE,MAAM,kCAAkC,GAAG,CACzC,UAAkB,EAClB,QAAgB,EAChB,GAA0C,EACtB,EAAE;IACtB,MAAM,wBAAwB,GAAG,0CAA0C,CACzE,GAAG,EACH,QAAQ,CACT,CAAC;IACF,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,OAAO,kBAAkB,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CACjE,CAAC,KAAK,EAAE,EAAE;QACR,IACE,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,wBAAwB,CAAC,EACrE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC,CACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,KAAK,CAAC,UAAkB,EAAE,QAAgB;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,kCAAkC,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,WAAW,EACT,+EAA+E;IACjF,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,MAAM;CACjB,CAAC"}