@groundnuty/macf-channel-server 0.2.56 → 0.2.58

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.
@@ -1,8 +1,8 @@
1
1
  import type { Registry } from '@groundnuty/macf-core';
2
2
  import type { HttpsServer, HealthState, Logger } from '@groundnuty/macf-core';
3
3
  /**
4
- * Registers SIGTERM, SIGINT, and MCP-stdin-close handlers that clean up
5
- * the agent's registry variable and stop the HTTPS server.
4
+ * Registers SIGTERM, SIGINT, SIGHUP, and MCP-stdin-close handlers that clean
5
+ * up the agent's registry variable and stop the HTTPS server.
6
6
  *
7
7
  * The channel-server runs as the Claude TUI's MCP stdio child. A normal TUI
8
8
  * exit (`/exit`, or SIGTERM-to-the-TUI) does NOT deliver a SIGTERM/SIGINT to
@@ -12,6 +12,37 @@ import type { HttpsServer, HealthState, Logger } from '@groundnuty/macf-core';
12
12
  * DR-031 TTL heartbeat (#589) remains the backstop for hard kills (SIGKILL /
13
13
  * OOM / power loss) where no handler runs at all.
14
14
  *
15
+ * macf#1035: `#627`'s stdin wiring was verified live to NOT actually
16
+ * deregister, despite passing every existing (mocked-`process.exit`) unit
17
+ * test. Root-caused to two independent, additive defects, both fixed here:
18
+ *
19
+ * 1. **Once-guard stale-value race (this file).** The previous guard was a
20
+ * `shuttingDown` boolean + a `lastResult` snapshot updated only when the
21
+ * WINNING invocation finished. Node's stdin 'end' is ALWAYS immediately
22
+ * followed by 'close' (`autoDestroy`/`emitClose` default `true` — verified
23
+ * empirically via a real child-process repro, not a rare race), and both
24
+ * are wired to the same handler. The 'close'-triggered second call saw
25
+ * `shuttingDown === true` and returned `lastResult` — which was still its
26
+ * *initial* value (`true`), because the first (real) call was still
27
+ * awaiting the async registry delete. That spurious `true` needs only one
28
+ * microtask hop to resolve, so its `process.exit(0)` always won the race
29
+ * against the real cleanup's multi-await chain (a genuine network round
30
+ * trip) and killed the process mid-deregister — on every graceful exit,
31
+ * not occasionally. Existing tests never caught this because they mock
32
+ * `process.exit`, so the abandoned real cleanup kept running silently in
33
+ * the background instead of being cut off (see `cleanupPromise` below for
34
+ * the fix: memoize the in-flight PROMISE, not a boolean-plus-snapshot).
35
+ * 2. **SIGHUP was unhandled (fixed by the new `process.on('SIGHUP', ...)`
36
+ * below).** Verified live via a tmux-topology repro matching how
37
+ * `claude.sh` actually launches agents (DR-013 tmux self-wrap execs into
38
+ * `claude`, which spawns the channel-server as a non-detached child —
39
+ * same session/process group as the pty): tearing down the pane after the
40
+ * simulated TUI process exits (tmux's default `remain-on-exit off`
41
+ * destroys the pty) delivers SIGHUP to the still-running channel-server
42
+ * child. SIGHUP's default disposition is immediate termination with NO
43
+ * handler run — worse than defect 1, since it skips the graceful path
44
+ * (and the stdin 'end' event) entirely rather than merely racing it.
45
+ *
15
46
  * Returns a cleanup function that can also be called directly.
16
47
  */
17
48
  export declare function registerShutdownHandler(config: {
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE9E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC3D;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACtD;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;CAChD,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAgJzC"}
1
+ {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC3D;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACtD;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;CAChD,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CA6KzC"}
package/dist/shutdown.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Registers SIGTERM, SIGINT, and MCP-stdin-close handlers that clean up
3
- * the agent's registry variable and stop the HTTPS server.
2
+ * Registers SIGTERM, SIGINT, SIGHUP, and MCP-stdin-close handlers that clean
3
+ * up the agent's registry variable and stop the HTTPS server.
4
4
  *
5
5
  * The channel-server runs as the Claude TUI's MCP stdio child. A normal TUI
6
6
  * exit (`/exit`, or SIGTERM-to-the-TUI) does NOT deliver a SIGTERM/SIGINT to
@@ -10,16 +10,50 @@
10
10
  * DR-031 TTL heartbeat (#589) remains the backstop for hard kills (SIGKILL /
11
11
  * OOM / power loss) where no handler runs at all.
12
12
  *
13
+ * macf#1035: `#627`'s stdin wiring was verified live to NOT actually
14
+ * deregister, despite passing every existing (mocked-`process.exit`) unit
15
+ * test. Root-caused to two independent, additive defects, both fixed here:
16
+ *
17
+ * 1. **Once-guard stale-value race (this file).** The previous guard was a
18
+ * `shuttingDown` boolean + a `lastResult` snapshot updated only when the
19
+ * WINNING invocation finished. Node's stdin 'end' is ALWAYS immediately
20
+ * followed by 'close' (`autoDestroy`/`emitClose` default `true` — verified
21
+ * empirically via a real child-process repro, not a rare race), and both
22
+ * are wired to the same handler. The 'close'-triggered second call saw
23
+ * `shuttingDown === true` and returned `lastResult` — which was still its
24
+ * *initial* value (`true`), because the first (real) call was still
25
+ * awaiting the async registry delete. That spurious `true` needs only one
26
+ * microtask hop to resolve, so its `process.exit(0)` always won the race
27
+ * against the real cleanup's multi-await chain (a genuine network round
28
+ * trip) and killed the process mid-deregister — on every graceful exit,
29
+ * not occasionally. Existing tests never caught this because they mock
30
+ * `process.exit`, so the abandoned real cleanup kept running silently in
31
+ * the background instead of being cut off (see `cleanupPromise` below for
32
+ * the fix: memoize the in-flight PROMISE, not a boolean-plus-snapshot).
33
+ * 2. **SIGHUP was unhandled (fixed by the new `process.on('SIGHUP', ...)`
34
+ * below).** Verified live via a tmux-topology repro matching how
35
+ * `claude.sh` actually launches agents (DR-013 tmux self-wrap execs into
36
+ * `claude`, which spawns the channel-server as a non-detached child —
37
+ * same session/process group as the pty): tearing down the pane after the
38
+ * simulated TUI process exits (tmux's default `remain-on-exit off`
39
+ * destroys the pty) delivers SIGHUP to the still-running channel-server
40
+ * child. SIGHUP's default disposition is immediate termination with NO
41
+ * handler run — worse than defect 1, since it skips the graceful path
42
+ * (and the stdin 'end' event) entirely rather than merely racing it.
43
+ *
13
44
  * Returns a cleanup function that can also be called directly.
14
45
  */
15
46
  export function registerShutdownHandler(config) {
16
47
  const { agentName, registry, instanceId, httpsServer, healthState, registryHeartbeat, outboxTicker, inboxTicker, logger } = config;
17
- let shuttingDown = false;
18
- let lastResult = true;
19
- async function cleanup(trigger) {
20
- if (shuttingDown)
21
- return lastResult;
22
- shuttingDown = true;
48
+ // macf#1035: memoize the IN-FLIGHT PROMISE, not a `shuttingDown` boolean +
49
+ // `lastResult` snapshot. The old shape returned `lastResult`'s stale
50
+ // default (`true`) to any trigger that arrived while the winning trigger's
51
+ // cleanup was still in flight (see the module docblock for the verified
52
+ // 'end'-then-'close' race). Sharing the actual promise means every caller
53
+ // — however many triggers land in the same tick — awaits the SAME real
54
+ // outcome; none can observe a not-yet-updated placeholder.
55
+ let cleanupPromise;
56
+ async function runCleanup(trigger) {
23
57
  logger.info('shutdown_start', {
24
58
  agent: agentName,
25
59
  ...(trigger !== undefined ? { trigger } : {}),
@@ -123,9 +157,21 @@ export function registerShutdownHandler(config) {
123
157
  ok = false;
124
158
  }
125
159
  logger.info('shutdown_complete', { agent: agentName, ok });
126
- lastResult = ok;
127
160
  return ok;
128
161
  }
162
+ // macf#1035: the exported `cleanup` is now a thin memoizing wrapper. The
163
+ // FIRST call assigns `cleanupPromise` synchronously (before `runCleanup`'s
164
+ // first `await` — `??=` and the assignment inside it happen in the same
165
+ // synchronous tick, so no second caller can ever race the assignment
166
+ // itself) and every subsequent call — regardless of trigger — returns that
167
+ // SAME promise. Only the winning trigger's value is ever passed to
168
+ // `runCleanup` (matches the pre-#1035 "trigger recorded once" contract);
169
+ // later triggers are ignored for logging purposes but correctly await the
170
+ // real, shared outcome instead of a stale placeholder.
171
+ function cleanup(trigger) {
172
+ cleanupPromise ??= runCleanup(trigger);
173
+ return cleanupPromise;
174
+ }
129
175
  // Exit 1 when any cleanup step failed so external monitors (systemd,
130
176
  // macf-actions heartbeat) surface the degraded state instead of
131
177
  // silently absorbing it into a clean exit (#103 R2). The `trigger` is
@@ -135,13 +181,25 @@ export function registerShutdownHandler(config) {
135
181
  };
136
182
  process.on('SIGTERM', handlerFor('SIGTERM'));
137
183
  process.on('SIGINT', handlerFor('SIGINT'));
184
+ // macf#1035: tmux teardown after a TUI `/exit` closes the pane's pty and
185
+ // delivers SIGHUP to the channel-server child (spawned by Claude Code
186
+ // without setsid/detach, so it shares the pty's foreground process group)
187
+ // — verified live via a tmux-topology repro. SIGHUP's default disposition
188
+ // is immediate, unconditional termination; without a handler the process
189
+ // dies before the stdin 'end' event below ever fires. This process has no
190
+ // useful existence without its parent TUI, so treating a hangup exactly
191
+ // like SIGTERM/SIGINT (graceful deregister, then exit) is the correct
192
+ // response, not merely a defensive one.
193
+ process.on('SIGHUP', handlerFor('SIGHUP'));
138
194
  // macf#627: a normal Claude-TUI exit does NOT signal this MCP-stdio child —
139
195
  // it only sees stdin reach EOF ('end') / be destroyed ('close') as the parent
140
196
  // departs. Wire the SAME deregister handler to both events so a graceful TUI
141
197
  // exit deregisters rather than stranding the registry slot until the DR-031
142
- // TTL backstop (#589). `cleanup()`'s once-guard (set synchronously before any
143
- // await) makes a stdin-close racing a SIGTERM — or 'end' then 'close' — run
144
- // the deregister exactly once. The child lingers ~8s after TUI exit
198
+ // TTL backstop (#589). `cleanup()`'s once-guard (memoized promise, set
199
+ // synchronously before any await — macf#1035) makes a stdin-close racing a
200
+ // SIGTERM — or 'end' then 'close' — run the deregister exactly once, and
201
+ // every racing trigger awaits the SAME real completion rather than a stale
202
+ // placeholder. The child lingers ~8s after TUI exit
145
203
  // (devops-observed), ample for the async deregister: the in-flight `cleanup()`
146
204
  // promise plus the still-bound HTTPS server keep the event loop alive, and we
147
205
  // exit only from `cleanup()`'s `.then()` — never mid-deregister.
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groundnuty/macf-channel-server",
3
- "version": "0.2.56",
3
+ "version": "0.2.58",
4
4
  "description": "MCP channel server for the Multi-Agent Coordination Framework. HTTPS + mTLS endpoint agents connect to for inter-agent messaging (notify), CI-completion routing, and /sign certificate issuance. Invoked by Claude Code's plugin via `npx -y @groundnuty/macf-channel-server` per DR-022.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -33,7 +33,7 @@
33
33
  "test:integration": "vitest run --config vitest.integration.config.ts"
34
34
  },
35
35
  "dependencies": {
36
- "@groundnuty/macf-core": "0.2.56",
36
+ "@groundnuty/macf-core": "0.2.58",
37
37
  "@modelcontextprotocol/sdk": "~1.29.0",
38
38
  "@opentelemetry/api": "1.9.1",
39
39
  "@opentelemetry/core": "2.7.0",