FN-126: fix inert sync-lane validation

Prevent inert synchronization lanes from bypassing merge-gate validation while preserving task-lane cache and archive lifecycle behavior.

- Reject sync-resolved lane conversions in the static validator.
- Preserve task-lane cache emissions and active-session cleanup across task mutations and archival.
- Add regression coverage, baseline updates, documentation, and a release changeset.

Files changed:
 .changeset/fn-126-inert-sync-lane.md               |   7 +
 .../a-falling-count-is-not-evidence.md             |  12 +
 .../task-lane-cache-emitter-preservation.test.ts   | 269 +++++++++++++++++++++
 .../core/src/task-store/archive-lifecycle-2.ts     |   3 +-
 packages/core/src/task-store/moves.ts              |   3 +-
 packages/core/src/task-store/task-artifacts-ops.ts |   3 +-
 packages/core/src/task-store/task-update.ts       |   3 +-
 packages/core/src/task-store/update-task-deps.ts   |   3 +-
 ...xecutor-archive-releases-active-session.test.ts |  80 ++++++
 packages/engine/src/executor.ts                    |   4 +-
 .../src/executor/executor-side-effect-hosts.ts     |   2 +-
 .../executor/is-backward-move-out-of-planning.ts   |   7 +-
 .../src/executor/task-executor-graph-facades.ts    |   2 +-
 .../engine/src/executor/task-executor-imports.ts   |   1 -
 .../engine/src/executor/wire-executor-lifecycle.ts |  18 +-
 .../check-inert-sync-lane-conversions.test.mjs     |  83 +++++--
 scripts/check-inert-sync-lane-conversions.mjs      |  19 +-
 scripts/lib/inert-sync-lane-baseline.json          |   6 +-
 18 files changed, 479 insertions(+), 46 deletions(-)

Fusion-Task-Id: FN-126

Fusion-Task-Lineage: 0c7a1a3a-9446-44f8-955d-df6c402dfd31

Co-authored-by: Fusion <noreply@runfusion.ai>
This commit is contained in:
Fusion Agent
2026-08-22 01:39:23 +00:00
parent 8b681775ae
commit 33f4797ceb
18 changed files with 479 additions and 46 deletions

View File

@@ -190,3 +190,15 @@ the person who had just written it down.
- Before comparing two numbers: confirm they came from one tree.
- Before converting a flagged site: read the flag. It is a claim, and it decays — but re-deriving it
costs minutes and overriding it wrongly has cost three PRs.
## FN-126: 2 → 0 was removed work, not a detection loss
The executor planning-evacuation predicate stopped calling the synchronous workflow resolver. Its
PostgreSQL selection reader measured as the same legacy defaults already beside the predicate, so it
could not serve renamed boards. The listener now uses payload lanes, then the TTL `TaskLaneCache`, then
legacy ids. Before recording the zero baseline, staged `===` and array/filter/`includes` probes each
failed the ratchet; the scanner now also fails if no `resolveTaskWorkflowIrSync` source exists.
The measured blind-spot table's inert-sync row now catches membership receivers containing tainted role
reads. The direct `store.resolveTaskWorkflowIrSync(...)` → `resolveLifecycleColumns` form remains out
of scope here and is separately protected by the core callsite allow-list test.