@descryy/core 0.3.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 (362) 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 +26 -12
  14. package/dist/contracts/engine.d.ts.map +1 -1
  15. package/dist/contracts/engine.js +28 -11
  16. package/dist/contracts/engine.js.map +1 -1
  17. package/dist/contracts/index.d.ts +1 -1
  18. package/dist/contracts/index.d.ts.map +1 -1
  19. package/dist/contracts/index.js.map +1 -1
  20. package/dist/contracts/orphans.d.ts +28 -77
  21. package/dist/contracts/orphans.d.ts.map +1 -1
  22. package/dist/contracts/orphans.js +124 -94
  23. package/dist/contracts/orphans.js.map +1 -1
  24. package/dist/contracts/paths.d.ts +4 -114
  25. package/dist/contracts/paths.d.ts.map +1 -1
  26. package/dist/contracts/paths.js +7 -140
  27. package/dist/contracts/paths.js.map +1 -1
  28. package/dist/contracts/shapes.d.ts +13 -66
  29. package/dist/contracts/shapes.d.ts.map +1 -1
  30. package/dist/contracts/shapes.js +20 -91
  31. package/dist/contracts/shapes.js.map +1 -1
  32. package/dist/governance/budget.d.ts +12 -48
  33. package/dist/governance/budget.d.ts.map +1 -1
  34. package/dist/governance/budget.js +12 -48
  35. package/dist/governance/budget.js.map +1 -1
  36. package/dist/governance/candidate-boundary.d.ts +4 -32
  37. package/dist/governance/candidate-boundary.d.ts.map +1 -1
  38. package/dist/governance/candidate-boundary.js +4 -32
  39. package/dist/governance/candidate-boundary.js.map +1 -1
  40. package/dist/governance/escalation.d.ts +7 -45
  41. package/dist/governance/escalation.d.ts.map +1 -1
  42. package/dist/governance/escalation.js +7 -45
  43. package/dist/governance/escalation.js.map +1 -1
  44. package/dist/governance/fact-boundary.d.ts +7 -49
  45. package/dist/governance/fact-boundary.d.ts.map +1 -1
  46. package/dist/governance/fact-boundary.js +5 -43
  47. package/dist/governance/fact-boundary.js.map +1 -1
  48. package/dist/governance/finding-funnel.d.ts +11 -72
  49. package/dist/governance/finding-funnel.d.ts.map +1 -1
  50. package/dist/governance/finding-funnel.js +9 -68
  51. package/dist/governance/finding-funnel.js.map +1 -1
  52. package/dist/graph/build.d.ts +13 -75
  53. package/dist/graph/build.d.ts.map +1 -1
  54. package/dist/graph/build.js +0 -0
  55. package/dist/graph/build.js.map +1 -1
  56. package/dist/graph/cross-language.d.ts +4 -43
  57. package/dist/graph/cross-language.d.ts.map +1 -1
  58. package/dist/graph/cross-language.js +9 -77
  59. package/dist/graph/cross-language.js.map +1 -1
  60. package/dist/graph/index.d.ts +1 -1
  61. package/dist/graph/index.d.ts.map +1 -1
  62. package/dist/graph/merge.d.ts +8 -76
  63. package/dist/graph/merge.d.ts.map +1 -1
  64. package/dist/graph/merge.js +27 -77
  65. package/dist/graph/merge.js.map +1 -1
  66. package/dist/graph/observed-tests.d.ts +7 -68
  67. package/dist/graph/observed-tests.d.ts.map +1 -1
  68. package/dist/graph/observed-tests.js +5 -60
  69. package/dist/graph/observed-tests.js.map +1 -1
  70. package/dist/graph/persist.d.ts +2 -25
  71. package/dist/graph/persist.d.ts.map +1 -1
  72. package/dist/graph/persist.js +2 -25
  73. package/dist/graph/persist.js.map +1 -1
  74. package/dist/graph/runtime-confirmation.d.ts +14 -91
  75. package/dist/graph/runtime-confirmation.d.ts.map +1 -1
  76. package/dist/graph/runtime-confirmation.js +19 -103
  77. package/dist/graph/runtime-confirmation.js.map +1 -1
  78. package/dist/ledger/mint.d.ts +9 -43
  79. package/dist/ledger/mint.d.ts.map +1 -1
  80. package/dist/ledger/mint.js +15 -65
  81. package/dist/ledger/mint.js.map +1 -1
  82. package/dist/ledger/resolve.d.ts +13 -81
  83. package/dist/ledger/resolve.d.ts.map +1 -1
  84. package/dist/ledger/resolve.js +13 -76
  85. package/dist/ledger/resolve.js.map +1 -1
  86. package/dist/multipr/fingerprint.d.ts +5 -46
  87. package/dist/multipr/fingerprint.d.ts.map +1 -1
  88. package/dist/multipr/fingerprint.js +22 -74
  89. package/dist/multipr/fingerprint.js.map +1 -1
  90. package/dist/multipr/hidden-dependency.d.ts +13 -73
  91. package/dist/multipr/hidden-dependency.d.ts.map +1 -1
  92. package/dist/multipr/hidden-dependency.js +12 -63
  93. package/dist/multipr/hidden-dependency.js.map +1 -1
  94. package/dist/multipr/mechanical.d.ts +25 -160
  95. package/dist/multipr/mechanical.d.ts.map +1 -1
  96. package/dist/multipr/mechanical.js +21 -137
  97. package/dist/multipr/mechanical.js.map +1 -1
  98. package/dist/multipr/migration-heads.d.ts +18 -105
  99. package/dist/multipr/migration-heads.d.ts.map +1 -1
  100. package/dist/multipr/migration-heads.js +15 -84
  101. package/dist/multipr/migration-heads.js.map +1 -1
  102. package/dist/multipr/overlap.d.ts +16 -94
  103. package/dist/multipr/overlap.d.ts.map +1 -1
  104. package/dist/multipr/overlap.js +25 -105
  105. package/dist/multipr/overlap.js.map +1 -1
  106. package/dist/multipr/scope-store.d.ts +15 -80
  107. package/dist/multipr/scope-store.d.ts.map +1 -1
  108. package/dist/multipr/scope-store.js +17 -87
  109. package/dist/multipr/scope-store.js.map +1 -1
  110. package/dist/multipr/superseded.d.ts +10 -95
  111. package/dist/multipr/superseded.d.ts.map +1 -1
  112. package/dist/multipr/superseded.js +7 -60
  113. package/dist/multipr/superseded.js.map +1 -1
  114. package/dist/query/confirmed-facts.d.ts +12 -58
  115. package/dist/query/confirmed-facts.d.ts.map +1 -1
  116. package/dist/query/confirmed-facts.js +8 -47
  117. package/dist/query/confirmed-facts.js.map +1 -1
  118. package/dist/query/declared-value-closure.d.ts +13 -104
  119. package/dist/query/declared-value-closure.d.ts.map +1 -1
  120. package/dist/query/declared-value-closure.js +15 -104
  121. package/dist/query/declared-value-closure.js.map +1 -1
  122. package/dist/query/memory.d.ts +5 -9
  123. package/dist/query/memory.d.ts.map +1 -1
  124. package/dist/query/memory.js +31 -15
  125. package/dist/query/memory.js.map +1 -1
  126. package/dist/query/prominence.d.ts +6 -55
  127. package/dist/query/prominence.d.ts.map +1 -1
  128. package/dist/query/prominence.js +6 -55
  129. package/dist/query/prominence.js.map +1 -1
  130. package/dist/query/provider.d.ts +28 -81
  131. package/dist/query/provider.d.ts.map +1 -1
  132. package/dist/query/provider.js +8 -29
  133. package/dist/query/provider.js.map +1 -1
  134. package/dist/query/queries.d.ts +15 -65
  135. package/dist/query/queries.d.ts.map +1 -1
  136. package/dist/query/queries.js +43 -100
  137. package/dist/query/queries.js.map +1 -1
  138. package/dist/query/refusal-fetch.d.ts +8 -85
  139. package/dist/query/refusal-fetch.d.ts.map +1 -1
  140. package/dist/query/refusal-fetch.js +11 -93
  141. package/dist/query/refusal-fetch.js.map +1 -1
  142. package/dist/query/refusal-questions.d.ts +17 -92
  143. package/dist/query/refusal-questions.d.ts.map +1 -1
  144. package/dist/query/refusal-questions.js +14 -78
  145. package/dist/query/refusal-questions.js.map +1 -1
  146. package/dist/query/resolution-floor.d.ts +3 -23
  147. package/dist/query/resolution-floor.d.ts.map +1 -1
  148. package/dist/query/resolution-floor.js +3 -23
  149. package/dist/query/resolution-floor.js.map +1 -1
  150. package/dist/query/root-cause-score.d.ts +11 -161
  151. package/dist/query/root-cause-score.d.ts.map +1 -1
  152. package/dist/query/root-cause-score.js +6 -137
  153. package/dist/query/root-cause-score.js.map +1 -1
  154. package/dist/query/row-closure-picture.d.ts +5 -67
  155. package/dist/query/row-closure-picture.d.ts.map +1 -1
  156. package/dist/query/row-closure-picture.js +6 -67
  157. package/dist/query/row-closure-picture.js.map +1 -1
  158. package/dist/query/similar-incidents.d.ts +6 -41
  159. package/dist/query/similar-incidents.d.ts.map +1 -1
  160. package/dist/query/similar-incidents.js +15 -69
  161. package/dist/query/similar-incidents.js.map +1 -1
  162. package/dist/query/sqlite.d.ts +3 -7
  163. package/dist/query/sqlite.d.ts.map +1 -1
  164. package/dist/query/sqlite.js +13 -16
  165. package/dist/query/sqlite.js.map +1 -1
  166. package/dist/query/test-coverage.d.ts +5 -45
  167. package/dist/query/test-coverage.d.ts.map +1 -1
  168. package/dist/query/test-coverage.js +10 -53
  169. package/dist/query/test-coverage.js.map +1 -1
  170. package/dist/query/traverse.d.ts +22 -126
  171. package/dist/query/traverse.d.ts.map +1 -1
  172. package/dist/query/traverse.js +0 -0
  173. package/dist/query/traverse.js.map +1 -1
  174. package/dist/query/unresolved.d.ts +19 -164
  175. package/dist/query/unresolved.d.ts.map +1 -1
  176. package/dist/query/unresolved.js +11 -138
  177. package/dist/query/unresolved.js.map +1 -1
  178. package/dist/query/verification-status.d.ts +12 -109
  179. package/dist/query/verification-status.d.ts.map +1 -1
  180. package/dist/query/verification-status.js +9 -99
  181. package/dist/query/verification-status.js.map +1 -1
  182. package/dist/recording/migrate.d.ts +4 -10
  183. package/dist/recording/migrate.d.ts.map +1 -1
  184. package/dist/recording/migrate.js +4 -10
  185. package/dist/recording/migrate.js.map +1 -1
  186. package/dist/recording/reader.d.ts +2 -7
  187. package/dist/recording/reader.d.ts.map +1 -1
  188. package/dist/recording/reader.js +2 -7
  189. package/dist/recording/reader.js.map +1 -1
  190. package/dist/recording/redact.d.ts +6 -57
  191. package/dist/recording/redact.d.ts.map +1 -1
  192. package/dist/recording/redact.js +8 -64
  193. package/dist/recording/redact.js.map +1 -1
  194. package/dist/recording/schema.d.ts +3 -38
  195. package/dist/recording/schema.d.ts.map +1 -1
  196. package/dist/recording/schema.js +3 -38
  197. package/dist/recording/schema.js.map +1 -1
  198. package/dist/recording/writer.d.ts +11 -74
  199. package/dist/recording/writer.d.ts.map +1 -1
  200. package/dist/recording/writer.js +3 -43
  201. package/dist/recording/writer.js.map +1 -1
  202. package/dist/scoping/fanout.d.ts +6 -68
  203. package/dist/scoping/fanout.d.ts.map +1 -1
  204. package/dist/scoping/fanout.js +6 -68
  205. package/dist/scoping/fanout.js.map +1 -1
  206. package/dist/scoping/score.d.ts +20 -70
  207. package/dist/scoping/score.d.ts.map +1 -1
  208. package/dist/scoping/score.js +20 -70
  209. package/dist/scoping/score.js.map +1 -1
  210. package/dist/scoping/tiers.d.ts +4 -16
  211. package/dist/scoping/tiers.d.ts.map +1 -1
  212. package/dist/scoping/tiers.js +4 -16
  213. package/dist/scoping/tiers.js.map +1 -1
  214. package/dist/scoping/traverse.d.ts +3 -25
  215. package/dist/scoping/traverse.d.ts.map +1 -1
  216. package/dist/scoping/traverse.js +14 -49
  217. package/dist/scoping/traverse.js.map +1 -1
  218. package/dist/scoping/weights.d.ts +10 -74
  219. package/dist/scoping/weights.d.ts.map +1 -1
  220. package/dist/scoping/weights.js +14 -86
  221. package/dist/scoping/weights.js.map +1 -1
  222. package/dist/sources/confirmed/incidents.d.ts +5 -35
  223. package/dist/sources/confirmed/incidents.d.ts.map +1 -1
  224. package/dist/sources/confirmed/incidents.js +14 -48
  225. package/dist/sources/confirmed/incidents.js.map +1 -1
  226. package/dist/sources/git/diff.d.ts +71 -65
  227. package/dist/sources/git/diff.d.ts.map +1 -1
  228. package/dist/sources/git/diff.js +136 -83
  229. package/dist/sources/git/diff.js.map +1 -1
  230. package/dist/sources/git/env.d.ts +7 -0
  231. package/dist/sources/git/env.d.ts.map +1 -1
  232. package/dist/sources/git/env.js +10 -11
  233. package/dist/sources/git/env.js.map +1 -1
  234. package/dist/sources/git/history.d.ts +64 -84
  235. package/dist/sources/git/history.d.ts.map +1 -1
  236. package/dist/sources/git/history.js +141 -112
  237. package/dist/sources/git/history.js.map +1 -1
  238. package/dist/sources/git/incidents.d.ts +13 -75
  239. package/dist/sources/git/incidents.d.ts.map +1 -1
  240. package/dist/sources/git/incidents.js +21 -91
  241. package/dist/sources/git/incidents.js.map +1 -1
  242. package/dist/sources/git/index.d.ts +5 -3
  243. package/dist/sources/git/index.d.ts.map +1 -1
  244. package/dist/sources/git/index.js +3 -2
  245. package/dist/sources/git/index.js.map +1 -1
  246. package/dist/sources/git/source.d.ts +9 -79
  247. package/dist/sources/git/source.d.ts.map +1 -1
  248. package/dist/sources/git/source.js +0 -0
  249. package/dist/sources/git/source.js.map +1 -1
  250. package/dist/sources/migrations/across-change.d.ts +94 -0
  251. package/dist/sources/migrations/across-change.d.ts.map +1 -0
  252. package/dist/sources/migrations/across-change.js +278 -0
  253. package/dist/sources/migrations/across-change.js.map +1 -0
  254. package/dist/sources/migrations/dialects.d.ts +20 -36
  255. package/dist/sources/migrations/dialects.d.ts.map +1 -1
  256. package/dist/sources/migrations/dialects.js +11 -36
  257. package/dist/sources/migrations/dialects.js.map +1 -1
  258. package/dist/sources/migrations/index.d.ts +3 -1
  259. package/dist/sources/migrations/index.d.ts.map +1 -1
  260. package/dist/sources/migrations/index.js +2 -1
  261. package/dist/sources/migrations/index.js.map +1 -1
  262. package/dist/sources/migrations/read.d.ts +14 -79
  263. package/dist/sources/migrations/read.d.ts.map +1 -1
  264. package/dist/sources/migrations/read.js +14 -89
  265. package/dist/sources/migrations/read.js.map +1 -1
  266. package/dist/sources/workspace/workspace.d.ts +6 -42
  267. package/dist/sources/workspace/workspace.d.ts.map +1 -1
  268. package/dist/sources/workspace/workspace.js +10 -53
  269. package/dist/sources/workspace/workspace.js.map +1 -1
  270. package/dist/store/driver/driver.d.ts +9 -38
  271. package/dist/store/driver/driver.d.ts.map +1 -1
  272. package/dist/store/driver/driver.js +4 -22
  273. package/dist/store/driver/driver.js.map +1 -1
  274. package/dist/store/driver/node-sqlite.d.ts +3 -12
  275. package/dist/store/driver/node-sqlite.d.ts.map +1 -1
  276. package/dist/store/driver/node-sqlite.js +4 -18
  277. package/dist/store/driver/node-sqlite.js.map +1 -1
  278. package/dist/store/index.d.ts +2 -7
  279. package/dist/store/index.d.ts.map +1 -1
  280. package/dist/store/index.js +4 -10
  281. package/dist/store/index.js.map +1 -1
  282. package/dist/store/migrate.d.ts +14 -50
  283. package/dist/store/migrate.d.ts.map +1 -1
  284. package/dist/store/migrate.js +15 -52
  285. package/dist/store/migrate.js.map +1 -1
  286. package/dist/store/reader.d.ts +19 -84
  287. package/dist/store/reader.d.ts.map +1 -1
  288. package/dist/store/reader.js +25 -92
  289. package/dist/store/reader.js.map +1 -1
  290. package/dist/store/schema.d.ts +14 -76
  291. package/dist/store/schema.d.ts.map +1 -1
  292. package/dist/store/schema.js +14 -76
  293. package/dist/store/schema.js.map +1 -1
  294. package/dist/store/writer.d.ts +14 -88
  295. package/dist/store/writer.d.ts.map +1 -1
  296. package/dist/store/writer.js +29 -123
  297. package/dist/store/writer.js.map +1 -1
  298. package/dist/tiers/certify.d.ts +46 -281
  299. package/dist/tiers/certify.d.ts.map +1 -1
  300. package/dist/tiers/certify.js +46 -226
  301. package/dist/tiers/certify.js.map +1 -1
  302. package/dist/tiers/ladder.d.ts +7 -51
  303. package/dist/tiers/ladder.d.ts.map +1 -1
  304. package/dist/tiers/ladder.js +13 -89
  305. package/dist/tiers/ladder.js.map +1 -1
  306. package/dist/validation/attributes.d.ts +47 -0
  307. package/dist/validation/attributes.d.ts.map +1 -0
  308. package/dist/validation/attributes.js +130 -0
  309. package/dist/validation/attributes.js.map +1 -0
  310. package/dist/validation/config-graph.d.ts +7 -56
  311. package/dist/validation/config-graph.d.ts.map +1 -1
  312. package/dist/validation/config-graph.js +15 -61
  313. package/dist/validation/config-graph.js.map +1 -1
  314. package/dist/validation/env.d.ts +53 -2
  315. package/dist/validation/env.d.ts.map +1 -1
  316. package/dist/validation/env.js +99 -4
  317. package/dist/validation/env.js.map +1 -1
  318. package/dist/validation/index.d.ts +5 -1
  319. package/dist/validation/index.d.ts.map +1 -1
  320. package/dist/validation/index.js +3 -1
  321. package/dist/validation/index.js.map +1 -1
  322. package/dist/validation/join-substitution.d.ts +22 -120
  323. package/dist/validation/join-substitution.d.ts.map +1 -1
  324. package/dist/validation/join-substitution.js +13 -90
  325. package/dist/validation/join-substitution.js.map +1 -1
  326. package/dist/validation/migration-integrity.d.ts +72 -0
  327. package/dist/validation/migration-integrity.d.ts.map +1 -0
  328. package/dist/validation/migration-integrity.js +238 -0
  329. package/dist/validation/migration-integrity.js.map +1 -0
  330. package/dist/validation/migrations.d.ts +23 -88
  331. package/dist/validation/migrations.d.ts.map +1 -1
  332. package/dist/validation/migrations.js +20 -79
  333. package/dist/validation/migrations.js.map +1 -1
  334. package/dist/validation/nodes.d.ts +3 -1
  335. package/dist/validation/nodes.d.ts.map +1 -1
  336. package/dist/validation/nodes.js +3 -1
  337. package/dist/validation/nodes.js.map +1 -1
  338. package/dist/validation/rollback.d.ts +10 -73
  339. package/dist/validation/rollback.d.ts.map +1 -1
  340. package/dist/validation/rollback.js +23 -81
  341. package/dist/validation/rollback.js.map +1 -1
  342. package/dist/validation/route-drift.d.ts +9 -62
  343. package/dist/validation/route-drift.d.ts.map +1 -1
  344. package/dist/validation/route-drift.js +7 -52
  345. package/dist/validation/route-drift.js.map +1 -1
  346. package/dist/validation/sources.d.ts +16 -94
  347. package/dist/validation/sources.d.ts.map +1 -1
  348. package/dist/validation/sources.js +51 -147
  349. package/dist/validation/sources.js.map +1 -1
  350. package/dist/worker/pool.d.ts +6 -45
  351. package/dist/worker/pool.d.ts.map +1 -1
  352. package/dist/worker/pool.js +5 -42
  353. package/dist/worker/pool.js.map +1 -1
  354. package/dist/worker/protocol.d.ts +7 -20
  355. package/dist/worker/protocol.d.ts.map +1 -1
  356. package/dist/worker/protocol.js +3 -10
  357. package/dist/worker/protocol.js.map +1 -1
  358. package/dist/worker/traversal.worker.d.ts +2 -21
  359. package/dist/worker/traversal.worker.d.ts.map +1 -1
  360. package/dist/worker/traversal.worker.js +4 -23
  361. package/dist/worker/traversal.worker.js.map +1 -1
  362. package/package.json +11 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EACV,KAAK,EACL,UAAU,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EACV,aAAa,EACb,eAAe,EACf,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EACV,KAAK,EACL,UAAU,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EACV,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EACV,aAAa,EACb,eAAe,EACf,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAQnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AASnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -1,64 +1,27 @@
1
- /**
2
- * The contract engine's R2 half: who calls what, and who serves it.
3
- *
4
- * §13's mechanism is shape comparison at R3. This is the part that works
5
- * **below** it, and the architecture is explicit that it should exist: at R2,
6
- * report path-level orphans only, and say so. Splitting the engine this way
7
- * means half the value lands on graphs no type checker has touched, and the R3
8
- * half does not hold it hostage.
9
- *
10
- * ## Three findings, and the reason there are only three
11
- *
12
- * ```
13
- * API_ROUTE ──SERVES_API──▶ API_ENDPOINT ◀──USES_API── caller
14
- * ```
15
- *
16
- * An `API_ENDPOINT` is the join. Every question here is about which of its two
17
- * sides is present:
18
- *
19
- * | both sides | one side | finding |
20
- * | --- | --- | --- |
21
- * | caller + route | — | the contract holds at path level |
22
- * | — | caller only | **the call reaches nothing that is served** |
23
- * | — | route only | **nothing in this graph calls the route** |
24
- *
25
- * ## The trap, and it is the whole design
26
- *
27
- * On two real repositories: **117 callers, 24 routes, 16 joined.** The other 101
28
- * callers are, overwhelmingly, calls to services that are not in the graph at
29
- * all — a third-party API, a backend nobody analysed. Reporting them as "no
30
- * route serves this" would be 101 confident wrong statements that bury the
31
- * handful that are real.
32
- *
33
- * So an unmatched caller is a **finding** only when a served route exists that
34
- * it nearly matches (see `paths.ts`, where every rule is a specific mechanical
35
- * mistake rather than a similarity threshold). Everything else is counted and
36
- * disclosed as *not analysable*, because the honest description of it is "the
37
- * provider side of this call was never read", not "the provider side is wrong".
38
- *
39
- * Two more refusals in the same spirit:
40
- *
41
- * - **No routes at all in the graph → no caller findings, at all.** With nothing
42
- * on the provider side, every caller is unmatched by construction and the
43
- * comparison has no content. Reported as not analysable, with the reason.
44
- * - **`ROUTE_NOT_CALLED` is stated weakly on purpose.** A route nothing calls is
45
- * usually a route called by something outside this graph — a mobile client,
46
- * another service, curl. It is a lead, not a defect, and the wording says so.
47
- */
1
+ /** Contract engine's R2 half: reports path-level orphans only (§13 is the R3 shape half, not this).
2
+ * A caller is a finding only with a near-miss served route — measured 117 callers/24 routes/16
3
+ * joined; the other 101 are unrelated services, disclosed as not analysable, not false positives. */
48
4
  import type { IRNode, ResolutionLevel } from "@descryy/ir";
49
5
  import type { AdjacencyProvider, QueryResult } from "../query/provider.ts";
50
6
  import { type NearMiss } from "./paths.ts";
51
- export type ContractFindingKind = "CALL_NOT_SERVED" | "ROUTE_NOT_CALLED";
7
+ export type ContractFindingKind = "CALL_NOT_SERVED" | "ROUTE_NOT_CALLED" | "ROUTE_NOT_MOUNTED";
8
+ /** Provable from the graph alone ("defect") vs dependent on outside knowledge ("lead") — following
9
+ * `EnvClaim`'s precedent. CALL_NOT_SERVED is a defect (miss + call both in graph); ROUTE_NOT_CALLED
10
+ * is a lead (an external caller wouldn't appear here, so "nothing calls it" is only suggestive). */
11
+ export type ContractClaim = "defect" | "lead";
52
12
  export interface ContractFinding {
53
13
  readonly kind: ContractFindingKind;
54
- readonly endpoint: IRNode;
14
+ readonly claim: ContractClaim;
15
+ /** The join node. Null for ROUTE_NOT_MOUNTED — an unmounted route has no API_ENDPOINT at all;
16
+ * that absence IS the finding. */
17
+ readonly endpoint: IRNode | null;
55
18
  readonly method: string;
56
19
  readonly pathTemplate: string;
57
20
  /** Callers reaching this endpoint. Populated for `CALL_NOT_SERVED`. */
58
21
  readonly callers: readonly IRNode[];
59
- /** Routes serving it. Populated for `ROUTE_NOT_CALLED`. */
22
+ /** Routes serving it (ROUTE_NOT_CALLED), or the single unmounted route (ROUTE_NOT_MOUNTED). */
60
23
  readonly routes: readonly IRNode[];
61
- /** Why this is reportable rather than merely unmatched. Null for `ROUTE_NOT_CALLED`. */
24
+ /** Why this is reportable rather than merely unmatched. Null for `ROUTE_NOT_CALLED` and `ROUTE_NOT_MOUNTED`. */
62
25
  readonly nearMiss: NearMiss | null;
63
26
  /** The sentence a developer reads. */
64
27
  readonly detail: string;
@@ -67,46 +30,34 @@ export interface ContractFinding {
67
30
  }
68
31
  export interface ContractReport {
69
32
  readonly findings: readonly ContractFinding[];
33
+ /** The count before `maxFindings` capped it — same pattern as `EnvReport`/`RollbackReport`. */
34
+ readonly findingsTotal: number;
70
35
  readonly checked: {
71
36
  readonly endpoints: number;
72
37
  readonly withCallers: number;
73
38
  readonly withRoutes: number;
74
39
  readonly joined: number;
40
+ /** API_ROUTE nodes with attrs.mounted as a real boolean — the only ones ROUTE_NOT_MOUNTED can
41
+ * speak about. A route with no such attribute is in neither this count nor `routesUnmounted`. */
42
+ readonly routesWithMountInfo: number;
43
+ /** Of those, how many declared `attrs.mounted === false` — before `maxFindings` capped the list. */
44
+ readonly routesUnmounted: number;
75
45
  };
76
- /**
77
- * Unmatched callers with nothing on the provider side that resembles them.
78
- *
79
- * Not findings, and the number matters: it is the size of the region this
80
- * analysis could not speak about.
81
- */
46
+ /** Unmatched callers with nothing resembling them on the provider side. Not findings — the
47
+ * number is the size of the region this analysis couldn't speak about. */
82
48
  readonly unmatchedWithoutNearMiss: number;
83
49
  /** True when the R3 shape comparison did not run. Always true in this half. */
84
50
  readonly shapesCompared: boolean;
85
51
  }
86
- /**
87
- * The path half's own coverage disclosure, exported so the shape half can retract
88
- * it rather than restate it.
89
- *
90
- * This function is the path half and cannot know whether a shape comparison
91
- * followed, so it always says one did not. That was true for as long as the path
92
- * half was the only half that ran, and it stopped being true the moment a
93
- * producer attached direction to a route's DTOs — leaving `contracts` reporting
94
- * a shape mismatch above a disclosure denying any shape was compared. Measured
95
- * against the real binary, UAT phase 2.
96
- *
97
- * A caller that runs the shape half removes this note when a comparison actually
98
- * happened. It is a constant rather than a regex on the caller's side because a
99
- * disclosure matched by pattern is a disclosure that silently stops being
100
- * retracted the day someone rewords it.
101
- */
52
+ /** Path-half coverage disclosure, exported so the shape half can retract it rather than restate
53
+ * it (UAT phase 2: a producer attaching DTO direction once left this standing beside a real shape
54
+ * mismatch). A constant, not a regex — regex-matched text silently stops being retracted when reworded. */
102
55
  export declare const PATH_LEVEL_ONLY_NOTE: string;
103
56
  export interface OrphanOptions {
104
57
  /** Cap on endpoints enumerated. Truncation is reported, never silent. */
105
58
  readonly limit?: number;
106
- /**
107
- * Cap on findings returned — rule 5's "a few high-confidence findings, never
108
- * an exhaustive maybe-list". Overflow is disclosed, not dropped quietly.
109
- */
59
+ /** Cap on findings — rule 5's "a few high-confidence findings, never an exhaustive maybe-list".
60
+ * Overflow is disclosed, not dropped quietly. */
110
61
  readonly maxFindings?: number;
111
62
  }
112
63
  export declare function findContractOrphans(provider: AdjacencyProvider, options?: OrphanOptions): QueryResult<ContractReport>;
@@ -1 +1 @@
1
- {"version":3,"file":"orphans.d.ts","sourceRoot":"","sources":["../../src/contracts/orphans.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAc,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAiC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;IACF;;;;;OAKG;IACH,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,QAEuB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAYD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,aAAkB,GAC1B,WAAW,CAAC,cAAc,CAAC,CA0M7B"}
1
+ {"version":3,"file":"orphans.d.ts","sourceRoot":"","sources":["../../src/contracts/orphans.ts"],"names":[],"mappings":"AAAA;;sGAEsG;AAEtG,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAc,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAiC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAE/F;;qGAEqG;AACrG,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B;uCACmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,gHAAgH;IAChH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,+FAA+F;IAC/F,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB;0GACkG;QAClG,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,oGAAoG;QACpG,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC;IACF;+EAC2E;IAC3E,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED;;4GAE4G;AAC5G,eAAO,MAAM,oBAAoB,QAEuB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;sDACkD;IAClD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AA+ED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,aAAkB,GAC1B,WAAW,CAAC,cAAc,CAAC,CAgP7B"}
@@ -1,67 +1,10 @@
1
- /**
2
- * The contract engine's R2 half: who calls what, and who serves it.
3
- *
4
- * §13's mechanism is shape comparison at R3. This is the part that works
5
- * **below** it, and the architecture is explicit that it should exist: at R2,
6
- * report path-level orphans only, and say so. Splitting the engine this way
7
- * means half the value lands on graphs no type checker has touched, and the R3
8
- * half does not hold it hostage.
9
- *
10
- * ## Three findings, and the reason there are only three
11
- *
12
- * ```
13
- * API_ROUTE ──SERVES_API──▶ API_ENDPOINT ◀──USES_API── caller
14
- * ```
15
- *
16
- * An `API_ENDPOINT` is the join. Every question here is about which of its two
17
- * sides is present:
18
- *
19
- * | both sides | one side | finding |
20
- * | --- | --- | --- |
21
- * | caller + route | — | the contract holds at path level |
22
- * | — | caller only | **the call reaches nothing that is served** |
23
- * | — | route only | **nothing in this graph calls the route** |
24
- *
25
- * ## The trap, and it is the whole design
26
- *
27
- * On two real repositories: **117 callers, 24 routes, 16 joined.** The other 101
28
- * callers are, overwhelmingly, calls to services that are not in the graph at
29
- * all — a third-party API, a backend nobody analysed. Reporting them as "no
30
- * route serves this" would be 101 confident wrong statements that bury the
31
- * handful that are real.
32
- *
33
- * So an unmatched caller is a **finding** only when a served route exists that
34
- * it nearly matches (see `paths.ts`, where every rule is a specific mechanical
35
- * mistake rather than a similarity threshold). Everything else is counted and
36
- * disclosed as *not analysable*, because the honest description of it is "the
37
- * provider side of this call was never read", not "the provider side is wrong".
38
- *
39
- * Two more refusals in the same spirit:
40
- *
41
- * - **No routes at all in the graph → no caller findings, at all.** With nothing
42
- * on the provider side, every caller is unmatched by construction and the
43
- * comparison has no content. Reported as not analysable, with the reason.
44
- * - **`ROUTE_NOT_CALLED` is stated weakly on purpose.** A route nothing calls is
45
- * usually a route called by something outside this graph — a mobile client,
46
- * another service, curl. It is a lead, not a defect, and the wording says so.
47
- */
1
+ /** Contract engine's R2 half: reports path-level orphans only (§13 is the R3 shape half, not this).
2
+ * A caller is a finding only with a near-miss served route — measured 117 callers/24 routes/16
3
+ * joined; the other 101 are unrelated services, disclosed as not analysable, not false positives. */
48
4
  import { nearestMiss } from "./paths.js";
49
- /**
50
- * The path half's own coverage disclosure, exported so the shape half can retract
51
- * it rather than restate it.
52
- *
53
- * This function is the path half and cannot know whether a shape comparison
54
- * followed, so it always says one did not. That was true for as long as the path
55
- * half was the only half that ran, and it stopped being true the moment a
56
- * producer attached direction to a route's DTOs — leaving `contracts` reporting
57
- * a shape mismatch above a disclosure denying any shape was compared. Measured
58
- * against the real binary, UAT phase 2.
59
- *
60
- * A caller that runs the shape half removes this note when a comparison actually
61
- * happened. It is a constant rather than a regex on the caller's side because a
62
- * disclosure matched by pattern is a disclosure that silently stops being
63
- * retracted the day someone rewords it.
64
- */
5
+ /** Path-half coverage disclosure, exported so the shape half can retract it rather than restate
6
+ * it (UAT phase 2: a producer attaching DTO direction once left this standing beside a real shape
7
+ * mismatch). A constant, not a regex — regex-matched text silently stops being retracted when reworded. */
65
8
  export const PATH_LEVEL_ONLY_NOTE = "Path level only. Request and response shapes were not compared — that requires R3 on both " +
66
9
  "sides, because it compares shapes rather than names.";
67
10
  const DEFAULT_MAX_FINDINGS = 25;
@@ -72,18 +15,69 @@ function keyOf(endpoint) {
72
15
  ? { method, pathTemplate }
73
16
  : null;
74
17
  }
18
+ /** ROUTE_NOT_MOUNTED: a route declared but never registered, read generically off
19
+ * `API_ROUTE.attrs.mounted` (`DEC-NEXT-route-declared-but-not-mounted-modelling`). No language/
20
+ * adapter name here — a producer silent on mounting produces nothing, same as rule 2 for an edge. */
21
+ function unmountedRouteFindings(provider) {
22
+ const set = provider.nodesOfType("API_ROUTE");
23
+ const findings = [];
24
+ let routesWithMountInfo = 0;
25
+ let routesWithoutMountInfo = 0;
26
+ let routesUnmounted = 0;
27
+ for (const route of set.nodes) {
28
+ const mounted = route.attrs["mounted"];
29
+ if (typeof mounted !== "boolean") {
30
+ // Absence is "unknown," not "not mounted" — a finding here would be exactly the false
31
+ // positive rule 2 forbids, so this route is counted but produces no finding.
32
+ routesWithoutMountInfo += 1;
33
+ continue;
34
+ }
35
+ routesWithMountInfo += 1;
36
+ if (mounted)
37
+ continue; // Mounted normally; the endpoint-side checks above already cover it.
38
+ routesUnmounted += 1;
39
+ const method = typeof route.attrs["method"] === "string" ? route.attrs["method"] : "?";
40
+ const pathTemplate = typeof route.attrs["pathTemplate"] === "string"
41
+ ? route.attrs["pathTemplate"]
42
+ : route.name;
43
+ findings.push({
44
+ kind: "ROUTE_NOT_MOUNTED",
45
+ claim: "defect",
46
+ endpoint: null,
47
+ method,
48
+ pathTemplate,
49
+ callers: [],
50
+ routes: [route],
51
+ nearMiss: null,
52
+ detail: `${method} ${pathTemplate} is declared${route.file === null ? "" : ` in ${route.file}`} and ` +
53
+ "nothing mounts it — no code path registers this route with the running application, so it " +
54
+ "404s for every caller. Unlike a route nothing calls, this needs no external-consumer " +
55
+ "caveat: it is provable from this graph alone.",
56
+ resolution: route.resolution,
57
+ });
58
+ }
59
+ return {
60
+ findings,
61
+ routesWithMountInfo,
62
+ routesUnmounted,
63
+ routesWithoutMountInfo,
64
+ truncated: set.truncated,
65
+ };
66
+ }
75
67
  export function findContractOrphans(provider, options = {}) {
76
68
  const maxFindings = options.maxFindings ?? DEFAULT_MAX_FINDINGS;
77
69
  const set = provider.nodesOfType("API_ENDPOINT", ...(options.limit === undefined ? [] : [options.limit]));
78
70
  const notes = [];
71
+ // A route that never mounts has no API_ENDPOINT and was never a candidate for one, so this
72
+ // runs (and reports) independent of whether any endpoint exists.
73
+ const mount = unmountedRouteFindings(provider);
79
74
  const sided = [];
80
75
  let unkeyed = 0;
81
76
  for (const endpoint of set.nodes) {
82
77
  const key = keyOf(endpoint);
83
78
  if (key === null) {
84
- // An endpoint with no method or path template cannot be compared to
85
- // anything. Counted rather than skipped: it means a producer emitted a
86
- // join node without the two attributes the join is made of.
79
+ // No method/path template means nothing to compare against — counted (a producer emitted
80
+ // a join node missing the attributes the join is made of), not silently skipped.
87
81
  unkeyed += 1;
88
82
  continue;
89
83
  }
@@ -104,18 +98,33 @@ export function findContractOrphans(provider, options = {}) {
104
98
  const withRoutes = sided.filter((s) => s.routes.length > 0);
105
99
  const joined = sided.filter((s) => s.callers.length > 0 && s.routes.length > 0);
106
100
  const servedKeys = withRoutes.map((s) => s.key);
107
- // --- the refusals --------------------------------------------------------
108
- if (sided.length === 0) {
101
+ // The genuinely empty case: nothing at the endpoint join, and the mount check agrees there's
102
+ // nothing else to say.
103
+ if (sided.length === 0 && mount.findings.length === 0) {
109
104
  notes.push("No API endpoints are in the graph, so there is no contract to check. Either no adapter " +
110
105
  "read a route or a client call, or none of the configured adapters produces them. This " +
111
106
  "is not a clean result.");
112
- return report(provider, emptyReport(sided.length, 0, 0, 0), 0, false, notes);
107
+ if (mount.routesWithoutMountInfo > 0) {
108
+ notes.push(routesWithoutMountInfoNote(mount.routesWithoutMountInfo));
109
+ }
110
+ return report(provider, emptyReport(sided.length, 0, 0, 0, mount.routesWithMountInfo, mount.routesUnmounted), 0, mount.truncated, notes);
113
111
  }
114
- const findings = [];
112
+ // Still true even with unmounted-route findings below: the endpoint join has nothing to
113
+ // compare, so this one sentence replaces the two mirror-image refusals below (measured against
114
+ // reviews.py: a repo with no other route mounted at all).
115
+ const noEndpointsAtAll = sided.length === 0;
116
+ if (noEndpointsAtAll) {
117
+ notes.push("No API endpoints are in the graph, so the endpoint-join checks below have nothing to " +
118
+ "compare. Either no adapter read a route or a client call, or none of the configured " +
119
+ "adapters produces them.");
120
+ }
121
+ const findings = [...mount.findings];
115
122
  let unmatchedWithoutNearMiss = 0;
116
- if (withRoutes.length === 0) {
117
- // Every caller is unmatched by construction. Comparing against an empty
118
- // provider side produces one finding per call site and means nothing.
123
+ if (noEndpointsAtAll) {
124
+ // Handled by the note above — the refusals below would otherwise restate this from two empty sets.
125
+ }
126
+ else if (withRoutes.length === 0) {
127
+ // Every caller is unmatched by construction — comparing against an empty provider side means nothing.
119
128
  unmatchedWithoutNearMiss = withCallers.length;
120
129
  notes.push(`${withCallers.length} endpoint(s) are called and no route is in the graph at all, so no ` +
121
130
  "comparison was possible. Every call would be reported as unserved for the same reason, " +
@@ -128,14 +137,17 @@ export function findContractOrphans(provider, options = {}) {
128
137
  continue;
129
138
  const miss = nearestMiss(entry.key, servedKeys);
130
139
  if (miss === null) {
131
- // Nothing on the provider side resembles it. Far more likely an external
132
- // service than a defect, and stating otherwise would be 101 confident
133
- // wrong sentences on the repositories this was measured against.
140
+ // Nothing resembles it on the provider side — far more likely an external service than
141
+ // a defect (101 confident wrong sentences on the repos this was measured against).
134
142
  unmatchedWithoutNearMiss += 1;
135
143
  continue;
136
144
  }
137
145
  findings.push({
138
146
  kind: "CALL_NOT_SERVED",
147
+ // A near miss is what makes this a fault claim rather than a lead: the
148
+ // provider side has something one segment or one method away, so the
149
+ // call is wrong about a route this repository really serves.
150
+ claim: "defect",
139
151
  endpoint: entry.endpoint,
140
152
  method: entry.key.method,
141
153
  pathTemplate: entry.key.pathTemplate,
@@ -148,18 +160,13 @@ export function findContractOrphans(provider, options = {}) {
148
160
  });
149
161
  }
150
162
  }
151
- if (withCallers.length === 0) {
152
- // The mirror of the refusal above, and it was missing until a per-source
153
- // ablation on `bench/contracts-real.mjs` removed the consumer side: the
154
- // engine reported 24 ROUTE_NOT_CALLED findings and no disclosure, about a
155
- // graph containing no callers at all.
156
- //
157
- // "Nothing in this graph calls this route" is literally true there — and so
158
- // is the sentence this engine declines to say in the other direction.
159
- // Whichever side is empty, the cause is ONE fact about what was analysed,
160
- // not N facts about the artefacts. It is not only an ablation state either:
161
- // a workspace where only the backend has been indexed is the normal first
162
- // day of a deployment.
163
+ if (noEndpointsAtAll) {
164
+ // Handled by the single note pushed above.
165
+ }
166
+ else if (withCallers.length === 0) {
167
+ // Mirror of the refusal above — missing until an ablation on bench/contracts-real.mjs found
168
+ // 24 ROUTE_NOT_CALLED findings with no disclosure on a graph with zero callers. Not just an
169
+ // ablation case: a workspace with only the backend indexed is a normal first day of deployment.
163
170
  notes.push(`${withRoutes.length} route(s) are served and no call site is in the graph at all, so no ` +
164
171
  "comparison was possible. Every route would be reported as uncalled for the same reason, " +
165
172
  "which is a property of what was analysed rather than of the code. Add the client that " +
@@ -171,6 +178,11 @@ export function findContractOrphans(provider, options = {}) {
171
178
  continue;
172
179
  findings.push({
173
180
  kind: "ROUTE_NOT_CALLED",
181
+ // Nothing in *this graph* calls it. A mobile client, another service or
182
+ // an external consumer would not appear here, so the absence is not
183
+ // evidence of a fault. Said in the detail since it was written; now
184
+ // said in a field something can count.
185
+ claim: "lead",
174
186
  endpoint: entry.endpoint,
175
187
  method: entry.key.method,
176
188
  pathTemplate: entry.key.pathTemplate,
@@ -185,13 +197,14 @@ export function findContractOrphans(provider, options = {}) {
185
197
  });
186
198
  }
187
199
  }
188
- // Findings that rest on better evidence first, then the stronger kind, then by
189
- // path so the order is identical between runs.
200
+ // Better evidence first, then defects before leads (a route nothing calls needs external
201
+ // knowledge to condemn), then kind/path so ordering is identical between runs.
190
202
  findings.sort((a, b) => b.resolution - a.resolution ||
191
- (a.kind === b.kind ? 0 : a.kind === "CALL_NOT_SERVED" ? -1 : 1) ||
203
+ (a.claim === b.claim ? 0 : a.claim === "defect" ? -1 : 1) ||
204
+ (a.kind === b.kind ? 0 : a.kind.localeCompare(b.kind)) ||
192
205
  `${a.method} ${a.pathTemplate}`.localeCompare(`${b.method} ${b.pathTemplate}`));
193
206
  const kept = findings.slice(0, maxFindings);
194
- const truncated = set.truncated || kept.length < findings.length;
207
+ const truncated = set.truncated || mount.truncated || kept.length < findings.length;
195
208
  if (kept.length < findings.length) {
196
209
  notes.push(`${findings.length - kept.length} further finding(s) were withheld: a report is capped at ` +
197
210
  `${maxFindings} so that a short list stays worth reading. They were found, not missed — ` +
@@ -201,6 +214,10 @@ export function findContractOrphans(provider, options = {}) {
201
214
  notes.push("More endpoints exist than were enumerated, so this report covers a prefix of the graph " +
202
215
  "rather than all of it. Endpoints beyond the cap were not examined and are not clean.");
203
216
  }
217
+ if (mount.truncated) {
218
+ notes.push("More API_ROUTE nodes exist than were enumerated for the mounted-route check, so that check " +
219
+ "covers a prefix of the graph rather than all of it.");
220
+ }
204
221
  if (unkeyed > 0) {
205
222
  notes.push(`${unkeyed} endpoint(s) carry no method or path template and could not be compared to ` +
206
223
  "anything. A producer emitted a join node without the two attributes the join is made of.");
@@ -211,6 +228,9 @@ export function findContractOrphans(provider, options = {}) {
211
228
  "explanation is a service outside this workspace, and the honest statement is that their " +
212
229
  "provider was never read.");
213
230
  }
231
+ if (mount.routesWithoutMountInfo > 0) {
232
+ notes.push(routesWithoutMountInfoNote(mount.routesWithoutMountInfo));
233
+ }
214
234
  notes.push(PATH_LEVEL_ONLY_NOTE);
215
235
  let floor = 4;
216
236
  for (const finding of kept)
@@ -220,16 +240,25 @@ export function findContractOrphans(provider, options = {}) {
220
240
  floor = 2;
221
241
  return report(provider, {
222
242
  findings: kept,
243
+ findingsTotal: findings.length,
223
244
  checked: {
224
245
  endpoints: sided.length,
225
246
  withCallers: withCallers.length,
226
247
  withRoutes: withRoutes.length,
227
248
  joined: joined.length,
249
+ routesWithMountInfo: mount.routesWithMountInfo,
250
+ routesUnmounted: mount.routesUnmounted,
228
251
  },
229
252
  unmatchedWithoutNearMiss,
230
253
  shapesCompared: false,
231
254
  }, floor, truncated, notes);
232
255
  }
256
+ /** Shared wording for the precision guard — a route with no `attrs.mounted` at all is not evidence either way. */
257
+ function routesWithoutMountInfoNote(count) {
258
+ return (`${count} route(s) in the graph carry no attrs.mounted at all, so mount status could not be ` +
259
+ "checked for them. That is not the same as confirming they are mounted — it means the " +
260
+ "producer that read them does not report mounting, and no finding is made either way.");
261
+ }
233
262
  function describeCallers(callers) {
234
263
  const first = callers[0];
235
264
  if (first === undefined)
@@ -243,10 +272,11 @@ function describeRoutes(routes) {
243
272
  return "an unknown route";
244
273
  return routes.length === 1 ? first.name : `${first.name} and ${routes.length - 1} other(s)`;
245
274
  }
246
- function emptyReport(endpoints, withCallers, withRoutes, joined) {
275
+ function emptyReport(endpoints, withCallers, withRoutes, joined, routesWithMountInfo = 0, routesUnmounted = 0) {
247
276
  return {
248
277
  findings: [],
249
- checked: { endpoints, withCallers, withRoutes, joined },
278
+ findingsTotal: 0,
279
+ checked: { endpoints, withCallers, withRoutes, joined, routesWithMountInfo, routesUnmounted },
250
280
  unmatchedWithoutNearMiss: 0,
251
281
  shapesCompared: false,
252
282
  };
@@ -1 +1 @@
1
- {"version":3,"file":"orphans.js","sourceRoot":"","sources":["../../src/contracts/orphans.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orphans.js","sourceRoot":"","sources":["../../src/contracts/orphans.ts"],"names":[],"mappings":"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"}