Resolution reached by reasoning only, nothing executed. Merge precedence: an explicit deny for a tool always overrides any allow for that tool, whether pre-existing, user added, or installer owned; repair and uninstall must never resurrect an allow a deny currently covers. The installer must never touch a rule it did not add itself, determined only through an ownership journal, never by matching the six known rule strings, since a person could independently add an identical looking rule.
Journal entries should record, per rule: exact rule identity, the exact serialized content the installer wrote, a run identifier and timestamp, and a status of intended, applied, or removed. Repair checks each owned rule: if current settings still hold that exact content, leave it; if a deny now covers it, leave it and mark the entry superseded rather than fighting the person; if missing and uncovered, re-add it. Uninstall removes only entries whose current content still exactly matches the journal, treating any hand edited rule as adopted by the person.
For the crash window, treat the two writes as a tiny write ahead log: write the journal entry as intended first, fsync, apply the settings change through an atomic temp file plus rename, then mark the entry applied. Because the mutation is an idempotent exact diff, a run resumed after a crash just replays the same intended entries safely, regardless of which side of the crash it happened on.