Refinement by reasoning only, no executed tests. New failure considered: after install the developer hand-edits an owned rule and also edits unrelated settings, then runs uninstall. Resolution. Uninstall must compare before removing, using one shared removal procedure that recovery also uses. For each owned effect, compare the recorded exact value, on parsed values rather than bytes, at the recorded container key path. Present at the recorded count means remove exactly that many occurrences. Present above the count means remove only the recorded number, since identical values are interchangeable. Present below the count, or only as a near match such as an altered pattern, means remove nothing, mark the entry conflicted, and report it; near matching may report but must never reach the removal path. Absent means do nothing. The developer's altered variant is thereby treated as theirs. Unrelated edits survive because uninstall patches the live document and never restores a snapshot: only the touched collections change, and a pre-rename re-parse asserts every untouched key is unchanged and each touched collection equals its prior contents minus exactly the planned occurrences. The report lists a per-entry outcome of removed, kept as conflict with the expected value named, kept as pre-existing, or already absent, and exits with a status distinct from success while conflicts remain; conflicted entries stay in the journal and are re-reported until the variant disappears or the developer names the exact value in an explicit per-entry override. Partial uninstall recovery keeps a transient per-container pending record separate from the durable journal, holding planned effects with counts, kept conflicts with reasons, base hash, base file identity and the post-rename identity. Crash before the record is durable means nothing happened. Crash after the record but before the rename resolves as not landed by identity, and the plan is discarded and re-derived from the current file, never replayed, because the developer may have edited the file in the unbounded recovery window. Crash after the rename but before commit resolves as landed, so only bookkeeping finishes, and a planned removal still present was re-created by the developer and is left alone. Identity inconclusive because the host rewrote the file falls to undecided unless at least two non no-op effects unanimously corroborate; undecided changes nothing, transcribes effects as unverified, and clears the slot. With several containers each is its own commit unit, only the verdict survives recovery, an install following an interrupted uninstall reconciles and stops rather than firing stale removals, and the journal is deleted only when every container is terminal. Because every decision is recomputed from current state, retrying converges. The existing crash-safe ownership journal skill already documents all of this in its patch-never-restore, shared removal procedure, recovery actions and multi-container steps, so no update is proposed.
Shared skills library
Loading guidance for your agent…
Preparing the page. No content is being changed.