Bescherm excluded en locked topics tegen AI-deletion/merge #15

Merged
rve merged 1 commits from fix/protect-excluded-locked-topics into main 2026-06-04 06:29:34 +00:00
Owner

Summary

Defense-in-depth tegen verlies van excluded/locked topics tijdens Full Analysis.

  1. Client-side guard (src/lib/graphGuard.js) — pure filterAiActions strippt elke deletion/merge waarvan het target excluded (learning_relevance === 'exclude') of locked (relevance_locked === true) is. Merges waarin een protected topic de keepId is blijven door.
  2. Prompt-uitbreiding in SYSTEM_PROMPTS.full — expliciete PROTECTED TOPICS sectie.
  3. Payload-fixrelevance_locked nu ook in full-scope compactTopics.
  4. UI-feedbackGraphControls toont een ShieldCheck banner met aantal geblokkeerde destructieve acties, en een excluded-teller naast de Show-Excluded toggle.

Closes #14

Test plan

  • graphGuard.test.js — 13/13
  • npm test — 103/103
  • npm run build — groen
  • Live: Full Analysis op data met excluded+locked topics → banner verschijnt, topics blijven bestaan
  • Show Excluded Nodes toggle toont visible/hidden count

Recovery van 36 verloren topics

Na merge: in Admin → Graph → sidebar staat de "↩ Restore to ..." knop. Klikken zet localStorage-snapshot terug naar PocketBase. JSON-backup op disk blijft als reserve.

## Summary Defense-in-depth tegen verlies van excluded/locked topics tijdens Full Analysis. 1. **Client-side guard** (`src/lib/graphGuard.js`) — pure `filterAiActions` strippt elke deletion/merge waarvan het target excluded (`learning_relevance === 'exclude'`) of locked (`relevance_locked === true`) is. Merges waarin een protected topic de `keepId` is blijven door. 2. **Prompt-uitbreiding** in `SYSTEM_PROMPTS.full` — expliciete PROTECTED TOPICS sectie. 3. **Payload-fix** — `relevance_locked` nu ook in full-scope `compactTopics`. 4. **UI-feedback** — `GraphControls` toont een ShieldCheck banner met aantal geblokkeerde destructieve acties, en een excluded-teller naast de Show-Excluded toggle. Closes #14 ## Test plan - [x] graphGuard.test.js — 13/13 - [x] npm test — 103/103 - [x] npm run build — groen - [ ] Live: Full Analysis op data met excluded+locked topics → banner verschijnt, topics blijven bestaan - [ ] Show Excluded Nodes toggle toont visible/hidden count ## Recovery van 36 verloren topics Na merge: in Admin → Graph → sidebar staat de "↩ Restore to ..." knop. Klikken zet localStorage-snapshot terug naar PocketBase. JSON-backup op disk blijft als reserve.
rve added 1 commit 2026-06-04 06:26:36 +00:00
fix: bescherm excluded en locked topics tegen AI-deletion/merge
All checks were successful
On Pull Request to Main / test (pull_request) Successful in 46s
On Pull Request to Main / publish (pull_request) Successful in 1m26s
On Pull Request to Main / deploy-dev (pull_request) Successful in 1m49s
9395ea11fe
Topics met learning_relevance="exclude" of relevance_locked=true werden
door de Full Analysis stilletjes verwijderd: het model zag exclude als
"irrelevant" en stelde ze voor in actions.deletions / actions.merges,
en analyzeGraph paste die zonder filter toe. Het locked-vlaggetje werd
in full-scope payload niet eens meegestuurd, dus zelfs een nieuwe prompt
kon niet helpen.

Defense-in-depth fixes:

1. Pure graphGuard.filterAiActions strips elke deletion/merge waarvan de
   target excluded of locked is, vóór bulkSave. Merges waarin een
   protected topic juist de keepId is (canonical survivor) blijven door.

2. SYSTEM_PROMPTS.full krijgt een expliciete "PROTECTED TOPICS" sectie
   die exclude en locked topics als nooit-te-verwijderen markeert.

3. relevance_locked wordt nu ook in de full-scope compactTopics payload
   meegestuurd, zodat het model de vlag überhaupt ziet.

4. UI-feedback: GraphControls toont een ShieldCheck banner met aantal
   geblokkeerde acties na de analyze, en het excluded-aantal naast de
   "Show Excluded Nodes" toggle (visible/hidden).

5. 13 nieuwe Vitest cases dekken protected detection en alle drop/keep
   paden van filterAiActions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
rve merged commit 5f34a6f825 into main 2026-06-04 06:29:34 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rve/learning-platform#15