opensquid 0.5.401 → 0.5.403

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 +1 @@
1
- {"version":3,"file":"handoff_session_start.d.ts","sourceRoot":"","sources":["../../src/functions/handoff_session_start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,QAAA,MAAM,MAAM,iDAAwB,CAAC;AAErC,UAAU,YAAY;IACpB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAuDxF,CAAC"}
1
+ {"version":3,"file":"handoff_session_start.d.ts","sourceRoot":"","sources":["../../src/functions/handoff_session_start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,QAAA,MAAM,MAAM,iDAAwB,CAAC;AAErC,UAAU,YAAY;IACpB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAyDxF,CAAC"}
@@ -52,17 +52,6 @@ export const HandoffSessionStart = {
52
52
  const stamp = sessionStateFile(ctx.sessionId, 'handoff-read');
53
53
  if ((await mtimeOf(stamp)) !== null)
54
54
  return ok(null);
55
- // SUB.3 (wg-627effbb2c38): a "dead" sid with a fresh tool-ledger /
56
- // active-task mtime is a LIVE session (nested child, second terminal)
57
- // — dumping it would clobber its in-flight resume surfaces (observed
58
- // live 2026-06-11: the MEMORY.md managed block overwritten twice
59
- // mid-run by exactly this path). Skip WITHOUT writing the
60
- // handoff-read stamp: if the session actually just crashed, the next
61
- // fresh session retries once FRESH_MS lapses — the loss is transient
62
- // by construction, never pinned by a stale stamp.
63
- const liveness = await isSessionPlausible(deadSid);
64
- if (liveness.plausible)
65
- return ok(null);
66
55
  const umbrellaRoot = await umbrellaRootFor(cwd);
67
56
  const fsmPath = sessionStateFile(deadSid, 'fsm-coding-flow');
68
57
  const fsmM = await mtimeOf(fsmPath);
@@ -74,7 +63,21 @@ export const HandoffSessionStart = {
74
63
  // which day it was generated (the date-keyed path missed yesterday's).
75
64
  docPath = handoverDocPath(umbrellaRoot, deadSid);
76
65
  const docM = await mtimeOf(docPath);
77
- if (docM === null || fsmM === null || docM < fsmM) {
66
+ const docCurrent = docM !== null && fsmM !== null && docM >= fsmM;
67
+ if (!docCurrent) {
68
+ // SUB.3 refined by FXK.2 (0.5.403): liveness gates GENERATION
69
+ // ONLY — injecting a CURRENT doc clobbers nothing (the observed
70
+ // MEMORY.md overwrites were regeneration writes), so graceful-
71
+ // death quick restarts inject instantly. A plausibly-LIVE "dead"
72
+ // sid (nested child, second terminal) skips WITHOUT writing the
73
+ // handoff-read stamp, so a later session retries once the window
74
+ // lapses. freshMs = 10min: the longest a LIVE session goes quiet
75
+ // on its probed files is the 340s audit wait (wg-bc291cb0cef4's
76
+ // inner-window sizing) + margin — 5min would re-open the clobber,
77
+ // 30min over-suppressed kill-9 resumes (the shipped SUB.3 flaw).
78
+ const liveness = await isSessionPlausible(deadSid, { freshMs: 10 * 60_000 });
79
+ if (liveness.plausible)
80
+ return ok(null);
78
81
  const result = await runHandoff(deadSid, cwd); // generate from disk
79
82
  docPath = result.docPath;
80
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handoff_session_start.js","sourceRoot":"","sources":["../../src/functions/handoff_session_start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff_session_start.js","sourceRoot":"","sources":["../../src/functions/handoff_session_start.ts"],"names":[],"mappings":"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"}
@@ -10,17 +10,22 @@
10
10
  *
11
11
  * running ──close──────────────► closed (resolve/reject by exit code)
12
12
  * running ──spawn 'error'──────► spawn_failed (reject)
13
- * running ──timeout────────────► term_sent (reject NOW; grace timer armed, REF'D)
14
- * term_sent ──close────────────► closed_late (clear grace; child obeyed SIGTERM)
13
+ * running ──timeout────────────► term_sent (reject NOW; grace timer armed, REF'D;
14
+ * sync 'exit' kill handler registered)
15
+ * term_sent ──close────────────► closed_late (clear grace + remove the exit handler;
16
+ * child obeyed SIGTERM)
15
17
  * term_sent ──grace expiry─────► group_killed (kill(-pid) sweep; ESRCH = already gone)
18
+ * term_sent ──supervisor exit──► group_killed (FXK.1, 0.5.402: the sync 'exit' handler
19
+ * — hook bins call process.exit() ms after
20
+ * the rejection, which destroys ANY timer,
21
+ * ref'd or not; reproduced in isolation
22
+ * before this fix. 'exit' listeners run
23
+ * synchronously under explicit exit and
24
+ * process.kill is sync — spiked, not
25
+ * assumed.)
16
26
  *
17
- * `term_sent supervisor SIGKILLed externally` leaks the child by design
18
- * enumerated residual: the REF'D grace timer holds the supervisor alive
19
- * through grace in every non-forced teardown (an unref'd timer dies when a
20
- * hook bin exits right after the rejection — observed live as SIGTERM-
21
- * ignoring `claude -p` orphans piling up on the subscription bucket), and a
22
- * forced external SIGKILL of the supervisor is outside any in-process
23
- * guarantee.
27
+ * Only a forced external SIGKILL of the supervisor leaks the child now
28
+ * outside any in-process guarantee, enumerated residual.
24
29
  *
25
30
  * Two ORTHOGONAL env markers — never merge them:
26
31
  * - OPENSQUID_SUBAGENT (hook policy, SUB.1): set only when
@@ -1 +1 @@
1
- {"version":3,"file":"spawn_lifecycle.d.ts","sourceRoot":"","sources":["../../src/runtime/spawn_lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAIH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,YAAY,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC;IAC3C,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,OAC1C,CAAC;AAEnC,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAwFhE"}
1
+ {"version":3,"file":"spawn_lifecycle.d.ts","sourceRoot":"","sources":["../../src/runtime/spawn_lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAIH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,YAAY,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC;IAC3C,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,OAC1C,CAAC;AAEnC,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAoGhE"}
@@ -10,17 +10,22 @@
10
10
  *
11
11
  * running ──close──────────────► closed (resolve/reject by exit code)
12
12
  * running ──spawn 'error'──────► spawn_failed (reject)
13
- * running ──timeout────────────► term_sent (reject NOW; grace timer armed, REF'D)
14
- * term_sent ──close────────────► closed_late (clear grace; child obeyed SIGTERM)
13
+ * running ──timeout────────────► term_sent (reject NOW; grace timer armed, REF'D;
14
+ * sync 'exit' kill handler registered)
15
+ * term_sent ──close────────────► closed_late (clear grace + remove the exit handler;
16
+ * child obeyed SIGTERM)
15
17
  * term_sent ──grace expiry─────► group_killed (kill(-pid) sweep; ESRCH = already gone)
18
+ * term_sent ──supervisor exit──► group_killed (FXK.1, 0.5.402: the sync 'exit' handler
19
+ * — hook bins call process.exit() ms after
20
+ * the rejection, which destroys ANY timer,
21
+ * ref'd or not; reproduced in isolation
22
+ * before this fix. 'exit' listeners run
23
+ * synchronously under explicit exit and
24
+ * process.kill is sync — spiked, not
25
+ * assumed.)
16
26
  *
17
- * `term_sent supervisor SIGKILLed externally` leaks the child by design
18
- * enumerated residual: the REF'D grace timer holds the supervisor alive
19
- * through grace in every non-forced teardown (an unref'd timer dies when a
20
- * hook bin exits right after the rejection — observed live as SIGTERM-
21
- * ignoring `claude -p` orphans piling up on the subscription bucket), and a
22
- * forced external SIGKILL of the supervisor is outside any in-process
23
- * guarantee.
27
+ * Only a forced external SIGKILL of the supervisor leaks the child now
28
+ * outside any in-process guarantee, enumerated residual.
24
29
  *
25
30
  * Two ORTHOGONAL env markers — never merge them:
26
31
  * - OPENSQUID_SUBAGENT (hook policy, SUB.1): set only when
@@ -79,17 +84,28 @@ export function runOneShotCli(opts) {
79
84
  /* ESRCH — already reaped */
80
85
  }
81
86
  };
87
+ // FXK.1 (0.5.402): the supervisor-exit escalation path. Sync-only body
88
+ // — the process is dying; state check + sync kill, nothing else.
89
+ const exitKill = () => {
90
+ if (state.phase === 'term_sent')
91
+ groupKill();
92
+ };
82
93
  const timer = setTimeout(() => {
83
94
  if (state.phase !== 'running')
84
95
  return;
85
96
  state = { phase: 'term_sent' };
86
97
  proc.kill('SIGTERM');
87
- // REF'D on purpose: an unref'd timer is destroyed when the hook bin
88
- // exits right after this rejectionSIGKILL would never fire exactly
89
- // where SIGTERM-ignoring orphans were observed. The ≤graceMs tail
90
- // sits far inside the 360s outer hook cap; 'closed_late' clears it
91
- // for well-behaved children.
92
- graceTimer = setTimeout(groupKill, opts.graceMs ?? 5_000);
98
+ // BOTH escalation paths are required (FXK.1, spiked): the REF'D timer
99
+ // covers long-lived supervisors (bridge daemonprompt 5s kill); the
100
+ // sync 'exit' handler covers supervisors that exit before grace (hook
101
+ // bins call process.exit() milliseconds after this rejection, which
102
+ // destroys ANY timer, ref'd or not — the 0.5.398 hole). 'closed_late'
103
+ // clears both for well-behaved children.
104
+ process.once('exit', exitKill);
105
+ graceTimer = setTimeout(() => {
106
+ process.removeListener('exit', exitKill);
107
+ groupKill();
108
+ }, opts.graceMs ?? 5_000);
93
109
  reject(opts.timeoutError(opts.timeoutMs));
94
110
  }, opts.timeoutMs);
95
111
  proc.stdout.on('data', (d) => {
@@ -118,6 +134,7 @@ export function runOneShotCli(opts) {
118
134
  state = { phase: 'closed_late' }; // child obeyed SIGTERM inside grace
119
135
  if (graceTimer !== undefined)
120
136
  clearTimeout(graceTimer);
137
+ process.removeListener('exit', exitKill); // hygiene: long-lived callers
121
138
  }
122
139
  // closed / spawn_failed / group_killed: terminal — nothing to do.
123
140
  });
@@ -1 +1 @@
1
- {"version":3,"file":"spawn_lifecycle.js","sourceRoot":"","sources":["../../src/runtime/spawn_lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn_lifecycle.js","sourceRoot":"","sources":["../../src/runtime/spawn_lifecycle.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opensquid",
3
- "version": "0.5.401",
3
+ "version": "0.5.403",
4
4
  "description": "Continuity layer for coding agents: durable memory, dependency-aware task state, workflow gates, and inspectable packs over MCP.",
5
5
  "type": "module",
6
6
  "exports": {