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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user