@telora/daemon 0.22.208 → 0.22.226

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 (212) hide show
  1. package/build-info.json +2 -2
  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/state-cascade.d.ts.map +1 -1
  37. package/dist/completion/state-cascade.js +11 -19
  38. package/dist/completion/state-cascade.js.map +1 -1
  39. package/dist/completion/team-progress-measure.d.ts +70 -0
  40. package/dist/completion/team-progress-measure.d.ts.map +1 -0
  41. package/dist/completion/team-progress-measure.js +285 -0
  42. package/dist/completion/team-progress-measure.js.map +1 -0
  43. package/dist/completion/team-stillness.d.ts +76 -0
  44. package/dist/completion/team-stillness.d.ts.map +1 -0
  45. package/dist/completion/team-stillness.js +96 -0
  46. package/dist/completion/team-stillness.js.map +1 -0
  47. package/dist/completion/worker-wait.d.ts +84 -0
  48. package/dist/completion/worker-wait.d.ts.map +1 -0
  49. package/dist/completion/worker-wait.js +89 -0
  50. package/dist/completion/worker-wait.js.map +1 -0
  51. package/dist/delivery/delivery-advance-block.d.ts.map +1 -1
  52. package/dist/delivery/delivery-advance-block.js +1 -2
  53. package/dist/delivery/delivery-advance-block.js.map +1 -1
  54. package/dist/focus/focus-lifecycle.d.ts.map +1 -1
  55. package/dist/focus/focus-lifecycle.js +7 -1
  56. package/dist/focus/focus-lifecycle.js.map +1 -1
  57. package/dist/focus/focus-team-state.js +1 -1
  58. package/dist/focus/focus-worktree-state.d.ts.map +1 -1
  59. package/dist/focus/focus-worktree-state.js +2 -1
  60. package/dist/focus/focus-worktree-state.js.map +1 -1
  61. package/dist/git/focus-integration-sync.d.ts +42 -4
  62. package/dist/git/focus-integration-sync.d.ts.map +1 -1
  63. package/dist/git/focus-integration-sync.js +53 -9
  64. package/dist/git/focus-integration-sync.js.map +1 -1
  65. package/dist/git/types.d.ts.map +1 -1
  66. package/dist/git/types.js +4 -2
  67. package/dist/git/types.js.map +1 -1
  68. package/dist/merge/merge-back-loop.d.ts.map +1 -1
  69. package/dist/merge/merge-back-loop.js +0 -1
  70. package/dist/merge/merge-back-loop.js.map +1 -1
  71. package/dist/queries/deliveries.d.ts.map +1 -1
  72. package/dist/queries/deliveries.js +3 -1
  73. package/dist/queries/deliveries.js.map +1 -1
  74. package/dist/queries/delivery-gate-state.js +1 -1
  75. package/dist/queries/escalation-suppression.js +1 -1
  76. package/dist/queries/focus-integration-conflict.d.ts +7 -4
  77. package/dist/queries/focus-integration-conflict.d.ts.map +1 -1
  78. package/dist/queries/focus-integration-conflict.js +6 -3
  79. package/dist/queries/focus-integration-conflict.js.map +1 -1
  80. package/dist/queries/schemas.d.ts +15 -0
  81. package/dist/queries/schemas.d.ts.map +1 -1
  82. package/dist/queries/schemas.js +12 -1
  83. package/dist/queries/schemas.js.map +1 -1
  84. package/dist/queries/shortfall-park-record.d.ts +6 -1
  85. package/dist/queries/shortfall-park-record.d.ts.map +1 -1
  86. package/dist/queries/shortfall-park-record.js.map +1 -1
  87. package/dist/queries/shortfall-rulings.d.ts +14 -2
  88. package/dist/queries/shortfall-rulings.d.ts.map +1 -1
  89. package/dist/queries/shortfall-rulings.js +17 -3
  90. package/dist/queries/shortfall-rulings.js.map +1 -1
  91. package/dist/queries/verification.js +1 -1
  92. package/dist/queries/verify-own-holds.d.ts.map +1 -1
  93. package/dist/queries/verify-own-holds.js +1 -0
  94. package/dist/queries/verify-own-holds.js.map +1 -1
  95. package/dist/spawn/helpers.d.ts.map +1 -1
  96. package/dist/spawn/helpers.js +9 -1
  97. package/dist/spawn/helpers.js.map +1 -1
  98. package/dist/spawn/lead-continuation.d.ts +10 -2
  99. package/dist/spawn/lead-continuation.d.ts.map +1 -1
  100. package/dist/spawn/lead-continuation.js +39 -22
  101. package/dist/spawn/lead-continuation.js.map +1 -1
  102. package/dist/spawn/one-shot-model.d.ts.map +1 -1
  103. package/dist/spawn/one-shot-model.js +1 -0
  104. package/dist/spawn/one-shot-model.js.map +1 -1
  105. package/dist/spawn/worktree-session.d.ts.map +1 -1
  106. package/dist/spawn/worktree-session.js +11 -1
  107. package/dist/spawn/worktree-session.js.map +1 -1
  108. package/dist/testing/fixtures/conflicting-repo.d.ts +17 -0
  109. package/dist/testing/fixtures/conflicting-repo.d.ts.map +1 -1
  110. package/dist/testing/fixtures/conflicting-repo.js +31 -0
  111. package/dist/testing/fixtures/conflicting-repo.js.map +1 -1
  112. package/dist/testing/fixtures/index.d.ts.map +1 -1
  113. package/dist/testing/fixtures/index.js +1 -2
  114. package/dist/testing/fixtures/index.js.map +1 -1
  115. package/dist/types/focus.d.ts +59 -26
  116. package/dist/types/focus.d.ts.map +1 -1
  117. package/dist/types/index.js +1 -1
  118. package/dist/verify/commit-verdict-pull.d.ts +28 -3
  119. package/dist/verify/commit-verdict-pull.d.ts.map +1 -1
  120. package/dist/verify/commit-verdict-pull.js +160 -23
  121. package/dist/verify/commit-verdict-pull.js.map +1 -1
  122. package/dist/verify/credit-rearm.d.ts.map +1 -1
  123. package/dist/verify/credit-rearm.js +72 -17
  124. package/dist/verify/credit-rearm.js.map +1 -1
  125. package/dist/verify/default-on-guards.d.ts +54 -8
  126. package/dist/verify/default-on-guards.d.ts.map +1 -1
  127. package/dist/verify/default-on-guards.js +132 -17
  128. package/dist/verify/default-on-guards.js.map +1 -1
  129. package/dist/verify/explicit-rearm.d.ts.map +1 -1
  130. package/dist/verify/explicit-rearm.js +1 -0
  131. package/dist/verify/explicit-rearm.js.map +1 -1
  132. package/dist/verify/explicit-row-selection.d.ts +47 -0
  133. package/dist/verify/explicit-row-selection.d.ts.map +1 -0
  134. package/dist/verify/explicit-row-selection.js +37 -0
  135. package/dist/verify/explicit-row-selection.js.map +1 -0
  136. package/dist/verify/gate-run-registry.d.ts.map +1 -1
  137. package/dist/verify/gate-run-registry.js +2 -0
  138. package/dist/verify/gate-run-registry.js.map +1 -1
  139. package/dist/verify/parked-shortfall-reuse.d.ts +194 -0
  140. package/dist/verify/parked-shortfall-reuse.d.ts.map +1 -0
  141. package/dist/verify/parked-shortfall-reuse.js +310 -0
  142. package/dist/verify/parked-shortfall-reuse.js.map +1 -0
  143. package/dist/verify/reselection-log.d.ts +22 -0
  144. package/dist/verify/reselection-log.d.ts.map +1 -0
  145. package/dist/verify/reselection-log.js +87 -0
  146. package/dist/verify/reselection-log.js.map +1 -0
  147. package/dist/verify/shortfall-park.d.ts +8 -1
  148. package/dist/verify/shortfall-park.d.ts.map +1 -1
  149. package/dist/verify/shortfall-park.js +17 -3
  150. package/dist/verify/shortfall-park.js.map +1 -1
  151. package/dist/verify/shortfall-repeat.d.ts.map +1 -1
  152. package/dist/verify/shortfall-repeat.js +7 -2
  153. package/dist/verify/shortfall-repeat.js.map +1 -1
  154. package/dist/verify/shortfall-rulings.d.ts +93 -6
  155. package/dist/verify/shortfall-rulings.d.ts.map +1 -1
  156. package/dist/verify/shortfall-rulings.js +69 -12
  157. package/dist/verify/shortfall-rulings.js.map +1 -1
  158. package/dist/verify/stall-detector-config.d.ts.map +1 -1
  159. package/dist/verify/stall-detector-config.js +2 -1
  160. package/dist/verify/stall-detector-config.js.map +1 -1
  161. package/dist/verify/stall-detectors.d.ts +6 -4
  162. package/dist/verify/stall-detectors.d.ts.map +1 -1
  163. package/dist/verify/stall-detectors.js +9 -6
  164. package/dist/verify/stall-detectors.js.map +1 -1
  165. package/dist/verify/stalled-team-backstop.d.ts +8 -2
  166. package/dist/verify/stalled-team-backstop.d.ts.map +1 -1
  167. package/dist/verify/stalled-team-backstop.js +15 -11
  168. package/dist/verify/stalled-team-backstop.js.map +1 -1
  169. package/dist/verify/team-stall-reapers.d.ts +28 -0
  170. package/dist/verify/team-stall-reapers.d.ts.map +1 -0
  171. package/dist/verify/team-stall-reapers.js +23 -0
  172. package/dist/verify/team-stall-reapers.js.map +1 -0
  173. package/dist/verify/verification-attribution-deps.d.ts +1 -1
  174. package/dist/verify/verification-attribution-deps.d.ts.map +1 -1
  175. package/dist/verify/verification-attribution-deps.js +20 -1
  176. package/dist/verify/verification-attribution-deps.js.map +1 -1
  177. package/dist/verify/verification-boundary-env.d.ts.map +1 -1
  178. package/dist/verify/verification-boundary-env.js +23 -9
  179. package/dist/verify/verification-boundary-env.js.map +1 -1
  180. package/dist/verify/verification-checkout.d.ts +1 -1
  181. package/dist/verify/verification-checkout.d.ts.map +1 -1
  182. package/dist/verify/verification-checkout.js.map +1 -1
  183. package/dist/verify/verification-commit-sharing.d.ts.map +1 -1
  184. package/dist/verify/verification-commit-sharing.js +14 -3
  185. package/dist/verify/verification-commit-sharing.js.map +1 -1
  186. package/dist/verify/verification-config.d.ts.map +1 -1
  187. package/dist/verify/verification-config.js +1 -20
  188. package/dist/verify/verification-config.js.map +1 -1
  189. package/dist/verify/verification-default-on.d.ts +4 -1
  190. package/dist/verify/verification-default-on.d.ts.map +1 -1
  191. package/dist/verify/verification-default-on.js +29 -2
  192. package/dist/verify/verification-default-on.js.map +1 -1
  193. package/dist/verify/verification-deps-default.d.ts.map +1 -1
  194. package/dist/verify/verification-deps-default.js +13 -0
  195. package/dist/verify/verification-deps-default.js.map +1 -1
  196. package/dist/verify/verification-deps.d.ts +38 -0
  197. package/dist/verify/verification-deps.d.ts.map +1 -1
  198. package/dist/verify/verification-deps.js +2 -1
  199. package/dist/verify/verification-deps.js.map +1 -1
  200. package/dist/verify/verification-engine.d.ts.map +1 -1
  201. package/dist/verify/verification-engine.js +44 -15
  202. package/dist/verify/verification-engine.js.map +1 -1
  203. package/dist/verify/verification-feedback.d.ts.map +1 -1
  204. package/dist/verify/verification-feedback.js +1 -19
  205. package/dist/verify/verification-feedback.js.map +1 -1
  206. package/dist/verify/verify-restatement.d.ts.map +1 -1
  207. package/dist/verify/verify-restatement.js +5 -1
  208. package/dist/verify/verify-restatement.js.map +1 -1
  209. package/dist/worktree/provision.d.ts.map +1 -1
  210. package/dist/worktree/provision.js +3 -1
  211. package/dist/worktree/provision.js.map +1 -1
  212. package/package.json +1 -1
@@ -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":"AAAA,8FAA8F;AAC9F,0FAA0F;AAC1F,gBAAgB;AAiBhB;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;IACzC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACxD,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SAC7B,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,SAAkB;IACzC,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,kBAAkB,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAgG,EAChG,MAAwB,EACxB,eAA8B,IAAI;IAElC,MAAM,gBAAgB,GAA2B,EAAE,CAAC;IACpD,MAAM,wBAAwB,GAA2B,EAAE,CAAC;IAC5D,MAAM,kBAAkB,GAA2B,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;QACjD,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9D,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,OAAO;QACL,gBAAgB;QAChB,eAAe,EAAE,MAAM,CAAC,MAAM;QAC9B,wBAAwB;QACxB,kBAAkB;QAClB,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,CAAmB,EAAE,CAAmB;IACrE,IAAI,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IAC1D,0EAA0E;IAC1E,0DAA0D;IAC1D,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IACpD,OAAO,CACL,YAAY,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,CAAC;QACpD,YAAY,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC,wBAAwB,CAAC;QACpE,YAAY,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,kBAAkB,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,SAAS,YAAY,CACnB,CAAoB,EACpB,CAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-cascade.d.ts","sourceRoot":"","sources":["../../src/completion/state-cascade.ts"],"names":[],"mappings":"AAqDA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAW3D,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAoB,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAA8C,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAe7G,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAQxC,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAC9E;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC3E;AAwCD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAExE;AAcD;;;GAGG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAIxD;AAoFD,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,mBAAmB,EAC1B,cAAc,EAAE,cAAc,GAAG,IAAI,EACrC,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0Ff;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,mBAAmB,EAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,EACjC,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAsEf;AAoKD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB1E"}
1
+ {"version":3,"file":"state-cascade.d.ts","sourceRoot":"","sources":["../../src/completion/state-cascade.ts"],"names":[],"mappings":"AAqDA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAW3D,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAoB,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAA8C,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAa7G,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAQxC,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAC9E;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC3E;AAwCD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAExE;AAcD;;;GAGG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAIxD;AAoFD,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,mBAAmB,EAC1B,cAAc,EAAE,cAAc,GAAG,IAAI,EACrC,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA0Ff;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,mBAAmB,EAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,EACjC,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAsEf;AA4JD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB1E"}
@@ -57,9 +57,9 @@ import { sweepAnchoredInjectionsOnSettle, } from './settle-injection-sweep.js';
57
57
  import { emitLoopTrigger } from '../loops/index.js';
58
58
  import { deriveFocusPhase } from '../focus/focus-phase.js';
59
59
  import { resolveReviewNextStep } from './review-next-step.js';
60
- import { checkVerifyFailedCapForFocus, checkReviewWindowStaleForFocus, checkIdleTeamStallForFocus, checkTeamOutcomeStallForFocus, } from '../verify/stall-detectors.js';
60
+ import { checkVerifyFailedCapForFocus, checkReviewWindowStaleForFocus, } from '../verify/stall-detectors.js';
61
61
  import { checkUnreviewedSettleForFocus, supersedeStaleUnreviewedSettleForFocus, } from '../verify/unreviewed-settle-detector.js';
62
- import { checkStalledTeamBackstopForFocus } from '../verify/stalled-team-backstop.js';
62
+ import { runTeamStallReapers } from '../verify/team-stall-reapers.js';
63
63
  import { reconcileCoverageIncompleteHold } from './coverage-stabilized.js';
64
64
  import { resolveReviewCycleCapHold } from '../focus/review-cycle-cap-hold.js';
65
65
  import { hasOpenFocusEscalation as _hasOpenFocusEscalation } from '../queries/escalations.js';
@@ -489,23 +489,15 @@ async function runFocusStallDetectors(pc, focus, phase, deliveries) {
489
489
  // call every winding_down tick alongside the announcer above.
490
490
  await supersedeStaleUnreviewedSettleForFocus(stallCtx, focus.review_requested_at, focus.reviewed_through_sha);
491
491
  }
492
- // (3) idle-team stall -> recover (terminate) the parked team, no
493
- // escalation. Rides the same seam; reads the per-team last-activity
494
- // clock rather than any loaded delivery/review state.
495
- checkIdleTeamStallForFocus(stallCtx);
496
- // (3b) outcome + process liveness backstop -> recover a tracked team
497
- // that is dead by its SESSION OUTCOME (a terminal-error result with no
498
- // activity since -- the rate-limit-idled-on-stdin incident) or PROCESS
499
- // STATE (lead pid gone: crash/OOM/SIGKILL), in minutes rather than the
500
- // 3h blind idle timer. No escalation; the daemon acts.
501
- checkTeamOutcomeStallForFocus(stallCtx);
502
- // (3c) stalled-team backstop -> reap a HEALTHY team wedged with a suppressed /
503
- // never-fired / latched completion event (the 2026-09-07 43-min wedge), reading
504
- // liveness directly rather than sharing the completion event as a precondition.
505
- // Fires between the 5-min liveness-badge park band and the 3h blind idle timer;
506
- // records a STALLED_TEAM_REAP firing, terminates (wip-preserve via close), and
507
- // files ONE idempotent team_failure so the wedge is visible.
508
- await checkStalledTeamBackstopForFocus(stallCtx);
492
+ // (3) the team-stall reapers (verify/team-stall-reapers.ts): read the one
493
+ // progress measure for a live team (diff, HEAD, issues, statuses, filtered
494
+ // agent activity), then the idle-team timer, the outcome/process liveness
495
+ // backstop (3b) and the stalled-team backstop (3c, the 2026-09-07 43-min
496
+ // wedge: a HEALTHY team with a suppressed / never-fired / latched completion
497
+ // event; it files ONE idempotent team_failure). None depends on the
498
+ // completion event; the idle timer and the backstop reap only a team still
499
+ // on every axis of the measure for their window.
500
+ await runTeamStallReapers(stallCtx, deliveries);
509
501
  // (4) review_coverage_incomplete close-half (delivery 7 Task 2): resolve
510
502
  // the machine-filed review spawn block once the focus branch has
511
503
  // stabilized at the tip recorded at filing -- the spawn-independent
@@ -1 +1 @@
1
- {"version":3,"file":"state-cascade.js","sourceRoot":"","sources":["../../src/completion/state-cascade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-cascade.js","sourceRoot":"","sources":["../../src/completion/state-cascade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { AgentEvent } from '@telora/daemon-core';
2
+ import type { FocusIssueInfo, FocusTeamState, TeamActivityMarks, TeamProgressAxes } from '../types/index.js';
3
+ export type { TeamActivityMarks, TeamProgressAxes };
4
+ /**
5
+ * Stable, key-order-independent fingerprint of the work-issue state. Sorting by
6
+ * issue id makes it depend only on the set of issues and their statuses, so a
7
+ * fetch that returns issues in a different order does not manufacture progress.
8
+ */
9
+ export declare function computeIssueFingerprint(issues: Pick<FocusIssueInfo, 'id' | 'status'>[]): string;
10
+ /** True when the team's activity moved between two readings (either unreadable axis is not compared). */
11
+ export declare function teamActivityMoved(prior: TeamActivityMarks | null | undefined, current: TeamActivityMarks | null | undefined): boolean;
12
+ /** THE measure: true when any axis moved between two readings (module doc). */
13
+ export declare function teamProgressMoved(prior: TeamProgressAxes, current: TeamProgressAxes): boolean;
14
+ /** The focus's activity count now (0 before any activity). */
15
+ export declare function readTeamActivitySeq(focusId: string): number;
16
+ /** Count one unit of team activity for the focus. */
17
+ export declare function recordTeamProgressActivity(focusId: string): void;
18
+ /**
19
+ * The daemon is about to re-wake the lead (handoff, re-engagement, continuation).
20
+ * The lead's events until its next result are its reply to the daemon, not
21
+ * activity of its own (module doc).
22
+ */
23
+ export declare function noteDaemonPoke(teamState: Pick<FocusTeamState, 'lastDaemonPokeAt'>, nowMs?: number): void;
24
+ /** True while the lead's current turn is its kickoff or a reply to a daemon re-wake. */
25
+ export declare function leadTurnIsDaemonStarted(teamState: Pick<FocusTeamState, 'lastDaemonPokeAt' | 'lastLeadResultAt'>): boolean;
26
+ /** Classify one neutral event from the team's stream (module doc). */
27
+ export declare function noteTeamAgentEvent(teamState: Pick<FocusTeamState, 'lastDaemonPokeAt' | 'lastLeadResultAt'>, focusId: string, event: AgentEvent, nowMs?: number): void;
28
+ /**
29
+ * Classify one raw engine event. Background workers surface in the Claude
30
+ * stream only as `system/task_*` events (their tool calls are not attributed),
31
+ * so they are read here, off the raw channel, keyed by the task id the
32
+ * task_started event declared a worker.
33
+ */
34
+ export declare function noteTeamRawEvent(focusId: string, raw: unknown, nowMs?: number): void;
35
+ /**
36
+ * How long a started worker may go without a single event before it is treated
37
+ * as quiet. A worker inside one long tool call still heartbeats (~30s), so this
38
+ * only lapses for a worker that has genuinely stopped reporting.
39
+ */
40
+ export declare const WORKER_QUIET_MS: number;
41
+ /** True while the team has a started worker that has not ended and is still reporting. */
42
+ export declare function teamWorkersLive(focusId: string, nowMs?: number): boolean;
43
+ /** Ms until a live team's workers would go quiet if they stopped reporting now; null when none are live. */
44
+ export declare function teamWorkersQuietInMs(focusId: string, nowMs?: number): number | null;
45
+ /** How many started workers have not ended (0 when none). */
46
+ export declare function liveWorkerCount(focusId: string): number;
47
+ /**
48
+ * A new team starts with no live workers of its own: a background worker does
49
+ * not survive the session that spawned it. The activity COUNT is kept (module doc).
50
+ */
51
+ export declare function resetTeamWorkers(focusId: string): void;
52
+ /** Test-only: forget every focus. */
53
+ export declare function __resetTeamProgressMeasureForTesting(): void;
54
+ type RunGit = (args: string[], cwd: string) => {
55
+ success: boolean;
56
+ output: string;
57
+ };
58
+ /**
59
+ * Fingerprint of the worktree's uncommitted CONTENT: the bytes of every path
60
+ * that differs from HEAD or is untracked (its absence, for a deletion), plus the
61
+ * staged index entries (`git diff --cached --raw`: the index blob of each staged
62
+ * change), so a staged-only change moves it too. Content, not metadata: two
63
+ * different edits of the same size under the same mtime still move it. Reads
64
+ * only the changed files -- cheap enough for every completion. Null when git
65
+ * cannot be read, which the measure does not compare.
66
+ */
67
+ export declare function readWorktreeDiffFingerprint(worktreePath: string, run?: RunGit): string | null;
68
+ /** The focus's two activity axes, read now. */
69
+ export declare function readTeamActivityMarks(focusId: string, worktreePath: string | null, readDiff?: (worktreePath: string) => string | null): TeamActivityMarks;
70
+ //# sourceMappingURL=team-progress-measure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-progress-measure.d.ts","sourceRoot":"","sources":["../../src/completion/team-progress-measure.ts"],"names":[],"mappings":"AAwDA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE7G,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;AAGpD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,MAAM,CAE/F;AAQD,yGAAyG;AACzG,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC3C,OAAO,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAC5C,OAAO,CAMT;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAM7F;AAuBD,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,qDAAqD;AACrD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhE;AAQD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,EAAE,KAAK,GAAE,MAAmB,GAAG,IAAI,CAEpH;AAED,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,kBAAkB,GAAG,kBAAkB,CAAC,GAAG,OAAO,CAGzH;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,kBAAkB,GAAG,kBAAkB,CAAC,EACxE,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,UAAU,EACjB,KAAK,GAAE,MAAmB,GACzB,IAAI,CAuBN;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,MAAmB,GAAG,IAAI,CAwBhG;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAa,CAAC;AAE1C,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,OAAO,CAIpF;AAED,4GAA4G;AAC5G,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAI/F;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKtD;AAED,qCAAqC;AACrC,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAID,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAcpF;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAczG;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,GAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,GAAG,IAAkC,GAC9E,iBAAiB,CAKnB"}
@@ -0,0 +1,285 @@
1
+ // PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
2
+ // Pinned by: packages/daemon/src/completion/team-progress-measure.test.ts,
3
+ // packages/daemon/src/spawn/progress-measure-wiring.test.ts,
4
+ // packages/daemon/src/verify/team-stall-reapers.test.ts
5
+ // PINNED-BY-END
6
+ /**
7
+ * The ONE measure of whether a focus team made progress.
8
+ *
9
+ * Every no-progress decision that can end a team reads it: the scope-coverage
10
+ * counter (completion/event-phases.ts, through progress-snapshot.ts), the
11
+ * cross-respawn delivery-advancement guard (delivery-advancement-guard.ts), the
12
+ * continuation budget (spawn/lead-continuation.ts) and the unproductive-handoff
13
+ * backstop (event-phases.ts). A cycle made progress when ANY of these moved since
14
+ * the previous one:
15
+ *
16
+ * - a delivery execution_status (or the delivery set);
17
+ * - the issue fingerprint ({issueId -> status});
18
+ * - the focus worktree HEAD (a commit);
19
+ * - the team's agent activity (TeamActivityMarks.agentActivitySeq);
20
+ * - the worktree's uncommitted diff (TeamActivityMarks.worktreeDiffFingerprint).
21
+ *
22
+ * WHY the last two (2026-09-24, "A ruling reaches the gate it rules on"): the
23
+ * lead parked while its background workers edited, the daemon re-woke it every
24
+ * ~20s, and each wake returned in seconds as a completion cycle. The watchdogs
25
+ * counted only status, issues and HEAD, so uncommitted edits and live workers
26
+ * read as zero progress and the team was killed as team_failure ~3 minutes in,
27
+ * with the log reading "last agent event ~0m ago".
28
+ *
29
+ * WHICH agent events count. Worker events always count: a background agent's
30
+ * `system/task_*` events (keyed by a task the lead started with a backgrounded
31
+ * or agent task type) and a teammate's subagent_activity. The lead's own events
32
+ * count only on a turn the daemon did NOT start by re-waking it (a mid-focus
33
+ * handoff, a re-engagement, a continuation turn -- noteDaemonPoke), and never on
34
+ * its kickoff turn. A lead that answers each re-wake with a few tool calls and
35
+ * changes nothing is exactly the team the no-progress guards exist to end, so its
36
+ * replies to the daemon are not activity; whatever such a reply CHANGES is still
37
+ * seen by the diff, HEAD, issue and status axes. A heartbeat (one long tool call
38
+ * still running) counts only while the team has a worker that is live when it
39
+ * arrives: it is then the signal that keeps the worker live, and liveness and
40
+ * progress must not disagree -- a worker the daemon waits on is never reaped as
41
+ * still (TEL-8). A heartbeat with no live worker -- none started, or one that
42
+ * went quiet -- is the lead's own call: never progress, and it does not revive
43
+ * a quiet worker (TEL-9), or a lead's heartbeats would keep an idle team alive.
44
+ *
45
+ * The activity counter is per FOCUS, not per team, so it survives a respawn and
46
+ * the cross-respawn guard can compare it; a fresh counter after a daemon restart
47
+ * reads as one moved cycle against a hydrated prior, which errs toward patience
48
+ * once and never toward a kill.
49
+ *
50
+ * @module completion/team-progress-measure
51
+ */
52
+ import { createHash } from 'node:crypto';
53
+ import { lstatSync, readFileSync, readlinkSync } from 'node:fs';
54
+ import { join } from 'node:path';
55
+ import { runGitSync } from '../git/types.js';
56
+ /**
57
+ * Stable, key-order-independent fingerprint of the work-issue state. Sorting by
58
+ * issue id makes it depend only on the set of issues and their statuses, so a
59
+ * fetch that returns issues in a different order does not manufacture progress.
60
+ */
61
+ export function computeIssueFingerprint(issues) {
62
+ return issues.map(i => `${i.id}:${i.status ?? ''}`).sort().join('|');
63
+ }
64
+ function statusesEqual(a, b) {
65
+ const aKeys = Object.keys(a);
66
+ if (aKeys.length !== Object.keys(b).length)
67
+ return false;
68
+ return aKeys.every(key => Object.prototype.hasOwnProperty.call(b, key) && a[key] === b[key]);
69
+ }
70
+ /** True when the team's activity moved between two readings (either unreadable axis is not compared). */
71
+ export function teamActivityMoved(prior, current) {
72
+ if (!prior || !current)
73
+ return false;
74
+ if (prior.agentActivitySeq !== current.agentActivitySeq)
75
+ return true;
76
+ return prior.worktreeDiffFingerprint !== null
77
+ && current.worktreeDiffFingerprint !== null
78
+ && prior.worktreeDiffFingerprint !== current.worktreeDiffFingerprint;
79
+ }
80
+ /** THE measure: true when any axis moved between two readings (module doc). */
81
+ export function teamProgressMoved(prior, current) {
82
+ if (!statusesEqual(prior.deliveryStatuses, current.deliveryStatuses))
83
+ return true;
84
+ if (prior.focusHeadSha !== current.focusHeadSha)
85
+ return true;
86
+ if (prior.issueFingerprint !== undefined && current.issueFingerprint !== undefined
87
+ && prior.issueFingerprint !== current.issueFingerprint)
88
+ return true;
89
+ return teamActivityMoved(prior.activity, current.activity);
90
+ }
91
+ const activityByFocus = new Map();
92
+ function focusActivity(focusId) {
93
+ let entry = activityByFocus.get(focusId);
94
+ if (!entry) {
95
+ entry = { seq: 0, liveWorkerTasks: new Set(), lastWorkerEventAt: null };
96
+ activityByFocus.set(focusId, entry);
97
+ }
98
+ return entry;
99
+ }
100
+ /** The focus's activity count now (0 before any activity). */
101
+ export function readTeamActivitySeq(focusId) {
102
+ return activityByFocus.get(focusId)?.seq ?? 0;
103
+ }
104
+ /** Count one unit of team activity for the focus. */
105
+ export function recordTeamProgressActivity(focusId) {
106
+ focusActivity(focusId).seq += 1;
107
+ }
108
+ function recordWorkerEvent(focusId, nowMs, countsAsProgress) {
109
+ const entry = focusActivity(focusId);
110
+ entry.lastWorkerEventAt = nowMs;
111
+ if (countsAsProgress)
112
+ entry.seq += 1;
113
+ }
114
+ /**
115
+ * The daemon is about to re-wake the lead (handoff, re-engagement, continuation).
116
+ * The lead's events until its next result are its reply to the daemon, not
117
+ * activity of its own (module doc).
118
+ */
119
+ export function noteDaemonPoke(teamState, nowMs = Date.now()) {
120
+ teamState.lastDaemonPokeAt = nowMs;
121
+ }
122
+ /** True while the lead's current turn is its kickoff or a reply to a daemon re-wake. */
123
+ export function leadTurnIsDaemonStarted(teamState) {
124
+ if (teamState.lastLeadResultAt == null)
125
+ return true;
126
+ return teamState.lastDaemonPokeAt != null && teamState.lastDaemonPokeAt >= teamState.lastLeadResultAt;
127
+ }
128
+ /** Classify one neutral event from the team's stream (module doc). */
129
+ export function noteTeamAgentEvent(teamState, focusId, event, nowMs = Date.now()) {
130
+ switch (event.kind) {
131
+ case 'result':
132
+ teamState.lastLeadResultAt = nowMs;
133
+ return;
134
+ case 'heartbeat':
135
+ // A long call still running. While a worker is live AT THE HEARTBEAT, the
136
+ // heartbeat is what keeps it live (teamWorkersLive), and a worker the
137
+ // daemon holds its wakes for is a working team: the same signal is
138
+ // progress. Otherwise -- no worker, or one that went quiet -- it is the
139
+ // lead's own call: it neither counts nor revives a quiet worker (TEL-9).
140
+ if (event.parentToolUseId && teamWorkersLive(focusId, nowMs))
141
+ recordWorkerEvent(focusId, nowMs, true);
142
+ return;
143
+ case 'subagent_activity': {
144
+ const entry = focusActivity(focusId);
145
+ if (event.phase === 'completed')
146
+ entry.liveWorkerTasks.delete(event.agentId);
147
+ else
148
+ entry.liveWorkerTasks.add(event.agentId);
149
+ recordWorkerEvent(focusId, nowMs, true);
150
+ return;
151
+ }
152
+ default:
153
+ if (!leadTurnIsDaemonStarted(teamState))
154
+ recordTeamProgressActivity(focusId);
155
+ }
156
+ }
157
+ /** Task types whose task is a worker running beside the lead rather than one of the lead's own calls. */
158
+ function isWorkerTask(raw) {
159
+ return raw['is_backgrounded'] === true || raw['task_type'] === 'local_agent' || raw['task_type'] === 'remote_agent';
160
+ }
161
+ const ENDED_TASK_STATUSES = new Set(['completed', 'failed', 'stopped', 'killed', 'cancelled']);
162
+ /**
163
+ * Classify one raw engine event. Background workers surface in the Claude
164
+ * stream only as `system/task_*` events (their tool calls are not attributed),
165
+ * so they are read here, off the raw channel, keyed by the task id the
166
+ * task_started event declared a worker.
167
+ */
168
+ export function noteTeamRawEvent(focusId, raw, nowMs = Date.now()) {
169
+ if (raw === null || typeof raw !== 'object')
170
+ return;
171
+ const event = raw;
172
+ if (event['type'] !== 'system')
173
+ return;
174
+ const subtype = event['subtype'];
175
+ const taskId = event['task_id'];
176
+ if (typeof subtype !== 'string' || typeof taskId !== 'string')
177
+ return;
178
+ const entry = focusActivity(focusId);
179
+ if (subtype === 'task_started') {
180
+ if (!isWorkerTask(event))
181
+ return;
182
+ entry.liveWorkerTasks.add(taskId);
183
+ recordWorkerEvent(focusId, nowMs, true);
184
+ return;
185
+ }
186
+ // task_updated carries its changes in a patch: a call the lead moved to the
187
+ // background becomes a worker there.
188
+ const patch = subtype === 'task_updated' && event['patch'] !== null && typeof event['patch'] === 'object'
189
+ ? event['patch']
190
+ : null;
191
+ if (patch?.['is_backgrounded'] === true)
192
+ entry.liveWorkerTasks.add(taskId);
193
+ if (!entry.liveWorkerTasks.has(taskId))
194
+ return;
195
+ const status = patch ? patch['status'] : subtype === 'task_notification' ? event['status'] : undefined;
196
+ if (typeof status === 'string' && ENDED_TASK_STATUSES.has(status))
197
+ entry.liveWorkerTasks.delete(taskId);
198
+ recordWorkerEvent(focusId, nowMs, true);
199
+ }
200
+ /**
201
+ * How long a started worker may go without a single event before it is treated
202
+ * as quiet. A worker inside one long tool call still heartbeats (~30s), so this
203
+ * only lapses for a worker that has genuinely stopped reporting.
204
+ */
205
+ export const WORKER_QUIET_MS = 5 * 60_000;
206
+ /** True while the team has a started worker that has not ended and is still reporting. */
207
+ export function teamWorkersLive(focusId, nowMs = Date.now()) {
208
+ const entry = activityByFocus.get(focusId);
209
+ if (!entry || entry.liveWorkerTasks.size === 0 || entry.lastWorkerEventAt === null)
210
+ return false;
211
+ return nowMs - entry.lastWorkerEventAt < WORKER_QUIET_MS;
212
+ }
213
+ /** Ms until a live team's workers would go quiet if they stopped reporting now; null when none are live. */
214
+ export function teamWorkersQuietInMs(focusId, nowMs = Date.now()) {
215
+ if (!teamWorkersLive(focusId, nowMs))
216
+ return null;
217
+ const last = activityByFocus.get(focusId)?.lastWorkerEventAt ?? nowMs;
218
+ return Math.max(1, last + WORKER_QUIET_MS - nowMs);
219
+ }
220
+ /** How many started workers have not ended (0 when none). */
221
+ export function liveWorkerCount(focusId) {
222
+ return activityByFocus.get(focusId)?.liveWorkerTasks.size ?? 0;
223
+ }
224
+ /**
225
+ * A new team starts with no live workers of its own: a background worker does
226
+ * not survive the session that spawned it. The activity COUNT is kept (module doc).
227
+ */
228
+ export function resetTeamWorkers(focusId) {
229
+ const entry = activityByFocus.get(focusId);
230
+ if (!entry)
231
+ return;
232
+ entry.liveWorkerTasks.clear();
233
+ entry.lastWorkerEventAt = null;
234
+ }
235
+ /** Test-only: forget every focus. */
236
+ export function __resetTeamProgressMeasureForTesting() {
237
+ activityByFocus.clear();
238
+ }
239
+ /** Content of one worktree path for the fingerprint: its bytes, a symlink's target, or its absence. */
240
+ function worktreePathContent(absPath) {
241
+ try {
242
+ const st = lstatSync(absPath);
243
+ if (st.isSymbolicLink())
244
+ return `symlink:${readlinkSync(absPath)}`;
245
+ if (!st.isFile())
246
+ return `kind:${st.isDirectory() ? 'dir' : 'other'}`;
247
+ return readFileSync(absPath);
248
+ }
249
+ catch {
250
+ return 'absent'; // deleted in the worktree
251
+ }
252
+ }
253
+ /**
254
+ * Fingerprint of the worktree's uncommitted CONTENT: the bytes of every path
255
+ * that differs from HEAD or is untracked (its absence, for a deletion), plus the
256
+ * staged index entries (`git diff --cached --raw`: the index blob of each staged
257
+ * change), so a staged-only change moves it too. Content, not metadata: two
258
+ * different edits of the same size under the same mtime still move it. Reads
259
+ * only the changed files -- cheap enough for every completion. Null when git
260
+ * cannot be read, which the measure does not compare.
261
+ */
262
+ export function readWorktreeDiffFingerprint(worktreePath, run = runGitSync) {
263
+ const changed = run(['diff', 'HEAD', '--name-only', '-z'], worktreePath);
264
+ const untracked = run(['ls-files', '--others', '--exclude-standard', '-z'], worktreePath);
265
+ const staged = run(['diff', '--cached', '--raw', '-z', '--no-abbrev'], worktreePath);
266
+ if (!changed.success || !untracked.success || !staged.success)
267
+ return null;
268
+ const paths = [...new Set(`${changed.output}\0${untracked.output}`.split('\0').filter(p => p.length > 0))].sort();
269
+ const hash = createHash('sha1');
270
+ hash.update(`staged\0${staged.output}\n`);
271
+ for (const path of paths) {
272
+ hash.update(`${path}\0`);
273
+ hash.update(worktreePathContent(join(worktreePath, path)));
274
+ hash.update('\n');
275
+ }
276
+ return hash.digest('hex');
277
+ }
278
+ /** The focus's two activity axes, read now. */
279
+ export function readTeamActivityMarks(focusId, worktreePath, readDiff = readWorktreeDiffFingerprint) {
280
+ return {
281
+ agentActivitySeq: readTeamActivitySeq(focusId),
282
+ worktreeDiffFingerprint: worktreePath ? readDiff(worktreePath) : null,
283
+ };
284
+ }
285
+ //# sourceMappingURL=team-progress-measure.js.map