test(ysync): repro tests for review bugs 01-07 + v2 items-wire e2e port (miss 11)
The 2026-07-02 sync review (docs/features/ysync-review, ysync-review branch)
found 7 bugs and that the two-tab e2e only exercised the DEAD legacy scalar
wire. This lands plan doc 15 in full; results + empirical findings in doc 16.
- tests/collab/browser-entry-v2.ts (+build.mjs): the PRODUCTION v2 stack
bundled for e2e (connectKicadDoc + attachKicadCollab, kdoc_* keys), with
in-page renderActiveDoc/singleSeedRender/driftReport helpers and yjs forced
to ONE copy (the two web pnpm workspaces otherwise bundle two
instanceof-incompatible instances).
- tests/kicad/ysync-two-tab.spec.ts: pl_editor green baseline (A↔B edits,
ITEM-level drift silence) + divergent-uuid adopt; bug-01 pcb/ee fresh-room
repros (Chromium-only: two kicad_editor tabs exceed Firefox's per-process
wasm budget); bug-06 concurrent-seed race; bug-03 Y-half.
- tests/kicad/ysync-repros-{pcbnew,eeschema}.spec.ts: bugs 02/03/05 + the
bug-04 matrix (anchor-centred fp rotation, pad resize, endpoint drag,
symbol rotation, Value-field edit), each with green landed-preconditions;
the "local move emits" controls double as headless-emit probes — GREEN on
both tools, so every emit-dependent repro is a live test.fail.
- wasm/bindings: 7 local-edit test hooks via real commits
(CallAfter+COROUTINE) — TestRemoveItem/TestRotateItem (both tools,
dispatched in the merged image), TestSetPadSize/TestMoveEndpoint (pcbnew),
TestSetFieldText (eeschema).
- web/standalone ysync-repros.test.ts: bug-01 units (C++-faithful fake gating
emit on ensureBridge) + bug-07a/b (stale DOWN hook, real sheet-manager gap).
- web/pcbjam-shared bump: bug-03/06 unit repros.
Convention: every repro asserts the CORRECT behavior and is expected-fail
(test.fail/it.fails) naming its bug doc; a fix flips it to "unexpected pass",
forcing marker removal — the repro becomes the regression test. Every
expected failure verified (JSON reporter) to fail at its documented assert.
Suite state: 39 passed / 0 failed / 0 flaky / 5 skipped (2 firefox guards,
2 pre-existing legacy two-tab skips, 1 pre-existing roundtrip fixme).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DPfrVhfYgPPgtawjSssZfn
This commit is contained in:
parent
80135a99ac
commit
4e92baf5d0
12 changed files with 2030 additions and 1 deletions
|
|
@ -304,3 +304,36 @@ Button positions (relative to canvas):
|
|||
shim ablated*. **To do:** sweep the real apps (modals, nested fibers, long sleeps,
|
||||
pthread pool) with each shim ablated; if all stay green, drop the shim injection and
|
||||
these pins. Until proven, they stay injected (belt-and-suspenders).
|
||||
|
||||
## Collab e2e — legacy vs v2 bundles, and repro markers
|
||||
|
||||
Two esbuild bundles (`npm run build:collab`, rebuilt by the specs' `beforeAll`):
|
||||
|
||||
- `apps/kicad/collab-bundle.js` — the LEGACY scalar wire (`startCollab` /
|
||||
`kicadCollabSnapshot/Apply` / `onDelta`). Dead in production (nothing registers
|
||||
`onDelta`); driven by the pre-existing `*-collab.spec.ts` two-tab tests. Kept only
|
||||
until the scalar wire is deleted.
|
||||
- `apps/kicad/collab-bundle-v2.js` — the PRODUCTION v2 "items" stack
|
||||
(`bindKicadCollab` over `kicadCollabSnapshotItems/ApplyItems/onItems`, Y keys
|
||||
`kdoc_*`), from `collab/browser-entry-v2.ts`. Driven by `kicad/ysync-two-tab.spec.ts`.
|
||||
The build aliases `yjs` to ONE copy (the two web pnpm workspaces otherwise bundle two,
|
||||
and Y types are instanceof-checked).
|
||||
|
||||
### ysync repro tests
|
||||
|
||||
`kicad/ysync-two-tab.spec.ts`, `kicad/ysync-repros-{pcbnew,eeschema}.spec.ts` reproduce
|
||||
the bugs of the 2026-07-02 Yjs⇄KiCad sync review (`docs/features/ysync-review/` on the
|
||||
`ysync-review` branch; unit-level repros live in
|
||||
`web/pcbjam-shared/test/ysync-repros.test.ts` and
|
||||
`web/standalone/src/wasm/collab/ysync-repros.test.ts`).
|
||||
|
||||
Convention: a repro asserts the CORRECT behavior and is marked expected-fail
|
||||
(`test.fail()` / vitest `it.fails`) with a comment naming the bug doc. The suite stays
|
||||
green while the bug is open; fixing the bug flips the repro to "unexpected pass",
|
||||
forcing the marker's removal — the repro becomes the regression test. Green companion
|
||||
tests pin each repro's preconditions (harness, apply path, emit path) so an expected
|
||||
failure can only come from the bug itself. The "local move emits" controls double as
|
||||
the headless-emit probes gating the emit-dependent repros.
|
||||
|
||||
Follow-up (tracked in review miss 11): once the v2 specs are trusted, un-skip/retire
|
||||
the legacy two-tab specs together with the legacy wire.
|
||||
|
|
|
|||
Loading…
Reference in a new issue