7.0 KiB
QA4 acceptance plan for client10 animation cleanup
Preparation only at printed QA HEAD0ffd92a8d2072a19fe61ac6edcf5097a9538fddd. Dispatch013223 routes source-only acceptance preparation; exact boundaries read in docs/agents/ROUTING-2026-10-27-client10-animation-cleanup.md from dispatch worktree. Client sole product writer. No runner execution or new browser/full/build/submit grant; implementation API/candidate not yet reviewed.
Before validation
- Review READY candidate, exact product SHA/source diff, focused scenarios, per-case failing mutants, meaningful real initialization wiring evidence and lint. Read current primary rules/KNOWN_ISSUES and candidate contract. Obtain separate exclusive bounded browser slot and fresh installed healthOK; START/task/progress before launch. Preserve preview3000/peer servers and use private own app/relay ports only.
- Preserve original QA boot failure, native-click A failure and strict historical362/360+394/390 overflow. Keep593fc055 causal runner and all original results immutable. Prepare a new uniquely named durable candidate runner/result, hash/record all inputs and list dependencies in manifest; source/hash guards must identify the actual candidate and matching generated CSS. No fake application, installs/downloads/builds without routing. Verified genuine archive+Buffer mirror, actual application readiness, real disclaimer close UI, existing fixture-only identity, local relay/no events; block/log all other HTTP/WS, including media/trackers. No real account/signer/cloud/publishing.
Actual-app acceptance matrix (pending execution)
| Scenario | Entry/action | Required observation |
|---|---|---|
| 360x800, default motion | Fresh actual-app navigation, disclaimer through native UI, fixture login, native Upload; one bounded wheel to original saved rectangle if reachable | No intervention: native point(46.375,592.4375) hits INPUT#check-comments and toggles exactly once; retain exact checkbox rectangles and modal/document scroll before click. If geometry differs, report it and stop exact-coordinate comparison; do not silently replace with a convenient point. |
| 390x844, default motion | Same actual UI Upload flow | Measure input rectangle and native center hit/toggle, associated label target size, close and focus restoration; record control rather than assert historical360 coordinates apply. |
| 1280x720, default motion | Same actual UI Upload flow | Same measured native input/control/close-focus checks, no mobile coordinate assumption. |
| 360x800, reduced motion | Fresh context with browser reduced-motion preference, same actual UI | Input reachable/toggles once; app visible, no stuck transient context; record actual computed animations. Do not require an animationend event when CSS suppresses animation. |
Every viewport records innerWidth/documentElement.clientWidth/documentElement.scrollWidth/body.scrollWidth plus component rectangles, scroll positions, ordered elementsFromPoint at original six checkbox sample points where applicable, computed app/sidebar/modal animation/stacking/pointer state, native event composedPath and checked before/after. Require strict document width<=viewport as a distinct original assertion, with each failure retained. A width failure must be reported independently of native-click recovery; never relax tolerance or label whole mobile baseline all-green. No app.fade-in removal or other causal B intervention in candidate acceptance: success must come from product initialization itself. Prior failed-A/passed-B remains historical evidence and is not a requirement for the fixed candidate to fail again.
Capture Tab/focus-visible containment and close-focus restoration using native keyboard events with unchanged real UI, critical target rectangles and vertical reachability. Report exact number of Tab steps and element identities; stop if focus escapes. Input16x16 alone is not total associated-label target size/AA compliance. No unsupported zoom or real-device claim; horizontal scroll/zoom coverage only if explicitly included in the bounded run grant. Keep dimensions separate from usability and original overflow diagnosis.
Animation lifecycle controls
Client focused regressions own deterministic helper/wiring behavior; QA reviews those results before using browser budget. Each retained new case needs its own failing mutant per routing. Candidate API determines the smallest real-module control harness; never claim a module harness is actual-app acceptance.
- Late initialization: native finished interface animation exists before actual cleanup installation. Record native animationend timestamp and real listener/helper initialization timestamp; require finished fade-in/delay cleanup and original input reachability. Instrument transparently before navigation, forwarding original listener registration arguments. If natural app ordering does not exercise late-init, report boundary; do not force delays/retry to manufacture a passing assertion. Use approved deterministic real-module scenario for that branch.
- Active initialization: still-running matching entrance keeps class/delay until genuine finish/cancel; record native animation state and completion event. Future matching animation retains animation until completion. No synthetic animationend, arbitrary sleep, timeout extension or forced layout.
- Cancellation: genuine cancellation cleans only the matching supported transient state. Distinguish runtime event semantics from a helper test event model; report whichever was measured.
- Unrelated animation/classes remain; thumbnail cleanup keeps its existing target/data-attribute contract; repeated initialization does not duplicate listener effects/resources. Review existing controlled regressions/mutants for these rather than invent additional app navigation solely to repeat their coverage.
- Reduced-motion CSS may yield no animation object/event; review expected initialization behavior in candidate contract and independently record actual browser state. Do not assume no event is a product defect without matching accepted contract.
Stop, release and reporting
One bounded pass only as granted; stop at first readiness/network/geometry/runtime hard blocker, preserve natural exit and partial counts, no retries or assertion weakening. Discrete strict-width failure remains FAIL even if other authorized measurements continue. Close only owned context/browser/relay/server; relay events must remain0. Record START/endUTC, exact command/SHA/hashes, browser/version/viewports, named checks/pass/fail/unexecuted counts, page/network errors and explicit cleanup evidence plus RELEASE/task/progress. New defect goes to dispatch for ownership; no QA CSS/product/helper/config/test patch.
Remaining gates: READY/candidate review, fresh slot+health, actual candidate execution, unchanged normal landing/build/artifact proof by assigned owner, independent acceptance as routed. Source-only plan executes0 checks and proves no fixed behavior. Missed cleanup demonstrated in prior controlled runs; original horizontal overflow, FirefoxCI, real-device/AA/live playback qualification remain open.