@groundnuty/macf-channel-server 0.2.44 → 0.2.46
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/dist/collision.d.ts +41 -6
- package/dist/collision.d.ts.map +1 -1
- package/dist/collision.js +43 -10
- package/dist/collision.js.map +1 -1
- package/dist/register-with-takeover.d.ts +67 -0
- package/dist/register-with-takeover.d.ts.map +1 -0
- package/dist/register-with-takeover.js +95 -0
- package/dist/register-with-takeover.js.map +1 -0
- package/dist/registry-heartbeat.d.ts +27 -1
- package/dist/registry-heartbeat.d.ts.map +1 -1
- package/dist/registry-heartbeat.js +43 -11
- package/dist/registry-heartbeat.js.map +1 -1
- package/dist/server.js +68 -26
- package/dist/server.js.map +1 -1
- package/dist/shutdown.d.ts +1 -1
- package/dist/shutdown.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/collision.d.ts
CHANGED
|
@@ -5,16 +5,35 @@ export declare class CollisionError extends MacfError {
|
|
|
5
5
|
constructor(name: string, host: string, port: number);
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
* Thrown when
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
8
|
+
* Thrown ONLY when a `registerConditional` write-time race is lost to a
|
|
9
|
+
* GENUINELY DIFFERENT + NEWER + LIVE instance (groundnuty/macf#702 reshaped
|
|
10
|
+
* this from groundnuty/macf#439's original "any `ok:false` aborts" — the bug
|
|
11
|
+
* that bricked devops for 8h: a stale/same/older `current` must FORCE the
|
|
12
|
+
* claim via retry, never throw this).
|
|
13
|
+
*
|
|
14
|
+
* This is a CLEAN YIELD, not a crash-loop failure — a legitimately newer live
|
|
15
|
+
* peer already holds the slot, so standing down is the correct outcome. The
|
|
16
|
+
* caller (server.ts) catches this distinctly and exits 0 ("a newer instance
|
|
17
|
+
* owns the slot, I yield"), NOT the fatal exit-1 path used for
|
|
18
|
+
* `CollisionError` and other bootstrap aborts. `current` is the conflicting
|
|
19
|
+
* (newer, live) registration observed at write time.
|
|
14
20
|
*/
|
|
15
21
|
export declare class RegisterRaceError extends MacfError {
|
|
16
22
|
constructor(name: string, current: AgentInfo | null);
|
|
17
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Bound on the over-register retry loop (groundnuty/macf#702): how many
|
|
26
|
+
* times server.ts re-attempts `registerConditional` after a `lost-to-newer`
|
|
27
|
+
* result classifies as claim-over-stale (not yield-to-newer-live). Each
|
|
28
|
+
* retry re-reads + re-classifies the conflicting `current` via
|
|
29
|
+
* `classifyPeer`, so this bounds the number of `/health` liveness probes a
|
|
30
|
+
* relaunch will issue against a pathologically flapping slot before giving
|
|
31
|
+
* up. In practice a single retry resolves the devops-class case (the
|
|
32
|
+
* conflicting `current` IS the stale entry we already decided to take over);
|
|
33
|
+
* the extra headroom absorbs a second legitimate racer without looping
|
|
34
|
+
* forever.
|
|
35
|
+
*/
|
|
36
|
+
export declare const MAX_REGISTER_RETRIES = 5;
|
|
18
37
|
/** Result of a collision /health ping: liveness + the advertised version
|
|
19
38
|
* (null when the peer answered but carried no `version` field — a
|
|
20
39
|
* pre-groundnuty/macf#424 instance — or was unreachable/unparseable). */
|
|
@@ -79,4 +98,20 @@ export declare function checkCollision(name: string, registry: Registry, certPat
|
|
|
79
98
|
readonly agentCertPath: string;
|
|
80
99
|
readonly agentKeyPath: string;
|
|
81
100
|
}, incomingVersion: string, logger: Logger): Promise<CollisionResult>;
|
|
101
|
+
/**
|
|
102
|
+
* Classify a KNOWN existing registration (`existing`) as register-target-
|
|
103
|
+
* absent-equivalent / takeover / abort — the liveness + #424 version quadrant
|
|
104
|
+
* + DR-031 staleness override, factored out of `checkCollision` so the
|
|
105
|
+
* groundnuty/macf#702 over-register retry loop in server.ts can re-classify
|
|
106
|
+
* the `current` value returned by a lost `registerConditional` race WITHOUT
|
|
107
|
+
* an extra `registry.get()` round-trip (which would reopen a fresh TOCTOU
|
|
108
|
+
* window against the very value we just observed at write-time). Byte-for-
|
|
109
|
+
* byte the same decision logic `checkCollision` has always run — this is a
|
|
110
|
+
* pure extraction, not a behavior change for the original call path.
|
|
111
|
+
*/
|
|
112
|
+
export declare function classifyPeer(name: string, existing: AgentInfo, certPaths: {
|
|
113
|
+
readonly caCertPath: string;
|
|
114
|
+
readonly agentCertPath: string;
|
|
115
|
+
readonly agentKeyPath: string;
|
|
116
|
+
}, incomingVersion: string, logger: Logger): Promise<CollisionResult>;
|
|
82
117
|
//# sourceMappingURL=collision.d.ts.map
|
package/dist/collision.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collision.d.ts","sourceRoot":"","sources":["../src/collision.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAwD,MAAM,uBAAuB,CAAC;AAKxG,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAQrD;AAED
|
|
1
|
+
{"version":3,"file":"collision.d.ts","sourceRoot":"","sources":["../src/collision.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAwD,MAAM,uBAAuB,CAAC;AAKxG,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAQrD;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;gBAClC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;CAYpD;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AA2BtC;;0EAE0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AA2GD,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE;IACT,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,EACD,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,CAS1B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE;IACT,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,EACD,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,CA4G1B"}
|
package/dist/collision.js
CHANGED
|
@@ -11,24 +11,43 @@ export class CollisionError extends MacfError {
|
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* Thrown when
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
14
|
+
* Thrown ONLY when a `registerConditional` write-time race is lost to a
|
|
15
|
+
* GENUINELY DIFFERENT + NEWER + LIVE instance (groundnuty/macf#702 reshaped
|
|
16
|
+
* this from groundnuty/macf#439's original "any `ok:false` aborts" — the bug
|
|
17
|
+
* that bricked devops for 8h: a stale/same/older `current` must FORCE the
|
|
18
|
+
* claim via retry, never throw this).
|
|
19
|
+
*
|
|
20
|
+
* This is a CLEAN YIELD, not a crash-loop failure — a legitimately newer live
|
|
21
|
+
* peer already holds the slot, so standing down is the correct outcome. The
|
|
22
|
+
* caller (server.ts) catches this distinctly and exits 0 ("a newer instance
|
|
23
|
+
* owns the slot, I yield"), NOT the fatal exit-1 path used for
|
|
24
|
+
* `CollisionError` and other bootstrap aborts. `current` is the conflicting
|
|
25
|
+
* (newer, live) registration observed at write time.
|
|
20
26
|
*/
|
|
21
27
|
export class RegisterRaceError extends MacfError {
|
|
22
28
|
constructor(name, current) {
|
|
23
29
|
super('AGENT_REGISTER_RACE', current === null
|
|
24
30
|
? `Agent '${name}' lost a registration race: the slot changed between ` +
|
|
25
|
-
'the collision check and the write (now empty).
|
|
26
|
-
: `Agent '${name}' lost a registration race
|
|
27
|
-
`
|
|
28
|
-
'
|
|
31
|
+
'the collision check and the write (now empty). Yielding; relaunch to retry.'
|
|
32
|
+
: `Agent '${name}' lost a registration race to a newer live instance ` +
|
|
33
|
+
`(now ${current.host}:${current.port}, instance ${current.instance_id}). ` +
|
|
34
|
+
'Yielding; the newer instance holds the slot.');
|
|
29
35
|
this.name = 'RegisterRaceError';
|
|
30
36
|
}
|
|
31
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Bound on the over-register retry loop (groundnuty/macf#702): how many
|
|
40
|
+
* times server.ts re-attempts `registerConditional` after a `lost-to-newer`
|
|
41
|
+
* result classifies as claim-over-stale (not yield-to-newer-live). Each
|
|
42
|
+
* retry re-reads + re-classifies the conflicting `current` via
|
|
43
|
+
* `classifyPeer`, so this bounds the number of `/health` liveness probes a
|
|
44
|
+
* relaunch will issue against a pathologically flapping slot before giving
|
|
45
|
+
* up. In practice a single retry resolves the devops-class case (the
|
|
46
|
+
* conflicting `current` IS the stale entry we already decided to take over);
|
|
47
|
+
* the extra headroom absorbs a second legitimate racer without looping
|
|
48
|
+
* forever.
|
|
49
|
+
*/
|
|
50
|
+
export const MAX_REGISTER_RETRIES = 5;
|
|
32
51
|
const HEALTH_PING_TIMEOUT_MS = 5000;
|
|
33
52
|
/**
|
|
34
53
|
* Liveness re-confirmation against the just-killed-port race (groundnuty/macf#553).
|
|
@@ -189,6 +208,20 @@ export async function checkCollision(name, registry, certPaths, incomingVersion,
|
|
|
189
208
|
logger.info('collision_check', { result: 'fresh', agent: name });
|
|
190
209
|
return { action: 'register' };
|
|
191
210
|
}
|
|
211
|
+
return classifyPeer(name, existing, certPaths, incomingVersion, logger);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Classify a KNOWN existing registration (`existing`) as register-target-
|
|
215
|
+
* absent-equivalent / takeover / abort — the liveness + #424 version quadrant
|
|
216
|
+
* + DR-031 staleness override, factored out of `checkCollision` so the
|
|
217
|
+
* groundnuty/macf#702 over-register retry loop in server.ts can re-classify
|
|
218
|
+
* the `current` value returned by a lost `registerConditional` race WITHOUT
|
|
219
|
+
* an extra `registry.get()` round-trip (which would reopen a fresh TOCTOU
|
|
220
|
+
* window against the very value we just observed at write-time). Byte-for-
|
|
221
|
+
* byte the same decision logic `checkCollision` has always run — this is a
|
|
222
|
+
* pure extraction, not a behavior change for the original call path.
|
|
223
|
+
*/
|
|
224
|
+
export async function classifyPeer(name, existing, certPaths, incomingVersion, logger) {
|
|
192
225
|
logger.info('collision_check', {
|
|
193
226
|
result: 'variable_exists',
|
|
194
227
|
agent: name,
|
package/dist/collision.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collision.js","sourceRoot":"","sources":["../src/collision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAExG,yEAAyE;AACzE,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAE5C,MAAM,OAAO,cAAe,SAAQ,SAAS;IAC3C,YAAY,IAAY,EAAE,IAAY,EAAE,IAAY;QAClD,KAAK,CACH,iBAAiB,EACjB,UAAU,IAAI,2BAA2B,IAAI,IAAI,IAAI,IAAI;YACzD,kDAAkD,CACnD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"collision.js","sourceRoot":"","sources":["../src/collision.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { AgentInfo, Registry, Logger } from '@groundnuty/macf-core';
|
|
2
|
+
import type { CollisionResult } from './collision.js';
|
|
3
|
+
/**
|
|
4
|
+
* Over-register loop (groundnuty/macf#702) — the load-bearing fix for the
|
|
5
|
+
* register-race abort that bricked devops for 8h (2026-07-01).
|
|
6
|
+
*
|
|
7
|
+
* Invariant: **exactly one LIVE instance per agent-identity; the newest launch
|
|
8
|
+
* is authoritative.** A relaunch must CLAIM its own slot even when a stale /
|
|
9
|
+
* same / older entry is present — never abort-to-dead because the slot is
|
|
10
|
+
* occupied. It YIELDS only to a GENUINELY newer + live instance.
|
|
11
|
+
*
|
|
12
|
+
* Contract:
|
|
13
|
+
* - `initialExpected` is what the collision check observed the slot as: the
|
|
14
|
+
* takeover target (a stale/dead/older entry) for `action:'takeover'`, or
|
|
15
|
+
* `null` (expected-absent) for `action:'register'`.
|
|
16
|
+
* - `registerConditional` either CLAIMS (`ok:true` — including over a
|
|
17
|
+
* stale/unchanged entry, which is the devops fix: `current==expected`
|
|
18
|
+
* always claims, even under GitHub-Variables read-after-write lag) or
|
|
19
|
+
* reports a real conflict (`ok:false, reason:'lost-to-newer', current`).
|
|
20
|
+
* - On a conflict this loop RE-CLASSIFIES `current` with the same liveness +
|
|
21
|
+
* #424 version quadrant the collision check uses (`classifyPeer`, applied
|
|
22
|
+
* directly to `current` to avoid reopening a fresh `registry.get` TOCTOU
|
|
23
|
+
* window):
|
|
24
|
+
* - `classifyPeer` says `abort` → `current` is a genuinely newer LIVE
|
|
25
|
+
* peer → YIELD by throwing `RegisterRaceError` (the caller exits 0 —
|
|
26
|
+
* a clean stand-down, NOT a crash-loop abort-to-dead).
|
|
27
|
+
* - `classifyPeer` says `takeover` → `current` is stale/dead/older →
|
|
28
|
+
* FORCE the claim: retry with `expected = current`.
|
|
29
|
+
* - `current === null` (slot emptied by a racing deregister/prune) →
|
|
30
|
+
* retry against expected-absent.
|
|
31
|
+
* - Bounded by `MAX_REGISTER_RETRIES` so a pathologically flapping slot
|
|
32
|
+
* can't loop forever; on exhaustion it yields (throws RegisterRaceError)
|
|
33
|
+
* against the last-observed `current` rather than spinning.
|
|
34
|
+
*
|
|
35
|
+
* `deregister` (#586) is NOT relied on for correctness — this loop claims the
|
|
36
|
+
* slot regardless of whether the prior instance cleaned up on exit. Deregister
|
|
37
|
+
* remains a best-effort fast-reclaim optimization only.
|
|
38
|
+
*
|
|
39
|
+
* Returns nothing on success (the slot is claimed); throws `RegisterRaceError`
|
|
40
|
+
* to signal a clean yield to a newer live instance.
|
|
41
|
+
*/
|
|
42
|
+
export declare function registerWithTakeover(params: {
|
|
43
|
+
readonly registry: Registry;
|
|
44
|
+
readonly routingLabel: string;
|
|
45
|
+
readonly agentInfo: AgentInfo;
|
|
46
|
+
readonly collisionResult: CollisionResult;
|
|
47
|
+
readonly certPaths: {
|
|
48
|
+
readonly caCertPath: string;
|
|
49
|
+
readonly agentCertPath: string;
|
|
50
|
+
readonly agentKeyPath: string;
|
|
51
|
+
};
|
|
52
|
+
readonly incomingVersion: string;
|
|
53
|
+
readonly logger: Logger;
|
|
54
|
+
/**
|
|
55
|
+
* Injectable re-classifier (defaults to `classifyPeer`). Tests pass a stub
|
|
56
|
+
* so the loop's claim-vs-yield branching can be exercised without a live
|
|
57
|
+
* `/health` mTLS probe.
|
|
58
|
+
*/
|
|
59
|
+
readonly classify?: (name: string, existing: AgentInfo, certPaths: {
|
|
60
|
+
readonly caCertPath: string;
|
|
61
|
+
readonly agentCertPath: string;
|
|
62
|
+
readonly agentKeyPath: string;
|
|
63
|
+
}, incomingVersion: string, logger: Logger) => Promise<CollisionResult>;
|
|
64
|
+
/** Bound on retries (defaults to MAX_REGISTER_RETRIES); injectable for tests. */
|
|
65
|
+
readonly maxRetries?: number;
|
|
66
|
+
}): Promise<void>;
|
|
67
|
+
//# sourceMappingURL=register-with-takeover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-with-takeover.d.ts","sourceRoot":"","sources":["../src/register-with-takeover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE;QACT,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,EACD,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFhB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { classifyPeer, RegisterRaceError, MAX_REGISTER_RETRIES } from './collision.js';
|
|
2
|
+
/**
|
|
3
|
+
* Over-register loop (groundnuty/macf#702) — the load-bearing fix for the
|
|
4
|
+
* register-race abort that bricked devops for 8h (2026-07-01).
|
|
5
|
+
*
|
|
6
|
+
* Invariant: **exactly one LIVE instance per agent-identity; the newest launch
|
|
7
|
+
* is authoritative.** A relaunch must CLAIM its own slot even when a stale /
|
|
8
|
+
* same / older entry is present — never abort-to-dead because the slot is
|
|
9
|
+
* occupied. It YIELDS only to a GENUINELY newer + live instance.
|
|
10
|
+
*
|
|
11
|
+
* Contract:
|
|
12
|
+
* - `initialExpected` is what the collision check observed the slot as: the
|
|
13
|
+
* takeover target (a stale/dead/older entry) for `action:'takeover'`, or
|
|
14
|
+
* `null` (expected-absent) for `action:'register'`.
|
|
15
|
+
* - `registerConditional` either CLAIMS (`ok:true` — including over a
|
|
16
|
+
* stale/unchanged entry, which is the devops fix: `current==expected`
|
|
17
|
+
* always claims, even under GitHub-Variables read-after-write lag) or
|
|
18
|
+
* reports a real conflict (`ok:false, reason:'lost-to-newer', current`).
|
|
19
|
+
* - On a conflict this loop RE-CLASSIFIES `current` with the same liveness +
|
|
20
|
+
* #424 version quadrant the collision check uses (`classifyPeer`, applied
|
|
21
|
+
* directly to `current` to avoid reopening a fresh `registry.get` TOCTOU
|
|
22
|
+
* window):
|
|
23
|
+
* - `classifyPeer` says `abort` → `current` is a genuinely newer LIVE
|
|
24
|
+
* peer → YIELD by throwing `RegisterRaceError` (the caller exits 0 —
|
|
25
|
+
* a clean stand-down, NOT a crash-loop abort-to-dead).
|
|
26
|
+
* - `classifyPeer` says `takeover` → `current` is stale/dead/older →
|
|
27
|
+
* FORCE the claim: retry with `expected = current`.
|
|
28
|
+
* - `current === null` (slot emptied by a racing deregister/prune) →
|
|
29
|
+
* retry against expected-absent.
|
|
30
|
+
* - Bounded by `MAX_REGISTER_RETRIES` so a pathologically flapping slot
|
|
31
|
+
* can't loop forever; on exhaustion it yields (throws RegisterRaceError)
|
|
32
|
+
* against the last-observed `current` rather than spinning.
|
|
33
|
+
*
|
|
34
|
+
* `deregister` (#586) is NOT relied on for correctness — this loop claims the
|
|
35
|
+
* slot regardless of whether the prior instance cleaned up on exit. Deregister
|
|
36
|
+
* remains a best-effort fast-reclaim optimization only.
|
|
37
|
+
*
|
|
38
|
+
* Returns nothing on success (the slot is claimed); throws `RegisterRaceError`
|
|
39
|
+
* to signal a clean yield to a newer live instance.
|
|
40
|
+
*/
|
|
41
|
+
export async function registerWithTakeover(params) {
|
|
42
|
+
const { registry, routingLabel, agentInfo, collisionResult, certPaths, incomingVersion, logger, } = params;
|
|
43
|
+
const classify = params.classify ?? classifyPeer;
|
|
44
|
+
const maxRetries = params.maxRetries ?? MAX_REGISTER_RETRIES;
|
|
45
|
+
let expectedSlot = collisionResult.action === 'takeover' ? collisionResult.previous : null;
|
|
46
|
+
let registerResult = await registry.registerConditional(routingLabel, agentInfo, expectedSlot);
|
|
47
|
+
for (let attempt = 0; !registerResult.ok; attempt += 1) {
|
|
48
|
+
logger.warn('register_race_lost', {
|
|
49
|
+
agent: routingLabel,
|
|
50
|
+
attempt,
|
|
51
|
+
expected_instance: expectedSlot?.instance_id ?? null,
|
|
52
|
+
current_instance: registerResult.current?.instance_id ?? null,
|
|
53
|
+
current_host: registerResult.current?.host ?? null,
|
|
54
|
+
current_port: registerResult.current?.port ?? null,
|
|
55
|
+
});
|
|
56
|
+
if (registerResult.current === null) {
|
|
57
|
+
// The slot was emptied in the window (a deregister/prune raced us) —
|
|
58
|
+
// nothing to classify; retry the claim against expected-absent.
|
|
59
|
+
expectedSlot = null;
|
|
60
|
+
}
|
|
61
|
+
else if (attempt >= maxRetries) {
|
|
62
|
+
// Exhausted the retry budget against a flapping slot. Treat the last
|
|
63
|
+
// observed `current` as the winner and yield rather than spin forever.
|
|
64
|
+
throw new RegisterRaceError(routingLabel, registerResult.current);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const reclassified = await classify(routingLabel, registerResult.current, certPaths, incomingVersion, logger);
|
|
68
|
+
if (reclassified.action === 'abort') {
|
|
69
|
+
// A genuinely different, newer, LIVE instance holds the slot. Yield —
|
|
70
|
+
// this is the ONLY case that throws RegisterRaceError (macf#702). The
|
|
71
|
+
// caller catches it and exits 0 (clean stand-down).
|
|
72
|
+
logger.info('register_yield_to_newer', {
|
|
73
|
+
agent: routingLabel,
|
|
74
|
+
current_instance: registerResult.current.instance_id,
|
|
75
|
+
current_host: registerResult.current.host,
|
|
76
|
+
current_port: registerResult.current.port,
|
|
77
|
+
});
|
|
78
|
+
throw new RegisterRaceError(routingLabel, registerResult.current);
|
|
79
|
+
}
|
|
80
|
+
// 'register' (would only arise if `current` read as absent — it's
|
|
81
|
+
// non-null here, kept for exhaustiveness) or 'takeover' (stale/dead/
|
|
82
|
+
// older) — FORCE the claim against the re-classified current value.
|
|
83
|
+
logger.info('register_force_takeover', {
|
|
84
|
+
agent: routingLabel,
|
|
85
|
+
attempt,
|
|
86
|
+
over_instance: registerResult.current.instance_id,
|
|
87
|
+
basis: reclassified.action,
|
|
88
|
+
});
|
|
89
|
+
expectedSlot =
|
|
90
|
+
reclassified.action === 'takeover' ? reclassified.previous : null;
|
|
91
|
+
}
|
|
92
|
+
registerResult = await registry.registerConditional(routingLabel, agentInfo, expectedSlot);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=register-with-takeover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-with-takeover.js","sourceRoot":"","sources":["../src/register-with-takeover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Registry, Logger } from '@groundnuty/macf-core';
|
|
2
2
|
/**
|
|
3
|
-
* Periodic registry heartbeat (DR-031, groundnuty/macf#568)
|
|
3
|
+
* Periodic registry heartbeat (DR-031, groundnuty/macf#568) — also the
|
|
4
|
+
* split-brain guard's DETECTION half (groundnuty/macf#702 over-register).
|
|
4
5
|
*
|
|
5
6
|
* The live channel-server instance re-stamps `last_heartbeat` on its OWN registry
|
|
6
7
|
* slot on a coarse interval so a reader can TTL-judge an aged-out entry dead. This
|
|
@@ -8,6 +9,17 @@ import type { Registry, Logger } from '@groundnuty/macf-core';
|
|
|
8
9
|
* runs the graceful-deregister (#586) shutdown handler — together they close the
|
|
9
10
|
* stale-registration class.
|
|
10
11
|
*
|
|
12
|
+
* **Loser-yields (macf#702 split-brain guard):** the heartbeat is
|
|
13
|
+
* instance-id-guarded — when a NEWER instance over-registers the slot
|
|
14
|
+
* (last-writer-wins), the older/displaced instance's next beat reads a
|
|
15
|
+
* different `instance_id` and `heartbeatConditional` returns `'not-ours'`. On
|
|
16
|
+
* that signal this instance is no longer the slot's owner, so it must STAND
|
|
17
|
+
* DOWN — stop serving — leaving exactly one live instance registered. The
|
|
18
|
+
* caller wires `onDisplaced` to the graceful-shutdown cleanup. A brief
|
|
19
|
+
* two-serving window (bounded by one heartbeat cadence) is acceptable; a
|
|
20
|
+
* PERMANENT split-brain is not, and this closes it without depending on the
|
|
21
|
+
* displaced instance having been signalled/killed externally.
|
|
22
|
+
*
|
|
11
23
|
* Lifecycle MIRRORS `createOtelReachabilityProbe` (health.ts): an `unref()`'d
|
|
12
24
|
* `setInterval` that never pins the event loop open, plus an explicit `stop()`
|
|
13
25
|
* cleared from the shutdown handler. The write is instance-id-guarded inside
|
|
@@ -49,5 +61,19 @@ export declare function createRegistryHeartbeat(opts: {
|
|
|
49
61
|
readonly intervalMs?: number;
|
|
50
62
|
/** Injectable ISO-8601 clock (testing); default `() => new Date().toISOString()`. */
|
|
51
63
|
readonly now?: () => string;
|
|
64
|
+
/**
|
|
65
|
+
* Split-brain guard (macf#702 loser-yields). Invoked ONCE when a beat
|
|
66
|
+
* observes `'not-ours'` — a NEWER instance has over-registered the slot, so
|
|
67
|
+
* THIS (older/displaced) instance must stand down. The caller wires this to
|
|
68
|
+
* the graceful-shutdown cleanup so the displaced instance stops serving,
|
|
69
|
+
* leaving exactly one live instance. Best-effort + fire-once: any throw from
|
|
70
|
+
* the callback is swallowed (a stand-down hiccup must not crash the tick),
|
|
71
|
+
* and the periodic interval is cleared so we don't re-fire it every cadence.
|
|
72
|
+
* Omitted → the heartbeat only logs the displacement (pre-#702 behaviour),
|
|
73
|
+
* which is what tests that don't exercise the guard use.
|
|
74
|
+
*/
|
|
75
|
+
readonly onDisplaced?: (current: {
|
|
76
|
+
readonly instanceId: string;
|
|
77
|
+
} | null) => void;
|
|
52
78
|
}): RegistryHeartbeat;
|
|
53
79
|
//# sourceMappingURL=registry-heartbeat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-heartbeat.d.ts","sourceRoot":"","sources":["../src/registry-heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG9D
|
|
1
|
+
{"version":3,"file":"registry-heartbeat.d.ts","sourceRoot":"","sources":["../src/registry-heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK1E;AAED,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;CAClF,GAAG,iBAAiB,CAqFpB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DEFAULT_REGISTRY_HEARTBEAT_INTERVAL_MS } from '@groundnuty/macf-core';
|
|
2
2
|
/**
|
|
3
|
-
* Periodic registry heartbeat (DR-031, groundnuty/macf#568)
|
|
3
|
+
* Periodic registry heartbeat (DR-031, groundnuty/macf#568) — also the
|
|
4
|
+
* split-brain guard's DETECTION half (groundnuty/macf#702 over-register).
|
|
4
5
|
*
|
|
5
6
|
* The live channel-server instance re-stamps `last_heartbeat` on its OWN registry
|
|
6
7
|
* slot on a coarse interval so a reader can TTL-judge an aged-out entry dead. This
|
|
@@ -8,6 +9,17 @@ import { DEFAULT_REGISTRY_HEARTBEAT_INTERVAL_MS } from '@groundnuty/macf-core';
|
|
|
8
9
|
* runs the graceful-deregister (#586) shutdown handler — together they close the
|
|
9
10
|
* stale-registration class.
|
|
10
11
|
*
|
|
12
|
+
* **Loser-yields (macf#702 split-brain guard):** the heartbeat is
|
|
13
|
+
* instance-id-guarded — when a NEWER instance over-registers the slot
|
|
14
|
+
* (last-writer-wins), the older/displaced instance's next beat reads a
|
|
15
|
+
* different `instance_id` and `heartbeatConditional` returns `'not-ours'`. On
|
|
16
|
+
* that signal this instance is no longer the slot's owner, so it must STAND
|
|
17
|
+
* DOWN — stop serving — leaving exactly one live instance registered. The
|
|
18
|
+
* caller wires `onDisplaced` to the graceful-shutdown cleanup. A brief
|
|
19
|
+
* two-serving window (bounded by one heartbeat cadence) is acceptable; a
|
|
20
|
+
* PERMANENT split-brain is not, and this closes it without depending on the
|
|
21
|
+
* displaced instance having been signalled/killed externally.
|
|
22
|
+
*
|
|
11
23
|
* Lifecycle MIRRORS `createOtelReachabilityProbe` (health.ts): an `unref()`'d
|
|
12
24
|
* `setInterval` that never pins the event loop open, plus an explicit `stop()`
|
|
13
25
|
* cleared from the shutdown handler. The write is instance-id-guarded inside
|
|
@@ -35,6 +47,7 @@ export function createRegistryHeartbeat(opts) {
|
|
|
35
47
|
const intervalMs = opts.intervalMs ?? DEFAULT_REGISTRY_HEARTBEAT_INTERVAL_MS;
|
|
36
48
|
const now = opts.now ?? (() => new Date().toISOString());
|
|
37
49
|
let timer = null;
|
|
50
|
+
let displacedFired = false;
|
|
38
51
|
async function runOnce() {
|
|
39
52
|
try {
|
|
40
53
|
const result = await registry.heartbeatConditional(agentName, instanceId, now());
|
|
@@ -42,14 +55,32 @@ export function createRegistryHeartbeat(opts) {
|
|
|
42
55
|
logger.info('registry_heartbeat', { agent: agentName, instance_id: instanceId });
|
|
43
56
|
}
|
|
44
57
|
else if (result.reason === 'not-ours') {
|
|
45
|
-
// A
|
|
46
|
-
//
|
|
47
|
-
|
|
58
|
+
// A NEWER instance over-registered our slot (macf#702 last-writer-wins,
|
|
59
|
+
// or the #424 version takeover). We are the DISPLACED instance and must
|
|
60
|
+
// stand down (loser-yields split-brain guard) — leaving it alone AND
|
|
61
|
+
// stopping our own serving so only one live instance remains.
|
|
62
|
+
logger.warn('registry_heartbeat_displaced', {
|
|
48
63
|
agent: agentName,
|
|
49
64
|
instance_id: instanceId,
|
|
50
65
|
reason: result.reason,
|
|
51
|
-
detail: '
|
|
66
|
+
detail: 'a newer instance holds the slot — standing down (macf#702 loser-yields)',
|
|
52
67
|
});
|
|
68
|
+
if (opts.onDisplaced !== undefined && !displacedFired) {
|
|
69
|
+
displacedFired = true;
|
|
70
|
+
// Clear our own interval first so we don't re-fire the stand-down
|
|
71
|
+
// every cadence while shutdown is in flight.
|
|
72
|
+
stopTimer();
|
|
73
|
+
try {
|
|
74
|
+
opts.onDisplaced(null);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
logger.warn('registry_heartbeat_displaced_callback_failed', {
|
|
78
|
+
agent: agentName,
|
|
79
|
+
instance_id: instanceId,
|
|
80
|
+
error: err instanceof Error ? err.message : String(err),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
53
84
|
}
|
|
54
85
|
else if (result.reason === 'absent') {
|
|
55
86
|
logger.info('registry_heartbeat_skipped', {
|
|
@@ -79,6 +110,12 @@ export function createRegistryHeartbeat(opts) {
|
|
|
79
110
|
});
|
|
80
111
|
}
|
|
81
112
|
}
|
|
113
|
+
function stopTimer() {
|
|
114
|
+
if (timer !== null) {
|
|
115
|
+
clearInterval(timer);
|
|
116
|
+
timer = null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
82
119
|
return {
|
|
83
120
|
runOnce,
|
|
84
121
|
start() {
|
|
@@ -91,12 +128,7 @@ export function createRegistryHeartbeat(opts) {
|
|
|
91
128
|
// Don't let the heartbeat interval pin the event loop open on shutdown.
|
|
92
129
|
timer.unref();
|
|
93
130
|
},
|
|
94
|
-
stop
|
|
95
|
-
if (timer !== null) {
|
|
96
|
-
clearInterval(timer);
|
|
97
|
-
timer = null;
|
|
98
|
-
}
|
|
99
|
-
},
|
|
131
|
+
stop: stopTimer,
|
|
100
132
|
};
|
|
101
133
|
}
|
|
102
134
|
//# sourceMappingURL=registry-heartbeat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-heartbeat.js","sourceRoot":"","sources":["../src/registry-heartbeat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sCAAsC,EAAE,MAAM,uBAAuB,CAAC;AAE/E
|
|
1
|
+
{"version":3,"file":"registry-heartbeat.js","sourceRoot":"","sources":["../src/registry-heartbeat.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -17,6 +17,7 @@ import { TaskStore } from './a2a-task.js';
|
|
|
17
17
|
import { PACKAGE_VERSION } from './package-version.js';
|
|
18
18
|
import { createRegistry, createRegistryFromConfig } from '@groundnuty/macf-core';
|
|
19
19
|
import { checkCollision, CollisionError, RegisterRaceError } from './collision.js';
|
|
20
|
+
import { registerWithTakeover } from './register-with-takeover.js';
|
|
20
21
|
import { registerShutdownHandler } from './shutdown.js';
|
|
21
22
|
import { createForensicLogger } from './forensic-log.js';
|
|
22
23
|
import { createLifecycleTracker } from './lifecycle.js';
|
|
@@ -570,24 +571,36 @@ async function main() {
|
|
|
570
571
|
instance_id: config.instanceId,
|
|
571
572
|
started: new Date().toISOString(),
|
|
572
573
|
};
|
|
573
|
-
// P2:
|
|
574
|
-
//
|
|
575
|
-
//
|
|
576
|
-
// 'takeover').
|
|
577
|
-
//
|
|
578
|
-
//
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
574
|
+
// P2: Over-register the slot (groundnuty/macf#702 — the devops 8h-outage
|
|
575
|
+
// fix, reshaping the #439 CAS write). The collision check above observed the
|
|
576
|
+
// slot as absent (action 'register') or held by a takeover target (action
|
|
577
|
+
// 'takeover'). `registerWithTakeover` CLAIMS the slot — including over a
|
|
578
|
+
// stale/same/older entry (never aborting-to-dead because the slot is
|
|
579
|
+
// occupied) — and YIELDS (throws RegisterRaceError, caught at main()'s
|
|
580
|
+
// top-level for a CLEAN exit 0) only to a genuinely newer + LIVE instance.
|
|
581
|
+
// See `register-with-takeover.ts` for the full claim-vs-yield contract; it
|
|
582
|
+
// re-classifies any lost-race `current` with the same liveness + #424
|
|
583
|
+
// version quadrant the collision check used, bounded by MAX_REGISTER_RETRIES.
|
|
584
|
+
try {
|
|
585
|
+
await registerWithTakeover({
|
|
586
|
+
registry,
|
|
587
|
+
routingLabel: config.routingLabel,
|
|
588
|
+
agentInfo,
|
|
589
|
+
collisionResult,
|
|
590
|
+
certPaths: {
|
|
591
|
+
caCertPath: config.caCertPath,
|
|
592
|
+
agentCertPath: config.agentCertPath,
|
|
593
|
+
agentKeyPath: config.agentKeyPath,
|
|
594
|
+
},
|
|
595
|
+
incomingVersion: PACKAGE_VERSION,
|
|
596
|
+
logger,
|
|
588
597
|
});
|
|
598
|
+
}
|
|
599
|
+
catch (err) {
|
|
600
|
+
// Stop the (already-serving) HTTPS server before propagating a yield/abort
|
|
601
|
+
// so we don't leave a bound port behind on our way out.
|
|
589
602
|
await httpsServer.stop();
|
|
590
|
-
throw
|
|
603
|
+
throw err;
|
|
591
604
|
}
|
|
592
605
|
lifecycle.set('registered'); // macf#642 forensic phase marker
|
|
593
606
|
logger.info('registered', {
|
|
@@ -605,12 +618,30 @@ async function main() {
|
|
|
605
618
|
// `MACF_REGISTRY_HEARTBEAT_INTERVAL_MS` overrides; `0` disables) to bound the
|
|
606
619
|
// App-token write budget + the #439 If-Match TOCTOU surface. Started AFTER the
|
|
607
620
|
// shutdown handler is wired so `stop()` is registered for cleanup first.
|
|
621
|
+
// macf#702 loser-yields split-brain guard: if a heartbeat observes that a
|
|
622
|
+
// NEWER instance has over-registered our slot ('not-ours'), THIS displaced
|
|
623
|
+
// instance stands down via the graceful-shutdown cleanup so exactly one live
|
|
624
|
+
// instance remains. `shutdownCleanup` is assigned just below and always set
|
|
625
|
+
// before `start()` fires the first beat, so the lazy reference is safe.
|
|
608
626
|
const registryHeartbeat = createRegistryHeartbeat({
|
|
609
627
|
registry,
|
|
610
628
|
agentName: config.routingLabel,
|
|
611
629
|
instanceId: config.instanceId,
|
|
612
630
|
logger,
|
|
613
631
|
intervalMs: resolveHeartbeatIntervalMs(process.env['MACF_REGISTRY_HEARTBEAT_INTERVAL_MS']),
|
|
632
|
+
onDisplaced: () => {
|
|
633
|
+
logger.warn('standing_down_displaced', {
|
|
634
|
+
agent: config.routingLabel,
|
|
635
|
+
instance_id: config.instanceId,
|
|
636
|
+
detail: 'a newer instance over-registered the slot — graceful shutdown (macf#702)',
|
|
637
|
+
});
|
|
638
|
+
// Trigger the same instance-id-guarded graceful cleanup as a SIGTERM. It
|
|
639
|
+
// deregisters only if still ours (it is NOT — the newer instance holds
|
|
640
|
+
// it, so deregister will no-op 'not-ours') + stops the HTTPS server, then
|
|
641
|
+
// exits. Fire-and-forget; the cleanup's once-guard makes a racing signal
|
|
642
|
+
// benign.
|
|
643
|
+
void shutdownCleanup?.('displaced-by-newer-instance').then((ok) => process.exit(ok ? 0 : 1), () => process.exit(1));
|
|
644
|
+
},
|
|
614
645
|
});
|
|
615
646
|
// P2: Register shutdown handler. On graceful shutdown it deregisters the
|
|
616
647
|
// registry slot (key = routingLabel) — but instance-id-guarded (DR-031,
|
|
@@ -652,16 +683,27 @@ async function main() {
|
|
|
652
683
|
} // end runStartup
|
|
653
684
|
}
|
|
654
685
|
main().catch((err) => {
|
|
655
|
-
// Force a clean exit on any
|
|
656
|
-
//
|
|
657
|
-
//
|
|
658
|
-
//
|
|
659
|
-
//
|
|
660
|
-
//
|
|
661
|
-
//
|
|
662
|
-
//
|
|
663
|
-
//
|
|
664
|
-
//
|
|
686
|
+
// Force a clean exit on any bootstrap abort (groundnuty/macf#449). Setting
|
|
687
|
+
// `process.exitCode` alone is NOT enough to terminate: the MCP stdio
|
|
688
|
+
// transport keeps stdin's readable stream open, so the event loop stays
|
|
689
|
+
// alive and the process *hangs* instead of exiting (reproducible with a
|
|
690
|
+
// held-open stdin, e.g. `sleep 10 | node …`). `process.exit()` tears down
|
|
691
|
+
// regardless. We set exitCode first (so the code is correct even if the
|
|
692
|
+
// write callback never fires) and exit from the stderr-flush callback so
|
|
693
|
+
// the diagnostic isn't truncated on a pipe.
|
|
694
|
+
//
|
|
695
|
+
// groundnuty/macf#702: `RegisterRaceError` is now a CLEAN YIELD, not a
|
|
696
|
+
// fatal abort — it fires ONLY when a genuinely newer, live instance holds
|
|
697
|
+
// the slot (see the retry loop in `main()` above), which is the CORRECT
|
|
698
|
+
// outcome for this launch, not a failure. Exit 0 with an informational
|
|
699
|
+
// (not "Fatal:") message so external monitors don't flag a legitimate
|
|
700
|
+
// yield as a crash. `CollisionError` and any other thrown error remain the
|
|
701
|
+
// fatal exit-1 path (groundnuty/macf#447).
|
|
702
|
+
if (err instanceof RegisterRaceError) {
|
|
703
|
+
process.exitCode = 0;
|
|
704
|
+
process.stderr.write(`${err.message}\n`, () => process.exit(0));
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
665
707
|
process.exitCode = 1;
|
|
666
708
|
process.stderr.write(`Fatal: ${err instanceof Error ? err.message : String(err)}\n`, () => process.exit(1));
|
|
667
709
|
});
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/shutdown.d.ts
CHANGED
package/dist/shutdown.d.ts.map
CHANGED
|
@@ -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;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;CAChD,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CA+
|
|
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;;;;;;;;;;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,CA+HzC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@groundnuty/macf-channel-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.46",
|
|
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.
|
|
36
|
+
"@groundnuty/macf-core": "0.2.46",
|
|
37
37
|
"@modelcontextprotocol/sdk": "~1.29.0",
|
|
38
38
|
"@opentelemetry/api": "1.9.1",
|
|
39
39
|
"@opentelemetry/core": "2.7.0",
|