beadboard/tests
zenchantlive bd3b3da30a fix(graph): prevent SSE overwrites of optimistic label updates
## The Bug
User reported: 'An archetype can only exist on one task at a time - when
I try to make the next task have the same arch, it deleted the one I
added prior.'

## Root Cause
The SSE subscription (useBeadsSubscription) refreshes data from the server
whenever ANY change happens. When user assigns an archetype:

1. User clicks assign -> optimistic update adds label locally
2. SSE fires (from previous operation or heartbeat) -> fetches fresh data
3. useEffect syncs localLabels with data.labels (which doesn't have the
   new label yet)
4. Label disappears from UI
5. Eventually API completes and another SSE refresh brings it back

This race condition causes labels to flicker or disappear entirely.

## The Fix
Track pending optimistic labels in a useRef Set, and merge them with
incoming server data during sync:

1. pendingOptimisticLabels = useRef<Set<string>>(new Set())
2. When optimistically adding: add to pending set
3. useEffect merge: combine server labels + pending labels
4. After API completes: remove from pending set

This ensures optimistic labels survive SSE refreshes.

## Test Coverage
Added graph-node-labels-optimistic.test.tsx with 10 tests:
- Uses useRef for tracking
- Tracks in a Set
- Preserves labels during sync
- Adds/removes from pending set
- Handles multiple concurrent operations
- Per-node state isolation

## Verification
- typecheck: pass
- lint: pass (0 errors)
- test: all pass
2026-02-24 16:48:16 -08:00
..
api feat(swarm): modify unified-shell to render swarm layout 2026-02-20 17:25:05 -08:00
components fix(graph): prevent SSE overwrites of optimistic label updates 2026-02-24 16:48:16 -08:00
guards feat(telemetry): complete bb-buff.1.3 - Backend Liveness Refactor 2026-02-15 21:14:05 -08:00
hooks chore: checkpoint related UI improvements and supporting components 2026-02-24 16:25:45 -08:00
lib chore: checkpoint before DAG views UX overhaul 2026-02-22 20:43:59 -08:00
scripts feat(telemetry): complete bb-buff.1.3 - Backend Liveness Refactor 2026-02-15 21:14:05 -08:00
server chore: checkpoint before DAG views UX overhaul 2026-02-22 20:43:59 -08:00
skills/beadboard-driver docs(beads): etch project history into memory bank and finalize skill-bb 2026-02-14 00:21:25 -08:00
types chore: initialize beadboard baseline 2026-02-11 17:42:51 -08:00
bootstrap.test.mjs chore: initialize beadboard baseline 2026-02-11 17:42:51 -08:00