@@ -845,3 +845,20 @@ stale. Verified a FALSE POSITIVE: the compiled check evaluates the
845845whole compiled-check lifecycle ONLY when ` surface_condition ` changes
846846(` smartConditionChanged ` in ` storage-notes.ts ` ), which is correct — a body edit
847847doesn't change what the check tests, so re-compiling would be wasted work.
848+
849+ ### A52. Config loader trusts a PRESENT shared CortexKit config (legacy-read fallback is absent-only) — correct by construction
850+ An audit flagged that ` loadPluginConfigDetailed ` only reads the running harness's
851+ legacy config when the shared CortexKit base is ** absent** , so a shared config
852+ that is "present but conflicted" would be trusted (GC not suppressed) and could
853+ drive a destructive embedding sweep under a cross-harness conflict. Traced as a
854+ FALSE POSITIVE grounded in the migrator's invariant: a * present* shared config is
855+ NEVER a conflicted merge. ` migrateConfigFile ` (` migrate-config-location.ts ` )
856+ ** refuses on conflict** — when the OpenCode/Pi legacy pair differs, or a present
857+ target differs from legacy, it returns ` conflict: true ` and writes ** nothing** ,
858+ leaving the shared base absent → the absent-path legacy-read fallback handles it.
859+ The migrator only ever writes the shared file from a single source (or matching
860+ sources). So "shared present" means "the user's authoritative, conflict-free
861+ config" — trusting it (and letting GC run against the model it names) is correct,
862+ not a data-safety hole. The destructive-sweep scenario requires a conflicted
863+ shared file to exist, which the migrator structurally never produces. If a user
864+ hand-authors a shared config, that IS their authoritative intent by definition.
0 commit comments