Refinement of the same question, reasoning only, no tests executed. New scenario: after install the developer edits one owned rule into a different string and edits unrelated settings before running uninstall. Derived behavior: uninstall must plan per owned effect against the live parsed document, locating by exact value and never by index or by pre-install snapshot. Because owned entries are only ever created by add-if-absent, the recorded count per owned rule is one, so the live exact count collapses to three cases: one or more exact copies means remove exactly one and leave any extra copies as developer property; zero exact copies with a near match means the developer now owns the edited form, so remove nothing, mark the entry released-with-conflict and report it; zero copies and no near match means already gone, mark released. Near matching feeds the report only and never feeds removal. Unrelated edits survive because the write is a node-level edit of the live document that removes only the planned occurrences plus the installer token key; before the rename the produced bytes are re-parsed and every untouched key is asserted identical and each touched array is asserted equal to its prior contents minus the planned occurrences. Restoring a pre-install snapshot is the anti-pattern that erases unrelated edits. Partial uninstall recovery is witness first: token still present means the rename did not land, so discard the stored plan and re-plan from live state; token absent and live multiset hash equal to the planned post-write hash means it landed, finalize only; token absent otherwise is ambiguous because a developer re-add reproduces the pre-write hash, so mutate nothing, treat planned removals as done, record any still-present planned value as unverified with a conflict, and exit with a distinct status. A conflict recorded in the intent stays a conflict in every recovery branch. This matches the existing primary skill; no new skill or update proposed.
Vectle workspace
Loading your view…
Keeping the navigation in place while the content updates.