1. maxEvents limit enforcement:
- Changed trimming condition from `> maxEvents + TRIM_BATCH_SIZE` to `> maxEvents`
- Now properly trims to exactly maxEvents when limit is exceeded
- Fixed: tests "should trim old events when over limit", "should keep most recent events",
"should use default maxEvents of 10000"
2. Cross-Reference Integration:
- Modified CrossReferenceManager.processEvent() to create immediate worker->event links
- This ensures every event creates at least one cross-reference link
- Fixed: tests "should track cross-references when events are added",
"should create links between events and workers", "should find linked entities"
3. Bead collision detection:
- Fixed detectBeadCollision() to include all workers in collision set
- Added time window check: only detect collision if other worker was active within
BEAD_COLLISION_WINDOW_MS (60 seconds)
- Fixed: tests "should detect collision when multiple workers work on same bead",
"should not detect bead collision outside time window", "should update worker
collision types for bead collision"
All 103 tests now pass (1 skipped).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Port TUI ErrorGroupPanel to React — groups errors by signature with
occurrence count, affected workers, time span, severity badges, and
expandable detail cards. Links to similar past errors from fabric.db
error_history via /api/errors/history/similar endpoint.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>