Gergő Törcsvári
c30bcd4531
feat(collab): selection soft-locks — remote-selected items can't be dragged locally (collab-presence 0007)
...
While a peer has an item selected, local users can still select it for
inspection but move/drag/rotate/delete skip it with an infobar naming the
holder (native locked-item UX; enforced via the fork's PCBJAM_REMOTE_LOCK
query — kicad 81f9cd80fd, the epic's first fork-touching phase). Overlapping
holds (both grabbed inside the awareness propagation window) tie-break
deterministically: lowest (user.id, clientID) keeps the item, every losing
client auto-releases it.
- lock-tiebreak.ts: pure policy — beats(), remoteLocks() (union of ALL other
clients' selections incl. own user's other tabs, minus own-held-and-winning
uuids so the winner isn't blocked mid-release), contestedReleases()
- presence.ts: clients() (per-client view, no user dedupe) + self(); FIX for
a pre-existing flaky stack overflow — resolveCollision re-entered itself
synchronously via its own patch's awareness 'change' and could ping-pong on
stale same-user states (~1-in-3 unit runs); re-entrancy guard defers
re-resolution to the next genuine delivery
- presence-kicad.ts: locks ride the kicadCollabSetRemote snapshot
(`locks:[{uuid,name}]`); losing overlaps call kicadCollabReleaseSelection
- wasm bindings (both TUs + merged dispatch): g_locks map + fork query
install; kicadCollabReleaseSelection (cancelInteractive only when a tool
stack is live — bare ESC would clear the whole selection — then selective
RemoveItemFromSel + infobar + forced re-emit); kicadCollabTestGetLocked
- tests: lock-tiebreak unit suite; presence-locks e2e for both editors (real
move veto — pcbnew click+M hotkey since its default left-drag is
rubber-band select, eeschema real drag — each with an unlocked control);
two-tab tests/web/locks.spec.ts (lock propagation + deterministic tiebreak
release + unlock on clear, passing vs real partykit)
Spec: docs/features/collab-presence/0007 (closed repo).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lg5jwWuhFH5dL8hEcBDuP2
2026-07-07 21:09:24 +02:00
..
utils
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
3d-viewer-deadlock.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
3d-viewer-models.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
3d-viewer.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
appearance.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
calculator.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
contextmenu-scrollbar-pcbnew.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
contextmenu-scrollbar.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
dark-mode.spec.ts
test(screenshots): restore screenshot-neutrality after the determinism refactor
2026-07-07 11:35:39 +02:00
eeschema-collab.spec.ts
feat: adopt shared wasm wire schemas; resurrect collab e2e bundle (ysync 0008 A)
2026-06-12 14:05:40 +02:00
eeschema-crosshair.spec.ts
test(screenshots): restore screenshot-neutrality after the determinism refactor
2026-07-07 11:35:39 +02:00
eeschema-load.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
eeschema-perf.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
eeschema-subschema.spec.ts
feat(eeschema): hierarchical subschema collaboration — per-sheet rooms, lazy seed, save flow, embind + e2e
2026-06-17 17:55:30 +02:00
eeschema-ui.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
eeschema-url-regex.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
eeschema.spec.ts
test(screenshots): restore screenshot-neutrality after the determinism refactor
2026-07-07 11:35:39 +02:00
fixtures.ts
feat(wasm): occ-split — lazy occ_service worker; kicad_editor drops OCC (−31%)
2026-07-03 12:39:58 +02:00
frame-runtime.spec.ts
feat(wasm): kicad_editor — merge the pcbnew+eeschema kifaces into ONE bundle (Part 2)
2026-07-02 17:56:02 +02:00
gerbview-print.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
gerbview.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
items-bridge.spec.ts
feat: v2 per-item s-expr collab bridge in all three tools (ysync 0008 Stage C)
2026-06-12 14:05:40 +02:00
load-pcb-probe.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
load-pcb.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
occ-export.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
occ-probe.spec.ts
feat(wasm): occ-split — lazy occ_service worker; kicad_editor drops OCC (−31%)
2026-07-03 12:39:58 +02:00
pcbnew-collab.spec.ts
feat(wasm-eh): migrate the WASM build to native wasm exceptions (+ 3D viewer default-on)
2026-06-30 09:40:26 +02:00
pcbnew-move.spec.ts
test(screenshots): restore screenshot-neutrality after the determinism refactor
2026-07-07 11:35:39 +02:00
pcbnew-perf.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
pcbnew.spec.ts
test(screenshots): restore screenshot-neutrality after the determinism refactor
2026-07-07 11:35:39 +02:00
pl_editor-collab.spec.ts
feat: adopt shared wasm wire schemas; resurrect collab e2e bundle (ysync 0008 A)
2026-06-12 14:05:40 +02:00
pl_editor-load.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
pl_editor-uuid.spec.ts
feat(pl_editor): add KIID m_Uuid + (uuid) to .kicad_wks format (yjs-bridge commit 1)
2026-06-05 13:56:38 +02:00
pl_editor.spec.ts
test(screenshots): restore screenshot-neutrality after the determinism refactor
2026-07-07 11:35:39 +02:00
presence-eeschema.spec.ts
feat(collab): cross-app selection — eeschema symbol ⇄ pcbnew footprint ghost highlight (collab-presence 0006)
2026-07-07 21:09:23 +02:00
presence-locks-eeschema.spec.ts
feat(collab): selection soft-locks — remote-selected items can't be dragged locally (collab-presence 0007)
2026-07-07 21:09:24 +02:00
presence-locks-pcbnew.spec.ts
feat(collab): selection soft-locks — remote-selected items can't be dragged locally (collab-presence 0007)
2026-07-07 21:09:24 +02:00
presence-pcbnew.spec.ts
feat(collab): cross-app selection — eeschema symbol ⇄ pcbnew footprint ghost highlight (collab-presence 0006)
2026-07-07 21:09:23 +02:00
roundtrip.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
save-hook.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
symbol_editor.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
xface-probe.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00
ysync-libsymbols.spec.ts
feat(ysync): lib_symbols travel + layout save-sync (miss 08), TS hot-path opts (12), diff-on-rebind adopt (13) — doc 18
2026-07-06 08:57:58 +02:00
ysync-repros-eeschema.spec.ts
fix(ysync): review bugs 01–07 — listener registration, pad nets, child removals, dirty-set emit, targeted rebaseline, seed arbitration, stale hook (doc 17)
2026-07-06 08:57:57 +02:00
ysync-repros-pcbnew.spec.ts
fix(ysync): review bugs 01–07 — listener registration, pad nets, child removals, dirty-set emit, targeted rebaseline, seed arbitration, stale hook (doc 17)
2026-07-06 08:57:57 +02:00
ysync-two-tab.spec.ts
fix(ysync): review bugs 01–07 — listener registration, pad nets, child removals, dirty-set emit, targeted rebaseline, seed arbitration, stale hook (doc 17)
2026-07-06 08:57:57 +02:00
zoom-cursor.spec.ts
test(determinism): deterministic waits + stableShot screenshots; drop blind sleeps/ifs/retries
2026-07-07 10:50:24 +02:00