ECC/tests/lib
Jamkris 5acb01a276 test(lib): concurrent writeBridgeAtomic + tmp-cleanup regression
Two regression tests pin down the previous two commits' atomic-rename
fixes:

1. **concurrent writes don't throw ENOENT or corrupt the file** —
   spawns two child Node processes (`tests/__tmp_bridge_writer.js`
   created in-test, cleaned up in finally) that each call
   `writeBridgeAtomic(sid, …)` 200 times against the same session
   ID with independent payloads. Asserts both subprocesses exit 0
   (the previous implementation produced ENOENT on roughly 50% of
   rename calls, all swallowed by the in-test catch) and the final
   bridge file is parseable JSON belonging to one of the two writers
   (last-writer-wins is fine; the contract is *no corruption* and
   *no rename ENOENT*, not data preservation).

2. **tmp file cleanup on rename failure** — pre-creates a directory
   at the target bridge path so `renameSync(tmp, target)` fails,
   calls `writeBridgeAtomic`, asserts the call throws AND that no
   tmp file with the writer's `pid.<nonce>.tmp` prefix is left
   behind in `os.tmpdir()`. The previous code had no cleanup; the
   fix's `try/catch + unlinkSync` keeps tmpdir from accumulating
   orphan files across repeated rename failures.

The first test deliberately writes independent payloads from each
subprocess so this regression doesn't try to claim a property the
fix doesn't actually deliver (read-modify-write race in the caller
is a separate issue and out of scope per PR body).

Test count: 12 → 14 in `tests/lib/session-bridge.test.js`;
`npm test` green; `npm run lint` clean.
2026-05-19 04:57:10 -04:00
..
agent-compress.test.js feat: agent description compression with lazy loading (#696) 2026-03-20 03:53:22 -07:00
changed-files-store.test.js fix: port safe ci cleanup from backlog 2026-04-01 16:09:54 -07:00
command-plugin-root.test.js fix: salvage remaining stale queue fixes (#1754) 2026-05-11 16:41:08 -04:00
cost-estimate.test.js feat: add ECC statusline observability hooks 2026-05-11 23:44:06 -04:00
inspection.test.js feat: agent compression, inspection logic, governance hooks (#491, #485, #482) (#688) 2026-03-20 01:38:13 -07:00
install-config.test.js feat: add install catalog and project config autodetection 2026-03-27 05:56:39 -04:00
install-executor.test.js feat: add Ruby and Rails rules 2026-05-13 06:27:08 -04:00
install-lifecycle.test.js test: cover install lifecycle edge paths 2026-04-29 17:56:25 -04:00
install-manifests.test.js feat: add zed install target 2026-05-17 07:06:49 -04:00
install-request.test.js fix(installer): harden locale docs install 2026-05-17 20:46:04 -04:00
install-state.test.js fix: harden release surface version and packaging sync (#1388) 2026-04-12 22:33:32 -07:00
install-targets.test.js feat: add zed install target 2026-05-17 07:06:49 -04:00
locale-install.test.js fix(installer): harden locale docs install 2026-05-17 20:46:04 -04:00
mcp-config.test.js feat: support disabling bundled mcp servers 2026-04-05 14:37:28 -07:00
observer-sessions.test.js fix: port continuous-learning observer fixes 2026-05-11 03:35:42 -04:00
orchestration-session.test.js fix: retire legacy command shims from default surface 2026-04-29 23:56:40 -04:00
package-manager.test.js fix: harden Trae install ownership (#1013) 2026-03-30 02:01:54 -04:00
project-detect.test.js docs: salvage F# agent and language guidance 2026-05-11 21:43:17 -04:00
resolve-ecc-root.test.js fix: salvage remaining stale queue fixes (#1754) 2026-05-11 16:41:08 -04:00
resolve-formatter.test.js fix: harden Trae install ownership (#1013) 2026-03-30 02:01:54 -04:00
selective-install.test.js test: normalize zed install path assertion 2026-05-17 07:27:05 -04:00
session-adapters.test.js test: cover session adapter edge cases 2026-04-29 18:21:31 -04:00
session-aliases.test.js fix: narrow unicode cleanup scope 2026-03-29 21:21:18 -04:00
session-bridge.test.js test(lib): concurrent writeBridgeAtomic + tmp-cleanup regression 2026-05-19 04:57:10 -04:00
session-manager.test.js test: cover canonical session duplicate precedence 2026-03-25 04:01:23 -04:00
shell-split.test.js fix(hooks): allow tmux-wrapped dev server commands (#321) 2026-03-07 14:47:49 -08:00
skill-dashboard.test.js test: cover skill dashboard edge paths 2026-04-29 19:15:47 -04:00
skill-evolution.test.js test: cover skill tracker edge paths 2026-04-29 19:21:03 -04:00
skill-improvement.test.js feat: self-improving skills loop — observe, inspect, amend, evaluate 2026-03-14 23:21:18 -07:00
state-store.test.js feat: sync GitHub queue into work items 2026-05-11 13:07:29 -04:00
tmux-worktree-orchestrator.test.js fix: retire legacy command shims from default surface 2026-04-29 23:56:40 -04:00
utils.test.js fix: respect home overrides in hook utilities 2026-04-02 18:22:07 -07:00