Files
ngit-grasp/tests
DanConwayDev c8d3829f29 feat: Implement multi-maintainer graph-based deletion algorithm
Replace simple cascade with graph-based retention algorithm:
- Build event dependency graph with nodes (events) and edges (references)
- EventGraph: directed graph tracking event relationships
- EventNode: tracks event ID, kind, references, and retention reasons
- Address resolution: maps kind 30617 addresses to event IDs

Re-evaluation engine:
- reevaluate_events_without_announcement(): determines which events to keep/delete
- Queries all events referencing deleted announcement
- Re-runs acceptance policy WITHOUT deleted announcement
- Tracks which announcements justify keeping each event
- Fail-secure defaults (missing events marked for deletion)

Graph traversal:
- BFS traversal from kept announcements
- Marks reachable events as "keep", unreachable as "delete"
- Configurable max depth (default: 100) to prevent infinite loops
- DFS-based circular dependency detection with recursion stack
- Handles anchored vs unanchored circular dependencies

Multi-maintainer logic:
- Events kept if they reference OTHER valid announcements
- Events deleted only when ALL referenced announcements are deleted
- Handles complex scenarios:
  - Two maintainers, one deletes → events preserved
  - Two maintainers, both delete → events deleted
  - Three+ maintainers with partial deletions
  - Deep dependency chains (5+ levels)
  - Isolated subgraphs

Integration:
- Replaces simple cascade in deletion_ops.rs
- determine_events_to_delete() uses graph algorithm
- Comprehensive logging of graph statistics and retention reasons
- Updated handle_deletion() in builder.rs

Tests: 31 tests covering:
- Graph building (12 unit tests)
  - Empty graph, single event, references
  - Circular references, transitive dependencies
  - Max depth handling
- Re-evaluation engine (6 unit tests)
  - Single/multi-maintainer scenarios
  - Announcement reference handling
  - Fail-secure defaults
- Graph traversal (7 unit tests)
  - Linear chains, isolated subgraphs
  - Circular dependency detection
  - Anchored vs unanchored cycles
  - Max depth exceeded
- Multi-maintainer integration (6 tests)
  - Two maintainers (one/both delete)
  - Three maintainers with partial deletions
  - Deep dependency chains
  - Selective retention based on maintainer subsets
2026-01-15 10:33:54 +00:00
..
2026-01-09 19:58:41 +00:00
2026-01-09 19:58:41 +00:00