@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,138 +1,21 @@
1
1
  /**
2
- * `RootCauseScore` — architecture §18.3a, the deterministic ranking half.
3
- *
4
- * ```
5
- * RootCauseScore = RuntimeEvidence + GraphDistance + ChangeCoupling + IncidentCorrelation
6
- * ```
7
- *
8
- * §18.3 establishes why ranking exists at all: traversal alone returns a
9
- * *path*, not a culprit. A five-hop chain has five candidate locations, and
10
- * presenting all five is diagnostically equivalent to presenting none.
11
- *
12
- * ## Reuses three existing queries — does not re-derive them
13
- *
14
- * `documents/decisions-inbox/NOTE-4-correlation-graph-integration-prep.md`
15
- * §1 maps three of the four terms onto queries this package already has,
16
- * checked line by line against `queries.ts` rather than assumed:
17
- *
18
- * | Term | Query | Role here |
19
- * | --- | --- | --- |
20
- * | `GraphDistance` | `weightedBfs` (`impactOf`'s own underlying primitive, called directly — see below) | `direction: "out"`, walking `CALLS`/`USES_API`/`SERVES_API` from the failure point toward the deep implementation — §18.3's own worked example, and its own hop×confidence-decayed `score` is used as-is. |
21
- * | `ChangeCoupling` | `changesWith` | Was this candidate, or a co-change partner of it, in the current diff. |
22
- * | `IncidentCorrelation` | `rootCauseSearch` | Structural half only — inherits that query's own disclosed gap (no vector store, §8.2) unchanged. |
23
- * | `RuntimeEvidence` | **none, and none should exist here** | See below. |
24
- *
25
- * **`weightedBfs` directly, not `impactOf`** — a deliberate, narrow deviation
26
- * from "reuses, does not re-derive." `RankedRootCauseCandidate.path` (the
27
- * real hop-by-hop `GraphPathHop[]` `Finding.graphPath` needs,
28
- * `documents/decisions-inbox/DEC-D-NEXT-graph-path-hop-reconstruction.md`,
29
- * `descry-desktop`) is reconstructed by walking `Reached.via`'s parent
30
- * pointers back to the seed — the exact traversal that produced `depth`/
31
- * `score`. `impactOf` discards `via` in its own `hydrate()` step before this
32
- * module ever sees the result, so getting it means calling `weightedBfs`
33
- * itself. The scoring math is not re-derived — `entry.score`/`entry.depth`
34
- * are still `weightedBfs`'s own values, used as-is, same as before; only the
35
- * thin hydrate-plus-note wrapper `impactOf` adds is now inlined here so the
36
- * `via` chain survives.
37
- *
38
- * `RootCauseScore`'s own walk crosses the `SERVES_API` join the same way
39
- * §18.3's example does: `SERVES_API` is stored route → endpoint
40
- * (`queries.ts`'s own comment), so a plain `direction: "out"` walk reaches
41
- * the endpoint from a caller's `USES_API` edge and stops — it never looks
42
- * incoming at that one node to find the route serving it. `crossApiEndpoint`
43
- * (DEC-138) is passed through for exactly this reason; without it, this
44
- * module's own fixture (`InvoicePage → deleteInvoice → DELETE
45
- * /invoice/:id`) would never reach `InvoiceController`/`InvoiceService` at
46
- * all, and the architecture's own worked example would not walk. The join
47
- * crossover means a hop's own `from`/`to` sometimes runs opposite the walk's
48
- * direction (the route→endpoint edge is walked endpoint→controller) — `path`
49
- * reports the edge exactly as stored, never flipped to look like a forward
50
- * chain that was never actually walked that way; see `pathTo`'s own comment.
51
- *
52
- * ## `RuntimeEvidence` is a precondition, never a fourth addend — read this before changing anything
53
- *
54
- * NOTE-4 §5 settles this and `ai-layer-plan.md` §5 (G3) preserves it: a
55
- * candidate with maximal `GraphDistance + ChangeCoupling + IncidentCorrelation`
56
- * and zero `RuntimeEvidence` is a plausible guess ranked well, and it must
57
- * **never** reach `confirmed` however the other three terms sum — because
58
- * summing all four together *is* the failure mode where a well-ranked guess
59
- * reads as an established fact. DEC-276 encodes the same rule one layer up
60
- * as `E == 0 → unconfirmed`.
61
- *
62
- * So this module never computes `structuralScore + runtimeEvidence` — not
63
- * as an internal step, not as a returned field, nowhere. Two design choices
64
- * make this a **type constraint**, not just a documented convention (proven
65
- * by a `@ts-expect-error` test in this module's test file, checked by
66
- * `tsc`, not merely asserted at runtime):
67
- *
68
- * 1. `structuralScore: number` carries only `GraphDistance + ChangeCoupling
69
- * + IncidentCorrelation`. Nothing runtime-evidence-shaped is a term in
70
- * it, ever.
71
- * 2. `namedByEvidence: readonly string[]` — the verbatim evidence
72
- * descriptions naming this exact candidate, supplied by the caller
73
- * (`descry-runtime`'s evidence-to-node resolution; NOTE-4 §2 is explicit
74
- * that no graph query for this term exists or should — it is not a
75
- * graph fact). A `string[]`, not a `number` or a boolean count:
76
- * `structuralScore + namedByEvidence` does not typecheck, so a caller
77
- * cannot casually fold it into the ranking arithmetic by accident. A
78
- * caller who really wants to misuse it has to write new code to do so —
79
- * this module supplies no field shaped like the thing G3 forbids
80
- * summing.
81
- *
82
- * §18.3a's own table still calls `RuntimeEvidence` *"the strongest
83
- * signal"* — a node named directly in a backend log outranks one merely on
84
- * the path. That is honored **as a sort key, not a score term**:
85
- * `namedByEvidence`-non-empty candidates sort before every candidate
86
- * without it, and only within each of those two groups does
87
- * `structuralScore` decide. Categorical partitioning, never arithmetic
88
- * combination — the distinction NOTE-4 §5 draws is preserved exactly.
89
- *
90
- * `RootCauseScore` the architecture names is therefore not a function this
91
- * module returns as one number. It ranks; a gate above this layer (G3/G4,
92
- * `descry-runtime`/the pipeline) decides what `namedByEvidence` and the
93
- * finding's actual evidence bundle are allowed to promote — this module
94
- * does not gate and does not categorise.
95
- *
96
- * ## The resolution caveat (§18.3)
97
- *
98
- * *"At R0/R1 the tracer will lose the trail at the first cross-file call
99
- * and must say 'trace stopped here' rather than presenting a truncated
100
- * chain as complete."* When the traversal's own resolution floor is R0/R1,
101
- * a note says so in those words — in addition to, not instead of,
102
- * `impactOf`'s own disclosure, which explains *why* (cross-file calls are
103
- * not reliably resolved at that level).
104
- *
105
- * ## Weights are starting values, not measurements
106
- *
107
- * `CLAUDE.md`: *"Numbers in the docs are targets or starting values, not
108
- * measurements."* `DEFAULT_ROOT_CAUSE_WEIGHTS` and `INCIDENT_SATURATION`
109
- * below are exactly that — picked, not measured, gathered into one named
110
- * block rather than left as literals in the arithmetic so the next reader
111
- * can find and tune them without reading the function body.
2
+ * RootCauseScore = RuntimeEvidence + GraphDistance + ChangeCoupling + IncidentCorrelation (§18.3a).
3
+ * RuntimeEvidence is never summed in — `namedByEvidence` is a sort key only (DEC-276: E==0 → unconfirmed).
4
+ * Weights/INCIDENT_SATURATION below are unmeasured starting values.
112
5
  */
113
6
  import type { EdgeType, GraphPathHop, IRNode, ResolutionLevel } from "@descryy/ir";
114
7
  import type { AdjacencyProvider } from "./provider.ts";
115
8
  import { type RootCauseMatch } from "./queries.ts";
116
9
  /** §18.3's own walk: from the failure point toward the deep implementation. */
117
10
  export declare const ROOT_CAUSE_TRACE_EDGE_TYPES: readonly EdgeType[];
118
- /**
119
- * The three structural terms' multipliers. **Unmeasured starting values**
120
- * (`CLAUDE.md`'s own rule) — tune from data, not intuition, once golden
121
- * investigations (`ai-layer-plan.md` §9 layer 4) exist to tune against.
122
- */
11
+ /** Multipliers for the three structural terms. Unmeasured starting values — tune from data, not intuition. */
123
12
  export interface RootCauseWeights {
124
13
  readonly graphDistance: number;
125
14
  readonly changeCoupling: number;
126
15
  readonly incidentCorrelation: number;
127
16
  }
128
17
  export declare const DEFAULT_ROOT_CAUSE_WEIGHTS: RootCauseWeights;
129
- /**
130
- * How many correlated incidents saturate `IncidentCorrelation`'s raw 0–1
131
- * contribution. Unmeasured, same rule as the weights above: a candidate
132
- * with dozens of correlated incidents should not dominate the ranking
133
- * arithmetically more than one with a handful, so the raw count is capped
134
- * before it is weighted.
135
- */
18
+ /** How many correlated incidents saturate `IncidentCorrelation`'s 0–1 contribution. Unmeasured, caps raw count before weighting. */
136
19
  export declare const INCIDENT_SATURATION = 3;
137
20
  /** Why a candidate's `ChangeCoupling` term is nonzero — a fact worth keeping, not just a number. */
138
21
  export type ChangeCouplingEvidence = {
@@ -151,52 +34,24 @@ export interface RootCauseOptions {
151
34
  readonly budget?: number;
152
35
  /** Node ids the current diff touches directly — `ChangeCoupling`'s "in the current diff" half. */
153
36
  readonly changedIds?: ReadonlySet<string>;
154
- /**
155
- * Verbatim evidence descriptions, keyed by the exact node id they name
156
- * directly — supplied by the caller, never computed here. See the module
157
- * header: this is not a graph fact, and no query for it exists in this
158
- * package.
159
- */
37
+ /** Verbatim evidence descriptions keyed by node id — supplied by the caller, never computed here (not a graph fact). */
160
38
  readonly namedByEvidence?: ReadonlyMap<string, readonly string[]>;
161
39
  }
162
40
  export interface RankedRootCauseCandidate {
163
41
  readonly node: IRNode;
164
42
  /** Hops from the failure point along the traced walk. 0 at the failure point itself. */
165
43
  readonly depth: number;
166
- /**
167
- * `GraphDistance + ChangeCoupling + IncidentCorrelation`, weighted.
168
- * **Never** includes `RuntimeEvidence` — see the module header.
169
- */
44
+ /** `GraphDistance + ChangeCoupling + IncidentCorrelation`, weighted. Never includes `RuntimeEvidence`. */
170
45
  readonly structuralScore: number;
171
46
  readonly changeCoupling: ChangeCouplingEvidence | null;
172
47
  readonly correlatedIncidents: readonly RootCauseMatch[];
173
- /**
174
- * Verbatim evidence naming this exact candidate. Empty, never omitted,
175
- * when none. A precondition for promotion elsewhere (NOTE-4 §5, G3,
176
- * DEC-276) — never a term in `structuralScore`.
177
- */
48
+ /** Verbatim evidence naming this candidate. Empty, never omitted, when none — precondition for promotion (NOTE-4 §5, DEC-276), never a `structuralScore` term. */
178
49
  readonly namedByEvidence: readonly string[];
179
50
  /** The candidate node's own resolution — a fact stored on it directly, not re-derived. */
180
51
  readonly resolution: ResolutionLevel;
181
- /**
182
- * `true` when `depth === 0` — this candidate *is* the failure point, and
183
- * `resolution` above is that single node's own fact, not the minimum over
184
- * any traced hop. `DEC-NEXT-empty-graph-path-resolution-floor.md` ruled
185
- * that a zero-hop path caps reliability at the same class as a
186
- * genuinely-but-badly-resolved one, but the two are not the same claim —
187
- * this field is what lets a caller (`reliabilityNote()`'s `emptyPath`
188
- * parameter, `@descryy/ir`) say which one happened, rather than
189
- * inferring it from `depth === 0` at every call site. Never `true` for a
190
- * deeper candidate: at least one hop was traced to reach it, however
191
- * poorly that hop resolved.
192
- */
52
+ /** `true` when `depth === 0` (this candidate is the failure point itself). Distinguishes a zero-hop path from a badly-resolved one (`DEC-NEXT-empty-graph-path-resolution-floor.md`). */
193
53
  readonly emptyPath: boolean;
194
- /**
195
- * The real, walked hop-by-hop chain from the failure point to this
196
- * candidate — `Finding.graphPath`'s own source. Empty exactly when
197
- * `emptyPath` is `true`. Reconstructed from `weightedBfs`'s own `via`
198
- * chain, not a second independent walk — see the module header.
199
- */
54
+ /** Walked hop-by-hop chain to this candidate (`Finding.graphPath`'s source); empty iff `emptyPath`. Reconstructed from `weightedBfs`'s `via` chain. */
200
55
  readonly path: readonly GraphPathHop[];
201
56
  }
202
57
  export interface RootCauseRanking {
@@ -208,11 +63,6 @@ export interface RootCauseRanking {
208
63
  readonly truncated: boolean;
209
64
  readonly notes: readonly string[];
210
65
  }
211
- /**
212
- * Rank the candidates reachable from `failurePoint` by the three structural
213
- * terms of `RootCauseScore` (architecture §18.3a). See the module header
214
- * for why `RuntimeEvidence` is deliberately absent from the arithmetic and
215
- * present only as `namedByEvidence`, a categorical sort key.
216
- */
66
+ /** Ranks candidates reachable from `failurePoint` by the three structural terms of `RootCauseScore` (§18.3a). */
217
67
  export declare function rankRootCause(provider: AdjacencyProvider, failurePoint: string, options?: RootCauseOptions): RootCauseRanking;
218
68
  //# sourceMappingURL=root-cause-score.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"root-cause-score.d.ts","sourceRoot":"","sources":["../../src/query/root-cause-score.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"root-cause-score.d.ts","sourceRoot":"","sources":["../../src/query/root-cause-score.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAGjF,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,EAAE,SAAS,QAAQ,EAAwC,CAAC;AAEpG,8GAA8G;AAC9G,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,eAAO,MAAM,0BAA0B,EAAE,gBAIxC,CAAC;AAEF,oIAAoI;AACpI,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAIrC,oGAAoG;AACpG,MAAM,MAAM,sBAAsB,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IACpC,iIAAiI;IACjI,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kGAAkG;IAClG,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,wHAAwH;IACxH,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0GAA0G;IAC1G,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,mBAAmB,EAAE,SAAS,cAAc,EAAE,CAAC;IACxD,kKAAkK;IAClK,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,0FAA0F;IAC1F,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,yLAAyL;IACzL,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,uJAAuJ;IACvJ,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACrD,wFAAwF;IACxF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAsCD,iHAAiH;AACjH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,gBAAqB,GAC7B,gBAAgB,CA8ElB"}
@@ -1,114 +1,7 @@
1
1
  /**
2
- * `RootCauseScore` — architecture §18.3a, the deterministic ranking half.
3
- *
4
- * ```
5
- * RootCauseScore = RuntimeEvidence + GraphDistance + ChangeCoupling + IncidentCorrelation
6
- * ```
7
- *
8
- * §18.3 establishes why ranking exists at all: traversal alone returns a
9
- * *path*, not a culprit. A five-hop chain has five candidate locations, and
10
- * presenting all five is diagnostically equivalent to presenting none.
11
- *
12
- * ## Reuses three existing queries — does not re-derive them
13
- *
14
- * `documents/decisions-inbox/NOTE-4-correlation-graph-integration-prep.md`
15
- * §1 maps three of the four terms onto queries this package already has,
16
- * checked line by line against `queries.ts` rather than assumed:
17
- *
18
- * | Term | Query | Role here |
19
- * | --- | --- | --- |
20
- * | `GraphDistance` | `weightedBfs` (`impactOf`'s own underlying primitive, called directly — see below) | `direction: "out"`, walking `CALLS`/`USES_API`/`SERVES_API` from the failure point toward the deep implementation — §18.3's own worked example, and its own hop×confidence-decayed `score` is used as-is. |
21
- * | `ChangeCoupling` | `changesWith` | Was this candidate, or a co-change partner of it, in the current diff. |
22
- * | `IncidentCorrelation` | `rootCauseSearch` | Structural half only — inherits that query's own disclosed gap (no vector store, §8.2) unchanged. |
23
- * | `RuntimeEvidence` | **none, and none should exist here** | See below. |
24
- *
25
- * **`weightedBfs` directly, not `impactOf`** — a deliberate, narrow deviation
26
- * from "reuses, does not re-derive." `RankedRootCauseCandidate.path` (the
27
- * real hop-by-hop `GraphPathHop[]` `Finding.graphPath` needs,
28
- * `documents/decisions-inbox/DEC-D-NEXT-graph-path-hop-reconstruction.md`,
29
- * `descry-desktop`) is reconstructed by walking `Reached.via`'s parent
30
- * pointers back to the seed — the exact traversal that produced `depth`/
31
- * `score`. `impactOf` discards `via` in its own `hydrate()` step before this
32
- * module ever sees the result, so getting it means calling `weightedBfs`
33
- * itself. The scoring math is not re-derived — `entry.score`/`entry.depth`
34
- * are still `weightedBfs`'s own values, used as-is, same as before; only the
35
- * thin hydrate-plus-note wrapper `impactOf` adds is now inlined here so the
36
- * `via` chain survives.
37
- *
38
- * `RootCauseScore`'s own walk crosses the `SERVES_API` join the same way
39
- * §18.3's example does: `SERVES_API` is stored route → endpoint
40
- * (`queries.ts`'s own comment), so a plain `direction: "out"` walk reaches
41
- * the endpoint from a caller's `USES_API` edge and stops — it never looks
42
- * incoming at that one node to find the route serving it. `crossApiEndpoint`
43
- * (DEC-138) is passed through for exactly this reason; without it, this
44
- * module's own fixture (`InvoicePage → deleteInvoice → DELETE
45
- * /invoice/:id`) would never reach `InvoiceController`/`InvoiceService` at
46
- * all, and the architecture's own worked example would not walk. The join
47
- * crossover means a hop's own `from`/`to` sometimes runs opposite the walk's
48
- * direction (the route→endpoint edge is walked endpoint→controller) — `path`
49
- * reports the edge exactly as stored, never flipped to look like a forward
50
- * chain that was never actually walked that way; see `pathTo`'s own comment.
51
- *
52
- * ## `RuntimeEvidence` is a precondition, never a fourth addend — read this before changing anything
53
- *
54
- * NOTE-4 §5 settles this and `ai-layer-plan.md` §5 (G3) preserves it: a
55
- * candidate with maximal `GraphDistance + ChangeCoupling + IncidentCorrelation`
56
- * and zero `RuntimeEvidence` is a plausible guess ranked well, and it must
57
- * **never** reach `confirmed` however the other three terms sum — because
58
- * summing all four together *is* the failure mode where a well-ranked guess
59
- * reads as an established fact. DEC-276 encodes the same rule one layer up
60
- * as `E == 0 → unconfirmed`.
61
- *
62
- * So this module never computes `structuralScore + runtimeEvidence` — not
63
- * as an internal step, not as a returned field, nowhere. Two design choices
64
- * make this a **type constraint**, not just a documented convention (proven
65
- * by a `@ts-expect-error` test in this module's test file, checked by
66
- * `tsc`, not merely asserted at runtime):
67
- *
68
- * 1. `structuralScore: number` carries only `GraphDistance + ChangeCoupling
69
- * + IncidentCorrelation`. Nothing runtime-evidence-shaped is a term in
70
- * it, ever.
71
- * 2. `namedByEvidence: readonly string[]` — the verbatim evidence
72
- * descriptions naming this exact candidate, supplied by the caller
73
- * (`descry-runtime`'s evidence-to-node resolution; NOTE-4 §2 is explicit
74
- * that no graph query for this term exists or should — it is not a
75
- * graph fact). A `string[]`, not a `number` or a boolean count:
76
- * `structuralScore + namedByEvidence` does not typecheck, so a caller
77
- * cannot casually fold it into the ranking arithmetic by accident. A
78
- * caller who really wants to misuse it has to write new code to do so —
79
- * this module supplies no field shaped like the thing G3 forbids
80
- * summing.
81
- *
82
- * §18.3a's own table still calls `RuntimeEvidence` *"the strongest
83
- * signal"* — a node named directly in a backend log outranks one merely on
84
- * the path. That is honored **as a sort key, not a score term**:
85
- * `namedByEvidence`-non-empty candidates sort before every candidate
86
- * without it, and only within each of those two groups does
87
- * `structuralScore` decide. Categorical partitioning, never arithmetic
88
- * combination — the distinction NOTE-4 §5 draws is preserved exactly.
89
- *
90
- * `RootCauseScore` the architecture names is therefore not a function this
91
- * module returns as one number. It ranks; a gate above this layer (G3/G4,
92
- * `descry-runtime`/the pipeline) decides what `namedByEvidence` and the
93
- * finding's actual evidence bundle are allowed to promote — this module
94
- * does not gate and does not categorise.
95
- *
96
- * ## The resolution caveat (§18.3)
97
- *
98
- * *"At R0/R1 the tracer will lose the trail at the first cross-file call
99
- * and must say 'trace stopped here' rather than presenting a truncated
100
- * chain as complete."* When the traversal's own resolution floor is R0/R1,
101
- * a note says so in those words — in addition to, not instead of,
102
- * `impactOf`'s own disclosure, which explains *why* (cross-file calls are
103
- * not reliably resolved at that level).
104
- *
105
- * ## Weights are starting values, not measurements
106
- *
107
- * `CLAUDE.md`: *"Numbers in the docs are targets or starting values, not
108
- * measurements."* `DEFAULT_ROOT_CAUSE_WEIGHTS` and `INCIDENT_SATURATION`
109
- * below are exactly that — picked, not measured, gathered into one named
110
- * block rather than left as literals in the arithmetic so the next reader
111
- * can find and tune them without reading the function body.
2
+ * RootCauseScore = RuntimeEvidence + GraphDistance + ChangeCoupling + IncidentCorrelation (§18.3a).
3
+ * RuntimeEvidence is never summed in — `namedByEvidence` is a sort key only (DEC-276: E==0 → unconfirmed).
4
+ * Weights/INCIDENT_SATURATION below are unmeasured starting values.
112
5
  */
113
6
  import { changesWith, rootCauseSearch } from "./queries.js";
114
7
  import { weightedBfs } from "./traverse.js";
@@ -119,13 +12,7 @@ export const DEFAULT_ROOT_CAUSE_WEIGHTS = {
119
12
  changeCoupling: 0.6,
120
13
  incidentCorrelation: 0.8,
121
14
  };
122
- /**
123
- * How many correlated incidents saturate `IncidentCorrelation`'s raw 0–1
124
- * contribution. Unmeasured, same rule as the weights above: a candidate
125
- * with dozens of correlated incidents should not dominate the ranking
126
- * arithmetically more than one with a handful, so the raw count is capped
127
- * before it is weighted.
128
- */
15
+ /** How many correlated incidents saturate `IncidentCorrelation`'s 0–1 contribution. Unmeasured, caps raw count before weighting. */
129
16
  export const INCIDENT_SATURATION = 3;
130
17
  const DEFAULT_TOP_N = 5;
131
18
  function changeCouplingFor(provider, candidateId, changedIds) {
@@ -146,20 +33,7 @@ function rawChangeCoupling(evidence) {
146
33
  return 0;
147
34
  return evidence.kind === "direct" ? 1 : evidence.confidence;
148
35
  }
149
- /**
150
- * Walks `reachedById`'s `via` parent pointers from `targetId` back to the
151
- * seed (`via === null`), returning the hops in seed-to-target order.
152
- *
153
- * The edge stored at each step is reported exactly as `IREdge` has it
154
- * (`from`/`to` never flipped) — at a `crossApiEndpoint` join the walk can
155
- * arrive at a node via an edge whose *stored* direction runs the other way
156
- * (the route→endpoint `SERVES_API` edge, walked endpoint→controller), and
157
- * `next`/`via` in `neighbours()` already account for that: `entry.id`
158
- * (the node this hop reached) equals exactly one of `via.from`/`via.to`, and
159
- * the other end is always the parent — regardless of which direction the
160
- * walk actually moved. That is the rule this function uses, rather than
161
- * assuming `via.from` is always the parent.
162
- */
36
+ /** Walks `via` pointers from `targetId` to the seed (hops seed-to-target); edges reported exactly as stored, never flipped. */
163
37
  function pathTo(reachedById, targetId) {
164
38
  const hops = [];
165
39
  let currentId = targetId;
@@ -173,12 +47,7 @@ function pathTo(reachedById, targetId) {
173
47
  }
174
48
  return hops.reverse();
175
49
  }
176
- /**
177
- * Rank the candidates reachable from `failurePoint` by the three structural
178
- * terms of `RootCauseScore` (architecture §18.3a). See the module header
179
- * for why `RuntimeEvidence` is deliberately absent from the arithmetic and
180
- * present only as `namedByEvidence`, a categorical sort key.
181
- */
50
+ /** Ranks candidates reachable from `failurePoint` by the three structural terms of `RootCauseScore` (§18.3a). */
182
51
  export function rankRootCause(provider, failurePoint, options = {}) {
183
52
  const weights = options.weights ?? DEFAULT_ROOT_CAUSE_WEIGHTS;
184
53
  const topN = Math.max(0, Math.floor(options.topN ?? DEFAULT_TOP_N));
@@ -1 +1 @@
1
- {"version":3,"file":"root-cause-score.js","sourceRoot":"","sources":["../../src/query/root-cause-score.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"root-cause-score.js","sourceRoot":"","sources":["../../src/query/root-cause-score.ts"],"names":[],"mappings":"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"}
@@ -1,56 +1,7 @@
1
1
  /**
2
- * DEC-244, extended: the same row can be closed by two different kinds of
3
- * evidence at once, and they must never collapse into each other.
4
- *
5
- * `applyDeclaredValues` (`declared-value-closure.ts`) answers from `.env*`
6
- * config alone. `applyConfirmedFacts` (`confirmed-facts.ts`) answers from
7
- * human testimony alone, and — since `ConfirmedFact.environment` landed —
8
- * testimony can now be scoped to a *named* environment, not just an unscoped
9
- * blanket answer. This module is the picture that shows both kinds of
10
- * evidence side by side, per environment, without ever letting one stand in
11
- * for the other.
12
- *
13
- * ## The real case that forced this shape
14
- *
15
- * `sherpa-frontend`'s `import.meta.env.VITE_BACKEND_API_URL` today has, on
16
- * disk, in this worktree:
17
- *
18
- * - `"development"` → `http://localhost:8000`, **declared** — read from
19
- * `.env.development.local`, class A (DEC-244 Row 1).
20
- * - `"staging"` → `https://sherpa-backend-staging.up.railway.app`,
21
- * **asserted** — a human-confirmed `ConfirmedFact` with
22
- * `environment: "staging"`, class B. `"staging"` never appears in any
23
- * `.env*` filename here; the *only* reason this module knows it exists at
24
- * all is that a person named it on the fact.
25
- * - `"production"` — still entirely unaddressed, by either source, and
26
- * **still unnameable from anything this module reads.**
27
- *
28
- * ## Why `environment` is never inferred, only ever read
29
- *
30
- * `ConfirmedFact.environment`'s own doc is explicit: "human-supplied only,
31
- * never inferred." This module upholds that by construction — the only
32
- * places an environment name enters this picture are `resolve.ts`'s
33
- * `knownEnvironments` (from `.env*` **filenames**, DEC-223's own "never
34
- * guessed, always refused" rule) and `fact.environment` (typed as the human
35
- * literally set it). Nothing here parses `"staging"` out of a hostname; the
36
- * hostname's word "staging" and the fact's `environment: "staging"` are
37
- * correlated in this specific real case only because a *person* read the
38
- * same signal and typed the same word — this module never makes that
39
- * connection itself, and would behave identically if the two disagreed.
40
- *
41
- * ## Why `"closed"` is reserved for fully-declared rows
42
- *
43
- * A row where every named environment resolves — some from config, some from
44
- * testimony — could be called "closed." It is deliberately not: `state`
45
- * reaches `"closed"` only when **every** named environment's evidence is
46
- * `declared` (class A). One environment resting on testimony keeps the whole
47
- * row at `"partially-closed"`, even if nothing is technically unaddressed —
48
- * because a caller reading the single word `"closed"` must never have to
49
- * re-check `environments[].reliability` to find out whether that word is
50
- * hiding an unaudited assertion. This is the concrete answer to "what each
51
- * provenance earns, side by side" (DEC-244 Row 1): declared is A, asserted is
52
- * B, and the top-level state can never quietly promote a B into looking like
53
- * an A.
2
+ * DEC-244: a row closed by declared (`.env*`, class A) and asserted (human `ConfirmedFact`, class B)
3
+ * evidence at once, shown side by side, never collapsed. `environment` is read only, never inferred
4
+ * (DEC-223). `state` reaches "closed" only when every environment is declared — a B never looks like an A.
54
5
  */
55
6
  import type { ConfirmedFact, ReliabilityClass, UnresolvedRef } from "@descryy/ir";
56
7
  import type { DeclaredEnvValue } from "../ledger/resolve.ts";
@@ -61,10 +12,7 @@ export interface AssertedValue {
61
12
  readonly confirmedBy: string;
62
13
  readonly confirmedAt: string;
63
14
  }
64
- /**
65
- * One named environment — named by a `.env*` filename, a scoped
66
- * `ConfirmedFact`, or both — and everything either source says about it.
67
- */
15
+ /** One named environment (named by a `.env*` filename, a scoped `ConfirmedFact`, or both) and everything either source says. */
68
16
  export interface EnvironmentValue {
69
17
  readonly environment: string;
70
18
  readonly declaredValue: string | null;
@@ -93,16 +41,6 @@ export interface RowClosureApplication {
93
41
  /** Rows `askableHandle` refused outright: wrong class, unset, no handle. Untouched by either source. */
94
42
  readonly notAskable: readonly UnresolvedRef[];
95
43
  }
96
- /**
97
- * Describe every askable row against both sources of evidence at once.
98
- *
99
- * `declared` and `facts` are both pre-loaded by the caller — same
100
- * read-once-apply-many discipline `resolveAgainstDeclared`/
101
- * `applyConfirmedFacts` already follow. The fact-matching itself is not
102
- * re-derived here: `applyConfirmedFacts` is called once and its output
103
- * reused, so the `(repo, blockedBy)` scoping and the askable filter it
104
- * already enforces are not re-implemented a second, potentially-diverging
105
- * way.
106
- */
44
+ /** Describe every askable row against both evidence sources. `applyConfirmedFacts` output is reused, not re-derived. */
107
45
  export declare function describeRowClosures(refs: readonly UnresolvedRef[], declared: readonly DeclaredEnvValue[], facts: readonly ConfirmedFact[], repo: string): RowClosureApplication;
108
46
  //# sourceMappingURL=row-closure-picture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"row-closure-picture.d.ts","sourceRoot":"","sources":["../../src/query/row-closure-picture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIlF,OAAO,KAAK,EAAE,gBAAgB,EAA4B,MAAM,sBAAsB,CAAC;AAEvF,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAK5F,gHAAgH;AAChH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,+GAA+G;IAC/G,QAAQ,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6GAA6G;IAC7G,QAAQ,CAAC,YAAY,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnD,0GAA0G;IAC1G,QAAQ,CAAC,kBAAkB,EAAE,SAAS,aAAa,EAAE,CAAC;IACtD,qGAAqG;IACrG,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,wGAAwG;IACxG,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,aAAa,EAAE,EAC9B,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,IAAI,EAAE,MAAM,GACX,qBAAqB,CAoEvB"}
1
+ {"version":3,"file":"row-closure-picture.d.ts","sourceRoot":"","sources":["../../src/query/row-closure-picture.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIlF,OAAO,KAAK,EAAE,gBAAgB,EAA4B,MAAM,sBAAsB,CAAC;AAEvF,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAK5F,gHAAgH;AAChH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,gIAAgI;AAChI,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,+GAA+G;IAC/G,QAAQ,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6GAA6G;IAC7G,QAAQ,CAAC,YAAY,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnD,0GAA0G;IAC1G,QAAQ,CAAC,kBAAkB,EAAE,SAAS,aAAa,EAAE,CAAC;IACtD,qGAAqG;IACrG,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,wGAAwG;IACxG,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C;AAMD,wHAAwH;AACxH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,aAAa,EAAE,EAC9B,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,KAAK,EAAE,SAAS,aAAa,EAAE,EAC/B,IAAI,EAAE,MAAM,GACX,qBAAqB,CAkEvB"}
@@ -1,56 +1,7 @@
1
1
  /**
2
- * DEC-244, extended: the same row can be closed by two different kinds of
3
- * evidence at once, and they must never collapse into each other.
4
- *
5
- * `applyDeclaredValues` (`declared-value-closure.ts`) answers from `.env*`
6
- * config alone. `applyConfirmedFacts` (`confirmed-facts.ts`) answers from
7
- * human testimony alone, and — since `ConfirmedFact.environment` landed —
8
- * testimony can now be scoped to a *named* environment, not just an unscoped
9
- * blanket answer. This module is the picture that shows both kinds of
10
- * evidence side by side, per environment, without ever letting one stand in
11
- * for the other.
12
- *
13
- * ## The real case that forced this shape
14
- *
15
- * `sherpa-frontend`'s `import.meta.env.VITE_BACKEND_API_URL` today has, on
16
- * disk, in this worktree:
17
- *
18
- * - `"development"` → `http://localhost:8000`, **declared** — read from
19
- * `.env.development.local`, class A (DEC-244 Row 1).
20
- * - `"staging"` → `https://sherpa-backend-staging.up.railway.app`,
21
- * **asserted** — a human-confirmed `ConfirmedFact` with
22
- * `environment: "staging"`, class B. `"staging"` never appears in any
23
- * `.env*` filename here; the *only* reason this module knows it exists at
24
- * all is that a person named it on the fact.
25
- * - `"production"` — still entirely unaddressed, by either source, and
26
- * **still unnameable from anything this module reads.**
27
- *
28
- * ## Why `environment` is never inferred, only ever read
29
- *
30
- * `ConfirmedFact.environment`'s own doc is explicit: "human-supplied only,
31
- * never inferred." This module upholds that by construction — the only
32
- * places an environment name enters this picture are `resolve.ts`'s
33
- * `knownEnvironments` (from `.env*` **filenames**, DEC-223's own "never
34
- * guessed, always refused" rule) and `fact.environment` (typed as the human
35
- * literally set it). Nothing here parses `"staging"` out of a hostname; the
36
- * hostname's word "staging" and the fact's `environment: "staging"` are
37
- * correlated in this specific real case only because a *person* read the
38
- * same signal and typed the same word — this module never makes that
39
- * connection itself, and would behave identically if the two disagreed.
40
- *
41
- * ## Why `"closed"` is reserved for fully-declared rows
42
- *
43
- * A row where every named environment resolves — some from config, some from
44
- * testimony — could be called "closed." It is deliberately not: `state`
45
- * reaches `"closed"` only when **every** named environment's evidence is
46
- * `declared` (class A). One environment resting on testimony keeps the whole
47
- * row at `"partially-closed"`, even if nothing is technically unaddressed —
48
- * because a caller reading the single word `"closed"` must never have to
49
- * re-check `environments[].reliability` to find out whether that word is
50
- * hiding an unaudited assertion. This is the concrete answer to "what each
51
- * provenance earns, side by side" (DEC-244 Row 1): declared is A, asserted is
52
- * B, and the top-level state can never quietly promote a B into looking like
53
- * an A.
2
+ * DEC-244: a row closed by declared (`.env*`, class A) and asserted (human `ConfirmedFact`, class B)
3
+ * evidence at once, shown side by side, never collapsed. `environment` is read only, never inferred
4
+ * (DEC-223). `state` reaches "closed" only when every environment is declared — a B never looks like an A.
54
5
  */
55
6
  import { askableHandle } from "./refusal-questions.js";
56
7
  import { applyConfirmedFacts } from "./confirmed-facts.js";
@@ -61,17 +12,7 @@ const MIN_KNOWN_ENVIRONMENTS_FOR_CLOSED = 2;
61
12
  function isScoped(fact) {
62
13
  return fact.environment !== undefined;
63
14
  }
64
- /**
65
- * Describe every askable row against both sources of evidence at once.
66
- *
67
- * `declared` and `facts` are both pre-loaded by the caller — same
68
- * read-once-apply-many discipline `resolveAgainstDeclared`/
69
- * `applyConfirmedFacts` already follow. The fact-matching itself is not
70
- * re-derived here: `applyConfirmedFacts` is called once and its output
71
- * reused, so the `(repo, blockedBy)` scoping and the askable filter it
72
- * already enforces are not re-implemented a second, potentially-diverging
73
- * way.
74
- */
15
+ /** Describe every askable row against both evidence sources. `applyConfirmedFacts` output is reused, not re-derived. */
75
16
  export function describeRowClosures(refs, declared, facts, repo) {
76
17
  const factApplication = applyConfirmedFacts(refs, facts, repo);
77
18
  const factsByRef = new Map(factApplication.answered.map((m) => [m.ref, m.facts]));
@@ -99,10 +40,8 @@ export function describeRowClosures(refs, declared, facts, repo) {
99
40
  environmentNames.add(f.environment);
100
41
  const environments = [...environmentNames].sort().map((environment) => {
101
42
  const declaredEntry = resolution.resolved.find((r) => r.environment === environment);
102
- // First-write-wins is fine here: two scoped facts naming the same
103
- // environment is a producer-side data question, not this reader's to
104
- // adjudicate — surfacing one rather than silently averaging or
105
- // discarding is the honest minimum.
43
+ // First-write-wins: two scoped facts for one environment is a producer
44
+ // data question, not this reader's to adjudicate.
106
45
  const assertedEntry = scopedFacts.find((f) => f.environment === environment);
107
46
  const reliability = declaredEntry !== undefined ? DECLARED_VALUE_RELIABILITY : assertedEntry !== undefined ? "B" : null;
108
47
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"row-closure-picture.js","sourceRoot":"","sources":["../../src/query/row-closure-picture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"row-closure-picture.js","sourceRoot":"","sources":["../../src/query/row-closure-picture.ts"],"names":[],"mappings":"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"}