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
@@ -0,0 +1,492 @@
1
+ /**
2
+ * hostTestRunnerSemaphore — the host-wide vitest concurrency bound (test lane).
3
+ *
4
+ * Spec: docs/specs/test-runner-concurrency-bound.md (converged round 10,
5
+ * operator-ratified: suite cap 1, ship posture dry-run/watch-only).
6
+ * Constitutional standard: Bounded Blast Radius (the 2nd instance of the
7
+ * unbounded-per-actor-spawn class; the 1st is hostSpawnSemaphore).
8
+ *
9
+ * THE LOAD-BEARING DESIGN DECISION (§1.1): the fail-direction INVERTS from the
10
+ * spawn cap. This lane fails OPEN — toward ADMITTING a run — on every
11
+ * *provable, persistent* uncertainty (corrupt holders file, df-unconfirmed
12
+ * disk, provably-wedged lock, unresolvable ancestry). A false BLOCK wedges
13
+ * every `git push` and `/build` gate host-wide with no degradation path; a
14
+ * false PASS is one extra concurrent suite. A single missed lock attempt is
15
+ * "keep polling", never "admit" (§2.4 fail-open granularity).
16
+ *
17
+ * TWO SYMMETRIC LANES (§2.3): suite-class (cap INSTAR_HOST_TEST_MAX, default
18
+ * 1) and targeted-run (cap INSTAR_HOST_TEST_TARGETED_MAX, default 6). A full
19
+ * targeted lane THROWS the typed capacity-timeout — it never fail-open-admits
20
+ * (fail-open-admit is lock-wedge-only).
21
+ *
22
+ * RECLAIM POLICY (§2.4, NOT the spawn defaults): immediate reclaim of a
23
+ * provably-dead pid; start-time corroboration reclaims a REUSED pid pre-TTL;
24
+ * a max-hold TTL frees even a pid-alive holder's slot (capacity-reclaim-ONLY
25
+ * by default — NO process is ever signaled unless the separate, opt-in,
26
+ * tuning-file-armed INSTAR_HOST_TEST_TTL_SIGNAL arm is on AND posture is
27
+ * enforcing, and even then only after four mandatory gates).
28
+ *
29
+ * All cross-actor levers (posture, both caps, the signal arm) take their
30
+ * host-uniform authority from ~/.instar/host-test-runner-tuning.json; env
31
+ * vars are per-process overrides that are honored but LOUD when divergent
32
+ * (§2.9). Every consequential decision is appended to the durable event
33
+ * ledger (§2.8) — the soak's evidence store.
34
+ */
35
+ /** Suite-lane cap code-default (operator-ratified: full suites one-at-a-time). */
36
+ export declare const HOST_TEST_SUITE_CAP_DEFAULT = 1;
37
+ /** Targeted-lane cap code-default (§2.3). */
38
+ export declare const HOST_TEST_TARGETED_CAP_DEFAULT = 6;
39
+ /** Tuning-file cap sanity ceilings — 4× each code-default (§2.9, pinned). */
40
+ export declare const HOST_TEST_SUITE_CAP_CEILING = 4;
41
+ export declare const HOST_TEST_TARGETED_CAP_CEILING = 24;
42
+ /** Max-hold TTL code-default (1h). */
43
+ export declare const HOST_TEST_TTL_DEFAULT_MS = 3600000;
44
+ /** ttlMs sanity RANGE — pinned code constants, deliberately NOT tunable (§2.4). */
45
+ export declare const HOST_TEST_TTL_MIN_MS = 300000;
46
+ export declare const HOST_TEST_TTL_MAX_MS = 14400000;
47
+ /** Poison sanity ceiling on holders-file row count (§2.4, pinned round 6). */
48
+ export declare const HOST_TEST_POISON_CEILING = 64;
49
+ /** Lockless fail-open storm ceiling — O_EXCL witness slots (§2.4, pinned). */
50
+ export declare const WEDGE_STORM_CEILING = 8;
51
+ /** Background-class suite-lane wait budget default (2 min, fail-loud). */
52
+ export declare const HOST_TEST_ACQUIRE_MS_DEFAULT = 120000;
53
+ /** Targeted-lane wait budget default (1 min, fail-loud THROW). */
54
+ export declare const HOST_TEST_TARGETED_ACQUIRE_MS_DEFAULT = 60000;
55
+ /** A lock older than this is provably wedged (critical section is sub-ms). */
56
+ export declare const LOCK_WEDGE_AGE_MS = 10000;
57
+ /** Per-attempt lock-acquire deadline (≫ the sub-ms critical section). */
58
+ export declare const LOCK_ACQUIRE_DEADLINE_MS = 250;
59
+ /** Acquisition poll cadence (async yielding wait — NEVER a busy spin). */
60
+ export declare const POLL_INTERVAL_MS = 5000;
61
+ export declare const POLL_JITTER_MS = 1000;
62
+ /** SIGTERM→SIGKILL grace window under the (opt-in) signal arm. */
63
+ export declare const TOMBSTONE_GRACE_MS = 30000;
64
+ /** Ledger rotation threshold (~5MB; segments retained per §2.8). */
65
+ export declare const LEDGER_ROTATE_BYTES: number;
66
+ /** Segment retention floor AFTER the enforce-flip decision is recorded. */
67
+ export declare const LEDGER_SEGMENT_FLOOR = 10;
68
+ /** Clock-skew allowance for start-time corroboration. */
69
+ export declare const START_TIME_SKEW_MS = 120000;
70
+ /** 80%-of-TTL warning fraction (§2.4). */
71
+ export declare const TTL_WARN_FRACTION = 0.8;
72
+ /** Targeted classification file-count limit K (§2.3). */
73
+ export declare const TARGETED_FILE_LIMIT = 5;
74
+ export type TestLane = 'suite' | 'targeted';
75
+ export type TestPosture = 'off' | 'dry-run' | 'enforcing';
76
+ export type TestRunClass = 'interactive' | 'background';
77
+ export interface TestRunnerPaths {
78
+ baseDir: string;
79
+ holders: string;
80
+ lock: string;
81
+ witnessDir: string;
82
+ tuning: string;
83
+ tuningBaseline: string;
84
+ dfMarker: string;
85
+ ledger: string;
86
+ }
87
+ /**
88
+ * Resolve the rendezvous base dir. `INSTAR_HOST_TEST_BASE_DIR` is an INTERNAL
89
+ * test seam (meta-tests isolate their spawned roots into a temp universe) —
90
+ * it is NOT a public lever and is deliberately undocumented in §2.9.
91
+ */
92
+ export declare function resolveTestRunnerPaths(env?: NodeJS.ProcessEnv): TestRunnerPaths;
93
+ export interface TestRunnerHolderRow {
94
+ v: 1;
95
+ id: string;
96
+ lane: TestLane;
97
+ pid: number;
98
+ hostname: string;
99
+ /** ms epoch of the acquire. */
100
+ acquiredAt: number;
101
+ /** Identity fingerprint: raw `ps -o lstart=` text of the holder at acquire. */
102
+ startedAt: string;
103
+ /** Clamped copy of the command line (identity fingerprint). */
104
+ cmd: string;
105
+ /** Per-row max-hold TTL, stamped at acquire, sanity-RANGED on every read. */
106
+ ttlMs: number;
107
+ state: 'held' | 'terminating';
108
+ runClass?: TestRunClass;
109
+ /** Resolved MATCHED file count for targeted-lane rows (§2.3). */
110
+ fileCount?: number;
111
+ /** Recorded group-leadership at acquire (best-effort). */
112
+ pgidLeader?: boolean;
113
+ /** Set when the sleep-wake check re-armed the TTL window once (§2.4 gate 5). */
114
+ reArmedAt?: number;
115
+ /** signal-arm tombstone bookkeeping. */
116
+ signaledAt?: number;
117
+ [k: string]: unknown;
118
+ }
119
+ export interface TestRunnerTuningFile {
120
+ v: 1;
121
+ enforcing?: boolean;
122
+ clampActive?: boolean;
123
+ maxConcurrent?: number;
124
+ targetedMax?: number;
125
+ ttlSignal?: boolean;
126
+ flippedAt?: string;
127
+ by?: string;
128
+ [k: string]: unknown;
129
+ }
130
+ /** Distinct exit code for capacity refusals (EX_TEMPFAIL — NOT a test failure). */
131
+ export declare const TEST_RUNNER_CAPACITY_EXIT_CODE = 75;
132
+ export declare class TestRunnerCapacityTimeoutError extends Error {
133
+ readonly code = "INSTAR_TEST_CAPACITY_TIMEOUT";
134
+ readonly exitCode = 75;
135
+ readonly holders: Array<{
136
+ pid: number;
137
+ ageMs: number;
138
+ }>;
139
+ constructor(lane: TestLane, budgetMs: number, holders: Array<{
140
+ pid: number;
141
+ ageMs: number;
142
+ }>);
143
+ }
144
+ export declare class TestRunnerStormCeilingError extends Error {
145
+ readonly code = "INSTAR_TEST_STORM_CEILING";
146
+ readonly exitCode = 75;
147
+ readonly slots: Array<{
148
+ slot: number;
149
+ pid: number;
150
+ ageMs: number;
151
+ }>;
152
+ constructor(slots: Array<{
153
+ slot: number;
154
+ pid: number;
155
+ ageMs: number;
156
+ }>);
157
+ }
158
+ /**
159
+ * Coerce a raw ttlMs to a finite integer in [HOST_TEST_TTL_MIN_MS,
160
+ * HOST_TEST_TTL_MAX_MS]. Uses Number() + Number.isInteger — NEVER parseInt
161
+ * (§2.4: "300000abc"/"300000.9" are definitively REJECTED to the default, not
162
+ * truncated into range). Out-of-range/NaN/non-integer ⇒ code-default + coerced.
163
+ */
164
+ export declare function coerceTtlMs(raw: unknown): {
165
+ ttlMs: number;
166
+ coerced: boolean;
167
+ };
168
+ /** Sanity-clamp a tuning-file cap value to an integer in [1, ceiling] (§2.9). */
169
+ export declare function sanitizeCapValue(raw: unknown, ceiling: number, dflt: number): {
170
+ value: number;
171
+ coerced: boolean;
172
+ };
173
+ export interface ResolvedPosture {
174
+ posture: TestPosture;
175
+ /** The host-uniform authority's posture (tuning file, else code default). */
176
+ authority: Exclude<TestPosture, 'off'>;
177
+ /** Env divergence from the authority: 'weaker' | 'stronger' | null. */
178
+ divergence: 'weaker' | 'stronger' | null;
179
+ }
180
+ export declare function resolvePosture(env: NodeJS.ProcessEnv, tuning: TestRunnerTuningFile | null): ResolvedPosture;
181
+ /** Are the config-eval clamps REAL (clamp-active sub-stage or enforcing)? §2.11. */
182
+ export declare function resolveClampActive(posture: TestPosture, tuning: TestRunnerTuningFile | null): boolean;
183
+ export interface ResolvedCap {
184
+ cap: number;
185
+ source: 'env' | 'tuning' | 'default';
186
+ /** Tuning value was out-of-range/non-integer and resolved to the default. */
187
+ coerced: boolean;
188
+ /** Resolved (env) cap exceeds the host-uniform authority by more than 4×. */
189
+ divergentBeyond4x: boolean;
190
+ }
191
+ export declare function resolveCap(lane: TestLane, env: NodeJS.ProcessEnv, tuning: TestRunnerTuningFile | null): ResolvedCap;
192
+ export interface ResolvedTtlSignal {
193
+ armed: boolean;
194
+ /** env=1 against an unarmed authority was IGNORED (env can only DISARM). */
195
+ envArmIgnored: boolean;
196
+ }
197
+ export declare function resolveTtlSignal(env: NodeJS.ProcessEnv, tuning: TestRunnerTuningFile | null): ResolvedTtlSignal;
198
+ /** Resolve the acquire wait budget for a lane + run class (§2.9). */
199
+ export declare function resolveAcquireBudgetMs(lane: TestLane, runClass: TestRunClass, env?: NodeJS.ProcessEnv): number;
200
+ /** Stamped per-row ttl at acquire (env-read, sanity-ranged). */
201
+ export declare function resolveAcquireTtlMs(env?: NodeJS.ProcessEnv): {
202
+ ttlMs: number;
203
+ coerced: boolean;
204
+ };
205
+ export declare const TUNING_HASH_ABSENT = "absent";
206
+ export interface ResolvedTuning {
207
+ file: TestRunnerTuningFile | null;
208
+ /** sha256-12 of the raw bytes, or the 'absent' sentinel. */
209
+ hash: string;
210
+ corrupt: boolean;
211
+ }
212
+ /**
213
+ * Read the tuning file. Quarantine requires CONFIRMED corruption (an immediate
214
+ * re-read — a transient torn write must never demote the host authority);
215
+ * confirmed-corrupt is quarantined aside + resolved to code defaults (§2.9).
216
+ */
217
+ export declare function readTuningFile(paths: TestRunnerPaths): ResolvedTuning;
218
+ /** Atomic tuning write (the recommended writer — never a raw shell redirect). */
219
+ export declare function writeTuningFile(paths: TestRunnerPaths, tuning: TestRunnerTuningFile): void;
220
+ export interface TestRunnerLedgerEvent {
221
+ v: 1;
222
+ ts: string;
223
+ kind: string;
224
+ pid: number;
225
+ hostname: string;
226
+ posture: TestPosture;
227
+ suiteCap: number;
228
+ targetedCap: number;
229
+ ttlSignalArmed: boolean;
230
+ tuningHash: string;
231
+ [k: string]: unknown;
232
+ }
233
+ /** Best-effort ledger append — a ledger write failure never blocks a run. */
234
+ export declare function appendLedgerEvent(paths: TestRunnerPaths, event: TestRunnerLedgerEvent, opts?: {
235
+ flipRecorded?: boolean;
236
+ }): void;
237
+ export declare function listLedgerSegments(paths: TestRunnerPaths): string[];
238
+ /**
239
+ * Bounded, torn-line-tolerant read of the newest ledger events. Spans the
240
+ * newest rotated SEGMENT when the live file carries no events (§2.9 —
241
+ * rotation must not blind the baseline read).
242
+ */
243
+ export declare function readLedgerTail(paths: TestRunnerPaths, maxLines?: number): TestRunnerLedgerEvent[];
244
+ export interface TuningBaselineResult {
245
+ changed: boolean;
246
+ changedFields: string[];
247
+ established: boolean;
248
+ /** true when establishment was silent (genuinely fresh host). */
249
+ silentEstablish: boolean;
250
+ }
251
+ /**
252
+ * Detect tuning-file mutation via the content-hash baseline marker. On
253
+ * no-prior-baseline the LEDGER TAIL (live + newest segment) is consulted
254
+ * before establishing silently — marker-deletion must not launder an edit.
255
+ */
256
+ export declare function checkTuningBaseline(paths: TestRunnerPaths, current: ResolvedTuning): TuningBaselineResult;
257
+ /**
258
+ * Resolve the host-local determination for the rendezvous dir, cached to the
259
+ * on-disk marker. THE §1.2 LESSON APPLIED: a FAILED probe ('unknown') is
260
+ * NEVER written to the marker — only a positive local/not-local
261
+ * classification is cacheable, so a df timeout under load disables reclaim
262
+ * for ONE pass, never for the process (or marker) lifetime.
263
+ */
264
+ export declare function resolveDfLocal(paths: TestRunnerPaths, probe?: (p: string) => {
265
+ status: 'local' | 'not-local' | 'unknown';
266
+ }): {
267
+ local: boolean;
268
+ status: 'local' | 'not-local' | 'unknown';
269
+ };
270
+ export interface PidEvidence {
271
+ /** pid → parsed `ps lstart` start time in ms epoch (null: unobtainable). */
272
+ startMs: Map<number, number | null>;
273
+ /** pid → process group id (null: unobtainable). */
274
+ pgid: Map<number, number | null>;
275
+ }
276
+ export declare function gatherPidEvidence(pids: number[], pidAlive?: (pid: number) => boolean): PidEvidence;
277
+ /** The holder's OWN start time + cmd (fingerprint stamped at acquire). */
278
+ export declare function selfProcessFingerprint(): {
279
+ startedAt: string;
280
+ cmd: string;
281
+ };
282
+ export type RowKind = 'held' | 'terminating' | 'unknown-state' | 'malformed';
283
+ export declare function classifyRow(row: unknown): RowKind;
284
+ export interface HostTestRunnerSemaphoreDeps {
285
+ paths?: TestRunnerPaths;
286
+ env?: NodeJS.ProcessEnv;
287
+ now?: () => number;
288
+ hostname?: () => string;
289
+ pidAlive?: (pid: number) => boolean;
290
+ /** Injected df probe (tests). */
291
+ dfProbe?: (p: string) => {
292
+ status: 'local' | 'not-local' | 'unknown';
293
+ };
294
+ /** Injected process-signal seam (tests) — default process.kill. */
295
+ signal?: (pid: number, sig: NodeJS.Signals) => void;
296
+ /** Injected evidence gatherer (tests). */
297
+ gatherEvidence?: (pids: number[]) => PidEvidence;
298
+ /** Injected boot-time reader for the sleep-wake gate (ms epoch, null = unobtainable). */
299
+ bootTimeMs?: () => number | null;
300
+ /** INTERNAL policy parameter: sub-floor TTL for tests (never the public env). */
301
+ ttlMsOverride?: number;
302
+ /** Async sleep seam (tests shrink the poll). */
303
+ sleep?: (ms: number) => Promise<void>;
304
+ /** Poll interval override (INTERNAL test seam). */
305
+ pollIntervalMs?: number;
306
+ genId?: () => string;
307
+ }
308
+ export interface AcquireRequest {
309
+ lane: TestLane;
310
+ runClass: TestRunClass;
311
+ /** Resolved MATCHED file count (targeted lane). */
312
+ fileCount?: number;
313
+ /** Override budget (default resolved per §2.9). */
314
+ budgetMs?: number;
315
+ /** Called about once per poll while waiting (the §2.10 wait-line hook). */
316
+ onWaitTick?: (elapsedMs: number, holders: Array<{
317
+ pid: number;
318
+ ageMs: number;
319
+ }>) => void;
320
+ }
321
+ export type AcquireOutcome = {
322
+ kind: 'acquired';
323
+ id: string;
324
+ wouldBlock: boolean;
325
+ ttlMs: number;
326
+ } | {
327
+ kind: 'fail-open-admit';
328
+ cause: string;
329
+ witnessFile: string | null;
330
+ };
331
+ export interface PruneReport {
332
+ reclaimed: Array<{
333
+ pid: number;
334
+ lane?: string;
335
+ reason: string;
336
+ }>;
337
+ tombstonesCompleted: number;
338
+ liveSuite: number;
339
+ liveTargeted: number;
340
+ }
341
+ export declare class HostTestRunnerSemaphore {
342
+ readonly paths: TestRunnerPaths;
343
+ private readonly env;
344
+ private readonly now;
345
+ private readonly host;
346
+ private readonly pidAlive;
347
+ private readonly dfProbe;
348
+ private readonly signal;
349
+ private readonly gatherEvidence;
350
+ private readonly bootTimeMs;
351
+ private readonly ttlMsOverride?;
352
+ private readonly sleep;
353
+ private readonly pollIntervalMs;
354
+ private readonly genId;
355
+ constructor(deps?: HostTestRunnerSemaphoreDeps);
356
+ /** Resolve the full lever context (tuning, posture, caps, arm) once. */
357
+ resolveContext(): {
358
+ tuning: ResolvedTuning;
359
+ posture: ResolvedPosture;
360
+ suiteCap: ResolvedCap;
361
+ targetedCap: ResolvedCap;
362
+ ttlSignal: ResolvedTtlSignal;
363
+ clampActive: boolean;
364
+ };
365
+ ledger(kind: string, fields?: Record<string, unknown>): void;
366
+ private readHolders;
367
+ private writeHolders;
368
+ /**
369
+ * Quarantine a corrupt/poisoned holders file aside and start a fresh one,
370
+ * RE-HOMING any pending `terminating` tombstones (parseable path) or
371
+ * best-effort SALVAGING them via a line scan (unparseable path, §2.4).
372
+ * Returns the tombstones carried into the fresh file + whether any may have
373
+ * been dropped.
374
+ */
375
+ private quarantineHolders;
376
+ /**
377
+ * Apply the test-lane ReclaimPolicy over `rows`. Evidence is gathered by the
378
+ * caller OUTSIDE the lock; decisions are applied here (re-validated per row).
379
+ * Returns kept rows + freed info. NEVER signals unless `armed && enforcing`.
380
+ */
381
+ private applyReclaimPass;
382
+ private countLive;
383
+ /**
384
+ * The opt-in TTL signal path (§2.4) — four mandatory gates; a holder row is
385
+ * data, not a warrant. Returns 'tombstoned' | 'freed' | 'rearmed'.
386
+ */
387
+ private signalHungHolder;
388
+ /** Complete (or keep) a terminating tombstone. Returns true when dropped. */
389
+ private completeTombstone;
390
+ private writeWitness;
391
+ /**
392
+ * Claim a numbered O_EXCL storm slot (§2.4). Throws TestRunnerStormCeilingError
393
+ * when all WEDGE_STORM_CEILING slots are held by pid-ALIVE claimants.
394
+ */
395
+ private claimStormSlot;
396
+ private readSlot;
397
+ /**
398
+ * Rename a file aside with dev+ino verification (§2.4 round 9/10): capture
399
+ * identity BEFORE the rename, verify the moved object AFTER — on mismatch
400
+ * (a peer's FRESH file created in the race) drop the claim and leave the
401
+ * mis-grabbed file for the age sweep. Returns true when we moved the exact
402
+ * observed object.
403
+ */
404
+ private renameAsideVerified;
405
+ /** Liveness-gated witness + storm-slot + reclaim-temp sweep (§2.4). */
406
+ private sweepWitnesses;
407
+ /** Live (pid-alive) witness records — the route's `admittedOpen` field. */
408
+ readAdmittedOpen(): Array<{
409
+ pid: number;
410
+ acquiredAt: number;
411
+ }>;
412
+ /**
413
+ * Try to take the holders lock within LOCK_ACQUIRE_DEADLINE_MS (only the
414
+ * sub-millisecond critical section may spin). Returns the fd or null.
415
+ */
416
+ private takeLockBounded;
417
+ /**
418
+ * Race-safe AGE-reclaim of a provably-wedged lock (§2.4): atomic rename of
419
+ * the observed lock + dev+ino verify. The test lane's ONLY lock reclaim —
420
+ * it never pid-probes the lock (the spawn lane's legacy reclaim is not
421
+ * inherited).
422
+ */
423
+ private ageReclaimWedgedLock;
424
+ private lockFileAgeMs;
425
+ acquire(req: AcquireRequest): Promise<AcquireOutcome>;
426
+ private jitteredPoll;
427
+ /**
428
+ * Build the holder row for THIS process. The self fingerprint + pgid are
429
+ * passed in by acquire() — gathered OUTSIDE the lock (§2.4 round 9), never
430
+ * probed from inside the critical section.
431
+ */
432
+ private buildRow;
433
+ private acquireFields;
434
+ private flushEvents;
435
+ private holderAges;
436
+ /** The 80%-of-TTL warning timer, armed in the holding root (§2.4). */
437
+ private armSelfTtlWarn;
438
+ /** Release the slot held under `id`. Never throws; bounded lock wait. */
439
+ release(id: string): void;
440
+ private static _pruneInFlight;
441
+ private static _lastPruneAt;
442
+ /**
443
+ * Force a full reclaim pass (the §2.6 recovery lever). Single-flight +
444
+ * rate-limited (one forced pass per 5s). Returns what was reclaimed.
445
+ */
446
+ prune(opts?: {
447
+ source: string;
448
+ force?: boolean;
449
+ }): PruneReport & {
450
+ rateLimited?: boolean;
451
+ };
452
+ status(): {
453
+ cap: number;
454
+ targetedCap: number;
455
+ posture: TestPosture;
456
+ clampActive: boolean;
457
+ ttlSignalArmed: boolean;
458
+ liveHolders: Array<{
459
+ pid: number;
460
+ hostname: string;
461
+ acquiredAt: number;
462
+ ttlMs: number;
463
+ state: string;
464
+ }>;
465
+ targetedHolders: Array<{
466
+ pid: number;
467
+ hostname: string;
468
+ acquiredAt: number;
469
+ ttlMs: number;
470
+ state: string;
471
+ }>;
472
+ admittedOpen: Array<{
473
+ pid: number;
474
+ acquiredAt: number;
475
+ }>;
476
+ suite: {
477
+ available: number;
478
+ saturated: boolean;
479
+ };
480
+ targeted: {
481
+ available: number;
482
+ saturated: boolean;
483
+ };
484
+ recentEvents: TestRunnerLedgerEvent[];
485
+ skipHistogram: Record<string, number>;
486
+ };
487
+ }
488
+ /** macOS boot time via sysctl (best-effort; null when unobtainable). */
489
+ export declare function readMacBootTimeMs(): number | null;
490
+ export declare function getHostTestRunnerSemaphore(): HostTestRunnerSemaphore;
491
+ export declare function _resetHostTestRunnerSemaphoreForTest(): void;
492
+ //# sourceMappingURL=hostTestRunnerSemaphore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostTestRunnerSemaphore.d.ts","sourceRoot":"","sources":["../../src/core/hostTestRunnerSemaphore.ts"],"names":[],"mappings":"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"}