@telora/daemon 0.22.233 → 0.22.245
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 +1 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/ci/ci-red-attribution.js +1 -1
- package/dist/ci/ci-red-attribution.js.map +1 -1
- package/dist/ci/ci-status-git.js +1 -1
- package/dist/ci/ci-status-git.js.map +1 -1
- package/dist/completion/detector.d.ts.map +1 -1
- package/dist/completion/detector.js +1 -0
- package/dist/completion/detector.js.map +1 -1
- package/dist/completion/escalations.d.ts.map +1 -1
- package/dist/completion/escalations.js +1 -0
- package/dist/completion/escalations.js.map +1 -1
- package/dist/completion/event-entry-phases.d.ts.map +1 -1
- package/dist/completion/event-entry-phases.js +13 -11
- package/dist/completion/event-entry-phases.js.map +1 -1
- package/dist/completion/event-phases.d.ts.map +1 -1
- package/dist/completion/event-phases.js +16 -15
- package/dist/completion/event-phases.js.map +1 -1
- package/dist/completion/merge-phase.d.ts +4 -4
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +10 -7
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/review-breaker-hold.d.ts +107 -0
- package/dist/completion/review-breaker-hold.d.ts.map +1 -0
- package/dist/completion/review-breaker-hold.js +127 -0
- package/dist/completion/review-breaker-hold.js.map +1 -0
- package/dist/completion/review-exit-escalations.d.ts +9 -1
- package/dist/completion/review-exit-escalations.d.ts.map +1 -1
- package/dist/completion/review-exit-escalations.js +14 -3
- package/dist/completion/review-exit-escalations.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +2 -2
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/state-cascade.d.ts +14 -12
- package/dist/completion/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade.js +28 -19
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/completion/status-advance-phase.d.ts +3 -0
- package/dist/completion/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/status-advance-phase.js +2 -1
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts +3 -3
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +6 -5
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/completion/team-progress-measure.d.ts.map +1 -1
- package/dist/completion/team-progress-measure.js +1 -0
- package/dist/completion/team-progress-measure.js.map +1 -1
- package/dist/delivery/delivery-advance-block.d.ts +17 -4
- package/dist/delivery/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery/delivery-advance-block.js +203 -173
- package/dist/delivery/delivery-advance-block.js.map +1 -1
- package/dist/focus/advance-hold.d.ts +55 -0
- package/dist/focus/advance-hold.d.ts.map +1 -0
- package/dist/focus/advance-hold.js +155 -0
- package/dist/focus/advance-hold.js.map +1 -0
- package/dist/focus/focus-spawn-decision.d.ts +17 -6
- package/dist/focus/focus-spawn-decision.d.ts.map +1 -1
- package/dist/focus/focus-spawn-decision.js +6 -6
- package/dist/focus/focus-spawn-decision.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 +1 -0
- package/dist/focus/focus-worktree-state.js.map +1 -1
- package/dist/focus/listener-auto-advance.d.ts +14 -0
- package/dist/focus/listener-auto-advance.d.ts.map +1 -1
- package/dist/focus/listener-auto-advance.js +13 -10
- package/dist/focus/listener-auto-advance.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +18 -29
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener-state.d.ts.map +1 -1
- package/dist/focus/listener-state.js +1 -0
- package/dist/focus/listener-state.js.map +1 -1
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +10 -4
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.d.ts +3 -0
- package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.js +1 -0
- package/dist/focus/pending-spawn-pass-deps.js.map +1 -1
- package/dist/focus/ready-focus-spawn-action.d.ts +29 -0
- package/dist/focus/ready-focus-spawn-action.d.ts.map +1 -0
- package/dist/focus/ready-focus-spawn-action.js +32 -0
- package/dist/focus/ready-focus-spawn-action.js.map +1 -0
- package/dist/focus/ready-focus-team-work.d.ts +18 -0
- package/dist/focus/ready-focus-team-work.d.ts.map +1 -0
- package/dist/focus/ready-focus-team-work.js +59 -0
- package/dist/focus/ready-focus-team-work.js.map +1 -0
- package/dist/focus/team-actionable-work.d.ts +56 -6
- package/dist/focus/team-actionable-work.d.ts.map +1 -1
- package/dist/focus/team-actionable-work.js +56 -9
- package/dist/focus/team-actionable-work.js.map +1 -1
- package/dist/git/types.d.ts.map +1 -1
- package/dist/git/types.js +1 -0
- package/dist/git/types.js.map +1 -1
- package/dist/merge/approval-gate-state.d.ts +24 -0
- package/dist/merge/approval-gate-state.d.ts.map +1 -0
- package/dist/merge/approval-gate-state.js +67 -0
- package/dist/merge/approval-gate-state.js.map +1 -0
- package/dist/merge/focus-merge.d.ts +3 -3
- package/dist/merge/focus-merge.d.ts.map +1 -1
- package/dist/merge/focus-merge.js +6 -6
- package/dist/merge/focus-merge.js.map +1 -1
- package/dist/merge/merge-back-loop.d.ts +3 -3
- package/dist/merge/merge-back-loop.d.ts.map +1 -1
- package/dist/merge/merge-back-loop.js +10 -10
- package/dist/merge/merge-back-loop.js.map +1 -1
- package/dist/merge/merge-gate-coverage.d.ts +32 -9
- package/dist/merge/merge-gate-coverage.d.ts.map +1 -1
- package/dist/merge/merge-gate-coverage.js +69 -18
- package/dist/merge/merge-gate-coverage.js.map +1 -1
- package/dist/nexus/return.d.ts +44 -1
- package/dist/nexus/return.d.ts.map +1 -1
- package/dist/nexus/return.js +42 -0
- package/dist/nexus/return.js.map +1 -1
- package/dist/prompt/focus-prompt-builder.d.ts +10 -8
- package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
- package/dist/prompt/focus-prompt-builder.js +19 -10
- package/dist/prompt/focus-prompt-builder.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +10 -0
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/queries/deliveries.js +1 -1
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/delivery-gate-holds.d.ts +78 -0
- package/dist/queries/delivery-gate-holds.d.ts.map +1 -0
- package/dist/queries/delivery-gate-holds.js +5 -0
- package/dist/queries/delivery-gate-holds.js.map +1 -0
- package/dist/queries/delivery-gate-state.d.ts +17 -60
- package/dist/queries/delivery-gate-state.d.ts.map +1 -1
- package/dist/queries/delivery-gate-state.js +8 -3
- package/dist/queries/delivery-gate-state.js.map +1 -1
- package/dist/queries/escalations.d.ts +2 -1
- package/dist/queries/escalations.d.ts.map +1 -1
- package/dist/queries/escalations.js +3 -3
- package/dist/queries/escalations.js.map +1 -1
- package/dist/queries/focus-criteria-standing.d.ts +2 -2
- package/dist/queries/focus-discovery.js +1 -1
- package/dist/queries/focus-discovery.js.map +1 -1
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +1 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/issues.d.ts.map +1 -1
- package/dist/queries/issues.js +1 -0
- package/dist/queries/issues.js.map +1 -1
- package/dist/queries/shared.js +1 -1
- package/dist/queries/workflows.d.ts.map +1 -1
- package/dist/queries/workflows.js +1 -0
- package/dist/queries/workflows.js.map +1 -1
- package/dist/spawn/helpers.d.ts.map +1 -1
- package/dist/spawn/helpers.js +1 -0
- package/dist/spawn/helpers.js.map +1 -1
- package/dist/spawn/idle-work-stamp.d.ts +13 -7
- package/dist/spawn/idle-work-stamp.d.ts.map +1 -1
- package/dist/spawn/idle-work-stamp.js +22 -11
- package/dist/spawn/idle-work-stamp.js.map +1 -1
- package/dist/spawn/lead-continuation.d.ts.map +1 -1
- package/dist/spawn/lead-continuation.js +13 -11
- package/dist/spawn/lead-continuation.js.map +1 -1
- package/dist/spawn/spawn-cooldown.js +1 -1
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/testing/fixtures/merge-log-capture.d.ts +5 -0
- package/dist/testing/fixtures/merge-log-capture.d.ts.map +1 -0
- package/dist/testing/fixtures/merge-log-capture.js +35 -0
- package/dist/testing/fixtures/merge-log-capture.js.map +1 -0
- package/dist/testing/fixtures/pending-spawn-world.js +1 -1
- package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/verify/commit-gate-configured.d.ts.map +1 -1
- package/dist/verify/commit-gate-configured.js +1 -0
- package/dist/verify/commit-gate-configured.js.map +1 -1
- package/dist/verify/gate-process-group.d.ts +40 -0
- package/dist/verify/gate-process-group.d.ts.map +1 -0
- package/dist/verify/gate-process-group.js +91 -0
- package/dist/verify/gate-process-group.js.map +1 -0
- package/dist/verify/no-verdict-record.d.ts +103 -0
- package/dist/verify/no-verdict-record.d.ts.map +1 -0
- package/dist/verify/no-verdict-record.js +218 -0
- package/dist/verify/no-verdict-record.js.map +1 -0
- package/dist/verify/timed-out-rendered-verdict.d.ts +40 -0
- package/dist/verify/timed-out-rendered-verdict.d.ts.map +1 -0
- package/dist/verify/timed-out-rendered-verdict.js +52 -0
- package/dist/verify/timed-out-rendered-verdict.js.map +1 -0
- package/dist/verify/verification-attribution-base.js +1 -1
- package/dist/verify/verification-attribution-base.js.map +1 -1
- package/dist/verify/verification-attribution.js +2 -2
- package/dist/verify/verification-attribution.js.map +1 -1
- package/dist/verify/verification-baseline-run.d.ts.map +1 -1
- package/dist/verify/verification-baseline-run.js +5 -7
- package/dist/verify/verification-baseline-run.js.map +1 -1
- package/dist/verify/verification-baseline.js +1 -1
- package/dist/verify/verification-baseline.js.map +1 -1
- package/dist/verify/verification-checkout.js +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 +93 -10
- package/dist/verify/verification-commit-sharing.js.map +1 -1
- package/dist/verify/verification-default-on.js +1 -1
- 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 +2 -0
- package/dist/verify/verification-deps-default.js.map +1 -1
- package/dist/verify/verification-deps.d.ts +8 -0
- package/dist/verify/verification-deps.d.ts.map +1 -1
- package/dist/verify/verification-deterministic.d.ts +8 -0
- package/dist/verify/verification-deterministic.d.ts.map +1 -1
- package/dist/verify/verification-deterministic.js +3 -6
- package/dist/verify/verification-deterministic.js.map +1 -1
- package/dist/worktree/provision.d.ts +6 -5
- package/dist/worktree/provision.d.ts.map +1 -1
- package/dist/worktree/provision.js +13 -8
- package/dist/worktree/provision.js.map +1 -1
- package/dist/worktree/verify-interlock.d.ts.map +1 -1
- package/dist/worktree/verify-interlock.js +2 -0
- package/dist/worktree/verify-interlock.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by: packages/daemon/src/
|
|
2
|
+
// Pinned by: packages/daemon/src/focus/advance-hold.test.ts,
|
|
3
|
+
// packages/daemon/src/queries/incident-correlation.test.ts,
|
|
3
4
|
// packages/daemon/src/shell/safety-capture-entry-points.test.ts
|
|
4
5
|
// PINNED-BY-END
|
|
5
6
|
/**
|
|
@@ -153,22 +154,9 @@ async function safetyCommitStrandedWork(worktree, params, deps, onSweepRefusal)
|
|
|
153
154
|
* across daemon restarts (it reads the DB, holds no in-memory state).
|
|
154
155
|
*/
|
|
155
156
|
export async function ensureWorktreeCommittedBeforeAdvance(params, deps = {}) {
|
|
156
|
-
const
|
|
157
|
-
const
|
|
158
|
-
const
|
|
159
|
-
const hasOpenEsc = deps.hasOpenWorktreeDirtyEscalation ?? hasOpenWorktreeDirtyEscalation;
|
|
160
|
-
const resolveOpenEsc = deps.resolveOpenWorktreeDirtyEscalations ?? resolveOpenWorktreeDirtyEscalations;
|
|
161
|
-
const reconcileTorn = deps.reconcileTornWrite ?? reconcileTornWrite;
|
|
162
|
-
const isUnderVerify = deps.isWorktreeUnderVerify ?? isWorktreeUnderVerify;
|
|
163
|
-
const isLockfileOnly = deps.dirtyChangesAreGeneratedLockfilesOnly ?? dirtyChangesAreGeneratedLockfilesOnly;
|
|
164
|
-
const commitLockfiles = deps.commitGeneratedLockfiles ?? commitGeneratedLockfiles;
|
|
165
|
-
const getTeam = deps.getActiveTeam ?? ((id) => getActiveTeams().get(id));
|
|
166
|
-
const sendMsg = deps.sendMessage ?? sendMessage;
|
|
167
|
-
const budget = deps.autoRemediationBudget ?? resolveAutoRemediationBudget();
|
|
168
|
-
const rewakeMinIntervalMs = deps.rewakeMinIntervalMs ?? REWAKE_MIN_INTERVAL_MS;
|
|
169
|
-
const now = deps.now ?? Date.now;
|
|
170
|
-
const { deliveryId, deliveryName, focusId, organizationId, sessionId } = params;
|
|
171
|
-
const worktree = getWorktree(focusId);
|
|
157
|
+
const r = resolveAdvanceBlockDeps(deps);
|
|
158
|
+
const { deliveryName, focusId } = params;
|
|
159
|
+
const worktree = r.getWorktree(focusId);
|
|
172
160
|
if (!worktree)
|
|
173
161
|
return { ok: true };
|
|
174
162
|
// Verify interlock: if a verify command is running in this focus worktree, the
|
|
@@ -178,13 +166,13 @@ export async function ensureWorktreeCommittedBeforeAdvance(params, deps = {}) {
|
|
|
178
166
|
// budget spent), so the next poll re-evaluates cleanly once the verify completes.
|
|
179
167
|
// Guarding here as well as in guardedCommit keeps a transient mid-verify dirt
|
|
180
168
|
// from ever being read as an uncommitted-work condition in the first place.
|
|
181
|
-
if (isUnderVerify(worktree.worktreePath)) {
|
|
169
|
+
if (r.isUnderVerify(worktree.worktreePath)) {
|
|
182
170
|
log.info(`[delivery-lifecycle] Deferring advance of "${deliveryName}": a verify command is ` +
|
|
183
171
|
`running in ${worktree.worktreePath}. Not committing, re-waking, or escalating; ` +
|
|
184
172
|
`the next poll retries once verify completes.`);
|
|
185
|
-
return { ok: false, reason: 'verify in flight (safety-commit deferred)' };
|
|
173
|
+
return { ok: false, reason: 'verify in flight (safety-commit deferred)', hold: { kind: 'verify_in_flight', worktreePath: worktree.worktreePath } };
|
|
186
174
|
}
|
|
187
|
-
if (!hasUncommitted(worktree.worktreePath)) {
|
|
175
|
+
if (!r.hasUncommitted(worktree.worktreePath)) {
|
|
188
176
|
// Clean -- the dirty episode (if any) is over. Reset the retry budget so a
|
|
189
177
|
// future episode starts fresh, and auto-close any worktree-dirty escalation
|
|
190
178
|
// we filed for it so a resolved-in-fact condition stops sitting in the human
|
|
@@ -192,179 +180,222 @@ export async function ensureWorktreeCommittedBeforeAdvance(params, deps = {}) {
|
|
|
192
180
|
// common clean-advance path adds no extra DB round-trip.
|
|
193
181
|
const hadEpisode = remediationState.delete(focusId);
|
|
194
182
|
if (hadEpisode) {
|
|
195
|
-
await autoResolveClearedEscalations(resolveOpenEsc, focusId);
|
|
183
|
+
await autoResolveClearedEscalations(r.resolveOpenEsc, focusId);
|
|
196
184
|
}
|
|
197
185
|
return { ok: true };
|
|
198
186
|
}
|
|
199
187
|
const reason = `uncommitted changes in focus worktree ${worktree.worktreePath}`;
|
|
188
|
+
const hold = { kind: 'worktree_uncommitted', worktreePath: worktree.worktreePath };
|
|
200
189
|
log.warn(`Blocking advance of "${deliveryName}": ${reason}`);
|
|
201
|
-
|
|
202
|
-
// A staged index entry with NO worktree content behind it (index != HEAD,
|
|
203
|
-
// worktree == HEAD) is not agent work -- it is a torn write (e.g. a verify
|
|
204
|
-
// command mutated a tracked file and restored it while a safety-commit
|
|
205
|
-
// snapshotted the index mid-flight). There is nothing for a team to commit and
|
|
206
|
-
// nothing to preserve, so re-waking or escalating would loop forever. Reconcile
|
|
207
|
-
// the index to the worktree; the tree goes clean and the delivery advances with
|
|
208
|
-
// NO escalation. Runs FIRST so a torn write never reaches the lockfile /
|
|
209
|
-
// re-wake / safety-commit branches below. The advance-gate DETECTOR
|
|
210
|
-
// (worktreeHasUncommittedChanges, `git status --porcelain`) and this REMEDIATOR
|
|
211
|
-
// (reconcileTornWrite, index-aware) agree on this dirt -- the wedge is what this
|
|
212
|
-
// focus exists to remove (escalation 2170fdde, 2026-08-16).
|
|
213
|
-
const reconciled = reconcileTorn(worktree.worktreePath);
|
|
214
|
-
if (reconciled) {
|
|
215
|
-
log.info(`[delivery-lifecycle] Reconciled torn-write index for "${deliveryName}" at ` +
|
|
216
|
-
`${worktree.worktreePath} (${reconciled.reconciled.length} staged path(s) with no ` +
|
|
217
|
-
`worktree content); advancing without escalation.`);
|
|
218
|
-
remediationState.delete(focusId);
|
|
219
|
-
await autoResolveClearedEscalations(resolveOpenEsc, focusId);
|
|
190
|
+
if (await clearMechanicalDirt(worktree.worktreePath, deliveryName, focusId, r))
|
|
220
191
|
return { ok: true };
|
|
221
|
-
}
|
|
222
|
-
// ── Auto-remediation 1: pure generated-lockfile churn -> auto-commit ──────
|
|
223
|
-
if (isLockfileOnly(worktree.worktreePath)) {
|
|
224
|
-
const sha = commitLockfiles(worktree.worktreePath);
|
|
225
|
-
if (sha) {
|
|
226
|
-
log.info(`[delivery-lifecycle] Auto-committed generated lockfile churn for "${deliveryName}" ` +
|
|
227
|
-
`(${sha.slice(0, 8)}); advancing without escalation.`);
|
|
228
|
-
remediationState.delete(focusId);
|
|
229
|
-
// The worktree is now clean -- close any escalation the dirty churn raised.
|
|
230
|
-
await autoResolveClearedEscalations(resolveOpenEsc, focusId);
|
|
231
|
-
return { ok: true };
|
|
232
|
-
}
|
|
233
|
-
// Commit failed -- fall through to re-wake / escalation.
|
|
234
|
-
}
|
|
235
192
|
// Record that this focus has an active dirty episode so the clean path can
|
|
236
193
|
// later auto-resolve whatever escalation we file/maintain for it, even when
|
|
237
194
|
// the episode is escalated without ever re-waking a team.
|
|
238
195
|
if (!remediationState.has(focusId)) {
|
|
239
196
|
remediationState.set(focusId, { attempts: 0, lastNudgeAt: 0 });
|
|
240
197
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
198
|
+
const leadStdin = r.getTeam(focusId)?.leadStdin ?? null;
|
|
199
|
+
const step = leadStdin
|
|
200
|
+
? rewakeLeadWithinBudget(leadStdin, worktree.worktreePath, deliveryName, focusId, r)
|
|
201
|
+
: await safetyCommitWithNoTeam(worktree, params, deps, r);
|
|
202
|
+
if (step.kind === 'advance')
|
|
203
|
+
return { ok: true };
|
|
204
|
+
if (step.kind === 'held')
|
|
205
|
+
return { ok: false, reason, hold };
|
|
206
|
+
await fileAdvanceBlockEscalation(params, worktree.worktreePath, step.escalationContext, r);
|
|
207
|
+
return { ok: false, reason, hold };
|
|
208
|
+
}
|
|
209
|
+
/** ensureWorktreeCommittedBeforeAdvance's collaborators, each defaulted to the real one. */
|
|
210
|
+
function resolveAdvanceBlockDeps(deps) {
|
|
211
|
+
return {
|
|
212
|
+
getWorktree: deps.getFocusWorktree ?? getFocusWorktree,
|
|
213
|
+
hasUncommitted: deps.worktreeHasUncommittedChanges ?? worktreeHasUncommittedChanges,
|
|
214
|
+
createEsc: deps.createEscalation ?? createEscalation,
|
|
215
|
+
hasOpenEsc: deps.hasOpenWorktreeDirtyEscalation ?? hasOpenWorktreeDirtyEscalation,
|
|
216
|
+
resolveOpenEsc: deps.resolveOpenWorktreeDirtyEscalations ?? resolveOpenWorktreeDirtyEscalations,
|
|
217
|
+
reconcileTorn: deps.reconcileTornWrite ?? reconcileTornWrite,
|
|
218
|
+
isUnderVerify: deps.isWorktreeUnderVerify ?? isWorktreeUnderVerify,
|
|
219
|
+
isLockfileOnly: deps.dirtyChangesAreGeneratedLockfilesOnly ?? dirtyChangesAreGeneratedLockfilesOnly,
|
|
220
|
+
commitLockfiles: deps.commitGeneratedLockfiles ?? commitGeneratedLockfiles,
|
|
221
|
+
getTeam: deps.getActiveTeam ?? ((id) => getActiveTeams().get(id)),
|
|
222
|
+
sendMsg: deps.sendMessage ?? sendMessage,
|
|
223
|
+
budget: deps.autoRemediationBudget ?? resolveAutoRemediationBudget(),
|
|
224
|
+
rewakeMinIntervalMs: deps.rewakeMinIntervalMs ?? REWAKE_MIN_INTERVAL_MS,
|
|
225
|
+
now: deps.now ?? Date.now,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/** The dirty episode is over: forget its budget and close what it filed. */
|
|
229
|
+
async function closeDirtyEpisode(focusId, r) {
|
|
230
|
+
remediationState.delete(focusId);
|
|
231
|
+
await autoResolveClearedEscalations(r.resolveOpenEsc, focusId);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Auto-remediations 0 and 1: dirt no team needs to commit. True when the tree
|
|
235
|
+
* was made clean and the delivery may advance.
|
|
236
|
+
*
|
|
237
|
+
* 0. A pure torn write -- a staged index entry with NO worktree content behind
|
|
238
|
+
* it (index != HEAD, worktree == HEAD) is not agent work (e.g. a verify
|
|
239
|
+
* command mutated a tracked file and restored it while a safety-commit
|
|
240
|
+
* snapshotted the index mid-flight). There is nothing for a team to commit and
|
|
241
|
+
* nothing to preserve, so re-waking or escalating would loop forever. Reconcile
|
|
242
|
+
* the index to the worktree; the tree goes clean and the delivery advances with
|
|
243
|
+
* NO escalation. Runs FIRST so a torn write never reaches the lockfile /
|
|
244
|
+
* re-wake / safety-commit steps. The advance-gate DETECTOR
|
|
245
|
+
* (worktreeHasUncommittedChanges, `git status --porcelain`) and this REMEDIATOR
|
|
246
|
+
* (reconcileTornWrite, index-aware) agree on this dirt -- the wedge is what this
|
|
247
|
+
* focus exists to remove (escalation 2170fdde, 2026-08-16).
|
|
248
|
+
* 1. Pure generated-lockfile churn -> auto-commit. A failed commit falls through
|
|
249
|
+
* to re-wake / escalation.
|
|
250
|
+
*/
|
|
251
|
+
async function clearMechanicalDirt(worktreePath, deliveryName, focusId, r) {
|
|
252
|
+
const reconciled = r.reconcileTorn(worktreePath);
|
|
253
|
+
if (reconciled) {
|
|
254
|
+
log.info(`[delivery-lifecycle] Reconciled torn-write index for "${deliveryName}" at ` +
|
|
255
|
+
`${worktreePath} (${reconciled.reconciled.length} staged path(s) with no ` +
|
|
256
|
+
`worktree content); advancing without escalation.`);
|
|
257
|
+
await closeDirtyEpisode(focusId, r);
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
if (!r.isLockfileOnly(worktreePath))
|
|
261
|
+
return false;
|
|
262
|
+
const sha = r.commitLockfiles(worktreePath);
|
|
263
|
+
if (!sha)
|
|
264
|
+
return false;
|
|
265
|
+
log.info(`[delivery-lifecycle] Auto-committed generated lockfile churn for "${deliveryName}" ` +
|
|
266
|
+
`(${sha.slice(0, 8)}); advancing without escalation.`);
|
|
267
|
+
// The worktree is now clean -- close any escalation the dirty churn raised.
|
|
268
|
+
await closeDirtyEpisode(focusId, r);
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Auto-remediation 2: real work with a live lead -> re-wake it to commit, within
|
|
273
|
+
* budget. Idempotent per poll cycle at FOCUS grain: the guard runs once per
|
|
274
|
+
* delivery, but the dirty worktree is one focus-level fact, so only the first
|
|
275
|
+
* delivery in a cycle acts (re-wake or escalate); siblings within the same cycle
|
|
276
|
+
* are `held`.
|
|
277
|
+
*
|
|
278
|
+
* The bounded-retry-vs-escalate boundary is the shared resolver-dispatch policy
|
|
279
|
+
* primitive (nextResolverStep), so this dirty-worktree path and the general seam
|
|
280
|
+
* agree on the ONE definition of "retry within budget, else escalate". The
|
|
281
|
+
* re-wake IS the resolver attempt here; escalation is the residue when it is
|
|
282
|
+
* spent. Only a SUCCESSFUL nudge spends a budget tick -- a failed write means the
|
|
283
|
+
* lead is effectively unreachable, so it escalates now (TEL-5).
|
|
284
|
+
*/
|
|
285
|
+
function rewakeLeadWithinBudget(leadStdin, worktreePath, deliveryName, focusId, r) {
|
|
286
|
+
const state = remediationState.get(focusId) ?? { attempts: 0, lastNudgeAt: 0 };
|
|
287
|
+
if (r.now() - state.lastNudgeAt < r.rewakeMinIntervalMs) {
|
|
288
|
+
// A sibling delivery already acted on this focus's dirty worktree this poll
|
|
289
|
+
// cycle (re-woke or escalated): hold "one action per cycle" without
|
|
290
|
+
// re-filing or double-counting budget.
|
|
291
|
+
return { kind: 'held' };
|
|
292
|
+
}
|
|
293
|
+
// Claim the cycle up front (idempotency) regardless of which branch we take.
|
|
294
|
+
state.lastNudgeAt = r.now();
|
|
295
|
+
remediationState.set(focusId, state);
|
|
296
|
+
if (nextResolverStep(state.attempts, r.budget) !== 'retry') {
|
|
297
|
+
log.warn(`[delivery-lifecycle] Auto-remediation budget (${r.budget}) exhausted for focus ${focusId}; escalating to a human.`);
|
|
298
|
+
return {
|
|
299
|
+
kind: 'escalate',
|
|
300
|
+
escalationContext: `auto-remediation (generated-lockfile auto-commit and re-waking the team to commit) ` +
|
|
301
|
+
`did not clear the uncommitted changes within the retry budget (${r.budget})`,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
try {
|
|
305
|
+
r.sendMsg(leadStdin, `Your focus worktree has uncommitted changes, so the daemon cannot advance ` +
|
|
306
|
+
`delivery "${deliveryName}" yet. Please commit (or discard) your work in ` +
|
|
307
|
+
`${worktreePath}; the daemon advances automatically once the worktree ` +
|
|
308
|
+
`is clean. (auto-remediation attempt ${state.attempts + 1}/${r.budget})`);
|
|
309
|
+
state.attempts += 1;
|
|
261
310
|
remediationState.set(focusId, state);
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
// "retry within budget, else escalate" -- the attempt-first, bounded-retry,
|
|
266
|
-
// escalate-on-exhaustion shape this whole focus generalizes. The re-wake IS
|
|
267
|
-
// the resolver attempt here; escalation is the residue when it is spent.
|
|
268
|
-
if (nextResolverStep(state.attempts, budget) === 'retry') {
|
|
269
|
-
// Within budget: try to re-wake the lead. Only a SUCCESSFUL nudge spends a
|
|
270
|
-
// budget tick -- a failed write means the lead is effectively unreachable,
|
|
271
|
-
// so we stop pretending a re-wake is possible and escalate now (TEL-5).
|
|
272
|
-
try {
|
|
273
|
-
sendMsg(leadStdin, `Your focus worktree has uncommitted changes, so the daemon cannot advance ` +
|
|
274
|
-
`delivery "${deliveryName}" yet. Please commit (or discard) your work in ` +
|
|
275
|
-
`${worktree.worktreePath}; the daemon advances automatically once the worktree ` +
|
|
276
|
-
`is clean. (auto-remediation attempt ${state.attempts + 1}/${budget})`);
|
|
277
|
-
state.attempts += 1;
|
|
278
|
-
remediationState.set(focusId, state);
|
|
279
|
-
log.info(`[delivery-lifecycle] Re-woke team for focus ${focusId} to commit ` +
|
|
280
|
-
`(auto-remediation ${state.attempts}/${budget}); not escalating.`);
|
|
281
|
-
return { ok: false, reason };
|
|
282
|
-
}
|
|
283
|
-
catch (err) {
|
|
284
|
-
log.warn(`[delivery-lifecycle] Re-wake of team for "${deliveryName}" failed (${err.message}); ` +
|
|
285
|
-
`treating the lead as unreachable and escalating to a human.`);
|
|
286
|
-
escalationContext =
|
|
287
|
-
're-waking the team to commit failed because its input stream was unwritable ' +
|
|
288
|
-
'(the lead is effectively unreachable), so the daemon could not ask it to commit';
|
|
289
|
-
// fall through to escalation; the failed nudge did NOT spend budget.
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
// Budget exhausted -- fall through to the human escalation (durably deduped).
|
|
294
|
-
log.warn(`[delivery-lifecycle] Auto-remediation budget (${budget}) exhausted for focus ${focusId}; escalating to a human.`);
|
|
295
|
-
escalationContext =
|
|
296
|
-
`auto-remediation (generated-lockfile auto-commit and re-waking the team to commit) ` +
|
|
297
|
-
`did not clear the uncommitted changes within the retry budget (${budget})`;
|
|
298
|
-
}
|
|
311
|
+
log.info(`[delivery-lifecycle] Re-woke team for focus ${focusId} to commit ` +
|
|
312
|
+
`(auto-remediation ${state.attempts}/${r.budget}); not escalating.`);
|
|
313
|
+
return { kind: 'held' };
|
|
299
314
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
//
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
// safetyCommitWorktree primitive crash-recovery and removeWorktree use.
|
|
310
|
-
// DECIDED 2026-06-22, Jeremy -- this deliberately reverses the prior
|
|
311
|
-
// "committing incomplete agent work and merging it is unsafe" stance: the
|
|
312
|
-
// safety-commit lands on the focus branch and review still gates the merge.
|
|
313
|
-
// Capture a mass-sweep refusal so the eventual escalation can name the
|
|
314
|
-
// count/paths the guard withheld (the work stays recoverable).
|
|
315
|
-
let sweepRefusal = null;
|
|
316
|
-
const { sha, unmergedEscalated } = await safetyCommitStrandedWork(worktree, params, deps, (r) => {
|
|
317
|
-
sweepRefusal = r;
|
|
318
|
-
});
|
|
319
|
-
// A conflict refusal already filed its own escalation: filing the generic one too would duplicate it.
|
|
320
|
-
if (!sha && unmergedEscalated)
|
|
321
|
-
return { ok: false, reason };
|
|
322
|
-
if (sha) {
|
|
323
|
-
log.info(`[delivery-lifecycle] No live team for focus ${focusId} to re-wake; safety-committed ` +
|
|
324
|
-
`uncommitted agent work ${sha.slice(0, 8)} and advancing "${deliveryName}" to verify -- ` +
|
|
325
|
-
`review is the gate.`);
|
|
326
|
-
// The worktree is now clean -- close out the dirty episode and auto-resolve
|
|
327
|
-
// any worktree-dirty escalation we filed for this focus, mirroring the
|
|
328
|
-
// lockfile-only auto-commit branch above.
|
|
329
|
-
remediationState.delete(focusId);
|
|
330
|
-
await autoResolveClearedEscalations(resolveOpenEsc, focusId);
|
|
331
|
-
return { ok: true };
|
|
332
|
-
}
|
|
333
|
-
// Safety-commit failed -- the one genuine corner that still needs a human.
|
|
334
|
-
// Fall through to the escalation block, explaining the corner (TEL-3).
|
|
335
|
-
// A sweep refusal is a distinct, recoverable corner: name the count/paths so
|
|
336
|
-
// an agent/operator can commit the legitimate subset (the daemon kept the
|
|
337
|
-
// scratch/sweep out of history and preserved the working tree).
|
|
338
|
-
if (sweepRefusal) {
|
|
339
|
-
const r = sweepRefusal;
|
|
340
|
-
escalationContext =
|
|
341
|
-
`no team is live to re-wake and the daemon REFUSED to safety-commit ${r.count} files ` +
|
|
342
|
-
`(exceeds the ${r.maxFiles}-file sweep threshold; e.g. ${r.sample.slice(0, 5).join(', ')}), ` +
|
|
343
|
-
`so a mass sweep was kept out of history and the working tree is preserved for recovery`;
|
|
344
|
-
}
|
|
345
|
-
else {
|
|
346
|
-
escalationContext =
|
|
347
|
-
'no team is live to re-wake and the WIP safety-commit of the uncommitted agent work ' +
|
|
348
|
-
'failed, so the daemon could not self-resolve';
|
|
349
|
-
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
log.warn(`[delivery-lifecycle] Re-wake of team for "${deliveryName}" failed (${err.message}); ` +
|
|
317
|
+
`treating the lead as unreachable and escalating to a human.`);
|
|
318
|
+
// The failed nudge did NOT spend budget.
|
|
319
|
+
return {
|
|
320
|
+
kind: 'escalate',
|
|
321
|
+
escalationContext: 're-waking the team to commit failed because its input stream was unwritable ' +
|
|
322
|
+
'(the lead is effectively unreachable), so the daemon could not ask it to commit',
|
|
323
|
+
};
|
|
350
324
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* No live team to re-wake and the dirt is not generated-lockfile-only. The team
|
|
328
|
+
* wrote real work but exited (or was killed) before committing, leaving it
|
|
329
|
+
* stranded: the commit-gate has no team to re-wake, and re-spawning a team is out
|
|
330
|
+
* of scope here. Rather than file a needs_operator escalation for a condition the
|
|
331
|
+
* daemon can self-resolve, make a WIP safety-commit of the uncommitted agent work
|
|
332
|
+
* and advance to verify -- review is the real gate, so committing the
|
|
333
|
+
* work-in-progress loses nothing and the differential loop is not left churning
|
|
334
|
+
* on a stranded delivery. This reuses the same safetyCommitWorktree primitive
|
|
335
|
+
* crash-recovery and removeWorktree use. DECIDED 2026-06-22, Jeremy -- this
|
|
336
|
+
* deliberately reverses the prior "committing incomplete agent work and merging
|
|
337
|
+
* it is unsafe" stance: the safety-commit lands on the focus branch and review
|
|
338
|
+
* still gates the merge.
|
|
339
|
+
*/
|
|
340
|
+
async function safetyCommitWithNoTeam(worktree, params, deps, r) {
|
|
341
|
+
const { deliveryName, focusId } = params;
|
|
342
|
+
// Capture a mass-sweep refusal so the eventual escalation can name the
|
|
343
|
+
// count/paths the guard withheld (the work stays recoverable).
|
|
344
|
+
let sweepRefusal = null;
|
|
345
|
+
const { sha, unmergedEscalated } = await safetyCommitStrandedWork(worktree, params, deps, (report) => {
|
|
346
|
+
sweepRefusal = report;
|
|
347
|
+
});
|
|
348
|
+
// A conflict refusal already filed its own escalation: filing the generic one too would duplicate it.
|
|
349
|
+
if (!sha && unmergedEscalated)
|
|
350
|
+
return { kind: 'held' };
|
|
351
|
+
if (sha) {
|
|
352
|
+
log.info(`[delivery-lifecycle] No live team for focus ${focusId} to re-wake; safety-committed ` +
|
|
353
|
+
`uncommitted agent work ${sha.slice(0, 8)} and advancing "${deliveryName}" to verify -- ` +
|
|
354
|
+
`review is the gate.`);
|
|
355
|
+
// The worktree is now clean -- close out the dirty episode, mirroring the
|
|
356
|
+
// lockfile-only auto-commit.
|
|
357
|
+
await closeDirtyEpisode(focusId, r);
|
|
358
|
+
return { kind: 'advance' };
|
|
359
|
+
}
|
|
360
|
+
// Safety-commit failed -- the one genuine corner that still needs a human
|
|
361
|
+
// (TEL-3). A sweep refusal is a distinct, recoverable corner: name the
|
|
362
|
+
// count/paths so an agent/operator can commit the legitimate subset (the
|
|
363
|
+
// daemon kept the scratch/sweep out of history and preserved the working tree).
|
|
364
|
+
if (sweepRefusal) {
|
|
365
|
+
const refusal = sweepRefusal;
|
|
366
|
+
return {
|
|
367
|
+
kind: 'escalate',
|
|
368
|
+
escalationContext: `no team is live to re-wake and the daemon REFUSED to safety-commit ${refusal.count} files ` +
|
|
369
|
+
`(exceeds the ${refusal.maxFiles}-file sweep threshold; e.g. ${refusal.sample.slice(0, 5).join(', ')}), ` +
|
|
370
|
+
`so a mass sweep was kept out of history and the working tree is preserved for recovery`,
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
return {
|
|
374
|
+
kind: 'escalate',
|
|
375
|
+
escalationContext: 'no team is live to re-wake and the WIP safety-commit of the uncommitted agent work ' +
|
|
376
|
+
'failed, so the daemon could not self-resolve',
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* File the residue (proposed needs_operator, no human act). Reached only when the
|
|
381
|
+
* retry budget is exhausted, the lead was unreachable, or no team is reachable to
|
|
382
|
+
* re-wake and the safety-commit failed. Durable focus-grain dedup still applies;
|
|
383
|
+
* fail open on lookup error so a genuine first escalation is not silently
|
|
384
|
+
* swallowed. Never throws.
|
|
385
|
+
*/
|
|
386
|
+
async function fileAdvanceBlockEscalation(params, worktreePath, escalationContext, r) {
|
|
387
|
+
const { deliveryId, deliveryName, focusId, organizationId, sessionId } = params;
|
|
356
388
|
let alreadyOpen = false;
|
|
357
389
|
try {
|
|
358
|
-
alreadyOpen = await hasOpenEsc(focusId);
|
|
390
|
+
alreadyOpen = await r.hasOpenEsc(focusId);
|
|
359
391
|
}
|
|
360
392
|
catch (err) {
|
|
361
393
|
log.warn(`[delivery-lifecycle] Open advance-block escalation lookup failed for "${deliveryName}", proceeding to file: ${err.message}`);
|
|
362
394
|
}
|
|
363
|
-
if (alreadyOpen)
|
|
364
|
-
return
|
|
365
|
-
}
|
|
395
|
+
if (alreadyOpen)
|
|
396
|
+
return;
|
|
366
397
|
try {
|
|
367
|
-
await withRetry(() => createEsc({
|
|
398
|
+
await withRetry(() => r.createEsc({
|
|
368
399
|
organizationId,
|
|
369
400
|
sessionId: sessionId ?? '',
|
|
370
401
|
issueId: null,
|
|
@@ -382,12 +413,11 @@ export async function ensureWorktreeCommittedBeforeAdvance(params, deps = {}) {
|
|
|
382
413
|
`that the daemon could not auto-remediate.`,
|
|
383
414
|
whatWasTried: 'Daemon detected all work issues Done and was about to advance the delivery, but the ' +
|
|
384
415
|
`focus worktree had uncommitted changes. Escalating because ${escalationContext}.`,
|
|
385
|
-
helpNeeded: `Commit (or discard) pending changes in ${
|
|
416
|
+
helpNeeded: `Commit (or discard) pending changes in ${worktreePath}, then the next poll will advance the delivery.`,
|
|
386
417
|
}), { maxAttempts: 3, label: 'escalation-uncommitted-before-advance' });
|
|
387
418
|
}
|
|
388
419
|
catch (err) {
|
|
389
420
|
log.error(`Failed to create uncommitted-changes escalation: ${err.message}`);
|
|
390
421
|
}
|
|
391
|
-
return { ok: false, reason };
|
|
392
422
|
}
|
|
393
423
|
//# sourceMappingURL=delivery-advance-block.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-advance-block.js","sourceRoot":"","sources":["../../src/delivery/delivery-advance-block.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"delivery-advance-block.js","sourceRoot":"","sources":["../../src/delivery/delivery-advance-block.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type DeliveryGateRowIo, type DeliveryGateState } from '../queries/deliveries.js';
|
|
2
|
+
import type { AdvanceHoldDetail } from '../queries/delivery-gate-holds.js';
|
|
3
|
+
import type { AdvancePrecheckHold, AdvancePrecheckResult } from '../delivery/delivery-advance-block.js';
|
|
4
|
+
/** The guard names of the paired `blocking` entries -- one per hold reason. */
|
|
5
|
+
export declare const ADVANCE_HOLD_GUARDS: ReadonlySet<string>;
|
|
6
|
+
/** At most this many paths are named; the count carries the rest. */
|
|
7
|
+
export declare const ADVANCE_HOLD_PATH_CAP = 20;
|
|
8
|
+
/**
|
|
9
|
+
* The uncommitted paths in a worktree, as `git status --porcelain` names them
|
|
10
|
+
* (a rename names its destination). Empty when git cannot be read -- the hold
|
|
11
|
+
* is still recorded, just without paths.
|
|
12
|
+
*/
|
|
13
|
+
export declare function listUncommittedPaths(worktreePath: string): string[];
|
|
14
|
+
/** Build the hold detail for a precheck refusal. Pure over its inputs. */
|
|
15
|
+
export declare function buildAdvanceHold(hold: AdvancePrecheckHold, uncommittedPaths: readonly string[], nowIso: string): AdvanceHoldDetail;
|
|
16
|
+
/**
|
|
17
|
+
* The gate_state with `hold` recorded, merged over what the row already carries
|
|
18
|
+
* (verification history and any other key survive). Returns undefined when the
|
|
19
|
+
* same hold is already recorded, so a hold that stands across polls writes once.
|
|
20
|
+
* `heldSince` is kept from the standing record when only the paths changed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function withAdvanceHold(prior: DeliveryGateState | null, hold: AdvanceHoldDetail): DeliveryGateState | undefined;
|
|
23
|
+
/** The gate_state with any advance hold removed; undefined when there is none. */
|
|
24
|
+
export declare function withoutAdvanceHold(prior: DeliveryGateState | null): DeliveryGateState | undefined;
|
|
25
|
+
/** Injectable seams (tests drive the row IO and the path read). */
|
|
26
|
+
export interface AdvanceHoldDeps {
|
|
27
|
+
io?: Partial<DeliveryGateRowIo>;
|
|
28
|
+
listUncommittedPaths?: (worktreePath: string) => string[];
|
|
29
|
+
now?: () => string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Record a precheck refusal on the delivery's gate_state, at the row's own
|
|
33
|
+
* status and in its serialized write turn. A standing identical hold writes
|
|
34
|
+
* nothing. Throws what the row read/write throws; the caller logs and moves on.
|
|
35
|
+
*/
|
|
36
|
+
export declare function recordAdvanceHold(deliveryId: string, hold: AdvancePrecheckHold, deps?: AdvanceHoldDeps): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Clear a recorded advance hold (the delivery re-opened: it holds open work
|
|
39
|
+
* again, so nothing is waiting on the advance). No write when there is none.
|
|
40
|
+
*/
|
|
41
|
+
export declare function clearAdvanceHold(deliveryId: string, deps?: AdvanceHoldDeps): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* An advance the precheck refused: log it, and name the hold where the team and
|
|
44
|
+
* the dashboard read it -- a finished delivery held at coding otherwise looks
|
|
45
|
+
* stuck, and a team that cannot see why escalates for a status the daemon owns.
|
|
46
|
+
* The live pass (focus/listener-auto-advance.ts) and the team-exit pass
|
|
47
|
+
* (completion/status-advance-phase.ts) both call it. Logs, never throws.
|
|
48
|
+
*/
|
|
49
|
+
export declare function noteAdvanceRefused(delivery: {
|
|
50
|
+
id: string;
|
|
51
|
+
name: string;
|
|
52
|
+
}, precheck: AdvancePrecheckResult, record?: typeof recordAdvanceHold): Promise<void>;
|
|
53
|
+
/** Whether a delivery's gate_state (as read) carries an advance hold. */
|
|
54
|
+
export declare function hasAdvanceHold(gateState: unknown): boolean;
|
|
55
|
+
//# sourceMappingURL=advance-hold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance-hold.d.ts","sourceRoot":"","sources":["../../src/focus/advance-hold.ts"],"names":[],"mappings":"AAkCA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAKxG,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAGlD,CAAC;AAEH,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAcnE;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,mBAAmB,EACzB,gBAAgB,EAAE,SAAS,MAAM,EAAE,EACnC,MAAM,EAAE,MAAM,GACb,iBAAiB,CAWnB;AAeD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAC/B,IAAI,EAAE,iBAAiB,GACtB,iBAAiB,GAAG,SAAS,CAW/B;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,iBAAiB,GAAG,SAAS,CAOjG;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChC,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,mBAAmB,EACzB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpG;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACtC,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,GAAE,OAAO,iBAAqC,GACnD,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAG1D"}
|