@descryy/core 0.4.0 → 0.5.0

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 (353) hide show
  1. package/dist/budget/reply.d.ts +11 -46
  2. package/dist/budget/reply.d.ts.map +1 -1
  3. package/dist/budget/reply.js +10 -39
  4. package/dist/budget/reply.js.map +1 -1
  5. package/dist/budget/size.d.ts +2 -21
  6. package/dist/budget/size.d.ts.map +1 -1
  7. package/dist/budget/size.js +3 -24
  8. package/dist/budget/size.js.map +1 -1
  9. package/dist/capabilities/preconditions.d.ts +7 -68
  10. package/dist/capabilities/preconditions.d.ts.map +1 -1
  11. package/dist/capabilities/preconditions.js +6 -57
  12. package/dist/capabilities/preconditions.js.map +1 -1
  13. package/dist/contracts/engine.d.ts +23 -11
  14. package/dist/contracts/engine.d.ts.map +1 -1
  15. package/dist/contracts/engine.js +23 -11
  16. package/dist/contracts/engine.js.map +1 -1
  17. package/dist/contracts/orphans.d.ts +18 -122
  18. package/dist/contracts/orphans.d.ts.map +1 -1
  19. package/dist/contracts/orphans.js +36 -134
  20. package/dist/contracts/orphans.js.map +1 -1
  21. package/dist/contracts/paths.d.ts +4 -114
  22. package/dist/contracts/paths.d.ts.map +1 -1
  23. package/dist/contracts/paths.js +7 -140
  24. package/dist/contracts/paths.js.map +1 -1
  25. package/dist/contracts/shapes.d.ts +13 -66
  26. package/dist/contracts/shapes.d.ts.map +1 -1
  27. package/dist/contracts/shapes.js +20 -91
  28. package/dist/contracts/shapes.js.map +1 -1
  29. package/dist/governance/budget.d.ts +12 -48
  30. package/dist/governance/budget.d.ts.map +1 -1
  31. package/dist/governance/budget.js +12 -48
  32. package/dist/governance/budget.js.map +1 -1
  33. package/dist/governance/candidate-boundary.d.ts +4 -32
  34. package/dist/governance/candidate-boundary.d.ts.map +1 -1
  35. package/dist/governance/candidate-boundary.js +4 -32
  36. package/dist/governance/candidate-boundary.js.map +1 -1
  37. package/dist/governance/escalation.d.ts +7 -45
  38. package/dist/governance/escalation.d.ts.map +1 -1
  39. package/dist/governance/escalation.js +7 -45
  40. package/dist/governance/escalation.js.map +1 -1
  41. package/dist/governance/fact-boundary.d.ts +7 -49
  42. package/dist/governance/fact-boundary.d.ts.map +1 -1
  43. package/dist/governance/fact-boundary.js +5 -43
  44. package/dist/governance/fact-boundary.js.map +1 -1
  45. package/dist/governance/finding-funnel.d.ts +11 -72
  46. package/dist/governance/finding-funnel.d.ts.map +1 -1
  47. package/dist/governance/finding-funnel.js +9 -68
  48. package/dist/governance/finding-funnel.js.map +1 -1
  49. package/dist/graph/build.d.ts +9 -90
  50. package/dist/graph/build.d.ts.map +1 -1
  51. package/dist/graph/build.js +15 -62
  52. package/dist/graph/build.js.map +1 -1
  53. package/dist/graph/cross-language.d.ts +4 -43
  54. package/dist/graph/cross-language.d.ts.map +1 -1
  55. package/dist/graph/cross-language.js +9 -77
  56. package/dist/graph/cross-language.js.map +1 -1
  57. package/dist/graph/merge.d.ts +8 -88
  58. package/dist/graph/merge.d.ts.map +1 -1
  59. package/dist/graph/merge.js +9 -93
  60. package/dist/graph/merge.js.map +1 -1
  61. package/dist/graph/observed-tests.d.ts +7 -68
  62. package/dist/graph/observed-tests.d.ts.map +1 -1
  63. package/dist/graph/observed-tests.js +5 -60
  64. package/dist/graph/observed-tests.js.map +1 -1
  65. package/dist/graph/persist.d.ts +2 -25
  66. package/dist/graph/persist.d.ts.map +1 -1
  67. package/dist/graph/persist.js +2 -25
  68. package/dist/graph/persist.js.map +1 -1
  69. package/dist/graph/runtime-confirmation.d.ts +14 -91
  70. package/dist/graph/runtime-confirmation.d.ts.map +1 -1
  71. package/dist/graph/runtime-confirmation.js +19 -103
  72. package/dist/graph/runtime-confirmation.js.map +1 -1
  73. package/dist/ledger/mint.d.ts +9 -43
  74. package/dist/ledger/mint.d.ts.map +1 -1
  75. package/dist/ledger/mint.js +15 -65
  76. package/dist/ledger/mint.js.map +1 -1
  77. package/dist/ledger/resolve.d.ts +13 -81
  78. package/dist/ledger/resolve.d.ts.map +1 -1
  79. package/dist/ledger/resolve.js +13 -76
  80. package/dist/ledger/resolve.js.map +1 -1
  81. package/dist/multipr/fingerprint.d.ts +5 -46
  82. package/dist/multipr/fingerprint.d.ts.map +1 -1
  83. package/dist/multipr/fingerprint.js +22 -74
  84. package/dist/multipr/fingerprint.js.map +1 -1
  85. package/dist/multipr/hidden-dependency.d.ts +13 -73
  86. package/dist/multipr/hidden-dependency.d.ts.map +1 -1
  87. package/dist/multipr/hidden-dependency.js +12 -63
  88. package/dist/multipr/hidden-dependency.js.map +1 -1
  89. package/dist/multipr/mechanical.d.ts +25 -160
  90. package/dist/multipr/mechanical.d.ts.map +1 -1
  91. package/dist/multipr/mechanical.js +21 -137
  92. package/dist/multipr/mechanical.js.map +1 -1
  93. package/dist/multipr/migration-heads.d.ts +18 -105
  94. package/dist/multipr/migration-heads.d.ts.map +1 -1
  95. package/dist/multipr/migration-heads.js +15 -84
  96. package/dist/multipr/migration-heads.js.map +1 -1
  97. package/dist/multipr/overlap.d.ts +16 -94
  98. package/dist/multipr/overlap.d.ts.map +1 -1
  99. package/dist/multipr/overlap.js +25 -105
  100. package/dist/multipr/overlap.js.map +1 -1
  101. package/dist/multipr/scope-store.d.ts +15 -80
  102. package/dist/multipr/scope-store.d.ts.map +1 -1
  103. package/dist/multipr/scope-store.js +17 -87
  104. package/dist/multipr/scope-store.js.map +1 -1
  105. package/dist/multipr/superseded.d.ts +10 -95
  106. package/dist/multipr/superseded.d.ts.map +1 -1
  107. package/dist/multipr/superseded.js +7 -60
  108. package/dist/multipr/superseded.js.map +1 -1
  109. package/dist/query/confirmed-facts.d.ts +12 -58
  110. package/dist/query/confirmed-facts.d.ts.map +1 -1
  111. package/dist/query/confirmed-facts.js +8 -47
  112. package/dist/query/confirmed-facts.js.map +1 -1
  113. package/dist/query/declared-value-closure.d.ts +13 -104
  114. package/dist/query/declared-value-closure.d.ts.map +1 -1
  115. package/dist/query/declared-value-closure.js +15 -104
  116. package/dist/query/declared-value-closure.js.map +1 -1
  117. package/dist/query/memory.d.ts +4 -16
  118. package/dist/query/memory.d.ts.map +1 -1
  119. package/dist/query/memory.js +9 -22
  120. package/dist/query/memory.js.map +1 -1
  121. package/dist/query/prominence.d.ts +6 -55
  122. package/dist/query/prominence.d.ts.map +1 -1
  123. package/dist/query/prominence.js +6 -55
  124. package/dist/query/prominence.js.map +1 -1
  125. package/dist/query/provider.d.ts +27 -93
  126. package/dist/query/provider.d.ts.map +1 -1
  127. package/dist/query/provider.js +8 -29
  128. package/dist/query/provider.js.map +1 -1
  129. package/dist/query/queries.d.ts +15 -65
  130. package/dist/query/queries.d.ts.map +1 -1
  131. package/dist/query/queries.js +30 -104
  132. package/dist/query/queries.js.map +1 -1
  133. package/dist/query/refusal-fetch.d.ts +8 -85
  134. package/dist/query/refusal-fetch.d.ts.map +1 -1
  135. package/dist/query/refusal-fetch.js +11 -93
  136. package/dist/query/refusal-fetch.js.map +1 -1
  137. package/dist/query/refusal-questions.d.ts +17 -92
  138. package/dist/query/refusal-questions.d.ts.map +1 -1
  139. package/dist/query/refusal-questions.js +14 -78
  140. package/dist/query/refusal-questions.js.map +1 -1
  141. package/dist/query/resolution-floor.d.ts +3 -23
  142. package/dist/query/resolution-floor.d.ts.map +1 -1
  143. package/dist/query/resolution-floor.js +3 -23
  144. package/dist/query/resolution-floor.js.map +1 -1
  145. package/dist/query/root-cause-score.d.ts +11 -161
  146. package/dist/query/root-cause-score.d.ts.map +1 -1
  147. package/dist/query/root-cause-score.js +6 -137
  148. package/dist/query/root-cause-score.js.map +1 -1
  149. package/dist/query/row-closure-picture.d.ts +5 -67
  150. package/dist/query/row-closure-picture.d.ts.map +1 -1
  151. package/dist/query/row-closure-picture.js +6 -67
  152. package/dist/query/row-closure-picture.js.map +1 -1
  153. package/dist/query/similar-incidents.d.ts +6 -41
  154. package/dist/query/similar-incidents.d.ts.map +1 -1
  155. package/dist/query/similar-incidents.js +15 -69
  156. package/dist/query/similar-incidents.js.map +1 -1
  157. package/dist/query/sqlite.d.ts +3 -7
  158. package/dist/query/sqlite.d.ts.map +1 -1
  159. package/dist/query/sqlite.js +9 -19
  160. package/dist/query/sqlite.js.map +1 -1
  161. package/dist/query/test-coverage.d.ts +5 -45
  162. package/dist/query/test-coverage.d.ts.map +1 -1
  163. package/dist/query/test-coverage.js +10 -53
  164. package/dist/query/test-coverage.js.map +1 -1
  165. package/dist/query/traverse.d.ts +22 -126
  166. package/dist/query/traverse.d.ts.map +1 -1
  167. package/dist/query/traverse.js +25 -126
  168. package/dist/query/traverse.js.map +1 -1
  169. package/dist/query/unresolved.d.ts +19 -164
  170. package/dist/query/unresolved.d.ts.map +1 -1
  171. package/dist/query/unresolved.js +11 -138
  172. package/dist/query/unresolved.js.map +1 -1
  173. package/dist/query/verification-status.d.ts +12 -109
  174. package/dist/query/verification-status.d.ts.map +1 -1
  175. package/dist/query/verification-status.js +9 -99
  176. package/dist/query/verification-status.js.map +1 -1
  177. package/dist/recording/migrate.d.ts +4 -10
  178. package/dist/recording/migrate.d.ts.map +1 -1
  179. package/dist/recording/migrate.js +4 -10
  180. package/dist/recording/migrate.js.map +1 -1
  181. package/dist/recording/reader.d.ts +2 -7
  182. package/dist/recording/reader.d.ts.map +1 -1
  183. package/dist/recording/reader.js +2 -7
  184. package/dist/recording/reader.js.map +1 -1
  185. package/dist/recording/redact.d.ts +6 -57
  186. package/dist/recording/redact.d.ts.map +1 -1
  187. package/dist/recording/redact.js +8 -64
  188. package/dist/recording/redact.js.map +1 -1
  189. package/dist/recording/schema.d.ts +3 -38
  190. package/dist/recording/schema.d.ts.map +1 -1
  191. package/dist/recording/schema.js +3 -38
  192. package/dist/recording/schema.js.map +1 -1
  193. package/dist/recording/writer.d.ts +11 -74
  194. package/dist/recording/writer.d.ts.map +1 -1
  195. package/dist/recording/writer.js +3 -43
  196. package/dist/recording/writer.js.map +1 -1
  197. package/dist/scoping/fanout.d.ts +6 -68
  198. package/dist/scoping/fanout.d.ts.map +1 -1
  199. package/dist/scoping/fanout.js +6 -68
  200. package/dist/scoping/fanout.js.map +1 -1
  201. package/dist/scoping/score.d.ts +20 -70
  202. package/dist/scoping/score.d.ts.map +1 -1
  203. package/dist/scoping/score.js +20 -70
  204. package/dist/scoping/score.js.map +1 -1
  205. package/dist/scoping/tiers.d.ts +4 -16
  206. package/dist/scoping/tiers.d.ts.map +1 -1
  207. package/dist/scoping/tiers.js +4 -16
  208. package/dist/scoping/tiers.js.map +1 -1
  209. package/dist/scoping/traverse.d.ts +3 -25
  210. package/dist/scoping/traverse.d.ts.map +1 -1
  211. package/dist/scoping/traverse.js +14 -49
  212. package/dist/scoping/traverse.js.map +1 -1
  213. package/dist/scoping/weights.d.ts +10 -74
  214. package/dist/scoping/weights.d.ts.map +1 -1
  215. package/dist/scoping/weights.js +14 -86
  216. package/dist/scoping/weights.js.map +1 -1
  217. package/dist/sources/confirmed/incidents.d.ts +5 -35
  218. package/dist/sources/confirmed/incidents.d.ts.map +1 -1
  219. package/dist/sources/confirmed/incidents.js +14 -48
  220. package/dist/sources/confirmed/incidents.js.map +1 -1
  221. package/dist/sources/git/diff.d.ts +71 -65
  222. package/dist/sources/git/diff.d.ts.map +1 -1
  223. package/dist/sources/git/diff.js +136 -83
  224. package/dist/sources/git/diff.js.map +1 -1
  225. package/dist/sources/git/env.d.ts +7 -0
  226. package/dist/sources/git/env.d.ts.map +1 -1
  227. package/dist/sources/git/env.js +10 -11
  228. package/dist/sources/git/env.js.map +1 -1
  229. package/dist/sources/git/history.d.ts +64 -84
  230. package/dist/sources/git/history.d.ts.map +1 -1
  231. package/dist/sources/git/history.js +141 -112
  232. package/dist/sources/git/history.js.map +1 -1
  233. package/dist/sources/git/incidents.d.ts +13 -75
  234. package/dist/sources/git/incidents.d.ts.map +1 -1
  235. package/dist/sources/git/incidents.js +21 -91
  236. package/dist/sources/git/incidents.js.map +1 -1
  237. package/dist/sources/git/index.d.ts +5 -3
  238. package/dist/sources/git/index.d.ts.map +1 -1
  239. package/dist/sources/git/index.js +3 -2
  240. package/dist/sources/git/index.js.map +1 -1
  241. package/dist/sources/git/source.d.ts +9 -79
  242. package/dist/sources/git/source.d.ts.map +1 -1
  243. package/dist/sources/git/source.js +33 -133
  244. package/dist/sources/git/source.js.map +1 -1
  245. package/dist/sources/migrations/across-change.d.ts +94 -0
  246. package/dist/sources/migrations/across-change.d.ts.map +1 -0
  247. package/dist/sources/migrations/across-change.js +278 -0
  248. package/dist/sources/migrations/across-change.js.map +1 -0
  249. package/dist/sources/migrations/dialects.d.ts +20 -36
  250. package/dist/sources/migrations/dialects.d.ts.map +1 -1
  251. package/dist/sources/migrations/dialects.js +11 -36
  252. package/dist/sources/migrations/dialects.js.map +1 -1
  253. package/dist/sources/migrations/index.d.ts +3 -1
  254. package/dist/sources/migrations/index.d.ts.map +1 -1
  255. package/dist/sources/migrations/index.js +2 -1
  256. package/dist/sources/migrations/index.js.map +1 -1
  257. package/dist/sources/migrations/read.d.ts +14 -79
  258. package/dist/sources/migrations/read.d.ts.map +1 -1
  259. package/dist/sources/migrations/read.js +14 -89
  260. package/dist/sources/migrations/read.js.map +1 -1
  261. package/dist/sources/workspace/workspace.d.ts +6 -42
  262. package/dist/sources/workspace/workspace.d.ts.map +1 -1
  263. package/dist/sources/workspace/workspace.js +10 -53
  264. package/dist/sources/workspace/workspace.js.map +1 -1
  265. package/dist/store/driver/driver.d.ts +9 -38
  266. package/dist/store/driver/driver.d.ts.map +1 -1
  267. package/dist/store/driver/driver.js +4 -22
  268. package/dist/store/driver/driver.js.map +1 -1
  269. package/dist/store/driver/node-sqlite.d.ts +3 -12
  270. package/dist/store/driver/node-sqlite.d.ts.map +1 -1
  271. package/dist/store/driver/node-sqlite.js +4 -18
  272. package/dist/store/driver/node-sqlite.js.map +1 -1
  273. package/dist/store/index.d.ts +2 -7
  274. package/dist/store/index.d.ts.map +1 -1
  275. package/dist/store/index.js +4 -10
  276. package/dist/store/index.js.map +1 -1
  277. package/dist/store/migrate.d.ts +14 -50
  278. package/dist/store/migrate.d.ts.map +1 -1
  279. package/dist/store/migrate.js +15 -52
  280. package/dist/store/migrate.js.map +1 -1
  281. package/dist/store/reader.d.ts +19 -84
  282. package/dist/store/reader.d.ts.map +1 -1
  283. package/dist/store/reader.js +25 -92
  284. package/dist/store/reader.js.map +1 -1
  285. package/dist/store/schema.d.ts +14 -76
  286. package/dist/store/schema.d.ts.map +1 -1
  287. package/dist/store/schema.js +14 -76
  288. package/dist/store/schema.js.map +1 -1
  289. package/dist/store/writer.d.ts +14 -88
  290. package/dist/store/writer.d.ts.map +1 -1
  291. package/dist/store/writer.js +29 -123
  292. package/dist/store/writer.js.map +1 -1
  293. package/dist/tiers/certify.d.ts +46 -281
  294. package/dist/tiers/certify.d.ts.map +1 -1
  295. package/dist/tiers/certify.js +46 -226
  296. package/dist/tiers/certify.js.map +1 -1
  297. package/dist/tiers/ladder.d.ts +7 -51
  298. package/dist/tiers/ladder.d.ts.map +1 -1
  299. package/dist/tiers/ladder.js +13 -89
  300. package/dist/tiers/ladder.js.map +1 -1
  301. package/dist/validation/attributes.d.ts +6 -55
  302. package/dist/validation/attributes.d.ts.map +1 -1
  303. package/dist/validation/attributes.js +6 -55
  304. package/dist/validation/attributes.js.map +1 -1
  305. package/dist/validation/config-graph.d.ts +7 -56
  306. package/dist/validation/config-graph.d.ts.map +1 -1
  307. package/dist/validation/config-graph.js +15 -61
  308. package/dist/validation/config-graph.js.map +1 -1
  309. package/dist/validation/env.d.ts +7 -1
  310. package/dist/validation/env.d.ts.map +1 -1
  311. package/dist/validation/env.js +3 -1
  312. package/dist/validation/env.js.map +1 -1
  313. package/dist/validation/join-substitution.d.ts +22 -120
  314. package/dist/validation/join-substitution.d.ts.map +1 -1
  315. package/dist/validation/join-substitution.js +13 -90
  316. package/dist/validation/join-substitution.js.map +1 -1
  317. package/dist/validation/migration-integrity.d.ts +11 -72
  318. package/dist/validation/migration-integrity.d.ts.map +1 -1
  319. package/dist/validation/migration-integrity.js +16 -79
  320. package/dist/validation/migration-integrity.js.map +1 -1
  321. package/dist/validation/migrations.d.ts +22 -101
  322. package/dist/validation/migrations.d.ts.map +1 -1
  323. package/dist/validation/migrations.js +19 -83
  324. package/dist/validation/migrations.js.map +1 -1
  325. package/dist/validation/nodes.d.ts +3 -1
  326. package/dist/validation/nodes.d.ts.map +1 -1
  327. package/dist/validation/nodes.js +3 -1
  328. package/dist/validation/nodes.js.map +1 -1
  329. package/dist/validation/rollback.d.ts +10 -73
  330. package/dist/validation/rollback.d.ts.map +1 -1
  331. package/dist/validation/rollback.js +15 -82
  332. package/dist/validation/rollback.js.map +1 -1
  333. package/dist/validation/route-drift.d.ts +9 -62
  334. package/dist/validation/route-drift.d.ts.map +1 -1
  335. package/dist/validation/route-drift.js +7 -52
  336. package/dist/validation/route-drift.js.map +1 -1
  337. package/dist/validation/sources.d.ts +16 -94
  338. package/dist/validation/sources.d.ts.map +1 -1
  339. package/dist/validation/sources.js +51 -147
  340. package/dist/validation/sources.js.map +1 -1
  341. package/dist/worker/pool.d.ts +6 -45
  342. package/dist/worker/pool.d.ts.map +1 -1
  343. package/dist/worker/pool.js +5 -42
  344. package/dist/worker/pool.js.map +1 -1
  345. package/dist/worker/protocol.d.ts +7 -20
  346. package/dist/worker/protocol.d.ts.map +1 -1
  347. package/dist/worker/protocol.js +3 -10
  348. package/dist/worker/protocol.js.map +1 -1
  349. package/dist/worker/traversal.worker.d.ts +2 -21
  350. package/dist/worker/traversal.worker.d.ts.map +1 -1
  351. package/dist/worker/traversal.worker.js +4 -23
  352. package/dist/worker/traversal.worker.js.map +1 -1
  353. package/package.json +11 -2
@@ -1,56 +1,6 @@
1
- /**
2
- * §15.3's rollback-readiness check — *"pattern-match migrations against a known
3
- * list of destructive operations"*.
4
- *
5
- * Class A at R0, and **deliberately the easy half of consumer impact**: a
6
- * destructive operation is a pattern in a migration, not an inference about who
7
- * reads the column. The scope fence that makes that classification safe is stated
8
- * in `migrations.ts` and every sentence below stays behind it.
9
- *
10
- * ## The trap, measured before this was written
11
- *
12
- * The env check's trap was a variable read and never declared. This one is
13
- * larger, and DEC-122 counted it:
14
- *
15
- * | repository | migrations | with a reverse section |
16
- * | --- | --- | --- |
17
- * | `outline` | 300 | **300** |
18
- * | `dispatch` | 162 | **162** |
19
- * | `directus` | 112 | 110 |
20
- *
21
- * **Effectively every migration in these projects declares a reverse, and a
22
- * destructive operation in the reverse is supposed to be there** — it undoes the
23
- * forward migration. A check that matched destructive operations without knowing
24
- * which half it was reading would report `outline`'s 202 destructive files, and
25
- * most of those matches are a drop that undoes a create three lines above.
26
- *
27
- * So `section` is to this check what `required` was to the env check: the field
28
- * without which the whole thing is wrong on nearly every file it sees. And
29
- * `unknown` is not a synonym for `forward`. Two of the reference repositories
30
- * declare no direction at all — they hand the framework a reversal callback — and
31
- * their operations are **counted and disclosed, never reported**. That refusal
32
- * alone withholds 192 files' worth of matches, and it is the honest treatment:
33
- * an operation whose half cannot be determined is not evidence of a forward
34
- * destructive change.
35
- *
36
- * ## Two further refusals, both from the only real DDL in the corpus
37
- *
38
- * - **`DROP … IF EXISTS` paired with a `CREATE` of the same object** is an
39
- * idempotent setup script, not a data-losing change. Both destructive lines in
40
- * the one genuine `.sql` file found across fifteen repositories are exactly
41
- * this shape.
42
- * - **Dropping an object created in the same migration** is not a finding. The
43
- * object did not exist before the file ran.
44
- *
45
- * ## Where the input comes from
46
- *
47
- * Two sources, and DEC-122 measured that the one the architecture implies is the
48
- * smaller: **0 `.sql` files inside a migration directory** across the reference
49
- * corpus, against **3,301** migrations written as program code. The format half
50
- * runs today and needs no adapter; the code half arrives as `attrs.migrationOps`
51
- * and is an adapter's to produce. When neither is present the check says so and
52
- * does not report a clean result.
53
- */
1
+ /** §15.3 rollback-readiness — Class A at R0, deliberately the easy half (fence in migrations.ts).
2
+ * `section` is load-bearing like `required` was for env: reverse-section drops are correct code
3
+ * (near-100% of migrations, DEC-122), and `unknown` section is withheld, never assumed forward. */
54
4
  import type { ResolutionLevel } from "@descryy/ir";
55
5
  import type { AdjacencyProvider, QueryResult } from "../query/provider.ts";
56
6
  import type { DestructiveKind, MigrationOp, MigrationScan } from "./migrations.ts";
@@ -60,12 +10,8 @@ export interface RollbackFinding {
60
10
  readonly target: string;
61
11
  readonly file: string;
62
12
  readonly line: number;
63
- /**
64
- * The sentence a developer reads.
65
- *
66
- * Stays behind the §15.3 fence: it states that the operation is present, never
67
- * that the migration is unsafe to roll back.
68
- */
13
+ /** The sentence a developer reads. Stays behind the §15.3 fence — states the operation is
14
+ * present, never that the migration is unsafe to roll back. */
69
15
  readonly detail: string;
70
16
  readonly resolution: ResolutionLevel;
71
17
  }
@@ -81,12 +27,8 @@ export interface RollbackReport {
81
27
  /** Destructive operations seen, before any refusal. */
82
28
  readonly operations: number;
83
29
  };
84
- /**
85
- * Every operation the check declined to report, by reason.
86
- *
87
- * The counts are the point: they are the size of what this check chose not to
88
- * say, and each has a different cause a reader can act on.
89
- */
30
+ /** Every operation declined, by reason. The counts are the point — the size of what this check
31
+ * chose not to say, each with a cause a reader can act on. */
90
32
  readonly withheld: {
91
33
  /** In a reverse section — undoing a forward migration. */
92
34
  readonly reverse: number;
@@ -108,14 +50,9 @@ export interface RollbackOptions {
108
50
  readonly files?: readonly string[];
109
51
  readonly limit?: number;
110
52
  }
111
- /**
112
- * Pull `attrs.migrationOps` off a file node, refusing anything malformed.
113
- *
114
- * A row with no `section`, or an unrecognised one, is **dropped rather than
115
- * treated as forward**. Defaulting it would manufacture exactly the claim the
116
- * reverse-section fence exists to withhold, on a corpus where the reverse
117
- * section is present in effectively every file.
118
- */
53
+ /** Pulls `attrs.migrationOps` off a file node, refusing anything malformed. A row with no
54
+ * `section` (or an unrecognised one) is dropped, never defaulted to forward — that would
55
+ * manufacture exactly the claim the reverse-section fence exists to withhold. */
119
56
  export declare function readMigrationOps(attrs: Readonly<Record<string, unknown>>): {
120
57
  readonly ops: readonly MigrationOp[];
121
58
  readonly malformed: number;
@@ -1 +1 @@
1
- {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/validation/rollback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAc,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGvF,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,aAAa,EAEd,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,uHAAuH;IACvH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE;QACjB,uDAAuD;QACvD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,6DAA6D;QAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,uDAAuD;QACvD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE;QACjB,0DAA0D;QAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,8DAA8D;QAC9D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,oEAAoE;QACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,oDAAoD;QACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,yDAAyD;IACzD,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAgBD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,WAAW,EAAE,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAsCtE;AASD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,eAAoB,GAC5B,WAAW,CAAC,cAAc,CAAC,CA4N7B"}
1
+ {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/validation/rollback.ts"],"names":[],"mappings":"AAAA;;oGAEoG;AAEpG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAc,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGvF,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,aAAa,EAEd,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;oEACgE;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,uHAAuH;IACvH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE;QACjB,uDAAuD;QACvD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,6DAA6D;QAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,uDAAuD;QACvD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF;mEAC+D;IAC/D,QAAQ,CAAC,QAAQ,EAAE;QACjB,0DAA0D;QAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,8DAA8D;QAC9D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,oEAAoE;QACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,oDAAoD;QACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,yDAAyD;IACzD,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAgBD;;kFAEkF;AAClF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC;IAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,WAAW,EAAE,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAsCtE;AASD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,eAAoB,GAC5B,WAAW,CAAC,cAAc,CAAC,CA6M7B"}
@@ -1,56 +1,6 @@
1
- /**
2
- * §15.3's rollback-readiness check — *"pattern-match migrations against a known
3
- * list of destructive operations"*.
4
- *
5
- * Class A at R0, and **deliberately the easy half of consumer impact**: a
6
- * destructive operation is a pattern in a migration, not an inference about who
7
- * reads the column. The scope fence that makes that classification safe is stated
8
- * in `migrations.ts` and every sentence below stays behind it.
9
- *
10
- * ## The trap, measured before this was written
11
- *
12
- * The env check's trap was a variable read and never declared. This one is
13
- * larger, and DEC-122 counted it:
14
- *
15
- * | repository | migrations | with a reverse section |
16
- * | --- | --- | --- |
17
- * | `outline` | 300 | **300** |
18
- * | `dispatch` | 162 | **162** |
19
- * | `directus` | 112 | 110 |
20
- *
21
- * **Effectively every migration in these projects declares a reverse, and a
22
- * destructive operation in the reverse is supposed to be there** — it undoes the
23
- * forward migration. A check that matched destructive operations without knowing
24
- * which half it was reading would report `outline`'s 202 destructive files, and
25
- * most of those matches are a drop that undoes a create three lines above.
26
- *
27
- * So `section` is to this check what `required` was to the env check: the field
28
- * without which the whole thing is wrong on nearly every file it sees. And
29
- * `unknown` is not a synonym for `forward`. Two of the reference repositories
30
- * declare no direction at all — they hand the framework a reversal callback — and
31
- * their operations are **counted and disclosed, never reported**. That refusal
32
- * alone withholds 192 files' worth of matches, and it is the honest treatment:
33
- * an operation whose half cannot be determined is not evidence of a forward
34
- * destructive change.
35
- *
36
- * ## Two further refusals, both from the only real DDL in the corpus
37
- *
38
- * - **`DROP … IF EXISTS` paired with a `CREATE` of the same object** is an
39
- * idempotent setup script, not a data-losing change. Both destructive lines in
40
- * the one genuine `.sql` file found across fifteen repositories are exactly
41
- * this shape.
42
- * - **Dropping an object created in the same migration** is not a finding. The
43
- * object did not exist before the file ran.
44
- *
45
- * ## Where the input comes from
46
- *
47
- * Two sources, and DEC-122 measured that the one the architecture implies is the
48
- * smaller: **0 `.sql` files inside a migration directory** across the reference
49
- * corpus, against **3,301** migrations written as program code. The format half
50
- * runs today and needs no adapter; the code half arrives as `attrs.migrationOps`
51
- * and is an adapter's to produce. When neither is present the check says so and
52
- * does not report a clean result.
53
- */
1
+ /** §15.3 rollback-readiness — Class A at R0, deliberately the easy half (fence in migrations.ts).
2
+ * `section` is load-bearing like `required` was for env: reverse-section drops are correct code
3
+ * (near-100% of migrations, DEC-122), and `unknown` section is withheld, never assumed forward. */
54
4
  import { fileScopedNodes } from "./nodes.js";
55
5
  import { readMigrationRevision } from "./migration-integrity.js";
56
6
  const DEFAULT_MAX_FINDINGS = 25;
@@ -64,14 +14,9 @@ const KINDS = new Set([
64
14
  "TRUNCATE",
65
15
  "RENAME",
66
16
  ]);
67
- /**
68
- * Pull `attrs.migrationOps` off a file node, refusing anything malformed.
69
- *
70
- * A row with no `section`, or an unrecognised one, is **dropped rather than
71
- * treated as forward**. Defaulting it would manufacture exactly the claim the
72
- * reverse-section fence exists to withhold, on a corpus where the reverse
73
- * section is present in effectively every file.
74
- */
17
+ /** Pulls `attrs.migrationOps` off a file node, refusing anything malformed. A row with no
18
+ * `section` (or an unrecognised one) is dropped, never defaulted to forward — that would
19
+ * manufacture exactly the claim the reverse-section fence exists to withhold. */
75
20
  export function readMigrationOps(attrs) {
76
21
  const raw = attrs["migrationOps"];
77
22
  if (!Array.isArray(raw))
@@ -112,7 +57,6 @@ export function checkRollbackReadiness(provider, scan, options = {}) {
112
57
  const scoped = options.files === undefined ? null : new Set(options.files);
113
58
  const notes = [];
114
59
  const candidates = [];
115
- // --- the format half: DDL read from the repository -----------------------
116
60
  let fromSource = 0;
117
61
  for (const migration of scan.files) {
118
62
  if (scoped !== null && !scoped.has(migration.file))
@@ -127,7 +71,6 @@ export function checkRollbackReadiness(provider, scan, options = {}) {
127
71
  });
128
72
  }
129
73
  }
130
- // --- the code half: whatever an adapter attached -------------------------
131
74
  const nodes = fileScopedNodes(provider, options.limit);
132
75
  let fromGraph = 0;
133
76
  let malformed = 0;
@@ -139,12 +82,9 @@ export function checkRollbackReadiness(provider, scan, options = {}) {
139
82
  continue;
140
83
  const extracted = readMigrationOps(node.attrs);
141
84
  malformed += extracted.malformed;
142
- // A migration revision with no destructive operation in it is still a
143
- // migration that was read — a module carrying only a CREATE TABLE, say,
144
- // must not make this check say "No migration was read" (§ the
145
- // migration-integrity check's own header). `readMigrationRevision` is
146
- // this check's own carrier, shared rather than duplicated so the two
147
- // checks cannot disagree about what counts as "a migration node".
85
+ // A migration with no destructive op is still a migration read — a CREATE-TABLE-only file
86
+ // must not trigger "No migration was read". `readMigrationRevision` is shared with
87
+ // migration-integrity.ts so the two checks can't disagree on what counts as a migration node.
148
88
  const hasRevision = readMigrationRevision(node.attrs, path, node.resolution) !== null;
149
89
  if (extracted.ops.length === 0 && !hasRevision)
150
90
  continue;
@@ -153,7 +93,6 @@ export function checkRollbackReadiness(provider, scan, options = {}) {
153
93
  candidates.push({ op, file: path, creates: [], resolution: node.resolution });
154
94
  }
155
95
  }
156
- // --- the refusals --------------------------------------------------------
157
96
  const findings = [];
158
97
  const withheld = { reverse: 0, undirected: 0, idempotent: 0, selfCreated: 0 };
159
98
  for (const candidate of candidates) {
@@ -166,10 +105,8 @@ export function checkRollbackReadiness(provider, scan, options = {}) {
166
105
  withheld.undirected += 1;
167
106
  continue;
168
107
  }
169
- // Order separates two different refusals. A create *before* the drop means a
170
- // temporary object that did not exist when the file started. A create
171
- // *after* a guarded drop is an idempotent setup script. Without the line
172
- // these collapse into one bucket and the disclosure names the wrong cause.
108
+ // Order separates two refusals: a create BEFORE the drop is a temporary object; a create
109
+ // AFTER a guarded drop is an idempotent setup script. Without the line these collapse wrongly.
173
110
  const object = op.target.split(".")[0] ?? op.target;
174
111
  const matches = candidate.creates.filter((c) => c.name === op.target || c.name === object);
175
112
  if (matches.some((c) => c.line < op.line)) {
@@ -195,7 +132,6 @@ export function checkRollbackReadiness(provider, scan, options = {}) {
195
132
  a.line - b.line ||
196
133
  a.target.localeCompare(b.target));
197
134
  const kept = findings.slice(0, maxFindings);
198
- // --- disclosures ---------------------------------------------------------
199
135
  const ran = fromSource > 0 || fromGraph > 0;
200
136
  const blockers = [];
201
137
  if (!ran) {
@@ -254,11 +190,9 @@ export function checkRollbackReadiness(provider, scan, options = {}) {
254
190
  notes.push("The migration scan hit its file budget before finishing, so some migrations were not read.");
255
191
  }
256
192
  if (ran && scoped === null && findings.length > 0) {
257
- // §15.1 runs this against the *scoped subgraph*. Unscoped, it reads every
258
- // migration the project has ever written, so a long list here is the history
259
- // of the repository rather than a property of a change. Measured: 33 and 67
260
- // forward operations on two repositories, all correct and almost all years
261
- // old.
193
+ // §15.1 runs this against the scoped subgraph. Unscoped, it reads every migration the
194
+ // project has ever written — history, not a property of a change (measured: 33 and 67
195
+ // forward ops on two repos, all correct and almost all years old).
262
196
  notes.push(`${findings.length} operation(s) were found across the whole repository, which is every ` +
263
197
  "migration the project has ever written rather than anything about a particular change. " +
264
198
  'This check is meant to run against a scoped change — pass "files" — where a handful of ' +
@@ -302,8 +236,7 @@ function describe(op, file) {
302
236
  case "TRUNCATE":
303
237
  return `${where} truncates ${op.target} in the forward migration.`;
304
238
  default:
305
- // A rename is a different claim from a drop and is worded as one: the rows
306
- // survive, and what breaks is every reader of the old name.
239
+ // A rename is a different claim from a drop — the rows survive; what breaks is every reader of the old name.
307
240
  return (`${where} renames ${op.target} in the forward migration. The data is not destroyed; ` +
308
241
  "anything still reading the old name stops finding it.");
309
242
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/validation/rollback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/validation/rollback.ts"],"names":[],"mappings":"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"}
@@ -1,43 +1,6 @@
1
1
  /**
2
- * Route drift — static extraction against framework introspection (DEC-115).
3
- *
4
- * The comparison logic only; identity from `@descryy/ir`, never re-implemented
5
- * here. The `bench/route-drift.mjs` instrument does the harder half of this
6
- * row — reading `php artisan route:list`, the `--introspection` file
7
- * fallback, and the refusal to run an installer on a cloned repository (§5
8
- * rule 10, DEC-115 clause 3). This module is the query it calls: given two
9
- * already-extracted route lists, decide what they say about each other.
10
- *
11
- * ## The rule this file is built around, before anything else
12
- *
13
- * **A diff is the one measurement where an empty input produces the most
14
- * reassuring possible output.** If introspection returns nothing —
15
- * `artisan` not runnable, the application not bootable, the command failing
16
- * quietly — the drift is zero, and zero drift is exactly what a healthy
17
- * repository looks like. So both population *sizes* are part of the result,
18
- * not scaffolding, and this module cannot report agreement it was not
19
- * actually given. An empty or implausible side is a **refusal** to report
20
- * drift, never a clean bill — the same shape this lane measured directly on
21
- * `env-precision-adapter.mjs`: two runs both printed `decision accuracy
22
- * 100.0%`, one on 5 decisions and one on 51, indistinguishable except for the
23
- * confidence interval underneath. A diff has no interval to fall back on, so
24
- * the refusal has to be explicit.
25
- *
26
- * ## The polarity is DEC-115's and is not re-opened here
27
- *
28
- * Static extraction is the **floor**; introspection is a **promotion** over
29
- * the same node ids. The two disagreement directions are two findings with
30
- * different audiences and different truth conditions, and collapsing them is
31
- * the error:
32
- *
33
- * | direction | what it is | what it is NOT |
34
- * | --- | --- | --- |
35
- * | static says yes, listing says no | "these two sources disagree" | **never** "dead route" — ambiguous between the customer's app and our own false positive, and nothing here separates them |
36
- * | listing says yes, static says no | a statement about **us**: the extractor missed one | not a finding about the customer at all |
37
- *
38
- * The second row is the more valuable one. Where a listing exists it is
39
- * **ground truth for recall** — a complete denominator this project has
40
- * never had without hand-building it.
2
+ * Route drift (DEC-115): compares two already-extracted route lists; identity via `@descryy/ir`, never re-implemented. An empty/implausible introspection side must be a *refusal*, never reported as zero drift — the emptiest input would otherwise be the most falsely reassuring output.
3
+ * Static extraction is the floor, introspection a promotion (DEC-115 polarity): static-yes/listing-no is an ambiguous disagreement, never "dead route"; listing-yes/static-no is a statement about our own extractor missing a route, and listing is ground truth for recall.
41
4
  */
42
5
  /** One route, from either side, before identity is applied. */
43
6
  export interface DriftRoute {
@@ -46,13 +9,8 @@ export interface DriftRoute {
46
9
  /** Repo-relative, when the side has one (the static extractor always does). */
47
10
  readonly file?: string;
48
11
  }
49
- /**
50
- * What the introspected side actually returned.
51
- *
52
- * Three refusal states plus `read`, mirroring `RollbackReport.ran` /
53
- * `blockers` one level down: a caller needs to know *why* nothing was
54
- * compared, not just that nothing was.
55
- */
12
+ /** What the introspected side returned. Three refusal states plus `read` — a
13
+ * caller needs to know *why* nothing was compared, not just that it wasn't. */
56
14
  export type Introspection = {
57
15
  readonly state: "read";
58
16
  readonly source: string;
@@ -86,23 +44,12 @@ export interface DriftReport {
86
44
  readonly recallAgainstListing?: number;
87
45
  }
88
46
  export interface DriftOptions {
89
- /**
90
- * Below this, a listing is not believed.
91
- *
92
- * A Laravel application with `artisan` and one route is far more likely to
93
- * be a listing that failed than an application with one route. Crude on
94
- * purpose — it exists to catch "the command produced almost nothing," not
95
- * to model route counts.
96
- */
47
+ /** Below this, a listing isn't believed — crude on purpose, catches "the
48
+ * command produced almost nothing," not a route-count model. */
97
49
  readonly implausibleBelow?: number;
98
50
  }
99
- /**
100
- * The comparison, and the refusal that guards it.
101
- *
102
- * `staticOnly`/`listedOnly`/`agreed` are only ever populated when both sides
103
- * were actually read and the introspected side is not implausibly small.
104
- * Every other path returns `reported: false` carrying both counts, because
105
- * the counts are the evidence the refusal was necessary.
106
- */
51
+ /** The comparison, and the refusal that guards it. `staticOnly`/`listedOnly`/
52
+ * `agreed` populate only when both sides read and neither is implausibly
53
+ * small; otherwise `reported: false` carries both counts as evidence. */
107
54
  export declare function checkRouteDrift(staticSide: readonly DriftRoute[], introspected: Introspection, options?: DriftOptions): DriftReport;
108
55
  //# sourceMappingURL=route-drift.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-drift.d.ts","sourceRoot":"","sources":["../../src/validation/route-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAIH,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GAC3F;IAAE,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,2FAA2F;IAC3F,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;IACtF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B;;;;;;;OAOG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AASD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,SAAS,UAAU,EAAE,EACjC,YAAY,EAAE,aAAa,EAC3B,OAAO,GAAE,YAAiB,GACzB,WAAW,CAkDb"}
1
+ {"version":3,"file":"route-drift.d.ts","sourceRoot":"","sources":["../../src/validation/route-drift.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;gFACgF;AAChF,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GAC3F;IAAE,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,2FAA2F;IAC3F,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;IACtF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B;qEACiE;IACjE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AASD;;0EAE0E;AAC1E,wBAAgB,eAAe,CAC7B,UAAU,EAAE,SAAS,UAAU,EAAE,EACjC,YAAY,EAAE,aAAa,EAC3B,OAAO,GAAE,YAAiB,GACzB,WAAW,CA+Cb"}
@@ -1,43 +1,6 @@
1
1
  /**
2
- * Route drift — static extraction against framework introspection (DEC-115).
3
- *
4
- * The comparison logic only; identity from `@descryy/ir`, never re-implemented
5
- * here. The `bench/route-drift.mjs` instrument does the harder half of this
6
- * row — reading `php artisan route:list`, the `--introspection` file
7
- * fallback, and the refusal to run an installer on a cloned repository (§5
8
- * rule 10, DEC-115 clause 3). This module is the query it calls: given two
9
- * already-extracted route lists, decide what they say about each other.
10
- *
11
- * ## The rule this file is built around, before anything else
12
- *
13
- * **A diff is the one measurement where an empty input produces the most
14
- * reassuring possible output.** If introspection returns nothing —
15
- * `artisan` not runnable, the application not bootable, the command failing
16
- * quietly — the drift is zero, and zero drift is exactly what a healthy
17
- * repository looks like. So both population *sizes* are part of the result,
18
- * not scaffolding, and this module cannot report agreement it was not
19
- * actually given. An empty or implausible side is a **refusal** to report
20
- * drift, never a clean bill — the same shape this lane measured directly on
21
- * `env-precision-adapter.mjs`: two runs both printed `decision accuracy
22
- * 100.0%`, one on 5 decisions and one on 51, indistinguishable except for the
23
- * confidence interval underneath. A diff has no interval to fall back on, so
24
- * the refusal has to be explicit.
25
- *
26
- * ## The polarity is DEC-115's and is not re-opened here
27
- *
28
- * Static extraction is the **floor**; introspection is a **promotion** over
29
- * the same node ids. The two disagreement directions are two findings with
30
- * different audiences and different truth conditions, and collapsing them is
31
- * the error:
32
- *
33
- * | direction | what it is | what it is NOT |
34
- * | --- | --- | --- |
35
- * | static says yes, listing says no | "these two sources disagree" | **never** "dead route" — ambiguous between the customer's app and our own false positive, and nothing here separates them |
36
- * | listing says yes, static says no | a statement about **us**: the extractor missed one | not a finding about the customer at all |
37
- *
38
- * The second row is the more valuable one. Where a listing exists it is
39
- * **ground truth for recall** — a complete denominator this project has
40
- * never had without hand-building it.
2
+ * Route drift (DEC-115): compares two already-extracted route lists; identity via `@descryy/ir`, never re-implemented. An empty/implausible introspection side must be a *refusal*, never reported as zero drift — the emptiest input would otherwise be the most falsely reassuring output.
3
+ * Static extraction is the floor, introspection a promotion (DEC-115 polarity): static-yes/listing-no is an ambiguous disagreement, never "dead route"; listing-yes/static-no is a statement about our own extractor missing a route, and listing is ground truth for recall.
41
4
  */
42
5
  import { endpointQsp, normaliseEndpointPath } from "@descryy/ir";
43
6
  const DEFAULT_IMPLAUSIBLE_BELOW = 3;
@@ -45,14 +8,9 @@ const DEFAULT_IMPLAUSIBLE_BELOW = 3;
45
8
  function key(method, path) {
46
9
  return endpointQsp(String(method || "").toUpperCase(), normaliseEndpointPath(String(path || "")));
47
10
  }
48
- /**
49
- * The comparison, and the refusal that guards it.
50
- *
51
- * `staticOnly`/`listedOnly`/`agreed` are only ever populated when both sides
52
- * were actually read and the introspected side is not implausibly small.
53
- * Every other path returns `reported: false` carrying both counts, because
54
- * the counts are the evidence the refusal was necessary.
55
- */
11
+ /** The comparison, and the refusal that guards it. `staticOnly`/`listedOnly`/
12
+ * `agreed` populate only when both sides read and neither is implausibly
13
+ * small; otherwise `reported: false` carries both counts as evidence. */
56
14
  export function checkRouteDrift(staticSide, introspected, options = {}) {
57
15
  const implausibleBelow = options.implausibleBelow ?? DEFAULT_IMPLAUSIBLE_BELOW;
58
16
  if (introspected.state !== "read") {
@@ -92,11 +50,8 @@ export function checkRouteDrift(staticSide, introspected, options = {}) {
92
50
  staticOnly,
93
51
  listedOnly,
94
52
  agreed,
95
- // `exactOptionalPropertyTypes` distinguishes an absent property from one
96
- // present-and-undefined, so the spread includes the key only when there
97
- // is a real ratio — `listedKeys.size` is never 0 on this path, since
98
- // `implausibleBelow` already refused anything under it, but the type
99
- // stays honest about the precondition rather than asserting past it.
53
+ // listedKeys.size is never 0 here (implausibleBelow refused that), but the
54
+ // type stays honest about the precondition rather than asserting past it.
100
55
  ...(listedKeys.size === 0 ? {} : { recallAgainstListing: agreed / listedKeys.size }),
101
56
  };
102
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"route-drift.js","sourceRoot":"","sources":["../../src/validation/route-drift.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-drift.js","sourceRoot":"","sources":["../../src/validation/route-drift.ts"],"names":[],"mappings":"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"}