@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.
- package/build-info.json +4 -3
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +3 -1
- package/dist/backends/index.js.map +1 -1
- package/dist/completion/advancement-stall-watchdog.d.ts.map +1 -1
- package/dist/completion/advancement-stall-watchdog.js +6 -2
- package/dist/completion/advancement-stall-watchdog.js.map +1 -1
- package/dist/completion/completion-decision.d.ts +10 -1
- package/dist/completion/completion-decision.d.ts.map +1 -1
- package/dist/completion/completion-decision.js +1 -1
- package/dist/completion/completion-decision.js.map +1 -1
- package/dist/completion/delivery-advancement-guard.d.ts +31 -16
- package/dist/completion/delivery-advancement-guard.d.ts.map +1 -1
- package/dist/completion/delivery-advancement-guard.js +22 -37
- package/dist/completion/delivery-advancement-guard.js.map +1 -1
- package/dist/completion/detector.d.ts.map +1 -1
- package/dist/completion/detector.js +3 -1
- package/dist/completion/detector.js.map +1 -1
- package/dist/completion/event-phases.d.ts +19 -8
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +67 -88
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/event.d.ts +12 -9
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +6 -3
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/index.js +1 -1
- package/dist/completion/progress-snapshot.d.ts +13 -9
- package/dist/completion/progress-snapshot.d.ts.map +1 -1
- package/dist/completion/progress-snapshot.js +16 -13
- package/dist/completion/progress-snapshot.js.map +1 -1
- package/dist/completion/reengagement-redrive.d.ts +8 -1
- package/dist/completion/reengagement-redrive.d.ts.map +1 -1
- package/dist/completion/reengagement-redrive.js +16 -2
- package/dist/completion/reengagement-redrive.js.map +1 -1
- package/dist/completion/review-defect-detector.d.ts +58 -18
- package/dist/completion/review-defect-detector.d.ts.map +1 -1
- package/dist/completion/review-defect-detector.js +62 -27
- package/dist/completion/review-defect-detector.js.map +1 -1
- package/dist/completion/review-exit-attribution.d.ts +6 -3
- package/dist/completion/review-exit-attribution.d.ts.map +1 -1
- package/dist/completion/review-exit-attribution.js +9 -7
- package/dist/completion/review-exit-attribution.js.map +1 -1
- package/dist/completion/review-exit-deps.d.ts +2 -0
- package/dist/completion/review-exit-deps.d.ts.map +1 -1
- package/dist/completion/review-exit-deps.js +3 -0
- package/dist/completion/review-exit-deps.js.map +1 -1
- package/dist/completion/review-exit-evidence.d.ts +8 -0
- package/dist/completion/review-exit-evidence.d.ts.map +1 -1
- package/dist/completion/review-exit-evidence.js +39 -27
- package/dist/completion/review-exit-evidence.js.map +1 -1
- package/dist/completion/review-exit-foreign-findings.d.ts +5 -1
- package/dist/completion/review-exit-foreign-findings.d.ts.map +1 -1
- package/dist/completion/review-exit-foreign-findings.js +4 -4
- package/dist/completion/review-exit-foreign-findings.js.map +1 -1
- package/dist/completion/review-exit-phase.js +4 -4
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade.js +11 -19
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/completion/team-progress-measure.d.ts +70 -0
- package/dist/completion/team-progress-measure.d.ts.map +1 -0
- package/dist/completion/team-progress-measure.js +285 -0
- package/dist/completion/team-progress-measure.js.map +1 -0
- package/dist/completion/team-stillness.d.ts +76 -0
- package/dist/completion/team-stillness.d.ts.map +1 -0
- package/dist/completion/team-stillness.js +96 -0
- package/dist/completion/team-stillness.js.map +1 -0
- package/dist/completion/worker-wait.d.ts +84 -0
- package/dist/completion/worker-wait.d.ts.map +1 -0
- package/dist/completion/worker-wait.js +89 -0
- package/dist/completion/worker-wait.js.map +1 -0
- package/dist/delivery/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery/delivery-advance-block.js +1 -2
- package/dist/delivery/delivery-advance-block.js.map +1 -1
- package/dist/delivery/delivery-reconciler.d.ts +3 -3
- package/dist/focus/focus-lifecycle.d.ts.map +1 -1
- package/dist/focus/focus-lifecycle.js +7 -1
- package/dist/focus/focus-lifecycle.js.map +1 -1
- package/dist/focus/focus-team-state.js +1 -1
- package/dist/focus/focus-worktree-state.d.ts.map +1 -1
- package/dist/focus/focus-worktree-state.js +2 -1
- package/dist/focus/focus-worktree-state.js.map +1 -1
- package/dist/git/focus-integration-sync.d.ts +42 -4
- package/dist/git/focus-integration-sync.d.ts.map +1 -1
- package/dist/git/focus-integration-sync.js +53 -9
- package/dist/git/focus-integration-sync.js.map +1 -1
- package/dist/git/types.d.ts.map +1 -1
- package/dist/git/types.js +4 -2
- package/dist/git/types.js.map +1 -1
- package/dist/merge/merge-back-loop.d.ts.map +1 -1
- package/dist/merge/merge-back-loop.js +0 -1
- package/dist/merge/merge-back-loop.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +14 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +50 -19
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/testing-standard.d.ts +4 -1
- package/dist/prompt-sections/testing-standard.d.ts.map +1 -1
- package/dist/prompt-sections/testing-standard.js +14 -4
- package/dist/prompt-sections/testing-standard.js.map +1 -1
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +3 -1
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/delivery-gate-state.js +1 -1
- package/dist/queries/escalation-suppression.js +1 -1
- package/dist/queries/escalations.js +1 -1
- package/dist/queries/focus-integration-conflict.d.ts +7 -4
- package/dist/queries/focus-integration-conflict.d.ts.map +1 -1
- package/dist/queries/focus-integration-conflict.js +6 -3
- package/dist/queries/focus-integration-conflict.js.map +1 -1
- package/dist/queries/review-finding-facts.d.ts +38 -0
- package/dist/queries/review-finding-facts.d.ts.map +1 -0
- package/dist/queries/review-finding-facts.js +43 -0
- package/dist/queries/review-finding-facts.js.map +1 -0
- package/dist/queries/schemas.d.ts +15 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +12 -1
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/shortfall-park-record.d.ts +6 -1
- package/dist/queries/shortfall-park-record.d.ts.map +1 -1
- package/dist/queries/shortfall-park-record.js.map +1 -1
- package/dist/queries/shortfall-rulings.d.ts +14 -2
- package/dist/queries/shortfall-rulings.d.ts.map +1 -1
- package/dist/queries/shortfall-rulings.js +17 -3
- package/dist/queries/shortfall-rulings.js.map +1 -1
- package/dist/queries/verification.js +1 -1
- package/dist/queries/verify-own-holds.d.ts.map +1 -1
- package/dist/queries/verify-own-holds.js +1 -0
- package/dist/queries/verify-own-holds.js.map +1 -1
- package/dist/spawn/helpers.d.ts.map +1 -1
- package/dist/spawn/helpers.js +9 -1
- package/dist/spawn/helpers.js.map +1 -1
- package/dist/spawn/lead-continuation.d.ts +10 -2
- package/dist/spawn/lead-continuation.d.ts.map +1 -1
- package/dist/spawn/lead-continuation.js +39 -22
- package/dist/spawn/lead-continuation.js.map +1 -1
- package/dist/spawn/one-shot-model.d.ts.map +1 -1
- package/dist/spawn/one-shot-model.js +1 -0
- package/dist/spawn/one-shot-model.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +11 -1
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/testing/fixtures/conflicting-repo.d.ts +17 -0
- package/dist/testing/fixtures/conflicting-repo.d.ts.map +1 -1
- package/dist/testing/fixtures/conflicting-repo.js +31 -0
- package/dist/testing/fixtures/conflicting-repo.js.map +1 -1
- package/dist/testing/fixtures/index.d.ts.map +1 -1
- package/dist/testing/fixtures/index.js +1 -2
- package/dist/testing/fixtures/index.js.map +1 -1
- package/dist/types/focus.d.ts +59 -26
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/verify/commit-verdict-pull.d.ts +28 -3
- package/dist/verify/commit-verdict-pull.d.ts.map +1 -1
- package/dist/verify/commit-verdict-pull.js +160 -23
- package/dist/verify/commit-verdict-pull.js.map +1 -1
- package/dist/verify/credit-rearm.d.ts.map +1 -1
- package/dist/verify/credit-rearm.js +72 -17
- package/dist/verify/credit-rearm.js.map +1 -1
- package/dist/verify/default-on-guards.d.ts +54 -8
- package/dist/verify/default-on-guards.d.ts.map +1 -1
- package/dist/verify/default-on-guards.js +132 -17
- package/dist/verify/default-on-guards.js.map +1 -1
- package/dist/verify/explicit-rearm.d.ts.map +1 -1
- package/dist/verify/explicit-rearm.js +1 -0
- package/dist/verify/explicit-rearm.js.map +1 -1
- package/dist/verify/explicit-row-selection.d.ts +47 -0
- package/dist/verify/explicit-row-selection.d.ts.map +1 -0
- package/dist/verify/explicit-row-selection.js +37 -0
- package/dist/verify/explicit-row-selection.js.map +1 -0
- package/dist/verify/gate-run-registry.d.ts.map +1 -1
- package/dist/verify/gate-run-registry.js +2 -0
- package/dist/verify/gate-run-registry.js.map +1 -1
- package/dist/verify/parked-shortfall-reuse.d.ts +194 -0
- package/dist/verify/parked-shortfall-reuse.d.ts.map +1 -0
- package/dist/verify/parked-shortfall-reuse.js +310 -0
- package/dist/verify/parked-shortfall-reuse.js.map +1 -0
- package/dist/verify/reselection-log.d.ts +22 -0
- package/dist/verify/reselection-log.d.ts.map +1 -0
- package/dist/verify/reselection-log.js +87 -0
- package/dist/verify/reselection-log.js.map +1 -0
- package/dist/verify/shortfall-park.d.ts +8 -1
- package/dist/verify/shortfall-park.d.ts.map +1 -1
- package/dist/verify/shortfall-park.js +17 -3
- package/dist/verify/shortfall-park.js.map +1 -1
- package/dist/verify/shortfall-repeat.d.ts.map +1 -1
- package/dist/verify/shortfall-repeat.js +7 -2
- package/dist/verify/shortfall-repeat.js.map +1 -1
- package/dist/verify/shortfall-rulings.d.ts +93 -6
- package/dist/verify/shortfall-rulings.d.ts.map +1 -1
- package/dist/verify/shortfall-rulings.js +69 -12
- package/dist/verify/shortfall-rulings.js.map +1 -1
- package/dist/verify/stall-detector-config.d.ts.map +1 -1
- package/dist/verify/stall-detector-config.js +2 -1
- package/dist/verify/stall-detector-config.js.map +1 -1
- package/dist/verify/stall-detectors.d.ts +6 -4
- package/dist/verify/stall-detectors.d.ts.map +1 -1
- package/dist/verify/stall-detectors.js +9 -6
- package/dist/verify/stall-detectors.js.map +1 -1
- package/dist/verify/stalled-team-backstop.d.ts +8 -2
- package/dist/verify/stalled-team-backstop.d.ts.map +1 -1
- package/dist/verify/stalled-team-backstop.js +15 -11
- package/dist/verify/stalled-team-backstop.js.map +1 -1
- package/dist/verify/team-stall-reapers.d.ts +28 -0
- package/dist/verify/team-stall-reapers.d.ts.map +1 -0
- package/dist/verify/team-stall-reapers.js +23 -0
- package/dist/verify/team-stall-reapers.js.map +1 -0
- package/dist/verify/verification-attribution-deps.d.ts +1 -1
- package/dist/verify/verification-attribution-deps.d.ts.map +1 -1
- package/dist/verify/verification-attribution-deps.js +20 -1
- package/dist/verify/verification-attribution-deps.js.map +1 -1
- package/dist/verify/verification-boundary-env.d.ts.map +1 -1
- package/dist/verify/verification-boundary-env.js +23 -9
- package/dist/verify/verification-boundary-env.js.map +1 -1
- package/dist/verify/verification-checkout.d.ts +1 -1
- package/dist/verify/verification-checkout.d.ts.map +1 -1
- package/dist/verify/verification-checkout.js.map +1 -1
- package/dist/verify/verification-commit-sharing.d.ts.map +1 -1
- package/dist/verify/verification-commit-sharing.js +14 -3
- package/dist/verify/verification-commit-sharing.js.map +1 -1
- package/dist/verify/verification-config.d.ts.map +1 -1
- package/dist/verify/verification-config.js +1 -20
- package/dist/verify/verification-config.js.map +1 -1
- package/dist/verify/verification-default-on.d.ts +4 -1
- package/dist/verify/verification-default-on.d.ts.map +1 -1
- package/dist/verify/verification-default-on.js +29 -2
- package/dist/verify/verification-default-on.js.map +1 -1
- package/dist/verify/verification-deps-default.d.ts.map +1 -1
- package/dist/verify/verification-deps-default.js +13 -0
- package/dist/verify/verification-deps-default.js.map +1 -1
- package/dist/verify/verification-deps.d.ts +38 -0
- package/dist/verify/verification-deps.d.ts.map +1 -1
- package/dist/verify/verification-deps.js +2 -1
- package/dist/verify/verification-deps.js.map +1 -1
- package/dist/verify/verification-engine.d.ts.map +1 -1
- package/dist/verify/verification-engine.js +44 -15
- package/dist/verify/verification-engine.js.map +1 -1
- package/dist/verify/verification-feedback.d.ts.map +1 -1
- package/dist/verify/verification-feedback.js +1 -19
- package/dist/verify/verification-feedback.js.map +1 -1
- package/dist/verify/verify-restatement.d.ts.map +1 -1
- package/dist/verify/verify-restatement.js +5 -1
- package/dist/verify/verify-restatement.js.map +1 -1
- package/dist/worktree/provision.d.ts.map +1 -1
- package/dist/worktree/provision.js +3 -1
- package/dist/worktree/provision.js.map +1 -1
- 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:
|
|
82
|
-
* statuses,
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* progress, so snapshotsEqual returns
|
|
86
|
-
*
|
|
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
|
-
|
|
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.
|
|
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;
|
|
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
|
|
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,
|
|
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
|
|
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;
|
|
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)
|
|
57
|
-
* (
|
|
58
|
-
*
|
|
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
|
-
*
|
|
61
|
-
*
|
|
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
|
-
* (
|
|
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
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
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":"
|
|
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
|
|
84
|
-
*
|
|
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)
|
|
103
|
-
* (
|
|
104
|
-
*
|
|
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
|
-
*
|
|
107
|
-
*
|
|
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) &&
|
|
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
|
-
* (
|
|
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
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
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) &&
|
|
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) &&
|
|
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) &&
|
|
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) &&
|
|
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":"AAAA,8FAA8F;AAC9F,wEAAwE;AACxE,
|
|
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
|
|
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
|
|
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;
|
|
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:
|
|
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 {
|
|
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
|
|
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 (
|
|
20
|
-
continue; //
|
|
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,
|
|
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":"
|
|
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":"AAAA,8FAA8F;AAC9F,0EAA0E;AAC1E,qEAAqE;AACrE,0FAA0F;AAC1F,gBAAgB;AAEhB;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAChI,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAA2B,MAAM,8CAA8C,CAAC;AAClI,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACxG,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,iCAAiC,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AACxL,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAA2B,MAAM,kCAAkC,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAqB,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;
|
|
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:
|