docs(backlog): sharpen test-infra triggers; add ART-S4-UX-PARITY with seed-list scope
Three trigger upgrades + one new entry, in priority order:
TEST-INFRA-001 — trigger upgraded from "before opening Sessie 5" to
"eerstvolgende sprint na merge van fix/timetable-stabilization", with
explicit dependency: ART-S4-UX-PARITY and all Sessie 5+ work gate on
TEST-INFRA-001 merge. Reden quote captures the three sprint-blok
incidents that proved jsdom-tests do not protect against schema /
filter / UX drift.
TEST-VISUAL-001 — scope expanded to use the prototype HTML at
`./resources/Crewli - Artist Timetable Management/` as the visual
baseline source (not hand-curated screenshots). Added explicit state
matrix per surface: PerformanceBlock 8 states + B2B + cascade-pulse;
PerformancePopover full detail; AddPerformanceDialog drag-mode +
button-mode; Wachtrij filtered/grouped axes. Trigger remains "tweede
toevoeging na TEST-CONTRACT-001" inside the TEST-INFRA-001 sprint.
TEST-CONTRACT-001 — unchanged. Trigger ("eerste e2e na TEST-INFRA-001
lands") was already correct.
ART-S4-UX-PARITY (NEW) — captures Bert's screenshot-report findings as
a seed list grouped A/B/C/D (component-shape / interaction / logic /
AddPerformanceDialog two-mode). Explicit pointer at the bottom to the
Phase A finalization report for the full 20-item itemisation with
severity ratings. Trigger gates Sessie 5 + all subsequent Artist-domain
frontend work behind ART-S4-UX-PARITY merge.
Spelling consistency: VEE-001 entry "formalized" → "formalised" to
match British-English already used elsewhere in the doc and now
mandated by the new CLAUDE.md "Diagnostic discipline" section.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2299,7 +2299,7 @@ positives from `useForm` colliding with Crewli's own `useFormDraft` /
|
||||
`useFormSteps` / `useFormSchemas` / `useFormFailures` composables.
|
||||
|
||||
Removed both packages from `apps/app/package.json`, regenerated
|
||||
`pnpm-lock.yaml`. Canonical form pattern formalized in `CLAUDE.md`
|
||||
`pnpm-lock.yaml`. Canonical form pattern formalised in `CLAUDE.md`
|
||||
"Forms" + `dev-docs/VUEXY_COMPONENTS.md` "Form validation" row.
|
||||
|
||||
**Refs:** Session 4 follow-up Step 1; `apps/app/src/components/timetable/AddPerformanceDialog.vue` and `apps/app/src/components/sections/CreateShiftDialog.vue` as canonical references.
|
||||
@@ -2333,10 +2333,13 @@ assertions are necessary but not sufficient.
|
||||
- CI strategy: Playwright CT runs on every PR (slow lane); Vitest unit
|
||||
on pre-commit (fast lane).
|
||||
|
||||
**Trigger:** **Before opening the Sessie 5 prompt.** Sessie 5 builds
|
||||
Engagement Detail (6 tabs, complex form state) and Portal pages
|
||||
(drag-to-reorder, file uploads). Adding more jsdom-based component
|
||||
tests for those surfaces compounds the migration cost.
|
||||
**Trigger:** Eerstvolgende sprint na merge van
|
||||
`fix/timetable-stabilization`. ART-S4-UX-PARITY en alle Sessie 5+ werk
|
||||
gates op merge van TEST-INFRA-001. Reden: drie incidenten in dit
|
||||
sprint-blok hebben aangetoond dat jsdom-tests structureel niet
|
||||
beschermen tegen schema drift, filter drift, of UX divergence. Verder
|
||||
bouwen zonder Playwright + visual regression infrastructure herhaalt het
|
||||
patroon.
|
||||
|
||||
**Refs:** Session 4 follow-up commits `5f135ec`..`985a5ab`,
|
||||
RFC-TIMETABLE D14/D20/D21, the new `apps/app/tests/utils/mountWithVuexy.ts`
|
||||
@@ -2387,23 +2390,98 @@ padding, or animation timing would not trigger a test failure even
|
||||
though the visual contract is broken.
|
||||
|
||||
**Wat:**
|
||||
- After TEST-INFRA-001 lands, add `apps/app/tests-pw/visual/PerformanceBlock.spec.ts`.
|
||||
- Render PerformanceBlock in each documented state: option, confirmed,
|
||||
contracted, cancelled; with/without capacity warn; with/without B2B
|
||||
dots; with/without conflict ring; mid-cascade-pulse.
|
||||
- Use Playwright's `toHaveScreenshot()` with locked viewport size and
|
||||
font rendering.
|
||||
- Commit baseline PNGs to `apps/app/tests-pw/visual/__screenshots__/`.
|
||||
- CI fails on diff > 0.1% pixel delta. Diffs trigger a manual review and
|
||||
baseline update if the change was intentional.
|
||||
- Visual regression baselines for PerformanceBlock states, generated from
|
||||
`./resources/Crewli - Artist Timetable Management/Crewli Timetable.html`
|
||||
rendered states (the canonical prototype is the baseline source — not
|
||||
hand-curated screenshots).
|
||||
- Compare implementation Playwright renders against prototype renders
|
||||
pixel-for-pixel (with reasonable tolerance for font rendering).
|
||||
- Failures block PR merge unless a baseline update is intentional and
|
||||
reviewed.
|
||||
- Apply to:
|
||||
- **PerformanceBlock** — 8 states minimum: option / requested /
|
||||
confirmed / contracted / cancelled × with-warning / without-warning;
|
||||
plus B2B dots and cascade-pulse at the millisecond keyframe peak.
|
||||
- **PerformancePopover** — open state with full detail (avatar +
|
||||
time/duration + multi-select status + advancing detail breakdown).
|
||||
- **AddPerformanceDialog** — drag-mode (pre-fill from drop target)
|
||||
and button-mode (name/genre/status/duration → land in Wachtrij).
|
||||
- **Wachtrij** — filtered / unfiltered / grouped / ungrouped.
|
||||
- Pin font hinting and OS rendering: run visual tests only on Linux CI
|
||||
runners (consistent rendering across Mac/Windows is expensive — Linux
|
||||
baseline is sufficient).
|
||||
- Commit baseline PNGs to `apps/app/tests-pw/visual/__screenshots__/`.
|
||||
- CI fails on diff > 0.1% pixel delta.
|
||||
|
||||
**Trigger:** Second addition to the TEST-INFRA-001 sprint. After
|
||||
TEST-CONTRACT-001 (contract-first, visual-regression-second).
|
||||
**Trigger:** Onderdeel van TEST-INFRA-001 sprint. Tweede toevoeging na
|
||||
TEST-CONTRACT-001.
|
||||
|
||||
**Refs:** RFC-TIMETABLE D21, D22, D25, D26.
|
||||
**Refs:** RFC-TIMETABLE D21, D22, D25, D26;
|
||||
`./resources/Crewli - Artist Timetable Management/` prototype.
|
||||
|
||||
---
|
||||
|
||||
### ART-S4-UX-PARITY — Timetable UX parity with prototype
|
||||
|
||||
**Aanleiding:** Manual browser testing after `fix/timetable-stabilization`
|
||||
merge surfaced substantial UX divergence between implementation and the
|
||||
canonical prototype at `./resources/Crewli - Artist Timetable Management/Crewli Timetable.html`.
|
||||
Mechanical layer (backend, schema, layout, scroll, sticky panes) is
|
||||
correct; visual and interaction layer diverge significantly.
|
||||
|
||||
**Categories of divergence (seed list — full gap analysis is sprint Phase A):**
|
||||
|
||||
- **A. Component-shape drift**
|
||||
- PerformanceBlock missing: genre tag, advancing progress bar,
|
||||
capacity-warning visibility
|
||||
- PerformancePopover missing: avatar, time+duration display,
|
||||
multi-select status, advancing detail breakdown
|
||||
- Wachtrij missing: multi-select status filter pills, status grouping
|
||||
with counts, grouping toggle, status/genre per item
|
||||
|
||||
- **B. Interaction drift**
|
||||
- Drag within timetable: not working
|
||||
- Drag between Wachtrij and timetable: not working
|
||||
- Click handling: inconsistent across blocks (some open popover, some
|
||||
don't)
|
||||
- Resize handles: missing entirely
|
||||
|
||||
- **C. Logic drift / rendering**
|
||||
- Conflict detection: not visually surfacing (red border + warning
|
||||
icon)
|
||||
- Lane stacking on overlap: behavior unverified against prototype
|
||||
- Capacity warnings: rendering unverified
|
||||
- Block rendered outside timetable bounds (Bert's screenshot 3)
|
||||
|
||||
- **D. AddPerformanceDialog two-mode behavior**
|
||||
- "Add via timetable click-drag" mode: should pre-fill
|
||||
stage/start/end/duration from drop target — currently always shows
|
||||
full form
|
||||
- "Add via +Optreden button" mode: should only ask
|
||||
name/genre/status/duration and land in Wachtrij — currently asks
|
||||
stage/time/lane
|
||||
|
||||
For the complete 20-item itemization with severity ratings, see the Phase
|
||||
A report in `feat/timetable-stabilization` finalization commit.
|
||||
|
||||
**Wat:**
|
||||
- Sprint Phase A: line-by-line gap analysis of prototype HTML vs. current
|
||||
implementation, produces an exhaustive table (this seed list above is
|
||||
incomplete on purpose — full audit belongs in the sprint, not in this
|
||||
BACKLOG entry)
|
||||
- Sprint Phase B: implement parity, prioritised by category and severity
|
||||
from Phase A
|
||||
- Sprint Phase C: visual regression baselines locked in via TEST-VISUAL-001
|
||||
- Sprint Phase D: manual prototype-side-by-side walkthrough by Bert before
|
||||
merge
|
||||
|
||||
**Trigger:** Direct na merge van TEST-INFRA-001 sprint. Sessie 5
|
||||
(Engagement Detail) en alle volgende Artist-domain frontend sprints
|
||||
gates op merge van ART-S4-UX-PARITY.
|
||||
|
||||
**Refs:** Bert's screenshot report (chat thread on stabilization merge
|
||||
readiness), `dev-docs/audits/PROTOTYPE-AUDIT-ARTIST-TIMETABLE.md`,
|
||||
RFC-TIMETABLE D8/D17/D18/D19/D20/D21/D22/D25/D26.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user