@telora/daemon 0.22.208 → 0.22.227

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 (248) hide show
  1. package/build-info.json +4 -3
  2. package/dist/backends/index.d.ts.map +1 -1
  3. package/dist/backends/index.js +3 -1
  4. package/dist/backends/index.js.map +1 -1
  5. package/dist/completion/advancement-stall-watchdog.d.ts.map +1 -1
  6. package/dist/completion/advancement-stall-watchdog.js +6 -2
  7. package/dist/completion/advancement-stall-watchdog.js.map +1 -1
  8. package/dist/completion/completion-decision.d.ts +10 -1
  9. package/dist/completion/completion-decision.d.ts.map +1 -1
  10. package/dist/completion/completion-decision.js +1 -1
  11. package/dist/completion/completion-decision.js.map +1 -1
  12. package/dist/completion/delivery-advancement-guard.d.ts +31 -16
  13. package/dist/completion/delivery-advancement-guard.d.ts.map +1 -1
  14. package/dist/completion/delivery-advancement-guard.js +22 -37
  15. package/dist/completion/delivery-advancement-guard.js.map +1 -1
  16. package/dist/completion/detector.d.ts.map +1 -1
  17. package/dist/completion/detector.js +3 -1
  18. package/dist/completion/detector.js.map +1 -1
  19. package/dist/completion/event-phases.d.ts +19 -8
  20. package/dist/completion/event-phases.d.ts.map +1 -1
  21. package/dist/completion/event-phases.js +67 -88
  22. package/dist/completion/event-phases.js.map +1 -1
  23. package/dist/completion/event.d.ts +12 -9
  24. package/dist/completion/event.d.ts.map +1 -1
  25. package/dist/completion/event.js +6 -3
  26. package/dist/completion/event.js.map +1 -1
  27. package/dist/completion/index.js +1 -1
  28. package/dist/completion/progress-snapshot.d.ts +13 -9
  29. package/dist/completion/progress-snapshot.d.ts.map +1 -1
  30. package/dist/completion/progress-snapshot.js +16 -13
  31. package/dist/completion/progress-snapshot.js.map +1 -1
  32. package/dist/completion/reengagement-redrive.d.ts +8 -1
  33. package/dist/completion/reengagement-redrive.d.ts.map +1 -1
  34. package/dist/completion/reengagement-redrive.js +16 -2
  35. package/dist/completion/reengagement-redrive.js.map +1 -1
  36. package/dist/completion/review-defect-detector.d.ts +58 -18
  37. package/dist/completion/review-defect-detector.d.ts.map +1 -1
  38. package/dist/completion/review-defect-detector.js +62 -27
  39. package/dist/completion/review-defect-detector.js.map +1 -1
  40. package/dist/completion/review-exit-attribution.d.ts +6 -3
  41. package/dist/completion/review-exit-attribution.d.ts.map +1 -1
  42. package/dist/completion/review-exit-attribution.js +9 -7
  43. package/dist/completion/review-exit-attribution.js.map +1 -1
  44. package/dist/completion/review-exit-deps.d.ts +2 -0
  45. package/dist/completion/review-exit-deps.d.ts.map +1 -1
  46. package/dist/completion/review-exit-deps.js +3 -0
  47. package/dist/completion/review-exit-deps.js.map +1 -1
  48. package/dist/completion/review-exit-evidence.d.ts +8 -0
  49. package/dist/completion/review-exit-evidence.d.ts.map +1 -1
  50. package/dist/completion/review-exit-evidence.js +39 -27
  51. package/dist/completion/review-exit-evidence.js.map +1 -1
  52. package/dist/completion/review-exit-foreign-findings.d.ts +5 -1
  53. package/dist/completion/review-exit-foreign-findings.d.ts.map +1 -1
  54. package/dist/completion/review-exit-foreign-findings.js +4 -4
  55. package/dist/completion/review-exit-foreign-findings.js.map +1 -1
  56. package/dist/completion/review-exit-phase.js +4 -4
  57. package/dist/completion/review-exit-phase.js.map +1 -1
  58. package/dist/completion/state-cascade.d.ts.map +1 -1
  59. package/dist/completion/state-cascade.js +11 -19
  60. package/dist/completion/state-cascade.js.map +1 -1
  61. package/dist/completion/team-progress-measure.d.ts +70 -0
  62. package/dist/completion/team-progress-measure.d.ts.map +1 -0
  63. package/dist/completion/team-progress-measure.js +285 -0
  64. package/dist/completion/team-progress-measure.js.map +1 -0
  65. package/dist/completion/team-stillness.d.ts +76 -0
  66. package/dist/completion/team-stillness.d.ts.map +1 -0
  67. package/dist/completion/team-stillness.js +96 -0
  68. package/dist/completion/team-stillness.js.map +1 -0
  69. package/dist/completion/worker-wait.d.ts +84 -0
  70. package/dist/completion/worker-wait.d.ts.map +1 -0
  71. package/dist/completion/worker-wait.js +89 -0
  72. package/dist/completion/worker-wait.js.map +1 -0
  73. package/dist/delivery/delivery-advance-block.d.ts.map +1 -1
  74. package/dist/delivery/delivery-advance-block.js +1 -2
  75. package/dist/delivery/delivery-advance-block.js.map +1 -1
  76. package/dist/delivery/delivery-reconciler.d.ts +3 -3
  77. package/dist/focus/focus-lifecycle.d.ts.map +1 -1
  78. package/dist/focus/focus-lifecycle.js +7 -1
  79. package/dist/focus/focus-lifecycle.js.map +1 -1
  80. package/dist/focus/focus-team-state.js +1 -1
  81. package/dist/focus/focus-worktree-state.d.ts.map +1 -1
  82. package/dist/focus/focus-worktree-state.js +2 -1
  83. package/dist/focus/focus-worktree-state.js.map +1 -1
  84. package/dist/git/focus-integration-sync.d.ts +42 -4
  85. package/dist/git/focus-integration-sync.d.ts.map +1 -1
  86. package/dist/git/focus-integration-sync.js +53 -9
  87. package/dist/git/focus-integration-sync.js.map +1 -1
  88. package/dist/git/types.d.ts.map +1 -1
  89. package/dist/git/types.js +4 -2
  90. package/dist/git/types.js.map +1 -1
  91. package/dist/merge/merge-back-loop.d.ts.map +1 -1
  92. package/dist/merge/merge-back-loop.js +0 -1
  93. package/dist/merge/merge-back-loop.js.map +1 -1
  94. package/dist/prompt-sections/persona-sections.d.ts +14 -0
  95. package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
  96. package/dist/prompt-sections/persona-sections.js +50 -19
  97. package/dist/prompt-sections/persona-sections.js.map +1 -1
  98. package/dist/prompt-sections/testing-standard.d.ts +4 -1
  99. package/dist/prompt-sections/testing-standard.d.ts.map +1 -1
  100. package/dist/prompt-sections/testing-standard.js +14 -4
  101. package/dist/prompt-sections/testing-standard.js.map +1 -1
  102. package/dist/queries/deliveries.d.ts.map +1 -1
  103. package/dist/queries/deliveries.js +3 -1
  104. package/dist/queries/deliveries.js.map +1 -1
  105. package/dist/queries/delivery-gate-state.js +1 -1
  106. package/dist/queries/escalation-suppression.js +1 -1
  107. package/dist/queries/escalations.js +1 -1
  108. package/dist/queries/focus-integration-conflict.d.ts +7 -4
  109. package/dist/queries/focus-integration-conflict.d.ts.map +1 -1
  110. package/dist/queries/focus-integration-conflict.js +6 -3
  111. package/dist/queries/focus-integration-conflict.js.map +1 -1
  112. package/dist/queries/review-finding-facts.d.ts +38 -0
  113. package/dist/queries/review-finding-facts.d.ts.map +1 -0
  114. package/dist/queries/review-finding-facts.js +43 -0
  115. package/dist/queries/review-finding-facts.js.map +1 -0
  116. package/dist/queries/schemas.d.ts +15 -0
  117. package/dist/queries/schemas.d.ts.map +1 -1
  118. package/dist/queries/schemas.js +12 -1
  119. package/dist/queries/schemas.js.map +1 -1
  120. package/dist/queries/shortfall-park-record.d.ts +6 -1
  121. package/dist/queries/shortfall-park-record.d.ts.map +1 -1
  122. package/dist/queries/shortfall-park-record.js.map +1 -1
  123. package/dist/queries/shortfall-rulings.d.ts +14 -2
  124. package/dist/queries/shortfall-rulings.d.ts.map +1 -1
  125. package/dist/queries/shortfall-rulings.js +17 -3
  126. package/dist/queries/shortfall-rulings.js.map +1 -1
  127. package/dist/queries/verification.js +1 -1
  128. package/dist/queries/verify-own-holds.d.ts.map +1 -1
  129. package/dist/queries/verify-own-holds.js +1 -0
  130. package/dist/queries/verify-own-holds.js.map +1 -1
  131. package/dist/spawn/helpers.d.ts.map +1 -1
  132. package/dist/spawn/helpers.js +9 -1
  133. package/dist/spawn/helpers.js.map +1 -1
  134. package/dist/spawn/lead-continuation.d.ts +10 -2
  135. package/dist/spawn/lead-continuation.d.ts.map +1 -1
  136. package/dist/spawn/lead-continuation.js +39 -22
  137. package/dist/spawn/lead-continuation.js.map +1 -1
  138. package/dist/spawn/one-shot-model.d.ts.map +1 -1
  139. package/dist/spawn/one-shot-model.js +1 -0
  140. package/dist/spawn/one-shot-model.js.map +1 -1
  141. package/dist/spawn/worktree-session.d.ts.map +1 -1
  142. package/dist/spawn/worktree-session.js +11 -1
  143. package/dist/spawn/worktree-session.js.map +1 -1
  144. package/dist/testing/fixtures/conflicting-repo.d.ts +17 -0
  145. package/dist/testing/fixtures/conflicting-repo.d.ts.map +1 -1
  146. package/dist/testing/fixtures/conflicting-repo.js +31 -0
  147. package/dist/testing/fixtures/conflicting-repo.js.map +1 -1
  148. package/dist/testing/fixtures/index.d.ts.map +1 -1
  149. package/dist/testing/fixtures/index.js +1 -2
  150. package/dist/testing/fixtures/index.js.map +1 -1
  151. package/dist/types/focus.d.ts +59 -26
  152. package/dist/types/focus.d.ts.map +1 -1
  153. package/dist/types/index.js +1 -1
  154. package/dist/verify/commit-verdict-pull.d.ts +28 -3
  155. package/dist/verify/commit-verdict-pull.d.ts.map +1 -1
  156. package/dist/verify/commit-verdict-pull.js +160 -23
  157. package/dist/verify/commit-verdict-pull.js.map +1 -1
  158. package/dist/verify/credit-rearm.d.ts.map +1 -1
  159. package/dist/verify/credit-rearm.js +72 -17
  160. package/dist/verify/credit-rearm.js.map +1 -1
  161. package/dist/verify/default-on-guards.d.ts +54 -8
  162. package/dist/verify/default-on-guards.d.ts.map +1 -1
  163. package/dist/verify/default-on-guards.js +132 -17
  164. package/dist/verify/default-on-guards.js.map +1 -1
  165. package/dist/verify/explicit-rearm.d.ts.map +1 -1
  166. package/dist/verify/explicit-rearm.js +1 -0
  167. package/dist/verify/explicit-rearm.js.map +1 -1
  168. package/dist/verify/explicit-row-selection.d.ts +47 -0
  169. package/dist/verify/explicit-row-selection.d.ts.map +1 -0
  170. package/dist/verify/explicit-row-selection.js +37 -0
  171. package/dist/verify/explicit-row-selection.js.map +1 -0
  172. package/dist/verify/gate-run-registry.d.ts.map +1 -1
  173. package/dist/verify/gate-run-registry.js +2 -0
  174. package/dist/verify/gate-run-registry.js.map +1 -1
  175. package/dist/verify/parked-shortfall-reuse.d.ts +194 -0
  176. package/dist/verify/parked-shortfall-reuse.d.ts.map +1 -0
  177. package/dist/verify/parked-shortfall-reuse.js +310 -0
  178. package/dist/verify/parked-shortfall-reuse.js.map +1 -0
  179. package/dist/verify/reselection-log.d.ts +22 -0
  180. package/dist/verify/reselection-log.d.ts.map +1 -0
  181. package/dist/verify/reselection-log.js +87 -0
  182. package/dist/verify/reselection-log.js.map +1 -0
  183. package/dist/verify/shortfall-park.d.ts +8 -1
  184. package/dist/verify/shortfall-park.d.ts.map +1 -1
  185. package/dist/verify/shortfall-park.js +17 -3
  186. package/dist/verify/shortfall-park.js.map +1 -1
  187. package/dist/verify/shortfall-repeat.d.ts.map +1 -1
  188. package/dist/verify/shortfall-repeat.js +7 -2
  189. package/dist/verify/shortfall-repeat.js.map +1 -1
  190. package/dist/verify/shortfall-rulings.d.ts +93 -6
  191. package/dist/verify/shortfall-rulings.d.ts.map +1 -1
  192. package/dist/verify/shortfall-rulings.js +69 -12
  193. package/dist/verify/shortfall-rulings.js.map +1 -1
  194. package/dist/verify/stall-detector-config.d.ts.map +1 -1
  195. package/dist/verify/stall-detector-config.js +2 -1
  196. package/dist/verify/stall-detector-config.js.map +1 -1
  197. package/dist/verify/stall-detectors.d.ts +6 -4
  198. package/dist/verify/stall-detectors.d.ts.map +1 -1
  199. package/dist/verify/stall-detectors.js +9 -6
  200. package/dist/verify/stall-detectors.js.map +1 -1
  201. package/dist/verify/stalled-team-backstop.d.ts +8 -2
  202. package/dist/verify/stalled-team-backstop.d.ts.map +1 -1
  203. package/dist/verify/stalled-team-backstop.js +15 -11
  204. package/dist/verify/stalled-team-backstop.js.map +1 -1
  205. package/dist/verify/team-stall-reapers.d.ts +28 -0
  206. package/dist/verify/team-stall-reapers.d.ts.map +1 -0
  207. package/dist/verify/team-stall-reapers.js +23 -0
  208. package/dist/verify/team-stall-reapers.js.map +1 -0
  209. package/dist/verify/verification-attribution-deps.d.ts +1 -1
  210. package/dist/verify/verification-attribution-deps.d.ts.map +1 -1
  211. package/dist/verify/verification-attribution-deps.js +20 -1
  212. package/dist/verify/verification-attribution-deps.js.map +1 -1
  213. package/dist/verify/verification-boundary-env.d.ts.map +1 -1
  214. package/dist/verify/verification-boundary-env.js +23 -9
  215. package/dist/verify/verification-boundary-env.js.map +1 -1
  216. package/dist/verify/verification-checkout.d.ts +1 -1
  217. package/dist/verify/verification-checkout.d.ts.map +1 -1
  218. package/dist/verify/verification-checkout.js.map +1 -1
  219. package/dist/verify/verification-commit-sharing.d.ts.map +1 -1
  220. package/dist/verify/verification-commit-sharing.js +14 -3
  221. package/dist/verify/verification-commit-sharing.js.map +1 -1
  222. package/dist/verify/verification-config.d.ts.map +1 -1
  223. package/dist/verify/verification-config.js +1 -20
  224. package/dist/verify/verification-config.js.map +1 -1
  225. package/dist/verify/verification-default-on.d.ts +4 -1
  226. package/dist/verify/verification-default-on.d.ts.map +1 -1
  227. package/dist/verify/verification-default-on.js +29 -2
  228. package/dist/verify/verification-default-on.js.map +1 -1
  229. package/dist/verify/verification-deps-default.d.ts.map +1 -1
  230. package/dist/verify/verification-deps-default.js +13 -0
  231. package/dist/verify/verification-deps-default.js.map +1 -1
  232. package/dist/verify/verification-deps.d.ts +38 -0
  233. package/dist/verify/verification-deps.d.ts.map +1 -1
  234. package/dist/verify/verification-deps.js +2 -1
  235. package/dist/verify/verification-deps.js.map +1 -1
  236. package/dist/verify/verification-engine.d.ts.map +1 -1
  237. package/dist/verify/verification-engine.js +44 -15
  238. package/dist/verify/verification-engine.js.map +1 -1
  239. package/dist/verify/verification-feedback.d.ts.map +1 -1
  240. package/dist/verify/verification-feedback.js +1 -19
  241. package/dist/verify/verification-feedback.js.map +1 -1
  242. package/dist/verify/verify-restatement.d.ts.map +1 -1
  243. package/dist/verify/verify-restatement.js +5 -1
  244. package/dist/verify/verify-restatement.js.map +1 -1
  245. package/dist/worktree/provision.d.ts.map +1 -1
  246. package/dist/worktree/provision.js +3 -1
  247. package/dist/worktree/provision.js.map +1 -1
  248. package/package.json +2 -2
@@ -1,6 +1,7 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
2
  // Pinned by: none -- no test imports this module directly (baselined; see lint:pinned-by)
3
3
  // PINNED-BY-END
4
+ import { computeIssueFingerprint, teamProgressMoved } from './team-progress-measure.js';
4
5
  /**
5
6
  * Canonical JSON stringify with object keys sorted recursively. Plain
6
7
  * JSON.stringify is key-insertion-order sensitive, so two LOGICALLY identical
@@ -59,8 +60,12 @@ function gateFingerprint(gateState) {
59
60
  * kills it. The arg is optional with a null default so the many existing
60
61
  * two-arg callers (and tests) keep compiling; callers on the watchdog path
61
62
  * resolve the head sha from the focus worktree and pass it through.
63
+ *
64
+ * And the issue fingerprint plus the TEAM-ACTIVITY axes (agent activity, the
65
+ * uncommitted diff) of the one progress measure (team-progress-measure.ts), so a
66
+ * team whose workers are editing is not read as idle between commits.
62
67
  */
63
- export function takeProgressSnapshot(deliveries, issues, focusHeadSha = null) {
68
+ export function takeProgressSnapshot(deliveries, issues, focusHeadSha = null, activity = null) {
64
69
  const deliveryStatuses = {};
65
70
  const deliveryGateFingerprints = {};
66
71
  const deliveryIterations = {};
@@ -75,26 +80,24 @@ export function takeProgressSnapshot(deliveries, issues, focusHeadSha = null) {
75
80
  deliveryGateFingerprints,
76
81
  deliveryIterations,
77
82
  focusHeadSha,
83
+ issueFingerprint: computeIssueFingerprint(issues.map(i => ({ id: i.id, status: i.status ?? '' }))),
84
+ activity,
78
85
  };
79
86
  }
80
87
  /**
81
- * True when two snapshots are identical across ALL progress axes: delivery
82
- * statuses, total issue count, per-delivery gate_state fingerprint,
83
- * per-delivery iteration_count, AND the focus worktree HEAD sha. Any moving
84
- * axis -- the two daemon-owned ones OR the team-owned git-activity one -- is
85
- * progress, so snapshotsEqual returns false. The head-sha comparison is what
86
- * makes a fresh commit on the focus branch reset the no-progress counter: a
87
- * different sha => not equal => madeProgress true.
88
+ * True when two snapshots are identical across ALL progress axes: the ONE
89
+ * progress measure's axes (delivery statuses, issue fingerprint, HEAD, agent
90
+ * activity, uncommitted diff -- teamProgressMoved), plus the total issue count
91
+ * and the two daemon-owned axes (per-delivery gate_state fingerprint and
92
+ * iteration_count). Any moving axis is progress, so snapshotsEqual returns
93
+ * false.
88
94
  */
89
95
  export function snapshotsEqual(a, b) {
90
96
  if (a.totalIssueCount !== b.totalIssueCount)
91
97
  return false;
92
- // A moving HEAD on the focus branch is forward motion (the team committed
93
- // code this cycle) even when every DB-state axis is flat.
94
- if (a.focusHeadSha !== b.focusHeadSha)
98
+ if (teamProgressMoved(a, b))
95
99
  return false;
96
- return (recordsEqual(a.deliveryStatuses, b.deliveryStatuses) &&
97
- recordsEqual(a.deliveryGateFingerprints, b.deliveryGateFingerprints) &&
100
+ return (recordsEqual(a.deliveryGateFingerprints, b.deliveryGateFingerprints) &&
98
101
  recordsEqual(a.deliveryIterations, b.deliveryIterations));
99
102
  }
100
103
  /** True when two string|number maps have identical keys and values. */
@@ -1 +1 @@
1
- {"version":3,"file":"progress-snapshot.js","sourceRoot":"","sources":["../../src/completion/progress-snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progress-snapshot.js","sourceRoot":"","sources":["../../src/completion/progress-snapshot.ts"],"names":[],"mappings":"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"}
@@ -33,5 +33,12 @@ export declare function fallbackScheduleReDrive(fn: () => void, delayMs: number)
33
33
  * floor has elapsed it hands off (or terminates) rather than deferring again --
34
34
  * the loop converges and the anti-spam bound (<=1 handoff per interval) holds.
35
35
  */
36
- export declare function scheduleDeferredReDrive(ctx: CompletionEventContext, deps: CompletionEventDeps, delayMs: number): void;
36
+ export declare function scheduleDeferredReDrive(ctx: CompletionEventContext, deps: CompletionEventDeps, delayMs: number,
37
+ /**
38
+ * Asked when the timer fires: a number means "still holding -- check again
39
+ * in that many ms" (no re-drive, no cycle), null means re-drive now. Used by
40
+ * the wait on live workers (completion/worker-wait.ts), so a worker that keeps
41
+ * reporting costs the lead no completion cycles at all.
42
+ */
43
+ recheck?: () => number | null | Promise<number | null>): void;
37
44
  //# sourceMappingURL=reengagement-redrive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reengagement-redrive.d.ts","sourceRoot":"","sources":["../../src/completion/reengagement-redrive.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAM9E;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAInF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,sBAAsB,EAC3B,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,GACd,IAAI,CAiCN"}
1
+ {"version":3,"file":"reengagement-redrive.d.ts","sourceRoot":"","sources":["../../src/completion/reengagement-redrive.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAM9E;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAInF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,sBAAsB,EAC3B,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM;AACf;;;;;GAKG;AACH,OAAO,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GACrD,IAAI,CAwCN"}
@@ -27,7 +27,14 @@ export function fallbackScheduleReDrive(fn, delayMs) {
27
27
  * floor has elapsed it hands off (or terminates) rather than deferring again --
28
28
  * the loop converges and the anti-spam bound (<=1 handoff per interval) holds.
29
29
  */
30
- export function scheduleDeferredReDrive(ctx, deps, delayMs) {
30
+ export function scheduleDeferredReDrive(ctx, deps, delayMs,
31
+ /**
32
+ * Asked when the timer fires: a number means "still holding -- check again
33
+ * in that many ms" (no re-drive, no cycle), null means re-drive now. Used by
34
+ * the wait on live workers (completion/worker-wait.ts), so a worker that keeps
35
+ * reporting costs the lead no completion cycles at all.
36
+ */
37
+ recheck) {
31
38
  const { teamState } = ctx;
32
39
  // Deferral resets the completion detector so a genuine future completion is
33
40
  // still observed; the two halves of "defer" (reset + schedule) live together
@@ -54,7 +61,14 @@ export function scheduleDeferredReDrive(ctx, deps, delayMs) {
54
61
  return;
55
62
  if (teamState.leadPid != null && !isAlive(teamState.leadPid))
56
63
  return;
57
- void reDrive(ctx, deps).catch(err => {
64
+ void (async () => {
65
+ const again = recheck ? await recheck() : null;
66
+ if (again !== null) {
67
+ scheduleDeferredReDrive(ctx, deps, again, recheck);
68
+ return;
69
+ }
70
+ await reDrive(ctx, deps);
71
+ })().catch(err => {
58
72
  log.warn(`Deferred re-drive for "${ctx.focusName}" failed: ${err.message}`);
59
73
  });
60
74
  }, delayMs);
@@ -1 +1 @@
1
- {"version":3,"file":"reengagement-redrive.js","sourceRoot":"","sources":["../../src/completion/reengagement-redrive.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,yEAAyE;AACzE,gBAAgB;AAmBhB,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,EAAc,EAAE,OAAe;IACrE,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACtC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAChB,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAA2B,EAC3B,IAAyB,EACzB,OAAe;IAEf,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;IAC1B,4EAA4E;IAC5E,6EAA6E;IAC7E,wDAAwD;IACxD,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAC/B,4EAA4E;IAC5E,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;IAC5B,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC;IAEpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,4EAA4E;QAC5E,2EAA2E;QAC3E,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,uBAAuB,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,kBAAkB,CAAC;IAEvD,SAAS,CAAC,aAAa,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtC,kEAAkE;QAClE,iEAAiE;QACjE,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC;QACpC,sEAAsE;QACtE,6EAA6E;QAC7E,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW;YAAE,OAAO;QAC5C,IAAI,SAAS,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO;QACrE,KAAK,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAClC,GAAG,CAAC,IAAI,CACN,0BAA0B,GAAG,CAAC,SAAS,aAAc,GAAa,CAAC,OAAO,EAAE,CAC7E,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,OAAO,CAAC,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"reengagement-redrive.js","sourceRoot":"","sources":["../../src/completion/reengagement-redrive.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,yEAAyE;AACzE,gBAAgB;AAmBhB,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,EAAc,EAAE,OAAe;IACrE,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACtC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAChB,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAA2B,EAC3B,IAAyB,EACzB,OAAe;AACf;;;;;GAKG;AACH,OAAsD;IAEtD,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;IAC1B,4EAA4E;IAC5E,6EAA6E;IAC7E,wDAAwD;IACxD,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAC/B,4EAA4E;IAC5E,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;IAC5B,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC;IAEpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,4EAA4E;QAC5E,2EAA2E;QAC3E,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,uBAAuB,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,kBAAkB,CAAC;IAEvD,SAAS,CAAC,aAAa,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtC,kEAAkE;QAClE,iEAAiE;QACjE,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC;QACpC,sEAAsE;QACtE,6EAA6E;QAC7E,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW;YAAE,OAAO;QAC5C,IAAI,SAAS,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO;QACrE,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,uBAAuB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACf,GAAG,CAAC,IAAI,CACN,0BAA0B,GAAG,CAAC,SAAS,aAAc,GAAa,CAAC,OAAO,EAAE,CAC7E,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,OAAO,CAAC,CAAC;AACd,CAAC"}
@@ -49,36 +49,76 @@ export declare function reviewFiledIssueExists(issues: FocusIssueInfo[], reviewR
49
49
  /**
50
50
  * Whether a priority label is an explicit, low (deferrable) severity. Null,
51
51
  * empty, P0, and P1 are all NOT deferrable.
52
+ *
53
+ * This is the FALLBACK of isBlockingReviewFinding only, for a finding with no
54
+ * recorded class. Do not call it to decide whether a review finding blocks --
55
+ * call isBlockingReviewFinding (pinned by review-finding-blocking-predicate.test.ts,
56
+ * which fails on any non-test caller outside this module).
52
57
  */
53
58
  export declare function isLowPriority(priority: string | null | undefined): boolean;
59
+ /**
60
+ * The RECORDED class of a review finding, as the review filed it: `blocking`
61
+ * when a not_met acceptance criterion names it (it falsifies an agreed
62
+ * criterion), `concern` when none does. Read from the product-api action
63
+ * `focus_review_filed_issue_ids` (`findingClasses`, keyed by issue id) --
64
+ * queries/review-finding-facts.ts.
65
+ */
66
+ export type ReviewFindingClass = 'blocking' | 'concern';
67
+ /**
68
+ * Recorded finding classes keyed by issue id. An issue ABSENT from the map has
69
+ * no recorded fact (an older edge, or a review that linked no criterion) and is
70
+ * classified by the priority fallback.
71
+ */
72
+ export type ReviewFindingClasses = ReadonlyMap<string, ReviewFindingClass>;
73
+ /**
74
+ * THE blocking predicate for a review-filed finding -- the ONE place the daemon
75
+ * decides whether a review finding may hold its delivery (route it to
76
+ * verify_failed, target it with a gaps_found verdict, keep the review-cycle
77
+ * count climbing). Every such decision -- the review exit's evidence
78
+ * (review-exit-evidence.ts), the verify routing it tags for the reconciler
79
+ * (delivery-reconciler.ts `deferrable`), the review-cycle cap's "open blocking
80
+ * finding" (review-cycle-cap.ts, fed openBlockingFindings), delivery
81
+ * attribution (review-exit-attribution.ts) and foreign-finding location
82
+ * (review-exit-foreign-findings.ts) -- reads it; none reads priority directly.
83
+ *
84
+ * - a RECORDED fact wins, whatever the priority: `blocking` blocks, `concern`
85
+ * does not. A finding blocks by falsifying an agreed criterion, not by the
86
+ * severity a reviewer typed.
87
+ * - NO recorded fact -> today's priority rule: only an explicit P2/P3 is
88
+ * non-blocking; P0/P1 and unset block (the bar is never lowered by absence).
89
+ *
90
+ * It classifies severity only; whether the issue is review-filed and open is
91
+ * the caller's filter (isReviewFiledIssue / isReviewFiledComplete).
92
+ */
93
+ export declare function isBlockingReviewFinding(issue: Pick<FocusIssueInfo, 'id' | 'priority'>, findingClasses?: ReviewFindingClasses): boolean;
54
94
  /**
55
95
  * Whether an issue is a DEFERRABLE review note: a review-filed, still-open
56
- * issue (per isReviewFiledIssue) whose priority is an explicit low severity
57
- * (P2/P3). A deferrable note must NOT route a verify delivery to verify_failed
58
- * -- the review should converge (approve) and leave the note tracked.
96
+ * issue (per isReviewFiledIssue) that is NOT a blocking finding
97
+ * (isBlockingReviewFinding -- a recorded `concern`, or, with no recorded fact,
98
+ * an explicit P2/P3). A deferrable note must NOT route a verify delivery to
99
+ * verify_failed -- the review should converge (approve) and leave the note
100
+ * tracked.
59
101
  *
60
- * Anything that is review-filed but P0/P1 or unprioritized is BLOCKING, and any
61
- * open work that is NOT review-filed (e.g. pre-existing coding work) is also
62
- * blocking. Deferrability is a property of low-severity review triage notes
63
- * only.
102
+ * Any open work that is NOT review-filed (e.g. pre-existing coding work) is
103
+ * blocking. Deferrability is a property of review findings only.
64
104
  */
65
- export declare function isDeferrableReviewNote(issue: Pick<FocusIssueInfo, 'createdByRoleId' | 'createdAt' | 'status' | 'priority'>, reviewRequestedAt: string | null): boolean;
105
+ export declare function isDeferrableReviewNote(issue: Pick<FocusIssueInfo, 'id' | 'createdByRoleId' | 'createdAt' | 'status' | 'priority'>, reviewRequestedAt: string | null, findingClasses?: ReviewFindingClasses): boolean;
66
106
  /**
67
107
  * Filter a focus's issues to the open, review-filed notes that are deferrable
68
- * (low severity). The caller uses the ids to mark the matching reconciler
108
+ * (not blocking). The caller uses the ids to mark the matching reconciler
69
109
  * issues as `deferrable` so the verify-routing reconciler does not treat them
70
110
  * as blocking open work.
71
111
  */
72
- export declare function filterDeferrableReviewNotes(issues: FocusIssueInfo[], reviewRequestedAt: string | null): FocusIssueInfo[];
112
+ export declare function filterDeferrableReviewNotes(issues: FocusIssueInfo[], reviewRequestedAt: string | null, findingClasses?: ReviewFindingClasses): FocusIssueInfo[];
73
113
  /**
74
114
  * Returns true when there is at least one BLOCKING review-filed issue since the
75
- * most recent review pass -- a review-filed, still-open issue that is NOT a
76
- * deferrable low-severity note (i.e. P0/P1 or unprioritized). This is the gate
77
- * for the review_missing_report notice: a review that filed ONLY deferrable
78
- * notes converged cleanly and must not raise the "review skipped its outcome"
115
+ * most recent review pass -- a review-filed, still-open issue that is a
116
+ * blocking finding (isBlockingReviewFinding). This is the gate for the
117
+ * review_missing_report notice: a review that filed ONLY deferrable notes
118
+ * converged cleanly and must not raise the "review skipped its outcome"
79
119
  * escalation.
80
120
  */
81
- export declare function blockingReviewFiledIssueExists(issues: FocusIssueInfo[], reviewRequestedAt: string | null): boolean;
121
+ export declare function blockingReviewFiledIssueExists(issues: FocusIssueInfo[], reviewRequestedAt: string | null, findingClasses?: ReviewFindingClasses): boolean;
82
122
  /**
83
123
  * Time-independent review-filed test: the issue is a member of the focus's
84
124
  * review-filed id union AND is still open.
@@ -89,7 +129,7 @@ export declare function isReviewFiledComplete(issue: Pick<FocusIssueInfo, 'id' |
89
129
  /** Complete-set counterpart of reviewFiledIssueExists. */
90
130
  export declare function reviewFiledIssueExistsComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null): boolean;
91
131
  /** Complete-set counterpart of blockingReviewFiledIssueExists. */
92
- export declare function blockingReviewFiledIssueExistsComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null): boolean;
132
+ export declare function blockingReviewFiledIssueExistsComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null, findingClasses?: ReviewFindingClasses): boolean;
93
133
  /**
94
134
  * Complete-set counterpart of blockingReviewFiledIssueExists returning the LIST
95
135
  * (not just existence): the OPEN, BLOCKING review-filed issues on the focus. Used
@@ -98,7 +138,7 @@ export declare function blockingReviewFiledIssueExistsComplete(issues: FocusIssu
98
138
  * findings without opening the daemon log, rather than reading the breaker's old
99
139
  * untested "there was no work left to route" assertion.
100
140
  */
101
- export declare function filterBlockingReviewFiledComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null): FocusIssueInfo[];
141
+ export declare function filterBlockingReviewFiledComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null, findingClasses?: ReviewFindingClasses): FocusIssueInfo[];
102
142
  /** Complete-set counterpart of filterDeferrableReviewNotes. */
103
- export declare function filterDeferrableReviewNotesComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null): FocusIssueInfo[];
143
+ export declare function filterDeferrableReviewNotesComplete(issues: FocusIssueInfo[], reviewFiledIds: ReadonlySet<string>, reviewRequestedAt: string | null, findingClasses?: ReviewFindingClasses): FocusIssueInfo[];
104
144
  //# sourceMappingURL=review-defect-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"review-defect-detector.d.ts","sourceRoot":"","sources":["../../src/completion/review-defect-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-defect-detector.d.ts","sourceRoot":"","sources":["../../src/completion/review-defect-detector.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
2
  // Pinned by: packages/daemon/src/completion/review-defect-loop.test.ts,
3
- // packages/daemon/src/completion/review-deferrable-classification.test.ts
3
+ // packages/daemon/src/completion/review-deferrable-classification.test.ts,
4
+ // packages/daemon/src/completion/review-finding-blocking-predicate.test.ts,
5
+ // packages/daemon/src/completion/review-finding-class-routing.test.ts
4
6
  // PINNED-BY-END
5
7
  import { OPEN_ISSUE_STATUSES } from '../shell/constants.js';
6
8
  import { loadEnvConfig } from '@telora/daemon-core';
@@ -80,8 +82,9 @@ export function reviewFiledIssueExists(issues, reviewRequestedAt) {
80
82
  }
81
83
  // ── Deferrability classification ──────────────────────────────────────────
82
84
  /**
83
- * Priority labels that mark a review-filed note as DEFERRABLE (low severity,
84
- * acceptable to defer past the verify gate). The blocking set is everything
85
+ * Priority labels that mark a review-filed note as DEFERRABLE when NO finding
86
+ * class is recorded for it (the fallback inside isBlockingReviewFinding -- a
87
+ * recorded blocking/concern fact always wins). The blocking set is everything
85
88
  * else -- P0/P1 AND a null/unset priority. The asymmetry is deliberate: the
86
89
  * control loop moves reality toward intent and never lowers the bar, so an
87
90
  * unprioritized note is treated as BLOCKING (route to verify_failed), not
@@ -91,45 +94,77 @@ const DEFERRABLE_PRIORITIES = new Set(['P2', 'P3']);
91
94
  /**
92
95
  * Whether a priority label is an explicit, low (deferrable) severity. Null,
93
96
  * empty, P0, and P1 are all NOT deferrable.
97
+ *
98
+ * This is the FALLBACK of isBlockingReviewFinding only, for a finding with no
99
+ * recorded class. Do not call it to decide whether a review finding blocks --
100
+ * call isBlockingReviewFinding (pinned by review-finding-blocking-predicate.test.ts,
101
+ * which fails on any non-test caller outside this module).
94
102
  */
95
103
  export function isLowPriority(priority) {
96
104
  if (!priority)
97
105
  return false;
98
106
  return DEFERRABLE_PRIORITIES.has(priority.trim().toUpperCase());
99
107
  }
108
+ const NO_RECORDED_CLASSES = new Map();
109
+ /**
110
+ * THE blocking predicate for a review-filed finding -- the ONE place the daemon
111
+ * decides whether a review finding may hold its delivery (route it to
112
+ * verify_failed, target it with a gaps_found verdict, keep the review-cycle
113
+ * count climbing). Every such decision -- the review exit's evidence
114
+ * (review-exit-evidence.ts), the verify routing it tags for the reconciler
115
+ * (delivery-reconciler.ts `deferrable`), the review-cycle cap's "open blocking
116
+ * finding" (review-cycle-cap.ts, fed openBlockingFindings), delivery
117
+ * attribution (review-exit-attribution.ts) and foreign-finding location
118
+ * (review-exit-foreign-findings.ts) -- reads it; none reads priority directly.
119
+ *
120
+ * - a RECORDED fact wins, whatever the priority: `blocking` blocks, `concern`
121
+ * does not. A finding blocks by falsifying an agreed criterion, not by the
122
+ * severity a reviewer typed.
123
+ * - NO recorded fact -> today's priority rule: only an explicit P2/P3 is
124
+ * non-blocking; P0/P1 and unset block (the bar is never lowered by absence).
125
+ *
126
+ * It classifies severity only; whether the issue is review-filed and open is
127
+ * the caller's filter (isReviewFiledIssue / isReviewFiledComplete).
128
+ */
129
+ export function isBlockingReviewFinding(issue, findingClasses = NO_RECORDED_CLASSES) {
130
+ const recorded = findingClasses.get(issue.id);
131
+ if (recorded !== undefined)
132
+ return recorded === 'blocking';
133
+ return !isLowPriority(issue.priority);
134
+ }
100
135
  /**
101
136
  * Whether an issue is a DEFERRABLE review note: a review-filed, still-open
102
- * issue (per isReviewFiledIssue) whose priority is an explicit low severity
103
- * (P2/P3). A deferrable note must NOT route a verify delivery to verify_failed
104
- * -- the review should converge (approve) and leave the note tracked.
137
+ * issue (per isReviewFiledIssue) that is NOT a blocking finding
138
+ * (isBlockingReviewFinding -- a recorded `concern`, or, with no recorded fact,
139
+ * an explicit P2/P3). A deferrable note must NOT route a verify delivery to
140
+ * verify_failed -- the review should converge (approve) and leave the note
141
+ * tracked.
105
142
  *
106
- * Anything that is review-filed but P0/P1 or unprioritized is BLOCKING, and any
107
- * open work that is NOT review-filed (e.g. pre-existing coding work) is also
108
- * blocking. Deferrability is a property of low-severity review triage notes
109
- * only.
143
+ * Any open work that is NOT review-filed (e.g. pre-existing coding work) is
144
+ * blocking. Deferrability is a property of review findings only.
110
145
  */
111
- export function isDeferrableReviewNote(issue, reviewRequestedAt) {
112
- return isReviewFiledIssue(issue, reviewRequestedAt) && isLowPriority(issue.priority);
146
+ export function isDeferrableReviewNote(issue, reviewRequestedAt, findingClasses = NO_RECORDED_CLASSES) {
147
+ return isReviewFiledIssue(issue, reviewRequestedAt) && !isBlockingReviewFinding(issue, findingClasses);
113
148
  }
114
149
  /**
115
150
  * Filter a focus's issues to the open, review-filed notes that are deferrable
116
- * (low severity). The caller uses the ids to mark the matching reconciler
151
+ * (not blocking). The caller uses the ids to mark the matching reconciler
117
152
  * issues as `deferrable` so the verify-routing reconciler does not treat them
118
153
  * as blocking open work.
119
154
  */
120
- export function filterDeferrableReviewNotes(issues, reviewRequestedAt) {
121
- return issues.filter(i => isDeferrableReviewNote(i, reviewRequestedAt));
155
+ export function filterDeferrableReviewNotes(issues, reviewRequestedAt, findingClasses = NO_RECORDED_CLASSES) {
156
+ return issues.filter(i => isDeferrableReviewNote(i, reviewRequestedAt, findingClasses));
122
157
  }
123
158
  /**
124
159
  * Returns true when there is at least one BLOCKING review-filed issue since the
125
- * most recent review pass -- a review-filed, still-open issue that is NOT a
126
- * deferrable low-severity note (i.e. P0/P1 or unprioritized). This is the gate
127
- * for the review_missing_report notice: a review that filed ONLY deferrable
128
- * notes converged cleanly and must not raise the "review skipped its outcome"
160
+ * most recent review pass -- a review-filed, still-open issue that is a
161
+ * blocking finding (isBlockingReviewFinding). This is the gate for the
162
+ * review_missing_report notice: a review that filed ONLY deferrable notes
163
+ * converged cleanly and must not raise the "review skipped its outcome"
129
164
  * escalation.
130
165
  */
131
- export function blockingReviewFiledIssueExists(issues, reviewRequestedAt) {
132
- return issues.some(i => isReviewFiledIssue(i, reviewRequestedAt) && !isLowPriority(i.priority));
166
+ export function blockingReviewFiledIssueExists(issues, reviewRequestedAt, findingClasses = NO_RECORDED_CLASSES) {
167
+ return issues.some(i => isReviewFiledIssue(i, reviewRequestedAt) && isBlockingReviewFinding(i, findingClasses));
133
168
  }
134
169
  // ── Non-lossy (complete-set) classification ───────────────────────────────
135
170
  //
@@ -163,8 +198,8 @@ export function reviewFiledIssueExistsComplete(issues, reviewFiledIds, reviewReq
163
198
  return issues.some(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt));
164
199
  }
165
200
  /** Complete-set counterpart of blockingReviewFiledIssueExists. */
166
- export function blockingReviewFiledIssueExistsComplete(issues, reviewFiledIds, reviewRequestedAt) {
167
- return issues.some(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt) && !isLowPriority(i.priority));
201
+ export function blockingReviewFiledIssueExistsComplete(issues, reviewFiledIds, reviewRequestedAt, findingClasses = NO_RECORDED_CLASSES) {
202
+ return issues.some(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt) && isBlockingReviewFinding(i, findingClasses));
168
203
  }
169
204
  /**
170
205
  * Complete-set counterpart of blockingReviewFiledIssueExists returning the LIST
@@ -174,11 +209,11 @@ export function blockingReviewFiledIssueExistsComplete(issues, reviewFiledIds, r
174
209
  * findings without opening the daemon log, rather than reading the breaker's old
175
210
  * untested "there was no work left to route" assertion.
176
211
  */
177
- export function filterBlockingReviewFiledComplete(issues, reviewFiledIds, reviewRequestedAt) {
178
- return issues.filter(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt) && !isLowPriority(i.priority));
212
+ export function filterBlockingReviewFiledComplete(issues, reviewFiledIds, reviewRequestedAt, findingClasses = NO_RECORDED_CLASSES) {
213
+ return issues.filter(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt) && isBlockingReviewFinding(i, findingClasses));
179
214
  }
180
215
  /** Complete-set counterpart of filterDeferrableReviewNotes. */
181
- export function filterDeferrableReviewNotesComplete(issues, reviewFiledIds, reviewRequestedAt) {
182
- return issues.filter(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt) && isLowPriority(i.priority));
216
+ export function filterDeferrableReviewNotesComplete(issues, reviewFiledIds, reviewRequestedAt, findingClasses = NO_RECORDED_CLASSES) {
217
+ return issues.filter(i => isReviewFiledComplete(i, reviewFiledIds, reviewRequestedAt) && !isBlockingReviewFinding(i, findingClasses));
183
218
  }
184
219
  //# sourceMappingURL=review-defect-detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"review-defect-detector.js","sourceRoot":"","sources":["../../src/completion/review-defect-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-defect-detector.js","sourceRoot":"","sources":["../../src/completion/review-defect-detector.ts"],"names":[],"mappings":"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"}
@@ -14,15 +14,18 @@
14
14
  * @module completion/review-exit-attribution
15
15
  */
16
16
  import type { FocusIssueInfo } from '../types/index.js';
17
+ import { type ReviewFindingClasses } from './review-defect-detector.js';
17
18
  /** How a gaps_found verdict relates to one delivery. See ReconcilerReviewState.gapsAttribution. */
18
19
  export type GapsAttribution = 'targeted' | 'not_targeted' | 'unresolvable';
19
20
  /**
20
21
  * The deliveries a gaps_found verdict actually judges: those that own an OPEN,
21
22
  * BLOCKING gap issue the review filed this session (created_issue_ids mapped to
22
- * each issue's delivery). A closed or deferrable note does not target its
23
- * delivery -- only an actionable open gap does.
23
+ * each issue's delivery). A closed or non-blocking note does not target its
24
+ * delivery -- only an actionable open gap does. Blocking is
25
+ * isBlockingReviewFinding over the findings' recorded classes (a recorded
26
+ * concern never targets, a recorded blocking always does; no fact -> priority).
24
27
  */
25
- export declare function resolveAttributedDeliveryIds(focusIssues: FocusIssueInfo[], createdIssueIds: ReadonlySet<string>): Set<string>;
28
+ export declare function resolveAttributedDeliveryIds(focusIssues: FocusIssueInfo[], createdIssueIds: ReadonlySet<string>, findingClasses?: ReviewFindingClasses): Set<string>;
26
29
  /**
27
30
  * Classify one delivery against a gaps_found verdict:
28
31
  * 'targeted' -> this delivery owns a filed gap -> route back.
@@ -1 +1 @@
1
- {"version":3,"file":"review-exit-attribution.d.ts","sourceRoot":"","sources":["../../src/completion/review-exit-attribution.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,mGAAmG;AACnG,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,cAAc,EAAE,EAC7B,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,GAAG,CAAC,MAAM,CAAC,CASb;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,OAAO,EACpB,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1C,qBAAqB,EAAE,OAAO,GAC7B,eAAe,GAAG,SAAS,CAI7B"}
1
+ {"version":3,"file":"review-exit-attribution.d.ts","sourceRoot":"","sources":["../../src/completion/review-exit-attribution.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEjG,mGAAmG;AACnG,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,cAAc,EAAE,EAC7B,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,EACpC,cAAc,CAAC,EAAE,oBAAoB,GACpC,GAAG,CAAC,MAAM,CAAC,CASb;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,OAAO,EACpB,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1C,qBAAqB,EAAE,OAAO,GAC7B,eAAe,GAAG,SAAS,CAI7B"}
@@ -1,23 +1,25 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
- // Pinned by: none -- no test imports this module directly (baselined; see lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/completion/review-finding-blocking-predicate.test.ts
3
3
  // PINNED-BY-END
4
4
  import { OPEN_ISSUE_STATUSES } from '../shell/constants.js';
5
- import { isLowPriority } from './review-defect-detector.js';
5
+ import { isBlockingReviewFinding } from './review-defect-detector.js';
6
6
  /**
7
7
  * The deliveries a gaps_found verdict actually judges: those that own an OPEN,
8
8
  * BLOCKING gap issue the review filed this session (created_issue_ids mapped to
9
- * each issue's delivery). A closed or deferrable note does not target its
10
- * delivery -- only an actionable open gap does.
9
+ * each issue's delivery). A closed or non-blocking note does not target its
10
+ * delivery -- only an actionable open gap does. Blocking is
11
+ * isBlockingReviewFinding over the findings' recorded classes (a recorded
12
+ * concern never targets, a recorded blocking always does; no fact -> priority).
11
13
  */
12
- export function resolveAttributedDeliveryIds(focusIssues, createdIssueIds) {
14
+ export function resolveAttributedDeliveryIds(focusIssues, createdIssueIds, findingClasses) {
13
15
  const attributed = new Set();
14
16
  for (const iss of focusIssues) {
15
17
  if (!createdIssueIds.has(iss.id))
16
18
  continue;
17
19
  if (!OPEN_ISSUE_STATUSES.has(iss.status))
18
20
  continue; // an already-closed gap targets nothing
19
- if (isLowPriority(iss.priority))
20
- continue; // deferrable notes are not blocking gaps
21
+ if (!isBlockingReviewFinding(iss, findingClasses))
22
+ continue; // non-blocking notes are not gaps
21
23
  if (iss.deliveryId)
22
24
  attributed.add(iss.deliveryId);
23
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"review-exit-attribution.js","sourceRoot":"","sources":["../../src/completion/review-exit-attribution.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,0FAA0F;AAC1F,gBAAgB;AAmBhB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC1C,WAA6B,EAC7B,eAAoC;IAEpC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAC3C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS,CAAC,wCAAwC;QAC5F,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS,CAAC,yCAAyC;QACpF,IAAI,GAAG,CAAC,UAAU;YAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,WAAoB,EACpB,qBAA0C,EAC1C,qBAA8B;IAE9B,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,CAAC,qBAAqB;QAAE,OAAO,cAAc,CAAC;IAClD,OAAO,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"review-exit-attribution.js","sourceRoot":"","sources":["../../src/completion/review-exit-attribution.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,sFAAsF;AACtF,gBAAgB;AAmBhB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAA6B,MAAM,6BAA6B,CAAC;AAKjG;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAC1C,WAA6B,EAC7B,eAAoC,EACpC,cAAqC;IAErC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAC3C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS,CAAC,wCAAwC;QAC5F,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,cAAc,CAAC;YAAE,SAAS,CAAC,kCAAkC;QAC/F,IAAI,GAAG,CAAC,UAAU;YAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,WAAoB,EACpB,qBAA0C,EAC1C,qBAA8B;IAE9B,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,CAAC,qBAAqB;QAAE,OAAO,cAAc,CAAC;IAClD,OAAO,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;AAC7E,CAAC"}
@@ -16,6 +16,7 @@ import { getActiveFocuses } from '../queries/focus-discovery.js';
16
16
  import { hasPendingSpawnDirective } from '../directive/directive-queue.js';
17
17
  import { emitLoopTrigger } from '../loops/index.js';
18
18
  import { getFocusDeliveries, getFocusIssues, clearReviewRequestedAt, releaseFocusArm, setReviewCycleCount, setReviewHandoffCount, getFocusReviewReportForSession, getFocusReviewFiledIssueIds } from '../queries/focuses.js';
19
+ import { getFocusReviewFindingFacts } from '../queries/review-finding-facts.js';
19
20
  import { resolveReviewCycleCap, resolveReviewHandoffCap } from '../verify/stall-detector-config.js';
20
21
  import { getDeliveryIssues, rehomeIssueToDelivery } from '../queries/issues.js';
21
22
  import { createEscalation, hasOpenFocusEscalation, hasOpenEscalationForDelivery } from '../queries/escalations.js';
@@ -82,6 +83,7 @@ export interface ReviewExitDeps {
82
83
  emitLoopTrigger: typeof emitLoopTrigger;
83
84
  getFocusReviewReportForSession: typeof getFocusReviewReportForSession;
84
85
  getFocusReviewFiledIssueIds?: typeof getFocusReviewFiledIssueIds;
86
+ getFocusReviewFindingFacts?: typeof getFocusReviewFindingFacts;
85
87
  createEscalation: typeof createEscalation;
86
88
  }
87
89
  export declare const defaultReviewExitDeps: ReviewExitDeps;
@@ -1 +1 @@
1
- {"version":3,"file":"review-exit-deps.d.ts","sourceRoot":"","sources":["../../src/completion/review-exit-deps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-exit-deps.d.ts","sourceRoot":"","sources":["../../src/completion/review-exit-deps.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
2
  // Pinned by: packages/daemon/src/completion/review-coverage-seam.test.ts,
3
3
  // packages/daemon/src/completion/review-cycle-churn-meter.test.ts,
4
+ // packages/daemon/src/completion/review-finding-class-routing.test.ts,
4
5
  // packages/daemon/src/integration/failed-verdict-review-exit-respawn-regression.test.ts
5
6
  // PINNED-BY-END
6
7
  /**
@@ -22,6 +23,7 @@ import { getActiveFocuses } from '../queries/focus-discovery.js';
22
23
  import { clearPendingReviewDirective, hasPendingSpawnDirective } from '../directive/directive-queue.js';
23
24
  import { emitLoopTrigger } from '../loops/index.js';
24
25
  import { getFocusDeliveries, getFocusIssues, clearReviewRequestedAt, releaseFocusArm, setReviewCycleCount, setReviewHandoffCount, getFocusReviewReportForSession, getFocusReviewFiledIssueIds, } from '../queries/focuses.js';
26
+ import { getFocusReviewFindingFacts } from '../queries/review-finding-facts.js';
25
27
  import { resolveReviewCycleCap, resolveReviewHandoffCap } from '../verify/stall-detector-config.js';
26
28
  import { getDeliveryIssues, rehomeIssueToDelivery } from '../queries/issues.js';
27
29
  import { createEscalation, hasOpenFocusEscalation, hasOpenEscalationForDelivery, resolveOpenFocusEscalationsOfKind, resolveConvergedFocusEscalations } from '../queries/escalations.js';
@@ -77,6 +79,7 @@ export const defaultReviewExitDeps = {
77
79
  emitLoopTrigger,
78
80
  getFocusReviewReportForSession,
79
81
  getFocusReviewFiledIssueIds,
82
+ getFocusReviewFindingFacts,
80
83
  createEscalation,
81
84
  };
82
85
  //# sourceMappingURL=review-exit-deps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"review-exit-deps.js","sourceRoot":"","sources":["../../src/completion/review-exit-deps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-exit-deps.js","sourceRoot":"","sources":["../../src/completion/review-exit-deps.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ReviewFindingClasses } from './review-defect-detector.js';
1
2
  import type { ReviewFiledFindingSummary } from './review-exit-escalations.js';
2
3
  import type { ReviewExitDeps } from './review-exit-deps.js';
3
4
  import type { FocusIssueInfo } from '../types/index.js';
@@ -20,6 +21,13 @@ export interface ReviewExitEvidence {
20
21
  */
21
22
  focusIssues: FocusIssueInfo[];
22
23
  reviewFiledIds: ReadonlySet<string>;
24
+ /**
25
+ * Each review finding's RECORDED class (blocking / concern), keyed by issue id.
26
+ * Every blocking decision above keyed on it through isBlockingReviewFinding;
27
+ * carried so the foreign-finding scope decides with the same facts. Empty when
28
+ * nothing is recorded or the read failed (-> the priority fallback).
29
+ */
30
+ findingClasses: ReviewFindingClasses;
23
31
  }
24
32
  /**
25
33
  * Gather the review-exit evidence for a focus/session. Every read is best-effort: