@telora/daemon 0.22.144 → 0.22.160
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 +8 -3
- package/dist/audit/audit-phase.d.ts +34 -1
- package/dist/audit/audit-phase.d.ts.map +1 -1
- package/dist/audit/audit-phase.js +77 -9
- package/dist/audit/audit-phase.js.map +1 -1
- package/dist/backends/codex/codex-mcp-proxy.d.ts +4 -6
- package/dist/backends/codex/codex-mcp-proxy.d.ts.map +1 -1
- package/dist/backends/codex/codex-mcp-proxy.js.map +1 -1
- package/dist/backends/codex/mcp-preflight.d.ts +2 -2
- package/dist/backends/codex/mcp-preflight.d.ts.map +1 -1
- package/dist/backends/codex/mcp-preflight.js.map +1 -1
- package/dist/completion/completion-phase-registry.d.ts +1 -0
- package/dist/completion/completion-phase-registry.d.ts.map +1 -1
- package/dist/completion/completion-phase-registry.js +7 -5
- package/dist/completion/completion-phase-registry.js.map +1 -1
- package/dist/completion/escalation-provenance.d.ts.map +1 -1
- package/dist/completion/escalation-provenance.js +5 -2
- package/dist/completion/escalation-provenance.js.map +1 -1
- package/dist/completion/exit-classification.d.ts +1 -1
- package/dist/completion/exit-classification.d.ts.map +1 -1
- package/dist/completion/exit-classification.js +7 -1
- package/dist/completion/exit-classification.js.map +1 -1
- package/dist/completion/review-cycle-cap.d.ts +81 -35
- package/dist/completion/review-cycle-cap.d.ts.map +1 -1
- package/dist/completion/review-cycle-cap.js +60 -132
- package/dist/completion/review-cycle-cap.js.map +1 -1
- package/dist/completion/review-exit-deps.d.ts +3 -1
- package/dist/completion/review-exit-deps.d.ts.map +1 -1
- package/dist/completion/review-exit-deps.js +3 -1
- package/dist/completion/review-exit-deps.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +5 -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 +3 -7
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/delivery/delivery-review-coverage.d.ts +16 -0
- package/dist/delivery/delivery-review-coverage.d.ts.map +1 -1
- package/dist/delivery/delivery-review-coverage.js +16 -0
- package/dist/delivery/delivery-review-coverage.js.map +1 -1
- package/dist/focus/focus-engine.d.ts +16 -0
- package/dist/focus/focus-engine.d.ts.map +1 -1
- package/dist/focus/focus-engine.js +37 -17
- package/dist/focus/focus-engine.js.map +1 -1
- package/dist/focus/focus-executor.d.ts.map +1 -1
- package/dist/focus/focus-executor.js +7 -0
- package/dist/focus/focus-executor.js.map +1 -1
- package/dist/focus/focus-spawn-decision.d.ts +5 -3
- package/dist/focus/focus-spawn-decision.d.ts.map +1 -1
- package/dist/focus/focus-spawn-decision.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +4 -3
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener.d.ts +15 -0
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +58 -9
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/review-cycle-cap-hold.d.ts +15 -94
- package/dist/focus/review-cycle-cap-hold.d.ts.map +1 -1
- package/dist/focus/review-cycle-cap-hold.js +54 -112
- package/dist/focus/review-cycle-cap-hold.js.map +1 -1
- package/dist/focus/session-health.d.ts +22 -1
- package/dist/focus/session-health.d.ts.map +1 -1
- package/dist/focus/session-health.js +28 -3
- package/dist/focus/session-health.js.map +1 -1
- package/dist/focus/session-process-reap.d.ts +3 -1
- package/dist/focus/session-process-reap.d.ts.map +1 -1
- package/dist/focus/session-process-reap.js +20 -0
- package/dist/focus/session-process-reap.js.map +1 -1
- package/dist/focus-stage-lifecycle/index.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/index.js +1 -0
- package/dist/focus-stage-lifecycle/index.js.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +10 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +27 -3
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
- package/dist/git/focus-integration-sync.d.ts +42 -3
- package/dist/git/focus-integration-sync.d.ts.map +1 -1
- package/dist/git/focus-integration-sync.js +38 -2
- package/dist/git/focus-integration-sync.js.map +1 -1
- package/dist/merge/abandoned-merge-recovery.d.ts.map +1 -1
- package/dist/merge/abandoned-merge-recovery.js +10 -0
- package/dist/merge/abandoned-merge-recovery.js.map +1 -1
- package/dist/merge/merge-back-loop.d.ts +1 -0
- package/dist/merge/merge-back-loop.d.ts.map +1 -1
- package/dist/merge/merge-back-loop.js +3 -3
- package/dist/merge/merge-back-loop.js.map +1 -1
- package/dist/prompt/team-prompt-base.d.ts +2 -1
- package/dist/prompt/team-prompt-base.d.ts.map +1 -1
- package/dist/prompt/team-prompt-base.js +5 -19
- package/dist/prompt/team-prompt-base.js.map +1 -1
- package/dist/prompt-sections/integration-reconcile-section.d.ts +45 -0
- package/dist/prompt-sections/integration-reconcile-section.d.ts.map +1 -0
- package/dist/prompt-sections/integration-reconcile-section.js +69 -0
- package/dist/prompt-sections/integration-reconcile-section.js.map +1 -0
- package/dist/prompt-sections/persona-sections.d.ts +0 -20
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +4 -49
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/testing-standard.d.ts +51 -0
- package/dist/prompt-sections/testing-standard.d.ts.map +1 -0
- package/dist/prompt-sections/testing-standard.js +132 -0
- package/dist/prompt-sections/testing-standard.js.map +1 -0
- package/dist/queries/agent-resolvable-promotion.d.ts.map +1 -1
- package/dist/queries/agent-resolvable-promotion.js +7 -5
- package/dist/queries/agent-resolvable-promotion.js.map +1 -1
- package/dist/queries/ended-arm.d.ts +47 -0
- package/dist/queries/ended-arm.d.ts.map +1 -0
- package/dist/queries/ended-arm.js +35 -0
- package/dist/queries/ended-arm.js.map +1 -0
- package/dist/queries/escalation-consumption.d.ts.map +1 -1
- package/dist/queries/escalation-consumption.js +0 -1
- package/dist/queries/escalation-consumption.js.map +1 -1
- package/dist/queries/focus-discovery.d.ts +14 -0
- package/dist/queries/focus-discovery.d.ts.map +1 -1
- package/dist/queries/focus-discovery.js +1 -0
- package/dist/queries/focus-discovery.js.map +1 -1
- package/dist/queries/focus-integration-conflict.d.ts +78 -0
- package/dist/queries/focus-integration-conflict.d.ts.map +1 -0
- package/dist/queries/focus-integration-conflict.js +136 -0
- package/dist/queries/focus-integration-conflict.js.map +1 -0
- package/dist/queries/focuses.d.ts +6 -3
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +13 -5
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/incident-correlation.d.ts +1 -2
- package/dist/queries/incident-correlation.d.ts.map +1 -1
- package/dist/queries/incident-correlation.js +1 -3
- package/dist/queries/incident-correlation.js.map +1 -1
- package/dist/queries/local-models.js +1 -1
- package/dist/queries/local-models.js.map +1 -1
- package/dist/queries/schemas-local-model.d.ts +47 -0
- package/dist/queries/schemas-local-model.d.ts.map +1 -0
- package/dist/queries/schemas-local-model.js +57 -0
- package/dist/queries/schemas-local-model.js.map +1 -0
- package/dist/queries/schemas.d.ts +10 -32
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +10 -41
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/sessions.d.ts +120 -12
- package/dist/queries/sessions.d.ts.map +1 -1
- package/dist/queries/sessions.js +104 -11
- package/dist/queries/sessions.js.map +1 -1
- package/dist/queries/shared.d.ts +1 -0
- package/dist/queries/shared.d.ts.map +1 -1
- package/dist/queries/shared.js +1 -1
- package/dist/queries/shared.js.map +1 -1
- package/dist/queries/system-session.d.ts.map +1 -1
- package/dist/queries/system-session.js +3 -1
- package/dist/queries/system-session.js.map +1 -1
- package/dist/resolvers/assembly-engine.d.ts +71 -1
- package/dist/resolvers/assembly-engine.d.ts.map +1 -1
- package/dist/resolvers/assembly-engine.js +82 -43
- package/dist/resolvers/assembly-engine.js.map +1 -1
- package/dist/resolvers/branch-work-arming.d.ts +133 -0
- package/dist/resolvers/branch-work-arming.d.ts.map +1 -0
- package/dist/resolvers/branch-work-arming.js +67 -0
- package/dist/resolvers/branch-work-arming.js.map +1 -0
- package/dist/resolvers/focus-review-coverage.d.ts.map +1 -1
- package/dist/resolvers/focus-review-coverage.js +31 -2
- package/dist/resolvers/focus-review-coverage.js.map +1 -1
- package/dist/resolvers/wiki-topic.d.ts +6 -5
- package/dist/resolvers/wiki-topic.d.ts.map +1 -1
- package/dist/resolvers/wiki-topic.js +43 -27
- package/dist/resolvers/wiki-topic.js.map +1 -1
- package/dist/session/session-lineage.d.ts.map +1 -1
- package/dist/session/session-lineage.js +1 -0
- package/dist/session/session-lineage.js.map +1 -1
- package/dist/shell/crash-recovery.d.ts +4 -2
- package/dist/shell/crash-recovery.d.ts.map +1 -1
- package/dist/shell/crash-recovery.js +15 -14
- package/dist/shell/crash-recovery.js.map +1 -1
- package/dist/shell/daemon-instance.d.ts +176 -0
- package/dist/shell/daemon-instance.d.ts.map +1 -0
- package/dist/shell/daemon-instance.js +281 -0
- package/dist/shell/daemon-instance.js.map +1 -0
- package/dist/shell/graceful-shutdown.d.ts +12 -1
- package/dist/shell/graceful-shutdown.d.ts.map +1 -1
- package/dist/shell/graceful-shutdown.js +7 -4
- package/dist/shell/graceful-shutdown.js.map +1 -1
- package/dist/shell/shutdown-ownership.d.ts +34 -0
- package/dist/shell/shutdown-ownership.d.ts.map +1 -0
- package/dist/shell/shutdown-ownership.js +51 -0
- package/dist/shell/shutdown-ownership.js.map +1 -0
- package/dist/shell/unified-shell.d.ts.map +1 -1
- package/dist/shell/unified-shell.js +12 -5
- package/dist/shell/unified-shell.js.map +1 -1
- package/dist/shell/worker-pidfile.d.ts +127 -11
- package/dist/shell/worker-pidfile.d.ts.map +1 -1
- package/dist/shell/worker-pidfile.js +349 -58
- package/dist/shell/worker-pidfile.js.map +1 -1
- package/dist/spawn/lead-launch.d.ts +17 -1
- package/dist/spawn/lead-launch.d.ts.map +1 -1
- package/dist/spawn/lead-launch.js +56 -7
- package/dist/spawn/lead-launch.js.map +1 -1
- package/dist/spawn/lead-process-ownership.d.ts +5 -4
- package/dist/spawn/lead-process-ownership.d.ts.map +1 -1
- package/dist/spawn/lead-process-ownership.js +7 -4
- package/dist/spawn/lead-process-ownership.js.map +1 -1
- package/dist/spawn/lifecycle.d.ts +0 -12
- package/dist/spawn/lifecycle.d.ts.map +1 -1
- package/dist/spawn/lifecycle.js +76 -19
- package/dist/spawn/lifecycle.js.map +1 -1
- package/dist/spawn/liveness.d.ts.map +1 -1
- package/dist/spawn/liveness.js +3 -1
- package/dist/spawn/liveness.js.map +1 -1
- package/dist/spawn/one-shot-process-ownership.d.ts +46 -2
- package/dist/spawn/one-shot-process-ownership.d.ts.map +1 -1
- package/dist/spawn/one-shot-process-ownership.js +78 -3
- package/dist/spawn/one-shot-process-ownership.js.map +1 -1
- package/dist/spawn/process-group-kill.d.ts.map +1 -1
- package/dist/spawn/process-group-kill.js +3 -1
- package/dist/spawn/process-group-kill.js.map +1 -1
- package/dist/spawn/process-spawn.d.ts +5 -15
- package/dist/spawn/process-spawn.d.ts.map +1 -1
- package/dist/spawn/process-spawn.js +2 -1
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts +27 -2
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +65 -43
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts +46 -2
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +57 -4
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/testing/fixtures/conflicting-repo.d.ts +30 -0
- package/dist/testing/fixtures/conflicting-repo.d.ts.map +1 -0
- package/dist/testing/fixtures/conflicting-repo.js +89 -0
- package/dist/testing/fixtures/conflicting-repo.js.map +1 -0
- package/dist/testing/fixtures/index.d.ts.map +1 -1
- package/dist/testing/fixtures/index.js +2 -1
- package/dist/testing/fixtures/index.js.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.js +2 -2
- package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
- package/dist/types/exit-category.d.ts +59 -0
- package/dist/types/exit-category.d.ts.map +1 -0
- package/dist/types/exit-category.js +133 -0
- package/dist/types/exit-category.js.map +1 -0
- package/dist/types/index.js +1 -1
- package/dist/types/session.d.ts +5 -1
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js +1 -1
- package/dist/types/session.js.map +1 -1
- package/dist/verify/stall-detector-config.d.ts +5 -1
- package/dist/verify/stall-detector-config.d.ts.map +1 -1
- package/dist/verify/stall-detector-config.js +5 -1
- package/dist/verify/stall-detector-config.js.map +1 -1
- package/dist/worktree/state.d.ts +75 -1
- package/dist/worktree/state.d.ts.map +1 -1
- package/dist/worktree/state.js +89 -17
- package/dist/worktree/state.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/queries/session-create-ownership.test.ts,
|
|
3
|
+
// packages/daemon/src/shell/crash-recovery-session-scope.test.ts,
|
|
4
|
+
// packages/daemon/src/shell/daemon-instance.test.ts, packages/daemon/src/worktree/worktree-state.test.ts
|
|
5
|
+
// PINNED-BY-END
|
|
6
|
+
/**
|
|
7
|
+
* Daemon INSTANCE identity -- which running daemon owns a session row.
|
|
8
|
+
*
|
|
9
|
+
* `daemon_hostname` answers "which machine", which is enough to keep one host's
|
|
10
|
+
* crash recovery off another host's live work. It is NOT enough to separate two
|
|
11
|
+
* daemon instances on the SAME host and product: to that scope they are the
|
|
12
|
+
* same owner, so one's recovery sweep would mark the other's running sessions
|
|
13
|
+
* failed. It is also not enough to answer the question recovery actually has to
|
|
14
|
+
* answer before it writes `failed` -- has the team this row represents actually
|
|
15
|
+
* stopped? -- because a hostname says nothing about liveness.
|
|
16
|
+
*
|
|
17
|
+
* An instance id is `<hostname>:<pid>:<startIdentity>`:
|
|
18
|
+
*
|
|
19
|
+
* - `pid` is the daemon process, comparable on its own host.
|
|
20
|
+
* - `startIdentity` is the kernel's start time for that pid (/proc stat field
|
|
21
|
+
* 22 on Linux). It makes the id PID-REUSE SAFE: a new process that happens
|
|
22
|
+
* to land on a dead daemon's pid has a different start time, so it is not
|
|
23
|
+
* mistaken for the instance that owned those rows.
|
|
24
|
+
*
|
|
25
|
+
* The id is therefore the thing crash recovery can probe: "is the daemon that
|
|
26
|
+
* wrote this row still running?" A row whose owner is alive, or whose owner
|
|
27
|
+
* cannot be determined, is left alone.
|
|
28
|
+
*
|
|
29
|
+
* A dead owner is NOT on its own proof that the row's team stopped. Team leads
|
|
30
|
+
* are spawned DETACHED, so they survive a hard-killed daemon; the boot reap
|
|
31
|
+
* that ends them (`reapAndClearWorkerPidfile`, unified-shell) is explicitly
|
|
32
|
+
* best-effort -- a missing or malformed pidfile yields no entries and a failed
|
|
33
|
+
* kill is swallowed. So the destructive pass needs a SECOND proof, about the
|
|
34
|
+
* session's own process: `classifySessionProcess`. Both must agree before a row
|
|
35
|
+
* is closed.
|
|
36
|
+
*
|
|
37
|
+
* @module shell/daemon-instance
|
|
38
|
+
*/
|
|
39
|
+
import { hostname } from 'node:os';
|
|
40
|
+
import { createLogger } from './log.js';
|
|
41
|
+
import { isProcessAlive } from '../spawn/liveness.js';
|
|
42
|
+
import { readProcessStartIdentity, isProcessGroupAlive } from '../spawn/process-group-kill.js';
|
|
43
|
+
import { readLeadRecordsBySession } from './worker-pidfile.js';
|
|
44
|
+
const log = createLogger({ module: 'daemon-instance' });
|
|
45
|
+
/** Separator between instance-id parts. Hostnames cannot contain ':'. */
|
|
46
|
+
const SEP = ':';
|
|
47
|
+
/** Memoized so every read within one daemon run returns the same identity. */
|
|
48
|
+
let cachedId = null;
|
|
49
|
+
/**
|
|
50
|
+
* This daemon instance's id. Stamped onto every session it creates, and the
|
|
51
|
+
* identity its own crash recovery compares against.
|
|
52
|
+
*/
|
|
53
|
+
export function daemonInstanceId() {
|
|
54
|
+
if (cachedId === null) {
|
|
55
|
+
const start = readProcessStartIdentity(process.pid);
|
|
56
|
+
cachedId = [hostname(), String(process.pid), start ?? 'unknown'].join(SEP);
|
|
57
|
+
}
|
|
58
|
+
return cachedId;
|
|
59
|
+
}
|
|
60
|
+
/** Reset the memo. Test seam only -- a daemon's identity never changes in life. */
|
|
61
|
+
export function resetDaemonInstanceIdCache() {
|
|
62
|
+
cachedId = null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parse an instance id, or null when it is absent or malformed. A row written
|
|
66
|
+
* by a daemon predating this column parses to null and is treated as
|
|
67
|
+
* unattributable -- never as "gone".
|
|
68
|
+
*/
|
|
69
|
+
export function parseDaemonInstanceId(id) {
|
|
70
|
+
if (typeof id !== 'string' || id.length === 0)
|
|
71
|
+
return null;
|
|
72
|
+
const parts = id.split(SEP);
|
|
73
|
+
if (parts.length !== 3)
|
|
74
|
+
return null;
|
|
75
|
+
const [host, pidText, start] = parts;
|
|
76
|
+
if (!host || !pidText)
|
|
77
|
+
return null;
|
|
78
|
+
// STRICT: Number.parseInt('200junk') is 200, which would have us probe an
|
|
79
|
+
// unintended pid on the strength of a malformed id. Require all digits.
|
|
80
|
+
if (!/^[0-9]+$/.test(pidText))
|
|
81
|
+
return null;
|
|
82
|
+
const pid = Number.parseInt(pidText, 10);
|
|
83
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
84
|
+
return null;
|
|
85
|
+
return { hostname: host, pid, startIdentity: start === 'unknown' ? null : (start ?? null) };
|
|
86
|
+
}
|
|
87
|
+
/** Real probes against this host. */
|
|
88
|
+
export function defaultInstanceProbes() {
|
|
89
|
+
return {
|
|
90
|
+
selfId: daemonInstanceId(),
|
|
91
|
+
selfHostname: hostname(),
|
|
92
|
+
isProcessAlive,
|
|
93
|
+
readStartIdentity: readProcessStartIdentity,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Classify the instance that owns a session row.
|
|
98
|
+
*
|
|
99
|
+
* Every branch that is not `gone` leaves the row alone, because only `gone` is
|
|
100
|
+
* positive evidence that the team the row represents has stopped. Recovery
|
|
101
|
+
* would rather leave a stale row than falsify a live one: a stale `running` row
|
|
102
|
+
* is visible and self-correcting on the next sweep, whereas a live session
|
|
103
|
+
* marked `failed` silently tells every reader -- including "is this worktree
|
|
104
|
+
* being written?" -- that a running team is not there.
|
|
105
|
+
*/
|
|
106
|
+
export function classifyOwningInstance(instanceId, deps) {
|
|
107
|
+
if (instanceId === deps.selfId)
|
|
108
|
+
return 'self';
|
|
109
|
+
const parsed = parseDaemonInstanceId(instanceId);
|
|
110
|
+
if (parsed === null)
|
|
111
|
+
return 'unknown';
|
|
112
|
+
// A pid from another machine is not a pid we can probe. The host scope should
|
|
113
|
+
// already have excluded it; if one arrives anyway, it is unknown, not gone.
|
|
114
|
+
if (parsed.hostname !== deps.selfHostname)
|
|
115
|
+
return 'unknown';
|
|
116
|
+
if (!deps.isProcessAlive(parsed.pid))
|
|
117
|
+
return 'gone';
|
|
118
|
+
// The pid is alive -- but is it the SAME process, or a reused pid? A start
|
|
119
|
+
// identity that disagrees means the original instance died and its pid was
|
|
120
|
+
// recycled, so the owner IS gone.
|
|
121
|
+
const liveStart = deps.readStartIdentity(parsed.pid);
|
|
122
|
+
if (parsed.startIdentity !== null && liveStart !== null && parsed.startIdentity !== liveStart) {
|
|
123
|
+
return 'gone';
|
|
124
|
+
}
|
|
125
|
+
// Alive, and nothing contradicts that it is the owner. Leave it.
|
|
126
|
+
return 'peer_alive';
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Real probes against this host. The lead-record read is memoized PER PROBE
|
|
130
|
+
* OBJECT: a sweep classifying many rows reads the file once, and every row in
|
|
131
|
+
* that sweep is judged against the same snapshot rather than a record that may
|
|
132
|
+
* change between rows.
|
|
133
|
+
*/
|
|
134
|
+
export function defaultSessionProcessProbes() {
|
|
135
|
+
let cached;
|
|
136
|
+
return {
|
|
137
|
+
isProcessAlive,
|
|
138
|
+
isProcessGroupAlive,
|
|
139
|
+
readStartIdentity: readProcessStartIdentity,
|
|
140
|
+
leadRecordsBySession: () => {
|
|
141
|
+
if (cached === undefined)
|
|
142
|
+
cached = readLeadRecordsBySession();
|
|
143
|
+
return cached;
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export function classifyRecordedProcess(record, probes) {
|
|
148
|
+
// A RESERVATION: the record exists because a spawn was about to happen. It
|
|
149
|
+
// names no pid yet, so nothing about it is decidable.
|
|
150
|
+
if (record.pending)
|
|
151
|
+
return 'indeterminate';
|
|
152
|
+
const { pid } = record;
|
|
153
|
+
if (!Number.isInteger(pid) || pid <= 1)
|
|
154
|
+
return 'indeterminate';
|
|
155
|
+
// A lead may be detached (its pid is a pgid) or the in-process teammate (not a
|
|
156
|
+
// group leader, only the bare pid answers) -- the same ambiguity
|
|
157
|
+
// spawn/lifecycle.ts handles when it signals a worker. Ask both.
|
|
158
|
+
if (!probes.isProcessGroupAlive(pid) && !probes.isProcessAlive(pid))
|
|
159
|
+
return 'gone';
|
|
160
|
+
// Alive -- but is it the SAME process? Only a matching start identity settles
|
|
161
|
+
// that. Without one recorded, or without one readable now, the pid is alive
|
|
162
|
+
// and anonymous: it may be our lead or may be anything the OS put there.
|
|
163
|
+
if (!record.startIdentity)
|
|
164
|
+
return 'indeterminate';
|
|
165
|
+
const live = probes.readStartIdentity(pid);
|
|
166
|
+
if (live === null)
|
|
167
|
+
return 'indeterminate';
|
|
168
|
+
return live === record.startIdentity ? 'alive' : 'gone';
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Classify the session's own process, from the host's DURABLE LEAD RECORD rather
|
|
172
|
+
* than from the session row's pid.
|
|
173
|
+
*
|
|
174
|
+
* The row's pid cannot answer this, for two reasons found in review:
|
|
175
|
+
*
|
|
176
|
+
* 1. It arrives TOO LATE. `launchLeadProcess` spawns the detached lead and
|
|
177
|
+
* records it, and only afterwards does `spawnTeamProcess` persist
|
|
178
|
+
* `{ status: 'running', pid }`. A hard kill or a failed API write in that
|
|
179
|
+
* window leaves a `starting` row with a null pid AND a live team. Reading
|
|
180
|
+
* that as "no process was spawned" closes a row whose team is running.
|
|
181
|
+
*
|
|
182
|
+
* 2. It is UNVERIFIABLE. A bare pid says nothing about WHICH process holds it
|
|
183
|
+
* now, so an unrelated process that recycled the number would keep a stale
|
|
184
|
+
* row `running` -- and `isWorktreeBeingWritten` would report a writer that
|
|
185
|
+
* does not exist.
|
|
186
|
+
*
|
|
187
|
+
* The lead record fixes both: it is written BEFORE the row's pid, and it carries
|
|
188
|
+
* the spawn-time start identity. Its absence is only evidence when the record
|
|
189
|
+
* itself is readable; an unreadable record is `unprovable`, never `stopped`.
|
|
190
|
+
*/
|
|
191
|
+
export function classifySessionProcess(sessionId, probes) {
|
|
192
|
+
const records = probes.leadRecordsBySession();
|
|
193
|
+
if (records === null)
|
|
194
|
+
return 'unprovable';
|
|
195
|
+
const record = records.get(sessionId);
|
|
196
|
+
if (record === undefined)
|
|
197
|
+
return 'no_process_recorded';
|
|
198
|
+
switch (classifyRecordedProcess(record, probes)) {
|
|
199
|
+
case 'alive': return 'alive';
|
|
200
|
+
case 'gone': return 'stopped';
|
|
201
|
+
default: return 'unprovable';
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Split the scoped candidates into the ones recovery may close and the ones it
|
|
206
|
+
* must leave alone, with the reason it spared each group.
|
|
207
|
+
*
|
|
208
|
+
* TWO proofs are required, and a row is closed only when both agree.
|
|
209
|
+
*
|
|
210
|
+
* 1. Its OWNER is gone. The host scope answers "whose machine", but a machine
|
|
211
|
+
* is not an owner: two daemon instances share a host. Our own live session,
|
|
212
|
+
* a peer instance still running, an unattributable or remote id -- all spared.
|
|
213
|
+
*
|
|
214
|
+
* 2. Its own PROCESS is gone. A dead owner does NOT imply a stopped team: team
|
|
215
|
+
* leads are spawned detached and survive a hard-killed daemon, and the boot
|
|
216
|
+
* reap that ends them is best-effort by design (a missing or malformed
|
|
217
|
+
* pidfile yields no entries; a failed kill is swallowed). So a live team
|
|
218
|
+
* whose daemon was `kill -9`ed reaches this pass, and closing its row is
|
|
219
|
+
* exactly the falsification the criterion forbids.
|
|
220
|
+
*
|
|
221
|
+
* The asymmetry is deliberate. A stale `running` row is visible and the next
|
|
222
|
+
* sweep re-examines it. A LIVE session marked `failed` is invisible and wrong:
|
|
223
|
+
* it tells every reader -- the dashboard, and `isWorktreeBeingWritten` -- that a
|
|
224
|
+
* running team is not there, which is how a worktree under active write comes to
|
|
225
|
+
* read as quiescent. This pass never kills anything to make its own proof true;
|
|
226
|
+
* ending a surviving orphan belongs to the identity-verified reap paths
|
|
227
|
+
* (`reapAndClearWorkerPidfile`, the untracked-lead sweep), and once they do, the
|
|
228
|
+
* next sweep reads the process as stopped and closes the row.
|
|
229
|
+
*/
|
|
230
|
+
export function partitionReapableSessions(sessions, probes, processProbes = defaultSessionProcessProbes()) {
|
|
231
|
+
const reapable = [];
|
|
232
|
+
const spared = new Map();
|
|
233
|
+
const spare = (reason, id) => {
|
|
234
|
+
const ids = spared.get(reason) ?? [];
|
|
235
|
+
ids.push(id);
|
|
236
|
+
spared.set(reason, ids);
|
|
237
|
+
};
|
|
238
|
+
for (const session of sessions) {
|
|
239
|
+
const owner = classifyOwningInstance(session.daemon_instance_id, probes);
|
|
240
|
+
if (owner === 'self') {
|
|
241
|
+
spare('owned by THIS running daemon', session.id);
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (owner === 'peer_alive') {
|
|
245
|
+
spare('owned by another daemon instance still running on this host', session.id);
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (owner === 'unknown') {
|
|
249
|
+
spare('owning daemon instance not identifiable -- cannot prove it stopped', session.id);
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
// owner === 'gone'. Now the second proof: did its team stop with it?
|
|
253
|
+
switch (classifySessionProcess(session.id, processProbes)) {
|
|
254
|
+
case 'stopped':
|
|
255
|
+
case 'no_process_recorded':
|
|
256
|
+
reapable.push(session);
|
|
257
|
+
break;
|
|
258
|
+
case 'alive':
|
|
259
|
+
spare("the session's own lead is still running -- a detached team outlived its daemon", session.id);
|
|
260
|
+
break;
|
|
261
|
+
case 'unprovable':
|
|
262
|
+
spare('the host lead record is unreadable -- cannot prove the team stopped', session.id);
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return { reapable, spared };
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* The subset of `sessions` crash recovery may close, logging what it spared and
|
|
270
|
+
* why. The one call recovery makes: everything it returns has a provably
|
|
271
|
+
* stopped owner, and everything it withheld is named in the log rather than
|
|
272
|
+
* silently dropped.
|
|
273
|
+
*/
|
|
274
|
+
export function reconcileOwnedSessions(sessions, probeSource = {}) {
|
|
275
|
+
const { reapable, spared } = partitionReapableSessions(sessions, (probeSource.instanceProbes ?? defaultInstanceProbes)(), (probeSource.sessionProcessProbes ?? defaultSessionProcessProbes)());
|
|
276
|
+
for (const [why, ids] of spared) {
|
|
277
|
+
log.info(`[crash-recovery] Leaving ${ids.length} session(s) alone (${why}): ${ids.join(', ')}`);
|
|
278
|
+
}
|
|
279
|
+
return reapable;
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=daemon-instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-instance.js","sourceRoot":"","sources":["../../src/shell/daemon-instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,18 @@ export interface GracefulShutdownDeps {
|
|
|
19
19
|
/** Floor for the reap budget when the engine drain overran the stop budget. */
|
|
20
20
|
reapMinBudgetMs: number;
|
|
21
21
|
reapWorkerFleet: (budgetMs: number) => Promise<unknown>;
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Finalize this host's worker-ownership records: drop what is CONFIRMED GONE,
|
|
24
|
+
* keep the rest. The reap above is bounded and best-effort, so a survivor must
|
|
25
|
+
* keep its record for the next boot reap rather than being erased here.
|
|
26
|
+
*
|
|
27
|
+
* OPTIONAL, and that is the point: the shell used to pass this, which made
|
|
28
|
+
* "which function the shutdown clears with" a fact about the shell's source
|
|
29
|
+
* rather than about any run. The default is the production boundary
|
|
30
|
+
* (shell/shutdown-ownership.ts), so no caller chooses it and a test that omits
|
|
31
|
+
* it drives exactly what a real SIGTERM drives.
|
|
32
|
+
*/
|
|
33
|
+
finalizeWorkerOwnership?: () => unknown;
|
|
23
34
|
stopCircuitWedgeWatcher: () => void;
|
|
24
35
|
stopOtlpReceiver: () => Promise<void>;
|
|
25
36
|
stopTelemetryWriter: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graceful-shutdown.d.ts","sourceRoot":"","sources":["../../src/shell/graceful-shutdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graceful-shutdown.d.ts","sourceRoot":"","sources":["../../src/shell/graceful-shutdown.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAuD,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAM1G,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,oFAAoF;AACpF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACvC,QAAQ,EAAE;QAAE,QAAQ,IAAI,IAAI,CAAA;KAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,wGAAwG;IACxG,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,sFAAsF;IACtF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD;;;;;;;;;;OAUG;IACH,uBAAuB,CAAC,EAAE,MAAM,OAAO,CAAC;IACxC,uBAAuB,EAAE,MAAM,IAAI,CAAC;IACpC,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IACnC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,kDAAkD;IAClD,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAMD,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAqFpG;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,mFAAmF;IACnF,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,eAAe,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAC3C,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACxE;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CA0B9D"}
|
|
@@ -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/shell/graceful-shutdown.test.ts
|
|
2
|
+
// Pinned by: packages/daemon/src/shell/graceful-shutdown.test.ts,
|
|
3
|
+
// packages/daemon/src/shell/shutdown-ownership-wiring.test.ts
|
|
3
4
|
// PINNED-BY-END
|
|
4
5
|
/**
|
|
5
6
|
* The unified daemon's graceful shutdown and the stop signals that run it.
|
|
@@ -33,6 +34,7 @@ import { daemonExitCode, isDaemonFailStopRequested } from './fail-stop.js';
|
|
|
33
34
|
import { setDaemonShuttingDown } from './shutdown-state.js';
|
|
34
35
|
import { clearStopRequest, decideStopAction, readStopRequest } from './stop-request.js';
|
|
35
36
|
import { createLogger } from './log.js';
|
|
37
|
+
import { finalizeWorkerOwnership } from './shutdown-ownership.js';
|
|
36
38
|
const log = createLogger({ module: 'telemetry' });
|
|
37
39
|
function message(err) {
|
|
38
40
|
return err instanceof Error ? err.message : String(err);
|
|
@@ -93,9 +95,10 @@ export function createGracefulShutdown(deps) {
|
|
|
93
95
|
catch (err) {
|
|
94
96
|
log.warn(`[reap] Worker-fleet reap failed: ${message(err)}`);
|
|
95
97
|
}
|
|
96
|
-
// The fleet is reaped --
|
|
97
|
-
// nor the next boot acts on
|
|
98
|
-
|
|
98
|
+
// The fleet is reaped -- drop the record of every worker CONFIRMED gone, so
|
|
99
|
+
// neither the CLI nor the next boot acts on a dead pid, and KEEP the record
|
|
100
|
+
// of anything that outlived the bounded reap so the next boot still can.
|
|
101
|
+
(deps.finalizeWorkerOwnership ?? (() => finalizeWorkerOwnership('graceful shutdown')))();
|
|
99
102
|
// Phase 2.5: Stop telemetry capture (flush remaining buffered rows, close
|
|
100
103
|
// the OTLP receiver socket) and tear down the Lacuna sidecar (SIGTERM).
|
|
101
104
|
deps.stopCircuitWedgeWatcher();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graceful-shutdown.js","sourceRoot":"","sources":["../../src/shell/graceful-shutdown.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,
|
|
1
|
+
{"version":3,"file":"graceful-shutdown.js","sourceRoot":"","sources":["../../src/shell/graceful-shutdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONE place a shutdown finalizes this host's worker-ownership records.
|
|
3
|
+
*
|
|
4
|
+
* The daemon has two shutdowns. The graceful one (shell/graceful-shutdown.ts)
|
|
5
|
+
* runs on SIGINT/SIGTERM; the auto-update one (`shutdownForUpdate` in
|
|
6
|
+
* shell/unified-shell.ts) runs before the re-exec. Both must leave the pidfile in
|
|
7
|
+
* the same state, and for the same reason: `reapWorkerFleet` is BOUNDED and
|
|
8
|
+
* best-effort, so a worker that outlived SIGKILL, one that could not be
|
|
9
|
+
* signalled, and a reservation whose spawn is in flight all survive it. Erasing
|
|
10
|
+
* the file here erases the record of exactly those -- right before the next boot
|
|
11
|
+
* reap, or the re-exec'd daemon, would have acted on them.
|
|
12
|
+
*
|
|
13
|
+
* Both paths used to reach for that themselves, and each could reach for the
|
|
14
|
+
* WRONG function: they called the unconditional `clearWorkerPidfile`, and the
|
|
15
|
+
* fix -- passing `clearWorkerPidfileIfAllGone` instead -- left the choice in
|
|
16
|
+
* place at two call sites, testable only by reading the source to see which
|
|
17
|
+
* name was written there. So the choice is gone: this is the only ownership
|
|
18
|
+
* finalization either path can perform, the graceful sequence takes it by
|
|
19
|
+
* default rather than as an injected dep, and worker-pidfile.ts no longer
|
|
20
|
+
* exports an unconditional clear for a call site to pick up.
|
|
21
|
+
*
|
|
22
|
+
* @module shell/shutdown-ownership
|
|
23
|
+
*/
|
|
24
|
+
import { type WorkerPidEntry } from './worker-pidfile.js';
|
|
25
|
+
/**
|
|
26
|
+
* Drop the ownership records of every worker CONFIRMED gone, keep the rest.
|
|
27
|
+
*
|
|
28
|
+
* `context` names the shutdown for the log. Returns the survivors kept on disk,
|
|
29
|
+
* so a caller (and a test) can see what this host is still claiming. Never
|
|
30
|
+
* throws: a shutdown step that cannot finalize ownership must not prevent the
|
|
31
|
+
* rest of the teardown, and an unreadable record is kept, not declared empty.
|
|
32
|
+
*/
|
|
33
|
+
export declare function finalizeWorkerOwnership(context: string): WorkerPidEntry[];
|
|
34
|
+
//# sourceMappingURL=shutdown-ownership.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown-ownership.d.ts","sourceRoot":"","sources":["../../src/shell/shutdown-ownership.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKvF;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAWzE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/shell/shutdown-ownership-wiring.test.ts
|
|
3
|
+
// PINNED-BY-END
|
|
4
|
+
/**
|
|
5
|
+
* The ONE place a shutdown finalizes this host's worker-ownership records.
|
|
6
|
+
*
|
|
7
|
+
* The daemon has two shutdowns. The graceful one (shell/graceful-shutdown.ts)
|
|
8
|
+
* runs on SIGINT/SIGTERM; the auto-update one (`shutdownForUpdate` in
|
|
9
|
+
* shell/unified-shell.ts) runs before the re-exec. Both must leave the pidfile in
|
|
10
|
+
* the same state, and for the same reason: `reapWorkerFleet` is BOUNDED and
|
|
11
|
+
* best-effort, so a worker that outlived SIGKILL, one that could not be
|
|
12
|
+
* signalled, and a reservation whose spawn is in flight all survive it. Erasing
|
|
13
|
+
* the file here erases the record of exactly those -- right before the next boot
|
|
14
|
+
* reap, or the re-exec'd daemon, would have acted on them.
|
|
15
|
+
*
|
|
16
|
+
* Both paths used to reach for that themselves, and each could reach for the
|
|
17
|
+
* WRONG function: they called the unconditional `clearWorkerPidfile`, and the
|
|
18
|
+
* fix -- passing `clearWorkerPidfileIfAllGone` instead -- left the choice in
|
|
19
|
+
* place at two call sites, testable only by reading the source to see which
|
|
20
|
+
* name was written there. So the choice is gone: this is the only ownership
|
|
21
|
+
* finalization either path can perform, the graceful sequence takes it by
|
|
22
|
+
* default rather than as an injected dep, and worker-pidfile.ts no longer
|
|
23
|
+
* exports an unconditional clear for a call site to pick up.
|
|
24
|
+
*
|
|
25
|
+
* @module shell/shutdown-ownership
|
|
26
|
+
*/
|
|
27
|
+
import { clearWorkerPidfileIfAllGone } from './worker-pidfile.js';
|
|
28
|
+
import { createLogger } from './log.js';
|
|
29
|
+
const log = createLogger({ module: 'shutdown-ownership' });
|
|
30
|
+
/**
|
|
31
|
+
* Drop the ownership records of every worker CONFIRMED gone, keep the rest.
|
|
32
|
+
*
|
|
33
|
+
* `context` names the shutdown for the log. Returns the survivors kept on disk,
|
|
34
|
+
* so a caller (and a test) can see what this host is still claiming. Never
|
|
35
|
+
* throws: a shutdown step that cannot finalize ownership must not prevent the
|
|
36
|
+
* rest of the teardown, and an unreadable record is kept, not declared empty.
|
|
37
|
+
*/
|
|
38
|
+
export function finalizeWorkerOwnership(context) {
|
|
39
|
+
try {
|
|
40
|
+
const survivors = clearWorkerPidfileIfAllGone();
|
|
41
|
+
if (survivors.length > 0) {
|
|
42
|
+
log.info(`[${context}] ${survivors.length} worker record(s) kept for the next boot reap`);
|
|
43
|
+
}
|
|
44
|
+
return survivors;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
log.warn(`[${context}] could not finalize worker ownership: ${err?.message ?? String(err)}`);
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=shutdown-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown-ownership.js","sourceRoot":"","sources":["../../src/shell/shutdown-ownership.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,yEAAyE;AACzE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,2BAA2B,EAAuB,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,2BAA2B,EAAE,CAAC;QAChD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,SAAS,CAAC,MAAM,+CAA+C,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,0CAA2C,GAAa,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxG,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified-shell.d.ts","sourceRoot":"","sources":["../../src/shell/unified-shell.ts"],"names":[],"mappings":"AAiCA,OAAO,EACL,KAAK,aAAa,EAMnB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"unified-shell.d.ts","sourceRoot":"","sources":["../../src/shell/unified-shell.ts"],"names":[],"mappings":"AAiCA,OAAO,EACL,KAAK,aAAa,EAMnB,MAAM,qBAAqB,CAAC;AAkD7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AA6DtE;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CA2BlB;AAMD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ahF"}
|
|
@@ -46,7 +46,8 @@ import { startOtlpReceiver, stopOtlpReceiver } from '../otlp/index.js';
|
|
|
46
46
|
import { initTelemetryWriter, stopTelemetryWriter } from '../otlp/telemetry-writer.js';
|
|
47
47
|
import { startCircuitWedgeWatcher, stopCircuitWedgeWatcher } from './circuit-wedge-watcher.js';
|
|
48
48
|
import { reapWorkerFleet } from '../spawn/index.js';
|
|
49
|
-
import {
|
|
49
|
+
import { reapAndClearWorkerPidfile } from './worker-pidfile.js';
|
|
50
|
+
import { finalizeWorkerOwnership } from './shutdown-ownership.js';
|
|
50
51
|
import { startLacunaSidecarIfEnabled, stopLacunaSidecar } from '../backends/lacuna/index.js';
|
|
51
52
|
import { rotateDaemonLog, setupCanonicalLogTee, writeDaemonMeta, removeDaemonMeta, resolveDaemonLogPath, resolvePidFilePath, ensureGlobalStateDir, STOP_DRAIN_BUDGET_MS } from './daemon-process.js';
|
|
52
53
|
import { printUnifiedConfigSummary, formatVerificationPostureLines } from './unified-shell-status.js';
|
|
@@ -222,6 +223,10 @@ export async function runUnifiedDaemon(opts) {
|
|
|
222
223
|
if (reaped.reaped.length > 0) {
|
|
223
224
|
log.info(`[startup] Reaped ${reaped.reaped.length} orphaned team lead(s) from a prior hard-killed run: ${reaped.reaped.join(', ')}`);
|
|
224
225
|
}
|
|
226
|
+
if (reaped.unsignalled.length > 0 || reaped.unverified.length > 0) {
|
|
227
|
+
log.warn(`[startup] ${reaped.unsignalled.length} recorded lead(s) could not be signalled and ` +
|
|
228
|
+
`${reaped.unverified.length} could not be identity-verified; their records are kept for the sweeps`);
|
|
229
|
+
}
|
|
225
230
|
}
|
|
226
231
|
catch (err) {
|
|
227
232
|
log.warn(`[startup] Orphan reap failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -350,7 +355,6 @@ export async function runUnifiedDaemon(opts) {
|
|
|
350
355
|
stopDrainBudgetMs: STOP_DRAIN_BUDGET_MS,
|
|
351
356
|
reapMinBudgetMs: REAP_MIN_BUDGET_MS,
|
|
352
357
|
reapWorkerFleet,
|
|
353
|
-
clearWorkerPidfile,
|
|
354
358
|
stopCircuitWedgeWatcher,
|
|
355
359
|
stopOtlpReceiver,
|
|
356
360
|
stopTelemetryWriter,
|
|
@@ -389,9 +393,12 @@ export async function runUnifiedDaemon(opts) {
|
|
|
389
393
|
}
|
|
390
394
|
catch { /* best effort */ }
|
|
391
395
|
// Teams were gracefully terminated above and will be re-spawned by the new
|
|
392
|
-
// process;
|
|
393
|
-
// not act on pids that are exiting or being legitimately resumed.
|
|
394
|
-
|
|
396
|
+
// process; finalize the lead pidfile so the re-exec'd daemon's boot reap does
|
|
397
|
+
// not act on pids that are exiting or being legitimately resumed. ONLY the
|
|
398
|
+
// ones actually gone: a worker that outlived the reap keeps its record, or
|
|
399
|
+
// the re-exec'd daemon inherits an orphan it can no longer name. Same
|
|
400
|
+
// boundary the graceful path takes by default -- there is no second one.
|
|
401
|
+
finalizeWorkerOwnership('auto-update re-exec');
|
|
395
402
|
cleanupLogTee?.();
|
|
396
403
|
removeDaemonMeta();
|
|
397
404
|
releasePidLock(pidFilePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified-shell.js","sourceRoot":"","sources":["../../src/shell/unified-shell.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unified-shell.js","sourceRoot":"","sources":["../../src/shell/unified-shell.ts"],"names":[],"mappings":"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"}
|