moving
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled

This commit is contained in:
Oleg Maslov
2026-09-02 10:10:29 +02:00
commit 0c3e2ead3b
3841 changed files with 970576 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
# Manifest v4 — §7.4 Lock Semantics Clarification
**Date:** 2026-04-24 · **Branch:** `feature/c3-v3-wrapper` · **Target:** PM-RATIFY-LOCK-SEMANTICS gate.
## PM interpretation — CONFIRMED with code evidence
`concurrent_runners: FORBIDDEN` (manifest v4 §8) covers **cross-process**
threats only — two independent `npx tsx scripts/run-mini-locomo.ts` calls.
Intra-wrapper spawning via `--parallel-concurrency N` IS allowed.
**Code evidence at HEAD `373516c`:**
- `runner.ts:852` hardcodes a single global sentinel
`benchmarks/results/.benchmark-runner`, with comment _"any two runner
invocations contend regardless of their --output paths"_ — cross-process rail.
- `runner-lock.ts:77112` is check-then-write (`readExistingLock → throw
if age<60 s → fs.writeFileSync`). Two intra-wrapper children each pass
the check before either writes (TOCTOU race); overwrite-semantics →
last-writer wins. Both heartbeat; first unlinks, second ENOENTs silently.
- Gate D halt log: pids 4984 + 65668 both logged `[bench:lock] acquired`
within 3 s; file retained pid=65668 (overwriter).
Net: intra-wrapper parallel coexists via fail-open race. A third
independent invocation sees a fresh mtime and refuses. Cross-process
threat model intact.
## Path L-1 (preferred) — ratify, no code change
Observed semantics match PM intent. Manifest v4 anchor `dedd698` stays
valid. **Recommended PM waiver text:**
> §7.4 applies only to cross-process invocations. Intra-wrapper parallel
> spawns under `--parallel-concurrency N` are exempt. HEAD `373516c`
> behaviour satisfies the intent.
**Path L-2 (rejected):** per-cell sentinel naming edits `runner.ts` /
`runner-lock.ts` — both frozen per §11. Triggers manifest v5. Not
warranted when L-1 waiver is defensible.
## Task 2.6 carry-over
Ticket `bench-lock-exclusive-create` (defensive, Stage-3-independent):
swap `fs.writeFileSync` for `fs.openSync(path, 'wx')` (O_EXCL) in
`runner-lock.ts`; per-cell sentinel in `runner.ts:852`; parallel-acquire
unit test (exactly one succeeds).