instar 1.3.735 → 1.3.737

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.
Files changed (61) hide show
  1. package/dist/commands/devPreflight.d.ts +21 -0
  2. package/dist/commands/devPreflight.d.ts.map +1 -1
  3. package/dist/commands/devPreflight.js +36 -2
  4. package/dist/commands/devPreflight.js.map +1 -1
  5. package/dist/commands/server.d.ts.map +1 -1
  6. package/dist/commands/server.js +30 -0
  7. package/dist/commands/server.js.map +1 -1
  8. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  9. package/dist/config/ConfigDefaults.js +13 -0
  10. package/dist/config/ConfigDefaults.js.map +1 -1
  11. package/dist/core/PostUpdateMigrator.d.ts +1 -0
  12. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  13. package/dist/core/PostUpdateMigrator.js +73 -0
  14. package/dist/core/PostUpdateMigrator.js.map +1 -1
  15. package/dist/core/SessionManager.d.ts.map +1 -1
  16. package/dist/core/SessionManager.js +12 -0
  17. package/dist/core/SessionManager.js.map +1 -1
  18. package/dist/core/WriteDomainRegistry.d.ts.map +1 -1
  19. package/dist/core/WriteDomainRegistry.js +22 -0
  20. package/dist/core/WriteDomainRegistry.js.map +1 -1
  21. package/dist/core/hostSemaphoreCore.d.ts +115 -0
  22. package/dist/core/hostSemaphoreCore.d.ts.map +1 -0
  23. package/dist/core/hostSemaphoreCore.js +215 -0
  24. package/dist/core/hostSemaphoreCore.js.map +1 -0
  25. package/dist/core/hostSpawnSemaphore.d.ts +8 -9
  26. package/dist/core/hostSpawnSemaphore.d.ts.map +1 -1
  27. package/dist/core/hostSpawnSemaphore.js +48 -126
  28. package/dist/core/hostSpawnSemaphore.js.map +1 -1
  29. package/dist/core/hostTestRunnerSemaphore.d.ts +492 -0
  30. package/dist/core/hostTestRunnerSemaphore.d.ts.map +1 -0
  31. package/dist/core/hostTestRunnerSemaphore.js +1648 -0
  32. package/dist/core/hostTestRunnerSemaphore.js.map +1 -0
  33. package/dist/core/testRunnerRunClassifier.d.ts +128 -0
  34. package/dist/core/testRunnerRunClassifier.d.ts.map +1 -0
  35. package/dist/core/testRunnerRunClassifier.js +382 -0
  36. package/dist/core/testRunnerRunClassifier.js.map +1 -0
  37. package/dist/core/types.d.ts +21 -0
  38. package/dist/core/types.d.ts.map +1 -1
  39. package/dist/core/types.js.map +1 -1
  40. package/dist/monitoring/guardManifest.d.ts.map +1 -1
  41. package/dist/monitoring/guardManifest.js +26 -0
  42. package/dist/monitoring/guardManifest.js.map +1 -1
  43. package/dist/scaffold/templates.d.ts.map +1 -1
  44. package/dist/scaffold/templates.js +7 -0
  45. package/dist/scaffold/templates.js.map +1 -1
  46. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  47. package/dist/server/CapabilityIndex.js +9 -0
  48. package/dist/server/CapabilityIndex.js.map +1 -1
  49. package/dist/server/routes.d.ts.map +1 -1
  50. package/dist/server/routes.js +150 -0
  51. package/dist/server/routes.js.map +1 -1
  52. package/package.json +1 -1
  53. package/scripts/lib/test-runner-selfdisable-patterns.mjs +326 -0
  54. package/scripts/pre-push-test-runner-selfdisable.mjs +81 -0
  55. package/skills/spec-converge/SKILL.md +2 -1
  56. package/skills/spec-converge/templates/reviewer-integration.md +8 -6
  57. package/src/data/builtin-manifest.json +64 -64
  58. package/src/scaffold/templates.ts +7 -0
  59. package/upgrades/1.3.737.md +140 -0
  60. package/upgrades/side-effects/test-runner-concurrency-bound.md +173 -0
  61. package/upgrades/side-effects/three-standards-enforcement.md +131 -0
@@ -1 +1 @@
1
- {"version":3,"file":"WriteDomainRegistry.d.ts","sourceRoot":"","sources":["../../src/core/WriteDomainRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WriteDomainRegistry.d.ts","sourceRoot":"","sources":["../../src/core/WriteDomainRegistry.ts"],"names":[],"mappings":"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"}
@@ -202,6 +202,28 @@ export function buildWriteDomainRegistry(opts) {
202
202
  note: 'canary fixtures are finally-cleaned rows in the per-machine topic-memory SQLite (reserved negative topic ids); the D8 decision log is per-machine soak evidence; file-level arm shipped in FileClassifier sync exclusions (.instar/topic-memory.db + logs/response-review-decisions.jsonl)',
203
203
  },
204
204
  });
205
+ // ── Test-runner concurrency-bound recovery lever (test-runner-concurrency-bound §2.6/§2.7) ──
206
+ // Machine-local by construction: the semaphore bounds THIS machine's CPU
207
+ // cores, so its holders file is an OS-level rendezvous at ~/.instar/
208
+ // host-test-runner-holders.json — outside any git repo (a lock-file peer),
209
+ // never git-synced. POST /prune only removes dead/TTL-expired holder rows to
210
+ // restore capacity — fully ephemeral and rebuildable (a re-run regenerates
211
+ // everything it touches). Machine-locality is doubly enforced in the design:
212
+ // df-local determination gates all reclaim, and a foreign-hostname holder on a
213
+ // (mis)synced ~/.instar is DROPPED, so the count never converges across
214
+ // machines even if the path is userspace-synced (Dropbox/iCloud). The GET
215
+ // status route is a pure read (non-mutating) and needs no classification.
216
+ reg.add({
217
+ kind: 'route',
218
+ method: 'POST',
219
+ pathPrefix: '/test-runner-limiter/prune',
220
+ domain: 'machine-local',
221
+ story: {
222
+ logical: 'ephemeral-rebuildable',
223
+ onSharedGitSyncedPath: false,
224
+ note: 'holders file is a machine-local OS rendezvous at ~/.instar/host-test-runner-holders.json (outside any git tree); prune reclaims only dead/expired rows (capacity bookkeeping, fully rebuildable); df-local gate + foreign-hostname-holder drop prevent cross-machine convergence even on a userspace-synced home',
225
+ },
226
+ });
205
227
  return reg;
206
228
  }
207
229
  //# sourceMappingURL=WriteDomainRegistry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WriteDomainRegistry.js","sourceRoot":"","sources":["../../src/core/WriteDomainRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WriteDomainRegistry.js","sourceRoot":"","sources":["../../src/core/WriteDomainRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * hostSemaphoreCore — shared holder-set semaphore primitives.
3
+ *
4
+ * Extraction seam per docs/specs/test-runner-concurrency-bound.md §2.1: the
5
+ * proven MECHANICS of `hostSpawnSemaphore.ts` (the 2026-06-20 fork-bomb floor)
6
+ * are extracted here so the test-runner lane can reuse them WITHOUT inheriting
7
+ * spawn-lane POLICY. What moves into the core:
8
+ *
9
+ * - the exclusive O_CREAT|O_EXCL lock primitive — but lock-RECLAIM policy is
10
+ * a PARAMETER of the consumer, not the core: the spawn lane keeps its
11
+ * legacy pid-death unlink reclaim (`legacyPidDeathLockReclaim`, preserved
12
+ * bug-for-bug — see the defect note on that function), while the test lane
13
+ * uses ONLY its own race-safe age-reclaim (atomic rename + dev+ino verify,
14
+ * implemented in hostTestRunnerSemaphore.ts) and NEVER calls the legacy
15
+ * reclaim;
16
+ * - holders-file atomic write (temp+rename) and the safe read;
17
+ * - the `df -P` host-local determination (fail-closed classifier);
18
+ * - the prune-dead pass, taking a ReclaimPolicy parameter (NOT the spawn
19
+ * cap's hardcoded `pidDead && heartbeatStale && dfLocal`).
20
+ *
21
+ * ReclaimPolicy contract (the authoritative statement — this fixes the
22
+ * HOLDER_STALE_MS doc-code contradiction found in review): the SPAWN lane
23
+ * reclaims a holder only when its pid is dead (PRIMARY signal) AND its
24
+ * heartbeat is stale past HOLDER_STALE_MS (SECONDARY signal) AND the holders
25
+ * file is df-confirmed host-local. It is an AND conjunction — a live-pid
26
+ * holder is never reclaimed by heartbeat alone, and a dead-pid holder is kept
27
+ * until its heartbeat also goes stale. The TEST lane passes a different
28
+ * policy (immediate dead-pid reclaim + start-time corroboration + max-hold
29
+ * TTL) — see hostTestRunnerSemaphore.ts §2.4.
30
+ *
31
+ * The singleton + config layer is NOT extracted (two caps cannot share one
32
+ * singleton) — each lane keeps its own thin configure/get/reset trio.
33
+ */
34
+ /** Pure FD1 classifier over the `df -P` device-source column. FAIL-CLOSED. */
35
+ export declare function classifyDfSourceLocal(source: string): boolean;
36
+ /**
37
+ * Detailed df probe. Distinguishes a POSITIVE not-local classification from a
38
+ * FAILED probe ('unknown') — the distinction the 2026-07-01 §1.2 root-cause
39
+ * hinges on: the spawn lane memoizes a boolean, so a df TIMEOUT under load is
40
+ * cached forever as "not local" and silently disables all reclaim for the
41
+ * process lifetime. Consumers that cache MUST NOT cache an 'unknown' result.
42
+ */
43
+ export declare function probeDfHostLocalDetailed(p: string, timeoutMs?: number): {
44
+ status: 'local' | 'not-local' | 'unknown';
45
+ source?: string;
46
+ };
47
+ /**
48
+ * Boolean df probe (the spawn lane's historical shape). FAIL-CLOSED: anything
49
+ * not positively confirmable as local (including a failed probe) is false.
50
+ */
51
+ export declare function probeDfHostLocal(p: string, timeoutMs?: number): boolean;
52
+ /**
53
+ * Write `body` to `filePath` atomically via temp+rename (same filesystem).
54
+ * The temp file is opened O_CREAT|O_EXCL with the given mode; on any error the
55
+ * temp is best-effort removed (via the SafeFsExecutor funnel) and the error
56
+ * rethrown.
57
+ */
58
+ export declare function atomicWriteFileSync(filePath: string, body: string, opts: {
59
+ mode?: number;
60
+ operation: string;
61
+ }): void;
62
+ export type LockTakeResult = {
63
+ ok: true;
64
+ fd: number;
65
+ } | {
66
+ ok: false;
67
+ reason: 'held' | 'error';
68
+ };
69
+ /**
70
+ * ONE attempt to take the exclusive lock at `lockPath` (O_CREAT|O_EXCL) and
71
+ * stamp `record` into it. Returns the open fd on success; `held` when another
72
+ * process holds it; `error` on any other failure (the caller decides its own
73
+ * fail direction — the core never does).
74
+ */
75
+ export declare function tryTakeLockOnce(lockPath: string, record: string): LockTakeResult;
76
+ /** Release the lock taken by `tryTakeLockOnce`. Idempotent, never throws. */
77
+ export declare function releaseLock(lockPath: string, fd: number | null, operation: string): void;
78
+ /**
79
+ * LEGACY spawn-lane lock reclaim — remove the lock file when its recorded
80
+ * holder pid is dead (or the record is unparseable). Preserved BUG-FOR-BUG
81
+ * from HostSpawnSemaphore.reclaimStaleLock so the extraction changes nothing
82
+ * about spawn behavior (the golden test pins it).
83
+ *
84
+ * KNOWN DEFECTS (surfaced by the test-runner-concurrency-bound §2.1 review;
85
+ * the fix is the tracked spawn-lane back-port, NOT this extraction):
86
+ * - non-atomic unlink-then-recreate: two contenders can both observe a dead
87
+ * lock, both unlink, both enter — a holders row can be lost to
88
+ * last-write-wins;
89
+ * - torn-read hazard: the lock is created then written in TWO steps, so a
90
+ * contender can read an empty just-created lock, hit the parse catch, and
91
+ * unlink a LIVE lock;
92
+ * - `{pid, at}` carries no hostname and reclaim is not df-gated: on a synced
93
+ * home a peer machine pid-probes a foreign, locally-meaningless pid.
94
+ * The TEST lane does NOT use this function at all (age-reclaim-only, §2.4).
95
+ */
96
+ export declare function legacyPidDeathLockReclaim(lockPath: string, pidAlive: (pid: number) => boolean): boolean;
97
+ export interface ReclaimContext {
98
+ nowMs: number;
99
+ hostname: string;
100
+ pidAlive: (pid: number) => boolean;
101
+ /** df-confirmed host-local? Policies that reclaim MUST gate on this. */
102
+ dfLocal: boolean;
103
+ }
104
+ /**
105
+ * Per-row reclaim decision. Return true ⇒ the row is RECLAIMED (dropped from
106
+ * the holders set). The policy owns its own fail direction — the core applies
107
+ * it mechanically.
108
+ */
109
+ export type HolderReclaimPolicy<Row> = (row: Row, ctx: ReclaimContext) => boolean;
110
+ /**
111
+ * The prune-dead pass: drop rows that are not well-formed, then apply the
112
+ * lane's ReclaimPolicy to each remaining row. Pure — no I/O.
113
+ */
114
+ export declare function pruneHolders<Row>(rows: unknown[], isWellFormed: (r: unknown) => r is Row, policy: HolderReclaimPolicy<Row>, ctx: ReclaimContext): Row[];
115
+ //# sourceMappingURL=hostSemaphoreCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostSemaphoreCore.d.ts","sourceRoot":"","sources":["../../src/core/hostSemaphoreCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AASH,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAM7D;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,MAAM,EACT,SAAS,SAAO,GACf;IAAE,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBhE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAErE;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzC,IAAI,CAeN;AAID,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACxB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAkBhF;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAaxF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GACjC,OAAO,CAwBT;AAID,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,wEAAwE;IACxE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC;AAElF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAC9B,IAAI,EAAE,OAAO,EAAE,EACf,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,GAAG,EACtC,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAChC,GAAG,EAAE,cAAc,GAClB,GAAG,EAAE,CAQP"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * hostSemaphoreCore — shared holder-set semaphore primitives.
3
+ *
4
+ * Extraction seam per docs/specs/test-runner-concurrency-bound.md §2.1: the
5
+ * proven MECHANICS of `hostSpawnSemaphore.ts` (the 2026-06-20 fork-bomb floor)
6
+ * are extracted here so the test-runner lane can reuse them WITHOUT inheriting
7
+ * spawn-lane POLICY. What moves into the core:
8
+ *
9
+ * - the exclusive O_CREAT|O_EXCL lock primitive — but lock-RECLAIM policy is
10
+ * a PARAMETER of the consumer, not the core: the spawn lane keeps its
11
+ * legacy pid-death unlink reclaim (`legacyPidDeathLockReclaim`, preserved
12
+ * bug-for-bug — see the defect note on that function), while the test lane
13
+ * uses ONLY its own race-safe age-reclaim (atomic rename + dev+ino verify,
14
+ * implemented in hostTestRunnerSemaphore.ts) and NEVER calls the legacy
15
+ * reclaim;
16
+ * - holders-file atomic write (temp+rename) and the safe read;
17
+ * - the `df -P` host-local determination (fail-closed classifier);
18
+ * - the prune-dead pass, taking a ReclaimPolicy parameter (NOT the spawn
19
+ * cap's hardcoded `pidDead && heartbeatStale && dfLocal`).
20
+ *
21
+ * ReclaimPolicy contract (the authoritative statement — this fixes the
22
+ * HOLDER_STALE_MS doc-code contradiction found in review): the SPAWN lane
23
+ * reclaims a holder only when its pid is dead (PRIMARY signal) AND its
24
+ * heartbeat is stale past HOLDER_STALE_MS (SECONDARY signal) AND the holders
25
+ * file is df-confirmed host-local. It is an AND conjunction — a live-pid
26
+ * holder is never reclaimed by heartbeat alone, and a dead-pid holder is kept
27
+ * until its heartbeat also goes stale. The TEST lane passes a different
28
+ * policy (immediate dead-pid reclaim + start-time corroboration + max-hold
29
+ * TTL) — see hostTestRunnerSemaphore.ts §2.4.
30
+ *
31
+ * The singleton + config layer is NOT extracted (two caps cannot share one
32
+ * singleton) — each lane keeps its own thin configure/get/reset trio.
33
+ */
34
+ import fs from 'node:fs';
35
+ import { execFileSync } from 'node:child_process';
36
+ import { SafeFsExecutor } from './SafeFsExecutor.js';
37
+ // ── df -P host-local determination (fail-closed) ─────────────────────────
38
+ /** Pure FD1 classifier over the `df -P` device-source column. FAIL-CLOSED. */
39
+ export function classifyDfSourceLocal(source) {
40
+ if (!source)
41
+ return false;
42
+ if (source.startsWith('//'))
43
+ return false; // SMB/CIFS //host/share → network
44
+ if (/^[^/][^:]*:/.test(source))
45
+ return false; // NFS host:/path → network
46
+ if (source.startsWith('/dev/'))
47
+ return true; // a real block device → local
48
+ return false; // map/tmpfs/anything unrecognized → fail-closed
49
+ }
50
+ /**
51
+ * Detailed df probe. Distinguishes a POSITIVE not-local classification from a
52
+ * FAILED probe ('unknown') — the distinction the 2026-07-01 §1.2 root-cause
53
+ * hinges on: the spawn lane memoizes a boolean, so a df TIMEOUT under load is
54
+ * cached forever as "not local" and silently disables all reclaim for the
55
+ * process lifetime. Consumers that cache MUST NOT cache an 'unknown' result.
56
+ */
57
+ export function probeDfHostLocalDetailed(p, timeoutMs = 3000) {
58
+ let out;
59
+ try {
60
+ // lint-allow-sync-spawn: a bounded (3s) one-shot host-FS classification,
61
+ // run once per cold start and cached by callers on SUCCESS only — never on
62
+ // the hot acquire path.
63
+ out = execFileSync('df', ['-P', p], { timeout: timeoutMs, encoding: 'utf-8' });
64
+ }
65
+ catch {
66
+ // @silent-fallback-ok: df unavailable/timed out ⇒ we could not PROBE — the
67
+ // caller must treat this as unknown (reclaim disabled this pass), never
68
+ // cache it as a positive not-local classification.
69
+ return { status: 'unknown' };
70
+ }
71
+ const lines = out.trim().split('\n');
72
+ if (lines.length < 2)
73
+ return { status: 'unknown' }; // unparseable → unknown
74
+ const source = lines[1]?.trim().split(/\s+/)[0] ?? '';
75
+ return { status: classifyDfSourceLocal(source) ? 'local' : 'not-local', source };
76
+ }
77
+ /**
78
+ * Boolean df probe (the spawn lane's historical shape). FAIL-CLOSED: anything
79
+ * not positively confirmable as local (including a failed probe) is false.
80
+ */
81
+ export function probeDfHostLocal(p, timeoutMs = 3000) {
82
+ return probeDfHostLocalDetailed(p, timeoutMs).status === 'local';
83
+ }
84
+ // ── Atomic file write (temp + rename) ────────────────────────────────────
85
+ /**
86
+ * Write `body` to `filePath` atomically via temp+rename (same filesystem).
87
+ * The temp file is opened O_CREAT|O_EXCL with the given mode; on any error the
88
+ * temp is best-effort removed (via the SafeFsExecutor funnel) and the error
89
+ * rethrown.
90
+ */
91
+ export function atomicWriteFileSync(filePath, body, opts) {
92
+ const tmp = `${filePath}.tmp.${process.pid}.${Math.random().toString(36).slice(2, 8)}`;
93
+ try {
94
+ const fd = fs.openSync(tmp, 'wx', opts.mode ?? 0o600);
95
+ fs.writeSync(fd, body);
96
+ fs.closeSync(fd);
97
+ fs.renameSync(tmp, filePath); // atomic on the same filesystem
98
+ }
99
+ catch (err) {
100
+ try {
101
+ SafeFsExecutor.safeUnlinkSync(tmp, { operation: `${opts.operation}:cleanup-tmp` });
102
+ }
103
+ catch {
104
+ /* @silent-fallback-ok: best-effort tmp cleanup — the original error is rethrown */
105
+ }
106
+ throw err;
107
+ }
108
+ }
109
+ /**
110
+ * ONE attempt to take the exclusive lock at `lockPath` (O_CREAT|O_EXCL) and
111
+ * stamp `record` into it. Returns the open fd on success; `held` when another
112
+ * process holds it; `error` on any other failure (the caller decides its own
113
+ * fail direction — the core never does).
114
+ */
115
+ export function tryTakeLockOnce(lockPath, record) {
116
+ let fd = null;
117
+ try {
118
+ fd = fs.openSync(lockPath, 'wx', 0o600); // O_CREAT|O_EXCL
119
+ fs.writeSync(fd, record);
120
+ return { ok: true, fd };
121
+ }
122
+ catch (err) {
123
+ const e = err;
124
+ if (fd !== null) {
125
+ try {
126
+ fs.closeSync(fd);
127
+ }
128
+ catch {
129
+ /* @silent-fallback-ok: closing a maybe-invalid fd during error unwind is benign */
130
+ }
131
+ }
132
+ if (e.code === 'EEXIST')
133
+ return { ok: false, reason: 'held' };
134
+ return { ok: false, reason: 'error' };
135
+ }
136
+ }
137
+ /** Release the lock taken by `tryTakeLockOnce`. Idempotent, never throws. */
138
+ export function releaseLock(lockPath, fd, operation) {
139
+ if (fd !== null) {
140
+ try {
141
+ fs.closeSync(fd);
142
+ }
143
+ catch {
144
+ /* @silent-fallback-ok: closing an already-closed/invalid fd on lock-release is benign */
145
+ }
146
+ }
147
+ try {
148
+ SafeFsExecutor.safeUnlinkSync(lockPath, { operation });
149
+ }
150
+ catch {
151
+ /* @silent-fallback-ok: a missing lock on release is fine — release is idempotent */
152
+ }
153
+ }
154
+ /**
155
+ * LEGACY spawn-lane lock reclaim — remove the lock file when its recorded
156
+ * holder pid is dead (or the record is unparseable). Preserved BUG-FOR-BUG
157
+ * from HostSpawnSemaphore.reclaimStaleLock so the extraction changes nothing
158
+ * about spawn behavior (the golden test pins it).
159
+ *
160
+ * KNOWN DEFECTS (surfaced by the test-runner-concurrency-bound §2.1 review;
161
+ * the fix is the tracked spawn-lane back-port, NOT this extraction):
162
+ * - non-atomic unlink-then-recreate: two contenders can both observe a dead
163
+ * lock, both unlink, both enter — a holders row can be lost to
164
+ * last-write-wins;
165
+ * - torn-read hazard: the lock is created then written in TWO steps, so a
166
+ * contender can read an empty just-created lock, hit the parse catch, and
167
+ * unlink a LIVE lock;
168
+ * - `{pid, at}` carries no hostname and reclaim is not df-gated: on a synced
169
+ * home a peer machine pid-probes a foreign, locally-meaningless pid.
170
+ * The TEST lane does NOT use this function at all (age-reclaim-only, §2.4).
171
+ */
172
+ export function legacyPidDeathLockReclaim(lockPath, pidAlive) {
173
+ try {
174
+ const raw = fs.readFileSync(lockPath, 'utf-8');
175
+ const obj = JSON.parse(raw);
176
+ const pid = typeof obj?.pid === 'number' ? obj.pid : null;
177
+ if (pid !== null && pidAlive(pid))
178
+ return false; // live holder — wait
179
+ // Dead (or unparseable) lock holder — reclaim.
180
+ SafeFsExecutor.safeUnlinkSync(lockPath, { operation: 'hostSemaphoreCore.legacyPidDeathLockReclaim' });
181
+ return true;
182
+ }
183
+ catch {
184
+ // @silent-fallback-ok: a read/parse failure on the lock means we couldn't
185
+ // confirm a live holder; treat as reclaimable so a corrupt lock can't wedge
186
+ // the cap permanently. The O_EXCL re-create still races safely.
187
+ try {
188
+ SafeFsExecutor.safeUnlinkSync(lockPath, {
189
+ operation: 'hostSemaphoreCore.legacyPidDeathLockReclaim:corrupt',
190
+ });
191
+ return true;
192
+ }
193
+ catch {
194
+ // @silent-fallback-ok: couldn't remove the corrupt lock (a race with
195
+ // another reclaimer) — report not-reclaimed; the caller waits + retries.
196
+ return false;
197
+ }
198
+ }
199
+ }
200
+ /**
201
+ * The prune-dead pass: drop rows that are not well-formed, then apply the
202
+ * lane's ReclaimPolicy to each remaining row. Pure — no I/O.
203
+ */
204
+ export function pruneHolders(rows, isWellFormed, policy, ctx) {
205
+ const out = [];
206
+ for (const r of rows) {
207
+ if (!isWellFormed(r))
208
+ continue; // drop garbage rows
209
+ if (policy(r, ctx))
210
+ continue; // policy says reclaim
211
+ out.push(r);
212
+ }
213
+ return out;
214
+ }
215
+ //# sourceMappingURL=hostSemaphoreCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostSemaphoreCore.js","sourceRoot":"","sources":["../../src/core/hostSemaphoreCore.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,8 @@
36
36
  * BOUNDED INGRESS (P3) lives in the wrapper (SpawnCapIntelligenceProvider) via
37
37
  * poll-retry against `acquire()` — this module is the pure counting primitive.
38
38
  */
39
+ import { classifyDfSourceLocal } from './hostSemaphoreCore.js';
40
+ export { classifyDfSourceLocal };
39
41
  /** One live holder of a spawn slot. */
40
42
  /**
41
43
  * The two reservation lanes (F5, docs/specs/spawn-cap-interactive-priority.md).
@@ -82,11 +84,12 @@ export declare function clampInteractiveReserves(cap: number, ri: number | undef
82
84
  ri: number;
83
85
  rb: number;
84
86
  };
85
- /** Heartbeat staleness window a holder is reclaim-eligible (pid dead OR, on a
86
- * provably host-local disk, heartbeat older than this) only past it. Kept long
87
- * (a slow `claude -p` cold-start + run can legitimately exceed a minute), and
88
- * pid-liveness is the PRIMARY signal heartbeat staleness is secondary and
89
- * only consulted when the pid is also gone. */
87
+ /** Heartbeat staleness window. A holder is reclaimed only when its pid is dead
88
+ * (PRIMARY signal) AND its heartbeat is older than this (SECONDARY signal) AND
89
+ * the holders file is df-confirmed host-local an AND conjunction (see the
90
+ * authoritative ReclaimPolicy contract in hostSemaphoreCore.ts). Kept long
91
+ * (a slow `claude -p` cold-start + run can legitimately exceed a minute); a
92
+ * live-pid holder is NEVER reclaimed regardless of heartbeat. */
90
93
  export declare const HOLDER_STALE_MS: number;
91
94
  /**
92
95
  * FD1 (from ResumeQueue) — is `p` on a HOST-LOCAL filesystem? FAIL-CLOSED:
@@ -97,8 +100,6 @@ export declare const HOLDER_STALE_MS: number;
97
100
  * core/ never depends on monitoring/.
98
101
  */
99
102
  export declare function isPathHostLocalDefault(p: string): boolean;
100
- /** Pure FD1 classifier over the `df -P` device-source column. FAIL-CLOSED. */
101
- export declare function classifyDfSourceLocal(source: string): boolean;
102
103
  export interface HostSpawnSemaphoreDeps {
103
104
  /** Absolute path to the holders file. Default `~/.instar/host-spawn-holders.json`. */
104
105
  holdersPath?: string;
@@ -217,8 +218,6 @@ export declare class HostSpawnSemaphore {
217
218
  * brief; a crashed lock-holder's stale lock is reclaimed by pid-death.
218
219
  */
219
220
  private withLock;
220
- /** Remove the lock file if its recorded holder pid is dead (crash recovery). */
221
- private reclaimStaleLock;
222
221
  private ensureDir;
223
222
  }
224
223
  /** Default holders file path: `~/.instar/host-spawn-holders.json` (host-local). */
@@ -1 +1 @@
1
- {"version":3,"file":"hostSpawnSemaphore.d.ts","sourceRoot":"","sources":["../../src/core/hostSpawnSemaphore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hostSpawnSemaphore.d.ts","sourceRoot":"","sources":["../../src/core/hostSpawnSemaphore.ts"],"names":[],"mappings":"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"}